summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/mandoc/libroff.h5
-rw-r--r--usr.bin/mandoc/main.c14
-rw-r--r--usr.bin/mandoc/tbl.c12
-rw-r--r--usr.bin/mandoc/tbl_data.c3
4 files changed, 22 insertions, 12 deletions
diff --git a/usr.bin/mandoc/libroff.h b/usr.bin/mandoc/libroff.h
index 17e4f8fef69..9dd994d8991 100644
--- a/usr.bin/mandoc/libroff.h
+++ b/usr.bin/mandoc/libroff.h
@@ -1,4 +1,4 @@
-/* $Id: libroff.h,v 1.1 2011/01/04 22:28:17 schwarze Exp $ */
+/* $Id: libroff.h,v 1.2 2011/01/25 12:24:26 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -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/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c
index 9ef3d40145f..30cd1db3cba 100644
--- a/usr.bin/mandoc/main.c
+++ b/usr.bin/mandoc/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.70 2011/01/24 23:40:12 schwarze Exp $ */
+/* $Id: main.c,v 1.71 2011/01/25 12:24:26 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -641,6 +641,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;
@@ -840,11 +841,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/usr.bin/mandoc/tbl.c b/usr.bin/mandoc/tbl.c
index 56369368098..c91b4bee7c0 100644
--- a/usr.bin/mandoc/tbl.c
+++ b/usr.bin/mandoc/tbl.c
@@ -1,6 +1,7 @@
-/* $Id: tbl.c,v 1.4 2011/01/04 22:28:17 schwarze Exp $ */
+/* $Id: tbl.c,v 1.5 2011/01/25 12:24:26 schwarze Exp $ */
/*
* 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/usr.bin/mandoc/tbl_data.c b/usr.bin/mandoc/tbl_data.c
index 759969a94b2..31ac487da90 100644
--- a/usr.bin/mandoc/tbl_data.c
+++ b/usr.bin/mandoc/tbl_data.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_data.c,v 1.7 2011/01/25 12:16:19 schwarze Exp $ */
+/* $Id: tbl_data.c,v 1.8 2011/01/25 12:24:26 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -186,6 +186,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;
}