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_LASTand 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_DATAmode 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>.