xref: /minix3/external/bsd/mdocml/dist/man.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	Id: man.h,v 1.62 2013/10/17 20:54:58 schwarze Exp  */
2d65f6f70SBen Gras /*
392395e9cSLionel Sambuc  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4d65f6f70SBen Gras  *
5d65f6f70SBen Gras  * Permission to use, copy, modify, and distribute this software for any
6d65f6f70SBen Gras  * purpose with or without fee is hereby granted, provided that the above
7d65f6f70SBen Gras  * copyright notice and this permission notice appear in all copies.
8d65f6f70SBen Gras  *
9d65f6f70SBen Gras  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10d65f6f70SBen Gras  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11d65f6f70SBen Gras  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12d65f6f70SBen Gras  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13d65f6f70SBen Gras  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14d65f6f70SBen Gras  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15d65f6f70SBen Gras  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16d65f6f70SBen Gras  */
17d65f6f70SBen Gras #ifndef MAN_H
18d65f6f70SBen Gras #define MAN_H
19d65f6f70SBen Gras 
20d65f6f70SBen Gras enum	mant {
21d65f6f70SBen Gras 	MAN_br = 0,
22d65f6f70SBen Gras 	MAN_TH,
23d65f6f70SBen Gras 	MAN_SH,
24d65f6f70SBen Gras 	MAN_SS,
25d65f6f70SBen Gras 	MAN_TP,
26d65f6f70SBen Gras 	MAN_LP,
27d65f6f70SBen Gras 	MAN_PP,
28d65f6f70SBen Gras 	MAN_P,
29d65f6f70SBen Gras 	MAN_IP,
30d65f6f70SBen Gras 	MAN_HP,
31d65f6f70SBen Gras 	MAN_SM,
32d65f6f70SBen Gras 	MAN_SB,
33d65f6f70SBen Gras 	MAN_BI,
34d65f6f70SBen Gras 	MAN_IB,
35d65f6f70SBen Gras 	MAN_BR,
36d65f6f70SBen Gras 	MAN_RB,
37d65f6f70SBen Gras 	MAN_R,
38d65f6f70SBen Gras 	MAN_B,
39d65f6f70SBen Gras 	MAN_I,
40d65f6f70SBen Gras 	MAN_IR,
41d65f6f70SBen Gras 	MAN_RI,
42d65f6f70SBen Gras 	MAN_na,
43d65f6f70SBen Gras 	MAN_sp,
44d65f6f70SBen Gras 	MAN_nf,
45d65f6f70SBen Gras 	MAN_fi,
46d65f6f70SBen Gras 	MAN_RE,
47d65f6f70SBen Gras 	MAN_RS,
48d65f6f70SBen Gras 	MAN_DT,
49d65f6f70SBen Gras 	MAN_UC,
50d65f6f70SBen Gras 	MAN_PD,
51d65f6f70SBen Gras 	MAN_AT,
52d65f6f70SBen Gras 	MAN_in,
53d65f6f70SBen Gras 	MAN_ft,
5492395e9cSLionel Sambuc 	MAN_OP,
55*0a6a1f1dSLionel Sambuc 	MAN_EX,
56*0a6a1f1dSLionel Sambuc 	MAN_EE,
57*0a6a1f1dSLionel Sambuc 	MAN_UR,
58*0a6a1f1dSLionel Sambuc 	MAN_UE,
59d65f6f70SBen Gras 	MAN_MAX
60d65f6f70SBen Gras };
61d65f6f70SBen Gras 
62d65f6f70SBen Gras enum	man_type {
63d65f6f70SBen Gras 	MAN_TEXT,
64d65f6f70SBen Gras 	MAN_ELEM,
65d65f6f70SBen Gras 	MAN_ROOT,
66d65f6f70SBen Gras 	MAN_BLOCK,
67d65f6f70SBen Gras 	MAN_HEAD,
68d65f6f70SBen Gras 	MAN_BODY,
6992395e9cSLionel Sambuc 	MAN_TAIL,
7092395e9cSLionel Sambuc 	MAN_TBL,
7192395e9cSLionel Sambuc 	MAN_EQN
72d65f6f70SBen Gras };
73d65f6f70SBen Gras 
74d65f6f70SBen Gras struct	man_meta {
75d65f6f70SBen Gras 	char		*msec; /* `TH' section (1, 3p, etc.) */
7692395e9cSLionel Sambuc 	char		*date; /* `TH' normalised date */
77d65f6f70SBen Gras 	char		*vol; /* `TH' volume */
78d65f6f70SBen Gras 	char		*title; /* `TH' title (e.g., FOO) */
79d65f6f70SBen Gras 	char		*source; /* `TH' source (e.g., GNU) */
80d65f6f70SBen Gras };
81d65f6f70SBen Gras 
82d65f6f70SBen Gras struct	man_node {
83d65f6f70SBen Gras 	struct man_node	*parent; /* parent AST node */
84d65f6f70SBen Gras 	struct man_node	*child; /* first child AST node */
85d65f6f70SBen Gras 	struct man_node	*next; /* sibling AST node */
86d65f6f70SBen Gras 	struct man_node	*prev; /* prior sibling AST node */
87d65f6f70SBen Gras 	int		 nchild; /* number children */
88d65f6f70SBen Gras 	int		 line;
89d65f6f70SBen Gras 	int		 pos;
90d65f6f70SBen Gras 	enum mant	 tok; /* tok or MAN__MAX if none */
91d65f6f70SBen Gras 	int		 flags;
92d65f6f70SBen Gras #define	MAN_VALID	(1 << 0) /* has been validated */
93d65f6f70SBen Gras #define	MAN_EOS		(1 << 2) /* at sentence boundary */
9492395e9cSLionel Sambuc #define	MAN_LINE	(1 << 3) /* first macro/text on line */
95d65f6f70SBen Gras 	enum man_type	 type; /* AST node type */
96d65f6f70SBen Gras 	char		*string; /* TEXT node argument */
97d65f6f70SBen Gras 	struct man_node	*head; /* BLOCK node HEAD ptr */
9892395e9cSLionel Sambuc 	struct man_node *tail; /* BLOCK node TAIL ptr */
99d65f6f70SBen Gras 	struct man_node	*body; /* BLOCK node BODY ptr */
100d65f6f70SBen Gras 	const struct tbl_span *span; /* TBL */
10192395e9cSLionel Sambuc 	const struct eqn *eqn; /* EQN */
102d65f6f70SBen Gras };
103d65f6f70SBen Gras 
10492395e9cSLionel Sambuc /* Names of macros.  Index is enum mant. */
105d65f6f70SBen Gras extern	const char *const *man_macronames;
106d65f6f70SBen Gras 
107d65f6f70SBen Gras __BEGIN_DECLS
108d65f6f70SBen Gras 
109d65f6f70SBen Gras struct	man;
110d65f6f70SBen Gras 
111d65f6f70SBen Gras const struct man_node *man_node(const struct man *);
112d65f6f70SBen Gras const struct man_meta *man_meta(const struct man *);
11392395e9cSLionel Sambuc const struct mparse   *man_mparse(const struct man *);
114d65f6f70SBen Gras 
115d65f6f70SBen Gras __END_DECLS
116d65f6f70SBen Gras 
117d65f6f70SBen Gras #endif /*!MAN_H*/
118