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