diff options
-rw-r--r-- | usr.bin/mandoc/libroff.h | 5 | ||||
-rw-r--r-- | usr.bin/mandoc/main.c | 14 | ||||
-rw-r--r-- | usr.bin/mandoc/tbl.c | 12 | ||||
-rw-r--r-- | usr.bin/mandoc/tbl_data.c | 3 |
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; } |