Man page - tbl(3)

Packages contains this manual

Manual


TBL (3) Library Functions Manual TBL (3)

NAME

tbl_alloc, tbl_read, tbl_restart, tbl_span, tbl_end, tbl_free — 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 in tbl_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 be NULL, but if there is a span, the function tbl_layout () guarantees that these pointers are not NULL.

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 function tbl_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 from tbl_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 function newspan () [ tbl_data.c ] guarantees that the opts and layout members are not NULL.

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 function getdata () guarantees that the layout member is not NULL.

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 (), and tbl_data (), see below. Called from roff_parseln ().

tbl_restart ()

Resets the part member of struct tbl_node to TBL_PART_LAYOUT. Called from roff_T_ ().

tbl_span ()

On the first call, return the first struct tbl_span ; for later calls, return the next one or NULL. Called from roff_span ().

tbl_end ()

Flags the last span as TBL_SPAN_LAST and clears the pointer passed as an argment. Called from roff_TE () and roff_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 () and roff_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 from tbl_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 from tbl_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 in tbl_data.c , called from tbl_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 calls getdata () if there are more data cells on the line. Otherwise, appends the data to the current data cell. Implemented in tbl_data.c , called from tbl_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 from tbl_data () and tbl_cdata ().

SEE ALSO

mandoc (1), mandoc (3), tbl (7)

AUTHORS

The tbl library was written by Kristaps Dzonsons < kristaps@bsd.lv > with contributions from Ingo Schwarze < schwarze@openbsd.org >. Debian DecemberĀ 14, 2018 TBL (3)