1*61d06d6bSBaptiste Daroussin /* $Id: mdoc.h,v 1.145 2017/04/24 23:06:18 schwarze Exp $ */ 2*61d06d6bSBaptiste Daroussin /* 3*61d06d6bSBaptiste Daroussin * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4*61d06d6bSBaptiste Daroussin * Copyright (c) 2014, 2015 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 enum mdocargt { 20*61d06d6bSBaptiste Daroussin MDOC_Split, /* -split */ 21*61d06d6bSBaptiste Daroussin MDOC_Nosplit, /* -nospli */ 22*61d06d6bSBaptiste Daroussin MDOC_Ragged, /* -ragged */ 23*61d06d6bSBaptiste Daroussin MDOC_Unfilled, /* -unfilled */ 24*61d06d6bSBaptiste Daroussin MDOC_Literal, /* -literal */ 25*61d06d6bSBaptiste Daroussin MDOC_File, /* -file */ 26*61d06d6bSBaptiste Daroussin MDOC_Offset, /* -offset */ 27*61d06d6bSBaptiste Daroussin MDOC_Bullet, /* -bullet */ 28*61d06d6bSBaptiste Daroussin MDOC_Dash, /* -dash */ 29*61d06d6bSBaptiste Daroussin MDOC_Hyphen, /* -hyphen */ 30*61d06d6bSBaptiste Daroussin MDOC_Item, /* -item */ 31*61d06d6bSBaptiste Daroussin MDOC_Enum, /* -enum */ 32*61d06d6bSBaptiste Daroussin MDOC_Tag, /* -tag */ 33*61d06d6bSBaptiste Daroussin MDOC_Diag, /* -diag */ 34*61d06d6bSBaptiste Daroussin MDOC_Hang, /* -hang */ 35*61d06d6bSBaptiste Daroussin MDOC_Ohang, /* -ohang */ 36*61d06d6bSBaptiste Daroussin MDOC_Inset, /* -inset */ 37*61d06d6bSBaptiste Daroussin MDOC_Column, /* -column */ 38*61d06d6bSBaptiste Daroussin MDOC_Width, /* -width */ 39*61d06d6bSBaptiste Daroussin MDOC_Compact, /* -compact */ 40*61d06d6bSBaptiste Daroussin MDOC_Std, /* -std */ 41*61d06d6bSBaptiste Daroussin MDOC_Filled, /* -filled */ 42*61d06d6bSBaptiste Daroussin MDOC_Words, /* -words */ 43*61d06d6bSBaptiste Daroussin MDOC_Emphasis, /* -emphasis */ 44*61d06d6bSBaptiste Daroussin MDOC_Symbolic, /* -symbolic */ 45*61d06d6bSBaptiste Daroussin MDOC_Nested, /* -nested */ 46*61d06d6bSBaptiste Daroussin MDOC_Centred, /* -centered */ 47*61d06d6bSBaptiste Daroussin MDOC_ARG_MAX 48*61d06d6bSBaptiste Daroussin }; 49*61d06d6bSBaptiste Daroussin 50*61d06d6bSBaptiste Daroussin /* 51*61d06d6bSBaptiste Daroussin * An argument to a macro (multiple values = `-column xxx yyy'). 52*61d06d6bSBaptiste Daroussin */ 53*61d06d6bSBaptiste Daroussin struct mdoc_argv { 54*61d06d6bSBaptiste Daroussin enum mdocargt arg; /* type of argument */ 55*61d06d6bSBaptiste Daroussin int line; 56*61d06d6bSBaptiste Daroussin int pos; 57*61d06d6bSBaptiste Daroussin size_t sz; /* elements in "value" */ 58*61d06d6bSBaptiste Daroussin char **value; /* argument strings */ 59*61d06d6bSBaptiste Daroussin }; 60*61d06d6bSBaptiste Daroussin 61*61d06d6bSBaptiste Daroussin /* 62*61d06d6bSBaptiste Daroussin * Reference-counted macro arguments. These are refcounted because 63*61d06d6bSBaptiste Daroussin * blocks have multiple instances of the same arguments spread across 64*61d06d6bSBaptiste Daroussin * the HEAD, BODY, TAIL, and BLOCK node types. 65*61d06d6bSBaptiste Daroussin */ 66*61d06d6bSBaptiste Daroussin struct mdoc_arg { 67*61d06d6bSBaptiste Daroussin size_t argc; 68*61d06d6bSBaptiste Daroussin struct mdoc_argv *argv; 69*61d06d6bSBaptiste Daroussin unsigned int refcnt; 70*61d06d6bSBaptiste Daroussin }; 71*61d06d6bSBaptiste Daroussin 72*61d06d6bSBaptiste Daroussin enum mdoc_list { 73*61d06d6bSBaptiste Daroussin LIST__NONE = 0, 74*61d06d6bSBaptiste Daroussin LIST_bullet, /* -bullet */ 75*61d06d6bSBaptiste Daroussin LIST_column, /* -column */ 76*61d06d6bSBaptiste Daroussin LIST_dash, /* -dash */ 77*61d06d6bSBaptiste Daroussin LIST_diag, /* -diag */ 78*61d06d6bSBaptiste Daroussin LIST_enum, /* -enum */ 79*61d06d6bSBaptiste Daroussin LIST_hang, /* -hang */ 80*61d06d6bSBaptiste Daroussin LIST_hyphen, /* -hyphen */ 81*61d06d6bSBaptiste Daroussin LIST_inset, /* -inset */ 82*61d06d6bSBaptiste Daroussin LIST_item, /* -item */ 83*61d06d6bSBaptiste Daroussin LIST_ohang, /* -ohang */ 84*61d06d6bSBaptiste Daroussin LIST_tag, /* -tag */ 85*61d06d6bSBaptiste Daroussin LIST_MAX 86*61d06d6bSBaptiste Daroussin }; 87*61d06d6bSBaptiste Daroussin 88*61d06d6bSBaptiste Daroussin enum mdoc_disp { 89*61d06d6bSBaptiste Daroussin DISP__NONE = 0, 90*61d06d6bSBaptiste Daroussin DISP_centered, /* -centered */ 91*61d06d6bSBaptiste Daroussin DISP_ragged, /* -ragged */ 92*61d06d6bSBaptiste Daroussin DISP_unfilled, /* -unfilled */ 93*61d06d6bSBaptiste Daroussin DISP_filled, /* -filled */ 94*61d06d6bSBaptiste Daroussin DISP_literal /* -literal */ 95*61d06d6bSBaptiste Daroussin }; 96*61d06d6bSBaptiste Daroussin 97*61d06d6bSBaptiste Daroussin enum mdoc_auth { 98*61d06d6bSBaptiste Daroussin AUTH__NONE = 0, 99*61d06d6bSBaptiste Daroussin AUTH_split, /* -split */ 100*61d06d6bSBaptiste Daroussin AUTH_nosplit /* -nosplit */ 101*61d06d6bSBaptiste Daroussin }; 102*61d06d6bSBaptiste Daroussin 103*61d06d6bSBaptiste Daroussin enum mdoc_font { 104*61d06d6bSBaptiste Daroussin FONT__NONE = 0, 105*61d06d6bSBaptiste Daroussin FONT_Em, /* Em, -emphasis */ 106*61d06d6bSBaptiste Daroussin FONT_Li, /* Li, -literal */ 107*61d06d6bSBaptiste Daroussin FONT_Sy /* Sy, -symbolic */ 108*61d06d6bSBaptiste Daroussin }; 109*61d06d6bSBaptiste Daroussin 110*61d06d6bSBaptiste Daroussin struct mdoc_bd { 111*61d06d6bSBaptiste Daroussin const char *offs; /* -offset */ 112*61d06d6bSBaptiste Daroussin enum mdoc_disp type; /* -ragged, etc. */ 113*61d06d6bSBaptiste Daroussin int comp; /* -compact */ 114*61d06d6bSBaptiste Daroussin }; 115*61d06d6bSBaptiste Daroussin 116*61d06d6bSBaptiste Daroussin struct mdoc_bl { 117*61d06d6bSBaptiste Daroussin const char *width; /* -width */ 118*61d06d6bSBaptiste Daroussin const char *offs; /* -offset */ 119*61d06d6bSBaptiste Daroussin enum mdoc_list type; /* -tag, -enum, etc. */ 120*61d06d6bSBaptiste Daroussin int comp; /* -compact */ 121*61d06d6bSBaptiste Daroussin size_t ncols; /* -column arg count */ 122*61d06d6bSBaptiste Daroussin const char **cols; /* -column val ptr */ 123*61d06d6bSBaptiste Daroussin int count; /* -enum counter */ 124*61d06d6bSBaptiste Daroussin }; 125*61d06d6bSBaptiste Daroussin 126*61d06d6bSBaptiste Daroussin struct mdoc_bf { 127*61d06d6bSBaptiste Daroussin enum mdoc_font font; /* font */ 128*61d06d6bSBaptiste Daroussin }; 129*61d06d6bSBaptiste Daroussin 130*61d06d6bSBaptiste Daroussin struct mdoc_an { 131*61d06d6bSBaptiste Daroussin enum mdoc_auth auth; /* -split, etc. */ 132*61d06d6bSBaptiste Daroussin }; 133*61d06d6bSBaptiste Daroussin 134*61d06d6bSBaptiste Daroussin struct mdoc_rs { 135*61d06d6bSBaptiste Daroussin int quote_T; /* whether to quote %T */ 136*61d06d6bSBaptiste Daroussin }; 137*61d06d6bSBaptiste Daroussin 138*61d06d6bSBaptiste Daroussin /* 139*61d06d6bSBaptiste Daroussin * Consists of normalised node arguments. These should be used instead 140*61d06d6bSBaptiste Daroussin * of iterating through the mdoc_arg pointers of a node: defaults are 141*61d06d6bSBaptiste Daroussin * provided, etc. 142*61d06d6bSBaptiste Daroussin */ 143*61d06d6bSBaptiste Daroussin union mdoc_data { 144*61d06d6bSBaptiste Daroussin struct mdoc_an An; 145*61d06d6bSBaptiste Daroussin struct mdoc_bd Bd; 146*61d06d6bSBaptiste Daroussin struct mdoc_bf Bf; 147*61d06d6bSBaptiste Daroussin struct mdoc_bl Bl; 148*61d06d6bSBaptiste Daroussin struct roff_node *Es; 149*61d06d6bSBaptiste Daroussin struct mdoc_rs Rs; 150*61d06d6bSBaptiste Daroussin }; 151*61d06d6bSBaptiste Daroussin 152*61d06d6bSBaptiste Daroussin /* Names of macro args. Index is enum mdocargt. */ 153*61d06d6bSBaptiste Daroussin extern const char *const *mdoc_argnames; 154*61d06d6bSBaptiste Daroussin 155*61d06d6bSBaptiste Daroussin void mdoc_validate(struct roff_man *); 156