]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mdocml/html.h
Pull in r223147, r223255 and r223390 from upstream llvm trunk (by Roman
[FreeBSD/FreeBSD.git] / contrib / mdocml / html.h
1 /*      $Id: html.h,v 1.67 2014/10/28 17:36:19 schwarze Exp $ */
2 /*
3  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
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_TBODY,
37         TAG_COL,
38         TAG_TR,
39         TAG_TD,
40         TAG_LI,
41         TAG_UL,
42         TAG_OL,
43         TAG_DL,
44         TAG_DT,
45         TAG_DD,
46         TAG_BLOCKQUOTE,
47         TAG_PRE,
48         TAG_B,
49         TAG_I,
50         TAG_CODE,
51         TAG_SMALL,
52         TAG_STYLE,
53         TAG_MATH,
54         TAG_MROW,
55         TAG_MI,
56         TAG_MO,
57         TAG_MSUP,
58         TAG_MSUB,
59         TAG_MSUBSUP,
60         TAG_MFRAC,
61         TAG_MSQRT,
62         TAG_MFENCED,
63         TAG_MTABLE,
64         TAG_MTR,
65         TAG_MTD,
66         TAG_MUNDEROVER,
67         TAG_MUNDER,
68         TAG_MOVER,
69         TAG_MAX
70 };
71
72 enum    htmlattr {
73         ATTR_NAME,
74         ATTR_REL,
75         ATTR_HREF,
76         ATTR_TYPE,
77         ATTR_MEDIA,
78         ATTR_CLASS,
79         ATTR_STYLE,
80         ATTR_ID,
81         ATTR_COLSPAN,
82         ATTR_CHARSET,
83         ATTR_OPEN,
84         ATTR_CLOSE,
85         ATTR_MATHVARIANT,
86         ATTR_MAX
87 };
88
89 enum    htmlfont {
90         HTMLFONT_NONE = 0,
91         HTMLFONT_BOLD,
92         HTMLFONT_ITALIC,
93         HTMLFONT_BI,
94         HTMLFONT_MAX
95 };
96
97 struct  tag {
98         struct tag       *next;
99         enum htmltag      tag;
100 };
101
102 struct tagq {
103         struct tag       *head;
104 };
105
106 struct  htmlpair {
107         enum htmlattr     key;
108         const char       *val;
109 };
110
111 #define PAIR_INIT(p, t, v) \
112         do { \
113                 (p)->key = (t); \
114                 (p)->val = (v); \
115         } while (/* CONSTCOND */ 0)
116
117 #define PAIR_ID_INIT(p, v)      PAIR_INIT(p, ATTR_ID, v)
118 #define PAIR_CLASS_INIT(p, v)   PAIR_INIT(p, ATTR_CLASS, v)
119 #define PAIR_HREF_INIT(p, v)    PAIR_INIT(p, ATTR_HREF, v)
120 #define PAIR_STYLE_INIT(p, h)   PAIR_INIT(p, ATTR_STYLE, (h)->buf)
121
122 struct  html {
123         int               flags;
124 #define HTML_NOSPACE     (1 << 0) /* suppress next space */
125 #define HTML_IGNDELIM    (1 << 1)
126 #define HTML_KEEP        (1 << 2)
127 #define HTML_PREKEEP     (1 << 3)
128 #define HTML_NONOSPACE   (1 << 4) /* never add spaces */
129 #define HTML_LITERAL     (1 << 5) /* literal (e.g., <PRE>) context */
130 #define HTML_SKIPCHAR    (1 << 6) /* skip the next character */
131 #define HTML_NOSPLIT     (1 << 7) /* do not break line before .An */
132 #define HTML_SPLIT       (1 << 8) /* break line before .An */
133         struct tagq       tags; /* stack of open tags */
134         struct rofftbl    tbl; /* current table */
135         struct tag       *tblt; /* current open table scope */
136         const struct mchars *symtab; /* character table */
137         char             *base_man; /* base for manpage href */
138         char             *base_includes; /* base for include href */
139         char             *style; /* style-sheet URI */
140         char              buf[BUFSIZ]; /* see bufcat and friends */
141         size_t            buflen;
142         struct tag       *metaf; /* current open font scope */
143         enum htmlfont     metal; /* last used font */
144         enum htmlfont     metac; /* current font mode */
145         int               oflags; /* output options */
146 #define HTML_FRAGMENT    (1 << 0) /* don't emit HTML/HEAD/BODY */
147 };
148
149 void              print_gen_decls(struct html *);
150 void              print_gen_head(struct html *);
151 struct tag       *print_otag(struct html *, enum htmltag,
152                                 int, const struct htmlpair *);
153 void              print_tagq(struct html *, const struct tag *);
154 void              print_stagq(struct html *, const struct tag *);
155 void              print_text(struct html *, const char *);
156 void              print_tblclose(struct html *);
157 void              print_tbl(struct html *, const struct tbl_span *);
158 void              print_eqn(struct html *, const struct eqn *);
159 void              print_paragraph(struct html *);
160
161 #if __GNUC__ - 0 >= 4
162 __attribute__((__format__ (__printf__, 2, 3)))
163 #endif
164 void              bufcat_fmt(struct html *, const char *, ...);
165 void              bufcat(struct html *, const char *);
166 void              bufcat_id(struct html *, const char *);
167 void              bufcat_style(struct html *,
168                         const char *, const char *);
169 void              bufcat_su(struct html *, const char *,
170                         const struct roffsu *);
171 void              bufinit(struct html *);
172 void              buffmt_man(struct html *,
173                         const char *, const char *);
174 void              buffmt_includes(struct html *, const char *);
175
176 int               html_strlen(const char *);
177
178 __END_DECLS
179
180 #endif /*!HTML_H*/