1241675Suqs/*	$Id: html.h,v 1.47 2011/10/05 21:35:17 kristaps Exp $ */
2241675Suqs/*
3241675Suqs * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4241675Suqs *
5241675Suqs * Permission to use, copy, modify, and distribute this software for any
6241675Suqs * purpose with or without fee is hereby granted, provided that the above
7241675Suqs * copyright notice and this permission notice appear in all copies.
8241675Suqs *
9241675Suqs * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10241675Suqs * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11241675Suqs * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12241675Suqs * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13241675Suqs * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14241675Suqs * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15241675Suqs * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16241675Suqs */
17241675Suqs#ifndef HTML_H
18241675Suqs#define HTML_H
19241675Suqs
20241675Suqs__BEGIN_DECLS
21241675Suqs
22241675Suqsenum	htmltag {
23241675Suqs	TAG_HTML,
24241675Suqs	TAG_HEAD,
25241675Suqs	TAG_BODY,
26241675Suqs	TAG_META,
27241675Suqs	TAG_TITLE,
28241675Suqs	TAG_DIV,
29241675Suqs	TAG_H1,
30241675Suqs	TAG_H2,
31241675Suqs	TAG_SPAN,
32241675Suqs	TAG_LINK,
33241675Suqs	TAG_BR,
34241675Suqs	TAG_A,
35241675Suqs	TAG_TABLE,
36241675Suqs	TAG_TBODY,
37241675Suqs	TAG_COL,
38241675Suqs	TAG_TR,
39241675Suqs	TAG_TD,
40241675Suqs	TAG_LI,
41241675Suqs	TAG_UL,
42241675Suqs	TAG_OL,
43241675Suqs	TAG_DL,
44241675Suqs	TAG_DT,
45241675Suqs	TAG_DD,
46241675Suqs	TAG_BLOCKQUOTE,
47241675Suqs	TAG_P,
48241675Suqs	TAG_PRE,
49241675Suqs	TAG_B,
50241675Suqs	TAG_I,
51241675Suqs	TAG_CODE,
52241675Suqs	TAG_SMALL,
53241675Suqs	TAG_MAX
54241675Suqs};
55241675Suqs
56241675Suqsenum	htmlattr {
57241675Suqs	ATTR_HTTPEQUIV,
58241675Suqs	ATTR_CONTENT,
59241675Suqs	ATTR_NAME,
60241675Suqs	ATTR_REL,
61241675Suqs	ATTR_HREF,
62241675Suqs	ATTR_TYPE,
63241675Suqs	ATTR_MEDIA,
64241675Suqs	ATTR_CLASS,
65241675Suqs	ATTR_STYLE,
66241675Suqs	ATTR_WIDTH,
67241675Suqs	ATTR_ID,
68241675Suqs	ATTR_SUMMARY,
69241675Suqs	ATTR_ALIGN,
70241675Suqs	ATTR_COLSPAN,
71241675Suqs	ATTR_MAX
72241675Suqs};
73241675Suqs
74241675Suqsenum	htmlfont {
75241675Suqs	HTMLFONT_NONE = 0,
76241675Suqs	HTMLFONT_BOLD,
77241675Suqs	HTMLFONT_ITALIC,
78241675Suqs	HTMLFONT_MAX
79241675Suqs};
80241675Suqs
81241675Suqsstruct	tag {
82241675Suqs	struct tag	 *next;
83241675Suqs	enum htmltag	  tag;
84241675Suqs};
85241675Suqs
86241675Suqsstruct tagq {
87241675Suqs	struct tag	 *head;
88241675Suqs};
89241675Suqs
90241675Suqsstruct	htmlpair {
91241675Suqs	enum htmlattr	  key;
92241675Suqs	const char	 *val;
93241675Suqs};
94241675Suqs
95241675Suqs#define	PAIR_INIT(p, t, v) \
96241675Suqs	do { \
97241675Suqs		(p)->key = (t); \
98241675Suqs		(p)->val = (v); \
99241675Suqs	} while (/* CONSTCOND */ 0)
100241675Suqs
101241675Suqs#define	PAIR_ID_INIT(p, v)	PAIR_INIT(p, ATTR_ID, v)
102241675Suqs#define	PAIR_CLASS_INIT(p, v)	PAIR_INIT(p, ATTR_CLASS, v)
103241675Suqs#define	PAIR_HREF_INIT(p, v)	PAIR_INIT(p, ATTR_HREF, v)
104241675Suqs#define	PAIR_STYLE_INIT(p, h)	PAIR_INIT(p, ATTR_STYLE, (h)->buf)
105241675Suqs#define	PAIR_SUMMARY_INIT(p, v)	PAIR_INIT(p, ATTR_SUMMARY, v)
106241675Suqs
107241675Suqsenum	htmltype {
108241675Suqs	HTML_HTML_4_01_STRICT,
109241675Suqs	HTML_XHTML_1_0_STRICT
110241675Suqs};
111241675Suqs
112241675Suqsstruct	html {
113241675Suqs	int		  flags;
114241675Suqs#define	HTML_NOSPACE	 (1 << 0) /* suppress next space */
115241675Suqs#define	HTML_IGNDELIM	 (1 << 1)
116241675Suqs#define	HTML_KEEP	 (1 << 2)
117241675Suqs#define	HTML_PREKEEP	 (1 << 3)
118241675Suqs#define	HTML_NONOSPACE	 (1 << 4) /* never add spaces */
119241675Suqs#define	HTML_LITERAL	 (1 << 5) /* literal (e.g., <PRE>) context */
120241675Suqs	struct tagq	  tags; /* stack of open tags */
121241675Suqs	struct rofftbl	  tbl; /* current table */
122241675Suqs	struct tag	 *tblt; /* current open table scope */
123241675Suqs	struct mchars	 *symtab; /* character-escapes */
124241675Suqs	char		 *base_man; /* base for manpage href */
125241675Suqs	char		 *base_includes; /* base for include href */
126241675Suqs	char		 *style; /* style-sheet URI */
127241675Suqs	char		  buf[BUFSIZ]; /* see bufcat and friends */
128241675Suqs	size_t		  buflen;
129241675Suqs	struct tag	 *metaf; /* current open font scope */
130241675Suqs	enum htmlfont	  metal; /* last used font */
131241675Suqs	enum htmlfont	  metac; /* current font mode */
132241675Suqs	enum htmltype	  type; /* output media type */
133241675Suqs	int		  oflags; /* output options */
134241675Suqs#define	HTML_FRAGMENT	 (1 << 0) /* don't emit HTML/HEAD/BODY */
135241675Suqs};
136241675Suqs
137241675Suqsvoid		  print_gen_decls(struct html *);
138241675Suqsvoid		  print_gen_head(struct html *);
139241675Suqsstruct tag	 *print_otag(struct html *, enum htmltag,
140241675Suqs				int, const struct htmlpair *);
141241675Suqsvoid		  print_tagq(struct html *, const struct tag *);
142241675Suqsvoid		  print_stagq(struct html *, const struct tag *);
143241675Suqsvoid		  print_text(struct html *, const char *);
144241675Suqsvoid		  print_tblclose(struct html *);
145241675Suqsvoid		  print_tbl(struct html *, const struct tbl_span *);
146241675Suqsvoid		  print_eqn(struct html *, const struct eqn *);
147241675Suqs
148241675Suqsvoid		  bufcat_fmt(struct html *, const char *, ...);
149241675Suqsvoid		  bufcat(struct html *, const char *);
150241675Suqsvoid		  bufcat_id(struct html *, const char *);
151241675Suqsvoid		  bufcat_style(struct html *,
152241675Suqs			const char *, const char *);
153241675Suqsvoid		  bufcat_su(struct html *, const char *,
154241675Suqs			const struct roffsu *);
155241675Suqsvoid		  bufinit(struct html *);
156241675Suqsvoid		  buffmt_man(struct html *,
157241675Suqs			const char *, const char *);
158241675Suqsvoid		  buffmt_includes(struct html *, const char *);
159241675Suqs
160241675Suqsint		  html_strlen(const char *);
161241675Suqs
162241675Suqs__END_DECLS
163241675Suqs
164241675Suqs#endif /*!HTML_H*/
165