xref: /netbsd-src/external/bsd/mdocml/dist/man.h (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
1 /*	$Vendor-Id: man.h,v 1.41 2010/07/22 23:03:15 kristaps Exp $ */
2 /*
3  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 #ifndef MAN_H
18 #define MAN_H
19 
20 #include <time.h>
21 
22 enum	mant {
23 	MAN_br = 0,
24 	MAN_TH,
25 	MAN_SH,
26 	MAN_SS,
27 	MAN_TP,
28 	MAN_LP,
29 	MAN_PP,
30 	MAN_P,
31 	MAN_IP,
32 	MAN_HP,
33 	MAN_SM,
34 	MAN_SB,
35 	MAN_BI,
36 	MAN_IB,
37 	MAN_BR,
38 	MAN_RB,
39 	MAN_R,
40 	MAN_B,
41 	MAN_I,
42 	MAN_IR,
43 	MAN_RI,
44 	MAN_na,
45 	MAN_i,
46 	MAN_sp,
47 	MAN_nf,
48 	MAN_fi,
49 	MAN_r,
50 	MAN_RE,
51 	MAN_RS,
52 	MAN_DT,
53 	MAN_UC,
54 	MAN_PD,
55 	MAN_Sp,
56 	MAN_Vb,
57 	MAN_Ve,
58 	MAN_AT,
59 	MAN_in,
60 	MAN_MAX
61 };
62 
63 enum	man_type {
64 	MAN_TEXT,
65 	MAN_ELEM,
66 	MAN_ROOT,
67 	MAN_BLOCK,
68 	MAN_HEAD,
69 	MAN_BODY
70 };
71 
72 struct	man_meta {
73 	char		*msec;
74 	time_t		 date;
75 	char		*rawdate;
76 	char		*vol;
77 	char		*title;
78 	char		*source;
79 };
80 
81 struct	man_node {
82 	struct man_node	*parent;
83 	struct man_node	*child;
84 	struct man_node	*next;
85 	struct man_node	*prev;
86 	int		 nchild;
87 	int		 line;
88 	int		 pos;
89 	enum mant	 tok;
90 	int		 flags;
91 #define	MAN_VALID	(1 << 0)
92 #define	MAN_ACTED	(1 << 1)
93 #define	MAN_EOS		(1 << 2)
94 	enum man_type	 type;
95 	char		*string;
96 	struct man_node	*head;
97 	struct man_node	*body;
98 };
99 
100 #define	MAN_IGN_MACRO	 (1 << 0)
101 #define	MAN_IGN_ESCAPE	 (1 << 2)
102 
103 extern	const char *const *man_macronames;
104 
105 __BEGIN_DECLS
106 
107 struct	man;
108 
109 void	 	  man_free(struct man *);
110 struct	man	 *man_alloc(struct regset *, void *, int, mandocmsg);
111 void		  man_reset(struct man *);
112 int	 	  man_parseln(struct man *, int, char *, int);
113 int		  man_endparse(struct man *);
114 
115 const struct man_node *man_node(const struct man *);
116 const struct man_meta *man_meta(const struct man *);
117 
118 __END_DECLS
119 
120 #endif /*!MAN_H*/
121