source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Implement tbl(7) lines in -T html output,  as far as they are on
@ 2018-11-26 21:06 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2018-11-26 21:06 UTC (permalink / raw)
  To: source

Log Message:
-----------
Implement tbl(7) lines in -T html output, 
as far as they are on the edges of table cells 
rather than going through the middle of cells:

* the box, doublebox, and allbox options; 
* the | and || layout modifiers;
* and the _ and = data lines;
- but not yet _ and = in individual layout and data cells.

Missing feature reported by Pali dot Rohar at gmail dot com.

Modified Files:
--------------
    mandoc:
        mandoc.css
        tbl_html.c

Revision Data
-------------
Index: tbl_html.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tbl_html.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -Ltbl_html.c -Ltbl_html.c -u -p -r1.28 -r1.29
--- tbl_html.c
+++ tbl_html.c
@@ -86,7 +86,15 @@ html_tblopen(struct html *h, const struc
 		tblcalc(&h->tbl, sp, 0, 0);
 	}
 	assert(NULL == h->tblt);
-	h->tblt = print_otag(h, TAG_TABLE, "c", "tbl");
+	h->tblt = print_otag(h, TAG_TABLE, "c?ss", "tbl",
+	    "border",
+		sp->opts->opts & TBL_OPT_ALLBOX ? "1" : NULL,
+	    "border-style",
+		sp->opts->opts & TBL_OPT_DBOX ? "double" :
+		sp->opts->opts & TBL_OPT_BOX ? "solid" : NULL,
+	    "border-top-style",
+		sp->pos == TBL_SPAN_DHORIZ ? "double" :
+		sp->pos == TBL_SPAN_HORIZ ? "solid" : NULL);
 }
 
 void
@@ -102,87 +110,135 @@ void
 print_tbl(struct html *h, const struct tbl_span *sp)
 {
 	const struct tbl_dat	*dp;
+	const struct tbl_cell	*cp;
+	const struct tbl_span	*psp;
 	struct tag		*tt;
 	const char		*hspans, *vspans, *halign, *valign;
+	const char		*bborder, *lborder, *rborder;
 	char			 hbuf[4], vbuf[4];
-
-	/* Inhibit printing of spaces: we do padding ourselves. */
+	int			 i;
 
 	if (h->tblt == NULL)
 		html_tblopen(h, sp);
 
-	assert(h->tblt);
+	/*
+	 * Horizontal lines spanning the whole table
+	 * are handled by previous or following table rows.
+	 */
+
+	if (sp->pos != TBL_SPAN_DATA)
+		return;
+
+	/* Inhibit printing of spaces: we do padding ourselves. */
 
 	h->flags |= HTML_NONOSPACE;
 	h->flags |= HTML_NOSPACE;
 
-	tt = print_otag(h, TAG_TR, "");
+	/* Draw a vertical line left of this row? */
 
-	switch (sp->pos) {
-	case TBL_SPAN_HORIZ:
-	case TBL_SPAN_DHORIZ:
-		print_otag(h, TAG_TD, "?", "colspan", "0");
+	switch (sp->layout->vert) {
+	case 2:
+		lborder = "double";
+		break;
+	case 1:
+		lborder = "solid";
 		break;
 	default:
-		for (dp = sp->first; dp != NULL; dp = dp->next) {
-			print_stagq(h, tt);
+		lborder = NULL;
+		break;
+	}
 
-			/*
-			 * 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;
-
-			/* Determine the attribute values. */
-
-			if (dp->hspans > 0) {
-				(void)snprintf(hbuf, sizeof(hbuf),
-				    "%d", dp->hspans + 1);
-				hspans = hbuf;
-			} else
-				hspans = NULL;
-			if (dp->vspans > 0) {
-				(void)snprintf(vbuf, sizeof(vbuf),
-				    "%d", dp->vspans + 1);
-				vspans = vbuf;
-			} else
-				vspans = NULL;
-
-			switch (dp->layout->pos) {
-			case TBL_CELL_CENTRE:
-				halign = "center";
-				break;
-			case TBL_CELL_RIGHT:
-			case TBL_CELL_NUMBER:
-				halign = "right";
-				break;
-			default:
-				halign = NULL;
-				break;
-			}
-			if (dp->layout->flags & TBL_CELL_TALIGN)
-				valign = "top";
-			else if (dp->layout->flags & TBL_CELL_BALIGN)
-				valign = "bottom";
-			else
-				valign = NULL;
-
-			/* Print the element and the attributes. */
-
-			print_otag(h, TAG_TD, "??ss",
-			    "colspan", hspans, "rowspan", vspans,
-			    "vertical-align", valign,
-			    "text-align", halign);
-			if (dp->string != NULL)
-				print_text(h, dp->string);
+	/* Draw a horizontal line below this row? */
+
+	bborder = NULL;
+	if ((psp = sp->next) != NULL) {
+		switch (psp->pos) {
+		case TBL_SPAN_DHORIZ:
+			bborder = "double";
+			break;
+		case TBL_SPAN_HORIZ:
+			bborder = "solid";
+			break;
+		default:
+			break;
 		}
-		break;
+	}
+
+	tt = print_otag(h, TAG_TR, "ss",
+	    "border-left-style", lborder,
+	    "border-bottom-style", bborder);
+
+	for (dp = sp->first; dp != NULL; dp = dp->next) {
+		print_stagq(h, tt);
+
+		/*
+		 * Do not generate <td> elements for continuations
+		 * of spanned cells.  Larger <td> elements covering
+		 * this space were already generated earlier.
+		 */
+
+		cp = dp->layout;
+		if (cp->pos == TBL_CELL_SPAN || cp->pos == TBL_CELL_DOWN ||
+		    (dp->string != NULL && strcmp(dp->string, "\\^") == 0))
+			continue;
+
+		/* Determine the attribute values. */
+
+		if (dp->hspans > 0) {
+			(void)snprintf(hbuf, sizeof(hbuf),
+			    "%d", dp->hspans + 1);
+			hspans = hbuf;
+		} else
+			hspans = NULL;
+		if (dp->vspans > 0) {
+			(void)snprintf(vbuf, sizeof(vbuf),
+			    "%d", dp->vspans + 1);
+			vspans = vbuf;
+		} else
+			vspans = NULL;
+
+		switch (cp->pos) {
+		case TBL_CELL_CENTRE:
+			halign = "center";
+			break;
+		case TBL_CELL_RIGHT:
+		case TBL_CELL_NUMBER:
+			halign = "right";
+			break;
+		default:
+			halign = NULL;
+			break;
+		}
+		if (cp->flags & TBL_CELL_TALIGN)
+			valign = "top";
+		else if (cp->flags & TBL_CELL_BALIGN)
+			valign = "bottom";
+		else
+			valign = NULL;
+
+		for (i = dp->hspans; i > 0; i--)
+			cp = cp->next;
+		switch (cp->vert) {
+		case 2:
+			rborder = "double";
+			break;
+		case 1:
+			rborder = "solid";
+			break;
+		default:
+			rborder = NULL;
+			break;
+		}
+
+		/* Print the element and the attributes. */
+
+		print_otag(h, TAG_TD, "??sss",
+		    "colspan", hspans, "rowspan", vspans,
+		    "vertical-align", valign,
+		    "text-align", halign,
+		    "border-right-style", rborder);
+		if (dp->string != NULL)
+			print_text(h, dp->string);
 	}
 
 	print_tagq(h, tt);
Index: mandoc.css
===================================================================
RCS file: /home/cvs/mandoc/mandoc/mandoc.css,v
retrieving revision 1.39
retrieving revision 1.40
diff -Lmandoc.css -Lmandoc.css -u -p -r1.39 -r1.40
--- mandoc.css
+++ mandoc.css
@@ -13,8 +13,11 @@
 html {		max-width: 65em; }
 body {		font-family: Helvetica,Arial,sans-serif; }
 table {		margin-top: 0em;
-		margin-bottom: 0em; }
-td {		vertical-align: middle; }
+		margin-bottom: 0em;
+		border-collapse: collapse; }
+td {		vertical-align: middle;
+		padding-left: 0.2em;
+		padding-right: 0.2em; }
 ul, ol, dl {	margin-top: 0em;
 		margin-bottom: 0em; }
 li, dt {	margin-top: 1em; }
--
 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-26 21:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-26 21:06 mandoc: Implement tbl(7) lines in -T html output, as far as they are on 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).