aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2021-05-15 17:19:04 +0000
committerIngo Schwarze <schwarze@openbsd.org>2021-05-15 17:19:04 +0000
commitff6544dbe8abaff19badeae10fb0c62125913102 (patch)
tree2507e98c67c7ad51cfe4d99f340690b6fbdb97aa
parent70ec3057471d9d835b6a5d43e8b9ebda068ab31d (diff)
downloadmandoc-ff6544dbe8abaff19badeae10fb0c62125913102.tar.gz
mandoc-ff6544dbe8abaff19badeae10fb0c62125913102.tar.zst
mandoc-ff6544dbe8abaff19badeae10fb0c62125913102.zip
When looking for the last layout row used, we need to look at the layout
row used for the previous data line containing data, not at the previous data line outright, which might be a horizontal ruler. If it is, do not restart from the first layout row but still proceed to the next data row, which may have been just read from T&. Bug originally reported by Oliver dot Corff at email dot de on groff at gnu dot org: https://lists.gnu.org/archive/html/groff/2021-03/msg00003.html and forwarded to me by bentley@. Patch OK'ed by bentley@ back in April.
-rw-r--r--tbl_data.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/tbl_data.c b/tbl_data.c
index 93198484..4f921961 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_data.c,v 1.53 2020/01/11 20:48:18 schwarze Exp $ */
+/* $Id: tbl_data.c,v 1.54 2021/05/15 17:19:04 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -244,10 +244,11 @@ tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
struct tbl_cell *cp;
struct tbl_span *sp;
- rp = (sp = tbl->last_span) == NULL ? tbl->first_row :
- sp->pos == TBL_SPAN_DATA && sp->layout->next != NULL ?
- sp->layout->next : sp->layout;
-
+ for (sp = tbl->last_span; sp != NULL; sp = sp->prev)
+ if (sp->pos == TBL_SPAN_DATA)
+ break;
+ rp = sp == NULL ? tbl->first_row :
+ sp->layout->next == NULL ? sp->layout : sp->layout->next;
assert(rp != NULL);
if (p[1] == '\0') {