From cde3a32159a80968b274ce1e06c94f2e539e4254 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Fri, 31 Dec 2010 18:19:43 +0000 Subject: Expose the parsed table API to the world and add accessors through the roff.h interface. --- libroff.h | 59 ++-------------------------------------------------- mandoc.h | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- roff.c | 9 +++++++- roff.h | 3 ++- tbl.c | 9 +++++++- 5 files changed, 90 insertions(+), 61 deletions(-) diff --git a/libroff.h b/libroff.h index b6883638..c5aff63e 100644 --- a/libroff.h +++ b/libroff.h @@ -1,4 +1,4 @@ -/* $Id: libroff.h,v 1.10 2010/12/31 14:52:41 kristaps Exp $ */ +/* $Id: libroff.h,v 1.11 2010/12/31 18:19:43 kristaps Exp $ */ /* * Copyright (c) 2009, 2010 Kristaps Dzonsons * @@ -25,62 +25,6 @@ enum tbl_part { TBL_PART_DATA /* creating data rows */ }; -enum tbl_cellt { - TBL_CELL_CENTRE, /* c, C */ - TBL_CELL_RIGHT, /* r, R */ - TBL_CELL_LEFT, /* l, L */ - TBL_CELL_NUMBER, /* n, N */ - TBL_CELL_SPAN, /* s, S */ - TBL_CELL_LONG, /* a, A */ - TBL_CELL_DOWN, /* ^ */ - TBL_CELL_HORIZ, /* _, - */ - TBL_CELL_DHORIZ, /* = */ - TBL_CELL_VERT, /* | */ - TBL_CELL_DVERT, /* || */ - TBL_CELL_MAX -}; - -struct tbl_cell { - struct tbl_cell *next; - enum tbl_cellt pos; - int spacing; - int flags; -#define TBL_CELL_TALIGN (1 << 0) /* t, T */ -#define TBL_CELL_BALIGN (1 << 1) /* d, D */ -#define TBL_CELL_BOLD (1 << 2) /* fB, B, b */ -#define TBL_CELL_ITALIC (1 << 3) /* fI, I, i */ -#define TBL_CELL_EQUAL (1 << 4) /* e, E */ -#define TBL_CELL_UP (1 << 5) /* u, U */ -#define TBL_CELL_WIGN (1 << 6) /* z, Z */ -}; - -struct tbl_row { - struct tbl_row *next; - struct tbl_cell *first; - struct tbl_cell *last; -}; - -struct tbl_dat { - struct tbl_cell *layout; /* layout cell: CAN BE NULL */ - struct tbl_dat *next; - char *string; - int flags; -#define TBL_DATA_HORIZ (1 << 0) -#define TBL_DATA_DHORIZ (1 << 1) -#define TBL_DATA_NHORIZ (1 << 2) -#define TBL_DATA_NDHORIZ (1 << 3) -}; - -struct tbl_span { - struct tbl_row *layout; /* layout row: CAN BE NULL */ - struct tbl_dat *first; - struct tbl_dat *last; - int flags; -#define TBL_SPAN_HORIZ (1 << 0) -#define TBL_SPAN_DHORIZ (1 << 1) - struct tbl_span *next; -}; - struct tbl { mandocmsg msg; /* status messages */ void *data; /* privdata for messages */ @@ -115,6 +59,7 @@ enum rofferr tbl_read(struct tbl *, int, const char *, int); int tbl_option(struct tbl *, int, const char *); int tbl_layout(struct tbl *, int, const char *); int tbl_data(struct tbl *, int, const char *); +const struct tbl_span *tbl_span(const struct tbl *); __END_DECLS diff --git a/mandoc.h b/mandoc.h index 76f543b7..81f9de5f 100644 --- a/mandoc.h +++ b/mandoc.h @@ -1,4 +1,4 @@ -/* $Id: mandoc.h,v 1.37 2010/12/29 14:38:14 kristaps Exp $ */ +/* $Id: mandoc.h,v 1.38 2010/12/31 18:19:43 kristaps Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons * @@ -139,6 +139,75 @@ enum mandocerr { MANDOCERR_MAX }; +enum tbl_cellt { + TBL_CELL_CENTRE, /* c, C */ + TBL_CELL_RIGHT, /* r, R */ + TBL_CELL_LEFT, /* l, L */ + TBL_CELL_NUMBER, /* n, N */ + TBL_CELL_SPAN, /* s, S */ + TBL_CELL_LONG, /* a, A */ + TBL_CELL_DOWN, /* ^ */ + TBL_CELL_HORIZ, /* _, - */ + TBL_CELL_DHORIZ, /* = */ + TBL_CELL_VERT, /* | */ + TBL_CELL_DVERT, /* || */ + TBL_CELL_MAX +}; + +/* + * A cell in a layout row. + */ +struct tbl_cell { + struct tbl_cell *next; + enum tbl_cellt pos; + int spacing; + int flags; +#define TBL_CELL_TALIGN (1 << 0) /* t, T */ +#define TBL_CELL_BALIGN (1 << 1) /* d, D */ +#define TBL_CELL_BOLD (1 << 2) /* fB, B, b */ +#define TBL_CELL_ITALIC (1 << 3) /* fI, I, i */ +#define TBL_CELL_EQUAL (1 << 4) /* e, E */ +#define TBL_CELL_UP (1 << 5) /* u, U */ +#define TBL_CELL_WIGN (1 << 6) /* z, Z */ +}; + +/* + * A layout row. + */ +struct tbl_row { + struct tbl_row *next; + struct tbl_cell *first; + struct tbl_cell *last; +}; + +/* + * A cell within a row of data. The "string" field contains the actual + * string value that's in the cell. The rest is layout. + */ +struct tbl_dat { + struct tbl_cell *layout; /* layout cell: CAN BE NULL */ + struct tbl_dat *next; + char *string; + int flags; +#define TBL_DATA_HORIZ (1 << 0) +#define TBL_DATA_DHORIZ (1 << 1) +#define TBL_DATA_NHORIZ (1 << 2) +#define TBL_DATA_NDHORIZ (1 << 3) +}; + +/* + * A row of data in a table. + */ +struct tbl_span { + struct tbl_row *layout; /* layout row: CAN BE NULL */ + struct tbl_dat *first; + struct tbl_dat *last; + int flags; +#define TBL_SPAN_HORIZ (1 << 0) +#define TBL_SPAN_DHORIZ (1 << 1) + struct tbl_span *next; +}; + /* * Available registers (set in libroff, accessed elsewhere). */ diff --git a/roff.c b/roff.c index 439784a9..5531dc86 100644 --- a/roff.c +++ b/roff.c @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.113 2010/12/31 14:52:41 kristaps Exp $ */ +/* $Id: roff.c,v 1.114 2010/12/31 18:19:43 kristaps Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -1375,3 +1375,10 @@ roff_freestr(struct roff *r) r->first_string = NULL; } + +const struct tbl_span * +roff_span(const struct roff *r) +{ + + return(r->tbl ? tbl_span(r->tbl) : NULL); +} diff --git a/roff.h b/roff.h index 96cea243..ce6672e6 100644 --- a/roff.h +++ b/roff.h @@ -1,4 +1,4 @@ -/* $Id: roff.h,v 1.20 2010/12/28 10:51:03 kristaps Exp $ */ +/* $Id: roff.h,v 1.21 2010/12/31 18:19:43 kristaps Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons * @@ -38,6 +38,7 @@ void roff_reset(struct roff *); enum rofferr roff_parseln(struct roff *, int, char **, size_t *, int, int *); int roff_endparse(struct roff *); +const struct tbl_span *roff_span(const struct roff *); __END_DECLS diff --git a/tbl.c b/tbl.c index 15581b02..7b5e299c 100644 --- a/tbl.c +++ b/tbl.c @@ -1,4 +1,4 @@ -/* $Id: tbl.c,v 1.10 2010/12/31 14:52:41 kristaps Exp $ */ +/* $Id: tbl.c,v 1.11 2010/12/31 18:19:43 kristaps Exp $ */ /* * Copyright (c) 2009, 2010 Kristaps Dzonsons * @@ -120,3 +120,10 @@ tbl_restart(struct tbl *tbl) tbl->part = TBL_PART_LAYOUT; } +const struct tbl_span * +tbl_span(const struct tbl *tbl) +{ + + assert(tbl); + return(tbl->last_span); +} -- cgit v1.2.3-56-ge451