source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Parser reorg: Generate the first node on the roff level: .br
@ 2017-05-04 17:49 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2017-05-04 17:49 UTC (permalink / raw)
  To: source

Log Message:
-----------
Parser reorg:
Generate the first node on the roff level: .br 
Fix some column numbers in diagnostic messages while here.

Modified Files:
--------------
    mdocml:
        man_html.c
        man_macro.c
        man_term.c
        man_validate.c
        mandocdb.c
        mdoc_argv.c
        mdoc_html.c
        mdoc_macro.c
        mdoc_man.c
        mdoc_markdown.c
        mdoc_state.c
        mdoc_term.c
        mdoc_validate.c
        roff.c
        roff.h
    mdocml/regress/eqn/define:
        infinite.out_lint
        invalid.out_lint
    mdocml/regress/eqn/over:
        noarg.out_lint
    mdocml/regress/mdoc/Pp:
        arg.out_lint
    mdocml/regress/roff/cond:
        close.out_lint
        if.out_lint
    mdocml/regress/roff/de:
        escname.out_lint
        indir.out_lint
    mdocml/regress/roff/ig:
        basic.out_lint
    mdocml/regress/roff/it:
        badarg.out_lint
    mdocml/regress/roff/tr:
        args.out_lint
    mdocml/regress/tbl/data:
        block_unclosed.out_lint
        empty.out_lint

Revision Data
-------------
Index: badarg.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/it/badarg.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/it/badarg.out_lint -Lregress/roff/it/badarg.out_lint -u -p -r1.1 -r1.2
--- regress/roff/it/badarg.out_lint
+++ regress/roff/it/badarg.out_lint
@@ -1,2 +1,2 @@
-mandoc: badarg.in:12:1: ERROR: skipping request without numeric argument: it mytrap
-mandoc: badarg.in:15:1: ERROR: skipping request without numeric argument: it
+mandoc: badarg.in:12:2: ERROR: skipping request without numeric argument: it mytrap
+mandoc: badarg.in:15:2: ERROR: skipping request without numeric argument: it
Index: man_term.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_term.c,v
retrieving revision 1.192
retrieving revision 1.193
diff -Lman_term.c -Lman_term.c -u -p -r1.192 -r1.193
--- man_term.c
+++ man_term.c
@@ -116,7 +116,6 @@ static	const struct termact __termacts[M
 	{ pre_I, NULL, 0 }, /* I */
 	{ pre_alternate, NULL, 0 }, /* IR */
 	{ pre_alternate, NULL, 0 }, /* RI */
-	{ pre_sp, NULL, MAN_NOTEXT }, /* br */
 	{ pre_sp, NULL, MAN_NOTEXT }, /* sp */
 	{ pre_literal, NULL, 0 }, /* nf */
 	{ pre_literal, NULL, 0 }, /* fi */
@@ -458,7 +457,7 @@ pre_sp(DECL_ARGS)
 		}
 	}
 
-	if (n->tok == MAN_br)
+	if (n->tok == ROFF_br)
 		len = 0;
 	else if (n->child == NULL)
 		len = 1;
@@ -987,6 +986,18 @@ print_man_node(DECL_ARGS)
 		break;
 	}
 
+	if (n->tok < ROFF_MAX) {
+		switch (n->tok) {
+		case ROFF_br:
+			pre_sp(p, mt, n, meta);
+			break;
+		default:
+			abort();
+		}
+		return;
+	}
+
+	assert(n->tok >= MAN_TH && n->tok <= MAN_MAX);
 	if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
 		term_fontrepl(p, TERMFONT_NONE);
 
Index: mdoc_html.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_html.c,v
retrieving revision 1.280
retrieving revision 1.281
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.280 -r1.281
--- mdoc_html.c
+++ mdoc_html.c
@@ -237,7 +237,6 @@ static	const struct htmlmdoc __mdocs[MDO
 	{mdoc_quote_pre, mdoc_quote_post}, /* En */
 	{mdoc_xx_pre, NULL}, /* Dx */
 	{mdoc__x_pre, mdoc__x_post}, /* %Q */
-	{mdoc_sp_pre, NULL}, /* br */
 	{mdoc_sp_pre, NULL}, /* sp */
 	{mdoc__x_pre, mdoc__x_post}, /* %U */
 	{NULL, NULL}, /* Ta */
@@ -394,6 +393,16 @@ print_mdoc_node(MDOC_ARGS)
 			t = h->tag;
 		}
 		assert(h->tblt == NULL);
+		if (n->tok < ROFF_MAX) {
+			switch(n->tok) {
+			case ROFF_br:
+				mdoc_sp_pre(meta, n, h);
+				break;
+			default:
+				abort();
+			}
+			break;
+		}
 		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		if (mdocs[n->tok].pre != NULL &&
 		    (n->end == ENDBODY_NOT || n->child != NULL))
@@ -415,7 +424,9 @@ print_mdoc_node(MDOC_ARGS)
 	case ROFFT_EQN:
 		break;
 	default:
-		if (mdocs[n->tok].post == NULL || n->flags & NODE_ENDED)
+		if (n->tok < ROFF_MAX ||
+		    mdocs[n->tok].post == NULL ||
+		    n->flags & NODE_ENDED)
 			break;
 		(*mdocs[n->tok].post)(meta, n, h);
 		if (n->end != ENDBODY_NOT)
@@ -1005,7 +1016,7 @@ mdoc_bd_pre(MDOC_ARGS)
 		 */
 		switch (nn->tok) {
 		case MDOC_Sm:
-		case MDOC_br:
+		case ROFF_br:
 		case MDOC_sp:
 		case MDOC_Bl:
 		case MDOC_D1:
Index: mdoc_argv.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_argv.c,v
retrieving revision 1.111
retrieving revision 1.112
diff -Lmdoc_argv.c -Lmdoc_argv.c -u -p -r1.111 -r1.112
--- mdoc_argv.c
+++ mdoc_argv.c
@@ -263,7 +263,6 @@ static	const struct mdocarg __mdocargs[M
 	{ ARGSFL_DELIM, NULL }, /* En */
 	{ ARGSFL_DELIM, NULL }, /* Dx */
 	{ ARGSFL_NONE, NULL }, /* %Q */
-	{ ARGSFL_NONE, NULL }, /* br */
 	{ ARGSFL_NONE, NULL }, /* sp */
 	{ ARGSFL_NONE, NULL }, /* %U */
 	{ ARGSFL_NONE, NULL }, /* Ta */
Index: mdoc_term.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_term.c,v
retrieving revision 1.350
retrieving revision 1.351
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.350 -r1.351
--- mdoc_term.c
+++ mdoc_term.c
@@ -244,7 +244,6 @@ static	const struct termact __termacts[M
 	{ termp_quote_pre, termp_quote_post }, /* En */
 	{ termp_xx_pre, termp_xx_post }, /* Dx */
 	{ NULL, termp____post }, /* %Q */
-	{ termp_sp_pre, NULL }, /* br */
 	{ termp_sp_pre, NULL }, /* sp */
 	{ NULL, termp____post }, /* %U */
 	{ NULL, NULL }, /* Ta */
@@ -365,6 +364,17 @@ print_mdoc_node(DECL_ARGS)
 		term_tbl(p, n->span);
 		break;
 	default:
+		if (n->tok < ROFF_MAX) {
+			switch (n->tok) {
+			case ROFF_br:
+				termp_sp_pre(p, &npair, meta, n);
+				break;
+			default:
+				abort();
+			}
+			break;
+		}
+		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		if (termacts[n->tok].pre != NULL &&
 		    (n->end == ENDBODY_NOT || n->child != NULL))
 			chld = (*termacts[n->tok].pre)
@@ -386,7 +396,9 @@ print_mdoc_node(DECL_ARGS)
 	case ROFFT_EQN:
 		break;
 	default:
-		if (termacts[n->tok].post == NULL || n->flags & NODE_ENDED)
+		if (n->tok < ROFF_MAX ||
+		    termacts[n->tok].post == NULL ||
+		    n->flags & NODE_ENDED)
 			break;
 		(void)(*termacts[n->tok].post)(p, &npair, meta, n);
 
@@ -1504,7 +1516,7 @@ termp_bd_pre(DECL_ARGS)
 		 */
 		switch (nn->tok) {
 		case MDOC_Sm:
-		case MDOC_br:
+		case ROFF_br:
 		case MDOC_sp:
 		case MDOC_Bl:
 		case MDOC_D1:
@@ -1666,7 +1678,7 @@ termp_sp_pre(DECL_ARGS)
 		} else
 			len = 1;
 		break;
-	case MDOC_br:
+	case ROFF_br:
 		len = 0;
 		break;
 	default:
Index: roff.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -Lroff.h -Lroff.h -u -p -r1.42 -r1.43
--- roff.h
+++ roff.h
@@ -66,7 +66,9 @@ enum	roff_type {
 };
 
 enum	roff_tok {
-	ROFF_ab = 0,
+	ROFF_br = 0,
+	ROFF_MAX,
+	ROFF_ab,
 	ROFF_ad,
 	ROFF_af,
 	ROFF_aln,
@@ -86,7 +88,6 @@ enum	roff_tok {
 	ROFF_boxa,
 	ROFF_bp,
 	ROFF_BP,
-	/* MAN_br, MDOC_br */
 	ROFF_break,
 	ROFF_breakchar,
 	ROFF_brnl,
@@ -428,7 +429,6 @@ enum	roff_tok {
 	MDOC_En,
 	MDOC_Dx,
 	MDOC__Q,
-	MDOC_br,
 	MDOC_sp,
 	MDOC__U,
 	MDOC_Ta,
@@ -454,7 +454,6 @@ enum	roff_tok {
 	MAN_I,
 	MAN_IR,
 	MAN_RI,
-	MAN_br,
 	MAN_sp,
 	MAN_nf,
 	MAN_fi,
Index: man_html.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_html.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -Lman_html.c -Lman_html.c -u -p -r1.136 -r1.137
--- man_html.c
+++ man_html.c
@@ -92,7 +92,6 @@ static	const struct htmlman __mans[MAN_M
 	{ man_I_pre, NULL }, /* I */
 	{ man_alt_pre, NULL }, /* IR */
 	{ man_alt_pre, NULL }, /* RI */
-	{ man_br_pre, NULL }, /* br */
 	{ man_br_pre, NULL }, /* sp */
 	{ NULL, NULL }, /* nf */
 	{ NULL, NULL }, /* fi */
@@ -305,6 +304,18 @@ print_man_node(MAN_ARGS)
 			print_tblclose(h);
 
 		t = h->tag;
+		if (n->tok < ROFF_MAX) {
+			switch(n->tok) {
+			case ROFF_br:
+				man_br_pre(man, n, h);
+				break;
+			default:
+				abort();
+			}
+			break;
+		}
+
+		assert(n->tok >= MAN_TH && n->tok < MAN_MAX);
 		if (mans[n->tok].pre)
 			child = (*mans[n->tok].pre)(man, n, h);
 
Index: roff.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.c,v
retrieving revision 1.295
retrieving revision 1.296
diff -Lroff.c -Lroff.c -u -p -r1.295 -r1.296
--- roff.c
+++ roff.c
@@ -77,6 +77,7 @@ struct	roffreq {
 
 struct	roff {
 	struct mparse	*parse; /* parse point */
+	struct roff_man	*man; /* mdoc or man parser */
 	struct roffnode	*last; /* leaf of stack */
 	int		*rstack; /* stack of inverted `ie' values */
 	struct ohash	*reqtab; /* request lookup table */
@@ -146,7 +147,7 @@ static	void		 roffnode_push(struct roff 
 static	enum rofferr	 roff_block(ROFF_ARGS);
 static	enum rofferr	 roff_block_text(ROFF_ARGS);
 static	enum rofferr	 roff_block_sub(ROFF_ARGS);
-static	enum rofferr	 roff_brp(ROFF_ARGS);
+static	enum rofferr	 roff_br(ROFF_ARGS);
 static	enum rofferr	 roff_cblock(ROFF_ARGS);
 static	enum rofferr	 roff_cc(ROFF_ARGS);
 static	void		 roff_ccond(struct roff *, int, int);
@@ -209,6 +210,7 @@ static	enum rofferr	 roff_userdef(ROFF_A
 #define	ROFFNUM_WHITE	(1 << 1)  /* Skip whitespace in roff_evalnum(). */
 
 const char *__roff_name[MAN_MAX + 1] = {
+	"br",		NULL,
 	"ab",		"ad",		"af",		"aln",
 	"als",		"am",		"am1",		"ami",
 	"ami1",		"as",		"as1",		"asciify",
@@ -298,14 +300,14 @@ const char *__roff_name[MAN_MAX + 1] = {
 	"Fr",		"Ud",		"Lb",		"Lp",
 	"Lk",		"Mt",		"Brq",		"Bro",
 	"Brc",		"%C",		"Es",		"En",
-	"Dx",		"%Q",		"br",		"sp",
+	"Dx",		"%Q",		"sp",
 	"%U",		"Ta",		"ll",		NULL,
 	"TH",		"SH",		"SS",		"TP",
 	"LP",		"PP",		"P",		"IP",
 	"HP",		"SM",		"SB",		"BI",
 	"IB",		"BR",		"RB",		"R",
 	"B",		"I",		"IR",		"RI",
-	"br",		"sp",		"nf",		"fi",
+	"sp",		"nf",		"fi",
 	"RE",		"RS",		"DT",		"UC",
 	"PD",		"AT",		"in",		"ft",
 	"OP",		"EX",		"EE",		"UR",
@@ -314,6 +316,8 @@ const char *__roff_name[MAN_MAX + 1] = {
 const	char *const *roff_name = __roff_name;
 
 static	struct roffmac	 roffs[TOKEN_NONE] = {
+	{ roff_br, NULL, NULL, 0 },  /* br */
+	{ NULL, NULL, NULL, 0 },  /* ROFF_MAX */
 	{ roff_unsupp, NULL, NULL, 0 },  /* ab */
 	{ roff_line_ignore, NULL, NULL, 0 },  /* ad */
 	{ roff_line_ignore, NULL, NULL, 0 },  /* af */
@@ -337,7 +341,7 @@ static	struct roffmac	 roffs[TOKEN_NONE]
 	{ roff_unsupp, NULL, NULL, 0 },  /* break */
 	{ roff_line_ignore, NULL, NULL, 0 },  /* breakchar */
 	{ roff_line_ignore, NULL, NULL, 0 },  /* brnl */
-	{ roff_brp, NULL, NULL, 0 },  /* brp */
+	{ roff_br, NULL, NULL, 0 },  /* brp */
 	{ roff_line_ignore, NULL, NULL, 0 },  /* brpnl */
 	{ roff_unsupp, NULL, NULL, 0 },  /* c2 */
 	{ roff_cc, NULL, NULL, 0 },  /* cc */
@@ -610,6 +614,8 @@ roffhash_alloc(enum roff_tok mintok, enu
 	mandoc_ohash_init(htab, 8, offsetof(struct roffreq, name));
 
 	for (tok = mintok; tok < maxtok; tok++) {
+		if (roff_name[tok] == NULL)
+			continue;
 		sz = strlen(roff_name[tok]);
 		req = mandoc_malloc(sizeof(*req) + sz + 1);
 		req->tok = tok;
@@ -824,6 +830,7 @@ roff_man_alloc(struct roff *roff, struct
 	man->defos = defos;
 	man->quick = quick;
 	roff_man_alloc1(man);
+	roff->man = man;
 	return man;
 }
 
@@ -1473,7 +1480,7 @@ roff_parseln(struct roff *r, int ln, str
 
 	/* Execute a roff request or a user defined macro. */
 
-	return (*roffs[t].proc)(r, t, buf, ln, ppos, pos, offs);
+	return (*roffs[t].proc)(r, t, buf, ln, spos, pos, offs);
 }
 
 void
@@ -2633,7 +2640,7 @@ roff_T_(ROFF_ARGS)
 		mandoc_msg(MANDOCERR_BLK_NOTOPEN, r->parse,
 		    ln, ppos, "T&");
 	else
-		tbl_restart(ppos, ln, r->tbl);
+		tbl_restart(ln, ppos, r->tbl);
 
 	return ROFF_IGN;
 }
@@ -2760,11 +2767,15 @@ roff_TS(ROFF_ARGS)
 }
 
 static enum rofferr
-roff_brp(ROFF_ARGS)
+roff_br(ROFF_ARGS)
 {
-
-	buf->buf[pos - 1] = '\0';
-	return ROFF_CONT;
+	roff_elem_alloc(r->man, ln, ppos, ROFF_br);
+	if (buf->buf[pos] != '\0')
+		mandoc_vmsg(MANDOCERR_ARG_SKIP, r->parse, ln, pos,
+		    "%s %s", roff_name[tok], buf->buf + pos);
+	r->man->last->flags |= NODE_LINE | NODE_VALID | NODE_ENDED;
+	r->man->next = ROFF_NEXT_SIBLING;
+	return ROFF_IGN;
 }
 
 static enum rofferr
Index: man_validate.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_validate.c,v
retrieving revision 1.123
retrieving revision 1.124
diff -Lman_validate.c -Lman_validate.c -u -p -r1.123 -r1.124
--- man_validate.c
+++ man_validate.c
@@ -75,7 +75,6 @@ static	const v_check __man_valids[MAN_MA
 	NULL,       /* I */
 	NULL,       /* IR */
 	NULL,       /* RI */
-	post_vs,    /* br */
 	post_vs,    /* sp */
 	NULL,       /* nf */
 	NULL,       /* fi */
@@ -126,6 +125,17 @@ man_node_validate(struct roff_man *man)
 	case ROFFT_TBL:
 		break;
 	default:
+		if (n->tok < ROFF_MAX) {
+			switch (n->tok) {
+			case ROFF_br:
+				post_vs(man, n);
+				break;
+			default:
+				abort();
+			}
+			break;
+		}
+		assert(n->tok >= MAN_TH && n->tok < MAN_MAX);
 		cp = man_valids + n->tok;
 		if (*cp)
 			(*cp)(man, n);
Index: mdoc_validate.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_validate.c,v
retrieving revision 1.322
retrieving revision 1.323
diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.322 -r1.323
--- mdoc_validate.c
+++ mdoc_validate.c
@@ -227,7 +227,6 @@ static	const v_post __mdoc_valids[MDOC_M
 	post_en,	/* En */
 	post_xx,	/* Dx */
 	NULL,		/* %Q */
-	post_par,	/* br */
 	post_par,	/* sp */
 	NULL,		/* %U */
 	NULL,		/* Ta */
@@ -327,6 +326,18 @@ mdoc_node_validate(struct roff_man *mdoc
 
 		/* Call the macro's postprocessor. */
 
+		if (n->tok < ROFF_MAX) {
+			switch(n->tok) {
+			case ROFF_br:
+				post_par(mdoc);
+				break;
+			default:
+				abort();
+			}
+			break;
+		}
+
+		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		p = mdoc_valids + n->tok;
 		if (*p)
 			(*p)(mdoc);
@@ -1310,7 +1321,7 @@ post_bl_block(POST_ARGS)
 			switch (nc->tok) {
 			case MDOC_Pp:
 			case MDOC_Lp:
-			case MDOC_br:
+			case ROFF_br:
 				break;
 			default:
 				nc = NULL;
@@ -2064,7 +2075,7 @@ post_prevpar(POST_ARGS)
 
 	if (n->prev->tok != MDOC_Pp &&
 	    n->prev->tok != MDOC_Lp &&
-	    n->prev->tok != MDOC_br)
+	    n->prev->tok != ROFF_br)
 		return;
 	if (n->tok == MDOC_Bl && n->norm->Bl.comp)
 		return;
@@ -2085,7 +2096,7 @@ post_par(POST_ARGS)
 	struct roff_node *np;
 
 	np = mdoc->last;
-	if (np->tok != MDOC_br && np->tok != MDOC_sp)
+	if (np->tok != ROFF_br && np->tok != MDOC_sp)
 		post_prevpar(mdoc);
 
 	if (np->tok == MDOC_sp) {
@@ -2103,8 +2114,8 @@ post_par(POST_ARGS)
 		if (np->tok != MDOC_Sh && np->tok != MDOC_Ss)
 			return;
 	} else if (np->tok != MDOC_Pp && np->tok != MDOC_Lp &&
-	    (mdoc->last->tok != MDOC_br ||
-	     (np->tok != MDOC_sp && np->tok != MDOC_br)))
+	    (mdoc->last->tok != ROFF_br ||
+	     (np->tok != MDOC_sp && np->tok != ROFF_br)))
 		return;
 
 	mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
Index: mdoc_markdown.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_markdown.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -Lmdoc_markdown.c -Lmdoc_markdown.c -u -p -r1.17 -r1.18
--- mdoc_markdown.c
+++ mdoc_markdown.c
@@ -19,6 +19,7 @@
 #include <assert.h>
 #include <ctype.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include "mandoc_aux.h"
@@ -222,7 +223,6 @@ static	const struct md_act __md_acts[MDO
 	{ md_cond_body, md_pre_En, md_post_En, NULL, NULL }, /* En */
 	{ NULL, NULL, NULL, NULL, NULL }, /* Dx */
 	{ NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */
-	{ NULL, md_pre_br, NULL, NULL, NULL }, /* br */
 	{ NULL, md_pre_Pp, NULL, NULL, NULL }, /* sp */
 	{ NULL, md_pre_Lk, md_post_pc, NULL, NULL }, /* %U */
 	{ NULL, NULL, NULL, NULL, NULL }, /* Ta */
@@ -310,8 +310,7 @@ md_node(struct roff_node *n)
 	process_children = 1;
 	n->flags &= ~NODE_ENDED;
 
-	switch (n->type) {
-	case ROFFT_TEXT:
+	if (n->type == ROFFT_TEXT) {
 		if (n->flags & NODE_DELIMC)
 			outflags &= ~(MD_spc | MD_spc_force);
 		else if (outflags & MD_Sm)
@@ -321,14 +320,21 @@ md_node(struct roff_node *n)
 			outflags &= ~(MD_spc | MD_spc_force);
 		else if (outflags & MD_Sm)
 			outflags |= MD_spc;
-		break;
-	default:
+	} else if (n->tok < ROFF_MAX) {
+		switch (n->tok) {
+		case ROFF_br:
+			md_pre_br(n);
+			break;
+		default:
+			abort();
+		}
+	} else {
+		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		act = md_acts + n->tok;
 		cond = act->cond == NULL || (*act->cond)(n);
 		if (cond && act->pre != NULL &&
 		    (n->end == ENDBODY_NOT || n->child != NULL))
 			process_children = (*act->pre)(n);
-		break;
 	}
 
 	if (process_children && n->child != NULL)
Index: mandocdb.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandocdb.c,v
retrieving revision 1.246
retrieving revision 1.247
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.246 -r1.247
--- mandocdb.c
+++ mandocdb.c
@@ -302,7 +302,6 @@ static	const struct mdoc_handler __mdocs
 	{ NULL, 0, 0 },  /* En */
 	{ NULL, TYPE_Dx, NODE_NOSRC },  /* Dx */
 	{ NULL, 0, 0 },  /* %Q */
-	{ NULL, 0, 0 },  /* br */
 	{ NULL, 0, 0 },  /* sp */
 	{ NULL, 0, 0 },  /* %U */
 	{ NULL, 0, 0 },  /* Ta */
@@ -1547,8 +1546,11 @@ parse_mdoc(struct mpage *mpage, const st
 {
 
 	for (n = n->child; n != NULL; n = n->next) {
-		if (n->tok == TOKEN_NONE || n->flags & mdocs[n->tok].taboo)
+		if (n->tok == TOKEN_NONE ||
+		    n->tok < ROFF_MAX ||
+		    n->flags & mdocs[n->tok].taboo)
 			continue;
+		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		switch (n->type) {
 		case ROFFT_ELEM:
 		case ROFFT_BLOCK:
Index: mdoc_man.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_man.c,v
retrieving revision 1.109
retrieving revision 1.110
diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.109 -r1.110
--- mdoc_man.c
+++ mdoc_man.c
@@ -20,6 +20,7 @@
 
 #include <assert.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include "mandoc_aux.h"
@@ -238,7 +239,6 @@ static	const struct manact __manacts[MDO
 	{ cond_body, pre_en, post_en, NULL, NULL }, /* En */
 	{ NULL, NULL, NULL, NULL, NULL }, /* Dx */
 	{ NULL, NULL, post_percent, NULL, NULL }, /* %Q */
-	{ NULL, pre_br, NULL, NULL, NULL }, /* br */
 	{ NULL, pre_sp, post_sp, NULL, NULL }, /* sp */
 	{ NULL, NULL, post_percent, NULL, NULL }, /* %U */
 	{ NULL, NULL, NULL, NULL, NULL }, /* Ta */
@@ -651,7 +651,16 @@ print_node(DECL_ARGS)
 			outflags &= ~(MMAN_spc | MMAN_spc_force);
 		else if (outflags & MMAN_Sm)
 			outflags |= MMAN_spc;
+	} else if (n->tok < ROFF_MAX) {
+		switch (n->tok) {
+		case ROFF_br:
+			pre_br(meta, n);
+			break;
+		default:
+			abort();
+		}
 	} else {
+		assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 		/*
 		 * Conditionally run the pre-node action handler for a
 		 * node.
Index: man_macro.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_macro.c,v
retrieving revision 1.116
retrieving revision 1.117
diff -Lman_macro.c -Lman_macro.c -u -p -r1.116 -r1.117
--- man_macro.c
+++ man_macro.c
@@ -61,7 +61,6 @@ const	struct man_macro __man_macros[MAN_
 	{ in_line_eoln, MAN_SCOPED | MAN_JOIN }, /* I */
 	{ in_line_eoln, 0 }, /* IR */
 	{ in_line_eoln, 0 }, /* RI */
-	{ in_line_eoln, MAN_NSCOPED }, /* br */
 	{ in_line_eoln, MAN_NSCOPED }, /* sp */
 	{ in_line_eoln, MAN_NSCOPED }, /* nf */
 	{ in_line_eoln, MAN_NSCOPED }, /* fi */
@@ -328,8 +327,7 @@ in_line_eoln(MACRO_PROT_ARGS)
 	n = man->last;
 
 	for (;;) {
-		if (buf[*pos] != '\0' && (tok == MAN_br ||
-		    tok == MAN_fi || tok == MAN_nf)) {
+		if (buf[*pos] != '\0' && (tok == MAN_fi || tok == MAN_nf)) {
 			mandoc_vmsg(MANDOCERR_ARG_SKIP,
 			    man->parse, line, *pos, "%s %s",
 			    roff_name[tok], buf + *pos);
Index: mdoc_state.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_state.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -Lmdoc_state.c -Lmdoc_state.c -u -p -r1.5 -r1.6
--- mdoc_state.c
+++ mdoc_state.c
@@ -16,6 +16,7 @@
  */
 #include <sys/types.h>
 
+#include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -154,7 +155,6 @@ static	const state_handler __state_handl
 	NULL,		/* En */
 	NULL,		/* Dx */
 	NULL,		/* %Q */
-	NULL,		/* br */
 	NULL,		/* sp */
 	NULL,		/* %U */
 	NULL,		/* Ta */
@@ -168,9 +168,10 @@ mdoc_state(struct roff_man *mdoc, struct
 {
 	state_handler handler;
 
-	if (n->tok == TOKEN_NONE)
+	if (n->tok == TOKEN_NONE || n->tok < ROFF_MAX)
 		return;
 
+	assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
 	if ( ! (mdoc_macros[n->tok].flags & MDOC_PROLOGUE))
 		mdoc->flags |= MDOC_PBODY;
 
Index: mdoc_macro.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_macro.c,v
retrieving revision 1.220
retrieving revision 1.221
diff -Lmdoc_macro.c -Lmdoc_macro.c -u -p -r1.220 -r1.221
--- mdoc_macro.c
+++ mdoc_macro.c
@@ -197,7 +197,6 @@ const	struct mdoc_macro __mdoc_macros[MD
 	{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* En */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Dx */
 	{ in_line_eoln, MDOC_JOIN }, /* %Q */
-	{ in_line_eoln, 0 }, /* br */
 	{ in_line_eoln, 0 }, /* sp */
 	{ in_line_eoln, 0 }, /* %U */
 	{ phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
@@ -251,7 +250,7 @@ lookup(struct roff_man *mdoc, int from, 
 		if (res != TOKEN_NONE) {
 			if (mdoc_macros[res].flags & MDOC_CALLABLE)
 				return res;
-			if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll)
+			if (res != MDOC_sp && res != MDOC_ll)
 				mandoc_msg(MANDOCERR_MACRO_CALL,
 				    mdoc->parse, line, ppos, p);
 		}
@@ -682,8 +681,8 @@ blk_exp_close(MACRO_PROT_ARGS)
 			 * Stray .Ec without previous .Eo:
 			 * Break the output line, keep the arguments.
 			 */
-			roff_elem_alloc(mdoc, line, ppos, MDOC_br);
-			rew_elem(mdoc, MDOC_br);
+			roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+			rew_elem(mdoc, ROFF_br);
 		}
 	} else if (endbody == NULL) {
 		rew_last(mdoc, body);
@@ -1023,8 +1022,8 @@ blk_full(MACRO_PROT_ARGS)
 		if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) {
 			mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,
 			    line, ppos, "It %s", buf + *pos);
-			roff_elem_alloc(mdoc, line, ppos, MDOC_br);
-			rew_elem(mdoc, MDOC_br);
+			roff_elem_alloc(mdoc, line, ppos, ROFF_br);
+			rew_elem(mdoc, ROFF_br);
 			return;
 		}
 	}
Index: infinite.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/eqn/define/infinite.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/eqn/define/infinite.out_lint -Lregress/eqn/define/infinite.out_lint -u -p -r1.1 -r1.2
--- regress/eqn/define/infinite.out_lint
+++ regress/eqn/define/infinite.out_lint
@@ -1,4 +1,4 @@
-mandoc: infinite.in:9:1: ERROR: input stack limit exceeded, infinite loop?
-mandoc: infinite.in:15:1: ERROR: input stack limit exceeded, infinite loop?
-mandoc: infinite.in:21:1: ERROR: input stack limit exceeded, infinite loop?
-mandoc: infinite.in:27:1: ERROR: input stack limit exceeded, infinite loop?
+mandoc: infinite.in:9:2: ERROR: input stack limit exceeded, infinite loop?
+mandoc: infinite.in:15:2: ERROR: input stack limit exceeded, infinite loop?
+mandoc: infinite.in:21:2: ERROR: input stack limit exceeded, infinite loop?
+mandoc: infinite.in:27:2: ERROR: input stack limit exceeded, infinite loop?
Index: invalid.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/eqn/define/invalid.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/eqn/define/invalid.out_lint -Lregress/eqn/define/invalid.out_lint -u -p -r1.1 -r1.2
--- regress/eqn/define/invalid.out_lint
+++ regress/eqn/define/invalid.out_lint
@@ -1,5 +1,5 @@
-mandoc: invalid.in:9:1: WARNING: skipping empty request: define
-mandoc: invalid.in:15:1: WARNING: skipping empty request: define bruch
-mandoc: invalid.in:21:1: WARNING: skipping empty request: undef
-mandoc: invalid.in:27:1: WARNING: skipping empty request: tdefine
-mandoc: invalid.in:33:1: WARNING: skipping empty request: tdefine
+mandoc: invalid.in:9:2: WARNING: skipping empty request: define
+mandoc: invalid.in:15:2: WARNING: skipping empty request: define bruch
+mandoc: invalid.in:21:2: WARNING: skipping empty request: undef
+mandoc: invalid.in:27:2: WARNING: skipping empty request: tdefine
+mandoc: invalid.in:33:2: WARNING: skipping empty request: tdefine
Index: noarg.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/eqn/over/noarg.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/eqn/over/noarg.out_lint -Lregress/eqn/over/noarg.out_lint -u -p -r1.1 -r1.2
--- regress/eqn/over/noarg.out_lint
+++ regress/eqn/over/noarg.out_lint
@@ -1 +1 @@
-mandoc: noarg.in:9:1: WARNING: missing eqn box, using "": over
+mandoc: noarg.in:9:2: WARNING: missing eqn box, using "": over
Index: arg.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/mdoc/Pp/arg.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/mdoc/Pp/arg.out_lint -Lregress/mdoc/Pp/arg.out_lint -u -p -r1.1 -r1.2
--- regress/mdoc/Pp/arg.out_lint
+++ regress/mdoc/Pp/arg.out_lint
@@ -1,3 +1,3 @@
+mandoc: arg.in:11:5: ERROR: skipping all arguments: br drop this
 mandoc: arg.in:9:2: ERROR: skipping all arguments: Pp drop
-mandoc: arg.in:11:2: ERROR: skipping all arguments: br drop
 mandoc: arg.in:13:8: ERROR: skipping excess arguments: sp ... drop
Index: close.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/cond/close.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/cond/close.out_lint -Lregress/roff/cond/close.out_lint -u -p -r1.1 -r1.2
--- regress/roff/cond/close.out_lint
+++ regress/roff/cond/close.out_lint
@@ -1 +1 @@
-mandoc: close.in:14:1: ERROR: appending missing end of block: if
+mandoc: close.in:14:2: ERROR: appending missing end of block: if
Index: if.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/cond/if.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/cond/if.out_lint -Lregress/roff/cond/if.out_lint -u -p -r1.1 -r1.2
--- regress/roff/cond/if.out_lint
+++ regress/roff/cond/if.out_lint
@@ -1,2 +1,2 @@
-mandoc: if.in:14:1: WARNING: conditional request controls empty scope: if
-mandoc: if.in:16:1: WARNING: conditional request controls empty scope: if
+mandoc: if.in:14:2: WARNING: conditional request controls empty scope: if
+mandoc: if.in:16:2: WARNING: conditional request controls empty scope: if
Index: escname.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/de/escname.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/de/escname.out_lint -Lregress/roff/de/escname.out_lint -u -p -r1.1 -r1.2
--- regress/roff/de/escname.out_lint
+++ regress/roff/de/escname.out_lint
@@ -1,8 +1,8 @@
-mandoc: escname.in:21:1: ERROR: escaped character not allowed in a name: first\e
+mandoc: escname.in:21:2: ERROR: escaped character not allowed in a name: first\e
 mandoc: escname.in:31:19: ERROR: escaped character not allowed in a name: first\e
 mandoc: escname.in:32:2: ERROR: skipping unknown macro: .first
 mandoc: escname.in:34:2: ERROR: skipping unknown macro: .first\\second
 mandoc: escname.in:37:5: ERROR: skipping excess arguments: .de ... excess arguments
 mandoc: escname.in:40:1: ERROR: escaped character not allowed in a name: witharg\(
 mandoc: escname.in:42:1: ERROR: escaped character not allowed in a name: de\e
-mandoc: escname.in:42:1: WARNING: skipping empty request: de
+mandoc: escname.in:42:2: WARNING: skipping empty request: de
Index: indir.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/de/indir.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/de/indir.out_lint -Lregress/roff/de/indir.out_lint -u -p -r1.1 -r1.2
--- regress/roff/de/indir.out_lint
+++ regress/roff/de/indir.out_lint
@@ -1,4 +1,4 @@
 mandoc: indir.in:18:11: WARNING: undefined string, using "": myie
 mandoc: indir.in:25:6: WARNING: undefined string, using "": myim
-mandoc: indir.in:25:1: WARNING: skipping empty request: dei
-mandoc: indir.in:29:1: WARNING: skipping empty request: dei
+mandoc: indir.in:25:2: WARNING: skipping empty request: dei
+mandoc: indir.in:29:2: WARNING: skipping empty request: dei
Index: basic.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/ig/basic.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/ig/basic.out_lint -Lregress/roff/ig/basic.out_lint -u -p -r1.1 -r1.2
--- regress/roff/ig/basic.out_lint
+++ regress/roff/ig/basic.out_lint
@@ -1,3 +1,3 @@
 mandoc: basic.in:19:5: ERROR: skipping excess arguments: .ig ... excess
-mandoc: basic.in:24:1: ERROR: skipping end of block that is not open: ..
-mandoc: basic.in:26:1: ERROR: appending missing end of block: ig
+mandoc: basic.in:24:2: ERROR: skipping end of block that is not open: ..
+mandoc: basic.in:26:2: ERROR: appending missing end of block: ig
Index: args.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/roff/tr/args.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/roff/tr/args.out_lint -Lregress/roff/tr/args.out_lint -u -p -r1.1 -r1.2
--- regress/roff/tr/args.out_lint
+++ regress/roff/tr/args.out_lint
@@ -1,3 +1,3 @@
-mandoc: args.in:6:1: WARNING: skipping empty request: tr
+mandoc: args.in:6:2: WARNING: skipping empty request: tr
 mandoc: args.in:8:5: WARNING: odd number of characters in request: tr x
 mandoc: args.in:14:7: WARNING: odd number of characters in request: tr z
Index: empty.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/tbl/data/empty.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/tbl/data/empty.out_lint -Lregress/tbl/data/empty.out_lint -u -p -r1.1 -r1.2
--- regress/tbl/data/empty.out_lint
+++ regress/tbl/data/empty.out_lint
@@ -1 +1 @@
-mandoc: empty.in:6:1: ERROR: tbl without any data cells
+mandoc: empty.in:6:2: ERROR: tbl without any data cells
Index: block_unclosed.out_lint
===================================================================
RCS file: /home/cvs/mdocml/mdocml/regress/tbl/data/block_unclosed.out_lint,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/tbl/data/block_unclosed.out_lint -Lregress/tbl/data/block_unclosed.out_lint -u -p -r1.1 -r1.2
--- regress/tbl/data/block_unclosed.out_lint
+++ regress/tbl/data/block_unclosed.out_lint
@@ -1,2 +1,2 @@
-mandoc: block_unclosed.in:6:1: ERROR: data block open at end of tbl: TE
-mandoc: block_unclosed.in: ERROR: data block open at end of tbl: T&
+mandoc: block_unclosed.in:6:2: ERROR: data block open at end of tbl: TE
+mandoc: block_unclosed.in:29:2: ERROR: data block open at end of tbl: T&
--
 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:[~2017-05-04 17:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-04 17:49 mdocml: Parser reorg: Generate the first node on the roff level: .br 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).