From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (mandoc.bsd.lv [local]) by mandoc.bsd.lv (OpenSMTPD) with ESMTPA id 6ae1091d for ; Sat, 9 Nov 2019 09:40:19 -0500 (EST) Date: Sat, 9 Nov 2019 09:40:19 -0500 (EST) X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: In the past, generating comment nodes stopped at the .TH or .Dd X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Message-ID: <8d076998824e232e@mandoc.bsd.lv> Log Message: ----------- In the past, generating comment nodes stopped at the .TH or .Dd macro, which is usually close to the beginning of the file, right after the Copyright header comments. But espie@ found horrible input files in the textproc/fstrcmp port that generate lots of parse nodes before even getting to the header macro. In some formatters, comment nodes after some kinds of real content triggered assertions. So make sure generation of comment nodes stops once real content is encountered. Modified Files: -------------- mandoc: mandoc_parse.h roff.c Revision Data ------------- Index: roff.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/roff.c,v retrieving revision 1.366 retrieving revision 1.367 diff -Lroff.c -Lroff.c -u -p -r1.366 -r1.367 --- roff.c +++ roff.c @@ -771,6 +771,7 @@ void roff_reset(struct roff *r) { roff_free1(r); + r->options |= MPARSE_COMMENT; r->format = r->options & (MPARSE_MDOC | MPARSE_MAN); r->control = '\0'; r->escape = '\\'; @@ -800,7 +801,7 @@ roff_alloc(int options) r = mandoc_calloc(1, sizeof(struct roff)); r->reqtab = roffhash_alloc(0, ROFF_RENAMED); - r->options = options; + r->options = options | MPARSE_COMMENT; r->format = options & (MPARSE_MDOC | MPARSE_MAN); r->mstackpos = -1; r->rstackpos = -1; @@ -1246,7 +1247,7 @@ roff_expand(struct roff *r, struct buf * * in the syntax tree. */ - if (newesc != ASCII_ESC && r->format == 0) { + if (newesc != ASCII_ESC && r->options & MPARSE_COMMENT) { while (*ep == ' ' || *ep == '\t') ep--; ep[1] = '\0'; @@ -1815,8 +1816,10 @@ roff_parseln(struct roff *r, int ln, str roff_addtbl(r->man, ln, r->tbl); return e; } - if ( ! ctl) + if ( ! ctl) { + r->options &= ~MPARSE_COMMENT; return roff_parsetext(r, buf, pos, offs) | e; + } /* Skip empty request lines. */ @@ -1839,6 +1842,7 @@ roff_parseln(struct roff *r, int ln, str /* No scope is open. This is a new request or macro. */ + r->options &= ~MPARSE_COMMENT; spos = pos; t = roff_parse(r, buf->buf, &pos, ln, ppos); Index: mandoc_parse.h =================================================================== RCS file: /home/cvs/mandoc/mandoc/mandoc_parse.h,v retrieving revision 1.4 retrieving revision 1.5 diff -Lmandoc_parse.h -Lmandoc_parse.h -u -p -r1.4 -r1.5 --- mandoc_parse.h +++ mandoc_parse.h @@ -29,6 +29,7 @@ #define MPARSE_UTF8 (1 << 4) /* accept UTF-8 input */ #define MPARSE_LATIN1 (1 << 5) /* accept ISO-LATIN-1 input */ #define MPARSE_VALIDATE (1 << 6) /* call validation functions */ +#define MPARSE_COMMENT (1 << 7) /* save comments in the tree */ struct roff_meta; -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv