xref: /openbsd-src/usr.bin/mandoc/man.h (revision cd1eb269cafb12c415be1749cd4a4b5422710415)
1 /*	$Id: man.h,v 1.15 2010/04/25 16:32:19 schwarze 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_if,
65 	MAN_ie,
66 	MAN_el,
67 	MAN_MAX,
68 };
69 
70 enum	man_type {
71 	MAN_TEXT,
72 	MAN_ELEM,
73 	MAN_ROOT,
74 	MAN_BLOCK,
75 	MAN_HEAD,
76 	MAN_BODY
77 };
78 
79 struct	man_meta {
80 	int		 msec;
81 	time_t		 date;
82 	char		*vol;
83 	char		*title;
84 	char		*source;
85 };
86 
87 struct	man_node {
88 	struct man_node	*parent;
89 	struct man_node	*child;
90 	struct man_node	*next;
91 	struct man_node	*prev;
92 	int		 nchild;
93 	int		 line;
94 	int		 pos;
95 	enum mant	 tok;
96 	int		 flags;
97 #define	MAN_VALID	(1 << 0)
98 #define	MAN_ACTED	(1 << 1)
99 #define	MAN_USE 	(1 << 2)
100 	enum man_type	 type;
101 	char		*string;
102 	struct man_node	*head;
103 	struct man_node	*body;
104 };
105 
106 #define	MAN_IGN_MACRO	 (1 << 0)
107 #define	MAN_IGN_CHARS	 (1 << 1)
108 #define	MAN_IGN_ESCAPE	 (1 << 2)
109 
110 extern	const char *const *man_macronames;
111 
112 struct	man_cb {
113 	int	(*man_warn)(void *, int, int, const char *);
114 	int	(*man_err)(void *, int, int, const char *);
115 };
116 
117 __BEGIN_DECLS
118 
119 struct	man;
120 
121 void	 	  man_free(struct man *);
122 struct	man	 *man_alloc(void *, int, const struct man_cb *);
123 void		  man_reset(struct man *);
124 int	 	  man_parseln(struct man *, int, char *buf);
125 int		  man_endparse(struct man *);
126 
127 const struct man_node *man_node(const struct man *);
128 const struct man_meta *man_meta(const struct man *);
129 
130 __END_DECLS
131 
132 #endif /*!MAN_H*/
133