From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from scc-mailout-kit-01.scc.kit.edu (scc-mailout-kit-01.scc.kit.edu [129.13.231.81]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id 2a52657f for ; Sun, 25 Nov 2018 16:25:19 -0500 (EST) Received: from asta-nat.asta.uni-karlsruhe.de ([172.22.63.82] helo=hekate.usta.de) by scc-mailout-kit-01.scc.kit.edu with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (envelope-from ) id 1gR1u1-0005WO-EY; Sun, 25 Nov 2018 22:25:18 +0100 Received: from donnerwolke.usta.de ([172.24.96.3]) by hekate.usta.de with esmtp (Exim 4.77) (envelope-from ) id 1gR1u0-0004RA-R6; Sun, 25 Nov 2018 22:25:16 +0100 Received: from athene.usta.de ([172.24.96.10]) by donnerwolke.usta.de with esmtp (Exim 4.84_2) (envelope-from ) id 1gR1u0-0005TK-MS; Sun, 25 Nov 2018 22:25:16 +0100 Received: from localhost (athene.usta.de [local]) by athene.usta.de (OpenSMTPD) with ESMTPA id f9f835d2; Sun, 25 Nov 2018 22:25:16 +0100 (CET) Date: Sun, 25 Nov 2018 22:25:16 +0100 From: Ingo Schwarze To: Pali Rohar Cc: discuss@mandoc.bsd.lv Subject: Re: Broken tables in HTML output Message-ID: <20181125212516.GD45828@athene.usta.de> References: <20180716110335.uusqzhscwdgp5qaa@pali> <20180716152919.GB85992@athene.usta.de> <20181125193434.GC45828@athene.usta.de> X-Mailinglist: mandoc-discuss Reply-To: discuss@mandoc.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181125193434.GC45828@athene.usta.de> User-Agent: Mutt/1.8.0 (2017-02-23) Hi Pali, Ingo Schwarze wrote on Sun, Nov 25, 2018 at 08:34:34PM +0100: > Ingo Schwarze wrote on Mon, Jul 16, 2018 at 05:29:19PM +0200: >> Pali Rohar wrote on Mon, Jul 16, 2018 at 01:03:35PM +0200: >>> cell spanning is broken, >> More precisely, it is not implemented. I added an entry to the TODO >> file, priority is moderate: >> >> - implement cell spanning in HTML output >> pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200 >> loc * exist * algo ** size ** imp ** > Implemented in the commit below. [...] > Log Message: > ----------- > In tbl(7) -T html output, > span cells horizontally and vertically as requested by the layout. > Does not handle spans requested in the data section yet. This feature - \^ in data cells - is now also implemented, see the following commit. Yours, Ingo 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 -.\" Copyright (c) 2014, 2015, 2017 Ingo Schwarze +.\" Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze .\" .\" 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 elements for continuations + * of spanned cells. Larger 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 discuss+unsubscribe@mandoc.bsd.lv