summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libroff.h5
-rw-r--r--main.c12
-rw-r--r--tbl.c12
-rw-r--r--tbl_data.c1
4 files changed, 20 insertions, 10 deletions
diff --git a/libroff.h b/libroff.h
index 6fea1c99..9bf9bf9c 100644
--- a/libroff.h
+++ b/libroff.h
@@ -1,6 +1,6 @@
/* $Id$ */
/*
- * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -36,6 +36,7 @@ struct tbl_node {
struct tbl_row *first_row;
struct tbl_row *last_row;
struct tbl_span *first_span;
+ struct tbl_span *current_span;
struct tbl_span *last_span;
struct tbl_head *first_head;
struct tbl_head *last_head;
@@ -54,7 +55,7 @@ int tbl_option(struct tbl_node *, int, const char *);
int tbl_layout(struct tbl_node *, int, const char *);
int tbl_data(struct tbl_node *, int, const char *);
int tbl_cdata(struct tbl_node *, int, const char *);
-const struct tbl_span *tbl_span(const struct tbl_node *);
+const struct tbl_span *tbl_span(struct tbl_node *);
void tbl_end(struct tbl_node *);
__END_DECLS
diff --git a/main.c b/main.c
index 30aab3ad..7e4bbb3a 100644
--- a/main.c
+++ b/main.c
@@ -656,6 +656,7 @@ pdesc(struct curparse *curp)
static void
parsebuf(struct curparse *curp, struct buf blk, int start)
{
+ const struct tbl_span *span;
struct buf ln;
enum rofferr rr;
int i, of, rc;
@@ -855,11 +856,12 @@ rerun:
if (ROFF_TBL == rr) {
assert(curp->man || curp->mdoc);
- if (curp->man)
- man_addspan(curp->man, roff_span(curp->roff));
- else
- mdoc_addspan(curp->mdoc, roff_span(curp->roff));
-
+ while (NULL != (span = roff_span(curp->roff))) {
+ if (curp->man)
+ man_addspan(curp->man, span);
+ else
+ mdoc_addspan(curp->mdoc, span);
+ }
} else if (curp->man || curp->mdoc) {
rc = curp->man ?
man_parseln(curp->man,
diff --git a/tbl.c b/tbl.c
index a212d70a..98bde3dd 100644
--- a/tbl.c
+++ b/tbl.c
@@ -1,6 +1,7 @@
/* $Id$ */
/*
- * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -136,11 +137,16 @@ tbl_restart(int line, int pos, struct tbl_node *tbl)
}
const struct tbl_span *
-tbl_span(const struct tbl_node *tbl)
+tbl_span(struct tbl_node *tbl)
{
+ struct tbl_span *span;
assert(tbl);
- return(tbl->last_span);
+ span = tbl->current_span ? tbl->current_span->next
+ : tbl->first_span;
+ if (span)
+ tbl->current_span = span;
+ return(span);
}
void
diff --git a/tbl_data.c b/tbl_data.c
index 75ed0612..c4883160 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -190,6 +190,7 @@ newspan(struct tbl_node *tbl, struct tbl_row *rp)
tbl->last_span = dp;
} else {
tbl->last_span = tbl->first_span = dp;
+ tbl->current_span = NULL;
dp->flags |= TBL_SPAN_FIRST;
}