source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Moved `Bl -compact' into cached data.
@ 2010-06-12 12:10 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2010-06-12 12:10 UTC (permalink / raw)
  To: source

Log Message:
-----------
Moved `Bl -compact' into cached data.  This allowed the removal of
scanning the argv list in print_bvspace(), and thus the parent pointer.

Modified Files:
--------------
    mdocml:
        mdoc.h
        mdoc_html.c
        mdoc_term.c
        mdoc_validate.c

Revision Data
-------------
Index: mdoc_validate.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_validate.c,v
retrieving revision 1.96
retrieving revision 1.97
diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.96 -r1.97
--- mdoc_validate.c
+++ mdoc_validate.c
@@ -532,7 +532,7 @@ pre_display(PRE_ARGS)
 static int
 pre_bl(PRE_ARGS)
 {
-	int		 i, width, offs, cmpt, dupl;
+	int		 i, width, offs, comp, dup;
 	enum mdoc_list	 lt;
 
 	if (MDOC_BLOCK != n->type) {
@@ -552,12 +552,12 @@ pre_bl(PRE_ARGS)
 	 */
 
 	assert(LIST__NONE == n->data.Bl.type);
-	offs = width = cmpt = -1;
+	offs = width = -1;
 
 	/* LINTED */
 	for (i = 0; n->args && i < (int)n->args->argc; i++) {
 		lt = LIST__NONE;
-		dupl = 0;
+		dup = comp = 0;
 		switch (n->args->argv[i].arg) {
 		/* Set list types. */
 		case (MDOC_Bullet):
@@ -595,27 +595,28 @@ pre_bl(PRE_ARGS)
 			break;
 		/* Set list arguments. */
 		case (MDOC_Compact):
-			if (cmpt >= 0) 
-				dupl++;
-			cmpt = i;
+			dup = n->data.Bl.comp;
+			comp = 1;
 			break;
 		case (MDOC_Width):
 			if (width >= 0)
-				dupl++;
+				dup++;
 			width = i;
 			break;
 		case (MDOC_Offset):
 			if (offs >= 0)
-				dupl++;
+				dup++;
 			offs = i;
 			break;
 		}
 
 		/* Check: duplicate auxiliary arguments. */
 
-		if (dupl)
-			if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP))
-				return(0);
+		if (dup && ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP))
+			return(0);
+
+		if (comp && ! dup)
+			n->data.Bl.comp = comp;
 
 		/* Check: multiple list types. */
 
@@ -631,7 +632,7 @@ pre_bl(PRE_ARGS)
 		/* The list type should come first. */
 
 		if (n->data.Bl.type == LIST__NONE)
-			if (width >= 0 || offs >= 0 || cmpt >= 0)
+			if (width >= 0 || offs >= 0 || n->data.Bl.comp)
 				if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST))
 					return(0);
 
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.81 -r1.82
--- mdoc_html.c
+++ mdoc_html.c
@@ -1036,6 +1036,7 @@ mdoc_it_pre(MDOC_ARGS)
 		bl = bl->parent;
 
 	type = bl->data.Bl.type;
+	comp = bl->data.Bl.comp;
 
 	/* Set default width and offset. */
 
@@ -1059,7 +1060,7 @@ mdoc_it_pre(MDOC_ARGS)
 	/* Get width, offset, and compact arguments. */
 
 	wp = -1;
-	for (comp = i = 0; bl->args && i < (int)bl->args->argc; i++) 
+	for (i = 0; bl->args && i < (int)bl->args->argc; i++) 
 		switch (bl->args->argv[i].arg) {
 		case (MDOC_Column):
 			wp = i; /* Save for later. */
@@ -1069,9 +1070,6 @@ mdoc_it_pre(MDOC_ARGS)
 			break;
 		case (MDOC_Offset):
 			a2offs(bl->args->argv[i].value[0], &offs);
-			break;
-		case (MDOC_Compact):
-			comp = 1;
 			break;
 		default:
 			break;
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.149
retrieving revision 1.150
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.149 -r1.150
--- mdoc_term.c
+++ mdoc_term.c
@@ -61,7 +61,6 @@ static	int	  arg_getattrs(const int *, i
 			const struct mdoc_node *);
 static	int	  arg_getattr(int, const struct mdoc_node *);
 static	void	  print_bvspace(struct termp *,
-			const struct mdoc_node *,
 			const struct mdoc_node *);
 static	void  	  print_mdoc_node(DECL_ARGS);
 static	void	  print_mdoc_nodelist(DECL_ARGS);
@@ -564,15 +563,15 @@ arg_getattrs(const int *keys, int *vals,
  * too.
  */
 static void
-print_bvspace(struct termp *p, 
-		const struct mdoc_node *bl, 
-		const struct mdoc_node *n)
+print_bvspace(struct termp *p, const struct mdoc_node *n)
 {
 	const struct mdoc_node	*nn;
 
-	/* FIXME: MDOC_Bd == bl->tok && bl->data.Bd.comp */
 	term_newln(p);
-	if (arg_hasattr(MDOC_Compact, bl))
+
+	if (MDOC_Bl == n->tok && n->data.Bl.comp)
+		return;
+	if (MDOC_Bd == n->tok && n->data.Bd.comp)
 		return;
 
 	/* Do not vspace directly after Ss/Sh. */
@@ -591,13 +590,13 @@ print_bvspace(struct termp *p, 
 
 	/* A `-column' does not assert vspace within the list. */
 
-	if (MDOC_Bl == bl->tok && LIST_column == bl->data.Bl.type)
+	if (MDOC_Bl == n->tok && LIST_column == n->data.Bl.type)
 		if (n->prev && MDOC_It == n->prev->tok)
 			return;
 
 	/* A `-diag' without body does not vspace. */
 
-	if (MDOC_Bl == bl->tok && LIST_diag == bl->data.Bl.type)
+	if (MDOC_Bl == n->tok && LIST_diag == n->data.Bl.type)
 		if (n->prev && MDOC_It == n->prev->tok) {
 			assert(n->prev->body);
 			if (NULL == n->prev->body->child)
@@ -646,7 +645,7 @@ termp_it_pre(DECL_ARGS)
 	enum mdoc_list		type;
 
 	if (MDOC_BLOCK == n->type) {
-		print_bvspace(p, n->parent->parent, n);
+		print_bvspace(p, n);
 		return(1);
 	}
 
@@ -1607,7 +1606,7 @@ termp_bd_pre(DECL_ARGS)
 	const struct mdoc_node	*nn;
 
 	if (MDOC_BLOCK == n->type) {
-		print_bvspace(p, n, n);
+		print_bvspace(p, n);
 		return(1);
 	} else if (MDOC_HEAD == n->type)
 		return(0);
Index: mdoc.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.h,v
retrieving revision 1.86
retrieving revision 1.87
diff -Lmdoc.h -Lmdoc.h -u -p -r1.86 -r1.87
--- mdoc.h
+++ mdoc.h
@@ -273,13 +273,14 @@ enum	mdoc_disp {
 };
 
 struct	mdoc_bd {
-	const char	 *offs;
-	enum mdoc_disp	  type;
-	int		  comp;
+	const char	 *offs; /* -offset */
+	enum mdoc_disp	  type; /* -ragged, etc. */
+	int		  comp; /* -compact */
 };
 
 struct	mdoc_bl {
-	enum mdoc_list	  type;
+	enum mdoc_list	  type; /* -tag, -enum, etc. */
+	int		  comp; /* -compact */
 };
 
 /* Node in AST. */
--
 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:[~2010-06-12 12:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-12 12:10 mdocml: Moved `Bl -compact' into cached data kristaps

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).