]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mandoc/mdoc.h
sysctl(9): Fix a few mandoc related issues
[FreeBSD/FreeBSD.git] / contrib / mandoc / mdoc.h
1 /*      $Id: mdoc.h,v 1.146 2018/12/30 00:49:55 schwarze Exp $ */
2 /*
3  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4  * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18
19 struct  roff_node;
20 struct  roff_man;
21
22 enum    mdocargt {
23         MDOC_Split, /* -split */
24         MDOC_Nosplit, /* -nospli */
25         MDOC_Ragged, /* -ragged */
26         MDOC_Unfilled, /* -unfilled */
27         MDOC_Literal, /* -literal */
28         MDOC_File, /* -file */
29         MDOC_Offset, /* -offset */
30         MDOC_Bullet, /* -bullet */
31         MDOC_Dash, /* -dash */
32         MDOC_Hyphen, /* -hyphen */
33         MDOC_Item, /* -item */
34         MDOC_Enum, /* -enum */
35         MDOC_Tag, /* -tag */
36         MDOC_Diag, /* -diag */
37         MDOC_Hang, /* -hang */
38         MDOC_Ohang, /* -ohang */
39         MDOC_Inset, /* -inset */
40         MDOC_Column, /* -column */
41         MDOC_Width, /* -width */
42         MDOC_Compact, /* -compact */
43         MDOC_Std, /* -std */
44         MDOC_Filled, /* -filled */
45         MDOC_Words, /* -words */
46         MDOC_Emphasis, /* -emphasis */
47         MDOC_Symbolic, /* -symbolic */
48         MDOC_Nested, /* -nested */
49         MDOC_Centred, /* -centered */
50         MDOC_ARG_MAX
51 };
52
53 /*
54  * An argument to a macro (multiple values = `-column xxx yyy').
55  */
56 struct  mdoc_argv {
57         enum mdocargt     arg; /* type of argument */
58         int               line;
59         int               pos;
60         size_t            sz; /* elements in "value" */
61         char            **value; /* argument strings */
62 };
63
64 /*
65  * Reference-counted macro arguments.  These are refcounted because
66  * blocks have multiple instances of the same arguments spread across
67  * the HEAD, BODY, TAIL, and BLOCK node types.
68  */
69 struct  mdoc_arg {
70         size_t            argc;
71         struct mdoc_argv *argv;
72         unsigned int      refcnt;
73 };
74
75 enum    mdoc_list {
76         LIST__NONE = 0,
77         LIST_bullet, /* -bullet */
78         LIST_column, /* -column */
79         LIST_dash, /* -dash */
80         LIST_diag, /* -diag */
81         LIST_enum, /* -enum */
82         LIST_hang, /* -hang */
83         LIST_hyphen, /* -hyphen */
84         LIST_inset, /* -inset */
85         LIST_item, /* -item */
86         LIST_ohang, /* -ohang */
87         LIST_tag, /* -tag */
88         LIST_MAX
89 };
90
91 enum    mdoc_disp {
92         DISP__NONE = 0,
93         DISP_centered, /* -centered */
94         DISP_ragged, /* -ragged */
95         DISP_unfilled, /* -unfilled */
96         DISP_filled, /* -filled */
97         DISP_literal /* -literal */
98 };
99
100 enum    mdoc_auth {
101         AUTH__NONE = 0,
102         AUTH_split, /* -split */
103         AUTH_nosplit /* -nosplit */
104 };
105
106 enum    mdoc_font {
107         FONT__NONE = 0,
108         FONT_Em, /* Em, -emphasis */
109         FONT_Li, /* Li, -literal */
110         FONT_Sy /* Sy, -symbolic */
111 };
112
113 struct  mdoc_bd {
114         const char       *offs; /* -offset */
115         enum mdoc_disp    type; /* -ragged, etc. */
116         int               comp; /* -compact */
117 };
118
119 struct  mdoc_bl {
120         const char       *width; /* -width */
121         const char       *offs; /* -offset */
122         enum mdoc_list    type; /* -tag, -enum, etc. */
123         int               comp; /* -compact */
124         size_t            ncols; /* -column arg count */
125         const char      **cols; /* -column val ptr */
126         int               count; /* -enum counter */
127 };
128
129 struct  mdoc_bf {
130         enum mdoc_font    font; /* font */
131 };
132
133 struct  mdoc_an {
134         enum mdoc_auth    auth; /* -split, etc. */
135 };
136
137 struct  mdoc_rs {
138         int               quote_T; /* whether to quote %T */
139 };
140
141 /*
142  * Consists of normalised node arguments.  These should be used instead
143  * of iterating through the mdoc_arg pointers of a node: defaults are
144  * provided, etc.
145  */
146 union   mdoc_data {
147         struct mdoc_an    An;
148         struct mdoc_bd    Bd;
149         struct mdoc_bf    Bf;
150         struct mdoc_bl    Bl;
151         struct roff_node *Es;
152         struct mdoc_rs    Rs;
153 };
154
155 /* Names of macro args.  Index is enum mdocargt. */
156 extern  const char *const *mdoc_argnames;
157
158 void             mdoc_validate(struct roff_man *);