xref: /illumos-gate/usr/src/cmd/mandoc/roff.h (revision cec8643b41ebefad6c677010fc784dc4bb0550f3)
1*cec8643bSMichal Nowak /*	$Id: roff.h,v 1.69 2019/03/04 13:01:57 schwarze Exp $	*/
2371584c2SYuri Pankov /*
3371584c2SYuri Pankov  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4*cec8643bSMichal Nowak  * Copyright (c) 2013-2015, 2017-2019 Ingo Schwarze <schwarze@openbsd.org>
5371584c2SYuri Pankov  *
6371584c2SYuri Pankov  * Permission to use, copy, modify, and distribute this software for any
7371584c2SYuri Pankov  * purpose with or without fee is hereby granted, provided that the above
8371584c2SYuri Pankov  * copyright notice and this permission notice appear in all copies.
9371584c2SYuri Pankov  *
10371584c2SYuri Pankov  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11371584c2SYuri Pankov  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12371584c2SYuri Pankov  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13371584c2SYuri Pankov  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14371584c2SYuri Pankov  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15371584c2SYuri Pankov  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16371584c2SYuri Pankov  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*cec8643bSMichal Nowak  *
18*cec8643bSMichal Nowak  * Common data types for all syntax trees and related functions.
19371584c2SYuri Pankov  */
20371584c2SYuri Pankov 
21c66b8046SYuri Pankov struct	ohash;
22371584c2SYuri Pankov struct	mdoc_arg;
23371584c2SYuri Pankov union	mdoc_data;
24*cec8643bSMichal Nowak struct	tbl_span;
25*cec8643bSMichal Nowak struct	eqn_box;
26371584c2SYuri Pankov 
27371584c2SYuri Pankov enum	roff_macroset {
28371584c2SYuri Pankov 	MACROSET_NONE = 0,
29371584c2SYuri Pankov 	MACROSET_MDOC,
30371584c2SYuri Pankov 	MACROSET_MAN
31371584c2SYuri Pankov };
32371584c2SYuri Pankov 
33371584c2SYuri Pankov enum	roff_sec {
34371584c2SYuri Pankov 	SEC_NONE = 0,
35371584c2SYuri Pankov 	SEC_NAME,
36371584c2SYuri Pankov 	SEC_LIBRARY,
37371584c2SYuri Pankov 	SEC_SYNOPSIS,
38371584c2SYuri Pankov 	SEC_DESCRIPTION,
39371584c2SYuri Pankov 	SEC_CONTEXT,
40371584c2SYuri Pankov 	SEC_IMPLEMENTATION,	/* IMPLEMENTATION NOTES */
41371584c2SYuri Pankov 	SEC_RETURN_VALUES,
42371584c2SYuri Pankov 	SEC_ENVIRONMENT,
43371584c2SYuri Pankov 	SEC_FILES,
44371584c2SYuri Pankov 	SEC_EXIT_STATUS,
45371584c2SYuri Pankov 	SEC_EXAMPLES,
46371584c2SYuri Pankov 	SEC_DIAGNOSTICS,
47371584c2SYuri Pankov 	SEC_COMPATIBILITY,
48371584c2SYuri Pankov 	SEC_ERRORS,
49371584c2SYuri Pankov 	SEC_SEE_ALSO,
50371584c2SYuri Pankov 	SEC_STANDARDS,
51371584c2SYuri Pankov 	SEC_HISTORY,
52371584c2SYuri Pankov 	SEC_AUTHORS,
53371584c2SYuri Pankov 	SEC_CAVEATS,
54371584c2SYuri Pankov 	SEC_BUGS,
55371584c2SYuri Pankov 	SEC_SECURITY,
56371584c2SYuri Pankov 	SEC_CUSTOM,
57371584c2SYuri Pankov 	SEC__MAX
58371584c2SYuri Pankov };
59371584c2SYuri Pankov 
60371584c2SYuri Pankov enum	roff_type {
61371584c2SYuri Pankov 	ROFFT_ROOT,
62371584c2SYuri Pankov 	ROFFT_BLOCK,
63371584c2SYuri Pankov 	ROFFT_HEAD,
64371584c2SYuri Pankov 	ROFFT_BODY,
65371584c2SYuri Pankov 	ROFFT_TAIL,
66371584c2SYuri Pankov 	ROFFT_ELEM,
67371584c2SYuri Pankov 	ROFFT_TEXT,
686640c13bSYuri Pankov 	ROFFT_COMMENT,
69371584c2SYuri Pankov 	ROFFT_TBL,
70371584c2SYuri Pankov 	ROFFT_EQN
71371584c2SYuri Pankov };
72371584c2SYuri Pankov 
73c66b8046SYuri Pankov enum	roff_tok {
74c66b8046SYuri Pankov 	ROFF_br = 0,
75c66b8046SYuri Pankov 	ROFF_ce,
76*cec8643bSMichal Nowak 	ROFF_fi,
77c66b8046SYuri Pankov 	ROFF_ft,
78c66b8046SYuri Pankov 	ROFF_ll,
79c66b8046SYuri Pankov 	ROFF_mc,
80*cec8643bSMichal Nowak 	ROFF_nf,
81c66b8046SYuri Pankov 	ROFF_po,
82c66b8046SYuri Pankov 	ROFF_rj,
83c66b8046SYuri Pankov 	ROFF_sp,
84c66b8046SYuri Pankov 	ROFF_ta,
85c66b8046SYuri Pankov 	ROFF_ti,
86c66b8046SYuri Pankov 	ROFF_MAX,
87c66b8046SYuri Pankov 	ROFF_ab,
88c66b8046SYuri Pankov 	ROFF_ad,
89c66b8046SYuri Pankov 	ROFF_af,
90c66b8046SYuri Pankov 	ROFF_aln,
91c66b8046SYuri Pankov 	ROFF_als,
92c66b8046SYuri Pankov 	ROFF_am,
93c66b8046SYuri Pankov 	ROFF_am1,
94c66b8046SYuri Pankov 	ROFF_ami,
95c66b8046SYuri Pankov 	ROFF_ami1,
96c66b8046SYuri Pankov 	ROFF_as,
97c66b8046SYuri Pankov 	ROFF_as1,
98c66b8046SYuri Pankov 	ROFF_asciify,
99c66b8046SYuri Pankov 	ROFF_backtrace,
100c66b8046SYuri Pankov 	ROFF_bd,
101c66b8046SYuri Pankov 	ROFF_bleedat,
102c66b8046SYuri Pankov 	ROFF_blm,
103c66b8046SYuri Pankov 	ROFF_box,
104c66b8046SYuri Pankov 	ROFF_boxa,
105c66b8046SYuri Pankov 	ROFF_bp,
106c66b8046SYuri Pankov 	ROFF_BP,
107c66b8046SYuri Pankov 	ROFF_break,
108c66b8046SYuri Pankov 	ROFF_breakchar,
109c66b8046SYuri Pankov 	ROFF_brnl,
110c66b8046SYuri Pankov 	ROFF_brp,
111c66b8046SYuri Pankov 	ROFF_brpnl,
112c66b8046SYuri Pankov 	ROFF_c2,
113c66b8046SYuri Pankov 	ROFF_cc,
114c66b8046SYuri Pankov 	ROFF_cf,
115c66b8046SYuri Pankov 	ROFF_cflags,
116c66b8046SYuri Pankov 	ROFF_ch,
117c66b8046SYuri Pankov 	ROFF_char,
118c66b8046SYuri Pankov 	ROFF_chop,
119c66b8046SYuri Pankov 	ROFF_class,
120c66b8046SYuri Pankov 	ROFF_close,
121c66b8046SYuri Pankov 	ROFF_CL,
122c66b8046SYuri Pankov 	ROFF_color,
123c66b8046SYuri Pankov 	ROFF_composite,
124c66b8046SYuri Pankov 	ROFF_continue,
125c66b8046SYuri Pankov 	ROFF_cp,
126c66b8046SYuri Pankov 	ROFF_cropat,
127c66b8046SYuri Pankov 	ROFF_cs,
128c66b8046SYuri Pankov 	ROFF_cu,
129c66b8046SYuri Pankov 	ROFF_da,
130c66b8046SYuri Pankov 	ROFF_dch,
131c66b8046SYuri Pankov 	ROFF_Dd,
132c66b8046SYuri Pankov 	ROFF_de,
133c66b8046SYuri Pankov 	ROFF_de1,
134c66b8046SYuri Pankov 	ROFF_defcolor,
135c66b8046SYuri Pankov 	ROFF_dei,
136c66b8046SYuri Pankov 	ROFF_dei1,
137c66b8046SYuri Pankov 	ROFF_device,
138c66b8046SYuri Pankov 	ROFF_devicem,
139c66b8046SYuri Pankov 	ROFF_di,
140c66b8046SYuri Pankov 	ROFF_do,
141c66b8046SYuri Pankov 	ROFF_ds,
142c66b8046SYuri Pankov 	ROFF_ds1,
143c66b8046SYuri Pankov 	ROFF_dwh,
144c66b8046SYuri Pankov 	ROFF_dt,
145c66b8046SYuri Pankov 	ROFF_ec,
146c66b8046SYuri Pankov 	ROFF_ecr,
147c66b8046SYuri Pankov 	ROFF_ecs,
148c66b8046SYuri Pankov 	ROFF_el,
149c66b8046SYuri Pankov 	ROFF_em,
150c66b8046SYuri Pankov 	ROFF_EN,
151c66b8046SYuri Pankov 	ROFF_eo,
152c66b8046SYuri Pankov 	ROFF_EP,
153c66b8046SYuri Pankov 	ROFF_EQ,
154c66b8046SYuri Pankov 	ROFF_errprint,
155c66b8046SYuri Pankov 	ROFF_ev,
156c66b8046SYuri Pankov 	ROFF_evc,
157c66b8046SYuri Pankov 	ROFF_ex,
158c66b8046SYuri Pankov 	ROFF_fallback,
159c66b8046SYuri Pankov 	ROFF_fam,
160c66b8046SYuri Pankov 	ROFF_fc,
161c66b8046SYuri Pankov 	ROFF_fchar,
162c66b8046SYuri Pankov 	ROFF_fcolor,
163c66b8046SYuri Pankov 	ROFF_fdeferlig,
164c66b8046SYuri Pankov 	ROFF_feature,
165c66b8046SYuri Pankov 	ROFF_fkern,
166c66b8046SYuri Pankov 	ROFF_fl,
167c66b8046SYuri Pankov 	ROFF_flig,
168c66b8046SYuri Pankov 	ROFF_fp,
169c66b8046SYuri Pankov 	ROFF_fps,
170c66b8046SYuri Pankov 	ROFF_fschar,
171c66b8046SYuri Pankov 	ROFF_fspacewidth,
172c66b8046SYuri Pankov 	ROFF_fspecial,
173c66b8046SYuri Pankov 	ROFF_ftr,
174c66b8046SYuri Pankov 	ROFF_fzoom,
175c66b8046SYuri Pankov 	ROFF_gcolor,
176c66b8046SYuri Pankov 	ROFF_hc,
177c66b8046SYuri Pankov 	ROFF_hcode,
178c66b8046SYuri Pankov 	ROFF_hidechar,
179c66b8046SYuri Pankov 	ROFF_hla,
180c66b8046SYuri Pankov 	ROFF_hlm,
181c66b8046SYuri Pankov 	ROFF_hpf,
182c66b8046SYuri Pankov 	ROFF_hpfa,
183c66b8046SYuri Pankov 	ROFF_hpfcode,
184c66b8046SYuri Pankov 	ROFF_hw,
185c66b8046SYuri Pankov 	ROFF_hy,
186c66b8046SYuri Pankov 	ROFF_hylang,
187c66b8046SYuri Pankov 	ROFF_hylen,
188c66b8046SYuri Pankov 	ROFF_hym,
189c66b8046SYuri Pankov 	ROFF_hypp,
190c66b8046SYuri Pankov 	ROFF_hys,
191c66b8046SYuri Pankov 	ROFF_ie,
192c66b8046SYuri Pankov 	ROFF_if,
193c66b8046SYuri Pankov 	ROFF_ig,
194c66b8046SYuri Pankov 	/* MAN_in; ignored in mdoc(7) */
195c66b8046SYuri Pankov 	ROFF_index,
196c66b8046SYuri Pankov 	ROFF_it,
197c66b8046SYuri Pankov 	ROFF_itc,
198c66b8046SYuri Pankov 	ROFF_IX,
199c66b8046SYuri Pankov 	ROFF_kern,
200c66b8046SYuri Pankov 	ROFF_kernafter,
201c66b8046SYuri Pankov 	ROFF_kernbefore,
202c66b8046SYuri Pankov 	ROFF_kernpair,
203c66b8046SYuri Pankov 	ROFF_lc,
204c66b8046SYuri Pankov 	ROFF_lc_ctype,
205c66b8046SYuri Pankov 	ROFF_lds,
206c66b8046SYuri Pankov 	ROFF_length,
207c66b8046SYuri Pankov 	ROFF_letadj,
208c66b8046SYuri Pankov 	ROFF_lf,
209c66b8046SYuri Pankov 	ROFF_lg,
210c66b8046SYuri Pankov 	ROFF_lhang,
211c66b8046SYuri Pankov 	ROFF_linetabs,
212c66b8046SYuri Pankov 	ROFF_lnr,
213c66b8046SYuri Pankov 	ROFF_lnrf,
214c66b8046SYuri Pankov 	ROFF_lpfx,
215c66b8046SYuri Pankov 	ROFF_ls,
216c66b8046SYuri Pankov 	ROFF_lsm,
217c66b8046SYuri Pankov 	ROFF_lt,
218c66b8046SYuri Pankov 	ROFF_mediasize,
219c66b8046SYuri Pankov 	ROFF_minss,
220c66b8046SYuri Pankov 	ROFF_mk,
221c66b8046SYuri Pankov 	ROFF_mso,
222c66b8046SYuri Pankov 	ROFF_na,
223c66b8046SYuri Pankov 	ROFF_ne,
224c66b8046SYuri Pankov 	ROFF_nh,
225c66b8046SYuri Pankov 	ROFF_nhychar,
226c66b8046SYuri Pankov 	ROFF_nm,
227c66b8046SYuri Pankov 	ROFF_nn,
228c66b8046SYuri Pankov 	ROFF_nop,
229c66b8046SYuri Pankov 	ROFF_nr,
230c66b8046SYuri Pankov 	ROFF_nrf,
231c66b8046SYuri Pankov 	ROFF_nroff,
232c66b8046SYuri Pankov 	ROFF_ns,
233c66b8046SYuri Pankov 	ROFF_nx,
234c66b8046SYuri Pankov 	ROFF_open,
235c66b8046SYuri Pankov 	ROFF_opena,
236c66b8046SYuri Pankov 	ROFF_os,
237c66b8046SYuri Pankov 	ROFF_output,
238c66b8046SYuri Pankov 	ROFF_padj,
239c66b8046SYuri Pankov 	ROFF_papersize,
240c66b8046SYuri Pankov 	ROFF_pc,
241c66b8046SYuri Pankov 	ROFF_pev,
242c66b8046SYuri Pankov 	ROFF_pi,
243c66b8046SYuri Pankov 	ROFF_PI,
244c66b8046SYuri Pankov 	ROFF_pl,
245c66b8046SYuri Pankov 	ROFF_pm,
246c66b8046SYuri Pankov 	ROFF_pn,
247c66b8046SYuri Pankov 	ROFF_pnr,
248c66b8046SYuri Pankov 	ROFF_ps,
249c66b8046SYuri Pankov 	ROFF_psbb,
250c66b8046SYuri Pankov 	ROFF_pshape,
251c66b8046SYuri Pankov 	ROFF_pso,
252c66b8046SYuri Pankov 	ROFF_ptr,
253c66b8046SYuri Pankov 	ROFF_pvs,
254c66b8046SYuri Pankov 	ROFF_rchar,
255c66b8046SYuri Pankov 	ROFF_rd,
256c66b8046SYuri Pankov 	ROFF_recursionlimit,
257c66b8046SYuri Pankov 	ROFF_return,
258c66b8046SYuri Pankov 	ROFF_rfschar,
259c66b8046SYuri Pankov 	ROFF_rhang,
260c66b8046SYuri Pankov 	ROFF_rm,
261c66b8046SYuri Pankov 	ROFF_rn,
262c66b8046SYuri Pankov 	ROFF_rnn,
263c66b8046SYuri Pankov 	ROFF_rr,
264c66b8046SYuri Pankov 	ROFF_rs,
265c66b8046SYuri Pankov 	ROFF_rt,
266c66b8046SYuri Pankov 	ROFF_schar,
267c66b8046SYuri Pankov 	ROFF_sentchar,
268c66b8046SYuri Pankov 	ROFF_shc,
269c66b8046SYuri Pankov 	ROFF_shift,
270c66b8046SYuri Pankov 	ROFF_sizes,
271c66b8046SYuri Pankov 	ROFF_so,
272c66b8046SYuri Pankov 	ROFF_spacewidth,
273c66b8046SYuri Pankov 	ROFF_special,
274c66b8046SYuri Pankov 	ROFF_spreadwarn,
275c66b8046SYuri Pankov 	ROFF_ss,
276c66b8046SYuri Pankov 	ROFF_sty,
277c66b8046SYuri Pankov 	ROFF_substring,
278c66b8046SYuri Pankov 	ROFF_sv,
279c66b8046SYuri Pankov 	ROFF_sy,
280c66b8046SYuri Pankov 	ROFF_T_,
281c66b8046SYuri Pankov 	ROFF_tc,
282c66b8046SYuri Pankov 	ROFF_TE,
283c66b8046SYuri Pankov 	ROFF_TH,
284c66b8046SYuri Pankov 	ROFF_tkf,
285c66b8046SYuri Pankov 	ROFF_tl,
286c66b8046SYuri Pankov 	ROFF_tm,
287c66b8046SYuri Pankov 	ROFF_tm1,
288c66b8046SYuri Pankov 	ROFF_tmc,
289c66b8046SYuri Pankov 	ROFF_tr,
290c66b8046SYuri Pankov 	ROFF_track,
291c66b8046SYuri Pankov 	ROFF_transchar,
292c66b8046SYuri Pankov 	ROFF_trf,
293c66b8046SYuri Pankov 	ROFF_trimat,
294c66b8046SYuri Pankov 	ROFF_trin,
295c66b8046SYuri Pankov 	ROFF_trnt,
296c66b8046SYuri Pankov 	ROFF_troff,
297c66b8046SYuri Pankov 	ROFF_TS,
298c66b8046SYuri Pankov 	ROFF_uf,
299c66b8046SYuri Pankov 	ROFF_ul,
300c66b8046SYuri Pankov 	ROFF_unformat,
301c66b8046SYuri Pankov 	ROFF_unwatch,
302c66b8046SYuri Pankov 	ROFF_unwatchn,
303c66b8046SYuri Pankov 	ROFF_vpt,
304c66b8046SYuri Pankov 	ROFF_vs,
305c66b8046SYuri Pankov 	ROFF_warn,
306c66b8046SYuri Pankov 	ROFF_warnscale,
307c66b8046SYuri Pankov 	ROFF_watch,
308c66b8046SYuri Pankov 	ROFF_watchlength,
309c66b8046SYuri Pankov 	ROFF_watchn,
310c66b8046SYuri Pankov 	ROFF_wh,
311c66b8046SYuri Pankov 	ROFF_while,
312c66b8046SYuri Pankov 	ROFF_write,
313c66b8046SYuri Pankov 	ROFF_writec,
314c66b8046SYuri Pankov 	ROFF_writem,
315c66b8046SYuri Pankov 	ROFF_xflag,
316c66b8046SYuri Pankov 	ROFF_cblock,
317c66b8046SYuri Pankov 	ROFF_RENAMED,
318c66b8046SYuri Pankov 	ROFF_USERDEF,
319c66b8046SYuri Pankov 	TOKEN_NONE,
320c66b8046SYuri Pankov 	MDOC_Dd,
321c66b8046SYuri Pankov 	MDOC_Dt,
322c66b8046SYuri Pankov 	MDOC_Os,
323c66b8046SYuri Pankov 	MDOC_Sh,
324c66b8046SYuri Pankov 	MDOC_Ss,
325c66b8046SYuri Pankov 	MDOC_Pp,
326c66b8046SYuri Pankov 	MDOC_D1,
327c66b8046SYuri Pankov 	MDOC_Dl,
328c66b8046SYuri Pankov 	MDOC_Bd,
329c66b8046SYuri Pankov 	MDOC_Ed,
330c66b8046SYuri Pankov 	MDOC_Bl,
331c66b8046SYuri Pankov 	MDOC_El,
332c66b8046SYuri Pankov 	MDOC_It,
333c66b8046SYuri Pankov 	MDOC_Ad,
334c66b8046SYuri Pankov 	MDOC_An,
335c66b8046SYuri Pankov 	MDOC_Ap,
336c66b8046SYuri Pankov 	MDOC_Ar,
337c66b8046SYuri Pankov 	MDOC_Cd,
338c66b8046SYuri Pankov 	MDOC_Cm,
339c66b8046SYuri Pankov 	MDOC_Dv,
340c66b8046SYuri Pankov 	MDOC_Er,
341c66b8046SYuri Pankov 	MDOC_Ev,
342c66b8046SYuri Pankov 	MDOC_Ex,
343c66b8046SYuri Pankov 	MDOC_Fa,
344c66b8046SYuri Pankov 	MDOC_Fd,
345c66b8046SYuri Pankov 	MDOC_Fl,
346c66b8046SYuri Pankov 	MDOC_Fn,
347c66b8046SYuri Pankov 	MDOC_Ft,
348c66b8046SYuri Pankov 	MDOC_Ic,
349c66b8046SYuri Pankov 	MDOC_In,
350c66b8046SYuri Pankov 	MDOC_Li,
351c66b8046SYuri Pankov 	MDOC_Nd,
352c66b8046SYuri Pankov 	MDOC_Nm,
353c66b8046SYuri Pankov 	MDOC_Op,
354c66b8046SYuri Pankov 	MDOC_Ot,
355c66b8046SYuri Pankov 	MDOC_Pa,
356c66b8046SYuri Pankov 	MDOC_Rv,
357c66b8046SYuri Pankov 	MDOC_St,
358c66b8046SYuri Pankov 	MDOC_Va,
359c66b8046SYuri Pankov 	MDOC_Vt,
360c66b8046SYuri Pankov 	MDOC_Xr,
361c66b8046SYuri Pankov 	MDOC__A,
362c66b8046SYuri Pankov 	MDOC__B,
363c66b8046SYuri Pankov 	MDOC__D,
364c66b8046SYuri Pankov 	MDOC__I,
365c66b8046SYuri Pankov 	MDOC__J,
366c66b8046SYuri Pankov 	MDOC__N,
367c66b8046SYuri Pankov 	MDOC__O,
368c66b8046SYuri Pankov 	MDOC__P,
369c66b8046SYuri Pankov 	MDOC__R,
370c66b8046SYuri Pankov 	MDOC__T,
371c66b8046SYuri Pankov 	MDOC__V,
372c66b8046SYuri Pankov 	MDOC_Ac,
373c66b8046SYuri Pankov 	MDOC_Ao,
374c66b8046SYuri Pankov 	MDOC_Aq,
375c66b8046SYuri Pankov 	MDOC_At,
376c66b8046SYuri Pankov 	MDOC_Bc,
377c66b8046SYuri Pankov 	MDOC_Bf,
378c66b8046SYuri Pankov 	MDOC_Bo,
379c66b8046SYuri Pankov 	MDOC_Bq,
380c66b8046SYuri Pankov 	MDOC_Bsx,
381c66b8046SYuri Pankov 	MDOC_Bx,
382c66b8046SYuri Pankov 	MDOC_Db,
383c66b8046SYuri Pankov 	MDOC_Dc,
384c66b8046SYuri Pankov 	MDOC_Do,
385c66b8046SYuri Pankov 	MDOC_Dq,
386c66b8046SYuri Pankov 	MDOC_Ec,
387c66b8046SYuri Pankov 	MDOC_Ef,
388c66b8046SYuri Pankov 	MDOC_Em,
389c66b8046SYuri Pankov 	MDOC_Eo,
390c66b8046SYuri Pankov 	MDOC_Fx,
391c66b8046SYuri Pankov 	MDOC_Ms,
392c66b8046SYuri Pankov 	MDOC_No,
393c66b8046SYuri Pankov 	MDOC_Ns,
394c66b8046SYuri Pankov 	MDOC_Nx,
395c66b8046SYuri Pankov 	MDOC_Ox,
396c66b8046SYuri Pankov 	MDOC_Pc,
397c66b8046SYuri Pankov 	MDOC_Pf,
398c66b8046SYuri Pankov 	MDOC_Po,
399c66b8046SYuri Pankov 	MDOC_Pq,
400c66b8046SYuri Pankov 	MDOC_Qc,
401c66b8046SYuri Pankov 	MDOC_Ql,
402c66b8046SYuri Pankov 	MDOC_Qo,
403c66b8046SYuri Pankov 	MDOC_Qq,
404c66b8046SYuri Pankov 	MDOC_Re,
405c66b8046SYuri Pankov 	MDOC_Rs,
406c66b8046SYuri Pankov 	MDOC_Sc,
407c66b8046SYuri Pankov 	MDOC_So,
408c66b8046SYuri Pankov 	MDOC_Sq,
409c66b8046SYuri Pankov 	MDOC_Sm,
410c66b8046SYuri Pankov 	MDOC_Sx,
411c66b8046SYuri Pankov 	MDOC_Sy,
412c66b8046SYuri Pankov 	MDOC_Tn,
413c66b8046SYuri Pankov 	MDOC_Ux,
414c66b8046SYuri Pankov 	MDOC_Xc,
415c66b8046SYuri Pankov 	MDOC_Xo,
416c66b8046SYuri Pankov 	MDOC_Fo,
417c66b8046SYuri Pankov 	MDOC_Fc,
418c66b8046SYuri Pankov 	MDOC_Oo,
419c66b8046SYuri Pankov 	MDOC_Oc,
420c66b8046SYuri Pankov 	MDOC_Bk,
421c66b8046SYuri Pankov 	MDOC_Ek,
422c66b8046SYuri Pankov 	MDOC_Bt,
423c66b8046SYuri Pankov 	MDOC_Hf,
424c66b8046SYuri Pankov 	MDOC_Fr,
425c66b8046SYuri Pankov 	MDOC_Ud,
426c66b8046SYuri Pankov 	MDOC_Lb,
427c66b8046SYuri Pankov 	MDOC_Lp,
428c66b8046SYuri Pankov 	MDOC_Lk,
429c66b8046SYuri Pankov 	MDOC_Mt,
430c66b8046SYuri Pankov 	MDOC_Brq,
431c66b8046SYuri Pankov 	MDOC_Bro,
432c66b8046SYuri Pankov 	MDOC_Brc,
433c66b8046SYuri Pankov 	MDOC__C,
434c66b8046SYuri Pankov 	MDOC_Es,
435c66b8046SYuri Pankov 	MDOC_En,
436c66b8046SYuri Pankov 	MDOC_Dx,
437c66b8046SYuri Pankov 	MDOC__Q,
438c66b8046SYuri Pankov 	MDOC__U,
439c66b8046SYuri Pankov 	MDOC_Ta,
440c66b8046SYuri Pankov 	MDOC_MAX,
441c66b8046SYuri Pankov 	MAN_TH,
442c66b8046SYuri Pankov 	MAN_SH,
443c66b8046SYuri Pankov 	MAN_SS,
444c66b8046SYuri Pankov 	MAN_TP,
445*cec8643bSMichal Nowak 	MAN_TQ,
446c66b8046SYuri Pankov 	MAN_LP,
447c66b8046SYuri Pankov 	MAN_PP,
448c66b8046SYuri Pankov 	MAN_P,
449c66b8046SYuri Pankov 	MAN_IP,
450c66b8046SYuri Pankov 	MAN_HP,
451c66b8046SYuri Pankov 	MAN_SM,
452c66b8046SYuri Pankov 	MAN_SB,
453c66b8046SYuri Pankov 	MAN_BI,
454c66b8046SYuri Pankov 	MAN_IB,
455c66b8046SYuri Pankov 	MAN_BR,
456c66b8046SYuri Pankov 	MAN_RB,
457c66b8046SYuri Pankov 	MAN_R,
458c66b8046SYuri Pankov 	MAN_B,
459c66b8046SYuri Pankov 	MAN_I,
460c66b8046SYuri Pankov 	MAN_IR,
461c66b8046SYuri Pankov 	MAN_RI,
462c66b8046SYuri Pankov 	MAN_RE,
463c66b8046SYuri Pankov 	MAN_RS,
464c66b8046SYuri Pankov 	MAN_DT,
465c66b8046SYuri Pankov 	MAN_UC,
466c66b8046SYuri Pankov 	MAN_PD,
467c66b8046SYuri Pankov 	MAN_AT,
468c66b8046SYuri Pankov 	MAN_in,
469*cec8643bSMichal Nowak 	MAN_SY,
470*cec8643bSMichal Nowak 	MAN_YS,
471c66b8046SYuri Pankov 	MAN_OP,
472c66b8046SYuri Pankov 	MAN_EX,
473c66b8046SYuri Pankov 	MAN_EE,
474c66b8046SYuri Pankov 	MAN_UR,
475c66b8046SYuri Pankov 	MAN_UE,
476c66b8046SYuri Pankov 	MAN_MT,
477c66b8046SYuri Pankov 	MAN_ME,
478c66b8046SYuri Pankov 	MAN_MAX
479c66b8046SYuri Pankov };
480c66b8046SYuri Pankov 
481371584c2SYuri Pankov /*
482371584c2SYuri Pankov  * Indicates that a BODY's formatting has ended, but
483371584c2SYuri Pankov  * the scope is still open.  Used for badly nested blocks.
484371584c2SYuri Pankov  */
485371584c2SYuri Pankov enum	mdoc_endbody {
486371584c2SYuri Pankov 	ENDBODY_NOT = 0,
487a40ea1a7SYuri Pankov 	ENDBODY_SPACE	/* Is broken: append a space. */
488371584c2SYuri Pankov };
489371584c2SYuri Pankov 
490*cec8643bSMichal Nowak enum	mandoc_os {
491*cec8643bSMichal Nowak 	MANDOC_OS_OTHER = 0,
492*cec8643bSMichal Nowak 	MANDOC_OS_NETBSD,
493*cec8643bSMichal Nowak 	MANDOC_OS_OPENBSD
494*cec8643bSMichal Nowak };
495*cec8643bSMichal Nowak 
496371584c2SYuri Pankov struct	roff_node {
497371584c2SYuri Pankov 	struct roff_node *parent;  /* Parent AST node. */
498371584c2SYuri Pankov 	struct roff_node *child;   /* First child AST node. */
499371584c2SYuri Pankov 	struct roff_node *last;    /* Last child AST node. */
500371584c2SYuri Pankov 	struct roff_node *next;    /* Sibling AST node. */
501371584c2SYuri Pankov 	struct roff_node *prev;    /* Prior sibling AST node. */
502371584c2SYuri Pankov 	struct roff_node *head;    /* BLOCK */
503371584c2SYuri Pankov 	struct roff_node *body;    /* BLOCK/ENDBODY */
504371584c2SYuri Pankov 	struct roff_node *tail;    /* BLOCK */
505371584c2SYuri Pankov 	struct mdoc_arg	 *args;    /* BLOCK/ELEM */
506371584c2SYuri Pankov 	union mdoc_data	 *norm;    /* Normalized arguments. */
507371584c2SYuri Pankov 	char		 *string;  /* TEXT */
508*cec8643bSMichal Nowak 	struct tbl_span	 *span;    /* TBL */
509c66b8046SYuri Pankov 	struct eqn_box	 *eqn;     /* EQN */
510371584c2SYuri Pankov 	int		  line;    /* Input file line number. */
511371584c2SYuri Pankov 	int		  pos;     /* Input file column number. */
512371584c2SYuri Pankov 	int		  flags;
513a40ea1a7SYuri Pankov #define	NODE_VALID	 (1 << 0)  /* Has been validated. */
514a40ea1a7SYuri Pankov #define	NODE_ENDED	 (1 << 1)  /* Gone past body end mark. */
515*cec8643bSMichal Nowak #define	NODE_BROKEN	 (1 << 2)  /* Must validate parent when ending. */
516a40ea1a7SYuri Pankov #define	NODE_LINE	 (1 << 3)  /* First macro/text on line. */
517*cec8643bSMichal Nowak #define	NODE_DELIMO	 (1 << 4)
518*cec8643bSMichal Nowak #define	NODE_DELIMC	 (1 << 5)
519*cec8643bSMichal Nowak #define	NODE_EOS	 (1 << 6)  /* At sentence boundary. */
520*cec8643bSMichal Nowak #define	NODE_SYNPRETTY	 (1 << 7)  /* SYNOPSIS-style formatting. */
521*cec8643bSMichal Nowak #define	NODE_NOFILL	 (1 << 8)  /* Fill mode switched off. */
522*cec8643bSMichal Nowak #define	NODE_NOSRC	 (1 << 9)  /* Generated node, not in input file. */
523*cec8643bSMichal Nowak #define	NODE_NOPRT	 (1 << 10) /* Shall not print anything. */
524371584c2SYuri Pankov 	int		  prev_font; /* Before entering this node. */
525371584c2SYuri Pankov 	int		  aux;     /* Decoded node data, type-dependent. */
526c66b8046SYuri Pankov 	enum roff_tok	  tok;     /* Request or macro ID. */
527371584c2SYuri Pankov 	enum roff_type	  type;    /* AST node type. */
528371584c2SYuri Pankov 	enum roff_sec	  sec;     /* Current named section. */
529371584c2SYuri Pankov 	enum mdoc_endbody end;     /* BODY */
530371584c2SYuri Pankov };
531371584c2SYuri Pankov 
532371584c2SYuri Pankov struct	roff_meta {
533*cec8643bSMichal Nowak 	struct roff_node *first;   /* The first node parsed. */
534371584c2SYuri Pankov 	char		 *msec;    /* Manual section, usually a digit. */
535371584c2SYuri Pankov 	char		 *vol;     /* Manual volume title. */
536371584c2SYuri Pankov 	char		 *os;      /* Operating system. */
537371584c2SYuri Pankov 	char		 *arch;    /* Machine architecture. */
538371584c2SYuri Pankov 	char		 *title;   /* Manual title, usually CAPS. */
539371584c2SYuri Pankov 	char		 *name;    /* Leading manual name. */
540371584c2SYuri Pankov 	char		 *date;    /* Normalized date. */
541*cec8643bSMichal Nowak 	char		 *sodest;  /* .so target file name or NULL. */
542371584c2SYuri Pankov 	int		  hasbody; /* Document is not empty. */
543c66b8046SYuri Pankov 	int		  rcsids;  /* Bits indexed by enum mandoc_os. */
544c66b8046SYuri Pankov 	enum mandoc_os	  os_e;    /* Operating system. */
545371584c2SYuri Pankov 	enum roff_macroset macroset; /* Kind of high-level macros used. */
546371584c2SYuri Pankov };
547371584c2SYuri Pankov 
548c66b8046SYuri Pankov extern	const char *const *roff_name;
549c66b8046SYuri Pankov 
550371584c2SYuri Pankov 
551*cec8643bSMichal Nowak int		 arch_valid(const char *, enum mandoc_os);
552371584c2SYuri Pankov void		 deroff(char **, const struct roff_node *);
553