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