]>
git.cameronkatri.com Git - mandoc.git/blob - roff.h
1 /* $Id: roff.h,v 1.9 2008/12/08 12:46:28 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 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. */
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. */
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
);
67 static const int roffarg_An
[] = { ROFF_Split
, ROFF_Nosplit
,
69 static const int roffarg_Bd
[] = { ROFF_Ragged
, ROFF_Unfilled
,
70 ROFF_Literal
, ROFF_File
, ROFF_Offset
, ROFF_Filled
, ROFF_Compact
,
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
,
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
,
97 static const enum roffmsec roffmsec_Cd
[] = { ROFF_MSEC_4
,
99 static const enum roffmsec roffmsec_Er
[] = { ROFF_MSEC_2
,
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
};
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
};
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 */
221 #define ROFF_VALUE (1 << 0)
223 static const int tokenargs
[ROFF_ARGMAX
] = {
225 0, ROFF_VALUE
, ROFF_VALUE
, 0,
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",
253 "Xr", "\%A", "\%B", "\%D",
255 "\%I", "\%J", "\%N", "\%O",
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",
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",
297 const char *const *toknames
= toknamesp
;
298 const char *const *tokargnames
= tokargnamesp
;