=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.226 retrieving revision 1.229 diff -u -p -r1.226 -r1.229 --- mandoc/roff.c 2014/08/19 16:52:32 1.226 +++ mandoc/roff.c 2014/09/07 00:21:53 1.229 @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.226 2014/08/19 16:52:32 schwarze Exp $ */ +/* $Id: roff.c,v 1.229 2014/09/07 00:21:53 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze @@ -60,6 +60,7 @@ enum rofft { ROFF_nh, ROFF_nr, ROFF_ns, + ROFF_pl, ROFF_ps, ROFF_rm, ROFF_rr, @@ -122,6 +123,7 @@ struct roff { int options; /* parse options */ int rstacksz; /* current size limit of rstack */ int rstackpos; /* position in rstack */ + int format; /* current file in mdoc or man format */ char control; /* control character */ }; @@ -255,6 +257,7 @@ static struct roffmac roffs[ROFF_MAX] = { { "nh", roff_line_ignore, NULL, NULL, 0, NULL }, { "nr", roff_nr, NULL, NULL, 0, NULL }, { "ns", roff_line_ignore, NULL, NULL, 0, NULL }, + { "pl", roff_line_ignore, NULL, NULL, 0, NULL }, { "ps", roff_line_ignore, NULL, NULL, 0, NULL }, { "rm", roff_rm, NULL, NULL, 0, NULL }, { "rr", roff_rr, NULL, NULL, 0, NULL }, @@ -456,6 +459,7 @@ roff_reset(struct roff *r) { roff_free1(r); + r->format = r->options & (MPARSE_MDOC | MPARSE_MAN); r->control = 0; } @@ -475,6 +479,7 @@ roff_alloc(struct mparse *parse, int options) r = mandoc_calloc(1, sizeof(struct roff)); r->parse = parse; r->options = options; + r->format = options & (MPARSE_MDOC | MPARSE_MAN); r->rstackpos = -1; roffhash_init(); @@ -756,6 +761,15 @@ roff_parseln(struct roff *r, int ln, char **bufp, return(roff_parsetext(bufp, szp, pos, offs)); } + /* Skip empty request lines. */ + + if ((*bufp)[pos] == '"') { + mandoc_msg(MANDOCERR_COMMENT_BAD, r->parse, + ln, pos, NULL); + return(ROFF_IGN); + } else if ((*bufp)[pos] == '\0') + return(ROFF_IGN); + /* * If a scope is open, go to the child handler for that macro, * as it may want to preprocess before doing anything with it. @@ -1776,10 +1790,13 @@ roff_Dd(ROFF_ARGS) { const char *const *cp; - if (0 == ((MPARSE_MDOC | MPARSE_QUICK) & r->options)) + if ((r->options & (MPARSE_MDOC | MPARSE_QUICK)) == 0) for (cp = __mdoc_reserved; *cp; cp++) roff_setstr(r, *cp, NULL, 0); + if (r->format == 0) + r->format = MPARSE_MDOC; + return(ROFF_CONT); } @@ -1788,10 +1805,13 @@ roff_TH(ROFF_ARGS) { const char *const *cp; - if (0 == (MPARSE_QUICK & r->options)) + if ((r->options & MPARSE_QUICK) == 0) for (cp = __man_reserved; *cp; cp++) roff_setstr(r, *cp, NULL, 0); + if (r->format == 0) + r->format = MPARSE_MAN; + return(ROFF_CONT); } @@ -2305,6 +2325,13 @@ roff_strdup(const struct roff *r, const char *p) res[(int)ssz] = '\0'; return(res); +} + +int +roff_getformat(const struct roff *r) +{ + + return(r->format); } /*