newsyslog: Sync with FreeBSD.
[dragonfly.git] / usr.bin / mandoc / man.h
1 /*      $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*/