* Added comments to mkindex.c, to make its conversion easier.
git-svn-id: svn://svn.zoy.org/elk/trunk@134 55e467fa-43c5-0310-a8a2-de718669efc6
This commit is contained in:
parent
59c23788bb
commit
181c7bc863
|
@ -47,6 +47,7 @@ main(int ac, char **av) {
|
||||||
if ((fp = fopen(fn, "r")) == 0) {
|
if ((fp = fopen(fn, "r")) == 0) {
|
||||||
perror(fn); exit(1);
|
perror(fn); exit(1);
|
||||||
}
|
}
|
||||||
|
/* Traite tous les fichiers un par un */
|
||||||
doit(fp);
|
doit(fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
@ -60,17 +61,26 @@ doit(FILE *fp) {
|
||||||
int n, need_nl = 0;
|
int n, need_nl = 0;
|
||||||
|
|
||||||
line = 1;
|
line = 1;
|
||||||
|
/* Proceed line by line */
|
||||||
while (fgets(buf, 10000, fp) != NULL) {
|
while (fgets(buf, 10000, fp) != NULL) {
|
||||||
if (p = index(buf, '\n'))
|
if (p = index(buf, '\n'))
|
||||||
*p = 0;
|
*p = 0;
|
||||||
p = buf;
|
p = buf;
|
||||||
|
/* Proceed char by char */
|
||||||
while (*p) {
|
while (*p) {
|
||||||
if (*p == '@' && p[1] == '[') {
|
/* On cherche @[ , sinon on affiche le nouveau caractère */
|
||||||
|
if (*p != '@' || p[1] != '[') {
|
||||||
|
putchar(*p);
|
||||||
|
need_nl = 1;
|
||||||
|
p++;
|
||||||
start = p;
|
start = p;
|
||||||
|
} else {
|
||||||
p += 2;
|
p += 2;
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
|
/* @[. -> Ix */
|
||||||
case '.':
|
case '.':
|
||||||
macro = "Ix"; break;
|
macro = "Ix"; break;
|
||||||
|
/* @[! -> Ix */
|
||||||
case '!':
|
case '!':
|
||||||
macro = "Id"; break;
|
macro = "Id"; break;
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -80,45 +90,58 @@ doit(FILE *fp) {
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
q = inx;
|
q = inx;
|
||||||
|
/* On cherche ] */
|
||||||
while (*p != ']') {
|
while (*p != ']') {
|
||||||
if (*p == 0)
|
if (*p == 0)
|
||||||
error("missing ]");
|
error("missing ]");
|
||||||
|
/* Si ] est escapé, on l'imprime */
|
||||||
if (*p == '\\' && p[1] == ']')
|
if (*p == '\\' && p[1] == ']')
|
||||||
p++;
|
p++;
|
||||||
*q++ = *p++;
|
*q++ = *p++;
|
||||||
}
|
}
|
||||||
|
/* inx devient ce qu'il y avait entre [ ] */
|
||||||
if (q == inx)
|
if (q == inx)
|
||||||
error("empty index");
|
error("empty index");
|
||||||
*q = 0;
|
*q = 0;
|
||||||
|
/* Vire \f. '' `` \% de l'index et on le met dans arg */
|
||||||
eatfont(inx, arg);
|
eatfont(inx, arg);
|
||||||
|
/* Si le précédent caractère est un "(", on affiche "\\c" */
|
||||||
if (start > buf && start[-1] == '(')
|
if (start > buf && start[-1] == '(')
|
||||||
printf("\\c");
|
printf("\\c");
|
||||||
|
/* Si need_nl == 1, on saute une ligne */
|
||||||
if (need_nl)
|
if (need_nl)
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
/* on affiche .Ix ou .Id */
|
||||||
printf(".%s ", macro);
|
printf(".%s ", macro);
|
||||||
|
/* On bouffe le caractère suivant de l'input */
|
||||||
p++;
|
p++;
|
||||||
|
/* Si arg commence par '=', on l'affiche entre "" */
|
||||||
if (arg[0] == '=') {
|
if (arg[0] == '=') {
|
||||||
printf("\"%s\"", arg+1);
|
printf("\"%s\"", arg+1);
|
||||||
|
/* S'il reste du data, on saute une ligne et si c'est
|
||||||
|
une espace, on la saute sans l'afficher ; par
|
||||||
|
ailleurs au prochain coup ça sera pas la peine de
|
||||||
|
sauter une ligne */
|
||||||
if (*p) {
|
if (*p) {
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
need_nl = 0;
|
need_nl = 0;
|
||||||
if (*p == ' ')
|
if (*p == ' ')
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
/* Si arg est du genre "foo|bar", on affiche
|
||||||
|
"bar, foo"\nfoo bar */
|
||||||
} else if (q = index(arg, '|')) {
|
} else if (q = index(arg, '|')) {
|
||||||
*q = 0; q++;
|
*q = 0; q++;
|
||||||
printf("\"%s, %s\"\n%s %s", q, arg, arg, q);
|
printf("\"%s, %s\"\n%s %s", q, arg, arg, q);
|
||||||
need_nl = 1;
|
need_nl = 1;
|
||||||
} else {
|
} else {
|
||||||
|
/* Sinon on affiche "arg"\ninx */
|
||||||
printf("\"%s\"\n%s", arg, inx);
|
printf("\"%s\"\n%s", arg, inx);
|
||||||
need_nl = 1;
|
need_nl = 1;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
putchar(*p);
|
|
||||||
need_nl = 1;
|
|
||||||
p++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Si on a fini de parser, on saute une ligne */
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
need_nl = 0;
|
need_nl = 0;
|
||||||
line++;
|
line++;
|
||||||
|
@ -127,12 +150,16 @@ doit(FILE *fp) {
|
||||||
|
|
||||||
eatfont(char *from, char *to) {
|
eatfont(char *from, char *to) {
|
||||||
while (*from) {
|
while (*from) {
|
||||||
|
/* "\f." -> "" */
|
||||||
if (*from == '\\' && from[1] == 'f' && from[2]) {
|
if (*from == '\\' && from[1] == 'f' && from[2]) {
|
||||||
from += 3;
|
from += 3;
|
||||||
|
/* "''" -> "" */
|
||||||
} else if (*from == '\'' && from[1] == '\'') {
|
} else if (*from == '\'' && from[1] == '\'') {
|
||||||
from += 2;
|
from += 2;
|
||||||
|
/* "``" -> "" */
|
||||||
} else if (*from == '`' && from[1] == '`') {
|
} else if (*from == '`' && from[1] == '`') {
|
||||||
from += 2;
|
from += 2;
|
||||||
|
/* "\%" -> "" */
|
||||||
} else if (*from == '\\' && from[1] == '%') {
|
} else if (*from == '\\' && from[1] == '%') {
|
||||||
from += 2;
|
from += 2;
|
||||||
} else *to++ = *from++;
|
} else *to++ = *from++;
|
||||||
|
|
Loading…
Reference in New Issue