summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2021-09-07 11:47:43 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2021-09-07 11:47:43 +0000
commiteedcb51a0491d94f2c962d0eaf4fbba0277adc0e (patch)
treebced54ef663c98e9b6b1f9ea69876cce7d54bd08
parentd7ce4590b03a760df7bfbd20d8bd8a9e5b69c463 (diff)
we already parse the GNU tbl(7) "nospaces" option,
so let it have the intended effect, too
-rw-r--r--share/man/man7/tbl.76
-rw-r--r--usr.bin/mandoc/tbl_data.c27
2 files changed, 21 insertions, 12 deletions
diff --git a/share/man/man7/tbl.7 b/share/man/man7/tbl.7
index d086be78941..11202e946d1 100644
--- a/share/man/man7/tbl.7
+++ b/share/man/man7/tbl.7
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tbl.7,v 1.24 2021/08/10 12:36:42 schwarze Exp $
+.\" $OpenBSD: tbl.7,v 1.25 2021/09/07 11:47:42 schwarze Exp $
.\"
.\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2014,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: August 10 2021 $
+.Dd $Mdocdate: September 7 2021 $
.Dt TBL 7
.Os
.Sh NAME
@@ -94,7 +94,7 @@ Allow page breaks within the table.
This is a GNU extension and currently ignored.
.It Cm nospaces
Ignore leading and trailing spaces in data cells.
-This is a GNU extension and currently ignored.
+This is a GNU extension.
.It Cm nowarn
Suppress warnings about tables exceeding the current line length.
This is a GNU extension and currently ignored.
diff --git a/usr.bin/mandoc/tbl_data.c b/usr.bin/mandoc/tbl_data.c
index 2cfea257102..e98933e1323 100644
--- a/usr.bin/mandoc/tbl_data.c
+++ b/usr.bin/mandoc/tbl_data.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tbl_data.c,v 1.43 2021/08/10 12:36:42 schwarze Exp $ */
+/* $OpenBSD: tbl_data.c,v 1.44 2021/09/07 11:47:42 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011,2015,2017-2019,2021 Ingo Schwarze <schwarze@openbsd.org>
@@ -45,15 +45,15 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
struct tbl_cell *cp;
struct tbl_span *pdp;
const char *ccp;
- int sv;
+ int startpos, endpos;
/*
* Determine the length of the string in the cell
* and advance the parse point to the end of the cell.
*/
- sv = *pos;
- ccp = p + sv;
+ startpos = *pos;
+ ccp = p + startpos;
while (*ccp != '\0' && *ccp != tbl->opts.tab)
if (*ccp++ == '\\')
mandoc_escape(&ccp, NULL, NULL);
@@ -83,7 +83,7 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
dp->layout->last = cp;
} else {
mandoc_msg(MANDOCERR_TBLDATA_EXTRA,
- ln, sv, "%s", p + sv);
+ ln, startpos, "%s", p + startpos);
while (p[*pos] != '\0')
(*pos)++;
return;
@@ -108,7 +108,8 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
*/
if (cp->pos == TBL_CELL_DOWN ||
- (*pos - sv == 2 && p[sv] == '\\' && p[sv + 1] == '^')) {
+ (*pos - startpos == 2 &&
+ p[startpos] == '\\' && p[startpos + 1] == '^')) {
pdp = dp;
while ((pdp = pdp->prev) != NULL) {
pdat = pdp->first;
@@ -150,12 +151,20 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
* until a standalone `T}', are included in our cell.
*/
- if (*pos - sv == 2 && p[sv] == 'T' && p[sv + 1] == '{') {
+ if (*pos - startpos == 2 &&
+ p[startpos] == 'T' && p[startpos + 1] == '{') {
tbl->part = TBL_PART_CDATA;
return;
}
- dat->string = mandoc_strndup(p + sv, *pos - sv);
+ endpos = *pos;
+ if (dp->opts->opts & TBL_OPT_NOSPACE) {
+ while (p[startpos] == ' ')
+ startpos++;
+ while (endpos > startpos && p[endpos - 1] == ' ')
+ endpos--;
+ }
+ dat->string = mandoc_strndup(p + startpos, endpos - startpos);
if (p[*pos] != '\0')
(*pos)++;
@@ -176,7 +185,7 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
dat->layout->pos == TBL_CELL_DOWN) &&
dat->pos == TBL_DATA_DATA && *dat->string != '\0')
mandoc_msg(MANDOCERR_TBLDATA_SPAN,
- ln, sv, "%s", dat->string);
+ ln, startpos, "%s", dat->string);
}
void