source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Get rid of the useless FATAL error "child violates parent
@ 2014-07-30 17:06 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2014-07-30 17:06 UTC (permalink / raw)
  To: source

Log Message:
-----------
Get rid of the useless FATAL error "child violates parent syntax".
When finding items outside lists, simply skip them and throw an ERROR.
Handle subsections before the first section instead of bailing out.

Modified Files:
--------------
    mdocml:
        mandoc.h
        mdoc_macro.c
        mdoc_term.c
        mdoc_validate.c
        read.c

Revision Data
-------------
Index: mdoc_validate.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_validate.c,v
retrieving revision 1.234
retrieving revision 1.235
diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.234 -r1.235
--- mdoc_validate.c
+++ mdoc_validate.c
@@ -66,7 +66,6 @@ struct	valids {
 
 static	int	 check_count(struct mdoc *, enum mdoc_type,
 			enum check_lvl, enum check_ineq, int);
-static	int	 check_parent(PRE_ARGS, enum mdoct, enum mdoc_type);
 static	void	 check_text(struct mdoc *, int, int, char *);
 static	void	 check_argv(struct mdoc *,
 			struct mdoc_node *, struct mdoc_argv *);
@@ -124,13 +123,10 @@ static	int	 pre_bl(PRE_ARGS);
 static	int	 pre_dd(PRE_ARGS);
 static	int	 pre_display(PRE_ARGS);
 static	int	 pre_dt(PRE_ARGS);
-static	int	 pre_it(PRE_ARGS);
 static	int	 pre_literal(PRE_ARGS);
 static	int	 pre_obsolete(PRE_ARGS);
 static	int	 pre_os(PRE_ARGS);
 static	int	 pre_par(PRE_ARGS);
-static	int	 pre_sh(PRE_ARGS);
-static	int	 pre_ss(PRE_ARGS);
 static	int	 pre_std(PRE_ARGS);
 
 static	v_post	 posts_an[] = { post_an, NULL };
@@ -176,12 +172,10 @@ static	v_pre	 pres_d1[] = { pre_display,
 static	v_pre	 pres_dl[] = { pre_literal, pre_display, NULL };
 static	v_pre	 pres_dd[] = { pre_dd, NULL };
 static	v_pre	 pres_dt[] = { pre_dt, NULL };
-static	v_pre	 pres_it[] = { pre_it, pre_par, NULL };
+static	v_pre	 pres_it[] = { pre_par, NULL };
 static	v_pre	 pres_obsolete[] = { pre_obsolete, NULL };
 static	v_pre	 pres_os[] = { pre_os, NULL };
 static	v_pre	 pres_pp[] = { pre_par, NULL };
-static	v_pre	 pres_sh[] = { pre_sh, NULL };
-static	v_pre	 pres_ss[] = { pre_ss, NULL };
 static	v_pre	 pres_std[] = { pre_std, NULL };
 
 static	const struct valids mdoc_valids[MDOC_MAX] = {
@@ -189,8 +183,8 @@ static	const struct valids mdoc_valids[M
 	{ pres_dd, posts_dd },			/* Dd */
 	{ pres_dt, posts_dt },			/* Dt */
 	{ pres_os, posts_os },			/* Os */
-	{ pres_sh, posts_sh },			/* Sh */
-	{ pres_ss, posts_ss },			/* Ss */
+	{ NULL, posts_sh },			/* Sh */
+	{ NULL, posts_ss },			/* Ss */
 	{ pres_pp, posts_pp },			/* Pp */
 	{ pres_d1, posts_d1 },			/* D1 */
 	{ pres_dl, posts_dl },			/* Dl */
@@ -550,22 +544,6 @@ check_text(struct mdoc *mdoc, int ln, in
 }
 
 static int
-check_parent(PRE_ARGS, enum mdoct tok, enum mdoc_type t)
-{
-
-	assert(n->parent);
-	if ((MDOC_ROOT == t || tok == n->parent->tok) &&
-			(t == n->parent->type))
-		return(1);
-
-	mandoc_vmsg(MANDOCERR_SYNTCHILD, mdoc->parse,
-	    n->line, n->pos, "want parent %s",
-	    MDOC_ROOT == t ? "<root>" : mdoc_macronames[tok]);
-	return(0);
-}
-
-
-static int
 pre_display(PRE_ARGS)
 {
 	struct mdoc_node *node;
@@ -855,34 +833,6 @@ pre_bd(PRE_ARGS)
 	}
 
 	return(1);
-}
-
-static int
-pre_ss(PRE_ARGS)
-{
-
-	if (MDOC_BLOCK != n->type)
-		return(1);
-	return(check_parent(mdoc, n, MDOC_Sh, MDOC_BODY));
-}
-
-static int
-pre_sh(PRE_ARGS)
-{
-
-	if (MDOC_BLOCK != n->type)
-		return(1);
-	return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT));
-}
-
-static int
-pre_it(PRE_ARGS)
-{
-
-	if (MDOC_BLOCK != n->type)
-		return(1);
-
-	return(check_parent(mdoc, n, MDOC_Bl, MDOC_BODY));
 }
 
 static int
Index: mdoc_macro.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_macro.c,v
retrieving revision 1.137
retrieving revision 1.138
diff -Lmdoc_macro.c -Lmdoc_macro.c -u -p -r1.137 -r1.138
--- mdoc_macro.c
+++ mdoc_macro.c
@@ -424,6 +424,8 @@ rew_dohalt(enum mdoct tok, enum mdoc_typ
 			return(REWIND_NONE);
 		/* FALLTHROUGH */
 	case MDOC_Sh:
+		if (MDOC_ROOT == p->parent->type)
+			return(REWIND_THIS);
 		if (MDOC_Nd == p->tok || MDOC_Ss == p->tok ||
 		    MDOC_Sh == p->tok)
 			return(REWIND_MORE);
@@ -1034,6 +1036,22 @@ blk_full(MACRO_PROT_ARGS)
 	char		 *p;
 
 	nl = MDOC_NEWLINE & mdoc->flags;
+
+	/* Skip items outside lists. */
+
+	if (tok == MDOC_It) {
+		for (n = mdoc->last; n; n = n->parent)
+			if (n->tok == MDOC_Bl)
+				break;
+		if (n == NULL) {
+			mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,
+			    line, ppos, "It %s", buf + *pos);
+			if ( ! mdoc_elem_alloc(mdoc, line, ppos,
+			    MDOC_br, NULL))
+				return(0);
+			return(rew_elem(mdoc, MDOC_br));
+		}
+	}
 
 	/* Close out prior implicit scope. */
 
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.273
retrieving revision 1.274
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.273 -r1.274
--- mdoc_term.c
+++ mdoc_term.c
@@ -1770,6 +1770,9 @@ termp_ss_pre(DECL_ARGS)
 		term_fontpush(p, TERMFONT_BOLD);
 		p->offset = term_len(p, (p->defindent+1)/2);
 		break;
+	case MDOC_BODY:
+		p->offset = term_len(p, p->defindent);
+		break;
 	default:
 		break;
 	}
@@ -1781,7 +1784,7 @@ static void
 termp_ss_post(DECL_ARGS)
 {
 
-	if (MDOC_HEAD == n->type)
+	if (n->type == MDOC_HEAD || n->type == MDOC_BODY)
 		term_newln(p);
 }
 
Index: mandoc.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v
retrieving revision 1.145
retrieving revision 1.146
diff -Lmandoc.h -Lmandoc.h -u -p -r1.145 -r1.146
--- mandoc.h
+++ mandoc.h
@@ -141,6 +141,7 @@ enum	mandocerr {
 	MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
 	MANDOCERR_BADCHAR, /* skipping bad character */
 	MANDOCERR_MACRO, /* skipping unknown macro */
+	MANDOCERR_IT_STRAY, /* skipping item outside list */
 	MANDOCERR_TA_STRAY, /* skipping column outside column list */
 	MANDOCERR_BLK_NOTOPEN, /* skipping end of block that is not open */
 	MANDOCERR_BLK_BROKEN, /* inserting missing end of block: macro ... */
@@ -162,7 +163,6 @@ enum	mandocerr {
 	MANDOCERR_TOOLARGE, /* input too large */
 	MANDOCERR_COLUMNS, /* column syntax is inconsistent */
 	MANDOCERR_BADDISP, /* NOT IMPLEMENTED: .Bd -file */
-	MANDOCERR_SYNTCHILD, /* child violates parent syntax */
 	MANDOCERR_SYNTARGCOUNT, /* argument count wrong, violates syntax */
 	MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
 	MANDOCERR_SO_FAIL, /* .so request failed */
Index: read.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/read.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -Lread.c -Lread.c -u -p -r1.72 -r1.73
--- read.c
+++ read.c
@@ -185,6 +185,7 @@ static	const char * const	mandocerrs[MAN
 	"input stack limit exceeded, infinite loop?",
 	"skipping bad character",
 	"skipping unknown macro",
+	"skipping item outside list",
 	"skipping column outside column list",
 	"skipping end of block that is not open",
 	"inserting missing end of block",
@@ -206,7 +207,6 @@ static	const char * const	mandocerrs[MAN
 	"input too large",
 	"column syntax is inconsistent",
 	"NOT IMPLEMENTED: .Bd -file",
-	"child violates parent syntax",
 	"argument count wrong, violates syntax",
 	"NOT IMPLEMENTED: .so with absolute path or \"..\"",
 	".so request failed",
--
 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-07-30 17:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-30 17:06 mdocml: Get rid of the useless FATAL error "child violates parent 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).