summaryrefslogtreecommitdiffstatshomepage
path: root/private.h
blob: eaa9c6f27e55366401170f8e0748b7f8134c8000 (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
/* $Id: private.h,v 1.6 2008/11/25 12:14:02 kristaps Exp $ */
/*
 * 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

struct	md_rbuf {
	int		 fd;
	char		*name;
	char		*buf;
	size_t		 bufsz;
	size_t		 line;
};

struct	md_mbuf {
	int		 fd;
	char		*name;
	char		*buf;
	size_t		 bufsz;
	size_t		 pos;
};

#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_An		 14
#define	ROFF_Li		 15
#define	ROFF_MAX	 16

#define	ROFF_NAMES			\
	{				\
	"\\\"",				\
	"Dd",				\
	"Dt",				\
	"Os",				\
	"Sh",				\
	"Ss",				\
	"Pp",				\
	"D1",				\
	"Dl",				\
	"Bd",				\
	"Ed",				\
	"Bl",				\
	"El",				\
	"It",				\
	"An",				\
	"Li",				\
	}

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

#define	ROFF_ARGNAMES 			\
	{ 				\
	"split",			\
	"nosplit",			\
	"ragged",			\
	"unfilled",			\
	"literal",			\
	"file",				\
	"offset",			\
	"bullet",			\
	"dash",				\
	"hyphen",			\
	"item",				\
	"enum",				\
	"tag",				\
	"diag",				\
	"hang",				\
	"ohang",			\
	"inset",			\
	"column",			\
	}

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

typedef	int	(*roffin)(int, int *, char **);
typedef	int	(*roffout)(int);
typedef	int	(*roffblkin)(int);
typedef	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 *,
			roffin, roffout, roffblkin, roffblkout);
int		  roff_engine(struct rofftree *, char *, size_t);
int		  roff_free(struct rofftree *, int);

__END_DECLS

#endif /*!PRIVATE_H*/