xref: /freebsd/contrib/mandoc/tbl.3 (revision 7648bc9fee8dec6cb3c4941e0165a930fbe8dcb0)
1*7295610fSBaptiste Daroussin.\"	$Id: tbl.3,v 1.6 2018/12/14 06:33:14 schwarze Exp $
261d06d6bSBaptiste Daroussin.\"
3*7295610fSBaptiste Daroussin.\" Copyright (c) 2013, 2015, 2018 Ingo Schwarze <schwarze@openbsd.org>
461d06d6bSBaptiste Daroussin.\"
561d06d6bSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software for any
661d06d6bSBaptiste Daroussin.\" purpose with or without fee is hereby granted, provided that the above
761d06d6bSBaptiste Daroussin.\" copyright notice and this permission notice appear in all copies.
861d06d6bSBaptiste Daroussin.\"
961d06d6bSBaptiste Daroussin.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1061d06d6bSBaptiste Daroussin.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1161d06d6bSBaptiste Daroussin.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1261d06d6bSBaptiste Daroussin.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1361d06d6bSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1461d06d6bSBaptiste Daroussin.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1561d06d6bSBaptiste Daroussin.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1661d06d6bSBaptiste Daroussin.\"
17*7295610fSBaptiste Daroussin.Dd $Mdocdate: December 14 2018 $
1861d06d6bSBaptiste Daroussin.Dt TBL 3
1961d06d6bSBaptiste Daroussin.Os
2061d06d6bSBaptiste Daroussin.Sh NAME
2161d06d6bSBaptiste Daroussin.Nm tbl_alloc ,
2261d06d6bSBaptiste Daroussin.Nm tbl_read ,
2361d06d6bSBaptiste Daroussin.Nm tbl_restart ,
2461d06d6bSBaptiste Daroussin.Nm tbl_span ,
2561d06d6bSBaptiste Daroussin.Nm tbl_end ,
2661d06d6bSBaptiste Daroussin.Nm tbl_free
2761d06d6bSBaptiste Daroussin.Nd roff table parser library for mandoc
2861d06d6bSBaptiste Daroussin.Sh SYNOPSIS
29*7295610fSBaptiste Daroussin.In sys/types.h
30*7295610fSBaptiste Daroussin.In tbl.h
31*7295610fSBaptiste Daroussin.In tbl_parse.h
3261d06d6bSBaptiste Daroussin.Ft struct tbl_node *
3361d06d6bSBaptiste Daroussin.Fo tbl_alloc
3461d06d6bSBaptiste Daroussin.Fa "int pos"
3561d06d6bSBaptiste Daroussin.Fa "int line"
3661d06d6bSBaptiste Daroussin.Fc
37*7295610fSBaptiste Daroussin.Ft void
3861d06d6bSBaptiste Daroussin.Fo tbl_read
3961d06d6bSBaptiste Daroussin.Fa "struct tbl_node *tbl"
4061d06d6bSBaptiste Daroussin.Fa "int ln"
4161d06d6bSBaptiste Daroussin.Fa "const char *p"
4261d06d6bSBaptiste Daroussin.Fa "int offs"
4361d06d6bSBaptiste Daroussin.Fc
4461d06d6bSBaptiste Daroussin.Ft void
4561d06d6bSBaptiste Daroussin.Fo tbl_restart
4661d06d6bSBaptiste Daroussin.Fa "int line"
4761d06d6bSBaptiste Daroussin.Fa "int pos"
4861d06d6bSBaptiste Daroussin.Fa "struct tbl_node *tbl"
4961d06d6bSBaptiste Daroussin.Fc
5061d06d6bSBaptiste Daroussin.Ft const struct tbl_span *
5161d06d6bSBaptiste Daroussin.Fo tbl_span
5261d06d6bSBaptiste Daroussin.Fa "struct tbl_node *tbl"
5361d06d6bSBaptiste Daroussin.Fc
5461d06d6bSBaptiste Daroussin.Ft void
5561d06d6bSBaptiste Daroussin.Fo tbl_end
5661d06d6bSBaptiste Daroussin.Fa "struct tbl_node **tblp"
5761d06d6bSBaptiste Daroussin.Fc
5861d06d6bSBaptiste Daroussin.Ft void
5961d06d6bSBaptiste Daroussin.Fo tbl_free
6061d06d6bSBaptiste Daroussin.Fa "struct tbl_node *tbl"
6161d06d6bSBaptiste Daroussin.Fc
6261d06d6bSBaptiste Daroussin.Sh DESCRIPTION
6361d06d6bSBaptiste DaroussinThis library is tightly integrated into the
6461d06d6bSBaptiste Daroussin.Xr mandoc 1
6561d06d6bSBaptiste Daroussinutility and not designed for stand-alone use.
6661d06d6bSBaptiste DaroussinThe present manual is intended as a reference for developers working on
6761d06d6bSBaptiste Daroussin.Xr mandoc 1 .
6861d06d6bSBaptiste Daroussin.Ss Data structures
69*7295610fSBaptiste DaroussinUnless otherwise noted, all of the following data structures are declared in
70*7295610fSBaptiste Daroussin.In tbl.h
7161d06d6bSBaptiste Daroussinand are deleted in
7261d06d6bSBaptiste Daroussin.Fn tbl_free .
7361d06d6bSBaptiste Daroussin.Bl -tag -width Ds
7461d06d6bSBaptiste Daroussin.It Vt struct tbl_node
7561d06d6bSBaptiste DaroussinThis structure describes a complete table.
76*7295610fSBaptiste DaroussinIt is declared in
77*7295610fSBaptiste Daroussin.In tbl_int.h ,
7861d06d6bSBaptiste Daroussincreated in
7961d06d6bSBaptiste Daroussin.Fn tbl_alloc ,
8061d06d6bSBaptiste Daroussinand stored in the members
8161d06d6bSBaptiste Daroussin.Fa first_tbl ,
8261d06d6bSBaptiste Daroussin.Fa last_tbl ,
8361d06d6bSBaptiste Daroussinand
8461d06d6bSBaptiste Daroussin.Fa tbl
8561d06d6bSBaptiste Daroussinof
8661d06d6bSBaptiste Daroussin.Vt struct roff Bq Pa roff.c .
8761d06d6bSBaptiste Daroussin.Pp
8861d06d6bSBaptiste DaroussinThe
8961d06d6bSBaptiste Daroussin.Fa first_span ,
9061d06d6bSBaptiste Daroussin.Fa current_span ,
9161d06d6bSBaptiste Daroussin.Fa last_span ,
9261d06d6bSBaptiste Daroussinand
9361d06d6bSBaptiste Daroussin.Fa next
9461d06d6bSBaptiste Daroussinmembers may be
9561d06d6bSBaptiste Daroussin.Dv NULL .
9661d06d6bSBaptiste DaroussinThe
9761d06d6bSBaptiste Daroussin.Fa first_row
9861d06d6bSBaptiste Daroussinand
9961d06d6bSBaptiste Daroussin.Fa last_row
10061d06d6bSBaptiste Daroussinmembers may be
10161d06d6bSBaptiste Daroussin.Dv NULL ,
10261d06d6bSBaptiste Daroussinbut if there is a span, the function
10361d06d6bSBaptiste Daroussin.Fn tbl_layout
10461d06d6bSBaptiste Daroussinguarantees that these pointers are not
10561d06d6bSBaptiste Daroussin.Dv NULL .
10661d06d6bSBaptiste Daroussin.It Vt struct tbl_opts
10761d06d6bSBaptiste DaroussinThis structure describes the options of one table.
10861d06d6bSBaptiste DaroussinIt is used as a substructure of
10961d06d6bSBaptiste Daroussin.Vt struct tbl_node
11061d06d6bSBaptiste Daroussinand thus created and deleted together with it.
11161d06d6bSBaptiste DaroussinIt is filled in
11261d06d6bSBaptiste Daroussin.Fn tbl_options .
11361d06d6bSBaptiste Daroussin.It Vt struct tbl_row
11461d06d6bSBaptiste DaroussinThis structure describes one layout line in a table
11561d06d6bSBaptiste Daroussinby maintaining a list of all the cells in that line.
11661d06d6bSBaptiste DaroussinIt is allocated and filled in
11761d06d6bSBaptiste Daroussin.Fn row Bq Pa tbl_layout.c
11861d06d6bSBaptiste Daroussinand referenced from the
11961d06d6bSBaptiste Daroussin.Fa layout
12061d06d6bSBaptiste Daroussinmember of
12161d06d6bSBaptiste Daroussin.Vt struct tbl_node .
12261d06d6bSBaptiste Daroussin.Pp
12361d06d6bSBaptiste DaroussinThe
12461d06d6bSBaptiste Daroussin.Fa next
12561d06d6bSBaptiste Daroussinmember may be
12661d06d6bSBaptiste Daroussin.Dv NULL .
12761d06d6bSBaptiste DaroussinThe function
12861d06d6bSBaptiste Daroussin.Fn tbl_layout
12961d06d6bSBaptiste Daroussinguarantees that the
13061d06d6bSBaptiste Daroussin.Fa first
13161d06d6bSBaptiste Daroussinand
13261d06d6bSBaptiste Daroussin.Fa last
13361d06d6bSBaptiste Daroussinmembers are not NULL.
13461d06d6bSBaptiste Daroussin.It Vt struct tbl_cell
13561d06d6bSBaptiste DaroussinThis structure describes one layout cell in a table,
13661d06d6bSBaptiste Daroussinin particular its alignment, membership in spans, and
13761d06d6bSBaptiste Daroussinusage for lines.
13861d06d6bSBaptiste DaroussinIt is allocated and filled in
13961d06d6bSBaptiste Daroussin.Fn cell_alloc Bq Pa tbl_layout.c
14061d06d6bSBaptiste Daroussinand referenced from the
14161d06d6bSBaptiste Daroussin.Fa first
14261d06d6bSBaptiste Daroussinand
14361d06d6bSBaptiste Daroussin.Fa last
14461d06d6bSBaptiste Daroussinmembers of
14561d06d6bSBaptiste Daroussin.Vt struct tbl_row .
14661d06d6bSBaptiste Daroussin.Pp
14761d06d6bSBaptiste DaroussinThe
14861d06d6bSBaptiste Daroussin.Fa next
14961d06d6bSBaptiste Daroussinmember may be
15061d06d6bSBaptiste Daroussin.Dv NULL .
15161d06d6bSBaptiste Daroussin.It Vt struct tbl_span
15261d06d6bSBaptiste DaroussinThis structure describes one data line in a table
15361d06d6bSBaptiste Daroussinby maintaining a list of all data cells in that line
15461d06d6bSBaptiste Daroussinor by specifying that it is a horizontal line.
15561d06d6bSBaptiste DaroussinIt is allocated and filled in
15661d06d6bSBaptiste Daroussin.Fn newspan Bq Pa tbl_data.c
15761d06d6bSBaptiste Daroussinwhich is called from
15861d06d6bSBaptiste Daroussin.Fn tbl_data
15961d06d6bSBaptiste Daroussinand referenced from the
16061d06d6bSBaptiste Daroussin.Fa first_span ,
16161d06d6bSBaptiste Daroussin.Fa current_span ,
16261d06d6bSBaptiste Daroussinand
16361d06d6bSBaptiste Daroussin.Fa last_span
16461d06d6bSBaptiste Daroussinmembers of
16561d06d6bSBaptiste Daroussin.Vt struct tbl_node ,
16661d06d6bSBaptiste Daroussinand from the
16761d06d6bSBaptiste Daroussin.Fa span
16861d06d6bSBaptiste Daroussinmembers of
16961d06d6bSBaptiste Daroussin.Vt struct man_node
17061d06d6bSBaptiste Daroussinand
17161d06d6bSBaptiste Daroussin.Vt struct mdoc_node
17261d06d6bSBaptiste Daroussinfrom
17361d06d6bSBaptiste Daroussin.In man.h
17461d06d6bSBaptiste Daroussinand
17561d06d6bSBaptiste Daroussin.In mdoc.h .
17661d06d6bSBaptiste Daroussin.Pp
17761d06d6bSBaptiste DaroussinThe
17861d06d6bSBaptiste Daroussin.Fa first ,
17961d06d6bSBaptiste Daroussin.Fa last ,
18061d06d6bSBaptiste Daroussin.Fa prev ,
18161d06d6bSBaptiste Daroussinand
18261d06d6bSBaptiste Daroussin.Fa next
18361d06d6bSBaptiste Daroussinmembers may be
18461d06d6bSBaptiste Daroussin.Dv NULL .
18561d06d6bSBaptiste DaroussinThe function
18661d06d6bSBaptiste Daroussin.Fn newspan Bq Pa tbl_data.c
18761d06d6bSBaptiste Daroussinguarantees that the
18861d06d6bSBaptiste Daroussin.Fa opts
18961d06d6bSBaptiste Daroussinand
19061d06d6bSBaptiste Daroussin.Fa layout
19161d06d6bSBaptiste Daroussinmembers are not
19261d06d6bSBaptiste Daroussin.Dv NULL .
19361d06d6bSBaptiste Daroussin.It Vt struct tbl_dat
19461d06d6bSBaptiste DaroussinThis structure describes one data cell in a table by specifying
19561d06d6bSBaptiste Daroussinwhether it contains a line or data, whether it spans additional
19661d06d6bSBaptiste Daroussinlayout cells, and by storing the data.
19761d06d6bSBaptiste DaroussinIt is allocated and filled in
19861d06d6bSBaptiste Daroussin.Fn tbl_data
19961d06d6bSBaptiste Daroussinand referenced from the
20061d06d6bSBaptiste Daroussin.Fa first
20161d06d6bSBaptiste Daroussinand
20261d06d6bSBaptiste Daroussin.Fa last
20361d06d6bSBaptiste Daroussinmembers of
20461d06d6bSBaptiste Daroussin.Vt struct tbl_span .
20561d06d6bSBaptiste Daroussin.Pp
20661d06d6bSBaptiste DaroussinThe
20761d06d6bSBaptiste Daroussin.Fa string
20861d06d6bSBaptiste Daroussinand
20961d06d6bSBaptiste Daroussin.Fa next
21061d06d6bSBaptiste Daroussinmembers may be
21161d06d6bSBaptiste Daroussin.Dv NULL .
21261d06d6bSBaptiste DaroussinThe function
21361d06d6bSBaptiste Daroussin.Fn getdata
21461d06d6bSBaptiste Daroussinguarantees that the
21561d06d6bSBaptiste Daroussin.Fa layout
21661d06d6bSBaptiste Daroussinmember is not
21761d06d6bSBaptiste Daroussin.Dv NULL .
21861d06d6bSBaptiste Daroussin.El
21961d06d6bSBaptiste Daroussin.Ss Interface functions
22061d06d6bSBaptiste DaroussinThe following functions are implemented in
22161d06d6bSBaptiste Daroussin.Pa tbl.c ,
222*7295610fSBaptiste Daroussinand all callers are in
22361d06d6bSBaptiste Daroussin.Pa roff.c .
22461d06d6bSBaptiste Daroussin.Bl -tag -width Ds
22561d06d6bSBaptiste Daroussin.It Fn tbl_alloc
22661d06d6bSBaptiste DaroussinAllocates, initializes, and returns a new
22761d06d6bSBaptiste Daroussin.Vt struct tbl_node .
22861d06d6bSBaptiste DaroussinCalled from
22961d06d6bSBaptiste Daroussin.Fn roff_TS .
23061d06d6bSBaptiste Daroussin.It Fn tbl_read
23161d06d6bSBaptiste DaroussinDispatches to
23261d06d6bSBaptiste Daroussin.Fn tbl_option ,
23361d06d6bSBaptiste Daroussin.Fn tbl_layout ,
23461d06d6bSBaptiste Daroussin.Fn tbl_cdata ,
23561d06d6bSBaptiste Daroussinand
23661d06d6bSBaptiste Daroussin.Fn tbl_data ,
23761d06d6bSBaptiste Daroussinsee below.
23861d06d6bSBaptiste DaroussinCalled from
23961d06d6bSBaptiste Daroussin.Fn roff_parseln .
24061d06d6bSBaptiste Daroussin.It Fn tbl_restart
24161d06d6bSBaptiste DaroussinResets the
24261d06d6bSBaptiste Daroussin.Fa part
24361d06d6bSBaptiste Daroussinmember of
24461d06d6bSBaptiste Daroussin.Vt struct tbl_node
24561d06d6bSBaptiste Daroussinto
24661d06d6bSBaptiste Daroussin.Dv TBL_PART_LAYOUT .
24761d06d6bSBaptiste DaroussinCalled from
24861d06d6bSBaptiste Daroussin.Fn roff_T_ .
24961d06d6bSBaptiste Daroussin.It Fn tbl_span
25061d06d6bSBaptiste DaroussinOn the first call, return the first
25161d06d6bSBaptiste Daroussin.Vt struct tbl_span ;
25261d06d6bSBaptiste Daroussinfor later calls, return the next one or
25361d06d6bSBaptiste Daroussin.Dv NULL .
25461d06d6bSBaptiste DaroussinCalled from
25561d06d6bSBaptiste Daroussin.Fn roff_span .
25661d06d6bSBaptiste Daroussin.It Fn tbl_end
25761d06d6bSBaptiste DaroussinFlags the last span as
25861d06d6bSBaptiste Daroussin.Dv TBL_SPAN_LAST
25961d06d6bSBaptiste Daroussinand clears the pointer passed as an argment.
26061d06d6bSBaptiste DaroussinCalled from
26161d06d6bSBaptiste Daroussin.Fn roff_TE
26261d06d6bSBaptiste Daroussinand
26361d06d6bSBaptiste Daroussin.Fn roff_endparse .
26461d06d6bSBaptiste Daroussin.It Fn tbl_free
26561d06d6bSBaptiste DaroussinFrees the specified
26661d06d6bSBaptiste Daroussin.Vt struct tbl_node
26761d06d6bSBaptiste Daroussinand all the tbl_row, tbl_cell, tbl_span, and tbl_dat structures
26861d06d6bSBaptiste Daroussinreferenced from it.
26961d06d6bSBaptiste DaroussinCalled from
27061d06d6bSBaptiste Daroussin.Fn roff_free
27161d06d6bSBaptiste Daroussinand
27261d06d6bSBaptiste Daroussin.Fn roff_reset .
27361d06d6bSBaptiste Daroussin.El
27461d06d6bSBaptiste Daroussin.Ss Private functions
275*7295610fSBaptiste DaroussinThe following functions are declared in
276*7295610fSBaptiste Daroussin.In tbl_int.h .
27761d06d6bSBaptiste Daroussin.Bl -tag -width Ds
27861d06d6bSBaptiste Daroussin.It Ft int Fn tbl_options "struct tbl_node *tbl" "int ln" "const char *p"
27961d06d6bSBaptiste DaroussinParses the options line into
28061d06d6bSBaptiste Daroussin.Vt struct tbl_opts .
28161d06d6bSBaptiste DaroussinImplemented in
28261d06d6bSBaptiste Daroussin.Pa tbl_opts.c ,
28361d06d6bSBaptiste Daroussincalled from
28461d06d6bSBaptiste Daroussin.Fn tbl_read .
28561d06d6bSBaptiste Daroussin.It Ft int Fn tbl_layout "struct tbl_node *tbl" "int ln" "const char *p"
28661d06d6bSBaptiste DaroussinAllocates and fills one
28761d06d6bSBaptiste Daroussin.Vt struct tbl_row
28861d06d6bSBaptiste Daroussinfor each layout line and one
28961d06d6bSBaptiste Daroussin.Vt struct tbl_cell
29061d06d6bSBaptiste Daroussinfor each layout cell.
29161d06d6bSBaptiste DaroussinImplemented in
29261d06d6bSBaptiste Daroussin.Pa tbl_layout.c ,
29361d06d6bSBaptiste Daroussincalled from
29461d06d6bSBaptiste Daroussin.Fn tbl_read .
29561d06d6bSBaptiste Daroussin.It Ft int Fn tbl_data "struct tbl_node *tbl" "int ln" "const char *p"
29661d06d6bSBaptiste DaroussinAllocates one
29761d06d6bSBaptiste Daroussin.Vt struct tbl_span
29861d06d6bSBaptiste Daroussinfor each data line and calls
29961d06d6bSBaptiste Daroussin.Fn getdata
30061d06d6bSBaptiste Daroussinfor each data cell.
30161d06d6bSBaptiste DaroussinImplemented in
30261d06d6bSBaptiste Daroussin.Pa tbl_data.c ,
30361d06d6bSBaptiste Daroussincalled from
30461d06d6bSBaptiste Daroussin.Fn tbl_read .
30561d06d6bSBaptiste Daroussin.It Ft int Fn tbl_cdata "struct tbl_node *tbl" "int ln" "const char *p"
30661d06d6bSBaptiste DaroussinContinues parsing a data line:
30761d06d6bSBaptiste DaroussinWhen finding
30861d06d6bSBaptiste Daroussin.Sq T} ,
30961d06d6bSBaptiste Daroussinswitches back to
31061d06d6bSBaptiste Daroussin.Dv TBL_PART_DATA
31161d06d6bSBaptiste Daroussinmode and calls
31261d06d6bSBaptiste Daroussin.Fn getdata
31361d06d6bSBaptiste Daroussinif there are more data cells on the line.
31461d06d6bSBaptiste DaroussinOtherwise, appends the data to the current data cell.
31561d06d6bSBaptiste DaroussinImplemented in
31661d06d6bSBaptiste Daroussin.Pa tbl_data.c ,
31761d06d6bSBaptiste Daroussincalled from
31861d06d6bSBaptiste Daroussin.Fn tbl_read .
31961d06d6bSBaptiste Daroussin.It Xo
32061d06d6bSBaptiste Daroussin.Ft int
32161d06d6bSBaptiste Daroussin.Fo getdata
32261d06d6bSBaptiste Daroussin.Fa "struct tbl_node *tbl"
32361d06d6bSBaptiste Daroussin.Fa "struct tbl_span *dp"
32461d06d6bSBaptiste Daroussin.Fa "int ln"
32561d06d6bSBaptiste Daroussin.Fa "const char *p"
32661d06d6bSBaptiste Daroussin.Fa "int *pos"
32761d06d6bSBaptiste Daroussin.Fc
32861d06d6bSBaptiste Daroussin.Xc
32961d06d6bSBaptiste DaroussinParses one data cell into one
33061d06d6bSBaptiste Daroussin.Vt struct tbl_dat .
33161d06d6bSBaptiste DaroussinImplemented in
33261d06d6bSBaptiste Daroussin.Pa tbl_data.c ,
33361d06d6bSBaptiste Daroussincalled from
33461d06d6bSBaptiste Daroussin.Fn tbl_data
33561d06d6bSBaptiste Daroussinand
33661d06d6bSBaptiste Daroussin.Fn tbl_cdata .
33761d06d6bSBaptiste Daroussin.El
33861d06d6bSBaptiste Daroussin.Sh SEE ALSO
33961d06d6bSBaptiste Daroussin.Xr mandoc 1 ,
34061d06d6bSBaptiste Daroussin.Xr mandoc 3 ,
34161d06d6bSBaptiste Daroussin.Xr tbl 7
34261d06d6bSBaptiste Daroussin.Sh AUTHORS
34361d06d6bSBaptiste Daroussin.An -nosplit
34461d06d6bSBaptiste DaroussinThe
34561d06d6bSBaptiste Daroussin.Nm tbl
34661d06d6bSBaptiste Daroussinlibrary was written by
34761d06d6bSBaptiste Daroussin.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
34861d06d6bSBaptiste Daroussinwith contributions from
34961d06d6bSBaptiste Daroussin.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
350