1322249Sbapt/*	$Id: mdoc.h,v 1.145 2017/04/24 23:06:18 schwarze Exp $ */
2241675Suqs/*
3241675Suqs * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4279527Sbapt * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
5241675Suqs *
6241675Suqs * Permission to use, copy, modify, and distribute this software for any
7241675Suqs * purpose with or without fee is hereby granted, provided that the above
8241675Suqs * copyright notice and this permission notice appear in all copies.
9241675Suqs *
10294113Sbapt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11241675Suqs * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12294113Sbapt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13241675Suqs * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14241675Suqs * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15241675Suqs * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16241675Suqs * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17241675Suqs */
18241675Suqs
19241675Suqsenum	mdocargt {
20241675Suqs	MDOC_Split, /* -split */
21241675Suqs	MDOC_Nosplit, /* -nospli */
22241675Suqs	MDOC_Ragged, /* -ragged */
23241675Suqs	MDOC_Unfilled, /* -unfilled */
24241675Suqs	MDOC_Literal, /* -literal */
25241675Suqs	MDOC_File, /* -file */
26241675Suqs	MDOC_Offset, /* -offset */
27241675Suqs	MDOC_Bullet, /* -bullet */
28241675Suqs	MDOC_Dash, /* -dash */
29241675Suqs	MDOC_Hyphen, /* -hyphen */
30241675Suqs	MDOC_Item, /* -item */
31241675Suqs	MDOC_Enum, /* -enum */
32241675Suqs	MDOC_Tag, /* -tag */
33241675Suqs	MDOC_Diag, /* -diag */
34241675Suqs	MDOC_Hang, /* -hang */
35241675Suqs	MDOC_Ohang, /* -ohang */
36241675Suqs	MDOC_Inset, /* -inset */
37241675Suqs	MDOC_Column, /* -column */
38241675Suqs	MDOC_Width, /* -width */
39241675Suqs	MDOC_Compact, /* -compact */
40241675Suqs	MDOC_Std, /* -std */
41241675Suqs	MDOC_Filled, /* -filled */
42241675Suqs	MDOC_Words, /* -words */
43241675Suqs	MDOC_Emphasis, /* -emphasis */
44241675Suqs	MDOC_Symbolic, /* -symbolic */
45241675Suqs	MDOC_Nested, /* -nested */
46241675Suqs	MDOC_Centred, /* -centered */
47241675Suqs	MDOC_ARG_MAX
48241675Suqs};
49241675Suqs
50274880Sbapt/*
51274880Sbapt * An argument to a macro (multiple values = `-column xxx yyy').
52241675Suqs */
53241675Suqsstruct	mdoc_argv {
54274880Sbapt	enum mdocargt	  arg; /* type of argument */
55241675Suqs	int		  line;
56241675Suqs	int		  pos;
57241675Suqs	size_t		  sz; /* elements in "value" */
58241675Suqs	char		**value; /* argument strings */
59241675Suqs};
60241675Suqs
61241675Suqs/*
62241675Suqs * Reference-counted macro arguments.  These are refcounted because
63241675Suqs * blocks have multiple instances of the same arguments spread across
64241675Suqs * the HEAD, BODY, TAIL, and BLOCK node types.
65241675Suqs */
66274880Sbaptstruct	mdoc_arg {
67241675Suqs	size_t		  argc;
68241675Suqs	struct mdoc_argv *argv;
69241675Suqs	unsigned int	  refcnt;
70241675Suqs};
71241675Suqs
72241675Suqsenum	mdoc_list {
73241675Suqs	LIST__NONE = 0,
74241675Suqs	LIST_bullet, /* -bullet */
75241675Suqs	LIST_column, /* -column */
76241675Suqs	LIST_dash, /* -dash */
77241675Suqs	LIST_diag, /* -diag */
78241675Suqs	LIST_enum, /* -enum */
79241675Suqs	LIST_hang, /* -hang */
80241675Suqs	LIST_hyphen, /* -hyphen */
81241675Suqs	LIST_inset, /* -inset */
82241675Suqs	LIST_item, /* -item */
83241675Suqs	LIST_ohang, /* -ohang */
84241675Suqs	LIST_tag, /* -tag */
85241675Suqs	LIST_MAX
86241675Suqs};
87241675Suqs
88241675Suqsenum	mdoc_disp {
89241675Suqs	DISP__NONE = 0,
90274880Sbapt	DISP_centered, /* -centered */
91241675Suqs	DISP_ragged, /* -ragged */
92241675Suqs	DISP_unfilled, /* -unfilled */
93241675Suqs	DISP_filled, /* -filled */
94241675Suqs	DISP_literal /* -literal */
95241675Suqs};
96241675Suqs
97241675Suqsenum	mdoc_auth {
98241675Suqs	AUTH__NONE = 0,
99241675Suqs	AUTH_split, /* -split */
100241675Suqs	AUTH_nosplit /* -nosplit */
101241675Suqs};
102241675Suqs
103241675Suqsenum	mdoc_font {
104241675Suqs	FONT__NONE = 0,
105241675Suqs	FONT_Em, /* Em, -emphasis */
106241675Suqs	FONT_Li, /* Li, -literal */
107241675Suqs	FONT_Sy /* Sy, -symbolic */
108241675Suqs};
109241675Suqs
110241675Suqsstruct	mdoc_bd {
111241675Suqs	const char	 *offs; /* -offset */
112241675Suqs	enum mdoc_disp	  type; /* -ragged, etc. */
113241675Suqs	int		  comp; /* -compact */
114241675Suqs};
115241675Suqs
116241675Suqsstruct	mdoc_bl {
117241675Suqs	const char	 *width; /* -width */
118241675Suqs	const char	 *offs; /* -offset */
119241675Suqs	enum mdoc_list	  type; /* -tag, -enum, etc. */
120241675Suqs	int		  comp; /* -compact */
121241675Suqs	size_t		  ncols; /* -column arg count */
122241675Suqs	const char	**cols; /* -column val ptr */
123261344Suqs	int		  count; /* -enum counter */
124241675Suqs};
125241675Suqs
126241675Suqsstruct	mdoc_bf {
127241675Suqs	enum mdoc_font	  font; /* font */
128241675Suqs};
129241675Suqs
130241675Suqsstruct	mdoc_an {
131241675Suqs	enum mdoc_auth	  auth; /* -split, etc. */
132241675Suqs};
133241675Suqs
134241675Suqsstruct	mdoc_rs {
135241675Suqs	int		  quote_T; /* whether to quote %T */
136241675Suqs};
137241675Suqs
138241675Suqs/*
139241675Suqs * Consists of normalised node arguments.  These should be used instead
140241675Suqs * of iterating through the mdoc_arg pointers of a node: defaults are
141241675Suqs * provided, etc.
142241675Suqs */
143241675Suqsunion	mdoc_data {
144274880Sbapt	struct mdoc_an	  An;
145241675Suqs	struct mdoc_bd	  Bd;
146241675Suqs	struct mdoc_bf	  Bf;
147241675Suqs	struct mdoc_bl	  Bl;
148294113Sbapt	struct roff_node *Es;
149241675Suqs	struct mdoc_rs	  Rs;
150241675Suqs};
151241675Suqs
152241675Suqs/* Names of macro args.  Index is enum mdocargt. */
153241675Suqsextern	const char *const *mdoc_argnames;
154241675Suqs
155294113Sbaptvoid		 mdoc_validate(struct roff_man *);
156