tbl - Man Page
roff table parser library for mandoc
Synopsis
#include <sys/types.h
>
#include <tbl.h
>
#include <tbl_parse.h
>
struct tbl_node *
tbl_alloc
(int pos, int line);
void
tbl_read
(struct tbl_node *tbl, int ln, const char *p, int offs);
void
tbl_restart
(int line, int pos, struct tbl_node *tbl);
const struct tbl_span *
tbl_span
(struct tbl_node *tbl);
void
tbl_end
(struct tbl_node **tblp);
void
tbl_free
(struct tbl_node *tbl);
Description
This library is tightly integrated into the mandoc(1) utility and not designed for stand-alone use. The present manual is intended as a reference for developers working on mandoc(1).
Data structures
Unless otherwise noted, all of the following data structures are declared in <tbl.h
> and are deleted in tbl_free
().
- struct tbl_node
This structure describes a complete table. It is declared in <
tbl_int.h
>, created intbl_alloc
(), and stored in the members first_tbl, last_tbl, and tbl of struct roff [roff.c
].The first_span, current_span, last_span, and next members may be
NULL
. The first_row and last_row members may beNULL
, but if there is a span, the functiontbl_layout
() guarantees that these pointers are notNULL
.- struct tbl_opts
This structure describes the options of one table. It is used as a substructure of struct tbl_node and thus created and deleted together with it. It is filled in
tbl_options
().- struct tbl_row
This structure describes one layout line in a table by maintaining a list of all the cells in that line. It is allocated and filled in
row
() [tbl_layout.c
] and referenced from the layout member of struct tbl_node.The next member may be
NULL
. The functiontbl_layout
() guarantees that the first and last members are not NULL.- struct tbl_cell
This structure describes one layout cell in a table, in particular its alignment, membership in spans, and usage for lines. It is allocated and filled in
cell_alloc
() [tbl_layout.c
] and referenced from the first and last members of struct tbl_row.The next member may be
NULL
.- struct tbl_span
This structure describes one data line in a table by maintaining a list of all data cells in that line or by specifying that it is a horizontal line. It is allocated and filled in
newspan
() [tbl_data.c
] which is called fromtbl_data
() and referenced from the first_span, current_span, and last_span members of struct tbl_node, and from the span members of struct man_node and struct mdoc_node from <man.h
> and <mdoc.h
>.The first, last, prev, and next members may be
NULL
. The functionnewspan
() [tbl_data.c
] guarantees that the opts and layout members are notNULL
.- struct tbl_dat
This structure describes one data cell in a table by specifying whether it contains a line or data, whether it spans additional layout cells, and by storing the data. It is allocated and filled in
tbl_data
() and referenced from the first and last members of struct tbl_span.The string and next members may be
NULL
. The functiongetdata
() guarantees that the layout member is notNULL
.
Interface functions
The following functions are implemented in tbl.c
, and all callers are in roff.c
.
- tbl_alloc()
Allocates, initializes, and returns a new struct tbl_node. Called from
roff_TS
().- tbl_read()
Dispatches to
tbl_option
(),tbl_layout
(),tbl_cdata
(), andtbl_data
(), see below. Called fromroff_parseln
().- tbl_restart()
Resets the part member of struct tbl_node to
TBL_PART_LAYOUT
. Called fromroff_T_
().- tbl_span()
On the first call, return the first struct tbl_span; for later calls, return the next one or
NULL
. Called fromroff_span
().- tbl_end()
Flags the last span as
TBL_SPAN_LAST
and clears the pointer passed as an argment. Called fromroff_TE
() androff_endparse
().- tbl_free()
Frees the specified struct tbl_node and all the tbl_row, tbl_cell, tbl_span, and tbl_dat structures referenced from it. Called from
roff_free
() androff_reset
().
Private functions
The following functions are declared in <tbl_int.h
>.
- int tbl_options(struct tbl_node *tbl, int ln, const char *p)
Parses the options line into struct tbl_opts. Implemented in
tbl_opts.c
, called fromtbl_read
().- int tbl_layout(struct tbl_node *tbl, int ln, const char *p)
Allocates and fills one struct tbl_row for each layout line and one struct tbl_cell for each layout cell. Implemented in
tbl_layout.c
, called fromtbl_read
().- int tbl_data(struct tbl_node *tbl, int ln, const char *p)
Allocates one struct tbl_span for each data line and calls
getdata
() for each data cell. Implemented intbl_data.c
, called fromtbl_read
().- int tbl_cdata(struct tbl_node *tbl, int ln, const char *p)
Continues parsing a data line: When finding āT}ā, switches back to
TBL_PART_DATA
mode and callsgetdata
() if there are more data cells on the line. Otherwise, appends the data to the current data cell. Implemented intbl_data.c
, called fromtbl_read
().- int getdata(struct tbl_node *tbl, struct tbl_span *dp, int ln, const char *p, int *pos);
Parses one data cell into one struct tbl_dat. Implemented in
tbl_data.c
, called fromtbl_data
() andtbl_cdata
().
See Also
Authors
The tbl library was written by Kristaps Dzonsons <kristaps@bsd.lv> with contributions from Ingo Schwarze <schwarze@openbsd.org>.