From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: It turns out association of tbl spans with layout rows is
Date: Tue, 4 Jul 2017 16:08:32 -0500 (EST) [thread overview]
Message-ID: <3949513592702349320.enqueue@fantadrom.bsd.lv> (raw)
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
reply other threads:[~2017-07-04 21:08 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3949513592702349320.enqueue@fantadrom.bsd.lv \
--to=schwarze@mandoc.bsd.lv \
--cc=source@mandoc.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).