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