1*61d06d6bSBaptiste Daroussin /* $Id: roff.h,v 1.59 2018/04/11 17:11:13 schwarze Exp $ */ 2*61d06d6bSBaptiste Daroussin /* 3*61d06d6bSBaptiste Daroussin * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4*61d06d6bSBaptiste Daroussin * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> 5*61d06d6bSBaptiste Daroussin * 6*61d06d6bSBaptiste Daroussin * Permission to use, copy, modify, and distribute this software for any 7*61d06d6bSBaptiste Daroussin * purpose with or without fee is hereby granted, provided that the above 8*61d06d6bSBaptiste Daroussin * copyright notice and this permission notice appear in all copies. 9*61d06d6bSBaptiste Daroussin * 10*61d06d6bSBaptiste Daroussin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 11*61d06d6bSBaptiste Daroussin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12*61d06d6bSBaptiste Daroussin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR 13*61d06d6bSBaptiste Daroussin * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14*61d06d6bSBaptiste Daroussin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15*61d06d6bSBaptiste Daroussin * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16*61d06d6bSBaptiste Daroussin * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17*61d06d6bSBaptiste Daroussin */ 18*61d06d6bSBaptiste Daroussin 19*61d06d6bSBaptiste Daroussin struct ohash; 20*61d06d6bSBaptiste Daroussin struct mdoc_arg; 21*61d06d6bSBaptiste Daroussin union mdoc_data; 22*61d06d6bSBaptiste Daroussin 23*61d06d6bSBaptiste Daroussin enum roff_macroset { 24*61d06d6bSBaptiste Daroussin MACROSET_NONE = 0, 25*61d06d6bSBaptiste Daroussin MACROSET_MDOC, 26*61d06d6bSBaptiste Daroussin MACROSET_MAN 27*61d06d6bSBaptiste Daroussin }; 28*61d06d6bSBaptiste Daroussin 29*61d06d6bSBaptiste Daroussin enum roff_sec { 30*61d06d6bSBaptiste Daroussin SEC_NONE = 0, 31*61d06d6bSBaptiste Daroussin SEC_NAME, 32*61d06d6bSBaptiste Daroussin SEC_LIBRARY, 33*61d06d6bSBaptiste Daroussin SEC_SYNOPSIS, 34*61d06d6bSBaptiste Daroussin SEC_DESCRIPTION, 35*61d06d6bSBaptiste Daroussin SEC_CONTEXT, 36*61d06d6bSBaptiste Daroussin SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */ 37*61d06d6bSBaptiste Daroussin SEC_RETURN_VALUES, 38*61d06d6bSBaptiste Daroussin SEC_ENVIRONMENT, 39*61d06d6bSBaptiste Daroussin SEC_FILES, 40*61d06d6bSBaptiste Daroussin SEC_EXIT_STATUS, 41*61d06d6bSBaptiste Daroussin SEC_EXAMPLES, 42*61d06d6bSBaptiste Daroussin SEC_DIAGNOSTICS, 43*61d06d6bSBaptiste Daroussin SEC_COMPATIBILITY, 44*61d06d6bSBaptiste Daroussin SEC_ERRORS, 45*61d06d6bSBaptiste Daroussin SEC_SEE_ALSO, 46*61d06d6bSBaptiste Daroussin SEC_STANDARDS, 47*61d06d6bSBaptiste Daroussin SEC_HISTORY, 48*61d06d6bSBaptiste Daroussin SEC_AUTHORS, 49*61d06d6bSBaptiste Daroussin SEC_CAVEATS, 50*61d06d6bSBaptiste Daroussin SEC_BUGS, 51*61d06d6bSBaptiste Daroussin SEC_SECURITY, 52*61d06d6bSBaptiste Daroussin SEC_CUSTOM, 53*61d06d6bSBaptiste Daroussin SEC__MAX 54*61d06d6bSBaptiste Daroussin }; 55*61d06d6bSBaptiste Daroussin 56*61d06d6bSBaptiste Daroussin enum roff_type { 57*61d06d6bSBaptiste Daroussin ROFFT_ROOT, 58*61d06d6bSBaptiste Daroussin ROFFT_BLOCK, 59*61d06d6bSBaptiste Daroussin ROFFT_HEAD, 60*61d06d6bSBaptiste Daroussin ROFFT_BODY, 61*61d06d6bSBaptiste Daroussin ROFFT_TAIL, 62*61d06d6bSBaptiste Daroussin ROFFT_ELEM, 63*61d06d6bSBaptiste Daroussin ROFFT_TEXT, 64*61d06d6bSBaptiste Daroussin ROFFT_COMMENT, 65*61d06d6bSBaptiste Daroussin ROFFT_TBL, 66*61d06d6bSBaptiste Daroussin ROFFT_EQN 67*61d06d6bSBaptiste Daroussin }; 68*61d06d6bSBaptiste Daroussin 69*61d06d6bSBaptiste Daroussin enum roff_tok { 70*61d06d6bSBaptiste Daroussin ROFF_br = 0, 71*61d06d6bSBaptiste Daroussin ROFF_ce, 72*61d06d6bSBaptiste Daroussin ROFF_ft, 73*61d06d6bSBaptiste Daroussin ROFF_ll, 74*61d06d6bSBaptiste Daroussin ROFF_mc, 75*61d06d6bSBaptiste Daroussin ROFF_po, 76*61d06d6bSBaptiste Daroussin ROFF_rj, 77*61d06d6bSBaptiste Daroussin ROFF_sp, 78*61d06d6bSBaptiste Daroussin ROFF_ta, 79*61d06d6bSBaptiste Daroussin ROFF_ti, 80*61d06d6bSBaptiste Daroussin ROFF_MAX, 81*61d06d6bSBaptiste Daroussin ROFF_ab, 82*61d06d6bSBaptiste Daroussin ROFF_ad, 83*61d06d6bSBaptiste Daroussin ROFF_af, 84*61d06d6bSBaptiste Daroussin ROFF_aln, 85*61d06d6bSBaptiste Daroussin ROFF_als, 86*61d06d6bSBaptiste Daroussin ROFF_am, 87*61d06d6bSBaptiste Daroussin ROFF_am1, 88*61d06d6bSBaptiste Daroussin ROFF_ami, 89*61d06d6bSBaptiste Daroussin ROFF_ami1, 90*61d06d6bSBaptiste Daroussin ROFF_as, 91*61d06d6bSBaptiste Daroussin ROFF_as1, 92*61d06d6bSBaptiste Daroussin ROFF_asciify, 93*61d06d6bSBaptiste Daroussin ROFF_backtrace, 94*61d06d6bSBaptiste Daroussin ROFF_bd, 95*61d06d6bSBaptiste Daroussin ROFF_bleedat, 96*61d06d6bSBaptiste Daroussin ROFF_blm, 97*61d06d6bSBaptiste Daroussin ROFF_box, 98*61d06d6bSBaptiste Daroussin ROFF_boxa, 99*61d06d6bSBaptiste Daroussin ROFF_bp, 100*61d06d6bSBaptiste Daroussin ROFF_BP, 101*61d06d6bSBaptiste Daroussin ROFF_break, 102*61d06d6bSBaptiste Daroussin ROFF_breakchar, 103*61d06d6bSBaptiste Daroussin ROFF_brnl, 104*61d06d6bSBaptiste Daroussin ROFF_brp, 105*61d06d6bSBaptiste Daroussin ROFF_brpnl, 106*61d06d6bSBaptiste Daroussin ROFF_c2, 107*61d06d6bSBaptiste Daroussin ROFF_cc, 108*61d06d6bSBaptiste Daroussin ROFF_cf, 109*61d06d6bSBaptiste Daroussin ROFF_cflags, 110*61d06d6bSBaptiste Daroussin ROFF_ch, 111*61d06d6bSBaptiste Daroussin ROFF_char, 112*61d06d6bSBaptiste Daroussin ROFF_chop, 113*61d06d6bSBaptiste Daroussin ROFF_class, 114*61d06d6bSBaptiste Daroussin ROFF_close, 115*61d06d6bSBaptiste Daroussin ROFF_CL, 116*61d06d6bSBaptiste Daroussin ROFF_color, 117*61d06d6bSBaptiste Daroussin ROFF_composite, 118*61d06d6bSBaptiste Daroussin ROFF_continue, 119*61d06d6bSBaptiste Daroussin ROFF_cp, 120*61d06d6bSBaptiste Daroussin ROFF_cropat, 121*61d06d6bSBaptiste Daroussin ROFF_cs, 122*61d06d6bSBaptiste Daroussin ROFF_cu, 123*61d06d6bSBaptiste Daroussin ROFF_da, 124*61d06d6bSBaptiste Daroussin ROFF_dch, 125*61d06d6bSBaptiste Daroussin ROFF_Dd, 126*61d06d6bSBaptiste Daroussin ROFF_de, 127*61d06d6bSBaptiste Daroussin ROFF_de1, 128*61d06d6bSBaptiste Daroussin ROFF_defcolor, 129*61d06d6bSBaptiste Daroussin ROFF_dei, 130*61d06d6bSBaptiste Daroussin ROFF_dei1, 131*61d06d6bSBaptiste Daroussin ROFF_device, 132*61d06d6bSBaptiste Daroussin ROFF_devicem, 133*61d06d6bSBaptiste Daroussin ROFF_di, 134*61d06d6bSBaptiste Daroussin ROFF_do, 135*61d06d6bSBaptiste Daroussin ROFF_ds, 136*61d06d6bSBaptiste Daroussin ROFF_ds1, 137*61d06d6bSBaptiste Daroussin ROFF_dwh, 138*61d06d6bSBaptiste Daroussin ROFF_dt, 139*61d06d6bSBaptiste Daroussin ROFF_ec, 140*61d06d6bSBaptiste Daroussin ROFF_ecr, 141*61d06d6bSBaptiste Daroussin ROFF_ecs, 142*61d06d6bSBaptiste Daroussin ROFF_el, 143*61d06d6bSBaptiste Daroussin ROFF_em, 144*61d06d6bSBaptiste Daroussin ROFF_EN, 145*61d06d6bSBaptiste Daroussin ROFF_eo, 146*61d06d6bSBaptiste Daroussin ROFF_EP, 147*61d06d6bSBaptiste Daroussin ROFF_EQ, 148*61d06d6bSBaptiste Daroussin ROFF_errprint, 149*61d06d6bSBaptiste Daroussin ROFF_ev, 150*61d06d6bSBaptiste Daroussin ROFF_evc, 151*61d06d6bSBaptiste Daroussin ROFF_ex, 152*61d06d6bSBaptiste Daroussin ROFF_fallback, 153*61d06d6bSBaptiste Daroussin ROFF_fam, 154*61d06d6bSBaptiste Daroussin ROFF_fc, 155*61d06d6bSBaptiste Daroussin ROFF_fchar, 156*61d06d6bSBaptiste Daroussin ROFF_fcolor, 157*61d06d6bSBaptiste Daroussin ROFF_fdeferlig, 158*61d06d6bSBaptiste Daroussin ROFF_feature, 159*61d06d6bSBaptiste Daroussin /* MAN_fi; ignored in mdoc(7) */ 160*61d06d6bSBaptiste Daroussin ROFF_fkern, 161*61d06d6bSBaptiste Daroussin ROFF_fl, 162*61d06d6bSBaptiste Daroussin ROFF_flig, 163*61d06d6bSBaptiste Daroussin ROFF_fp, 164*61d06d6bSBaptiste Daroussin ROFF_fps, 165*61d06d6bSBaptiste Daroussin ROFF_fschar, 166*61d06d6bSBaptiste Daroussin ROFF_fspacewidth, 167*61d06d6bSBaptiste Daroussin ROFF_fspecial, 168*61d06d6bSBaptiste Daroussin ROFF_ftr, 169*61d06d6bSBaptiste Daroussin ROFF_fzoom, 170*61d06d6bSBaptiste Daroussin ROFF_gcolor, 171*61d06d6bSBaptiste Daroussin ROFF_hc, 172*61d06d6bSBaptiste Daroussin ROFF_hcode, 173*61d06d6bSBaptiste Daroussin ROFF_hidechar, 174*61d06d6bSBaptiste Daroussin ROFF_hla, 175*61d06d6bSBaptiste Daroussin ROFF_hlm, 176*61d06d6bSBaptiste Daroussin ROFF_hpf, 177*61d06d6bSBaptiste Daroussin ROFF_hpfa, 178*61d06d6bSBaptiste Daroussin ROFF_hpfcode, 179*61d06d6bSBaptiste Daroussin ROFF_hw, 180*61d06d6bSBaptiste Daroussin ROFF_hy, 181*61d06d6bSBaptiste Daroussin ROFF_hylang, 182*61d06d6bSBaptiste Daroussin ROFF_hylen, 183*61d06d6bSBaptiste Daroussin ROFF_hym, 184*61d06d6bSBaptiste Daroussin ROFF_hypp, 185*61d06d6bSBaptiste Daroussin ROFF_hys, 186*61d06d6bSBaptiste Daroussin ROFF_ie, 187*61d06d6bSBaptiste Daroussin ROFF_if, 188*61d06d6bSBaptiste Daroussin ROFF_ig, 189*61d06d6bSBaptiste Daroussin /* MAN_in; ignored in mdoc(7) */ 190*61d06d6bSBaptiste Daroussin ROFF_index, 191*61d06d6bSBaptiste Daroussin ROFF_it, 192*61d06d6bSBaptiste Daroussin ROFF_itc, 193*61d06d6bSBaptiste Daroussin ROFF_IX, 194*61d06d6bSBaptiste Daroussin ROFF_kern, 195*61d06d6bSBaptiste Daroussin ROFF_kernafter, 196*61d06d6bSBaptiste Daroussin ROFF_kernbefore, 197*61d06d6bSBaptiste Daroussin ROFF_kernpair, 198*61d06d6bSBaptiste Daroussin ROFF_lc, 199*61d06d6bSBaptiste Daroussin ROFF_lc_ctype, 200*61d06d6bSBaptiste Daroussin ROFF_lds, 201*61d06d6bSBaptiste Daroussin ROFF_length, 202*61d06d6bSBaptiste Daroussin ROFF_letadj, 203*61d06d6bSBaptiste Daroussin ROFF_lf, 204*61d06d6bSBaptiste Daroussin ROFF_lg, 205*61d06d6bSBaptiste Daroussin ROFF_lhang, 206*61d06d6bSBaptiste Daroussin ROFF_linetabs, 207*61d06d6bSBaptiste Daroussin ROFF_lnr, 208*61d06d6bSBaptiste Daroussin ROFF_lnrf, 209*61d06d6bSBaptiste Daroussin ROFF_lpfx, 210*61d06d6bSBaptiste Daroussin ROFF_ls, 211*61d06d6bSBaptiste Daroussin ROFF_lsm, 212*61d06d6bSBaptiste Daroussin ROFF_lt, 213*61d06d6bSBaptiste Daroussin ROFF_mediasize, 214*61d06d6bSBaptiste Daroussin ROFF_minss, 215*61d06d6bSBaptiste Daroussin ROFF_mk, 216*61d06d6bSBaptiste Daroussin ROFF_mso, 217*61d06d6bSBaptiste Daroussin ROFF_na, 218*61d06d6bSBaptiste Daroussin ROFF_ne, 219*61d06d6bSBaptiste Daroussin /* MAN_nf; ignored in mdoc(7) */ 220*61d06d6bSBaptiste Daroussin ROFF_nh, 221*61d06d6bSBaptiste Daroussin ROFF_nhychar, 222*61d06d6bSBaptiste Daroussin ROFF_nm, 223*61d06d6bSBaptiste Daroussin ROFF_nn, 224*61d06d6bSBaptiste Daroussin ROFF_nop, 225*61d06d6bSBaptiste Daroussin ROFF_nr, 226*61d06d6bSBaptiste Daroussin ROFF_nrf, 227*61d06d6bSBaptiste Daroussin ROFF_nroff, 228*61d06d6bSBaptiste Daroussin ROFF_ns, 229*61d06d6bSBaptiste Daroussin ROFF_nx, 230*61d06d6bSBaptiste Daroussin ROFF_open, 231*61d06d6bSBaptiste Daroussin ROFF_opena, 232*61d06d6bSBaptiste Daroussin ROFF_os, 233*61d06d6bSBaptiste Daroussin ROFF_output, 234*61d06d6bSBaptiste Daroussin ROFF_padj, 235*61d06d6bSBaptiste Daroussin ROFF_papersize, 236*61d06d6bSBaptiste Daroussin ROFF_pc, 237*61d06d6bSBaptiste Daroussin ROFF_pev, 238*61d06d6bSBaptiste Daroussin ROFF_pi, 239*61d06d6bSBaptiste Daroussin ROFF_PI, 240*61d06d6bSBaptiste Daroussin ROFF_pl, 241*61d06d6bSBaptiste Daroussin ROFF_pm, 242*61d06d6bSBaptiste Daroussin ROFF_pn, 243*61d06d6bSBaptiste Daroussin ROFF_pnr, 244*61d06d6bSBaptiste Daroussin ROFF_ps, 245*61d06d6bSBaptiste Daroussin ROFF_psbb, 246*61d06d6bSBaptiste Daroussin ROFF_pshape, 247*61d06d6bSBaptiste Daroussin ROFF_pso, 248*61d06d6bSBaptiste Daroussin ROFF_ptr, 249*61d06d6bSBaptiste Daroussin ROFF_pvs, 250*61d06d6bSBaptiste Daroussin ROFF_rchar, 251*61d06d6bSBaptiste Daroussin ROFF_rd, 252*61d06d6bSBaptiste Daroussin ROFF_recursionlimit, 253*61d06d6bSBaptiste Daroussin ROFF_return, 254*61d06d6bSBaptiste Daroussin ROFF_rfschar, 255*61d06d6bSBaptiste Daroussin ROFF_rhang, 256*61d06d6bSBaptiste Daroussin ROFF_rm, 257*61d06d6bSBaptiste Daroussin ROFF_rn, 258*61d06d6bSBaptiste Daroussin ROFF_rnn, 259*61d06d6bSBaptiste Daroussin ROFF_rr, 260*61d06d6bSBaptiste Daroussin ROFF_rs, 261*61d06d6bSBaptiste Daroussin ROFF_rt, 262*61d06d6bSBaptiste Daroussin ROFF_schar, 263*61d06d6bSBaptiste Daroussin ROFF_sentchar, 264*61d06d6bSBaptiste Daroussin ROFF_shc, 265*61d06d6bSBaptiste Daroussin ROFF_shift, 266*61d06d6bSBaptiste Daroussin ROFF_sizes, 267*61d06d6bSBaptiste Daroussin ROFF_so, 268*61d06d6bSBaptiste Daroussin ROFF_spacewidth, 269*61d06d6bSBaptiste Daroussin ROFF_special, 270*61d06d6bSBaptiste Daroussin ROFF_spreadwarn, 271*61d06d6bSBaptiste Daroussin ROFF_ss, 272*61d06d6bSBaptiste Daroussin ROFF_sty, 273*61d06d6bSBaptiste Daroussin ROFF_substring, 274*61d06d6bSBaptiste Daroussin ROFF_sv, 275*61d06d6bSBaptiste Daroussin ROFF_sy, 276*61d06d6bSBaptiste Daroussin ROFF_T_, 277*61d06d6bSBaptiste Daroussin ROFF_tc, 278*61d06d6bSBaptiste Daroussin ROFF_TE, 279*61d06d6bSBaptiste Daroussin ROFF_TH, 280*61d06d6bSBaptiste Daroussin ROFF_tkf, 281*61d06d6bSBaptiste Daroussin ROFF_tl, 282*61d06d6bSBaptiste Daroussin ROFF_tm, 283*61d06d6bSBaptiste Daroussin ROFF_tm1, 284*61d06d6bSBaptiste Daroussin ROFF_tmc, 285*61d06d6bSBaptiste Daroussin ROFF_tr, 286*61d06d6bSBaptiste Daroussin ROFF_track, 287*61d06d6bSBaptiste Daroussin ROFF_transchar, 288*61d06d6bSBaptiste Daroussin ROFF_trf, 289*61d06d6bSBaptiste Daroussin ROFF_trimat, 290*61d06d6bSBaptiste Daroussin ROFF_trin, 291*61d06d6bSBaptiste Daroussin ROFF_trnt, 292*61d06d6bSBaptiste Daroussin ROFF_troff, 293*61d06d6bSBaptiste Daroussin ROFF_TS, 294*61d06d6bSBaptiste Daroussin ROFF_uf, 295*61d06d6bSBaptiste Daroussin ROFF_ul, 296*61d06d6bSBaptiste Daroussin ROFF_unformat, 297*61d06d6bSBaptiste Daroussin ROFF_unwatch, 298*61d06d6bSBaptiste Daroussin ROFF_unwatchn, 299*61d06d6bSBaptiste Daroussin ROFF_vpt, 300*61d06d6bSBaptiste Daroussin ROFF_vs, 301*61d06d6bSBaptiste Daroussin ROFF_warn, 302*61d06d6bSBaptiste Daroussin ROFF_warnscale, 303*61d06d6bSBaptiste Daroussin ROFF_watch, 304*61d06d6bSBaptiste Daroussin ROFF_watchlength, 305*61d06d6bSBaptiste Daroussin ROFF_watchn, 306*61d06d6bSBaptiste Daroussin ROFF_wh, 307*61d06d6bSBaptiste Daroussin ROFF_while, 308*61d06d6bSBaptiste Daroussin ROFF_write, 309*61d06d6bSBaptiste Daroussin ROFF_writec, 310*61d06d6bSBaptiste Daroussin ROFF_writem, 311*61d06d6bSBaptiste Daroussin ROFF_xflag, 312*61d06d6bSBaptiste Daroussin ROFF_cblock, 313*61d06d6bSBaptiste Daroussin ROFF_RENAMED, 314*61d06d6bSBaptiste Daroussin ROFF_USERDEF, 315*61d06d6bSBaptiste Daroussin TOKEN_NONE, 316*61d06d6bSBaptiste Daroussin MDOC_Dd, 317*61d06d6bSBaptiste Daroussin MDOC_Dt, 318*61d06d6bSBaptiste Daroussin MDOC_Os, 319*61d06d6bSBaptiste Daroussin MDOC_Sh, 320*61d06d6bSBaptiste Daroussin MDOC_Ss, 321*61d06d6bSBaptiste Daroussin MDOC_Pp, 322*61d06d6bSBaptiste Daroussin MDOC_D1, 323*61d06d6bSBaptiste Daroussin MDOC_Dl, 324*61d06d6bSBaptiste Daroussin MDOC_Bd, 325*61d06d6bSBaptiste Daroussin MDOC_Ed, 326*61d06d6bSBaptiste Daroussin MDOC_Bl, 327*61d06d6bSBaptiste Daroussin MDOC_El, 328*61d06d6bSBaptiste Daroussin MDOC_It, 329*61d06d6bSBaptiste Daroussin MDOC_Ad, 330*61d06d6bSBaptiste Daroussin MDOC_An, 331*61d06d6bSBaptiste Daroussin MDOC_Ap, 332*61d06d6bSBaptiste Daroussin MDOC_Ar, 333*61d06d6bSBaptiste Daroussin MDOC_Cd, 334*61d06d6bSBaptiste Daroussin MDOC_Cm, 335*61d06d6bSBaptiste Daroussin MDOC_Dv, 336*61d06d6bSBaptiste Daroussin MDOC_Er, 337*61d06d6bSBaptiste Daroussin MDOC_Ev, 338*61d06d6bSBaptiste Daroussin MDOC_Ex, 339*61d06d6bSBaptiste Daroussin MDOC_Fa, 340*61d06d6bSBaptiste Daroussin MDOC_Fd, 341*61d06d6bSBaptiste Daroussin MDOC_Fl, 342*61d06d6bSBaptiste Daroussin MDOC_Fn, 343*61d06d6bSBaptiste Daroussin MDOC_Ft, 344*61d06d6bSBaptiste Daroussin MDOC_Ic, 345*61d06d6bSBaptiste Daroussin MDOC_In, 346*61d06d6bSBaptiste Daroussin MDOC_Li, 347*61d06d6bSBaptiste Daroussin MDOC_Nd, 348*61d06d6bSBaptiste Daroussin MDOC_Nm, 349*61d06d6bSBaptiste Daroussin MDOC_Op, 350*61d06d6bSBaptiste Daroussin MDOC_Ot, 351*61d06d6bSBaptiste Daroussin MDOC_Pa, 352*61d06d6bSBaptiste Daroussin MDOC_Rv, 353*61d06d6bSBaptiste Daroussin MDOC_St, 354*61d06d6bSBaptiste Daroussin MDOC_Va, 355*61d06d6bSBaptiste Daroussin MDOC_Vt, 356*61d06d6bSBaptiste Daroussin MDOC_Xr, 357*61d06d6bSBaptiste Daroussin MDOC__A, 358*61d06d6bSBaptiste Daroussin MDOC__B, 359*61d06d6bSBaptiste Daroussin MDOC__D, 360*61d06d6bSBaptiste Daroussin MDOC__I, 361*61d06d6bSBaptiste Daroussin MDOC__J, 362*61d06d6bSBaptiste Daroussin MDOC__N, 363*61d06d6bSBaptiste Daroussin MDOC__O, 364*61d06d6bSBaptiste Daroussin MDOC__P, 365*61d06d6bSBaptiste Daroussin MDOC__R, 366*61d06d6bSBaptiste Daroussin MDOC__T, 367*61d06d6bSBaptiste Daroussin MDOC__V, 368*61d06d6bSBaptiste Daroussin MDOC_Ac, 369*61d06d6bSBaptiste Daroussin MDOC_Ao, 370*61d06d6bSBaptiste Daroussin MDOC_Aq, 371*61d06d6bSBaptiste Daroussin MDOC_At, 372*61d06d6bSBaptiste Daroussin MDOC_Bc, 373*61d06d6bSBaptiste Daroussin MDOC_Bf, 374*61d06d6bSBaptiste Daroussin MDOC_Bo, 375*61d06d6bSBaptiste Daroussin MDOC_Bq, 376*61d06d6bSBaptiste Daroussin MDOC_Bsx, 377*61d06d6bSBaptiste Daroussin MDOC_Bx, 378*61d06d6bSBaptiste Daroussin MDOC_Db, 379*61d06d6bSBaptiste Daroussin MDOC_Dc, 380*61d06d6bSBaptiste Daroussin MDOC_Do, 381*61d06d6bSBaptiste Daroussin MDOC_Dq, 382*61d06d6bSBaptiste Daroussin MDOC_Ec, 383*61d06d6bSBaptiste Daroussin MDOC_Ef, 384*61d06d6bSBaptiste Daroussin MDOC_Em, 385*61d06d6bSBaptiste Daroussin MDOC_Eo, 386*61d06d6bSBaptiste Daroussin MDOC_Fx, 387*61d06d6bSBaptiste Daroussin MDOC_Ms, 388*61d06d6bSBaptiste Daroussin MDOC_No, 389*61d06d6bSBaptiste Daroussin MDOC_Ns, 390*61d06d6bSBaptiste Daroussin MDOC_Nx, 391*61d06d6bSBaptiste Daroussin MDOC_Ox, 392*61d06d6bSBaptiste Daroussin MDOC_Pc, 393*61d06d6bSBaptiste Daroussin MDOC_Pf, 394*61d06d6bSBaptiste Daroussin MDOC_Po, 395*61d06d6bSBaptiste Daroussin MDOC_Pq, 396*61d06d6bSBaptiste Daroussin MDOC_Qc, 397*61d06d6bSBaptiste Daroussin MDOC_Ql, 398*61d06d6bSBaptiste Daroussin MDOC_Qo, 399*61d06d6bSBaptiste Daroussin MDOC_Qq, 400*61d06d6bSBaptiste Daroussin MDOC_Re, 401*61d06d6bSBaptiste Daroussin MDOC_Rs, 402*61d06d6bSBaptiste Daroussin MDOC_Sc, 403*61d06d6bSBaptiste Daroussin MDOC_So, 404*61d06d6bSBaptiste Daroussin MDOC_Sq, 405*61d06d6bSBaptiste Daroussin MDOC_Sm, 406*61d06d6bSBaptiste Daroussin MDOC_Sx, 407*61d06d6bSBaptiste Daroussin MDOC_Sy, 408*61d06d6bSBaptiste Daroussin MDOC_Tn, 409*61d06d6bSBaptiste Daroussin MDOC_Ux, 410*61d06d6bSBaptiste Daroussin MDOC_Xc, 411*61d06d6bSBaptiste Daroussin MDOC_Xo, 412*61d06d6bSBaptiste Daroussin MDOC_Fo, 413*61d06d6bSBaptiste Daroussin MDOC_Fc, 414*61d06d6bSBaptiste Daroussin MDOC_Oo, 415*61d06d6bSBaptiste Daroussin MDOC_Oc, 416*61d06d6bSBaptiste Daroussin MDOC_Bk, 417*61d06d6bSBaptiste Daroussin MDOC_Ek, 418*61d06d6bSBaptiste Daroussin MDOC_Bt, 419*61d06d6bSBaptiste Daroussin MDOC_Hf, 420*61d06d6bSBaptiste Daroussin MDOC_Fr, 421*61d06d6bSBaptiste Daroussin MDOC_Ud, 422*61d06d6bSBaptiste Daroussin MDOC_Lb, 423*61d06d6bSBaptiste Daroussin MDOC_Lp, 424*61d06d6bSBaptiste Daroussin MDOC_Lk, 425*61d06d6bSBaptiste Daroussin MDOC_Mt, 426*61d06d6bSBaptiste Daroussin MDOC_Brq, 427*61d06d6bSBaptiste Daroussin MDOC_Bro, 428*61d06d6bSBaptiste Daroussin MDOC_Brc, 429*61d06d6bSBaptiste Daroussin MDOC__C, 430*61d06d6bSBaptiste Daroussin MDOC_Es, 431*61d06d6bSBaptiste Daroussin MDOC_En, 432*61d06d6bSBaptiste Daroussin MDOC_Dx, 433*61d06d6bSBaptiste Daroussin MDOC__Q, 434*61d06d6bSBaptiste Daroussin MDOC__U, 435*61d06d6bSBaptiste Daroussin MDOC_Ta, 436*61d06d6bSBaptiste Daroussin MDOC_MAX, 437*61d06d6bSBaptiste Daroussin MAN_TH, 438*61d06d6bSBaptiste Daroussin MAN_SH, 439*61d06d6bSBaptiste Daroussin MAN_SS, 440*61d06d6bSBaptiste Daroussin MAN_TP, 441*61d06d6bSBaptiste Daroussin MAN_LP, 442*61d06d6bSBaptiste Daroussin MAN_PP, 443*61d06d6bSBaptiste Daroussin MAN_P, 444*61d06d6bSBaptiste Daroussin MAN_IP, 445*61d06d6bSBaptiste Daroussin MAN_HP, 446*61d06d6bSBaptiste Daroussin MAN_SM, 447*61d06d6bSBaptiste Daroussin MAN_SB, 448*61d06d6bSBaptiste Daroussin MAN_BI, 449*61d06d6bSBaptiste Daroussin MAN_IB, 450*61d06d6bSBaptiste Daroussin MAN_BR, 451*61d06d6bSBaptiste Daroussin MAN_RB, 452*61d06d6bSBaptiste Daroussin MAN_R, 453*61d06d6bSBaptiste Daroussin MAN_B, 454*61d06d6bSBaptiste Daroussin MAN_I, 455*61d06d6bSBaptiste Daroussin MAN_IR, 456*61d06d6bSBaptiste Daroussin MAN_RI, 457*61d06d6bSBaptiste Daroussin MAN_nf, 458*61d06d6bSBaptiste Daroussin MAN_fi, 459*61d06d6bSBaptiste Daroussin MAN_RE, 460*61d06d6bSBaptiste Daroussin MAN_RS, 461*61d06d6bSBaptiste Daroussin MAN_DT, 462*61d06d6bSBaptiste Daroussin MAN_UC, 463*61d06d6bSBaptiste Daroussin MAN_PD, 464*61d06d6bSBaptiste Daroussin MAN_AT, 465*61d06d6bSBaptiste Daroussin MAN_in, 466*61d06d6bSBaptiste Daroussin MAN_OP, 467*61d06d6bSBaptiste Daroussin MAN_EX, 468*61d06d6bSBaptiste Daroussin MAN_EE, 469*61d06d6bSBaptiste Daroussin MAN_UR, 470*61d06d6bSBaptiste Daroussin MAN_UE, 471*61d06d6bSBaptiste Daroussin MAN_MT, 472*61d06d6bSBaptiste Daroussin MAN_ME, 473*61d06d6bSBaptiste Daroussin MAN_MAX 474*61d06d6bSBaptiste Daroussin }; 475*61d06d6bSBaptiste Daroussin 476*61d06d6bSBaptiste Daroussin enum roff_next { 477*61d06d6bSBaptiste Daroussin ROFF_NEXT_SIBLING = 0, 478*61d06d6bSBaptiste Daroussin ROFF_NEXT_CHILD 479*61d06d6bSBaptiste Daroussin }; 480*61d06d6bSBaptiste Daroussin 481*61d06d6bSBaptiste Daroussin /* 482*61d06d6bSBaptiste Daroussin * Indicates that a BODY's formatting has ended, but 483*61d06d6bSBaptiste Daroussin * the scope is still open. Used for badly nested blocks. 484*61d06d6bSBaptiste Daroussin */ 485*61d06d6bSBaptiste Daroussin enum mdoc_endbody { 486*61d06d6bSBaptiste Daroussin ENDBODY_NOT = 0, 487*61d06d6bSBaptiste Daroussin ENDBODY_SPACE /* Is broken: append a space. */ 488*61d06d6bSBaptiste Daroussin }; 489*61d06d6bSBaptiste Daroussin 490*61d06d6bSBaptiste Daroussin struct roff_node { 491*61d06d6bSBaptiste Daroussin struct roff_node *parent; /* Parent AST node. */ 492*61d06d6bSBaptiste Daroussin struct roff_node *child; /* First child AST node. */ 493*61d06d6bSBaptiste Daroussin struct roff_node *last; /* Last child AST node. */ 494*61d06d6bSBaptiste Daroussin struct roff_node *next; /* Sibling AST node. */ 495*61d06d6bSBaptiste Daroussin struct roff_node *prev; /* Prior sibling AST node. */ 496*61d06d6bSBaptiste Daroussin struct roff_node *head; /* BLOCK */ 497*61d06d6bSBaptiste Daroussin struct roff_node *body; /* BLOCK/ENDBODY */ 498*61d06d6bSBaptiste Daroussin struct roff_node *tail; /* BLOCK */ 499*61d06d6bSBaptiste Daroussin struct mdoc_arg *args; /* BLOCK/ELEM */ 500*61d06d6bSBaptiste Daroussin union mdoc_data *norm; /* Normalized arguments. */ 501*61d06d6bSBaptiste Daroussin char *string; /* TEXT */ 502*61d06d6bSBaptiste Daroussin const struct tbl_span *span; /* TBL */ 503*61d06d6bSBaptiste Daroussin struct eqn_box *eqn; /* EQN */ 504*61d06d6bSBaptiste Daroussin int line; /* Input file line number. */ 505*61d06d6bSBaptiste Daroussin int pos; /* Input file column number. */ 506*61d06d6bSBaptiste Daroussin int flags; 507*61d06d6bSBaptiste Daroussin #define NODE_VALID (1 << 0) /* Has been validated. */ 508*61d06d6bSBaptiste Daroussin #define NODE_ENDED (1 << 1) /* Gone past body end mark. */ 509*61d06d6bSBaptiste Daroussin #define NODE_EOS (1 << 2) /* At sentence boundary. */ 510*61d06d6bSBaptiste Daroussin #define NODE_LINE (1 << 3) /* First macro/text on line. */ 511*61d06d6bSBaptiste Daroussin #define NODE_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting. */ 512*61d06d6bSBaptiste Daroussin #define NODE_BROKEN (1 << 5) /* Must validate parent when ending. */ 513*61d06d6bSBaptiste Daroussin #define NODE_DELIMO (1 << 6) 514*61d06d6bSBaptiste Daroussin #define NODE_DELIMC (1 << 7) 515*61d06d6bSBaptiste Daroussin #define NODE_NOSRC (1 << 8) /* Generated node, not in input file. */ 516*61d06d6bSBaptiste Daroussin #define NODE_NOPRT (1 << 9) /* Shall not print anything. */ 517*61d06d6bSBaptiste Daroussin int prev_font; /* Before entering this node. */ 518*61d06d6bSBaptiste Daroussin int aux; /* Decoded node data, type-dependent. */ 519*61d06d6bSBaptiste Daroussin enum roff_tok tok; /* Request or macro ID. */ 520*61d06d6bSBaptiste Daroussin enum roff_type type; /* AST node type. */ 521*61d06d6bSBaptiste Daroussin enum roff_sec sec; /* Current named section. */ 522*61d06d6bSBaptiste Daroussin enum mdoc_endbody end; /* BODY */ 523*61d06d6bSBaptiste Daroussin }; 524*61d06d6bSBaptiste Daroussin 525*61d06d6bSBaptiste Daroussin struct roff_meta { 526*61d06d6bSBaptiste Daroussin char *msec; /* Manual section, usually a digit. */ 527*61d06d6bSBaptiste Daroussin char *vol; /* Manual volume title. */ 528*61d06d6bSBaptiste Daroussin char *os; /* Operating system. */ 529*61d06d6bSBaptiste Daroussin char *arch; /* Machine architecture. */ 530*61d06d6bSBaptiste Daroussin char *title; /* Manual title, usually CAPS. */ 531*61d06d6bSBaptiste Daroussin char *name; /* Leading manual name. */ 532*61d06d6bSBaptiste Daroussin char *date; /* Normalized date. */ 533*61d06d6bSBaptiste Daroussin int hasbody; /* Document is not empty. */ 534*61d06d6bSBaptiste Daroussin int rcsids; /* Bits indexed by enum mandoc_os. */ 535*61d06d6bSBaptiste Daroussin enum mandoc_os os_e; /* Operating system. */ 536*61d06d6bSBaptiste Daroussin }; 537*61d06d6bSBaptiste Daroussin 538*61d06d6bSBaptiste Daroussin struct roff_man { 539*61d06d6bSBaptiste Daroussin struct roff_meta meta; /* Document meta-data. */ 540*61d06d6bSBaptiste Daroussin struct mparse *parse; /* Parse pointer. */ 541*61d06d6bSBaptiste Daroussin struct roff *roff; /* Roff parser state data. */ 542*61d06d6bSBaptiste Daroussin struct ohash *mdocmac; /* Mdoc macro lookup table. */ 543*61d06d6bSBaptiste Daroussin struct ohash *manmac; /* Man macro lookup table. */ 544*61d06d6bSBaptiste Daroussin const char *os_s; /* Default operating system. */ 545*61d06d6bSBaptiste Daroussin struct roff_node *first; /* The first node parsed. */ 546*61d06d6bSBaptiste Daroussin struct roff_node *last; /* The last node parsed. */ 547*61d06d6bSBaptiste Daroussin struct roff_node *last_es; /* The most recent Es node. */ 548*61d06d6bSBaptiste Daroussin int quick; /* Abort parse early. */ 549*61d06d6bSBaptiste Daroussin int flags; /* Parse flags. */ 550*61d06d6bSBaptiste Daroussin #define MDOC_LITERAL (1 << 1) /* In a literal scope. */ 551*61d06d6bSBaptiste Daroussin #define MDOC_PBODY (1 << 2) /* In the document body. */ 552*61d06d6bSBaptiste Daroussin #define MDOC_NEWLINE (1 << 3) /* First macro/text in a line. */ 553*61d06d6bSBaptiste Daroussin #define MDOC_PHRASE (1 << 4) /* In a Bl -column phrase. */ 554*61d06d6bSBaptiste Daroussin #define MDOC_PHRASELIT (1 << 5) /* Literal within a phrase. */ 555*61d06d6bSBaptiste Daroussin #define MDOC_FREECOL (1 << 6) /* `It' invocation should close. */ 556*61d06d6bSBaptiste Daroussin #define MDOC_SYNOPSIS (1 << 7) /* SYNOPSIS-style formatting. */ 557*61d06d6bSBaptiste Daroussin #define MDOC_KEEP (1 << 8) /* In a word keep. */ 558*61d06d6bSBaptiste Daroussin #define MDOC_SMOFF (1 << 9) /* Spacing is off. */ 559*61d06d6bSBaptiste Daroussin #define MDOC_NODELIMC (1 << 10) /* Disable closing delimiter handling. */ 560*61d06d6bSBaptiste Daroussin #define MAN_ELINE (1 << 11) /* Next-line element scope. */ 561*61d06d6bSBaptiste Daroussin #define MAN_BLINE (1 << 12) /* Next-line block scope. */ 562*61d06d6bSBaptiste Daroussin #define MDOC_PHRASEQF (1 << 13) /* Quote first word encountered. */ 563*61d06d6bSBaptiste Daroussin #define MDOC_PHRASEQL (1 << 14) /* Quote last word of this phrase. */ 564*61d06d6bSBaptiste Daroussin #define MDOC_PHRASEQN (1 << 15) /* Quote first word of the next phrase. */ 565*61d06d6bSBaptiste Daroussin #define MAN_LITERAL MDOC_LITERAL 566*61d06d6bSBaptiste Daroussin #define MAN_NEWLINE MDOC_NEWLINE 567*61d06d6bSBaptiste Daroussin enum roff_macroset macroset; /* Kind of high-level macros used. */ 568*61d06d6bSBaptiste Daroussin enum roff_sec lastsec; /* Last section seen. */ 569*61d06d6bSBaptiste Daroussin enum roff_sec lastnamed; /* Last standard section seen. */ 570*61d06d6bSBaptiste Daroussin enum roff_next next; /* Where to put the next node. */ 571*61d06d6bSBaptiste Daroussin }; 572*61d06d6bSBaptiste Daroussin 573*61d06d6bSBaptiste Daroussin extern const char *const *roff_name; 574*61d06d6bSBaptiste Daroussin 575*61d06d6bSBaptiste Daroussin 576*61d06d6bSBaptiste Daroussin void deroff(char **, const struct roff_node *); 577*61d06d6bSBaptiste Daroussin struct ohash *roffhash_alloc(enum roff_tok, enum roff_tok); 578*61d06d6bSBaptiste Daroussin enum roff_tok roffhash_find(struct ohash *, const char *, size_t); 579*61d06d6bSBaptiste Daroussin void roffhash_free(struct ohash *); 580*61d06d6bSBaptiste Daroussin void roff_validate(struct roff_man *); 581