]> git.cameronkatri.com Git - mandoc.git/blob - roff.h
*** empty log message ***
[mandoc.git] / roff.h
1 /* $Id: roff.h,v 1.9 2008/12/08 12:46:28 kristaps Exp $ */
2 /*
3 * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19 #ifndef ROFF_H
20 #define ROFF_H
21
22 enum roffd {
23 ROFF_ENTER = 0,
24 ROFF_EXIT
25 };
26
27 enum rofftype {
28 ROFF_COMMENT,
29 ROFF_TEXT,
30 ROFF_LAYOUT,
31 ROFF_SPECIAL
32 };
33
34 struct rofftree;
35
36 #define ROFFCALL_ARGS \
37 int tok, struct rofftree *tree, \
38 char *argv[], enum roffd type
39
40 struct rofftok {
41 int (*cb)(ROFFCALL_ARGS); /* Callback. */
42 const enum roffmsec *sections;
43 const int *args; /* Args (or NULL). */
44 const int *parents; /* Limit to parents. */
45 const int *children; /* Limit to kids. */
46 int ctx; /* Blk-close node. */
47 enum rofftype type; /* Type of macro. */
48 int flags;
49 #define ROFF_PARSED (1 << 0) /* "Parsed". */
50 #define ROFF_CALLABLE (1 << 1) /* "Callable". */
51 #define ROFF_SHALLOW (1 << 2) /* Nesting block. */
52 #define ROFF_LSCOPE (1 << 3) /* Line scope. */
53 };
54
55 __BEGIN_DECLS
56
57 static int roff_Dd(ROFFCALL_ARGS); /* FIXME: deprecate. */
58 static int roff_Dt(ROFFCALL_ARGS); /* FIXME: deprecate. */
59 static int roff_Os(ROFFCALL_ARGS); /* FIXME: deprecate. */
60 static int roff_Ns(ROFFCALL_ARGS); /* FIXME: deprecate. */
61 static int roff_layout(ROFFCALL_ARGS);
62 static int roff_text(ROFFCALL_ARGS);
63 static int roff_noop(ROFFCALL_ARGS);
64 static int roff_depr(ROFFCALL_ARGS);
65 static int roff_ordered(ROFFCALL_ARGS);
66
67 static const int roffarg_An[] = { ROFF_Split, ROFF_Nosplit,
68 ROFF_ARGMAX };
69 static const int roffarg_Bd[] = { ROFF_Ragged, ROFF_Unfilled,
70 ROFF_Literal, ROFF_File, ROFF_Offset, ROFF_Filled, ROFF_Compact,
71 ROFF_ARGMAX };
72 static const int roffarg_Bk[] = { ROFF_Words, ROFF_ARGMAX };
73 static const int roffarg_Ex[] = { ROFF_Std, ROFF_ARGMAX };
74 static const int roffarg_Rv[] = { ROFF_Std, ROFF_ARGMAX };
75 static const int roffarg_Bl[] = { ROFF_Bullet, ROFF_Dash, ROFF_Hyphen,
76 ROFF_Item, ROFF_Enum, ROFF_Tag, ROFF_Diag, ROFF_Hang,
77 ROFF_Ohang, ROFF_Inset, ROFF_Column, ROFF_Offset, ROFF_Width,
78 ROFF_Compact, ROFF_ARGMAX };
79 static const int roffarg_St[] = { ROFF_p1003_1_88, ROFF_p1003_1_90,
80 ROFF_p1003_1_96, ROFF_p1003_1_2001, ROFF_p1003_1_2004,
81 ROFF_p1003_1, ROFF_p1003_1b, ROFF_p1003_1b_93, ROFF_p1003_1c_95,
82 ROFF_p1003_1g_2000, ROFF_p1003_2_92, ROFF_p1387_2_95,
83 ROFF_p1003_2, ROFF_p1387_2, ROFF_isoC_90, ROFF_isoC_amd1,
84 ROFF_isoC_tcor1, ROFF_isoC_tcor2, ROFF_isoC_99, ROFF_ansiC,
85 ROFF_ansiC_89, ROFF_ansiC_99, ROFF_ieee754, ROFF_iso8802_3,
86 ROFF_xpg3, ROFF_xpg4, ROFF_xpg4_2, ROFF_xpg4_3, ROFF_xbd5,
87 ROFF_xcu5, ROFF_xsh5, ROFF_xns5, ROFF_xns5_2d2_0,
88 ROFF_xcurses4_2, ROFF_susv2, ROFF_susv3, ROFF_svid4,
89 ROFF_ARGMAX };
90
91 static const int roffchild_Bl[] = { ROFF_It, ROFF_El, ROFF_MAX };
92 static const int roffchild_Fo[] = { ROFF_Fa, ROFF_Fc, ROFF_MAX };
93 static const int roffchild_Rs[] = { ROFF_Re, ROFF__A, ROFF__B, ROFF__D,
94 ROFF__I, ROFF__J, ROFF__N, ROFF__O, ROFF__P, ROFF__R, ROFF__T,
95 ROFF__V, ROFF_MAX };
96
97 static const enum roffmsec roffmsec_Cd[] = { ROFF_MSEC_4,
98 ROFF_MSEC_MAX };
99 static const enum roffmsec roffmsec_Er[] = { ROFF_MSEC_2,
100 ROFF_MSEC_MAX };
101 static const enum roffmsec roffmsec_Ex[] = { ROFF_MSEC_1,
102 ROFF_MSEC_6, ROFF_MSEC_8, ROFF_MSEC_MAX };
103 static const enum roffmsec roffmsec_Rv[] = { ROFF_MSEC_2,
104 ROFF_MSEC_3, ROFF_MSEC_MAX };
105
106 static const int roffparent_El[] = { ROFF_Bl, ROFF_It, ROFF_MAX };
107 static const int roffparent_Fc[] = { ROFF_Fo, ROFF_Fa, ROFF_MAX };
108 static const int roffparent_Oc[] = { ROFF_Oo, ROFF_MAX };
109 static const int roffparent_It[] = { ROFF_Bl, ROFF_It, ROFF_MAX };
110 static const int roffparent_Re[] = { ROFF_Rs, ROFF_MAX };
111
112 static const struct rofftok tokens[ROFF_MAX] = {
113 { roff_noop, NULL, NULL, NULL, NULL, 0, ROFF_COMMENT, 0 }, /* \" */
114 { roff_Dd, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Dd */
115 { roff_Dt, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Dt */
116 { roff_Os, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Os */
117 { roff_layout, NULL, NULL, NULL, NULL, ROFF_Sh, ROFF_LAYOUT, 0 }, /* Sh */
118 { roff_layout, NULL, NULL, NULL, NULL, ROFF_Ss, ROFF_LAYOUT, 0 }, /* Ss */
119 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Pp */ /* XXX 0 args */
120 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_LSCOPE }, /* D1 */
121 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_LSCOPE }, /* Dl */
122 { roff_layout, NULL, roffarg_Bd, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bd */
123 { roff_noop, NULL, NULL, NULL, NULL, ROFF_Bd, ROFF_LAYOUT, 0 }, /* Ed */
124 { roff_layout, NULL, roffarg_Bl, NULL, roffchild_Bl, 0, ROFF_LAYOUT, 0 }, /* Bl */
125 { roff_noop, NULL, NULL, roffparent_El, NULL, ROFF_Bl, ROFF_LAYOUT, 0 }, /* El */
126 { roff_layout, NULL, NULL, roffparent_It, NULL, ROFF_It, ROFF_LAYOUT, ROFF_PARSED | ROFF_SHALLOW }, /* It */
127 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ad */ /* FIXME */
128 { roff_text, NULL, roffarg_An, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* An */ /* FIXME: no-args? */
129 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ar */
130 /*Ok*/ { roff_text, roffmsec_Cd, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Cd */
131 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Cm */
132 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dv */ /* XXX needs arg */
133 /*Ok*/ { roff_text, roffmsec_Er, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Er */ /* XXX needs arg */
134 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ev */ /* XXX needs arg */
135 /*Ok*/ {roff_ordered, roffmsec_Ex, roffarg_Ex, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ex */
136 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fa */ /* XXX needs arg */
137 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Fd */ /* FIXME: section/linebreak. */
138 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fl */
139 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fn */ /* FIXME: section/linebreak. */
140 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ft */ /* FIXME: section/linebreak. */
141 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ic */ /* FIXME: needs arg */
142 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* In */ /* FIXME: section/linebreak. */
143 /*OK*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Li */
144 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Nd */ /* FIXME: section. */
145 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Nm */ /* FIXME: sections. */
146 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Op */
147 /*Ok*/ { roff_depr, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ot */
148 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pa */
149 /*Ok*/ {roff_ordered, roffmsec_Rv, roffarg_Rv, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Rv */
150 /*Ok*/ {roff_ordered, NULL, roffarg_St, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* St */
151 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Va */
152 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Vt */ /* FIXME: section/linebreak. */
153 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xr */
154 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* %A */
155 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %B */
156 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %D */
157 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %I */
158 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %J */
159 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %N */
160 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %O */
161 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %P */
162 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %R */
163 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* %T */
164 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %V */
165 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ac */
166 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ao */
167 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Aq */
168 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* At */
169 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bc */
170 { roff_layout, NULL, NULL, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bf */ /* FIXME */
171 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bo */
172 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Bq */
173 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bsx */
174 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bx */
175 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 }, /* Db */
176 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dc */
177 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Do */
178 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Dq */
179 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ec */
180 { roff_noop, NULL, NULL, NULL, NULL, ROFF_Bf, ROFF_LAYOUT, 0 }, /* Ef */
181 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Em */ /* XXX needs arg */
182 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Eo */
183 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Fx */
184 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ms */
185 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* No */
186 /*Ok*/ { roff_Ns, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ns */
187 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Nx */
188 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ox */
189 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pc */
190 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Pf */
191 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Po */
192 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Pq */
193 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qc */
194 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ql */
195 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qo */
196 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Qq */
197 { roff_noop, NULL, NULL, roffparent_Re, NULL, ROFF_Rs, ROFF_LAYOUT, 0 }, /* Re */
198 { roff_layout, NULL, NULL, NULL, roffchild_Rs, 0, ROFF_LAYOUT, 0 }, /* Rs */
199 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sc */
200 { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* So */
201 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Sq */
202 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Sm */
203 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sx */
204 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sy */
205 /*Ok*/ { roff_text, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Tn */
206 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ux */
207 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xc */
208 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xo */
209 /*Ok*/ { roff_layout, NULL, NULL, NULL, roffchild_Fo, 0, ROFF_LAYOUT, 0 }, /* Fo */ /* FIXME: section/linebreak. */
210 /*Ok*/ { roff_noop, NULL, NULL, roffparent_Fc, NULL, ROFF_Fo, ROFF_LAYOUT, 0 }, /* Fc */ /* FIXME: section/linebreak. */
211 /*Ok*/ { roff_layout, NULL, NULL, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Oo */
212 /*Ok*/ { roff_noop, NULL, NULL, roffparent_Oc, NULL, ROFF_Oo, ROFF_LAYOUT, 0 }, /* Oc */
213 { NULL, NULL, roffarg_Bk, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bk */
214 { NULL, NULL, NULL, NULL, NULL, ROFF_Bk, ROFF_LAYOUT, 0 }, /* Ek */
215 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Bt */
216 { NULL, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Hf */
217 /*Ok*/ { roff_depr, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Fr */
218 /*Ok*/ {roff_ordered, NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ud */
219 };
220
221 #define ROFF_VALUE (1 << 0)
222
223 static const int tokenargs[ROFF_ARGMAX] = {
224 0, 0, 0, 0,
225 0, ROFF_VALUE, ROFF_VALUE, 0,
226 0, 0, 0, 0,
227 0, 0, 0, 0,
228 0, 0, ROFF_VALUE, 0,
229 0, ROFF_VALUE, 0, 0,
230 0, 0, 0, 0,
231 0, 0, 0, 0,
232 0, 0, 0, 0,
233 0, 0, 0, 0,
234 0, 0, 0, 0,
235 0, 0, 0, 0,
236 0, 0, 0, 0,
237 0, 0, 0, 0,
238 0, 0, 0, 0,
239 };
240
241 const char *const toknamesp[ROFF_MAX] = {
242 "\\\"", "Dd", "Dt", "Os",
243 "Sh", "Ss", "Pp", "D1",
244 "Dl", "Bd", "Ed", "Bl",
245 "El", "It", "Ad", "An",
246 "Ar", "Cd", "Cm", "Dv",
247 "Er", "Ev", "Ex", "Fa",
248 "Fd", "Fl", "Fn", "Ft",
249 "Ic", "In", "Li", "Nd",
250 "Nm", "Op", "Ot", "Pa",
251 "Rv", "St", "Va", "Vt",
252 /* LINTED */
253 "Xr", "\%A", "\%B", "\%D",
254 /* LINTED */
255 "\%I", "\%J", "\%N", "\%O",
256 /* LINTED */
257 "\%P", "\%R", "\%T", "\%V",
258 "Ac", "Ao", "Aq", "At",
259 "Bc", "Bf", "Bo", "Bq",
260 "Bsx", "Bx", "Db", "Dc",
261 "Do", "Dq", "Ec", "Ef",
262 "Em", "Eo", "Fx", "Ms",
263 "No", "Ns", "Nx", "Ox",
264 "Pc", "Pf", "Po", "Pq",
265 "Qc", "Ql", "Qo", "Qq",
266 "Re", "Rs", "Sc", "So",
267 "Sq", "Sm", "Sx", "Sy",
268 "Tn", "Ux", "Xc", "Xo",
269 "Fo", "Fc", "Oo", "Oc",
270 "Bk", "Ek", "Bt", "Hf",
271 "Fr", "Ud",
272 };
273
274 const char *const tokargnamesp[ROFF_ARGMAX] = {
275 "split", "nosplit", "ragged",
276 "unfilled", "literal", "file",
277 "offset", "bullet", "dash",
278 "hyphen", "item", "enum",
279 "tag", "diag", "hang",
280 "ohang", "inset", "column",
281 "width", "compact", "std",
282 "p1003.1-88", "p1003.1-90", "p1003.1-96",
283 "p1003.1-2001", "p1003.1-2004", "p1003.1",
284 "p1003.1b", "p1003.1b-93", "p1003.1c-95",
285 "p1003.1g-2000", "p1003.2-92", "p1387.2-95",
286 "p1003.2", "p1387.2", "isoC-90",
287 "isoC-amd1", "isoC-tcor1", "isoC-tcor2",
288 "isoC-99", "ansiC", "ansiC-89",
289 "ansiC-99", "ieee754", "iso8802-3",
290 "xpg3", "xpg4", "xpg4.2",
291 "xpg4.3", "xbd5", "xcu5",
292 "xsh5", "xns5", "xns5.2d2.0",
293 "xcurses4.2", "susv2", "susv3",
294 "svid4", "filled", "words",
295 };
296
297 const char *const *toknames = toknamesp;
298 const char *const *tokargnames = tokargnamesp;
299
300 __END_DECLS
301
302 #endif /*!ROFF_H*/