summaryrefslogtreecommitdiffstats
path: root/private.h
blob: dd48688260f72cd800832e38e5ea6c14bbfcebf1 (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
/* $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		 15
#define	ROFF_An		 16
#define	ROFF_Ar		 17
#define	ROFF_Cd		 18
#define	ROFF_Cm		 19
#define	ROFF_Dv		 20
#define	ROFF_Er		 21
#define	ROFF_Ev		 22
#define	ROFF_Ex		 23
#define	ROFF_Fa		 24
#define	ROFF_Fd		 25
#define	ROFF_Fl		 26
#define	ROFF_Fn		 27
#define	ROFF_Ft		 28
#define	ROFF_Ic		 29
#define	ROFF_In		 30
#define	ROFF_Li		 31
#define	ROFF_Nd		 32
#define	ROFF_Nm		 33
#define	ROFF_Op		 34
#define	ROFF_Ot		 35
#define	ROFF_Pa		 36
#define	ROFF_Rv		 37
#define	ROFF_St		 38
#define	ROFF_Va		 39
#define	ROFF_Vt		 40
#define	ROFF_Xr		 41
#define	ROFF__A		 42
#define	ROFF__B		 43
#define	ROFF__D		 44
#define	ROFF__I		 45
#define	ROFF__J		 46
#define	ROFF__N		 47
#define	ROFF__O		 48
#define	ROFF__P		 49
#define	ROFF__R		 50
#define	ROFF__T		 51
#define	ROFF__V		 52
#define ROFF_Ac		 53
#define ROFF_Ao		 54
#define ROFF_Aq		 55
#define ROFF_At		 56
#define ROFF_Bc		 57
#define ROFF_Bf		 58
#define ROFF_Bo		 59
#define ROFF_Bq		 60
#define ROFF_Bsx	 61
#define ROFF_Bx		 62
#define ROFF_Db		 63
#define ROFF_Dc		 64
#define ROFF_Do		 65
#define ROFF_Dq		 66
#define ROFF_Ec		 67
#define ROFF_Ef		 68
#define ROFF_Em		 60
#define ROFF_Eo		 70
#define ROFF_Fx		 71
#define ROFF_Ms		 72
#define ROFF_No		 73
#define ROFF_Ns		 74
#define ROFF_Nx		 75
#define ROFF_Ox		 76
#define ROFF_Pc		 77
#define ROFF_Pf		 78
#define ROFF_Po		 79
#define ROFF_Pq		 80
#define ROFF_Qc		 81
#define ROFF_Ql		 82
#define ROFF_Qo		 83
#define ROFF_Qq		 84
#define ROFF_Re		 85
#define ROFF_Rs		 86
#define ROFF_Sc		 87
#define ROFF_So		 88
#define ROFF_Sq		 89
#define ROFF_Sm		 90
#define ROFF_Sx		 91
#define ROFF_Sy		 92
#define ROFF_Tn		 93
#define ROFF_Ux		 94
#define ROFF_Xc		 95
#define ROFF_Xo		 96
#define	ROFF_MAX	 97

#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_ARGMAX	 20

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

/* FIXME: have a md_roff with all necessary parameters. */

/* FIXME: have roffbegin and roffend for doc head/foot. */

struct	roffcb {
	int	(*roffhead)(void);
	int	(*rofftail)(void);
	int	(*roffin)(int, int *, char **);
	int	(*roffout)(int);
	int	(*roffblkin)(int);
	int	(*roffblkout)(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*/