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