xref: /openbsd-src/usr.bin/mandoc/roff.h (revision f66971330e58e0567a0c2de8fbfcab971f206621)
1*f6697133Sschwarze /* $OpenBSD: roff.h,v 1.58 2023/10/24 20:30:49 schwarze Exp $	*/
2d1982c71Sschwarze /*
3453b89b7Sschwarze  * Copyright (c) 2013-2015,2017-2020,2022 Ingo Schwarze <schwarze@openbsd.org>
4e053e0fdSschwarze  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
5d1982c71Sschwarze  *
6d1982c71Sschwarze  * Permission to use, copy, modify, and distribute this software for any
7d1982c71Sschwarze  * purpose with or without fee is hereby granted, provided that the above
8d1982c71Sschwarze  * copyright notice and this permission notice appear in all copies.
9d1982c71Sschwarze  *
10d1982c71Sschwarze  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11d1982c71Sschwarze  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12d1982c71Sschwarze  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13d1982c71Sschwarze  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14d1982c71Sschwarze  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15d1982c71Sschwarze  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16d1982c71Sschwarze  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
176c530f1cSschwarze  *
186c530f1cSschwarze  * Common data types for all syntax trees and related functions.
19d1982c71Sschwarze  */
20d1982c71Sschwarze 
216050a3daSschwarze struct	ohash;
223a0d07afSschwarze struct	mdoc_arg;
233a0d07afSschwarze union	mdoc_data;
246b86842eSschwarze struct	tbl_span;
256b86842eSschwarze struct	eqn_box;
263a0d07afSschwarze 
27f2d5c709Sschwarze enum	roff_macroset {
28f2d5c709Sschwarze 	MACROSET_NONE = 0,
29f2d5c709Sschwarze 	MACROSET_MDOC,
30f2d5c709Sschwarze 	MACROSET_MAN
31f2d5c709Sschwarze };
32f2d5c709Sschwarze 
333a0d07afSschwarze enum	roff_sec {
343a0d07afSschwarze 	SEC_NONE = 0,
353a0d07afSschwarze 	SEC_NAME,
363a0d07afSschwarze 	SEC_LIBRARY,
373a0d07afSschwarze 	SEC_SYNOPSIS,
383a0d07afSschwarze 	SEC_DESCRIPTION,
393a0d07afSschwarze 	SEC_CONTEXT,
403a0d07afSschwarze 	SEC_IMPLEMENTATION,	/* IMPLEMENTATION NOTES */
413a0d07afSschwarze 	SEC_RETURN_VALUES,
423a0d07afSschwarze 	SEC_ENVIRONMENT,
433a0d07afSschwarze 	SEC_FILES,
443a0d07afSschwarze 	SEC_EXIT_STATUS,
453a0d07afSschwarze 	SEC_EXAMPLES,
463a0d07afSschwarze 	SEC_DIAGNOSTICS,
473a0d07afSschwarze 	SEC_COMPATIBILITY,
483a0d07afSschwarze 	SEC_ERRORS,
493a0d07afSschwarze 	SEC_SEE_ALSO,
503a0d07afSschwarze 	SEC_STANDARDS,
513a0d07afSschwarze 	SEC_HISTORY,
523a0d07afSschwarze 	SEC_AUTHORS,
533a0d07afSschwarze 	SEC_CAVEATS,
543a0d07afSschwarze 	SEC_BUGS,
553a0d07afSschwarze 	SEC_SECURITY,
563a0d07afSschwarze 	SEC_CUSTOM,
573a0d07afSschwarze 	SEC__MAX
583a0d07afSschwarze };
593a0d07afSschwarze 
60d1982c71Sschwarze enum	roff_type {
61d1982c71Sschwarze 	ROFFT_ROOT,
62d1982c71Sschwarze 	ROFFT_BLOCK,
63d1982c71Sschwarze 	ROFFT_HEAD,
64d1982c71Sschwarze 	ROFFT_BODY,
65d1982c71Sschwarze 	ROFFT_TAIL,
66d1982c71Sschwarze 	ROFFT_ELEM,
67d1982c71Sschwarze 	ROFFT_TEXT,
684c293873Sschwarze 	ROFFT_COMMENT,
69d1982c71Sschwarze 	ROFFT_TBL,
70d1982c71Sschwarze 	ROFFT_EQN
71d1982c71Sschwarze };
723a0d07afSschwarze 
7314a309e3Sschwarze enum	roff_tok {
74453b89b7Sschwarze 	ROFF_br = 0,	/* Beginning of roff(7) requests. */
75e13b4195Sschwarze 	ROFF_ce,
760438bfdfSschwarze 	ROFF_fi,
77c4d3fa85Sschwarze 	ROFF_ft,
78644b390bSschwarze 	ROFF_ll,
7924f1eaadSschwarze 	ROFF_mc,
800438bfdfSschwarze 	ROFF_nf,
81af1e8f15Sschwarze 	ROFF_po,
826de096f4Sschwarze 	ROFF_rj,
836561cb23Sschwarze 	ROFF_sp,
84f7242c43Sschwarze 	ROFF_ta,
8511d70615Sschwarze 	ROFF_ti,
86453b89b7Sschwarze 	ROFF_MAX,	/* End of requests that generate nodes. */
87453b89b7Sschwarze 	ROFF_ab,	/* Requests only used during preprocessing. */
8814a309e3Sschwarze 	ROFF_ad,
8914a309e3Sschwarze 	ROFF_af,
9014a309e3Sschwarze 	ROFF_aln,
9114a309e3Sschwarze 	ROFF_als,
9214a309e3Sschwarze 	ROFF_am,
9314a309e3Sschwarze 	ROFF_am1,
9414a309e3Sschwarze 	ROFF_ami,
9514a309e3Sschwarze 	ROFF_ami1,
9614a309e3Sschwarze 	ROFF_as,
9714a309e3Sschwarze 	ROFF_as1,
9814a309e3Sschwarze 	ROFF_asciify,
9914a309e3Sschwarze 	ROFF_backtrace,
10014a309e3Sschwarze 	ROFF_bd,
10114a309e3Sschwarze 	ROFF_bleedat,
10214a309e3Sschwarze 	ROFF_blm,
10314a309e3Sschwarze 	ROFF_box,
10414a309e3Sschwarze 	ROFF_boxa,
10514a309e3Sschwarze 	ROFF_bp,
10614a309e3Sschwarze 	ROFF_BP,
10714a309e3Sschwarze 	ROFF_break,
10814a309e3Sschwarze 	ROFF_breakchar,
10914a309e3Sschwarze 	ROFF_brnl,
11014a309e3Sschwarze 	ROFF_brp,
11114a309e3Sschwarze 	ROFF_brpnl,
11214a309e3Sschwarze 	ROFF_c2,
11314a309e3Sschwarze 	ROFF_cc,
11414a309e3Sschwarze 	ROFF_cf,
11514a309e3Sschwarze 	ROFF_cflags,
11614a309e3Sschwarze 	ROFF_ch,
11714a309e3Sschwarze 	ROFF_char,
11814a309e3Sschwarze 	ROFF_chop,
11914a309e3Sschwarze 	ROFF_class,
12014a309e3Sschwarze 	ROFF_close,
12114a309e3Sschwarze 	ROFF_CL,
12214a309e3Sschwarze 	ROFF_color,
12314a309e3Sschwarze 	ROFF_composite,
12414a309e3Sschwarze 	ROFF_continue,
12514a309e3Sschwarze 	ROFF_cp,
12614a309e3Sschwarze 	ROFF_cropat,
12714a309e3Sschwarze 	ROFF_cs,
12814a309e3Sschwarze 	ROFF_cu,
12914a309e3Sschwarze 	ROFF_da,
13014a309e3Sschwarze 	ROFF_dch,
13114a309e3Sschwarze 	ROFF_Dd,
13214a309e3Sschwarze 	ROFF_de,
13314a309e3Sschwarze 	ROFF_de1,
13414a309e3Sschwarze 	ROFF_defcolor,
13514a309e3Sschwarze 	ROFF_dei,
13614a309e3Sschwarze 	ROFF_dei1,
13714a309e3Sschwarze 	ROFF_device,
13814a309e3Sschwarze 	ROFF_devicem,
13914a309e3Sschwarze 	ROFF_di,
14014a309e3Sschwarze 	ROFF_do,
14114a309e3Sschwarze 	ROFF_ds,
14214a309e3Sschwarze 	ROFF_ds1,
14314a309e3Sschwarze 	ROFF_dwh,
14414a309e3Sschwarze 	ROFF_dt,
14514a309e3Sschwarze 	ROFF_ec,
14614a309e3Sschwarze 	ROFF_ecr,
14714a309e3Sschwarze 	ROFF_ecs,
14814a309e3Sschwarze 	ROFF_el,
14914a309e3Sschwarze 	ROFF_em,
15014a309e3Sschwarze 	ROFF_EN,
15114a309e3Sschwarze 	ROFF_eo,
15214a309e3Sschwarze 	ROFF_EP,
15314a309e3Sschwarze 	ROFF_EQ,
15414a309e3Sschwarze 	ROFF_errprint,
15514a309e3Sschwarze 	ROFF_ev,
15614a309e3Sschwarze 	ROFF_evc,
15714a309e3Sschwarze 	ROFF_ex,
15814a309e3Sschwarze 	ROFF_fallback,
15914a309e3Sschwarze 	ROFF_fam,
16014a309e3Sschwarze 	ROFF_fc,
16114a309e3Sschwarze 	ROFF_fchar,
16214a309e3Sschwarze 	ROFF_fcolor,
16314a309e3Sschwarze 	ROFF_fdeferlig,
16414a309e3Sschwarze 	ROFF_feature,
16514a309e3Sschwarze 	ROFF_fkern,
16614a309e3Sschwarze 	ROFF_fl,
16714a309e3Sschwarze 	ROFF_flig,
16814a309e3Sschwarze 	ROFF_fp,
16914a309e3Sschwarze 	ROFF_fps,
17014a309e3Sschwarze 	ROFF_fschar,
17114a309e3Sschwarze 	ROFF_fspacewidth,
17214a309e3Sschwarze 	ROFF_fspecial,
17314a309e3Sschwarze 	ROFF_ftr,
17414a309e3Sschwarze 	ROFF_fzoom,
17514a309e3Sschwarze 	ROFF_gcolor,
17614a309e3Sschwarze 	ROFF_hc,
17714a309e3Sschwarze 	ROFF_hcode,
17814a309e3Sschwarze 	ROFF_hidechar,
17914a309e3Sschwarze 	ROFF_hla,
18014a309e3Sschwarze 	ROFF_hlm,
18114a309e3Sschwarze 	ROFF_hpf,
18214a309e3Sschwarze 	ROFF_hpfa,
18314a309e3Sschwarze 	ROFF_hpfcode,
18414a309e3Sschwarze 	ROFF_hw,
18514a309e3Sschwarze 	ROFF_hy,
18614a309e3Sschwarze 	ROFF_hylang,
18714a309e3Sschwarze 	ROFF_hylen,
18814a309e3Sschwarze 	ROFF_hym,
18914a309e3Sschwarze 	ROFF_hypp,
19014a309e3Sschwarze 	ROFF_hys,
19114a309e3Sschwarze 	ROFF_ie,
19214a309e3Sschwarze 	ROFF_if,
19314a309e3Sschwarze 	ROFF_ig,
19414a309e3Sschwarze 	/* MAN_in; ignored in mdoc(7) */
19514a309e3Sschwarze 	ROFF_index,
19614a309e3Sschwarze 	ROFF_it,
19714a309e3Sschwarze 	ROFF_itc,
19814a309e3Sschwarze 	ROFF_IX,
19914a309e3Sschwarze 	ROFF_kern,
20014a309e3Sschwarze 	ROFF_kernafter,
20114a309e3Sschwarze 	ROFF_kernbefore,
20214a309e3Sschwarze 	ROFF_kernpair,
20314a309e3Sschwarze 	ROFF_lc,
20414a309e3Sschwarze 	ROFF_lc_ctype,
20514a309e3Sschwarze 	ROFF_lds,
20614a309e3Sschwarze 	ROFF_length,
20714a309e3Sschwarze 	ROFF_letadj,
20814a309e3Sschwarze 	ROFF_lf,
20914a309e3Sschwarze 	ROFF_lg,
21014a309e3Sschwarze 	ROFF_lhang,
21114a309e3Sschwarze 	ROFF_linetabs,
21214a309e3Sschwarze 	ROFF_lnr,
21314a309e3Sschwarze 	ROFF_lnrf,
21414a309e3Sschwarze 	ROFF_lpfx,
21514a309e3Sschwarze 	ROFF_ls,
21614a309e3Sschwarze 	ROFF_lsm,
21714a309e3Sschwarze 	ROFF_lt,
21814a309e3Sschwarze 	ROFF_mediasize,
21914a309e3Sschwarze 	ROFF_minss,
22014a309e3Sschwarze 	ROFF_mk,
22114a309e3Sschwarze 	ROFF_mso,
22214a309e3Sschwarze 	ROFF_na,
22314a309e3Sschwarze 	ROFF_ne,
22414a309e3Sschwarze 	ROFF_nh,
22514a309e3Sschwarze 	ROFF_nhychar,
22614a309e3Sschwarze 	ROFF_nm,
22714a309e3Sschwarze 	ROFF_nn,
22814a309e3Sschwarze 	ROFF_nop,
22914a309e3Sschwarze 	ROFF_nr,
23014a309e3Sschwarze 	ROFF_nrf,
23114a309e3Sschwarze 	ROFF_nroff,
23214a309e3Sschwarze 	ROFF_ns,
23314a309e3Sschwarze 	ROFF_nx,
23414a309e3Sschwarze 	ROFF_open,
23514a309e3Sschwarze 	ROFF_opena,
23614a309e3Sschwarze 	ROFF_os,
23714a309e3Sschwarze 	ROFF_output,
23814a309e3Sschwarze 	ROFF_padj,
23914a309e3Sschwarze 	ROFF_papersize,
24014a309e3Sschwarze 	ROFF_pc,
24114a309e3Sschwarze 	ROFF_pev,
24214a309e3Sschwarze 	ROFF_pi,
24314a309e3Sschwarze 	ROFF_PI,
24414a309e3Sschwarze 	ROFF_pl,
24514a309e3Sschwarze 	ROFF_pm,
24614a309e3Sschwarze 	ROFF_pn,
24714a309e3Sschwarze 	ROFF_pnr,
24814a309e3Sschwarze 	ROFF_ps,
24914a309e3Sschwarze 	ROFF_psbb,
25014a309e3Sschwarze 	ROFF_pshape,
25114a309e3Sschwarze 	ROFF_pso,
25214a309e3Sschwarze 	ROFF_ptr,
25314a309e3Sschwarze 	ROFF_pvs,
25414a309e3Sschwarze 	ROFF_rchar,
25514a309e3Sschwarze 	ROFF_rd,
25614a309e3Sschwarze 	ROFF_recursionlimit,
25714a309e3Sschwarze 	ROFF_return,
25814a309e3Sschwarze 	ROFF_rfschar,
25914a309e3Sschwarze 	ROFF_rhang,
26014a309e3Sschwarze 	ROFF_rm,
26114a309e3Sschwarze 	ROFF_rn,
26214a309e3Sschwarze 	ROFF_rnn,
26314a309e3Sschwarze 	ROFF_rr,
26414a309e3Sschwarze 	ROFF_rs,
26514a309e3Sschwarze 	ROFF_rt,
26614a309e3Sschwarze 	ROFF_schar,
26714a309e3Sschwarze 	ROFF_sentchar,
26814a309e3Sschwarze 	ROFF_shc,
26914a309e3Sschwarze 	ROFF_shift,
27014a309e3Sschwarze 	ROFF_sizes,
27114a309e3Sschwarze 	ROFF_so,
27214a309e3Sschwarze 	ROFF_spacewidth,
27314a309e3Sschwarze 	ROFF_special,
27414a309e3Sschwarze 	ROFF_spreadwarn,
27514a309e3Sschwarze 	ROFF_ss,
27614a309e3Sschwarze 	ROFF_sty,
27714a309e3Sschwarze 	ROFF_substring,
27814a309e3Sschwarze 	ROFF_sv,
27914a309e3Sschwarze 	ROFF_sy,
28014a309e3Sschwarze 	ROFF_T_,
28114a309e3Sschwarze 	ROFF_tc,
28214a309e3Sschwarze 	ROFF_TE,
28314a309e3Sschwarze 	ROFF_TH,
28414a309e3Sschwarze 	ROFF_tkf,
28514a309e3Sschwarze 	ROFF_tl,
28614a309e3Sschwarze 	ROFF_tm,
28714a309e3Sschwarze 	ROFF_tm1,
28814a309e3Sschwarze 	ROFF_tmc,
28914a309e3Sschwarze 	ROFF_tr,
29014a309e3Sschwarze 	ROFF_track,
29114a309e3Sschwarze 	ROFF_transchar,
29214a309e3Sschwarze 	ROFF_trf,
29314a309e3Sschwarze 	ROFF_trimat,
29414a309e3Sschwarze 	ROFF_trin,
29514a309e3Sschwarze 	ROFF_trnt,
29614a309e3Sschwarze 	ROFF_troff,
29714a309e3Sschwarze 	ROFF_TS,
29814a309e3Sschwarze 	ROFF_uf,
29914a309e3Sschwarze 	ROFF_ul,
30014a309e3Sschwarze 	ROFF_unformat,
30114a309e3Sschwarze 	ROFF_unwatch,
30214a309e3Sschwarze 	ROFF_unwatchn,
30314a309e3Sschwarze 	ROFF_vpt,
30414a309e3Sschwarze 	ROFF_vs,
30514a309e3Sschwarze 	ROFF_warn,
30614a309e3Sschwarze 	ROFF_warnscale,
30714a309e3Sschwarze 	ROFF_watch,
30814a309e3Sschwarze 	ROFF_watchlength,
30914a309e3Sschwarze 	ROFF_watchn,
31014a309e3Sschwarze 	ROFF_wh,
31114a309e3Sschwarze 	ROFF_while,
31214a309e3Sschwarze 	ROFF_write,
31314a309e3Sschwarze 	ROFF_writec,
31414a309e3Sschwarze 	ROFF_writem,
31514a309e3Sschwarze 	ROFF_xflag,
316453b89b7Sschwarze 	ROFF_cblock,	/* Block end marker "..". */
317453b89b7Sschwarze 	ROFF_RENAMED,	/* New name of a renamed request or macro. */
318453b89b7Sschwarze 	ROFF_USERDEF,	/* User defined macro. */
319453b89b7Sschwarze 	TOKEN_NONE,	/* Undefined macro or text/tbl/eqn/comment node. */
320453b89b7Sschwarze 	MDOC_Dd,	/* Beginning of mdoc(7) macros. */
32114a309e3Sschwarze 	MDOC_Dt,
32214a309e3Sschwarze 	MDOC_Os,
32314a309e3Sschwarze 	MDOC_Sh,
32414a309e3Sschwarze 	MDOC_Ss,
32514a309e3Sschwarze 	MDOC_Pp,
32614a309e3Sschwarze 	MDOC_D1,
32714a309e3Sschwarze 	MDOC_Dl,
32814a309e3Sschwarze 	MDOC_Bd,
32914a309e3Sschwarze 	MDOC_Ed,
33014a309e3Sschwarze 	MDOC_Bl,
33114a309e3Sschwarze 	MDOC_El,
33214a309e3Sschwarze 	MDOC_It,
33314a309e3Sschwarze 	MDOC_Ad,
33414a309e3Sschwarze 	MDOC_An,
33514a309e3Sschwarze 	MDOC_Ap,
33614a309e3Sschwarze 	MDOC_Ar,
33714a309e3Sschwarze 	MDOC_Cd,
33814a309e3Sschwarze 	MDOC_Cm,
33914a309e3Sschwarze 	MDOC_Dv,
34014a309e3Sschwarze 	MDOC_Er,
34114a309e3Sschwarze 	MDOC_Ev,
34214a309e3Sschwarze 	MDOC_Ex,
34314a309e3Sschwarze 	MDOC_Fa,
34414a309e3Sschwarze 	MDOC_Fd,
34514a309e3Sschwarze 	MDOC_Fl,
34614a309e3Sschwarze 	MDOC_Fn,
34714a309e3Sschwarze 	MDOC_Ft,
34814a309e3Sschwarze 	MDOC_Ic,
34914a309e3Sschwarze 	MDOC_In,
35014a309e3Sschwarze 	MDOC_Li,
35114a309e3Sschwarze 	MDOC_Nd,
35214a309e3Sschwarze 	MDOC_Nm,
35314a309e3Sschwarze 	MDOC_Op,
35414a309e3Sschwarze 	MDOC_Ot,
35514a309e3Sschwarze 	MDOC_Pa,
35614a309e3Sschwarze 	MDOC_Rv,
35714a309e3Sschwarze 	MDOC_St,
35814a309e3Sschwarze 	MDOC_Va,
35914a309e3Sschwarze 	MDOC_Vt,
36014a309e3Sschwarze 	MDOC_Xr,
36114a309e3Sschwarze 	MDOC__A,
36214a309e3Sschwarze 	MDOC__B,
36314a309e3Sschwarze 	MDOC__D,
36414a309e3Sschwarze 	MDOC__I,
36514a309e3Sschwarze 	MDOC__J,
36614a309e3Sschwarze 	MDOC__N,
36714a309e3Sschwarze 	MDOC__O,
36814a309e3Sschwarze 	MDOC__P,
36914a309e3Sschwarze 	MDOC__R,
37014a309e3Sschwarze 	MDOC__T,
37114a309e3Sschwarze 	MDOC__V,
37214a309e3Sschwarze 	MDOC_Ac,
37314a309e3Sschwarze 	MDOC_Ao,
37414a309e3Sschwarze 	MDOC_Aq,
37514a309e3Sschwarze 	MDOC_At,
37614a309e3Sschwarze 	MDOC_Bc,
37714a309e3Sschwarze 	MDOC_Bf,
37814a309e3Sschwarze 	MDOC_Bo,
37914a309e3Sschwarze 	MDOC_Bq,
38014a309e3Sschwarze 	MDOC_Bsx,
38114a309e3Sschwarze 	MDOC_Bx,
38214a309e3Sschwarze 	MDOC_Db,
38314a309e3Sschwarze 	MDOC_Dc,
38414a309e3Sschwarze 	MDOC_Do,
38514a309e3Sschwarze 	MDOC_Dq,
38614a309e3Sschwarze 	MDOC_Ec,
38714a309e3Sschwarze 	MDOC_Ef,
38814a309e3Sschwarze 	MDOC_Em,
38914a309e3Sschwarze 	MDOC_Eo,
39014a309e3Sschwarze 	MDOC_Fx,
39114a309e3Sschwarze 	MDOC_Ms,
39214a309e3Sschwarze 	MDOC_No,
39314a309e3Sschwarze 	MDOC_Ns,
39414a309e3Sschwarze 	MDOC_Nx,
39514a309e3Sschwarze 	MDOC_Ox,
39614a309e3Sschwarze 	MDOC_Pc,
39714a309e3Sschwarze 	MDOC_Pf,
39814a309e3Sschwarze 	MDOC_Po,
39914a309e3Sschwarze 	MDOC_Pq,
40014a309e3Sschwarze 	MDOC_Qc,
40114a309e3Sschwarze 	MDOC_Ql,
40214a309e3Sschwarze 	MDOC_Qo,
40314a309e3Sschwarze 	MDOC_Qq,
40414a309e3Sschwarze 	MDOC_Re,
40514a309e3Sschwarze 	MDOC_Rs,
40614a309e3Sschwarze 	MDOC_Sc,
40714a309e3Sschwarze 	MDOC_So,
40814a309e3Sschwarze 	MDOC_Sq,
40914a309e3Sschwarze 	MDOC_Sm,
41014a309e3Sschwarze 	MDOC_Sx,
41114a309e3Sschwarze 	MDOC_Sy,
41214a309e3Sschwarze 	MDOC_Tn,
41314a309e3Sschwarze 	MDOC_Ux,
41414a309e3Sschwarze 	MDOC_Xc,
41514a309e3Sschwarze 	MDOC_Xo,
41614a309e3Sschwarze 	MDOC_Fo,
41714a309e3Sschwarze 	MDOC_Fc,
41814a309e3Sschwarze 	MDOC_Oo,
41914a309e3Sschwarze 	MDOC_Oc,
42014a309e3Sschwarze 	MDOC_Bk,
42114a309e3Sschwarze 	MDOC_Ek,
42214a309e3Sschwarze 	MDOC_Bt,
42314a309e3Sschwarze 	MDOC_Hf,
42414a309e3Sschwarze 	MDOC_Fr,
42514a309e3Sschwarze 	MDOC_Ud,
42614a309e3Sschwarze 	MDOC_Lb,
42714a309e3Sschwarze 	MDOC_Lp,
42814a309e3Sschwarze 	MDOC_Lk,
42914a309e3Sschwarze 	MDOC_Mt,
43014a309e3Sschwarze 	MDOC_Brq,
43114a309e3Sschwarze 	MDOC_Bro,
43214a309e3Sschwarze 	MDOC_Brc,
43314a309e3Sschwarze 	MDOC__C,
43414a309e3Sschwarze 	MDOC_Es,
43514a309e3Sschwarze 	MDOC_En,
43614a309e3Sschwarze 	MDOC_Dx,
43714a309e3Sschwarze 	MDOC__Q,
43814a309e3Sschwarze 	MDOC__U,
43914a309e3Sschwarze 	MDOC_Ta,
44092929bf6Sschwarze 	MDOC_Tg,
441453b89b7Sschwarze 	MDOC_MAX,	/* End of mdoc(7) macros. */
442453b89b7Sschwarze 	MAN_TH,		/* Beginning of man(7) macros. */
44314a309e3Sschwarze 	MAN_SH,
44414a309e3Sschwarze 	MAN_SS,
44514a309e3Sschwarze 	MAN_TP,
446d991fc2cSschwarze 	MAN_TQ,
44714a309e3Sschwarze 	MAN_LP,
44814a309e3Sschwarze 	MAN_PP,
44914a309e3Sschwarze 	MAN_P,
45014a309e3Sschwarze 	MAN_IP,
45114a309e3Sschwarze 	MAN_HP,
45214a309e3Sschwarze 	MAN_SM,
45314a309e3Sschwarze 	MAN_SB,
45414a309e3Sschwarze 	MAN_BI,
45514a309e3Sschwarze 	MAN_IB,
45614a309e3Sschwarze 	MAN_BR,
45714a309e3Sschwarze 	MAN_RB,
45814a309e3Sschwarze 	MAN_R,
45914a309e3Sschwarze 	MAN_B,
46014a309e3Sschwarze 	MAN_I,
46114a309e3Sschwarze 	MAN_IR,
46214a309e3Sschwarze 	MAN_RI,
46314a309e3Sschwarze 	MAN_RE,
46414a309e3Sschwarze 	MAN_RS,
46514a309e3Sschwarze 	MAN_DT,
46614a309e3Sschwarze 	MAN_UC,
46714a309e3Sschwarze 	MAN_PD,
46814a309e3Sschwarze 	MAN_AT,
46914a309e3Sschwarze 	MAN_in,
4705e5a9c61Sschwarze 	MAN_SY,
4715e5a9c61Sschwarze 	MAN_YS,
47214a309e3Sschwarze 	MAN_OP,
47314a309e3Sschwarze 	MAN_EX,
47414a309e3Sschwarze 	MAN_EE,
47514a309e3Sschwarze 	MAN_UR,
47614a309e3Sschwarze 	MAN_UE,
477df9a9479Sbentley 	MAN_MT,
478df9a9479Sbentley 	MAN_ME,
479*f6697133Sschwarze 	MAN_MR,
480453b89b7Sschwarze 	MAN_MAX		/* End of man(7) macros. */
48114a309e3Sschwarze };
48214a309e3Sschwarze 
4833a0d07afSschwarze /*
4843a0d07afSschwarze  * Indicates that a BODY's formatting has ended, but
4853a0d07afSschwarze  * the scope is still open.  Used for badly nested blocks.
4863a0d07afSschwarze  */
4873a0d07afSschwarze enum	mdoc_endbody {
4883a0d07afSschwarze 	ENDBODY_NOT = 0,
48901290091Sschwarze 	ENDBODY_SPACE	/* Is broken: append a space. */
4903a0d07afSschwarze };
4913a0d07afSschwarze 
49299acaf1eSschwarze enum	mandoc_os {
49399acaf1eSschwarze 	MANDOC_OS_OTHER = 0,
49499acaf1eSschwarze 	MANDOC_OS_NETBSD,
49599acaf1eSschwarze 	MANDOC_OS_OPENBSD
49699acaf1eSschwarze };
49799acaf1eSschwarze 
4983a0d07afSschwarze struct	roff_node {
4993a0d07afSschwarze 	struct roff_node *parent;  /* Parent AST node. */
5003a0d07afSschwarze 	struct roff_node *child;   /* First child AST node. */
5013a0d07afSschwarze 	struct roff_node *last;    /* Last child AST node. */
5023a0d07afSschwarze 	struct roff_node *next;    /* Sibling AST node. */
5033a0d07afSschwarze 	struct roff_node *prev;    /* Prior sibling AST node. */
5043a0d07afSschwarze 	struct roff_node *head;    /* BLOCK */
5053a0d07afSschwarze 	struct roff_node *body;    /* BLOCK/ENDBODY */
5063a0d07afSschwarze 	struct roff_node *tail;    /* BLOCK */
5073a0d07afSschwarze 	struct mdoc_arg	 *args;    /* BLOCK/ELEM */
5083a0d07afSschwarze 	union mdoc_data	 *norm;    /* Normalized arguments. */
5093a0d07afSschwarze 	char		 *string;  /* TEXT */
510c220f9cfSschwarze 	char		 *tag;     /* For less(1) :t and HTML id=. */
511fb382a01Sschwarze 	struct tbl_span	 *span;    /* TBL */
512bf9acac6Sschwarze 	struct eqn_box	 *eqn;     /* EQN */
5133a0d07afSschwarze 	int		  line;    /* Input file line number. */
5143a0d07afSschwarze 	int		  pos;     /* Input file column number. */
5153a0d07afSschwarze 	int		  flags;
516c4b0939cSschwarze #define	NODE_VALID	 (1 << 0)  /* Has been validated. */
517c4b0939cSschwarze #define	NODE_ENDED	 (1 << 1)  /* Gone past body end mark. */
51821dcc2b4Sschwarze #define	NODE_BROKEN	 (1 << 2)  /* Must validate parent when ending. */
519c4b0939cSschwarze #define	NODE_LINE	 (1 << 3)  /* First macro/text on line. */
52021dcc2b4Sschwarze #define	NODE_DELIMO	 (1 << 4)
52121dcc2b4Sschwarze #define	NODE_DELIMC	 (1 << 5)
52221dcc2b4Sschwarze #define	NODE_EOS	 (1 << 6)  /* At sentence boundary. */
52321dcc2b4Sschwarze #define	NODE_SYNPRETTY	 (1 << 7)  /* SYNOPSIS-style formatting. */
52421dcc2b4Sschwarze #define	NODE_NOFILL	 (1 << 8)  /* Fill mode switched off. */
52521dcc2b4Sschwarze #define	NODE_NOSRC	 (1 << 9)  /* Generated node, not in input file. */
52621dcc2b4Sschwarze #define	NODE_NOPRT	 (1 << 10) /* Shall not print anything. */
5279a542ed3Sschwarze #define	NODE_ID		 (1 << 11) /* Target for deep linking. */
5289a542ed3Sschwarze #define	NODE_HREF	 (1 << 12) /* Link to another place in this page. */
5293a0d07afSschwarze 	int		  prev_font; /* Before entering this node. */
5303a0d07afSschwarze 	int		  aux;     /* Decoded node data, type-dependent. */
53114a309e3Sschwarze 	enum roff_tok	  tok;     /* Request or macro ID. */
5323a0d07afSschwarze 	enum roff_type	  type;    /* AST node type. */
5333a0d07afSschwarze 	enum roff_sec	  sec;     /* Current named section. */
5343a0d07afSschwarze 	enum mdoc_endbody end;     /* BODY */
5353a0d07afSschwarze };
5362a238f45Sschwarze 
5372a238f45Sschwarze struct	roff_meta {
5386b86842eSschwarze 	struct roff_node *first;   /* The first node parsed. */
5392a238f45Sschwarze 	char		 *msec;    /* Manual section, usually a digit. */
5402a238f45Sschwarze 	char		 *vol;     /* Manual volume title. */
5412a238f45Sschwarze 	char		 *os;      /* Operating system. */
5422a238f45Sschwarze 	char		 *arch;    /* Machine architecture. */
5432a238f45Sschwarze 	char		 *title;   /* Manual title, usually CAPS. */
5442a238f45Sschwarze 	char		 *name;    /* Leading manual name. */
5452a238f45Sschwarze 	char		 *date;    /* Normalized date. */
5466b86842eSschwarze 	char		 *sodest;  /* .so target file name or NULL. */
5472a238f45Sschwarze 	int		  hasbody; /* Document is not empty. */
548f3476b07Sschwarze 	int		  rcsids;  /* Bits indexed by enum mandoc_os. */
549f3476b07Sschwarze 	enum mandoc_os	  os_e;    /* Operating system. */
550f2d5c709Sschwarze 	enum roff_macroset macroset; /* Kind of high-level macros used. */
551ede1b9d0Sschwarze };
552423631c9Sschwarze 
55314a309e3Sschwarze extern	const char *const *roff_name;
554423631c9Sschwarze 
5556050a3daSschwarze 
556f0fa0445Sschwarze int		  arch_valid(const char *, enum mandoc_os);
557423631c9Sschwarze void		  deroff(char **, const struct roff_node *);
5587ebbefbeSschwarze struct roff_node *roff_node_child(struct roff_node *);
5597ebbefbeSschwarze struct roff_node *roff_node_next(struct roff_node *);
5607ebbefbeSschwarze struct roff_node *roff_node_prev(struct roff_node *);
5617ebbefbeSschwarze int		  roff_node_transparent(struct roff_node *);
562e053e0fdSschwarze int		  roff_tok_transparent(enum roff_tok);
563