Annotation of mandoc/mdoc.h, Revision 1.143
1.143 ! schwarze 1: /* $Id: mdoc.h,v 1.142 2015/04/23 16:17:44 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:
1.129 schwarze 175: /*
176: * An argument to a macro (multiple values = `-column xxx yyy').
1.105 kristaps 177: */
178: struct mdoc_argv {
1.129 schwarze 179: enum mdocargt arg; /* type of argument */
1.105 kristaps 180: int line;
181: int pos;
182: size_t sz; /* elements in "value" */
183: char **value; /* argument strings */
184: };
185:
1.33 kristaps 186: /*
1.105 kristaps 187: * Reference-counted macro arguments. These are refcounted because
188: * blocks have multiple instances of the same arguments spread across
189: * the HEAD, BODY, TAIL, and BLOCK node types.
1.33 kristaps 190: */
1.129 schwarze 191: struct mdoc_arg {
1.105 kristaps 192: size_t argc;
193: struct mdoc_argv *argv;
194: unsigned int refcnt;
195: };
1.1 kristaps 196:
1.105 kristaps 197: enum mdoc_list {
198: LIST__NONE = 0,
1.121 kristaps 199: LIST_bullet, /* -bullet */
200: LIST_column, /* -column */
201: LIST_dash, /* -dash */
202: LIST_diag, /* -diag */
203: LIST_enum, /* -enum */
204: LIST_hang, /* -hang */
205: LIST_hyphen, /* -hyphen */
206: LIST_inset, /* -inset */
207: LIST_item, /* -item */
208: LIST_ohang, /* -ohang */
209: LIST_tag, /* -tag */
1.106 kristaps 210: LIST_MAX
1.105 kristaps 211: };
212:
213: enum mdoc_disp {
214: DISP__NONE = 0,
1.131 schwarze 215: DISP_centered, /* -centered */
1.121 kristaps 216: DISP_ragged, /* -ragged */
217: DISP_unfilled, /* -unfilled */
218: DISP_filled, /* -filled */
219: DISP_literal /* -literal */
1.105 kristaps 220: };
221:
222: enum mdoc_auth {
223: AUTH__NONE = 0,
1.121 kristaps 224: AUTH_split, /* -split */
225: AUTH_nosplit /* -nosplit */
1.105 kristaps 226: };
1.60 kristaps 227:
1.105 kristaps 228: enum mdoc_font {
229: FONT__NONE = 0,
1.121 kristaps 230: FONT_Em, /* Em, -emphasis */
231: FONT_Li, /* Li, -literal */
232: FONT_Sy /* Sy, -symbolic */
1.105 kristaps 233: };
234:
235: struct mdoc_bd {
236: const char *offs; /* -offset */
237: enum mdoc_disp type; /* -ragged, etc. */
238: int comp; /* -compact */
239: };
240:
241: struct mdoc_bl {
242: const char *width; /* -width */
243: const char *offs; /* -offset */
244: enum mdoc_list type; /* -tag, -enum, etc. */
245: int comp; /* -compact */
246: size_t ncols; /* -column arg count */
247: const char **cols; /* -column val ptr */
1.123 schwarze 248: int count; /* -enum counter */
1.105 kristaps 249: };
250:
251: struct mdoc_bf {
252: enum mdoc_font font; /* font */
253: };
254:
255: struct mdoc_an {
256: enum mdoc_auth auth; /* -split, etc. */
257: };
258:
1.111 kristaps 259: struct mdoc_rs {
1.115 kristaps 260: int quote_T; /* whether to quote %T */
1.111 kristaps 261: };
262:
1.105 kristaps 263: /*
264: * Consists of normalised node arguments. These should be used instead
265: * of iterating through the mdoc_arg pointers of a node: defaults are
266: * provided, etc.
267: */
1.109 kristaps 268: union mdoc_data {
1.129 schwarze 269: struct mdoc_an An;
1.109 kristaps 270: struct mdoc_bd Bd;
271: struct mdoc_bf Bf;
272: struct mdoc_bl Bl;
1.138 schwarze 273: struct roff_node *Es;
1.111 kristaps 274: struct mdoc_rs Rs;
1.109 kristaps 275: };
276:
1.138 schwarze 277: /* Names of macros. */
1.1 kristaps 278: extern const char *const *mdoc_macronames;
1.105 kristaps 279:
1.121 kristaps 280: /* Names of macro args. Index is enum mdocargt. */
1.1 kristaps 281: extern const char *const *mdoc_argnames;
1.143 ! schwarze 282:
! 283: __BEGIN_DECLS
! 284:
! 285: void mdoc_validate(struct roff_man *);
! 286:
! 287: __END_DECLS
CVSweb