=================================================================== RCS file: /cvs/texi2mdoc/main.c,v retrieving revision 1.50 retrieving revision 1.53 diff -u -p -r1.50 -r1.53 --- texi2mdoc/main.c 2015/02/26 10:41:30 1.50 +++ texi2mdoc/main.c 2015/02/28 08:41:59 1.53 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.50 2015/02/26 10:41:30 kristaps Exp $ */ +/* $Id: main.c,v 1.53 2015/02/28 08:41:59 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -614,8 +614,8 @@ doignblock(struct texi *p, enum texicmd cmd, size_t *p * Thus, we keep track of scopes for matching "end" blocks. */ while (stack > 0 && *pos < BUFSZ(p)) { - if (stack > 10) - abort(); + if (stack > 64) + texierr(p, "run-away nested stack?"); endt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, esz); startt = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, start, ssz); if (NULL == endt) { @@ -690,13 +690,13 @@ doinline(struct texi *p, enum texicmd cmd, size_t *pos } if (NULL == macro || p->literal || TEXILIST_TABLE == p->list) { - parsebracket(p, pos); + parsebracket(p, pos, 0); return; } teximacroopen(p, macro); p->seenws = 0; - parsebracket(p, pos); + parsebracket(p, pos, 0); texipunctuate(p, pos); teximacroclose(p); } @@ -728,7 +728,7 @@ doverb(struct texi *p, enum texicmd cmd, size_t *pos) break; advance(p, pos); } - if (*pos == BUFSZ(p) - 1) + if (*pos >= BUFSZ(p) - 1) return; texiputbuf(p, start, *pos); @@ -900,7 +900,7 @@ static void dobracket(struct texi *p, enum texicmd cmd, size_t *pos) { - parsebracket(p, pos); + parsebracket(p, pos, 0); } static void @@ -1328,35 +1328,8 @@ doquotation(struct texi *p, enum texicmd cmd, size_t * static void domath(struct texi *p, enum texicmd cmd, size_t *pos) { - size_t nest, start; - /* - * Math handling is different from everything else. - * We don't allow any subcomponents, and we ignore the rules in - * terms of @-commands. - * This departs from GNU's rules, but whatever. - */ - while (*pos < BUFSZ(p) && isws(BUF(p)[*pos])) - advance(p, pos); - if (*pos == BUFSZ(p) || '{' != BUF(p)[*pos]) - return; - advance(p, pos); - if (p->seenws && p->outcol && 0 == p->literal) - texiputchar(p, ' '); - p->seenws = 0; - for (nest = 1, start = *pos; *pos < BUFSZ(p) && nest > 0; ) { - if ('{' == BUF(p)[*pos]) - nest++; - else if ('}' == BUF(p)[*pos]) - if (0 == --nest) - continue; - advance(p, pos); - } - if (*pos == BUFSZ(p)) - return; - assert('}' == BUF(p)[*pos]); - texiputbuf(p, start, *pos); - advance(p, pos); + parsebracket(p, pos, 1); } static void @@ -1809,7 +1782,7 @@ doignbracket(struct texi *p, enum texicmd cmd, size_t { p->ign++; - parsebracket(p, pos); + parsebracket(p, pos, 0); p->ign--; }