From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id e5b8c4c5 for ; Tue, 4 Jul 2017 16:08:32 -0500 (EST) Date: Tue, 4 Jul 2017 16:08:32 -0500 (EST) Message-Id: <3949513592702349320.enqueue@fantadrom.bsd.lv> X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: It turns out association of tbl spans with layout rows is X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 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) + + + +NNAAMMEE + tbl-data-insert - insertion of empty spans for line-only layout rows + +DDEESSCCRRIIPPTTIIOONN + 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