]> git.cameronkatri.com Git - mandoc.git/blob - roff.h
*** empty log message ***
[mandoc.git] / roff.h
1 /* $Id: roff.h,v 1.8 2008/12/07 22:40:18 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 int *args; /* Args (or NULL). */
43 const int *parents; /* Limit to parents. */
44 const int *children; /* Limit to kids. */
45 int ctx; /* Blk-close node. */
46 enum rofftype type; /* Type of macro. */
47 int flags;
48 #define ROFF_PARSED (1 << 0) /* "Parsed". */
49 #define ROFF_CALLABLE (1 << 1) /* "Callable". */
50 #define ROFF_SHALLOW (1 << 2) /* Nesting block. */
51 #define ROFF_LSCOPE (1 << 3) /* Line scope. */
52 };
53
54 __BEGIN_DECLS
55
56 static int roff_Dd(ROFFCALL_ARGS); /* FIXME: deprecate. */
57 static int roff_Dt(ROFFCALL_ARGS); /* FIXME: deprecate. */
58 static int roff_Os(ROFFCALL_ARGS); /* FIXME: deprecate. */
59 static int roff_Ns(ROFFCALL_ARGS); /* FIXME: deprecate. */
60 static int roff_layout(ROFFCALL_ARGS);
61 static int roff_text(ROFFCALL_ARGS);
62 static int roff_noop(ROFFCALL_ARGS);
63 static int roff_depr(ROFFCALL_ARGS);
64 static int roff_ordered(ROFFCALL_ARGS);
65
66 static const int roffarg_An[] = { ROFF_Split, ROFF_Nosplit, ROFF_ARGMAX };
67 static const int roffarg_Bd[] = { ROFF_Ragged, ROFF_Unfilled, ROFF_Literal,
68 ROFF_File, ROFF_Offset, ROFF_Filled, ROFF_Compact, ROFF_ARGMAX };
69 static const int roffarg_Bk[] = { ROFF_Words, ROFF_ARGMAX };
70 static const int roffarg_Ex[] = { ROFF_Std, ROFF_ARGMAX };
71 static const int roffarg_Rv[] = { ROFF_Std, ROFF_ARGMAX };
72 static const int roffarg_Bl[] = { ROFF_Bullet, ROFF_Dash, ROFF_Hyphen,
73 ROFF_Item, ROFF_Enum, ROFF_Tag, ROFF_Diag, ROFF_Hang, ROFF_Ohang,
74 ROFF_Inset, ROFF_Column, ROFF_Offset, ROFF_Width, ROFF_Compact,
75 ROFF_ARGMAX };
76 static const int roffarg_St[] = { ROFF_p1003_1_88, ROFF_p1003_1_90,
77 ROFF_p1003_1_96, ROFF_p1003_1_2001, ROFF_p1003_1_2004, ROFF_p1003_1,
78 ROFF_p1003_1b, ROFF_p1003_1b_93, ROFF_p1003_1c_95, ROFF_p1003_1g_2000,
79 ROFF_p1003_2_92, ROFF_p1387_2_95, ROFF_p1003_2, ROFF_p1387_2,
80 ROFF_isoC_90, ROFF_isoC_amd1, ROFF_isoC_tcor1, ROFF_isoC_tcor2,
81 ROFF_isoC_99, ROFF_ansiC, ROFF_ansiC_89, ROFF_ansiC_99, ROFF_ieee754,
82 ROFF_iso8802_3, ROFF_xpg3, ROFF_xpg4, ROFF_xpg4_2, ROFF_xpg4_3,
83 ROFF_xbd5, ROFF_xcu5, ROFF_xsh5, ROFF_xns5, ROFF_xns5_2d2_0,
84 ROFF_xcurses4_2, ROFF_susv2, ROFF_susv3, ROFF_svid4, ROFF_ARGMAX };
85
86 static const int roffchild_Bl[] = { ROFF_It, ROFF_El, ROFF_MAX };
87 static const int roffchild_Fo[] = { ROFF_Fa, ROFF_Fc, ROFF_MAX };
88 static const int roffchild_Rs[] = { ROFF_Re, ROFF__A, ROFF__B, ROFF__D,
89 ROFF__I, ROFF__J, ROFF__N, ROFF__O, ROFF__P, ROFF__R, ROFF__T, ROFF__V,
90 ROFF_MAX };
91
92 static const int roffparent_El[] = { ROFF_Bl, ROFF_It, ROFF_MAX };
93 static const int roffparent_Fc[] = { ROFF_Fo, ROFF_Fa, ROFF_MAX };
94 static const int roffparent_Oc[] = { ROFF_Oo, ROFF_MAX };
95 static const int roffparent_It[] = { ROFF_Bl, ROFF_It, ROFF_MAX };
96 static const int roffparent_Re[] = { ROFF_Rs, ROFF_MAX };
97
98 static const struct rofftok tokens[ROFF_MAX] = {
99 { roff_noop, NULL, NULL, NULL, 0, ROFF_COMMENT, 0 }, /* \" */
100 { roff_Dd, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Dd */
101 { roff_Dt, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Dt */
102 { roff_Os, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Os */
103 { roff_layout, NULL, NULL, NULL, ROFF_Sh, ROFF_LAYOUT, 0 }, /* Sh */
104 { roff_layout, NULL, NULL, NULL, ROFF_Ss, ROFF_LAYOUT, 0 }, /* Ss */
105 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Pp */ /* XXX 0 args */
106 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_LSCOPE }, /* D1 */
107 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_LSCOPE }, /* Dl */
108 { roff_layout, roffarg_Bd, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bd */
109 { roff_noop, NULL, NULL, NULL, ROFF_Bd, ROFF_LAYOUT, 0 }, /* Ed */
110 { roff_layout, roffarg_Bl, NULL, roffchild_Bl, 0, ROFF_LAYOUT, 0 }, /* Bl */
111 { roff_noop, NULL, roffparent_El, NULL, ROFF_Bl, ROFF_LAYOUT, 0 }, /* El */
112 { roff_layout, NULL, roffparent_It, NULL, ROFF_It, ROFF_LAYOUT, ROFF_PARSED | ROFF_SHALLOW }, /* It */
113 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ad */ /* FIXME */
114 { roff_text, roffarg_An, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* An */ /* FIXME: no-args? */
115 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ar */
116 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Cd */ /* FIXME: section. */
117 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Cm */
118 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dv */ /* XXX needs arg */
119 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Er */ /* XXX needs arg */ /* FIXME: section. */
120 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ev */ /* XXX needs arg */
121 /*Ok*/ {roff_ordered, roffarg_Ex, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ex */ /* FIXME: sections. */
122 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fa */ /* XXX needs arg */
123 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Fd */ /* FIXME: section/linebreak. */
124 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fl */
125 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Fn */ /* FIXME: section/linebreak. */
126 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ft */ /* FIXME: section/linebreak. */
127 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ic */ /* FIXME: needs arg */
128 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* In */ /* FIXME: section/linebreak. */
129 /*OK*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Li */
130 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Nd */ /* FIXME: section. */
131 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Nm */ /* FIXME: sections. */
132 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Op */
133 /*Ok*/ { roff_depr, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ot */
134 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pa */
135 /*Ok*/ {roff_ordered, roffarg_Rv, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Rv */
136 /*Ok*/ {roff_ordered, roffarg_St, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* St */
137 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Va */
138 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Vt */ /* FIXME: section/linebreak. */
139 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xr */
140 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* %A */
141 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %B */
142 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %D */
143 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %I */
144 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE}, /* %J */
145 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %N */
146 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %O */
147 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %P */
148 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %R */
149 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* %T */
150 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* %V */
151 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ac */
152 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ao */
153 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Aq */
154 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* At */
155 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bc */
156 { roff_layout, NULL, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bf */ /* FIXME */
157 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Bo */
158 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Bq */
159 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bsx */
160 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Bx */
161 { NULL, NULL, NULL, NULL, 0, ROFF_SPECIAL, 0 }, /* Db */
162 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Dc */
163 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Do */
164 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Dq */
165 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ec */
166 { roff_noop, NULL, NULL, NULL, ROFF_Bf, ROFF_LAYOUT, 0 }, /* Ef */
167 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Em */ /* XXX needs arg */
168 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Eo */
169 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Fx */
170 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ms */
171 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* No */
172 /*Ok*/ { roff_Ns, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ns */
173 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Nx */
174 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ox */
175 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Pc */
176 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Pf */
177 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Po */
178 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Pq */
179 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qc */
180 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Ql */
181 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Qo */
182 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Qq */
183 { roff_noop, NULL, roffparent_Re, NULL, ROFF_Rs, ROFF_LAYOUT, 0 }, /* Re */
184 { roff_layout, NULL, NULL, roffchild_Rs, 0, ROFF_LAYOUT, 0 }, /* Rs */
185 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sc */
186 { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* So */
187 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE | ROFF_LSCOPE }, /* Sq */
188 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Sm */
189 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sx */
190 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Sy */
191 /*Ok*/ { roff_text, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Tn */
192 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED }, /* Ux */
193 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xc */
194 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, ROFF_PARSED | ROFF_CALLABLE }, /* Xo */
195 /*Ok*/ { roff_layout, NULL, NULL, roffchild_Fo, 0, ROFF_LAYOUT, 0 }, /* Fo */ /* FIXME: section/linebreak. */
196 /*Ok*/ { roff_noop, NULL, roffparent_Fc, NULL, ROFF_Fo, ROFF_LAYOUT, 0 }, /* Fc */ /* FIXME: section/linebreak. */
197 /*Ok*/ { roff_layout, NULL, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Oo */
198 /*Ok*/ { roff_noop, NULL, roffparent_Oc, NULL, ROFF_Oo, ROFF_LAYOUT, 0 }, /* Oc */
199 { NULL, roffarg_Bk, NULL, NULL, 0, ROFF_LAYOUT, 0 }, /* Bk */
200 { NULL, NULL, NULL, NULL, ROFF_Bk, ROFF_LAYOUT, 0 }, /* Ek */
201 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Bt */
202 { NULL, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Hf */
203 /*Ok*/ { roff_depr, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Fr */
204 /*Ok*/ {roff_ordered, NULL, NULL, NULL, 0, ROFF_TEXT, 0 }, /* Ud */
205 };
206
207 #define ROFF_VALUE (1 << 0)
208
209 static const int tokenargs[ROFF_ARGMAX] = {
210 0, 0, 0, 0,
211 0, ROFF_VALUE, ROFF_VALUE, 0,
212 0, 0, 0, 0,
213 0, 0, 0, 0,
214 0, 0, ROFF_VALUE, 0,
215 0, ROFF_VALUE, 0, 0,
216 0, 0, 0, 0,
217 0, 0, 0, 0,
218 0, 0, 0, 0,
219 0, 0, 0, 0,
220 0, 0, 0, 0,
221 0, 0, 0, 0,
222 0, 0, 0, 0,
223 0, 0, 0, 0,
224 0, 0, 0, 0,
225 };
226
227 const char *const toknamesp[ROFF_MAX] = {
228 "\\\"", "Dd", "Dt", "Os",
229 "Sh", "Ss", "Pp", "D1",
230 "Dl", "Bd", "Ed", "Bl",
231 "El", "It", "Ad", "An",
232 "Ar", "Cd", "Cm", "Dv",
233 "Er", "Ev", "Ex", "Fa",
234 "Fd", "Fl", "Fn", "Ft",
235 "Ic", "In", "Li", "Nd",
236 "Nm", "Op", "Ot", "Pa",
237 "Rv", "St", "Va", "Vt",
238 /* LINTED */
239 "Xr", "\%A", "\%B", "\%D",
240 /* LINTED */
241 "\%I", "\%J", "\%N", "\%O",
242 /* LINTED */
243 "\%P", "\%R", "\%T", "\%V",
244 "Ac", "Ao", "Aq", "At",
245 "Bc", "Bf", "Bo", "Bq",
246 "Bsx", "Bx", "Db", "Dc",
247 "Do", "Dq", "Ec", "Ef",
248 "Em", "Eo", "Fx", "Ms",
249 "No", "Ns", "Nx", "Ox",
250 "Pc", "Pf", "Po", "Pq",
251 "Qc", "Ql", "Qo", "Qq",
252 "Re", "Rs", "Sc", "So",
253 "Sq", "Sm", "Sx", "Sy",
254 "Tn", "Ux", "Xc", "Xo",
255 "Fo", "Fc", "Oo", "Oc",
256 "Bk", "Ek", "Bt", "Hf",
257 "Fr", "Ud",
258 };
259
260 const char *const tokargnamesp[ROFF_ARGMAX] = {
261 "split", "nosplit", "ragged",
262 "unfilled", "literal", "file",
263 "offset", "bullet", "dash",
264 "hyphen", "item", "enum",
265 "tag", "diag", "hang",
266 "ohang", "inset", "column",
267 "width", "compact", "std",
268 "p1003.1-88", "p1003.1-90", "p1003.1-96",
269 "p1003.1-2001", "p1003.1-2004", "p1003.1",
270 "p1003.1b", "p1003.1b-93", "p1003.1c-95",
271 "p1003.1g-2000", "p1003.2-92", "p1387.2-95",
272 "p1003.2", "p1387.2", "isoC-90",
273 "isoC-amd1", "isoC-tcor1", "isoC-tcor2",
274 "isoC-99", "ansiC", "ansiC-89",
275 "ansiC-99", "ieee754", "iso8802-3",
276 "xpg3", "xpg4", "xpg4.2",
277 "xpg4.3", "xbd5", "xcu5",
278 "xsh5", "xns5", "xns5.2d2.0",
279 "xcurses4.2", "susv2", "susv3",
280 "svid4", "filled", "words",
281 };
282
283 const char *const *toknames = toknamesp;
284 const char *const *tokargnames = tokargnamesp;
285
286 __END_DECLS
287
288 #endif /*!ROFF_H*/