source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: It turns out association of tbl spans with layout rows is
@ 2017-07-04 21:08 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2017-07-04 21:08 UTC (permalink / raw)
  To: source

Log Message:
-----------
It turns out association of tbl spans with layout rows is simpler than
i thought.  Fixing a bug in curs_addch(3) and minus 25 lines of code.

Modified Files:
--------------
    mandoc:
        tbl_data.c
    mandoc/regress/tbl/data:
        Makefile

Added Files:
-----------
    mandoc/regress/tbl/data:
        insert.in
        insert.out_ascii
        insert.out_lint

Revision Data
-------------
Index: tbl_data.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tbl_data.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -Ltbl_data.c -Ltbl_data.c -u -p -r1.43 -r1.44
--- tbl_data.c
+++ tbl_data.c
@@ -196,9 +196,7 @@ tbl_data(struct tbl_node *tbl, int ln, c
 {
 	struct tbl_row	*rp;
 	struct tbl_cell	*cp;
-	struct tbl_span	*sp, *spi;
-	struct tbl_dat	*dp;
-	int		 have_data, spans;
+	struct tbl_span	*sp;
 
 	rp = (sp = tbl->last_span) == NULL ? tbl->first_row :
 	    sp->pos == TBL_SPAN_DATA && sp->layout->next != NULL ?
@@ -206,66 +204,40 @@ tbl_data(struct tbl_node *tbl, int ln, c
 
 	assert(rp != NULL);
 
-	sp = newspan(tbl, ln, rp);
-
 	if ( ! strcmp(p, "_")) {
+		sp = newspan(tbl, ln, rp);
 		sp->pos = TBL_SPAN_HORIZ;
 		return;
 	} else if ( ! strcmp(p, "=")) {
+		sp = newspan(tbl, ln, rp);
 		sp->pos = TBL_SPAN_DHORIZ;
 		return;
 	}
-	sp->pos = TBL_SPAN_DATA;
-
-	while (p[pos] != '\0')
-		getdata(tbl, sp, ln, p, &pos);
 
 	/*
-	 * If this span contains some data,
-	 * make sure at least part of it gets printed.
+	 * If the layout row contains nothing but horizontal lines,
+	 * allocate an empty span for it and assign the current span
+	 * to the next layout row accepting data.
 	 */
 
-	have_data = 0;
-	cp = rp->first;
-	for (dp = sp->first; dp != NULL; dp = dp->next) {
-		if (dp->pos == TBL_DATA_DATA && *dp->string != '\0') {
-			if (cp == NULL ||
-			    (cp->pos != TBL_CELL_HORIZ &&
-			     cp->pos != TBL_CELL_DHORIZ))
-				return;
-			have_data = 1;
-		}
-		spans = dp->spans;
-		while (spans-- >= 0) {
-			if (cp != NULL)
-				cp = cp->next;
-		}
+	while (rp->next != NULL) {
+		if (rp->last->col + 1 < tbl->opts.cols)
+			break;
+		for (cp = rp->first; cp != NULL; cp = cp->next)
+			if (cp->pos != TBL_CELL_HORIZ &&
+			    cp->pos != TBL_CELL_DHORIZ)
+				break;
+		if (cp != NULL)
+			break;
+		sp = newspan(tbl, ln, rp);
+		sp->pos = TBL_SPAN_DATA;
+		rp = rp->next;
 	}
-	if (have_data == 0 || rp->next == NULL)
-		return;
 
-	/*
-	 * There is some data, but it would all get lost
-	 * due to horizontal lines in the layout.
-	 * Insert an empty span to consume the layout row.
-	 */
+	/* Process a real data row. */
 
-	tbl->last_span = sp->prev;
-	spi = newspan(tbl, ln, rp);
-	spi->pos = TBL_SPAN_DATA;
-	spi->next = sp;
-	tbl->last_span = sp;
-	sp->prev = spi;
-	sp->layout = rp->next;
-	cp = sp->layout->first;
-	for (dp = sp->first; dp != NULL; dp = dp->next) {
-		dp->layout = cp;
-		dp->spans = 0;
-		if (cp != NULL)
-			cp = cp->next;
-		while (cp != NULL && cp->pos == TBL_CELL_SPAN) {
-			dp->spans++;
-			cp = cp->next;
-		}
-	}
+	sp = newspan(tbl, ln, rp);
+	sp->pos = TBL_SPAN_DATA;
+	while (p[pos] != '\0')
+		getdata(tbl, sp, ln, p, &pos);
 }
--- /dev/null
+++ regress/tbl/data/insert.out_ascii
@@ -0,0 +1,22 @@
+TBL-DATA-INSERT(1)          General Commands Manual         TBL-DATA-INSERT(1)
+
+
+
+N\bNA\bAM\bME\bE
+       tbl-data-insert - insertion of empty spans for line-only layout rows
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       initial text
+
+       -----------------------
+       colum one   column two
+       -----------------------
+       left             right
+       -----------
+           right   left
+
+       final text
+
+
+
+OpenBSD                          July 4, 2017               TBL-DATA-INSERT(1)
--- /dev/null
+++ regress/tbl/data/insert.in
@@ -0,0 +1,21 @@
+.\" $OpenBSD: insert.in,v 1.1 2017/07/04 20:59:17 schwarze Exp $
+.TH TBL-DATA-INSERT 1 "July 4, 2017"
+.SH NAME
+tbl-data-insert \- insertion of empty spans for line-only layout rows
+.SH DESCRIPTION
+initial text
+.TS
+tab(:);
+_ _
+l l
+- -
+l r
+_ ^
+r.
+colum one:column two
+left:right
+not:printed
+right:left
+.TE
+.sp
+final text
Index: Makefile
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/tbl/data/Makefile,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lregress/tbl/data/Makefile -Lregress/tbl/data/Makefile -u -p -r1.3 -r1.4
--- regress/tbl/data/Makefile
+++ regress/tbl/data/Makefile
@@ -1,7 +1,7 @@
-# $OpenBSD: Makefile,v 1.1.1.1 2015/01/29 23:24:24 schwarze Exp $
+# $OpenBSD: Makefile,v 1.4 2017/07/04 20:59:17 schwarze Exp $
 
-REGRESS_TARGETS	 = blankline block_unclosed block_width block_wrap empty
-LINT_TARGETS	 = block_unclosed empty
+REGRESS_TARGETS  = blankline block_unclosed block_width block_wrap empty insert
+LINT_TARGETS	 = block_unclosed empty insert
 
 # groff-1.22.3 defect:
 # - When a table ends in the middle of a block,
--- /dev/null
+++ regress/tbl/data/insert.out_lint
@@ -0,0 +1,2 @@
+mandoc: insert.in:17:1: ERROR: ignoring data in spanned tbl cell: not
+mandoc: insert.in:17:5: ERROR: ignoring data in spanned tbl cell: printed
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-07-04 21:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-04 21:08 mandoc: It turns out association of tbl spans with layout rows is 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).