Annotation of mandoc/mdoc.h, Revision 1.138
1.138 ! schwarze 1: /* $Id: mdoc.h,v 1.137 2015/04/02 21:36:50 schwarze Exp $ */
1.1 kristaps 2: /*
1.118 schwarze 3: * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
1.136 schwarze 4: * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
1.1 kristaps 5: *
6: * Permission to use, copy, modify, and distribute this software for any
1.56 kristaps 7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
1.1 kristaps 9: *
1.137 schwarze 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
1.56 kristaps 11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1.137 schwarze 12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
1.56 kristaps 13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.1 kristaps 17: */
18:
1.138 ! schwarze 19: #define MDOC_Ap 0
! 20: #define MDOC_Dd 1
! 21: #define MDOC_Dt 2
! 22: #define MDOC_Os 3
! 23: #define MDOC_Sh 4
! 24: #define MDOC_Ss 5
! 25: #define MDOC_Pp 6
! 26: #define MDOC_D1 7
! 27: #define MDOC_Dl 8
! 28: #define MDOC_Bd 9
! 29: #define MDOC_Ed 10
! 30: #define MDOC_Bl 11
! 31: #define MDOC_El 12
! 32: #define MDOC_It 13
! 33: #define MDOC_Ad 14
! 34: #define MDOC_An 15
! 35: #define MDOC_Ar 16
! 36: #define MDOC_Cd 17
! 37: #define MDOC_Cm 18
! 38: #define MDOC_Dv 19
! 39: #define MDOC_Er 20
! 40: #define MDOC_Ev 21
! 41: #define MDOC_Ex 22
! 42: #define MDOC_Fa 23
! 43: #define MDOC_Fd 24
! 44: #define MDOC_Fl 25
! 45: #define MDOC_Fn 26
! 46: #define MDOC_Ft 27
! 47: #define MDOC_Ic 28
! 48: #define MDOC_In 29
! 49: #define MDOC_Li 30
! 50: #define MDOC_Nd 31
! 51: #define MDOC_Nm 32
! 52: #define MDOC_Op 33
! 53: #define MDOC_Ot 34
! 54: #define MDOC_Pa 35
! 55: #define MDOC_Rv 36
! 56: #define MDOC_St 37
! 57: #define MDOC_Va 38
! 58: #define MDOC_Vt 39
! 59: #define MDOC_Xr 40
! 60: #define MDOC__A 41
! 61: #define MDOC__B 42
! 62: #define MDOC__D 43
! 63: #define MDOC__I 44
! 64: #define MDOC__J 45
! 65: #define MDOC__N 46
! 66: #define MDOC__O 47
! 67: #define MDOC__P 48
! 68: #define MDOC__R 49
! 69: #define MDOC__T 50
! 70: #define MDOC__V 51
! 71: #define MDOC_Ac 52
! 72: #define MDOC_Ao 53
! 73: #define MDOC_Aq 54
! 74: #define MDOC_At 55
! 75: #define MDOC_Bc 56
! 76: #define MDOC_Bf 57
! 77: #define MDOC_Bo 58
! 78: #define MDOC_Bq 59
! 79: #define MDOC_Bsx 60
! 80: #define MDOC_Bx 61
! 81: #define MDOC_Db 62
! 82: #define MDOC_Dc 63
! 83: #define MDOC_Do 64
! 84: #define MDOC_Dq 65
! 85: #define MDOC_Ec 66
! 86: #define MDOC_Ef 67
! 87: #define MDOC_Em 68
! 88: #define MDOC_Eo 69
! 89: #define MDOC_Fx 70
! 90: #define MDOC_Ms 71
! 91: #define MDOC_No 72
! 92: #define MDOC_Ns 73
! 93: #define MDOC_Nx 74
! 94: #define MDOC_Ox 75
! 95: #define MDOC_Pc 76
! 96: #define MDOC_Pf 77
! 97: #define MDOC_Po 78
! 98: #define MDOC_Pq 79
! 99: #define MDOC_Qc 80
! 100: #define MDOC_Ql 81
! 101: #define MDOC_Qo 82
! 102: #define MDOC_Qq 83
! 103: #define MDOC_Re 84
! 104: #define MDOC_Rs 85
! 105: #define MDOC_Sc 86
! 106: #define MDOC_So 87
! 107: #define MDOC_Sq 88
! 108: #define MDOC_Sm 89
! 109: #define MDOC_Sx 90
! 110: #define MDOC_Sy 91
! 111: #define MDOC_Tn 92
! 112: #define MDOC_Ux 93
! 113: #define MDOC_Xc 94
! 114: #define MDOC_Xo 95
! 115: #define MDOC_Fo 96
! 116: #define MDOC_Fc 97
! 117: #define MDOC_Oo 98
! 118: #define MDOC_Oc 99
! 119: #define MDOC_Bk 100
! 120: #define MDOC_Ek 101
! 121: #define MDOC_Bt 102
! 122: #define MDOC_Hf 103
! 123: #define MDOC_Fr 104
! 124: #define MDOC_Ud 105
! 125: #define MDOC_Lb 106
! 126: #define MDOC_Lp 107
! 127: #define MDOC_Lk 108
! 128: #define MDOC_Mt 109
! 129: #define MDOC_Brq 110
! 130: #define MDOC_Bro 111
! 131: #define MDOC_Brc 112
! 132: #define MDOC__C 113
! 133: #define MDOC_Es 114
! 134: #define MDOC_En 115
! 135: #define MDOC_Dx 116
! 136: #define MDOC__Q 117
! 137: #define MDOC_br 118
! 138: #define MDOC_sp 119
! 139: #define MDOC__U 120
! 140: #define MDOC_Ta 121
! 141: #define MDOC_ll 122
! 142: #define MDOC_MAX 123
1.105 kristaps 143:
144: enum mdocargt {
1.121 kristaps 145: MDOC_Split, /* -split */
146: MDOC_Nosplit, /* -nospli */
147: MDOC_Ragged, /* -ragged */
148: MDOC_Unfilled, /* -unfilled */
149: MDOC_Literal, /* -literal */
150: MDOC_File, /* -file */
151: MDOC_Offset, /* -offset */
152: MDOC_Bullet, /* -bullet */
153: MDOC_Dash, /* -dash */
154: MDOC_Hyphen, /* -hyphen */
155: MDOC_Item, /* -item */
156: MDOC_Enum, /* -enum */
157: MDOC_Tag, /* -tag */
158: MDOC_Diag, /* -diag */
159: MDOC_Hang, /* -hang */
160: MDOC_Ohang, /* -ohang */
161: MDOC_Inset, /* -inset */
162: MDOC_Column, /* -column */
163: MDOC_Width, /* -width */
164: MDOC_Compact, /* -compact */
165: MDOC_Std, /* -std */
166: MDOC_Filled, /* -filled */
167: MDOC_Words, /* -words */
168: MDOC_Emphasis, /* -emphasis */
169: MDOC_Symbolic, /* -symbolic */
170: MDOC_Nested, /* -nested */
171: MDOC_Centred, /* -centered */
1.105 kristaps 172: MDOC_ARG_MAX
173: };
174:
175: struct mdoc_meta {
176: char *msec; /* `Dt' section (1, 3p, etc.) */
177: char *vol; /* `Dt' volume (implied) */
178: char *arch; /* `Dt' arch (i386, etc.) */
1.118 schwarze 179: char *date; /* `Dd' normalised date */
1.105 kristaps 180: char *title; /* `Dt' title (FOO, etc.) */
181: char *os; /* `Os' system (OpenBSD, etc.) */
182: char *name; /* leading `Nm' name */
183: };
184:
1.129 schwarze 185: /*
186: * An argument to a macro (multiple values = `-column xxx yyy').
1.105 kristaps 187: */
188: struct mdoc_argv {
1.129 schwarze 189: enum mdocargt arg; /* type of argument */
1.105 kristaps 190: int line;
191: int pos;
192: size_t sz; /* elements in "value" */
193: char **value; /* argument strings */
194: };
195:
1.33 kristaps 196: /*
1.105 kristaps 197: * Reference-counted macro arguments. These are refcounted because
198: * blocks have multiple instances of the same arguments spread across
199: * the HEAD, BODY, TAIL, and BLOCK node types.
1.33 kristaps 200: */
1.129 schwarze 201: struct mdoc_arg {
1.105 kristaps 202: size_t argc;
203: struct mdoc_argv *argv;
204: unsigned int refcnt;
205: };
1.1 kristaps 206:
1.105 kristaps 207: enum mdoc_list {
208: LIST__NONE = 0,
1.121 kristaps 209: LIST_bullet, /* -bullet */
210: LIST_column, /* -column */
211: LIST_dash, /* -dash */
212: LIST_diag, /* -diag */
213: LIST_enum, /* -enum */
214: LIST_hang, /* -hang */
215: LIST_hyphen, /* -hyphen */
216: LIST_inset, /* -inset */
217: LIST_item, /* -item */
218: LIST_ohang, /* -ohang */
219: LIST_tag, /* -tag */
1.106 kristaps 220: LIST_MAX
1.105 kristaps 221: };
222:
223: enum mdoc_disp {
224: DISP__NONE = 0,
1.131 schwarze 225: DISP_centered, /* -centered */
1.121 kristaps 226: DISP_ragged, /* -ragged */
227: DISP_unfilled, /* -unfilled */
228: DISP_filled, /* -filled */
229: DISP_literal /* -literal */
1.105 kristaps 230: };
231:
232: enum mdoc_auth {
233: AUTH__NONE = 0,
1.121 kristaps 234: AUTH_split, /* -split */
235: AUTH_nosplit /* -nosplit */
1.105 kristaps 236: };
1.60 kristaps 237:
1.105 kristaps 238: enum mdoc_font {
239: FONT__NONE = 0,
1.121 kristaps 240: FONT_Em, /* Em, -emphasis */
241: FONT_Li, /* Li, -literal */
242: FONT_Sy /* Sy, -symbolic */
1.105 kristaps 243: };
244:
245: struct mdoc_bd {
246: const char *offs; /* -offset */
247: enum mdoc_disp type; /* -ragged, etc. */
248: int comp; /* -compact */
249: };
250:
251: struct mdoc_bl {
252: const char *width; /* -width */
253: const char *offs; /* -offset */
254: enum mdoc_list type; /* -tag, -enum, etc. */
255: int comp; /* -compact */
256: size_t ncols; /* -column arg count */
257: const char **cols; /* -column val ptr */
1.123 schwarze 258: int count; /* -enum counter */
1.105 kristaps 259: };
260:
261: struct mdoc_bf {
262: enum mdoc_font font; /* font */
263: };
264:
265: struct mdoc_an {
266: enum mdoc_auth auth; /* -split, etc. */
267: };
268:
1.111 kristaps 269: struct mdoc_rs {
1.115 kristaps 270: int quote_T; /* whether to quote %T */
1.111 kristaps 271: };
272:
1.105 kristaps 273: /*
274: * Consists of normalised node arguments. These should be used instead
275: * of iterating through the mdoc_arg pointers of a node: defaults are
276: * provided, etc.
277: */
1.109 kristaps 278: union mdoc_data {
1.129 schwarze 279: struct mdoc_an An;
1.109 kristaps 280: struct mdoc_bd Bd;
281: struct mdoc_bf Bf;
282: struct mdoc_bl Bl;
1.138 ! schwarze 283: struct roff_node *Es;
1.111 kristaps 284: struct mdoc_rs Rs;
1.109 kristaps 285: };
286:
1.138 ! schwarze 287: /* Names of macros. */
1.1 kristaps 288: extern const char *const *mdoc_macronames;
1.105 kristaps 289:
1.121 kristaps 290: /* Names of macro args. Index is enum mdocargt. */
1.1 kristaps 291: extern const char *const *mdoc_argnames;
292:
293: __BEGIN_DECLS
294:
295: struct mdoc;
1.60 kristaps 296:
1.138 ! schwarze 297: const struct roff_node *mdoc_node(const struct mdoc *);
1.32 kristaps 298: const struct mdoc_meta *mdoc_meta(const struct mdoc *);
1.138 ! schwarze 299: void mdoc_deroff(char **, const struct roff_node *);
1.1 kristaps 300:
301: __END_DECLS
CVSweb