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