From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]); by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id ff905753; for ; Sat, 28 Feb 2015 03:42:29 -0500 (EST) Date: Sat, 28 Feb 2015 03:42:29 -0500 (EST) Message-Id: <6779931779900454951.enqueue@fantadrom.bsd.lv> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: texi2mdoc: Have @math mode properly interpret commands and match X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Have @math mode properly interpret commands and match squiggly brackets. Modified Files: -------------- texi2mdoc: extern.h main.c util.c Revision Data ------------- Index: main.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/main.c,v retrieving revision 1.52 retrieving revision 1.53 diff -Lmain.c -Lmain.c -u -p -r1.52 -r1.53 --- main.c +++ main.c @@ -690,13 +690,13 @@ doinline(struct texi *p, enum texicmd cm } 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); } @@ -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 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 texicm { p->ign++; - parsebracket(p, pos); + parsebracket(p, pos, 0); p->ign--; } Index: extern.h =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/extern.h,v retrieving revision 1.18 retrieving revision 1.19 diff -Lextern.h -Lextern.h -u -p -r1.18 -r1.19 --- extern.h +++ extern.h @@ -417,7 +417,7 @@ void advanceto(struct texi *, size_t *, char **argparse(struct texi *, size_t *, size_t *, size_t); int parsearg(struct texi *, size_t *, size_t); -void parsebracket(struct texi *, size_t *); +void parsebracket(struct texi *, size_t *, int); void parsestdin(struct texi *); void parsefile(struct texi *, const char *, int); int parselinearg(struct texi *, size_t *); Index: util.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/util.c,v retrieving revision 1.17 retrieving revision 1.18 diff -Lutil.c -Lutil.c -u -p -r1.17 -r1.18 --- util.c +++ util.c @@ -719,9 +719,9 @@ parsearg(struct texi *p, size_t *pos, si * This will stop in the event of EOF or if we're not at a bracket. */ void -parsebracket(struct texi *p, size_t *pos) +parsebracket(struct texi *p, size_t *pos, int dostack) { - size_t end, sv; + size_t end, sv, stack; enum texicmd cmd; struct teximacro *macro; @@ -732,12 +732,25 @@ parsebracket(struct texi *p, size_t *pos return; advance(p, pos); + stack = 0; while ((*pos = advancenext(p, pos)) < BUFSZ(p)) { switch (BUF(p)[*pos]) { case ('}'): + if (stack > 0) { + stack--; + advance(p, pos); + texiputchar(p, '}'); + continue; + } advance(p, pos); return; case ('{'): + if (dostack) { + stack++; + advance(p, pos); + texiputchar(p, '{'); + continue; + } if (0 == p->ign) texiwarn(p, "unexpected \"{\""); advance(p, pos); @@ -874,7 +887,7 @@ parselinearg(struct texi *p, size_t *pos } if (*pos < BUFSZ(p) && '{' == BUF(p)[*pos]) - parsebracket(p, pos); + parsebracket(p, pos, 0); else if (*pos < BUFSZ(p) && '\n' != BUF(p)[*pos]) parsesingle(p, pos); else -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv