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