xref: /freebsd/contrib/mandoc/roff.h (revision c1c95add8c80843ba15d784f95c361d795b1f593)
1*c1c95addSBrooks Davis /* $Id: roff.h,v 1.76 2023/10/24 20:53:12 schwarze Exp $	*/
261d06d6bSBaptiste Daroussin /*
3*c1c95addSBrooks Davis  * Copyright (c) 2013-2015,2017-2020,2022 Ingo Schwarze <schwarze@openbsd.org>
461d06d6bSBaptiste Daroussin  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
561d06d6bSBaptiste Daroussin  *
661d06d6bSBaptiste Daroussin  * Permission to use, copy, modify, and distribute this software for any
761d06d6bSBaptiste Daroussin  * purpose with or without fee is hereby granted, provided that the above
861d06d6bSBaptiste Daroussin  * copyright notice and this permission notice appear in all copies.
961d06d6bSBaptiste Daroussin  *
1061d06d6bSBaptiste Daroussin  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
1161d06d6bSBaptiste Daroussin  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1261d06d6bSBaptiste Daroussin  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
1361d06d6bSBaptiste Daroussin  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1461d06d6bSBaptiste Daroussin  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1561d06d6bSBaptiste Daroussin  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1661d06d6bSBaptiste Daroussin  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
177295610fSBaptiste Daroussin  *
187295610fSBaptiste Daroussin  * Common data types for all syntax trees and related functions.
1961d06d6bSBaptiste Daroussin  */
2061d06d6bSBaptiste Daroussin 
2161d06d6bSBaptiste Daroussin struct	ohash;
2261d06d6bSBaptiste Daroussin struct	mdoc_arg;
2361d06d6bSBaptiste Daroussin union	mdoc_data;
247295610fSBaptiste Daroussin struct	tbl_span;
257295610fSBaptiste Daroussin struct	eqn_box;
2661d06d6bSBaptiste Daroussin 
2761d06d6bSBaptiste Daroussin enum	roff_macroset {
2861d06d6bSBaptiste Daroussin 	MACROSET_NONE = 0,
2961d06d6bSBaptiste Daroussin 	MACROSET_MDOC,
3061d06d6bSBaptiste Daroussin 	MACROSET_MAN
3161d06d6bSBaptiste Daroussin };
3261d06d6bSBaptiste Daroussin 
3361d06d6bSBaptiste Daroussin enum	roff_sec {
3461d06d6bSBaptiste Daroussin 	SEC_NONE = 0,
3561d06d6bSBaptiste Daroussin 	SEC_NAME,
3661d06d6bSBaptiste Daroussin 	SEC_LIBRARY,
3761d06d6bSBaptiste Daroussin 	SEC_SYNOPSIS,
3861d06d6bSBaptiste Daroussin 	SEC_DESCRIPTION,
3961d06d6bSBaptiste Daroussin 	SEC_CONTEXT,
4061d06d6bSBaptiste Daroussin 	SEC_IMPLEMENTATION,	/* IMPLEMENTATION NOTES */
4161d06d6bSBaptiste Daroussin 	SEC_RETURN_VALUES,
4261d06d6bSBaptiste Daroussin 	SEC_ENVIRONMENT,
4361d06d6bSBaptiste Daroussin 	SEC_FILES,
4461d06d6bSBaptiste Daroussin 	SEC_EXIT_STATUS,
4561d06d6bSBaptiste Daroussin 	SEC_EXAMPLES,
4661d06d6bSBaptiste Daroussin 	SEC_DIAGNOSTICS,
4761d06d6bSBaptiste Daroussin 	SEC_COMPATIBILITY,
4861d06d6bSBaptiste Daroussin 	SEC_ERRORS,
4961d06d6bSBaptiste Daroussin 	SEC_SEE_ALSO,
5061d06d6bSBaptiste Daroussin 	SEC_STANDARDS,
5161d06d6bSBaptiste Daroussin 	SEC_HISTORY,
5261d06d6bSBaptiste Daroussin 	SEC_AUTHORS,
5361d06d6bSBaptiste Daroussin 	SEC_CAVEATS,
5461d06d6bSBaptiste Daroussin 	SEC_BUGS,
5561d06d6bSBaptiste Daroussin 	SEC_SECURITY,
5661d06d6bSBaptiste Daroussin 	SEC_CUSTOM,
5761d06d6bSBaptiste Daroussin 	SEC__MAX
5861d06d6bSBaptiste Daroussin };
5961d06d6bSBaptiste Daroussin 
6061d06d6bSBaptiste Daroussin enum	roff_type {
6161d06d6bSBaptiste Daroussin 	ROFFT_ROOT,
6261d06d6bSBaptiste Daroussin 	ROFFT_BLOCK,
6361d06d6bSBaptiste Daroussin 	ROFFT_HEAD,
6461d06d6bSBaptiste Daroussin 	ROFFT_BODY,
6561d06d6bSBaptiste Daroussin 	ROFFT_TAIL,
6661d06d6bSBaptiste Daroussin 	ROFFT_ELEM,
6761d06d6bSBaptiste Daroussin 	ROFFT_TEXT,
6861d06d6bSBaptiste Daroussin 	ROFFT_COMMENT,
6961d06d6bSBaptiste Daroussin 	ROFFT_TBL,
7061d06d6bSBaptiste Daroussin 	ROFFT_EQN
7161d06d6bSBaptiste Daroussin };
7261d06d6bSBaptiste Daroussin 
7361d06d6bSBaptiste Daroussin enum	roff_tok {
74*c1c95addSBrooks Davis 	ROFF_br = 0,	/* Beginning of roff(7) requests. */
7561d06d6bSBaptiste Daroussin 	ROFF_ce,
767295610fSBaptiste Daroussin 	ROFF_fi,
7761d06d6bSBaptiste Daroussin 	ROFF_ft,
7861d06d6bSBaptiste Daroussin 	ROFF_ll,
7961d06d6bSBaptiste Daroussin 	ROFF_mc,
807295610fSBaptiste Daroussin 	ROFF_nf,
8161d06d6bSBaptiste Daroussin 	ROFF_po,
8261d06d6bSBaptiste Daroussin 	ROFF_rj,
8361d06d6bSBaptiste Daroussin 	ROFF_sp,
8461d06d6bSBaptiste Daroussin 	ROFF_ta,
8561d06d6bSBaptiste Daroussin 	ROFF_ti,
86*c1c95addSBrooks Davis 	ROFF_MAX,	/* End of requests that generate nodes. */
87*c1c95addSBrooks Davis 	ROFF_ab,	/* Requests only used during preprocessing. */
8861d06d6bSBaptiste Daroussin 	ROFF_ad,
8961d06d6bSBaptiste Daroussin 	ROFF_af,
9061d06d6bSBaptiste Daroussin 	ROFF_aln,
9161d06d6bSBaptiste Daroussin 	ROFF_als,
9261d06d6bSBaptiste Daroussin 	ROFF_am,
9361d06d6bSBaptiste Daroussin 	ROFF_am1,
9461d06d6bSBaptiste Daroussin 	ROFF_ami,
9561d06d6bSBaptiste Daroussin 	ROFF_ami1,
9661d06d6bSBaptiste Daroussin 	ROFF_as,
9761d06d6bSBaptiste Daroussin 	ROFF_as1,
9861d06d6bSBaptiste Daroussin 	ROFF_asciify,
9961d06d6bSBaptiste Daroussin 	ROFF_backtrace,
10061d06d6bSBaptiste Daroussin 	ROFF_bd,
10161d06d6bSBaptiste Daroussin 	ROFF_bleedat,
10261d06d6bSBaptiste Daroussin 	ROFF_blm,
10361d06d6bSBaptiste Daroussin 	ROFF_box,
10461d06d6bSBaptiste Daroussin 	ROFF_boxa,
10561d06d6bSBaptiste Daroussin 	ROFF_bp,
10661d06d6bSBaptiste Daroussin 	ROFF_BP,
10761d06d6bSBaptiste Daroussin 	ROFF_break,
10861d06d6bSBaptiste Daroussin 	ROFF_breakchar,
10961d06d6bSBaptiste Daroussin 	ROFF_brnl,
11061d06d6bSBaptiste Daroussin 	ROFF_brp,
11161d06d6bSBaptiste Daroussin 	ROFF_brpnl,
11261d06d6bSBaptiste Daroussin 	ROFF_c2,
11361d06d6bSBaptiste Daroussin 	ROFF_cc,
11461d06d6bSBaptiste Daroussin 	ROFF_cf,
11561d06d6bSBaptiste Daroussin 	ROFF_cflags,
11661d06d6bSBaptiste Daroussin 	ROFF_ch,
11761d06d6bSBaptiste Daroussin 	ROFF_char,
11861d06d6bSBaptiste Daroussin 	ROFF_chop,
11961d06d6bSBaptiste Daroussin 	ROFF_class,
12061d06d6bSBaptiste Daroussin 	ROFF_close,
12161d06d6bSBaptiste Daroussin 	ROFF_CL,
12261d06d6bSBaptiste Daroussin 	ROFF_color,
12361d06d6bSBaptiste Daroussin 	ROFF_composite,
12461d06d6bSBaptiste Daroussin 	ROFF_continue,
12561d06d6bSBaptiste Daroussin 	ROFF_cp,
12661d06d6bSBaptiste Daroussin 	ROFF_cropat,
12761d06d6bSBaptiste Daroussin 	ROFF_cs,
12861d06d6bSBaptiste Daroussin 	ROFF_cu,
12961d06d6bSBaptiste Daroussin 	ROFF_da,
13061d06d6bSBaptiste Daroussin 	ROFF_dch,
13161d06d6bSBaptiste Daroussin 	ROFF_Dd,
13261d06d6bSBaptiste Daroussin 	ROFF_de,
13361d06d6bSBaptiste Daroussin 	ROFF_de1,
13461d06d6bSBaptiste Daroussin 	ROFF_defcolor,
13561d06d6bSBaptiste Daroussin 	ROFF_dei,
13661d06d6bSBaptiste Daroussin 	ROFF_dei1,
13761d06d6bSBaptiste Daroussin 	ROFF_device,
13861d06d6bSBaptiste Daroussin 	ROFF_devicem,
13961d06d6bSBaptiste Daroussin 	ROFF_di,
14061d06d6bSBaptiste Daroussin 	ROFF_do,
14161d06d6bSBaptiste Daroussin 	ROFF_ds,
14261d06d6bSBaptiste Daroussin 	ROFF_ds1,
14361d06d6bSBaptiste Daroussin 	ROFF_dwh,
14461d06d6bSBaptiste Daroussin 	ROFF_dt,
14561d06d6bSBaptiste Daroussin 	ROFF_ec,
14661d06d6bSBaptiste Daroussin 	ROFF_ecr,
14761d06d6bSBaptiste Daroussin 	ROFF_ecs,
14861d06d6bSBaptiste Daroussin 	ROFF_el,
14961d06d6bSBaptiste Daroussin 	ROFF_em,
15061d06d6bSBaptiste Daroussin 	ROFF_EN,
15161d06d6bSBaptiste Daroussin 	ROFF_eo,
15261d06d6bSBaptiste Daroussin 	ROFF_EP,
15361d06d6bSBaptiste Daroussin 	ROFF_EQ,
15461d06d6bSBaptiste Daroussin 	ROFF_errprint,
15561d06d6bSBaptiste Daroussin 	ROFF_ev,
15661d06d6bSBaptiste Daroussin 	ROFF_evc,
15761d06d6bSBaptiste Daroussin 	ROFF_ex,
15861d06d6bSBaptiste Daroussin 	ROFF_fallback,
15961d06d6bSBaptiste Daroussin 	ROFF_fam,
16061d06d6bSBaptiste Daroussin 	ROFF_fc,
16161d06d6bSBaptiste Daroussin 	ROFF_fchar,
16261d06d6bSBaptiste Daroussin 	ROFF_fcolor,
16361d06d6bSBaptiste Daroussin 	ROFF_fdeferlig,
16461d06d6bSBaptiste Daroussin 	ROFF_feature,
16561d06d6bSBaptiste Daroussin 	ROFF_fkern,
16661d06d6bSBaptiste Daroussin 	ROFF_fl,
16761d06d6bSBaptiste Daroussin 	ROFF_flig,
16861d06d6bSBaptiste Daroussin 	ROFF_fp,
16961d06d6bSBaptiste Daroussin 	ROFF_fps,
17061d06d6bSBaptiste Daroussin 	ROFF_fschar,
17161d06d6bSBaptiste Daroussin 	ROFF_fspacewidth,
17261d06d6bSBaptiste Daroussin 	ROFF_fspecial,
17361d06d6bSBaptiste Daroussin 	ROFF_ftr,
17461d06d6bSBaptiste Daroussin 	ROFF_fzoom,
17561d06d6bSBaptiste Daroussin 	ROFF_gcolor,
17661d06d6bSBaptiste Daroussin 	ROFF_hc,
17761d06d6bSBaptiste Daroussin 	ROFF_hcode,
17861d06d6bSBaptiste Daroussin 	ROFF_hidechar,
17961d06d6bSBaptiste Daroussin 	ROFF_hla,
18061d06d6bSBaptiste Daroussin 	ROFF_hlm,
18161d06d6bSBaptiste Daroussin 	ROFF_hpf,
18261d06d6bSBaptiste Daroussin 	ROFF_hpfa,
18361d06d6bSBaptiste Daroussin 	ROFF_hpfcode,
18461d06d6bSBaptiste Daroussin 	ROFF_hw,
18561d06d6bSBaptiste Daroussin 	ROFF_hy,
18661d06d6bSBaptiste Daroussin 	ROFF_hylang,
18761d06d6bSBaptiste Daroussin 	ROFF_hylen,
18861d06d6bSBaptiste Daroussin 	ROFF_hym,
18961d06d6bSBaptiste Daroussin 	ROFF_hypp,
19061d06d6bSBaptiste Daroussin 	ROFF_hys,
19161d06d6bSBaptiste Daroussin 	ROFF_ie,
19261d06d6bSBaptiste Daroussin 	ROFF_if,
19361d06d6bSBaptiste Daroussin 	ROFF_ig,
19461d06d6bSBaptiste Daroussin 	/* MAN_in; ignored in mdoc(7) */
19561d06d6bSBaptiste Daroussin 	ROFF_index,
19661d06d6bSBaptiste Daroussin 	ROFF_it,
19761d06d6bSBaptiste Daroussin 	ROFF_itc,
19861d06d6bSBaptiste Daroussin 	ROFF_IX,
19961d06d6bSBaptiste Daroussin 	ROFF_kern,
20061d06d6bSBaptiste Daroussin 	ROFF_kernafter,
20161d06d6bSBaptiste Daroussin 	ROFF_kernbefore,
20261d06d6bSBaptiste Daroussin 	ROFF_kernpair,
20361d06d6bSBaptiste Daroussin 	ROFF_lc,
20461d06d6bSBaptiste Daroussin 	ROFF_lc_ctype,
20561d06d6bSBaptiste Daroussin 	ROFF_lds,
20661d06d6bSBaptiste Daroussin 	ROFF_length,
20761d06d6bSBaptiste Daroussin 	ROFF_letadj,
20861d06d6bSBaptiste Daroussin 	ROFF_lf,
20961d06d6bSBaptiste Daroussin 	ROFF_lg,
21061d06d6bSBaptiste Daroussin 	ROFF_lhang,
21161d06d6bSBaptiste Daroussin 	ROFF_linetabs,
21261d06d6bSBaptiste Daroussin 	ROFF_lnr,
21361d06d6bSBaptiste Daroussin 	ROFF_lnrf,
21461d06d6bSBaptiste Daroussin 	ROFF_lpfx,
21561d06d6bSBaptiste Daroussin 	ROFF_ls,
21661d06d6bSBaptiste Daroussin 	ROFF_lsm,
21761d06d6bSBaptiste Daroussin 	ROFF_lt,
21861d06d6bSBaptiste Daroussin 	ROFF_mediasize,
21961d06d6bSBaptiste Daroussin 	ROFF_minss,
22061d06d6bSBaptiste Daroussin 	ROFF_mk,
22161d06d6bSBaptiste Daroussin 	ROFF_mso,
22261d06d6bSBaptiste Daroussin 	ROFF_na,
22361d06d6bSBaptiste Daroussin 	ROFF_ne,
22461d06d6bSBaptiste Daroussin 	ROFF_nh,
22561d06d6bSBaptiste Daroussin 	ROFF_nhychar,
22661d06d6bSBaptiste Daroussin 	ROFF_nm,
22761d06d6bSBaptiste Daroussin 	ROFF_nn,
22861d06d6bSBaptiste Daroussin 	ROFF_nop,
22961d06d6bSBaptiste Daroussin 	ROFF_nr,
23061d06d6bSBaptiste Daroussin 	ROFF_nrf,
23161d06d6bSBaptiste Daroussin 	ROFF_nroff,
23261d06d6bSBaptiste Daroussin 	ROFF_ns,
23361d06d6bSBaptiste Daroussin 	ROFF_nx,
23461d06d6bSBaptiste Daroussin 	ROFF_open,
23561d06d6bSBaptiste Daroussin 	ROFF_opena,
23661d06d6bSBaptiste Daroussin 	ROFF_os,
23761d06d6bSBaptiste Daroussin 	ROFF_output,
23861d06d6bSBaptiste Daroussin 	ROFF_padj,
23961d06d6bSBaptiste Daroussin 	ROFF_papersize,
24061d06d6bSBaptiste Daroussin 	ROFF_pc,
24161d06d6bSBaptiste Daroussin 	ROFF_pev,
24261d06d6bSBaptiste Daroussin 	ROFF_pi,
24361d06d6bSBaptiste Daroussin 	ROFF_PI,
24461d06d6bSBaptiste Daroussin 	ROFF_pl,
24561d06d6bSBaptiste Daroussin 	ROFF_pm,
24661d06d6bSBaptiste Daroussin 	ROFF_pn,
24761d06d6bSBaptiste Daroussin 	ROFF_pnr,
24861d06d6bSBaptiste Daroussin 	ROFF_ps,
24961d06d6bSBaptiste Daroussin 	ROFF_psbb,
25061d06d6bSBaptiste Daroussin 	ROFF_pshape,
25161d06d6bSBaptiste Daroussin 	ROFF_pso,
25261d06d6bSBaptiste Daroussin 	ROFF_ptr,
25361d06d6bSBaptiste Daroussin 	ROFF_pvs,
25461d06d6bSBaptiste Daroussin 	ROFF_rchar,
25561d06d6bSBaptiste Daroussin 	ROFF_rd,
25661d06d6bSBaptiste Daroussin 	ROFF_recursionlimit,
25761d06d6bSBaptiste Daroussin 	ROFF_return,
25861d06d6bSBaptiste Daroussin 	ROFF_rfschar,
25961d06d6bSBaptiste Daroussin 	ROFF_rhang,
26061d06d6bSBaptiste Daroussin 	ROFF_rm,
26161d06d6bSBaptiste Daroussin 	ROFF_rn,
26261d06d6bSBaptiste Daroussin 	ROFF_rnn,
26361d06d6bSBaptiste Daroussin 	ROFF_rr,
26461d06d6bSBaptiste Daroussin 	ROFF_rs,
26561d06d6bSBaptiste Daroussin 	ROFF_rt,
26661d06d6bSBaptiste Daroussin 	ROFF_schar,
26761d06d6bSBaptiste Daroussin 	ROFF_sentchar,
26861d06d6bSBaptiste Daroussin 	ROFF_shc,
26961d06d6bSBaptiste Daroussin 	ROFF_shift,
27061d06d6bSBaptiste Daroussin 	ROFF_sizes,
27161d06d6bSBaptiste Daroussin 	ROFF_so,
27261d06d6bSBaptiste Daroussin 	ROFF_spacewidth,
27361d06d6bSBaptiste Daroussin 	ROFF_special,
27461d06d6bSBaptiste Daroussin 	ROFF_spreadwarn,
27561d06d6bSBaptiste Daroussin 	ROFF_ss,
27661d06d6bSBaptiste Daroussin 	ROFF_sty,
27761d06d6bSBaptiste Daroussin 	ROFF_substring,
27861d06d6bSBaptiste Daroussin 	ROFF_sv,
27961d06d6bSBaptiste Daroussin 	ROFF_sy,
28061d06d6bSBaptiste Daroussin 	ROFF_T_,
28161d06d6bSBaptiste Daroussin 	ROFF_tc,
28261d06d6bSBaptiste Daroussin 	ROFF_TE,
28361d06d6bSBaptiste Daroussin 	ROFF_TH,
28461d06d6bSBaptiste Daroussin 	ROFF_tkf,
28561d06d6bSBaptiste Daroussin 	ROFF_tl,
28661d06d6bSBaptiste Daroussin 	ROFF_tm,
28761d06d6bSBaptiste Daroussin 	ROFF_tm1,
28861d06d6bSBaptiste Daroussin 	ROFF_tmc,
28961d06d6bSBaptiste Daroussin 	ROFF_tr,
29061d06d6bSBaptiste Daroussin 	ROFF_track,
29161d06d6bSBaptiste Daroussin 	ROFF_transchar,
29261d06d6bSBaptiste Daroussin 	ROFF_trf,
29361d06d6bSBaptiste Daroussin 	ROFF_trimat,
29461d06d6bSBaptiste Daroussin 	ROFF_trin,
29561d06d6bSBaptiste Daroussin 	ROFF_trnt,
29661d06d6bSBaptiste Daroussin 	ROFF_troff,
29761d06d6bSBaptiste Daroussin 	ROFF_TS,
29861d06d6bSBaptiste Daroussin 	ROFF_uf,
29961d06d6bSBaptiste Daroussin 	ROFF_ul,
30061d06d6bSBaptiste Daroussin 	ROFF_unformat,
30161d06d6bSBaptiste Daroussin 	ROFF_unwatch,
30261d06d6bSBaptiste Daroussin 	ROFF_unwatchn,
30361d06d6bSBaptiste Daroussin 	ROFF_vpt,
30461d06d6bSBaptiste Daroussin 	ROFF_vs,
30561d06d6bSBaptiste Daroussin 	ROFF_warn,
30661d06d6bSBaptiste Daroussin 	ROFF_warnscale,
30761d06d6bSBaptiste Daroussin 	ROFF_watch,
30861d06d6bSBaptiste Daroussin 	ROFF_watchlength,
30961d06d6bSBaptiste Daroussin 	ROFF_watchn,
31061d06d6bSBaptiste Daroussin 	ROFF_wh,
31161d06d6bSBaptiste Daroussin 	ROFF_while,
31261d06d6bSBaptiste Daroussin 	ROFF_write,
31361d06d6bSBaptiste Daroussin 	ROFF_writec,
31461d06d6bSBaptiste Daroussin 	ROFF_writem,
31561d06d6bSBaptiste Daroussin 	ROFF_xflag,
316*c1c95addSBrooks Davis 	ROFF_cblock,	/* Block end marker "..". */
317*c1c95addSBrooks Davis 	ROFF_RENAMED,	/* New name of a renamed request or macro. */
318*c1c95addSBrooks Davis 	ROFF_USERDEF,	/* User defined macro. */
319*c1c95addSBrooks Davis 	TOKEN_NONE,	/* Undefined macro or text/tbl/eqn/comment node. */
320*c1c95addSBrooks Davis 	MDOC_Dd,	/* Beginning of mdoc(7) macros. */
32161d06d6bSBaptiste Daroussin 	MDOC_Dt,
32261d06d6bSBaptiste Daroussin 	MDOC_Os,
32361d06d6bSBaptiste Daroussin 	MDOC_Sh,
32461d06d6bSBaptiste Daroussin 	MDOC_Ss,
32561d06d6bSBaptiste Daroussin 	MDOC_Pp,
32661d06d6bSBaptiste Daroussin 	MDOC_D1,
32761d06d6bSBaptiste Daroussin 	MDOC_Dl,
32861d06d6bSBaptiste Daroussin 	MDOC_Bd,
32961d06d6bSBaptiste Daroussin 	MDOC_Ed,
33061d06d6bSBaptiste Daroussin 	MDOC_Bl,
33161d06d6bSBaptiste Daroussin 	MDOC_El,
33261d06d6bSBaptiste Daroussin 	MDOC_It,
33361d06d6bSBaptiste Daroussin 	MDOC_Ad,
33461d06d6bSBaptiste Daroussin 	MDOC_An,
33561d06d6bSBaptiste Daroussin 	MDOC_Ap,
33661d06d6bSBaptiste Daroussin 	MDOC_Ar,
33761d06d6bSBaptiste Daroussin 	MDOC_Cd,
33861d06d6bSBaptiste Daroussin 	MDOC_Cm,
33961d06d6bSBaptiste Daroussin 	MDOC_Dv,
34061d06d6bSBaptiste Daroussin 	MDOC_Er,
34161d06d6bSBaptiste Daroussin 	MDOC_Ev,
34261d06d6bSBaptiste Daroussin 	MDOC_Ex,
34361d06d6bSBaptiste Daroussin 	MDOC_Fa,
34461d06d6bSBaptiste Daroussin 	MDOC_Fd,
34561d06d6bSBaptiste Daroussin 	MDOC_Fl,
34661d06d6bSBaptiste Daroussin 	MDOC_Fn,
34761d06d6bSBaptiste Daroussin 	MDOC_Ft,
34861d06d6bSBaptiste Daroussin 	MDOC_Ic,
34961d06d6bSBaptiste Daroussin 	MDOC_In,
35061d06d6bSBaptiste Daroussin 	MDOC_Li,
35161d06d6bSBaptiste Daroussin 	MDOC_Nd,
35261d06d6bSBaptiste Daroussin 	MDOC_Nm,
35361d06d6bSBaptiste Daroussin 	MDOC_Op,
35461d06d6bSBaptiste Daroussin 	MDOC_Ot,
35561d06d6bSBaptiste Daroussin 	MDOC_Pa,
35661d06d6bSBaptiste Daroussin 	MDOC_Rv,
35761d06d6bSBaptiste Daroussin 	MDOC_St,
35861d06d6bSBaptiste Daroussin 	MDOC_Va,
35961d06d6bSBaptiste Daroussin 	MDOC_Vt,
36061d06d6bSBaptiste Daroussin 	MDOC_Xr,
36161d06d6bSBaptiste Daroussin 	MDOC__A,
36261d06d6bSBaptiste Daroussin 	MDOC__B,
36361d06d6bSBaptiste Daroussin 	MDOC__D,
36461d06d6bSBaptiste Daroussin 	MDOC__I,
36561d06d6bSBaptiste Daroussin 	MDOC__J,
36661d06d6bSBaptiste Daroussin 	MDOC__N,
36761d06d6bSBaptiste Daroussin 	MDOC__O,
36861d06d6bSBaptiste Daroussin 	MDOC__P,
36961d06d6bSBaptiste Daroussin 	MDOC__R,
37061d06d6bSBaptiste Daroussin 	MDOC__T,
37161d06d6bSBaptiste Daroussin 	MDOC__V,
37261d06d6bSBaptiste Daroussin 	MDOC_Ac,
37361d06d6bSBaptiste Daroussin 	MDOC_Ao,
37461d06d6bSBaptiste Daroussin 	MDOC_Aq,
37561d06d6bSBaptiste Daroussin 	MDOC_At,
37661d06d6bSBaptiste Daroussin 	MDOC_Bc,
37761d06d6bSBaptiste Daroussin 	MDOC_Bf,
37861d06d6bSBaptiste Daroussin 	MDOC_Bo,
37961d06d6bSBaptiste Daroussin 	MDOC_Bq,
38061d06d6bSBaptiste Daroussin 	MDOC_Bsx,
38161d06d6bSBaptiste Daroussin 	MDOC_Bx,
38261d06d6bSBaptiste Daroussin 	MDOC_Db,
38361d06d6bSBaptiste Daroussin 	MDOC_Dc,
38461d06d6bSBaptiste Daroussin 	MDOC_Do,
38561d06d6bSBaptiste Daroussin 	MDOC_Dq,
38661d06d6bSBaptiste Daroussin 	MDOC_Ec,
38761d06d6bSBaptiste Daroussin 	MDOC_Ef,
38861d06d6bSBaptiste Daroussin 	MDOC_Em,
38961d06d6bSBaptiste Daroussin 	MDOC_Eo,
39061d06d6bSBaptiste Daroussin 	MDOC_Fx,
39161d06d6bSBaptiste Daroussin 	MDOC_Ms,
39261d06d6bSBaptiste Daroussin 	MDOC_No,
39361d06d6bSBaptiste Daroussin 	MDOC_Ns,
39461d06d6bSBaptiste Daroussin 	MDOC_Nx,
39561d06d6bSBaptiste Daroussin 	MDOC_Ox,
39661d06d6bSBaptiste Daroussin 	MDOC_Pc,
39761d06d6bSBaptiste Daroussin 	MDOC_Pf,
39861d06d6bSBaptiste Daroussin 	MDOC_Po,
39961d06d6bSBaptiste Daroussin 	MDOC_Pq,
40061d06d6bSBaptiste Daroussin 	MDOC_Qc,
40161d06d6bSBaptiste Daroussin 	MDOC_Ql,
40261d06d6bSBaptiste Daroussin 	MDOC_Qo,
40361d06d6bSBaptiste Daroussin 	MDOC_Qq,
40461d06d6bSBaptiste Daroussin 	MDOC_Re,
40561d06d6bSBaptiste Daroussin 	MDOC_Rs,
40661d06d6bSBaptiste Daroussin 	MDOC_Sc,
40761d06d6bSBaptiste Daroussin 	MDOC_So,
40861d06d6bSBaptiste Daroussin 	MDOC_Sq,
40961d06d6bSBaptiste Daroussin 	MDOC_Sm,
41061d06d6bSBaptiste Daroussin 	MDOC_Sx,
41161d06d6bSBaptiste Daroussin 	MDOC_Sy,
41261d06d6bSBaptiste Daroussin 	MDOC_Tn,
41361d06d6bSBaptiste Daroussin 	MDOC_Ux,
41461d06d6bSBaptiste Daroussin 	MDOC_Xc,
41561d06d6bSBaptiste Daroussin 	MDOC_Xo,
41661d06d6bSBaptiste Daroussin 	MDOC_Fo,
41761d06d6bSBaptiste Daroussin 	MDOC_Fc,
41861d06d6bSBaptiste Daroussin 	MDOC_Oo,
41961d06d6bSBaptiste Daroussin 	MDOC_Oc,
42061d06d6bSBaptiste Daroussin 	MDOC_Bk,
42161d06d6bSBaptiste Daroussin 	MDOC_Ek,
42261d06d6bSBaptiste Daroussin 	MDOC_Bt,
42361d06d6bSBaptiste Daroussin 	MDOC_Hf,
42461d06d6bSBaptiste Daroussin 	MDOC_Fr,
42561d06d6bSBaptiste Daroussin 	MDOC_Ud,
42661d06d6bSBaptiste Daroussin 	MDOC_Lb,
42761d06d6bSBaptiste Daroussin 	MDOC_Lp,
42861d06d6bSBaptiste Daroussin 	MDOC_Lk,
42961d06d6bSBaptiste Daroussin 	MDOC_Mt,
43061d06d6bSBaptiste Daroussin 	MDOC_Brq,
43161d06d6bSBaptiste Daroussin 	MDOC_Bro,
43261d06d6bSBaptiste Daroussin 	MDOC_Brc,
43361d06d6bSBaptiste Daroussin 	MDOC__C,
43461d06d6bSBaptiste Daroussin 	MDOC_Es,
43561d06d6bSBaptiste Daroussin 	MDOC_En,
43661d06d6bSBaptiste Daroussin 	MDOC_Dx,
43761d06d6bSBaptiste Daroussin 	MDOC__Q,
43861d06d6bSBaptiste Daroussin 	MDOC__U,
43961d06d6bSBaptiste Daroussin 	MDOC_Ta,
4406d38604fSBaptiste Daroussin 	MDOC_Tg,
441*c1c95addSBrooks Davis 	MDOC_MAX,	/* End of mdoc(7) macros. */
442*c1c95addSBrooks Davis 	MAN_TH,		/* Beginning of man(7) macros. */
44361d06d6bSBaptiste Daroussin 	MAN_SH,
44461d06d6bSBaptiste Daroussin 	MAN_SS,
44561d06d6bSBaptiste Daroussin 	MAN_TP,
4467295610fSBaptiste Daroussin 	MAN_TQ,
44761d06d6bSBaptiste Daroussin 	MAN_LP,
44861d06d6bSBaptiste Daroussin 	MAN_PP,
44961d06d6bSBaptiste Daroussin 	MAN_P,
45061d06d6bSBaptiste Daroussin 	MAN_IP,
45161d06d6bSBaptiste Daroussin 	MAN_HP,
45261d06d6bSBaptiste Daroussin 	MAN_SM,
45361d06d6bSBaptiste Daroussin 	MAN_SB,
45461d06d6bSBaptiste Daroussin 	MAN_BI,
45561d06d6bSBaptiste Daroussin 	MAN_IB,
45661d06d6bSBaptiste Daroussin 	MAN_BR,
45761d06d6bSBaptiste Daroussin 	MAN_RB,
45861d06d6bSBaptiste Daroussin 	MAN_R,
45961d06d6bSBaptiste Daroussin 	MAN_B,
46061d06d6bSBaptiste Daroussin 	MAN_I,
46161d06d6bSBaptiste Daroussin 	MAN_IR,
46261d06d6bSBaptiste Daroussin 	MAN_RI,
46361d06d6bSBaptiste Daroussin 	MAN_RE,
46461d06d6bSBaptiste Daroussin 	MAN_RS,
46561d06d6bSBaptiste Daroussin 	MAN_DT,
46661d06d6bSBaptiste Daroussin 	MAN_UC,
46761d06d6bSBaptiste Daroussin 	MAN_PD,
46861d06d6bSBaptiste Daroussin 	MAN_AT,
46961d06d6bSBaptiste Daroussin 	MAN_in,
4707295610fSBaptiste Daroussin 	MAN_SY,
4717295610fSBaptiste Daroussin 	MAN_YS,
47261d06d6bSBaptiste Daroussin 	MAN_OP,
47361d06d6bSBaptiste Daroussin 	MAN_EX,
47461d06d6bSBaptiste Daroussin 	MAN_EE,
47561d06d6bSBaptiste Daroussin 	MAN_UR,
47661d06d6bSBaptiste Daroussin 	MAN_UE,
47761d06d6bSBaptiste Daroussin 	MAN_MT,
47861d06d6bSBaptiste Daroussin 	MAN_ME,
479*c1c95addSBrooks Davis 	MAN_MR,
480*c1c95addSBrooks Davis 	MAN_MAX		/* End of man(7) macros. */
48161d06d6bSBaptiste Daroussin };
48261d06d6bSBaptiste Daroussin 
48361d06d6bSBaptiste Daroussin /*
48461d06d6bSBaptiste Daroussin  * Indicates that a BODY's formatting has ended, but
48561d06d6bSBaptiste Daroussin  * the scope is still open.  Used for badly nested blocks.
48661d06d6bSBaptiste Daroussin  */
48761d06d6bSBaptiste Daroussin enum	mdoc_endbody {
48861d06d6bSBaptiste Daroussin 	ENDBODY_NOT = 0,
48961d06d6bSBaptiste Daroussin 	ENDBODY_SPACE	/* Is broken: append a space. */
49061d06d6bSBaptiste Daroussin };
49161d06d6bSBaptiste Daroussin 
4927295610fSBaptiste Daroussin enum	mandoc_os {
4937295610fSBaptiste Daroussin 	MANDOC_OS_OTHER = 0,
4947295610fSBaptiste Daroussin 	MANDOC_OS_NETBSD,
4957295610fSBaptiste Daroussin 	MANDOC_OS_OPENBSD
4967295610fSBaptiste Daroussin };
4977295610fSBaptiste Daroussin 
49861d06d6bSBaptiste Daroussin struct	roff_node {
49961d06d6bSBaptiste Daroussin 	struct roff_node *parent;  /* Parent AST node. */
50061d06d6bSBaptiste Daroussin 	struct roff_node *child;   /* First child AST node. */
50161d06d6bSBaptiste Daroussin 	struct roff_node *last;    /* Last child AST node. */
50261d06d6bSBaptiste Daroussin 	struct roff_node *next;    /* Sibling AST node. */
50361d06d6bSBaptiste Daroussin 	struct roff_node *prev;    /* Prior sibling AST node. */
50461d06d6bSBaptiste Daroussin 	struct roff_node *head;    /* BLOCK */
50561d06d6bSBaptiste Daroussin 	struct roff_node *body;    /* BLOCK/ENDBODY */
50661d06d6bSBaptiste Daroussin 	struct roff_node *tail;    /* BLOCK */
50761d06d6bSBaptiste Daroussin 	struct mdoc_arg	 *args;    /* BLOCK/ELEM */
50861d06d6bSBaptiste Daroussin 	union mdoc_data	 *norm;    /* Normalized arguments. */
50961d06d6bSBaptiste Daroussin 	char		 *string;  /* TEXT */
5106d38604fSBaptiste Daroussin 	char		 *tag;     /* For less(1) :t and HTML id=. */
5117295610fSBaptiste Daroussin 	struct tbl_span	 *span;    /* TBL */
51261d06d6bSBaptiste Daroussin 	struct eqn_box	 *eqn;     /* EQN */
51361d06d6bSBaptiste Daroussin 	int		  line;    /* Input file line number. */
51461d06d6bSBaptiste Daroussin 	int		  pos;     /* Input file column number. */
51561d06d6bSBaptiste Daroussin 	int		  flags;
51661d06d6bSBaptiste Daroussin #define	NODE_VALID	 (1 << 0)  /* Has been validated. */
51761d06d6bSBaptiste Daroussin #define	NODE_ENDED	 (1 << 1)  /* Gone past body end mark. */
5187295610fSBaptiste Daroussin #define	NODE_BROKEN	 (1 << 2)  /* Must validate parent when ending. */
51961d06d6bSBaptiste Daroussin #define	NODE_LINE	 (1 << 3)  /* First macro/text on line. */
5207295610fSBaptiste Daroussin #define	NODE_DELIMO	 (1 << 4)
5217295610fSBaptiste Daroussin #define	NODE_DELIMC	 (1 << 5)
5227295610fSBaptiste Daroussin #define	NODE_EOS	 (1 << 6)  /* At sentence boundary. */
5237295610fSBaptiste Daroussin #define	NODE_SYNPRETTY	 (1 << 7)  /* SYNOPSIS-style formatting. */
5247295610fSBaptiste Daroussin #define	NODE_NOFILL	 (1 << 8)  /* Fill mode switched off. */
5257295610fSBaptiste Daroussin #define	NODE_NOSRC	 (1 << 9)  /* Generated node, not in input file. */
5267295610fSBaptiste Daroussin #define	NODE_NOPRT	 (1 << 10) /* Shall not print anything. */
5276d38604fSBaptiste Daroussin #define	NODE_ID		 (1 << 11) /* Target for deep linking. */
5286d38604fSBaptiste Daroussin #define	NODE_HREF	 (1 << 12) /* Link to another place in this page. */
52961d06d6bSBaptiste Daroussin 	int		  prev_font; /* Before entering this node. */
53061d06d6bSBaptiste Daroussin 	int		  aux;     /* Decoded node data, type-dependent. */
53161d06d6bSBaptiste Daroussin 	enum roff_tok	  tok;     /* Request or macro ID. */
53261d06d6bSBaptiste Daroussin 	enum roff_type	  type;    /* AST node type. */
53361d06d6bSBaptiste Daroussin 	enum roff_sec	  sec;     /* Current named section. */
53461d06d6bSBaptiste Daroussin 	enum mdoc_endbody end;     /* BODY */
53561d06d6bSBaptiste Daroussin };
53661d06d6bSBaptiste Daroussin 
53761d06d6bSBaptiste Daroussin struct	roff_meta {
5387295610fSBaptiste Daroussin 	struct roff_node *first;   /* The first node parsed. */
53961d06d6bSBaptiste Daroussin 	char		 *msec;    /* Manual section, usually a digit. */
54061d06d6bSBaptiste Daroussin 	char		 *vol;     /* Manual volume title. */
54161d06d6bSBaptiste Daroussin 	char		 *os;      /* Operating system. */
54261d06d6bSBaptiste Daroussin 	char		 *arch;    /* Machine architecture. */
54361d06d6bSBaptiste Daroussin 	char		 *title;   /* Manual title, usually CAPS. */
54461d06d6bSBaptiste Daroussin 	char		 *name;    /* Leading manual name. */
54561d06d6bSBaptiste Daroussin 	char		 *date;    /* Normalized date. */
5467295610fSBaptiste Daroussin 	char		 *sodest;  /* .so target file name or NULL. */
54761d06d6bSBaptiste Daroussin 	int		  hasbody; /* Document is not empty. */
54861d06d6bSBaptiste Daroussin 	int		  rcsids;  /* Bits indexed by enum mandoc_os. */
54961d06d6bSBaptiste Daroussin 	enum mandoc_os	  os_e;    /* Operating system. */
55061d06d6bSBaptiste Daroussin 	enum roff_macroset macroset; /* Kind of high-level macros used. */
55161d06d6bSBaptiste Daroussin };
55261d06d6bSBaptiste Daroussin 
55361d06d6bSBaptiste Daroussin extern	const char *const *roff_name;
55461d06d6bSBaptiste Daroussin 
55561d06d6bSBaptiste Daroussin 
5567295610fSBaptiste Daroussin int		  arch_valid(const char *, enum mandoc_os);
55761d06d6bSBaptiste Daroussin void		  deroff(char **, const struct roff_node *);
5586d38604fSBaptiste Daroussin struct roff_node *roff_node_child(struct roff_node *);
5596d38604fSBaptiste Daroussin struct roff_node *roff_node_next(struct roff_node *);
5606d38604fSBaptiste Daroussin struct roff_node *roff_node_prev(struct roff_node *);
5616d38604fSBaptiste Daroussin int		  roff_node_transparent(struct roff_node *);
5626d38604fSBaptiste Daroussin int		  roff_tok_transparent(enum roff_tok);
563