source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: In the past, generating comment nodes stopped at the .TH or .Dd
@ 2019-11-09 14:40 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-11-09 14:40 UTC (permalink / raw)
  To: source

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-11-09 14:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-09 14:40 mandoc: In the past, generating comment nodes stopped at the .TH or .Dd schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).