xref: /netbsd-src/external/bsd/mdocml/dist/man.h (revision bbde328be4e75ea9ad02e9715ea13ca54b797ada)
1 /*	$Vendor-Id: man.h,v 1.27 2010/03/27 10:13:16 kristaps Exp $ */
2 /*
3  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
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_de,
59 	MAN_dei,
60 	MAN_am,
61 	MAN_ami,
62 	MAN_ig,
63 	MAN_dot,
64 	MAN_MAX
65 };
66 
67 enum	man_type {
68 	MAN_TEXT,
69 	MAN_ELEM,
70 	MAN_ROOT,
71 	MAN_BLOCK,
72 	MAN_HEAD,
73 	MAN_BODY
74 };
75 
76 struct	man_meta {
77 	int		 msec;
78 	time_t		 date;
79 	char		*vol;
80 	char		*title;
81 	char		*source;
82 };
83 
84 struct	man_node {
85 	struct man_node	*parent;
86 	struct man_node	*child;
87 	struct man_node	*next;
88 	struct man_node	*prev;
89 	int		 nchild;
90 	int		 line;
91 	int		 pos;
92 	enum mant	 tok;
93 	int		 flags;
94 #define	MAN_VALID	(1 << 0)
95 #define	MAN_ACTED	(1 << 1)
96 	enum man_type	 type;
97 	char		*string;
98 	struct man_node	*head;
99 	struct man_node	*body;
100 };
101 
102 #define	MAN_IGN_MACRO	 (1 << 0)
103 #define	MAN_IGN_CHARS	 (1 << 1)
104 #define	MAN_IGN_ESCAPE	 (1 << 2)
105 
106 extern	const char *const *man_macronames;
107 
108 struct	man_cb {
109 	int	(*man_warn)(void *, int, int, const char *);
110 	int	(*man_err)(void *, int, int, const char *);
111 };
112 
113 __BEGIN_DECLS
114 
115 struct	man;
116 
117 void	 	  man_free(struct man *);
118 struct	man	 *man_alloc(void *, int, const struct man_cb *);
119 void		  man_reset(struct man *);
120 int	 	  man_parseln(struct man *, int, char *buf);
121 int		  man_endparse(struct man *);
122 
123 const struct man_node *man_node(const struct man *);
124 const struct man_meta *man_meta(const struct man *);
125 
126 __END_DECLS
127 
128 #endif /*!MAN_H*/
129