summaryrefslogtreecommitdiffstats
path: root/private.h
blob: 93136610bb026fd1f5facff372f2ae43cfaa5d5e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
/* $Id$ */
/*
 * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */
#ifndef PRIVATE_H
#define PRIVATE_H

/* Input buffer (input read into buffer, then filled when empty). */
struct	md_rbuf {
	int		 fd;		/* Open descriptor. */
	char		*name;		/* Name of file. */
	char		*buf;		/* Buffer. */
	size_t		 bufsz;		/* Size of buffer. */
	size_t		 line;		/* Current line number. */
};

/* Output buffer (output buffered until full, then flushed). */
struct	md_mbuf {
	int		 fd;		/* Open descriptor. */
	char		*name;		/* Name of file. */
	char		*buf;		/* Buffer. */
	size_t		 bufsz;		/* Size of buffer. */
	size_t		 pos;		/* Position in buffer. */
};

#define	ROFF___	 	 0
#define	ROFF_Dd		 1
#define	ROFF_Dt		 2
#define	ROFF_Os		 3
#define	ROFF_Sh		 4
#define	ROFF_Ss		 5
#define	ROFF_Pp		 6
#define	ROFF_D1		 7
#define	ROFF_Dl		 8
#define	ROFF_Bd		 9
#define	ROFF_Ed		 10
#define	ROFF_Bl		 11
#define	ROFF_El		 12
#define	ROFF_It		 13
#define	ROFF_Ad		 14
#define	ROFF_An		 15
#define	ROFF_Ar		 16
#define	ROFF_Cd		 17
#define	ROFF_Cm		 18
#define	ROFF_Dv		 19
#define	ROFF_Er		 20
#define	ROFF_Ev		 21
#define	ROFF_Ex		 22
#define	ROFF_Fa		 23
#define	ROFF_Fd		 24
#define	ROFF_Fl		 25
#define	ROFF_Fn		 26
#define	ROFF_Ft		 27
#define	ROFF_Ic		 28
#define	ROFF_In		 29
#define	ROFF_Li		 30
#define	ROFF_Nd		 31
#define	ROFF_Nm		 32
#define	ROFF_Op		 33
#define	ROFF_Ot		 34
#define	ROFF_Pa		 35
#define	ROFF_Rv		 36
#define	ROFF_St		 37
#define	ROFF_Va		 38
#define	ROFF_Vt		 39
#define	ROFF_Xr		 40
#define	ROFF__A		 41
#define	ROFF__B		 42
#define	ROFF__D		 43
#define	ROFF__I		 44
#define	ROFF__J		 45
#define	ROFF__N		 46
#define	ROFF__O		 47
#define	ROFF__P		 48
#define	ROFF__R		 49
#define	ROFF__T		 50
#define	ROFF__V		 51
#define ROFF_Ac		 52
#define ROFF_Ao		 53
#define ROFF_Aq		 54
#define ROFF_At		 55
#define ROFF_Bc		 56
#define ROFF_Bf		 57
#define ROFF_Bo		 58
#define ROFF_Bq		 59
#define ROFF_Bsx	 60
#define ROFF_Bx		 61
#define ROFF_Db		 62
#define ROFF_Dc		 63
#define ROFF_Do		 64
#define ROFF_Dq		 65
#define ROFF_Ec		 66
#define ROFF_Ef		 67
#define ROFF_Em		 68
#define ROFF_Eo		 69
#define ROFF_Fx		 70
#define ROFF_Ms		 71
#define ROFF_No		 72
#define ROFF_Ns		 73
#define ROFF_Nx		 74
#define ROFF_Ox		 75
#define ROFF_Pc		 76
#define ROFF_Pf		 77
#define ROFF_Po		 78
#define ROFF_Pq		 79
#define ROFF_Qc		 80
#define ROFF_Ql		 81
#define ROFF_Qo		 82
#define ROFF_Qq		 83
#define ROFF_Re		 84
#define ROFF_Rs		 85
#define ROFF_Sc		 86
#define ROFF_So		 87
#define ROFF_Sq		 88
#define ROFF_Sm		 89
#define ROFF_Sx		 90
#define ROFF_Sy		 91
#define ROFF_Tn		 92
#define ROFF_Ux		 93
#define ROFF_Xc		 94
#define ROFF_Xo		 95
#define	ROFF_Fo		 96
#define	ROFF_Fc		 97
#define	ROFF_Oo		 98
#define	ROFF_Oc		 99
#define	ROFF_Bk		 100
#define	ROFF_Ek		 101
#define	ROFF_MAX	 102

#define	ROFF_Split	 0
#define	ROFF_Nosplit	 1
#define	ROFF_Ragged	 2
#define	ROFF_Unfilled	 3
#define	ROFF_Literal	 4
#define	ROFF_File	 5
#define	ROFF_Offset	 6
#define	ROFF_Bullet	 7
#define	ROFF_Dash	 8
#define	ROFF_Hyphen	 9
#define	ROFF_Item	 10
#define	ROFF_Enum	 11
#define	ROFF_Tag	 12
#define	ROFF_Diag	 13
#define	ROFF_Hang	 14
#define	ROFF_Ohang	 15
#define	ROFF_Inset	 16
#define	ROFF_Column	 17
#define	ROFF_Width	 18
#define	ROFF_Compact	 19
#define	ROFF_Std	 20
#define ROFF_p1003_1_88	 21
#define ROFF_p1003_1_90	 22
#define ROFF_p1003_1_96	 23
#define ROFF_p1003_1_2001 24
#define ROFF_p1003_1_2004 25
#define ROFF_p1003_1	 26
#define ROFF_p1003_1b	 27
#define ROFF_p1003_1b_93 28
#define ROFF_p1003_1c_95 29
#define ROFF_p1003_1g_2000 30
#define ROFF_p1003_2_92	 31
#define ROFF_p1387_2_95	 32
#define ROFF_p1003_2	 33
#define ROFF_p1387_2	 34
#define ROFF_isoC_90	 35
#define ROFF_isoC_amd1	 36
#define ROFF_isoC_tcor1	 37
#define ROFF_isoC_tcor2	 38
#define ROFF_isoC_99	 39
#define ROFF_ansiC	 40
#define ROFF_ansiC_89	 41
#define ROFF_ansiC_99	 42
#define ROFF_ieee754	 43
#define ROFF_iso8802_3	 44
#define ROFF_xpg3	 45
#define ROFF_xpg4	 46
#define ROFF_xpg4_2	 47
#define ROFF_xpg4_3	 48
#define ROFF_xbd5	 49
#define ROFF_xcu5	 50
#define ROFF_xsh5	 51
#define ROFF_xns5	 52
#define ROFF_xns5_2d2_0	 53
#define ROFF_xcurses4_2	 54
#define ROFF_susv2	 55
#define ROFF_susv3	 56
#define ROFF_svid4	 57
#define	ROFF_Filled	 58
#define	ROFF_Words	 59
#define	ROFF_ARGMAX	 60

extern	const char *const *toknames;
extern	const char *const *tokargnames;

enum	roffmsg { ROFF_WARN, ROFF_ERROR };

struct	roffcb {
	void	(*roffmsg)(const struct md_args *, enum roffmsg, 
			const char *, const char *, const char *, 
			int, char *);
	int	(*roffhead)(void);
	int	(*rofftail)(void);
	int	(*roffin)(int, int *, char **);
	int	(*roffout)(int);
	int	(*roffblkin)(int);
	int	(*roffblkout)(int);
	int	(*roffspecial)(int);
};

__BEGIN_DECLS

typedef	void  (*(*md_init)(const struct md_args *, 
			struct md_mbuf *, const struct md_rbuf *));
typedef	int	(*md_line)(void *, char *, size_t);
typedef	int	(*md_exit)(void *, int);

void		 *md_init_html4_strict(const struct md_args *,
			struct md_mbuf *, const struct md_rbuf *);
int		  md_line_html4_strict(void *, char *, size_t);
int		  md_exit_html4_strict(void *, int);

void		 *md_init_dummy(const struct md_args *,
			struct md_mbuf *, const struct md_rbuf *);
int		  md_line_dummy(void *, char *, size_t);
int		  md_exit_dummy(void *, int);

int	 	  md_buf_puts(struct md_mbuf *, const char *, size_t);
int	 	  md_buf_putchar(struct md_mbuf *, char);
int	 	  md_buf_putstring(struct md_mbuf *, const char *);

struct	rofftree;

struct	rofftree *roff_alloc(const struct md_args *, 
			struct md_mbuf *, const struct md_rbuf *,
			const struct roffcb *);
int		  roff_engine(struct rofftree *, char *, size_t);
int		  roff_free(struct rofftree *, int);

__END_DECLS

#endif /*!PRIVATE_H*/