Херня. google literate programming. Не надо изобретать велосипед, всё давно изобретено... Ничто не мешает сразу в одном исходнике смешивать какой-то подвид sgml (xml как более узкое множество и неудобное для ручной правки) и какой-либо ЯВУ. Более того, редактор может сразу делать WYSWYG. А для diff и т.п. попросту отрезается часть ответственная за разметку чем-то не хитрым, вроде xsltproc. google docbook ещё. В svn естесственно должно попадать вместе с разметкой. Иначе разбираться с её версиями отдельно -- одуреешь. А вот svn diff должен во-первых выводить все строки (даже не изменившиеся), во-вторых потом должна отрезаться разметка, как сказано выше. Это не сложно. Ну и перед компиляцией разметку отрезать. Впрочем, её заранее можно завернуть в комментарии, которые тоже сделать частью и языка разметки и языка программирования. Весь вопрос за WYSWYG-редактором, на самом деле-то.
Почему выше я говорю sgml -- в моём представлении (La)TeX -- это ещё тот brainfuck... и всё что на нём основано. А xml имеет слишком жёсткие требования и не подходит для ручного набора (vs классический html 90-х годов, который, естесственно, ни разу не valid xml).
Ещё советую обратить взор на формат документации для perl. Не эталон, но просто для кругозора.
И ещё из собственного. Пример просто:
#ifdef MAKE_DOC
<section> <title id="blablabla"> file.c </title>
<simpara>Short description blablabla...</simpara>
<para>Blablabla blablabla blablabla, blablabla.</para>
<para>Blablabla <superscript>blabla</superscript> blabla, blabla
<link endterm="file.h" />... </para<
</section>
#else
#include <stdio.h>
int function(int x, int y)
{
....
}
#endif
Компилируется нормальным образом. А для документации делается cpp -DMAKE_DOC | xscltproc -o documentation.html format.xsl
[ZX]