fstat - Fix path construction for "wd".
[dragonfly.git] / usr.bin / mandoc / html.h
1 /*      $Id: html.h,v 1.22 2010/01/29 14:39:38 kristaps 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_SPAN,
32         TAG_LINK,
33         TAG_BR,
34         TAG_A,
35         TAG_TABLE,
36         TAG_COL,
37         TAG_TR,
38         TAG_TD,
39         TAG_LI,
40         TAG_UL,
41         TAG_OL,
42         TAG_MAX
43 };
44
45 enum    htmlattr {
46         ATTR_HTTPEQUIV,
47         ATTR_CONTENT,
48         ATTR_NAME,
49         ATTR_REL,
50         ATTR_HREF,
51         ATTR_TYPE,
52         ATTR_MEDIA,
53         ATTR_CLASS,
54         ATTR_STYLE,
55         ATTR_WIDTH,
56         ATTR_VALIGN,
57         ATTR_TARGET,
58         ATTR_ID,
59         ATTR_SUMMARY,
60         ATTR_MAX
61 };
62
63 enum    htmlfont {
64         HTMLFONT_NONE = 0,
65         HTMLFONT_BOLD,
66         HTMLFONT_ITALIC,
67         HTMLFONT_MAX
68 };
69
70 struct  tag {
71         struct tag       *next;
72         enum htmltag      tag;
73 };
74
75 struct  ord {
76         struct ord       *next;
77         const void       *cookie;
78         int               pos;
79 };
80
81 struct tagq {
82         struct tag       *head;
83 };
84 struct ordq {
85         struct ord       *head;
86 };
87
88 struct  htmlpair {
89         enum htmlattr     key;
90         const char       *val;
91 };
92
93 #define PAIR_CLASS_INIT(p, v) \
94         do { (p)->key = ATTR_CLASS; \
95         (p)->val = (v); } while (/* CONSTCOND */ 0)
96 #define PAIR_HREF_INIT(p, v) \
97         do { (p)->key = ATTR_HREF; \
98         (p)->val = (v); } while (/* CONSTCOND */ 0)
99 #define PAIR_STYLE_INIT(p, h) \
100         do { (p)->key = ATTR_STYLE; \
101         (p)->val = (h)->buf; } while (/* CONSTCOND */ 0)
102 #define PAIR_SUMMARY_INIT(p, v) \
103         do { (p)->key = ATTR_SUMMARY; \
104         (p)->val = (v); } while (/* CONSTCOND */ 0)
105
106 enum    htmltype {
107         HTML_HTML_4_01_STRICT,
108         HTML_XHTML_1_0_STRICT
109 };
110
111 struct  html {
112         int               flags;
113 #define HTML_NOSPACE     (1 << 0)
114 #define HTML_IGNDELIM    (1 << 2)
115         struct tagq       tags;
116         struct ordq       ords;
117         void             *symtab;
118         char             *base;
119         char             *base_man;
120         char             *base_includes;
121         char             *style;
122         char              buf[BUFSIZ];
123         size_t            buflen;
124         struct tag       *metaf;
125         enum htmlfont     metal;
126         enum htmlfont     metac;
127         enum htmltype     type;
128 };
129
130 struct  roffsu;
131
132 void              print_gen_decls(struct html *);
133 void              print_gen_head(struct html *);
134 struct tag       *print_ofont(struct html *, enum htmlfont);
135 struct tag       *print_otag(struct html *, enum htmltag,
136                                 int, const struct htmlpair *);
137 void              print_tagq(struct html *, const struct tag *);
138 void              print_stagq(struct html *, const struct tag *);
139 void              print_text(struct html *, const char *);
140
141 void              bufcat_su(struct html *, const char *,
142                         const struct roffsu *);
143 void              buffmt_man(struct html *,
144                         const char *, const char *);
145 void              buffmt_includes(struct html *, const char *);
146 void              buffmt(struct html *, const char *, ...);
147 void              bufcat(struct html *, const char *);
148 void              bufcat_style(struct html *,
149                         const char *, const char *);
150 void              bufncat(struct html *, const char *, size_t);
151 void              bufinit(struct html *);
152
153 void              html_idcat(char *, const char *, int);
154
155 __END_DECLS
156
157 #endif /*!HTML_H*/