xref: /openbsd-src/usr.bin/mandoc/html.h (revision 5054e3e78af0749a9bb00ba9a024b3ee2d90290f)
1 /*	$Id: html.h,v 1.2 2009/10/27 21:40:07 schwarze Exp $ */
2 /*
3  * Copyright (c) 2008, 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 HTML_H
18 #define HTML_H
19 
20 __BEGIN_DECLS
21 
22 enum	htmltag {
23 	TAG_HTML,
24 	TAG_HEAD,
25 	TAG_BODY,
26 	TAG_META,
27 	TAG_TITLE,
28 	TAG_DIV,
29 	TAG_H1,
30 	TAG_H2,
31 	TAG_P,
32 	TAG_SPAN,
33 	TAG_LINK,
34 	TAG_BR,
35 	TAG_A,
36 	TAG_TABLE,
37 	TAG_COL,
38 	TAG_TR,
39 	TAG_TD,
40 	TAG_LI,
41 	TAG_UL,
42 	TAG_OL,
43 	TAG_BASE,
44 	TAG_MAX
45 };
46 
47 enum	htmlattr {
48 	ATTR_HTTPEQUIV,
49 	ATTR_CONTENT,
50 	ATTR_NAME,
51 	ATTR_REL,
52 	ATTR_HREF,
53 	ATTR_TYPE,
54 	ATTR_MEDIA,
55 	ATTR_CLASS,
56 	ATTR_STYLE,
57 	ATTR_WIDTH,
58 	ATTR_VALIGN,
59 	ATTR_TARGET,
60 	ATTR_ID,
61 	ATTR_MAX
62 };
63 
64 struct	tag {
65 	struct tag	 *next;
66 	enum htmltag	  tag;
67 };
68 
69 struct	ord {
70 	struct ord	 *next;
71 	const void	 *cookie;
72 	int		  pos;
73 };
74 
75 struct tagq {
76 	struct tag	 *head;
77 };
78 struct ordq {
79 	struct ord	 *head;
80 };
81 
82 struct	htmlpair {
83 	enum htmlattr	  key;
84 	const char	 *val;
85 };
86 
87 #define	PAIR_CLASS_INIT(p, v) \
88 	do { (p)->key = ATTR_CLASS; \
89 	(p)->val = (v); } while (/* CONSTCOND */ 0)
90 #define	PAIR_HREF_INIT(p, v) \
91 	do { (p)->key = ATTR_HREF; \
92 	(p)->val = (v); } while (/* CONSTCOND */ 0)
93 #define	PAIR_STYLE_INIT(p, h) \
94 	do { (p)->key = ATTR_STYLE; \
95 	(p)->val = (h)->buf; } while (/* CONSTCOND */ 0)
96 
97 struct	html {
98 	int		  flags;
99 #define	HTML_NOSPACE	 (1 << 0)
100 #define	HTML_NEWLINE	 (1 << 1)
101 #define	HTML_IGNDELIM	 (1 << 2)
102 	struct tagq	  tags;
103 	struct ordq	  ords;
104 	void		 *symtab;
105 	char		 *base;
106 	char		 *base_man;
107 	char		 *base_includes;
108 	char		 *style;
109 	char		  buf[BUFSIZ];
110 	size_t		  buflen;
111 };
112 
113 struct	roffsu;
114 
115 void		  print_gen_doctype(struct html *);
116 void		  print_gen_head(struct html *);
117 struct tag	 *print_otag(struct html *, enum htmltag,
118 				int, const struct htmlpair *);
119 void		  print_tagq(struct html *, const struct tag *);
120 void		  print_stagq(struct html *, const struct tag *);
121 void		  print_text(struct html *, const char *);
122 
123 void		  bufcat_su(struct html *, const char *,
124 			const struct roffsu *);
125 void		  buffmt_man(struct html *,
126 			const char *, const char *);
127 void		  buffmt_includes(struct html *, const char *);
128 void		  buffmt(struct html *, const char *, ...);
129 void		  bufcat(struct html *, const char *);
130 void		  bufcat_style(struct html *,
131 			const char *, const char *);
132 void		  bufncat(struct html *, const char *, size_t);
133 void		  bufinit(struct html *);
134 
135 __END_DECLS
136 
137 #endif /*!HTML_H*/
138