1*0a6a1f1dSLionel Sambuc /* Id: mdoc.h,v 1.125 2013/12/24 19:11:45 schwarze Exp */ 2d65f6f70SBen Gras /* 392395e9cSLionel Sambuc * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4d65f6f70SBen Gras * 5d65f6f70SBen Gras * Permission to use, copy, modify, and distribute this software for any 6d65f6f70SBen Gras * purpose with or without fee is hereby granted, provided that the above 7d65f6f70SBen Gras * copyright notice and this permission notice appear in all copies. 8d65f6f70SBen Gras * 9d65f6f70SBen Gras * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10d65f6f70SBen Gras * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11d65f6f70SBen Gras * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12d65f6f70SBen Gras * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13d65f6f70SBen Gras * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14d65f6f70SBen Gras * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15d65f6f70SBen Gras * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16d65f6f70SBen Gras */ 17d65f6f70SBen Gras #ifndef MDOC_H 18d65f6f70SBen Gras #define MDOC_H 19d65f6f70SBen Gras 20d65f6f70SBen Gras enum mdoct { 21d65f6f70SBen Gras MDOC_Ap = 0, 22d65f6f70SBen Gras MDOC_Dd, 23d65f6f70SBen Gras MDOC_Dt, 24d65f6f70SBen Gras MDOC_Os, 25d65f6f70SBen Gras MDOC_Sh, 26d65f6f70SBen Gras MDOC_Ss, 27d65f6f70SBen Gras MDOC_Pp, 28d65f6f70SBen Gras MDOC_D1, 29d65f6f70SBen Gras MDOC_Dl, 30d65f6f70SBen Gras MDOC_Bd, 31d65f6f70SBen Gras MDOC_Ed, 32d65f6f70SBen Gras MDOC_Bl, 33d65f6f70SBen Gras MDOC_El, 34d65f6f70SBen Gras MDOC_It, 35d65f6f70SBen Gras MDOC_Ad, 36d65f6f70SBen Gras MDOC_An, 37d65f6f70SBen Gras MDOC_Ar, 38d65f6f70SBen Gras MDOC_Cd, 39d65f6f70SBen Gras MDOC_Cm, 40d65f6f70SBen Gras MDOC_Dv, 41d65f6f70SBen Gras MDOC_Er, 42d65f6f70SBen Gras MDOC_Ev, 43d65f6f70SBen Gras MDOC_Ex, 44d65f6f70SBen Gras MDOC_Fa, 45d65f6f70SBen Gras MDOC_Fd, 46d65f6f70SBen Gras MDOC_Fl, 47d65f6f70SBen Gras MDOC_Fn, 48d65f6f70SBen Gras MDOC_Ft, 49d65f6f70SBen Gras MDOC_Ic, 50d65f6f70SBen Gras MDOC_In, 51d65f6f70SBen Gras MDOC_Li, 52d65f6f70SBen Gras MDOC_Nd, 53d65f6f70SBen Gras MDOC_Nm, 54d65f6f70SBen Gras MDOC_Op, 55d65f6f70SBen Gras MDOC_Ot, 56d65f6f70SBen Gras MDOC_Pa, 57d65f6f70SBen Gras MDOC_Rv, 58d65f6f70SBen Gras MDOC_St, 59d65f6f70SBen Gras MDOC_Va, 60d65f6f70SBen Gras MDOC_Vt, 61d65f6f70SBen Gras MDOC_Xr, 62d65f6f70SBen Gras MDOC__A, 63d65f6f70SBen Gras MDOC__B, 64d65f6f70SBen Gras MDOC__D, 65d65f6f70SBen Gras MDOC__I, 66d65f6f70SBen Gras MDOC__J, 67d65f6f70SBen Gras MDOC__N, 68d65f6f70SBen Gras MDOC__O, 69d65f6f70SBen Gras MDOC__P, 70d65f6f70SBen Gras MDOC__R, 71d65f6f70SBen Gras MDOC__T, 72d65f6f70SBen Gras MDOC__V, 73d65f6f70SBen Gras MDOC_Ac, 74d65f6f70SBen Gras MDOC_Ao, 75d65f6f70SBen Gras MDOC_Aq, 76d65f6f70SBen Gras MDOC_At, 77d65f6f70SBen Gras MDOC_Bc, 78d65f6f70SBen Gras MDOC_Bf, 79d65f6f70SBen Gras MDOC_Bo, 80d65f6f70SBen Gras MDOC_Bq, 81d65f6f70SBen Gras MDOC_Bsx, 82d65f6f70SBen Gras MDOC_Bx, 83d65f6f70SBen Gras MDOC_Db, 84d65f6f70SBen Gras MDOC_Dc, 85d65f6f70SBen Gras MDOC_Do, 86d65f6f70SBen Gras MDOC_Dq, 87d65f6f70SBen Gras MDOC_Ec, 88d65f6f70SBen Gras MDOC_Ef, 89d65f6f70SBen Gras MDOC_Em, 90d65f6f70SBen Gras MDOC_Eo, 91d65f6f70SBen Gras MDOC_Fx, 92d65f6f70SBen Gras MDOC_Ms, 93d65f6f70SBen Gras MDOC_No, 94d65f6f70SBen Gras MDOC_Ns, 95d65f6f70SBen Gras MDOC_Nx, 96d65f6f70SBen Gras MDOC_Ox, 97d65f6f70SBen Gras MDOC_Pc, 98d65f6f70SBen Gras MDOC_Pf, 99d65f6f70SBen Gras MDOC_Po, 100d65f6f70SBen Gras MDOC_Pq, 101d65f6f70SBen Gras MDOC_Qc, 102d65f6f70SBen Gras MDOC_Ql, 103d65f6f70SBen Gras MDOC_Qo, 104d65f6f70SBen Gras MDOC_Qq, 105d65f6f70SBen Gras MDOC_Re, 106d65f6f70SBen Gras MDOC_Rs, 107d65f6f70SBen Gras MDOC_Sc, 108d65f6f70SBen Gras MDOC_So, 109d65f6f70SBen Gras MDOC_Sq, 110d65f6f70SBen Gras MDOC_Sm, 111d65f6f70SBen Gras MDOC_Sx, 112d65f6f70SBen Gras MDOC_Sy, 113d65f6f70SBen Gras MDOC_Tn, 114d65f6f70SBen Gras MDOC_Ux, 115d65f6f70SBen Gras MDOC_Xc, 116d65f6f70SBen Gras MDOC_Xo, 117d65f6f70SBen Gras MDOC_Fo, 118d65f6f70SBen Gras MDOC_Fc, 119d65f6f70SBen Gras MDOC_Oo, 120d65f6f70SBen Gras MDOC_Oc, 121d65f6f70SBen Gras MDOC_Bk, 122d65f6f70SBen Gras MDOC_Ek, 123d65f6f70SBen Gras MDOC_Bt, 124d65f6f70SBen Gras MDOC_Hf, 125d65f6f70SBen Gras MDOC_Fr, 126d65f6f70SBen Gras MDOC_Ud, 127d65f6f70SBen Gras MDOC_Lb, 128d65f6f70SBen Gras MDOC_Lp, 129d65f6f70SBen Gras MDOC_Lk, 130d65f6f70SBen Gras MDOC_Mt, 131d65f6f70SBen Gras MDOC_Brq, 132d65f6f70SBen Gras MDOC_Bro, 133d65f6f70SBen Gras MDOC_Brc, 134d65f6f70SBen Gras MDOC__C, 135d65f6f70SBen Gras MDOC_Es, 136d65f6f70SBen Gras MDOC_En, 137d65f6f70SBen Gras MDOC_Dx, 138d65f6f70SBen Gras MDOC__Q, 139d65f6f70SBen Gras MDOC_br, 140d65f6f70SBen Gras MDOC_sp, 141d65f6f70SBen Gras MDOC__U, 142d65f6f70SBen Gras MDOC_Ta, 143d65f6f70SBen Gras MDOC_MAX 144d65f6f70SBen Gras }; 145d65f6f70SBen Gras 146d65f6f70SBen Gras enum mdocargt { 14792395e9cSLionel Sambuc MDOC_Split, /* -split */ 14892395e9cSLionel Sambuc MDOC_Nosplit, /* -nospli */ 14992395e9cSLionel Sambuc MDOC_Ragged, /* -ragged */ 15092395e9cSLionel Sambuc MDOC_Unfilled, /* -unfilled */ 15192395e9cSLionel Sambuc MDOC_Literal, /* -literal */ 15292395e9cSLionel Sambuc MDOC_File, /* -file */ 15392395e9cSLionel Sambuc MDOC_Offset, /* -offset */ 15492395e9cSLionel Sambuc MDOC_Bullet, /* -bullet */ 15592395e9cSLionel Sambuc MDOC_Dash, /* -dash */ 15692395e9cSLionel Sambuc MDOC_Hyphen, /* -hyphen */ 15792395e9cSLionel Sambuc MDOC_Item, /* -item */ 15892395e9cSLionel Sambuc MDOC_Enum, /* -enum */ 15992395e9cSLionel Sambuc MDOC_Tag, /* -tag */ 16092395e9cSLionel Sambuc MDOC_Diag, /* -diag */ 16192395e9cSLionel Sambuc MDOC_Hang, /* -hang */ 16292395e9cSLionel Sambuc MDOC_Ohang, /* -ohang */ 16392395e9cSLionel Sambuc MDOC_Inset, /* -inset */ 16492395e9cSLionel Sambuc MDOC_Column, /* -column */ 16592395e9cSLionel Sambuc MDOC_Width, /* -width */ 16692395e9cSLionel Sambuc MDOC_Compact, /* -compact */ 16792395e9cSLionel Sambuc MDOC_Std, /* -std */ 16892395e9cSLionel Sambuc MDOC_Filled, /* -filled */ 16992395e9cSLionel Sambuc MDOC_Words, /* -words */ 17092395e9cSLionel Sambuc MDOC_Emphasis, /* -emphasis */ 17192395e9cSLionel Sambuc MDOC_Symbolic, /* -symbolic */ 17292395e9cSLionel Sambuc MDOC_Nested, /* -nested */ 17392395e9cSLionel Sambuc MDOC_Centred, /* -centered */ 174d65f6f70SBen Gras MDOC_ARG_MAX 175d65f6f70SBen Gras }; 176d65f6f70SBen Gras 177d65f6f70SBen Gras enum mdoc_type { 178d65f6f70SBen Gras MDOC_TEXT, 179d65f6f70SBen Gras MDOC_ELEM, 180d65f6f70SBen Gras MDOC_HEAD, 181d65f6f70SBen Gras MDOC_TAIL, 182d65f6f70SBen Gras MDOC_BODY, 183d65f6f70SBen Gras MDOC_BLOCK, 184d65f6f70SBen Gras MDOC_TBL, 18592395e9cSLionel Sambuc MDOC_EQN, 186d65f6f70SBen Gras MDOC_ROOT 187d65f6f70SBen Gras }; 188d65f6f70SBen Gras 189d65f6f70SBen Gras /* 190d65f6f70SBen Gras * Section (named/unnamed) of `Sh'. Note that these appear in the 19192395e9cSLionel Sambuc * conventional order imposed by mdoc.7. In the case of SEC_NONE, no 19292395e9cSLionel Sambuc * section has been invoked (this shouldn't happen). SEC_CUSTOM refers 19392395e9cSLionel Sambuc * to other sections. 194d65f6f70SBen Gras */ 195d65f6f70SBen Gras enum mdoc_sec { 19692395e9cSLionel Sambuc SEC_NONE = 0, 19792395e9cSLionel Sambuc SEC_NAME, /* NAME */ 19892395e9cSLionel Sambuc SEC_LIBRARY, /* LIBRARY */ 19992395e9cSLionel Sambuc SEC_SYNOPSIS, /* SYNOPSIS */ 20092395e9cSLionel Sambuc SEC_DESCRIPTION, /* DESCRIPTION */ 20192395e9cSLionel Sambuc SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */ 20292395e9cSLionel Sambuc SEC_RETURN_VALUES, /* RETURN VALUES */ 20392395e9cSLionel Sambuc SEC_ENVIRONMENT, /* ENVIRONMENT */ 20492395e9cSLionel Sambuc SEC_FILES, /* FILES */ 20592395e9cSLionel Sambuc SEC_EXIT_STATUS, /* EXIT STATUS */ 20692395e9cSLionel Sambuc SEC_EXAMPLES, /* EXAMPLES */ 20792395e9cSLionel Sambuc SEC_DIAGNOSTICS, /* DIAGNOSTICS */ 20892395e9cSLionel Sambuc SEC_COMPATIBILITY, /* COMPATIBILITY */ 20992395e9cSLionel Sambuc SEC_ERRORS, /* ERRORS */ 21092395e9cSLionel Sambuc SEC_SEE_ALSO, /* SEE ALSO */ 21192395e9cSLionel Sambuc SEC_STANDARDS, /* STANDARDS */ 21292395e9cSLionel Sambuc SEC_HISTORY, /* HISTORY */ 21392395e9cSLionel Sambuc SEC_AUTHORS, /* AUTHORS */ 21492395e9cSLionel Sambuc SEC_CAVEATS, /* CAVEATS */ 21592395e9cSLionel Sambuc SEC_BUGS, /* BUGS */ 21692395e9cSLionel Sambuc SEC_SECURITY, /* SECURITY */ 21792395e9cSLionel Sambuc SEC_CUSTOM, 218d65f6f70SBen Gras SEC__MAX 219d65f6f70SBen Gras }; 220d65f6f70SBen Gras 221d65f6f70SBen Gras struct mdoc_meta { 222d65f6f70SBen Gras char *msec; /* `Dt' section (1, 3p, etc.) */ 223d65f6f70SBen Gras char *vol; /* `Dt' volume (implied) */ 224d65f6f70SBen Gras char *arch; /* `Dt' arch (i386, etc.) */ 22592395e9cSLionel Sambuc char *date; /* `Dd' normalised date */ 226d65f6f70SBen Gras char *title; /* `Dt' title (FOO, etc.) */ 227d65f6f70SBen Gras char *os; /* `Os' system (OpenBSD, etc.) */ 228d65f6f70SBen Gras char *name; /* leading `Nm' name */ 229d65f6f70SBen Gras }; 230d65f6f70SBen Gras 231d65f6f70SBen Gras /* 232d65f6f70SBen Gras * An argument to a macro (multiple values = `-column xxx yyy'). 233d65f6f70SBen Gras */ 234d65f6f70SBen Gras struct mdoc_argv { 235d65f6f70SBen Gras enum mdocargt arg; /* type of argument */ 236d65f6f70SBen Gras int line; 237d65f6f70SBen Gras int pos; 238d65f6f70SBen Gras size_t sz; /* elements in "value" */ 239d65f6f70SBen Gras char **value; /* argument strings */ 240d65f6f70SBen Gras }; 241d65f6f70SBen Gras 242d65f6f70SBen Gras /* 243d65f6f70SBen Gras * Reference-counted macro arguments. These are refcounted because 244d65f6f70SBen Gras * blocks have multiple instances of the same arguments spread across 245d65f6f70SBen Gras * the HEAD, BODY, TAIL, and BLOCK node types. 246d65f6f70SBen Gras */ 247d65f6f70SBen Gras struct mdoc_arg { 248d65f6f70SBen Gras size_t argc; 249d65f6f70SBen Gras struct mdoc_argv *argv; 250d65f6f70SBen Gras unsigned int refcnt; 251d65f6f70SBen Gras }; 252d65f6f70SBen Gras 253d65f6f70SBen Gras /* 254d65f6f70SBen Gras * Indicates that a BODY's formatting has ended, but the scope is still 255d65f6f70SBen Gras * open. Used for syntax-broken blocks. 256d65f6f70SBen Gras */ 257d65f6f70SBen Gras enum mdoc_endbody { 258d65f6f70SBen Gras ENDBODY_NOT = 0, 259d65f6f70SBen Gras ENDBODY_SPACE, /* is broken: append a space */ 260d65f6f70SBen Gras ENDBODY_NOSPACE /* is broken: don't append a space */ 261d65f6f70SBen Gras }; 262d65f6f70SBen Gras 263d65f6f70SBen Gras enum mdoc_list { 264d65f6f70SBen Gras LIST__NONE = 0, 26592395e9cSLionel Sambuc LIST_bullet, /* -bullet */ 26692395e9cSLionel Sambuc LIST_column, /* -column */ 26792395e9cSLionel Sambuc LIST_dash, /* -dash */ 26892395e9cSLionel Sambuc LIST_diag, /* -diag */ 26992395e9cSLionel Sambuc LIST_enum, /* -enum */ 27092395e9cSLionel Sambuc LIST_hang, /* -hang */ 27192395e9cSLionel Sambuc LIST_hyphen, /* -hyphen */ 27292395e9cSLionel Sambuc LIST_inset, /* -inset */ 27392395e9cSLionel Sambuc LIST_item, /* -item */ 27492395e9cSLionel Sambuc LIST_ohang, /* -ohang */ 27592395e9cSLionel Sambuc LIST_tag, /* -tag */ 276d65f6f70SBen Gras LIST_MAX 277d65f6f70SBen Gras }; 278d65f6f70SBen Gras 279d65f6f70SBen Gras enum mdoc_disp { 280d65f6f70SBen Gras DISP__NONE = 0, 28192395e9cSLionel Sambuc DISP_centred, /* -centered */ 28292395e9cSLionel Sambuc DISP_ragged, /* -ragged */ 28392395e9cSLionel Sambuc DISP_unfilled, /* -unfilled */ 28492395e9cSLionel Sambuc DISP_filled, /* -filled */ 28592395e9cSLionel Sambuc DISP_literal /* -literal */ 286d65f6f70SBen Gras }; 287d65f6f70SBen Gras 288d65f6f70SBen Gras enum mdoc_auth { 289d65f6f70SBen Gras AUTH__NONE = 0, 29092395e9cSLionel Sambuc AUTH_split, /* -split */ 29192395e9cSLionel Sambuc AUTH_nosplit /* -nosplit */ 292d65f6f70SBen Gras }; 293d65f6f70SBen Gras 294d65f6f70SBen Gras enum mdoc_font { 295d65f6f70SBen Gras FONT__NONE = 0, 29692395e9cSLionel Sambuc FONT_Em, /* Em, -emphasis */ 29792395e9cSLionel Sambuc FONT_Li, /* Li, -literal */ 29892395e9cSLionel Sambuc FONT_Sy /* Sy, -symbolic */ 299d65f6f70SBen Gras }; 300d65f6f70SBen Gras 301d65f6f70SBen Gras struct mdoc_bd { 302d65f6f70SBen Gras const char *offs; /* -offset */ 303d65f6f70SBen Gras enum mdoc_disp type; /* -ragged, etc. */ 304d65f6f70SBen Gras int comp; /* -compact */ 305d65f6f70SBen Gras }; 306d65f6f70SBen Gras 307d65f6f70SBen Gras struct mdoc_bl { 308d65f6f70SBen Gras const char *width; /* -width */ 309d65f6f70SBen Gras const char *offs; /* -offset */ 310d65f6f70SBen Gras enum mdoc_list type; /* -tag, -enum, etc. */ 311d65f6f70SBen Gras int comp; /* -compact */ 312d65f6f70SBen Gras size_t ncols; /* -column arg count */ 313d65f6f70SBen Gras const char **cols; /* -column val ptr */ 314*0a6a1f1dSLionel Sambuc int count; /* -enum counter */ 315d65f6f70SBen Gras }; 316d65f6f70SBen Gras 317d65f6f70SBen Gras struct mdoc_bf { 318d65f6f70SBen Gras enum mdoc_font font; /* font */ 319d65f6f70SBen Gras }; 320d65f6f70SBen Gras 321d65f6f70SBen Gras struct mdoc_an { 322d65f6f70SBen Gras enum mdoc_auth auth; /* -split, etc. */ 323d65f6f70SBen Gras }; 324d65f6f70SBen Gras 325d65f6f70SBen Gras struct mdoc_rs { 32692395e9cSLionel Sambuc int quote_T; /* whether to quote %T */ 327d65f6f70SBen Gras }; 328d65f6f70SBen Gras 329d65f6f70SBen Gras /* 330d65f6f70SBen Gras * Consists of normalised node arguments. These should be used instead 331d65f6f70SBen Gras * of iterating through the mdoc_arg pointers of a node: defaults are 332d65f6f70SBen Gras * provided, etc. 333d65f6f70SBen Gras */ 334d65f6f70SBen Gras union mdoc_data { 335d65f6f70SBen Gras struct mdoc_an An; 336d65f6f70SBen Gras struct mdoc_bd Bd; 337d65f6f70SBen Gras struct mdoc_bf Bf; 338d65f6f70SBen Gras struct mdoc_bl Bl; 339d65f6f70SBen Gras struct mdoc_rs Rs; 340d65f6f70SBen Gras }; 341d65f6f70SBen Gras 342d65f6f70SBen Gras /* 343d65f6f70SBen Gras * Single node in tree-linked AST. 344d65f6f70SBen Gras */ 345d65f6f70SBen Gras struct mdoc_node { 346d65f6f70SBen Gras struct mdoc_node *parent; /* parent AST node */ 347d65f6f70SBen Gras struct mdoc_node *child; /* first child AST node */ 348d65f6f70SBen Gras struct mdoc_node *last; /* last child AST node */ 349d65f6f70SBen Gras struct mdoc_node *next; /* sibling AST node */ 350d65f6f70SBen Gras struct mdoc_node *prev; /* prior sibling AST node */ 351d65f6f70SBen Gras int nchild; /* number children */ 352d65f6f70SBen Gras int line; /* parse line */ 353d65f6f70SBen Gras int pos; /* parse column */ 354*0a6a1f1dSLionel Sambuc int lastline; /* the node ends on this line */ 355d65f6f70SBen Gras enum mdoct tok; /* tok or MDOC__MAX if none */ 356d65f6f70SBen Gras int flags; 357d65f6f70SBen Gras #define MDOC_VALID (1 << 0) /* has been validated */ 358d65f6f70SBen Gras #define MDOC_EOS (1 << 2) /* at sentence boundary */ 359d65f6f70SBen Gras #define MDOC_LINE (1 << 3) /* first macro/text on line */ 360d65f6f70SBen Gras #define MDOC_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting */ 361d65f6f70SBen Gras #define MDOC_ENDED (1 << 5) /* rendering has been ended */ 36292395e9cSLionel Sambuc #define MDOC_DELIMO (1 << 6) 36392395e9cSLionel Sambuc #define MDOC_DELIMC (1 << 7) 364d65f6f70SBen Gras enum mdoc_type type; /* AST node type */ 365d65f6f70SBen Gras enum mdoc_sec sec; /* current named section */ 366d65f6f70SBen Gras union mdoc_data *norm; /* normalised args */ 367*0a6a1f1dSLionel Sambuc const void *prev_font; /* before entering this node */ 368d65f6f70SBen Gras /* FIXME: these can be union'd to shave a few bytes. */ 369d65f6f70SBen Gras struct mdoc_arg *args; /* BLOCK/ELEM */ 370d65f6f70SBen Gras struct mdoc_node *pending; /* BLOCK */ 371d65f6f70SBen Gras struct mdoc_node *head; /* BLOCK */ 372d65f6f70SBen Gras struct mdoc_node *body; /* BLOCK */ 373d65f6f70SBen Gras struct mdoc_node *tail; /* BLOCK */ 374d65f6f70SBen Gras char *string; /* TEXT */ 375d65f6f70SBen Gras const struct tbl_span *span; /* TBL */ 37692395e9cSLionel Sambuc const struct eqn *eqn; /* EQN */ 377d65f6f70SBen Gras enum mdoc_endbody end; /* BODY */ 378d65f6f70SBen Gras }; 379d65f6f70SBen Gras 38092395e9cSLionel Sambuc /* Names of macros. Index is enum mdoct. */ 381d65f6f70SBen Gras extern const char *const *mdoc_macronames; 382d65f6f70SBen Gras 38392395e9cSLionel Sambuc /* Names of macro args. Index is enum mdocargt. */ 384d65f6f70SBen Gras extern const char *const *mdoc_argnames; 385d65f6f70SBen Gras 386d65f6f70SBen Gras __BEGIN_DECLS 387d65f6f70SBen Gras 388d65f6f70SBen Gras struct mdoc; 389d65f6f70SBen Gras 390d65f6f70SBen Gras const struct mdoc_node *mdoc_node(const struct mdoc *); 391d65f6f70SBen Gras const struct mdoc_meta *mdoc_meta(const struct mdoc *); 392d65f6f70SBen Gras 393d65f6f70SBen Gras __END_DECLS 394d65f6f70SBen Gras 395d65f6f70SBen Gras #endif /*!MDOC_H*/ 396