aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--libroff.h7
-rw-r--r--main.c14
-rw-r--r--tbl.c14
-rw-r--r--tbl_data.c3
4 files changed, 24 insertions, 14 deletions
diff --git a/libroff.h b/libroff.h
index b4e043a7..500479e0 100644
--- a/libroff.h
+++ b/libroff.h
@@ -1,6 +1,6 @@
-/* $Id: libroff.h,v 1.16 2011/01/04 15:02:00 kristaps Exp $ */
+/* $Id: libroff.h,v 1.17 2011/01/25 12:24:27 schwarze Exp $ */
/*
- * 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 e70a010d..f21ce6f5 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.140 2011/01/24 23:41:55 schwarze Exp $ */
+/* $Id: main.c,v 1.141 2011/01/25 12:24:27 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -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 ba591ceb..771dd9b4 100644
--- a/tbl.c
+++ b/tbl.c
@@ -1,6 +1,7 @@
-/* $Id: tbl.c,v 1.21 2011/01/04 15:02:00 kristaps Exp $ */
+/* $Id: tbl.c,v 1.22 2011/01/25 12:24:27 schwarze Exp $ */
/*
- * 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 0b8646e0..e21db323 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_data.c,v 1.20 2011/01/25 12:16:22 schwarze Exp $ */
+/* $Id: tbl_data.c,v 1.21 2011/01/25 12:24:27 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;
}