1*cec8643bSMichal Nowak /* $Id: roff.h,v 1.69 2019/03/04 13:01:57 schwarze Exp $ */ 2371584c2SYuri Pankov /* 3371584c2SYuri Pankov * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4*cec8643bSMichal Nowak * Copyright (c) 2013-2015, 2017-2019 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. 17*cec8643bSMichal Nowak * 18*cec8643bSMichal Nowak * Common data types for all syntax trees and related functions. 19371584c2SYuri Pankov */ 20371584c2SYuri Pankov 21c66b8046SYuri Pankov struct ohash; 22371584c2SYuri Pankov struct mdoc_arg; 23371584c2SYuri Pankov union mdoc_data; 24*cec8643bSMichal Nowak struct tbl_span; 25*cec8643bSMichal Nowak struct eqn_box; 26371584c2SYuri Pankov 27371584c2SYuri Pankov enum roff_macroset { 28371584c2SYuri Pankov MACROSET_NONE = 0, 29371584c2SYuri Pankov MACROSET_MDOC, 30371584c2SYuri Pankov MACROSET_MAN 31371584c2SYuri Pankov }; 32371584c2SYuri Pankov 33371584c2SYuri Pankov enum roff_sec { 34371584c2SYuri Pankov SEC_NONE = 0, 35371584c2SYuri Pankov SEC_NAME, 36371584c2SYuri Pankov SEC_LIBRARY, 37371584c2SYuri Pankov SEC_SYNOPSIS, 38371584c2SYuri Pankov SEC_DESCRIPTION, 39371584c2SYuri Pankov SEC_CONTEXT, 40371584c2SYuri Pankov SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */ 41371584c2SYuri Pankov SEC_RETURN_VALUES, 42371584c2SYuri Pankov SEC_ENVIRONMENT, 43371584c2SYuri Pankov SEC_FILES, 44371584c2SYuri Pankov SEC_EXIT_STATUS, 45371584c2SYuri Pankov SEC_EXAMPLES, 46371584c2SYuri Pankov SEC_DIAGNOSTICS, 47371584c2SYuri Pankov SEC_COMPATIBILITY, 48371584c2SYuri Pankov SEC_ERRORS, 49371584c2SYuri Pankov SEC_SEE_ALSO, 50371584c2SYuri Pankov SEC_STANDARDS, 51371584c2SYuri Pankov SEC_HISTORY, 52371584c2SYuri Pankov SEC_AUTHORS, 53371584c2SYuri Pankov SEC_CAVEATS, 54371584c2SYuri Pankov SEC_BUGS, 55371584c2SYuri Pankov SEC_SECURITY, 56371584c2SYuri Pankov SEC_CUSTOM, 57371584c2SYuri Pankov SEC__MAX 58371584c2SYuri Pankov }; 59371584c2SYuri Pankov 60371584c2SYuri Pankov enum roff_type { 61371584c2SYuri Pankov ROFFT_ROOT, 62371584c2SYuri Pankov ROFFT_BLOCK, 63371584c2SYuri Pankov ROFFT_HEAD, 64371584c2SYuri Pankov ROFFT_BODY, 65371584c2SYuri Pankov ROFFT_TAIL, 66371584c2SYuri Pankov ROFFT_ELEM, 67371584c2SYuri Pankov ROFFT_TEXT, 686640c13bSYuri Pankov ROFFT_COMMENT, 69371584c2SYuri Pankov ROFFT_TBL, 70371584c2SYuri Pankov ROFFT_EQN 71371584c2SYuri Pankov }; 72371584c2SYuri Pankov 73c66b8046SYuri Pankov enum roff_tok { 74c66b8046SYuri Pankov ROFF_br = 0, 75c66b8046SYuri Pankov ROFF_ce, 76*cec8643bSMichal Nowak ROFF_fi, 77c66b8046SYuri Pankov ROFF_ft, 78c66b8046SYuri Pankov ROFF_ll, 79c66b8046SYuri Pankov ROFF_mc, 80*cec8643bSMichal Nowak ROFF_nf, 81c66b8046SYuri Pankov ROFF_po, 82c66b8046SYuri Pankov ROFF_rj, 83c66b8046SYuri Pankov ROFF_sp, 84c66b8046SYuri Pankov ROFF_ta, 85c66b8046SYuri Pankov ROFF_ti, 86c66b8046SYuri Pankov ROFF_MAX, 87c66b8046SYuri Pankov ROFF_ab, 88c66b8046SYuri Pankov ROFF_ad, 89c66b8046SYuri Pankov ROFF_af, 90c66b8046SYuri Pankov ROFF_aln, 91c66b8046SYuri Pankov ROFF_als, 92c66b8046SYuri Pankov ROFF_am, 93c66b8046SYuri Pankov ROFF_am1, 94c66b8046SYuri Pankov ROFF_ami, 95c66b8046SYuri Pankov ROFF_ami1, 96c66b8046SYuri Pankov ROFF_as, 97c66b8046SYuri Pankov ROFF_as1, 98c66b8046SYuri Pankov ROFF_asciify, 99c66b8046SYuri Pankov ROFF_backtrace, 100c66b8046SYuri Pankov ROFF_bd, 101c66b8046SYuri Pankov ROFF_bleedat, 102c66b8046SYuri Pankov ROFF_blm, 103c66b8046SYuri Pankov ROFF_box, 104c66b8046SYuri Pankov ROFF_boxa, 105c66b8046SYuri Pankov ROFF_bp, 106c66b8046SYuri Pankov ROFF_BP, 107c66b8046SYuri Pankov ROFF_break, 108c66b8046SYuri Pankov ROFF_breakchar, 109c66b8046SYuri Pankov ROFF_brnl, 110c66b8046SYuri Pankov ROFF_brp, 111c66b8046SYuri Pankov ROFF_brpnl, 112c66b8046SYuri Pankov ROFF_c2, 113c66b8046SYuri Pankov ROFF_cc, 114c66b8046SYuri Pankov ROFF_cf, 115c66b8046SYuri Pankov ROFF_cflags, 116c66b8046SYuri Pankov ROFF_ch, 117c66b8046SYuri Pankov ROFF_char, 118c66b8046SYuri Pankov ROFF_chop, 119c66b8046SYuri Pankov ROFF_class, 120c66b8046SYuri Pankov ROFF_close, 121c66b8046SYuri Pankov ROFF_CL, 122c66b8046SYuri Pankov ROFF_color, 123c66b8046SYuri Pankov ROFF_composite, 124c66b8046SYuri Pankov ROFF_continue, 125c66b8046SYuri Pankov ROFF_cp, 126c66b8046SYuri Pankov ROFF_cropat, 127c66b8046SYuri Pankov ROFF_cs, 128c66b8046SYuri Pankov ROFF_cu, 129c66b8046SYuri Pankov ROFF_da, 130c66b8046SYuri Pankov ROFF_dch, 131c66b8046SYuri Pankov ROFF_Dd, 132c66b8046SYuri Pankov ROFF_de, 133c66b8046SYuri Pankov ROFF_de1, 134c66b8046SYuri Pankov ROFF_defcolor, 135c66b8046SYuri Pankov ROFF_dei, 136c66b8046SYuri Pankov ROFF_dei1, 137c66b8046SYuri Pankov ROFF_device, 138c66b8046SYuri Pankov ROFF_devicem, 139c66b8046SYuri Pankov ROFF_di, 140c66b8046SYuri Pankov ROFF_do, 141c66b8046SYuri Pankov ROFF_ds, 142c66b8046SYuri Pankov ROFF_ds1, 143c66b8046SYuri Pankov ROFF_dwh, 144c66b8046SYuri Pankov ROFF_dt, 145c66b8046SYuri Pankov ROFF_ec, 146c66b8046SYuri Pankov ROFF_ecr, 147c66b8046SYuri Pankov ROFF_ecs, 148c66b8046SYuri Pankov ROFF_el, 149c66b8046SYuri Pankov ROFF_em, 150c66b8046SYuri Pankov ROFF_EN, 151c66b8046SYuri Pankov ROFF_eo, 152c66b8046SYuri Pankov ROFF_EP, 153c66b8046SYuri Pankov ROFF_EQ, 154c66b8046SYuri Pankov ROFF_errprint, 155c66b8046SYuri Pankov ROFF_ev, 156c66b8046SYuri Pankov ROFF_evc, 157c66b8046SYuri Pankov ROFF_ex, 158c66b8046SYuri Pankov ROFF_fallback, 159c66b8046SYuri Pankov ROFF_fam, 160c66b8046SYuri Pankov ROFF_fc, 161c66b8046SYuri Pankov ROFF_fchar, 162c66b8046SYuri Pankov ROFF_fcolor, 163c66b8046SYuri Pankov ROFF_fdeferlig, 164c66b8046SYuri Pankov ROFF_feature, 165c66b8046SYuri Pankov ROFF_fkern, 166c66b8046SYuri Pankov ROFF_fl, 167c66b8046SYuri Pankov ROFF_flig, 168c66b8046SYuri Pankov ROFF_fp, 169c66b8046SYuri Pankov ROFF_fps, 170c66b8046SYuri Pankov ROFF_fschar, 171c66b8046SYuri Pankov ROFF_fspacewidth, 172c66b8046SYuri Pankov ROFF_fspecial, 173c66b8046SYuri Pankov ROFF_ftr, 174c66b8046SYuri Pankov ROFF_fzoom, 175c66b8046SYuri Pankov ROFF_gcolor, 176c66b8046SYuri Pankov ROFF_hc, 177c66b8046SYuri Pankov ROFF_hcode, 178c66b8046SYuri Pankov ROFF_hidechar, 179c66b8046SYuri Pankov ROFF_hla, 180c66b8046SYuri Pankov ROFF_hlm, 181c66b8046SYuri Pankov ROFF_hpf, 182c66b8046SYuri Pankov ROFF_hpfa, 183c66b8046SYuri Pankov ROFF_hpfcode, 184c66b8046SYuri Pankov ROFF_hw, 185c66b8046SYuri Pankov ROFF_hy, 186c66b8046SYuri Pankov ROFF_hylang, 187c66b8046SYuri Pankov ROFF_hylen, 188c66b8046SYuri Pankov ROFF_hym, 189c66b8046SYuri Pankov ROFF_hypp, 190c66b8046SYuri Pankov ROFF_hys, 191c66b8046SYuri Pankov ROFF_ie, 192c66b8046SYuri Pankov ROFF_if, 193c66b8046SYuri Pankov ROFF_ig, 194c66b8046SYuri Pankov /* MAN_in; ignored in mdoc(7) */ 195c66b8046SYuri Pankov ROFF_index, 196c66b8046SYuri Pankov ROFF_it, 197c66b8046SYuri Pankov ROFF_itc, 198c66b8046SYuri Pankov ROFF_IX, 199c66b8046SYuri Pankov ROFF_kern, 200c66b8046SYuri Pankov ROFF_kernafter, 201c66b8046SYuri Pankov ROFF_kernbefore, 202c66b8046SYuri Pankov ROFF_kernpair, 203c66b8046SYuri Pankov ROFF_lc, 204c66b8046SYuri Pankov ROFF_lc_ctype, 205c66b8046SYuri Pankov ROFF_lds, 206c66b8046SYuri Pankov ROFF_length, 207c66b8046SYuri Pankov ROFF_letadj, 208c66b8046SYuri Pankov ROFF_lf, 209c66b8046SYuri Pankov ROFF_lg, 210c66b8046SYuri Pankov ROFF_lhang, 211c66b8046SYuri Pankov ROFF_linetabs, 212c66b8046SYuri Pankov ROFF_lnr, 213c66b8046SYuri Pankov ROFF_lnrf, 214c66b8046SYuri Pankov ROFF_lpfx, 215c66b8046SYuri Pankov ROFF_ls, 216c66b8046SYuri Pankov ROFF_lsm, 217c66b8046SYuri Pankov ROFF_lt, 218c66b8046SYuri Pankov ROFF_mediasize, 219c66b8046SYuri Pankov ROFF_minss, 220c66b8046SYuri Pankov ROFF_mk, 221c66b8046SYuri Pankov ROFF_mso, 222c66b8046SYuri Pankov ROFF_na, 223c66b8046SYuri Pankov ROFF_ne, 224c66b8046SYuri Pankov ROFF_nh, 225c66b8046SYuri Pankov ROFF_nhychar, 226c66b8046SYuri Pankov ROFF_nm, 227c66b8046SYuri Pankov ROFF_nn, 228c66b8046SYuri Pankov ROFF_nop, 229c66b8046SYuri Pankov ROFF_nr, 230c66b8046SYuri Pankov ROFF_nrf, 231c66b8046SYuri Pankov ROFF_nroff, 232c66b8046SYuri Pankov ROFF_ns, 233c66b8046SYuri Pankov ROFF_nx, 234c66b8046SYuri Pankov ROFF_open, 235c66b8046SYuri Pankov ROFF_opena, 236c66b8046SYuri Pankov ROFF_os, 237c66b8046SYuri Pankov ROFF_output, 238c66b8046SYuri Pankov ROFF_padj, 239c66b8046SYuri Pankov ROFF_papersize, 240c66b8046SYuri Pankov ROFF_pc, 241c66b8046SYuri Pankov ROFF_pev, 242c66b8046SYuri Pankov ROFF_pi, 243c66b8046SYuri Pankov ROFF_PI, 244c66b8046SYuri Pankov ROFF_pl, 245c66b8046SYuri Pankov ROFF_pm, 246c66b8046SYuri Pankov ROFF_pn, 247c66b8046SYuri Pankov ROFF_pnr, 248c66b8046SYuri Pankov ROFF_ps, 249c66b8046SYuri Pankov ROFF_psbb, 250c66b8046SYuri Pankov ROFF_pshape, 251c66b8046SYuri Pankov ROFF_pso, 252c66b8046SYuri Pankov ROFF_ptr, 253c66b8046SYuri Pankov ROFF_pvs, 254c66b8046SYuri Pankov ROFF_rchar, 255c66b8046SYuri Pankov ROFF_rd, 256c66b8046SYuri Pankov ROFF_recursionlimit, 257c66b8046SYuri Pankov ROFF_return, 258c66b8046SYuri Pankov ROFF_rfschar, 259c66b8046SYuri Pankov ROFF_rhang, 260c66b8046SYuri Pankov ROFF_rm, 261c66b8046SYuri Pankov ROFF_rn, 262c66b8046SYuri Pankov ROFF_rnn, 263c66b8046SYuri Pankov ROFF_rr, 264c66b8046SYuri Pankov ROFF_rs, 265c66b8046SYuri Pankov ROFF_rt, 266c66b8046SYuri Pankov ROFF_schar, 267c66b8046SYuri Pankov ROFF_sentchar, 268c66b8046SYuri Pankov ROFF_shc, 269c66b8046SYuri Pankov ROFF_shift, 270c66b8046SYuri Pankov ROFF_sizes, 271c66b8046SYuri Pankov ROFF_so, 272c66b8046SYuri Pankov ROFF_spacewidth, 273c66b8046SYuri Pankov ROFF_special, 274c66b8046SYuri Pankov ROFF_spreadwarn, 275c66b8046SYuri Pankov ROFF_ss, 276c66b8046SYuri Pankov ROFF_sty, 277c66b8046SYuri Pankov ROFF_substring, 278c66b8046SYuri Pankov ROFF_sv, 279c66b8046SYuri Pankov ROFF_sy, 280c66b8046SYuri Pankov ROFF_T_, 281c66b8046SYuri Pankov ROFF_tc, 282c66b8046SYuri Pankov ROFF_TE, 283c66b8046SYuri Pankov ROFF_TH, 284c66b8046SYuri Pankov ROFF_tkf, 285c66b8046SYuri Pankov ROFF_tl, 286c66b8046SYuri Pankov ROFF_tm, 287c66b8046SYuri Pankov ROFF_tm1, 288c66b8046SYuri Pankov ROFF_tmc, 289c66b8046SYuri Pankov ROFF_tr, 290c66b8046SYuri Pankov ROFF_track, 291c66b8046SYuri Pankov ROFF_transchar, 292c66b8046SYuri Pankov ROFF_trf, 293c66b8046SYuri Pankov ROFF_trimat, 294c66b8046SYuri Pankov ROFF_trin, 295c66b8046SYuri Pankov ROFF_trnt, 296c66b8046SYuri Pankov ROFF_troff, 297c66b8046SYuri Pankov ROFF_TS, 298c66b8046SYuri Pankov ROFF_uf, 299c66b8046SYuri Pankov ROFF_ul, 300c66b8046SYuri Pankov ROFF_unformat, 301c66b8046SYuri Pankov ROFF_unwatch, 302c66b8046SYuri Pankov ROFF_unwatchn, 303c66b8046SYuri Pankov ROFF_vpt, 304c66b8046SYuri Pankov ROFF_vs, 305c66b8046SYuri Pankov ROFF_warn, 306c66b8046SYuri Pankov ROFF_warnscale, 307c66b8046SYuri Pankov ROFF_watch, 308c66b8046SYuri Pankov ROFF_watchlength, 309c66b8046SYuri Pankov ROFF_watchn, 310c66b8046SYuri Pankov ROFF_wh, 311c66b8046SYuri Pankov ROFF_while, 312c66b8046SYuri Pankov ROFF_write, 313c66b8046SYuri Pankov ROFF_writec, 314c66b8046SYuri Pankov ROFF_writem, 315c66b8046SYuri Pankov ROFF_xflag, 316c66b8046SYuri Pankov ROFF_cblock, 317c66b8046SYuri Pankov ROFF_RENAMED, 318c66b8046SYuri Pankov ROFF_USERDEF, 319c66b8046SYuri Pankov TOKEN_NONE, 320c66b8046SYuri Pankov MDOC_Dd, 321c66b8046SYuri Pankov MDOC_Dt, 322c66b8046SYuri Pankov MDOC_Os, 323c66b8046SYuri Pankov MDOC_Sh, 324c66b8046SYuri Pankov MDOC_Ss, 325c66b8046SYuri Pankov MDOC_Pp, 326c66b8046SYuri Pankov MDOC_D1, 327c66b8046SYuri Pankov MDOC_Dl, 328c66b8046SYuri Pankov MDOC_Bd, 329c66b8046SYuri Pankov MDOC_Ed, 330c66b8046SYuri Pankov MDOC_Bl, 331c66b8046SYuri Pankov MDOC_El, 332c66b8046SYuri Pankov MDOC_It, 333c66b8046SYuri Pankov MDOC_Ad, 334c66b8046SYuri Pankov MDOC_An, 335c66b8046SYuri Pankov MDOC_Ap, 336c66b8046SYuri Pankov MDOC_Ar, 337c66b8046SYuri Pankov MDOC_Cd, 338c66b8046SYuri Pankov MDOC_Cm, 339c66b8046SYuri Pankov MDOC_Dv, 340c66b8046SYuri Pankov MDOC_Er, 341c66b8046SYuri Pankov MDOC_Ev, 342c66b8046SYuri Pankov MDOC_Ex, 343c66b8046SYuri Pankov MDOC_Fa, 344c66b8046SYuri Pankov MDOC_Fd, 345c66b8046SYuri Pankov MDOC_Fl, 346c66b8046SYuri Pankov MDOC_Fn, 347c66b8046SYuri Pankov MDOC_Ft, 348c66b8046SYuri Pankov MDOC_Ic, 349c66b8046SYuri Pankov MDOC_In, 350c66b8046SYuri Pankov MDOC_Li, 351c66b8046SYuri Pankov MDOC_Nd, 352c66b8046SYuri Pankov MDOC_Nm, 353c66b8046SYuri Pankov MDOC_Op, 354c66b8046SYuri Pankov MDOC_Ot, 355c66b8046SYuri Pankov MDOC_Pa, 356c66b8046SYuri Pankov MDOC_Rv, 357c66b8046SYuri Pankov MDOC_St, 358c66b8046SYuri Pankov MDOC_Va, 359c66b8046SYuri Pankov MDOC_Vt, 360c66b8046SYuri Pankov MDOC_Xr, 361c66b8046SYuri Pankov MDOC__A, 362c66b8046SYuri Pankov MDOC__B, 363c66b8046SYuri Pankov MDOC__D, 364c66b8046SYuri Pankov MDOC__I, 365c66b8046SYuri Pankov MDOC__J, 366c66b8046SYuri Pankov MDOC__N, 367c66b8046SYuri Pankov MDOC__O, 368c66b8046SYuri Pankov MDOC__P, 369c66b8046SYuri Pankov MDOC__R, 370c66b8046SYuri Pankov MDOC__T, 371c66b8046SYuri Pankov MDOC__V, 372c66b8046SYuri Pankov MDOC_Ac, 373c66b8046SYuri Pankov MDOC_Ao, 374c66b8046SYuri Pankov MDOC_Aq, 375c66b8046SYuri Pankov MDOC_At, 376c66b8046SYuri Pankov MDOC_Bc, 377c66b8046SYuri Pankov MDOC_Bf, 378c66b8046SYuri Pankov MDOC_Bo, 379c66b8046SYuri Pankov MDOC_Bq, 380c66b8046SYuri Pankov MDOC_Bsx, 381c66b8046SYuri Pankov MDOC_Bx, 382c66b8046SYuri Pankov MDOC_Db, 383c66b8046SYuri Pankov MDOC_Dc, 384c66b8046SYuri Pankov MDOC_Do, 385c66b8046SYuri Pankov MDOC_Dq, 386c66b8046SYuri Pankov MDOC_Ec, 387c66b8046SYuri Pankov MDOC_Ef, 388c66b8046SYuri Pankov MDOC_Em, 389c66b8046SYuri Pankov MDOC_Eo, 390c66b8046SYuri Pankov MDOC_Fx, 391c66b8046SYuri Pankov MDOC_Ms, 392c66b8046SYuri Pankov MDOC_No, 393c66b8046SYuri Pankov MDOC_Ns, 394c66b8046SYuri Pankov MDOC_Nx, 395c66b8046SYuri Pankov MDOC_Ox, 396c66b8046SYuri Pankov MDOC_Pc, 397c66b8046SYuri Pankov MDOC_Pf, 398c66b8046SYuri Pankov MDOC_Po, 399c66b8046SYuri Pankov MDOC_Pq, 400c66b8046SYuri Pankov MDOC_Qc, 401c66b8046SYuri Pankov MDOC_Ql, 402c66b8046SYuri Pankov MDOC_Qo, 403c66b8046SYuri Pankov MDOC_Qq, 404c66b8046SYuri Pankov MDOC_Re, 405c66b8046SYuri Pankov MDOC_Rs, 406c66b8046SYuri Pankov MDOC_Sc, 407c66b8046SYuri Pankov MDOC_So, 408c66b8046SYuri Pankov MDOC_Sq, 409c66b8046SYuri Pankov MDOC_Sm, 410c66b8046SYuri Pankov MDOC_Sx, 411c66b8046SYuri Pankov MDOC_Sy, 412c66b8046SYuri Pankov MDOC_Tn, 413c66b8046SYuri Pankov MDOC_Ux, 414c66b8046SYuri Pankov MDOC_Xc, 415c66b8046SYuri Pankov MDOC_Xo, 416c66b8046SYuri Pankov MDOC_Fo, 417c66b8046SYuri Pankov MDOC_Fc, 418c66b8046SYuri Pankov MDOC_Oo, 419c66b8046SYuri Pankov MDOC_Oc, 420c66b8046SYuri Pankov MDOC_Bk, 421c66b8046SYuri Pankov MDOC_Ek, 422c66b8046SYuri Pankov MDOC_Bt, 423c66b8046SYuri Pankov MDOC_Hf, 424c66b8046SYuri Pankov MDOC_Fr, 425c66b8046SYuri Pankov MDOC_Ud, 426c66b8046SYuri Pankov MDOC_Lb, 427c66b8046SYuri Pankov MDOC_Lp, 428c66b8046SYuri Pankov MDOC_Lk, 429c66b8046SYuri Pankov MDOC_Mt, 430c66b8046SYuri Pankov MDOC_Brq, 431c66b8046SYuri Pankov MDOC_Bro, 432c66b8046SYuri Pankov MDOC_Brc, 433c66b8046SYuri Pankov MDOC__C, 434c66b8046SYuri Pankov MDOC_Es, 435c66b8046SYuri Pankov MDOC_En, 436c66b8046SYuri Pankov MDOC_Dx, 437c66b8046SYuri Pankov MDOC__Q, 438c66b8046SYuri Pankov MDOC__U, 439c66b8046SYuri Pankov MDOC_Ta, 440c66b8046SYuri Pankov MDOC_MAX, 441c66b8046SYuri Pankov MAN_TH, 442c66b8046SYuri Pankov MAN_SH, 443c66b8046SYuri Pankov MAN_SS, 444c66b8046SYuri Pankov MAN_TP, 445*cec8643bSMichal Nowak MAN_TQ, 446c66b8046SYuri Pankov MAN_LP, 447c66b8046SYuri Pankov MAN_PP, 448c66b8046SYuri Pankov MAN_P, 449c66b8046SYuri Pankov MAN_IP, 450c66b8046SYuri Pankov MAN_HP, 451c66b8046SYuri Pankov MAN_SM, 452c66b8046SYuri Pankov MAN_SB, 453c66b8046SYuri Pankov MAN_BI, 454c66b8046SYuri Pankov MAN_IB, 455c66b8046SYuri Pankov MAN_BR, 456c66b8046SYuri Pankov MAN_RB, 457c66b8046SYuri Pankov MAN_R, 458c66b8046SYuri Pankov MAN_B, 459c66b8046SYuri Pankov MAN_I, 460c66b8046SYuri Pankov MAN_IR, 461c66b8046SYuri Pankov MAN_RI, 462c66b8046SYuri Pankov MAN_RE, 463c66b8046SYuri Pankov MAN_RS, 464c66b8046SYuri Pankov MAN_DT, 465c66b8046SYuri Pankov MAN_UC, 466c66b8046SYuri Pankov MAN_PD, 467c66b8046SYuri Pankov MAN_AT, 468c66b8046SYuri Pankov MAN_in, 469*cec8643bSMichal Nowak MAN_SY, 470*cec8643bSMichal Nowak MAN_YS, 471c66b8046SYuri Pankov MAN_OP, 472c66b8046SYuri Pankov MAN_EX, 473c66b8046SYuri Pankov MAN_EE, 474c66b8046SYuri Pankov MAN_UR, 475c66b8046SYuri Pankov MAN_UE, 476c66b8046SYuri Pankov MAN_MT, 477c66b8046SYuri Pankov MAN_ME, 478c66b8046SYuri Pankov MAN_MAX 479c66b8046SYuri Pankov }; 480c66b8046SYuri 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 490*cec8643bSMichal Nowak enum mandoc_os { 491*cec8643bSMichal Nowak MANDOC_OS_OTHER = 0, 492*cec8643bSMichal Nowak MANDOC_OS_NETBSD, 493*cec8643bSMichal Nowak MANDOC_OS_OPENBSD 494*cec8643bSMichal Nowak }; 495*cec8643bSMichal Nowak 496371584c2SYuri Pankov struct roff_node { 497371584c2SYuri Pankov struct roff_node *parent; /* Parent AST node. */ 498371584c2SYuri Pankov struct roff_node *child; /* First child AST node. */ 499371584c2SYuri Pankov struct roff_node *last; /* Last child AST node. */ 500371584c2SYuri Pankov struct roff_node *next; /* Sibling AST node. */ 501371584c2SYuri Pankov struct roff_node *prev; /* Prior sibling AST node. */ 502371584c2SYuri Pankov struct roff_node *head; /* BLOCK */ 503371584c2SYuri Pankov struct roff_node *body; /* BLOCK/ENDBODY */ 504371584c2SYuri Pankov struct roff_node *tail; /* BLOCK */ 505371584c2SYuri Pankov struct mdoc_arg *args; /* BLOCK/ELEM */ 506371584c2SYuri Pankov union mdoc_data *norm; /* Normalized arguments. */ 507371584c2SYuri Pankov char *string; /* TEXT */ 508*cec8643bSMichal Nowak struct tbl_span *span; /* TBL */ 509c66b8046SYuri Pankov struct eqn_box *eqn; /* EQN */ 510371584c2SYuri Pankov int line; /* Input file line number. */ 511371584c2SYuri Pankov int pos; /* Input file column number. */ 512371584c2SYuri Pankov int flags; 513a40ea1a7SYuri Pankov #define NODE_VALID (1 << 0) /* Has been validated. */ 514a40ea1a7SYuri Pankov #define NODE_ENDED (1 << 1) /* Gone past body end mark. */ 515*cec8643bSMichal Nowak #define NODE_BROKEN (1 << 2) /* Must validate parent when ending. */ 516a40ea1a7SYuri Pankov #define NODE_LINE (1 << 3) /* First macro/text on line. */ 517*cec8643bSMichal Nowak #define NODE_DELIMO (1 << 4) 518*cec8643bSMichal Nowak #define NODE_DELIMC (1 << 5) 519*cec8643bSMichal Nowak #define NODE_EOS (1 << 6) /* At sentence boundary. */ 520*cec8643bSMichal Nowak #define NODE_SYNPRETTY (1 << 7) /* SYNOPSIS-style formatting. */ 521*cec8643bSMichal Nowak #define NODE_NOFILL (1 << 8) /* Fill mode switched off. */ 522*cec8643bSMichal Nowak #define NODE_NOSRC (1 << 9) /* Generated node, not in input file. */ 523*cec8643bSMichal Nowak #define NODE_NOPRT (1 << 10) /* Shall not print anything. */ 524371584c2SYuri Pankov int prev_font; /* Before entering this node. */ 525371584c2SYuri Pankov int aux; /* Decoded node data, type-dependent. */ 526c66b8046SYuri Pankov enum roff_tok tok; /* Request or macro ID. */ 527371584c2SYuri Pankov enum roff_type type; /* AST node type. */ 528371584c2SYuri Pankov enum roff_sec sec; /* Current named section. */ 529371584c2SYuri Pankov enum mdoc_endbody end; /* BODY */ 530371584c2SYuri Pankov }; 531371584c2SYuri Pankov 532371584c2SYuri Pankov struct roff_meta { 533*cec8643bSMichal Nowak struct roff_node *first; /* The first node parsed. */ 534371584c2SYuri Pankov char *msec; /* Manual section, usually a digit. */ 535371584c2SYuri Pankov char *vol; /* Manual volume title. */ 536371584c2SYuri Pankov char *os; /* Operating system. */ 537371584c2SYuri Pankov char *arch; /* Machine architecture. */ 538371584c2SYuri Pankov char *title; /* Manual title, usually CAPS. */ 539371584c2SYuri Pankov char *name; /* Leading manual name. */ 540371584c2SYuri Pankov char *date; /* Normalized date. */ 541*cec8643bSMichal Nowak char *sodest; /* .so target file name or NULL. */ 542371584c2SYuri Pankov int hasbody; /* Document is not empty. */ 543c66b8046SYuri Pankov int rcsids; /* Bits indexed by enum mandoc_os. */ 544c66b8046SYuri Pankov enum mandoc_os os_e; /* Operating system. */ 545371584c2SYuri Pankov enum roff_macroset macroset; /* Kind of high-level macros used. */ 546371584c2SYuri Pankov }; 547371584c2SYuri Pankov 548c66b8046SYuri Pankov extern const char *const *roff_name; 549c66b8046SYuri Pankov 550371584c2SYuri Pankov 551*cec8643bSMichal Nowak int arch_valid(const char *, enum mandoc_os); 552371584c2SYuri Pankov void deroff(char **, const struct roff_node *); 553