* mdocml: Ignore mdoc(7) and man(7) macros inside tbl(7) code because they
@ 2014-12-16 23:44 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2014-12-16 23:44 UTC (permalink / raw)
To: source
Log Message:
-----------
Ignore mdoc(7) and man(7) macros inside tbl(7) code because they
would abort the table in an unclean way, causing assertion failures
found by jsg@.
Modified Files:
--------------
mdocml:
mandoc.1
mandoc.h
read.c
roff.c
Revision Data
-------------
Index: mandoc.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.h,v
retrieving revision 1.176
retrieving revision 1.177
diff -Lmandoc.h -Lmandoc.h -u -p -r1.176 -r1.177
--- mandoc.h
+++ mandoc.h
@@ -144,6 +144,7 @@ enum mandocerr {
MANDOCERR_TBLIGNDATA, /* ignore data in cell */
MANDOCERR_TBLBLOCK, /* data block still open */
MANDOCERR_TBLEXTRADAT, /* ignoring extra data cells */
+ MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
/* related to document structure and macros */
MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
Index: roff.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.c,v
retrieving revision 1.242
retrieving revision 1.243
diff -Lroff.c -Lroff.c -u -p -r1.242 -r1.243
--- roff.c
+++ roff.c
@@ -730,6 +730,7 @@ roff_parseln(struct roff *r, int ln, str
enum rofft t;
enum rofferr e;
int pos; /* parse point */
+ int spos; /* saved parse point for messages */
int ppos; /* original offset in buf->buf */
int ctl; /* macro line (boolean) */
@@ -800,14 +801,28 @@ roff_parseln(struct roff *r, int ln, str
return((*roffs[t].sub)(r, t, buf, ln, ppos, pos, offs));
}
+ /* No scope is open. This is a new request or macro. */
+
+ spos = pos;
+ t = roff_parse(r, buf->buf, &pos, ln, ppos);
+
+ /* Tables ignore most macros. */
+
+ if (r->tbl != NULL && (t == ROFF_MAX || t == ROFF_TS)) {
+ mandoc_msg(MANDOCERR_TBLMACRO, r->parse,
+ ln, pos, buf->buf + spos);
+ return(ROFF_IGN);
+ }
+
/*
- * Lastly, as we've no scope open, try to look up and execute
- * the new macro. If no macro is found, simply return and let
- * the compilers handle it.
+ * This is neither a roff request nor a user-defined macro.
+ * Let the standard macro set parsers handle it.
*/
- if ((t = roff_parse(r, buf->buf, &pos, ln, ppos)) == ROFF_MAX)
+ if (t == ROFF_MAX)
return(ROFF_CONT);
+
+ /* Execute a roff request or a user defined macro. */
assert(roffs[t].proc);
return((*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs));
Index: read.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/read.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -Lread.c -Lread.c -u -p -r1.104 -r1.105
--- read.c
+++ read.c
@@ -188,6 +188,7 @@ static const char * const mandocerrs[MAN
"ignore data in cell",
"data block still open",
"ignoring extra data cells",
+ "ignoring macro in table",
/* related to document structure and macros */
"input stack limit exceeded, infinite loop?",
Index: mandoc.1
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.1,v
retrieving revision 1.128
retrieving revision 1.129
diff -Lmandoc.1 -Lmandoc.1 -u -p -r1.128 -r1.129
--- mandoc.1
+++ mandoc.1
@@ -1266,6 +1266,7 @@ keeps the code more readable.
.It "ignore data in cell"
.It "data block still open"
.It "ignoring extra data cells"
+.It "ignoring macro in table"
.El
.Ss "Errors related to roff, mdoc, and man code"
.Bl -ohang
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2014-12-16 23:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-16 23:44 mdocml: Ignore mdoc(7) and man(7) macros inside tbl(7) code because they 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).