=================================================================== RCS file: /cvs/texi2mdoc/main.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -p -r1.64 -r1.65 --- texi2mdoc/main.c 2015/03/07 11:49:32 1.64 +++ texi2mdoc/main.c 2015/03/09 18:54:38 1.65 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.64 2015/03/07 11:49:32 kristaps Exp $ */ +/* $Id: main.c,v 1.65 2015/03/09 18:54:38 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -65,6 +65,9 @@ static void domath(struct texi *, enum texicmd, size_t static void domenu(struct texi *, enum texicmd, size_t *); #endif static void domultitable(struct texi *, enum texicmd, size_t *); +#if 0 +static void donode(struct texi *, enum texicmd, size_t *); +#endif static void doquotation(struct texi *, enum texicmd, size_t *); static void dotable(struct texi *, enum texicmd, size_t *); static void dotop(struct texi *, enum texicmd, size_t *); @@ -234,12 +237,20 @@ static const struct texitok __texitoks[TEXICMD__MAX] = { domacro, "macro", 5 }, /* TEXICMD_MACRO */ { doaccent, "=", 1 }, /* TEXICMD_MACRON */ { domath, "math", 4 }, /* TEXICMD_MATH */ +#if 0 + { domenu, "menu", 4 }, /* TEXICMD_MENU */ +#else { doignblock, "menu", 4 }, /* TEXICMD_MENU */ +#endif { dosymbol, "minus", 5 }, /* TEXICMD_MINUS */ { domultitable, "multitable", 10 }, /* TEXICMD_MULTITABLE */ { doignline, "need", 4 }, /* TEXICMD_NEED */ { dosymbol, "\n", 1 }, /* TEXICMD_NEWLINE */ +#if 0 + { donode, "node", 4 }, /* TEXICMD_NODE */ +#else { doignline, "node", 4 }, /* TEXICMD_NODE */ +#endif { doignline, "noindent", 8 }, /* TEXICMD_NOINDENT */ { dosymbol, "O", 1 }, /* TEXICMD_O */ { dosymbol, "OE", 2 }, /* TEXICMD_OE */ @@ -546,6 +557,12 @@ dodefn(struct texi *p, enum texicmd cmd, size_t *pos) } break; } + + if (TEXICMD_END == peekcmd(p, *pos)) { + parseto(p, pos, blk); + return; + } + teximacro(p, "Bd -filled -offset indent"); parseto(p, pos, blk); teximacro(p, "Ed"); @@ -1456,9 +1473,30 @@ doquotation(struct texi *p, enum texicmd cmd, size_t * #if 0 static void +donode(struct texi *p, enum texicmd cmd, size_t *pos) +{ + + teximacroopen(p, "Ix"); + texiputchars(p, "Node"); + while (*pos < BUFSZ(p) && isspace(BUF(p)[*pos])) + advance(p, pos); + while (*pos < BUFSZ(p)) { + if (BUF(p)[*pos] == ',') + break; + else if (BUF(p)[*pos] == '\n') + break; + texiputchar(p, BUF(p)[*pos]); + advance(p, pos); + } + + teximacroclose(p); + advanceeoln(p, pos, 1); +} + +static void domenu(struct texi *p, enum texicmd cmd, size_t *pos) { - size_t start; + size_t start, sv; if (NULL != p->chapters) { doignblock(p, cmd, pos); @@ -1467,7 +1505,8 @@ domenu(struct texi *p, enum texicmd cmd, size_t *pos) advanceeoln(p, pos, 1); - teximacro(p, "Bl -tag -width Ds"); + texivspace(p); + teximacro(p, "Bl -tag -width Ds -compact"); while (*pos < BUFSZ(p)) { /* Read to next menu item. */ while (*pos < BUFSZ(p) && ismspace(BUF(p)[*pos])) @@ -1479,7 +1518,7 @@ domenu(struct texi *p, enum texicmd cmd, size_t *pos) advance(p, pos); while (*pos < BUFSZ(p) && ismspace(BUF(p)[*pos])) advance(p, pos); - start = *pos; + sv = start = *pos; while (*pos < BUFSZ(p) && ':' != BUF(p)[*pos]) advance(p, pos); if (*pos == BUFSZ(p) || *pos == start) { @@ -1487,9 +1526,15 @@ domenu(struct texi *p, enum texicmd cmd, size_t *pos) break; } teximacroopen(p, "It"); - teximacroopen(p, "Sx"); - for ( ; start < *pos; start++) + teximacroopen(p, "Lkx"); + texiputchar(p, '"'); + texiputchars(p, "Node"); + for (start = sv; start < *pos; start++) texiputchar(p, BUF(p)[start]); + texiputchars(p, "\" \""); + for (start = sv; start < *pos; start++) + texiputchar(p, BUF(p)[start]); + texiputchar(p, '"'); teximacroclose(p); teximacroclose(p);