source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Let cells containing nothing but \^ extend the cell above.
@ 2018-11-25 21:18 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2018-11-25 21:18 UTC (permalink / raw)
  To: source

Log Message:
-----------
Let cells containing nothing but \^ extend the cell above.
Missing feature reported by Pali dot Rohar at gmail dot com.

Modified Files:
--------------
    mandoc:
        TODO
        tbl.7
        tbl_data.c
        tbl_html.c

Revision Data
-------------
Index: tbl.7
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tbl.7,v
retrieving revision 1.29
retrieving revision 1.30
diff -Ltbl.7 -Ltbl.7 -u -p -r1.29 -r1.30
--- tbl.7
+++ tbl.7
@@ -1,7 +1,7 @@
 .\"	$Id$
 .\"
 .\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\" purpose with or without fee is hereby granted, provided that the above
@@ -147,9 +147,9 @@ The combined cell as a whole consumes on
 of the corresponding data line.
 .It Cm a
 Left-justify a string and pad with one space.
-.It Cm ^
+.It Cm \(ha
 Vertically span rows from the last
-.Pf non- Cm ^
+.Pf non- Cm \(ha
 layout cell.
 It is an error to invoke a vertical span on the first layout line.
 Unlike a horizontal span, a vertical span consumes a data cell
@@ -231,7 +231,13 @@ Each data line consists of one or more d
 .Cm tab
 characters.
 .Pp
-If a data cells contains only the single character
+If a data cell contains only the two bytes
+.Ql \e\(ha ,
+the cell above spans to this row, as if the layout specification
+of this cell were
+.Cm \(ha .
+.Pp
+If a data cell contains only the single character
 .Ql _
 or
 .Ql = ,
@@ -332,8 +338,8 @@ Spans and skipping width calculations:
 \&.TS
 box tab(:);
 lz  s | rt
-lt| cb| ^
-^ | rz  s.
+lt| cb| \(ha
+\(ha | rz  s.
 left:r
 l:center:
 :right
Index: tbl_data.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tbl_data.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -Ltbl_data.c -Ltbl_data.c -u -p -r1.46 -r1.47
--- tbl_data.c
+++ tbl_data.c
@@ -45,6 +45,15 @@ getdata(struct tbl_node *tbl, struct tbl
 	struct tbl_span	*pdp;
 	int		 sv;
 
+	/*
+	 * Determine the length of the string in the cell
+	 * and advance the parse point to the end of the cell.
+	 */
+
+	sv = *pos;
+	while (p[*pos] != '\0' && p[*pos] != tbl->opts.tab)
+		(*pos)++;
+
 	/* Advance to the next layout cell, skipping spanners. */
 
 	cp = dp->last == NULL ? dp->layout->first : dp->last->layout->next;
@@ -67,8 +76,8 @@ getdata(struct tbl_node *tbl, struct tbl
 			dp->layout->last = cp;
 		} else {
 			mandoc_msg(MANDOCERR_TBLDATA_EXTRA, tbl->parse,
-			    ln, *pos, p + *pos);
-			while (p[*pos])
+			    ln, sv, p + sv);
+			while (p[*pos] != '\0')
 				(*pos)++;
 			return;
 		}
@@ -91,7 +100,8 @@ getdata(struct tbl_node *tbl, struct tbl
 	 * can be reused for more than one data row.
 	 */
 
-	if (cp->pos == TBL_CELL_DOWN) {
+	if (cp->pos == TBL_CELL_DOWN ||
+	    (*pos - sv == 2 && p[sv] == '\\' && p[sv + 1] == '^')) {
 		pdp = dp;
 		while ((pdp = pdp->prev) != NULL) {
 			pdat = pdp->first;
@@ -100,7 +110,8 @@ getdata(struct tbl_node *tbl, struct tbl
 				pdat = pdat->next;
 			if (pdat == NULL)
 				break;
-			if (pdat->layout->pos != TBL_CELL_DOWN) {
+			if (pdat->layout->pos != TBL_CELL_DOWN &&
+			    strcmp(pdat->string, "\\^") != 0) {
 				pdat->vspans++;
 				break;
 			}
@@ -126,10 +137,6 @@ getdata(struct tbl_node *tbl, struct tbl
 		dp->last->next = dat;
 	dp->last = dat;
 
-	sv = *pos;
-	while (p[*pos] && p[*pos] != tbl->opts.tab)
-		(*pos)++;
-
 	/*
 	 * Check for a continued-data scope opening.  This consists of a
 	 * trailing `T{' at the end of the line.  Subsequent lines,
@@ -143,7 +150,7 @@ getdata(struct tbl_node *tbl, struct tbl
 
 	dat->string = mandoc_strndup(p + sv, *pos - sv);
 
-	if (p[*pos])
+	if (p[*pos] != '\0')
 		(*pos)++;
 
 	if ( ! strcmp(dat->string, "_"))
Index: tbl_html.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tbl_html.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -Ltbl_html.c -Ltbl_html.c -u -p -r1.26 -r1.27
--- tbl_html.c
+++ tbl_html.c
@@ -126,13 +126,18 @@ print_tbl(struct html *h, const struct t
 	default:
 		for (dp = sp->first; dp != NULL; dp = dp->next) {
 			print_stagq(h, tt);
-			switch (dp->layout->pos) {
-			case TBL_CELL_SPAN:
-			case TBL_CELL_DOWN:
+
+			/*
+			 * Do not generate <td> elements for continuations
+			 * of spanned cells.  Larger <td> elements covering
+			 * this space were already generated earlier.
+			 */
+
+			if (dp->layout->pos == TBL_CELL_SPAN ||
+			    dp->layout->pos == TBL_CELL_DOWN ||
+			    (dp->string != NULL &&
+			     strcmp(dp->string, "\\^") == 0))
 				continue;
-			default:
-				break;
-			}
 
 			/* Determine the attribute values. */
 
Index: TODO
===================================================================
RCS file: /home/cvs/mandoc/mandoc/TODO,v
retrieving revision 1.277
retrieving revision 1.278
diff -LTODO -LTODO -u -p -r1.277 -r1.278
--- TODO
+++ TODO
@@ -168,10 +168,6 @@ are mere guesses, and some may be wrong.
 
 --- missing tbl features -----------------------------------------------
 
-- vertically spanning cells by \^ in the data section
-  pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200
-  loc *  exist *  algo *  size *  imp ***
-
 - the "s" layout column specifier is used for placement of data
   into columns, but ignored during column width calculations
   synaptics(4) found by tedu@  Mon, 17 Aug 2015 21:17:42 -0400
--
 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:[~2018-11-25 21:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-25 21:18 mandoc: Let cells containing nothing but \^ extend the cell above 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).