]>
git.cameronkatri.com Git - mandoc.git/blob - roff.h
1 /* $Id: roff.h,v 1.8 2008/12/07 22:40:18 kristaps Exp $ */
3 * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
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
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.
36 #define ROFFCALL_ARGS \
37 int tok, struct rofftree *tree, \
38 char *argv[], enum roffd type
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. */
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. */
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
);
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
,
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
};
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
,
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
};
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 */
207 #define ROFF_VALUE (1 << 0)
209 static const int tokenargs
[ROFF_ARGMAX
] = {
211 0, ROFF_VALUE
, ROFF_VALUE
, 0,
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",
239 "Xr", "\%A", "\%B", "\%D",
241 "\%I", "\%J", "\%N", "\%O",
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",
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",
283 const char *const *toknames
= toknamesp
;
284 const char *const *tokargnames
= tokargnamesp
;