+struct ord {
+ struct ord *next;
+ const void *cookie;
+ int pos;
+};
+
+struct tagq {
+ struct tag *head;
+};
+struct ordq {
+ struct ord *head;
+};
+
+struct htmlpair {
+ enum htmlattr key;
+ const char *val;
+};
+
+#define PAIR_INIT(p, t, v) \
+ do { \
+ (p)->key = (t); \
+ (p)->val = (v); \
+ } while (/* CONSTCOND */ 0)
+
+#define PAIR_ID_INIT(p, v) PAIR_INIT(p, ATTR_ID, v)
+#define PAIR_CLASS_INIT(p, v) PAIR_INIT(p, ATTR_CLASS, v)
+#define PAIR_HREF_INIT(p, v) PAIR_INIT(p, ATTR_HREF, v)
+#define PAIR_STYLE_INIT(p, h) PAIR_INIT(p, ATTR_STYLE, (h)->buf)
+#define PAIR_SUMMARY_INIT(p, v) PAIR_INIT(p, ATTR_SUMMARY, v)
+
+enum htmltype {
+ HTML_HTML_4_01_STRICT,
+ HTML_XHTML_1_0_STRICT
+};
+
+struct html {
+ int flags;
+#define HTML_NOSPACE (1 << 0)
+#define HTML_IGNDELIM (1 << 1)
+#define HTML_KEEP (1 << 2)
+#define HTML_PREKEEP (1 << 3)
+#define HTML_NONOSPACE (1 << 4)
+ struct tagq tags;
+ struct ordq ords;
+ void *symtab;
+ char *base;
+ char *base_man;
+ char *base_includes;
+ char *style;
+ char buf[BUFSIZ];
+ size_t buflen;
+ struct tag *metaf;
+ enum htmlfont metal;
+ enum htmlfont metac;
+ enum htmltype type;
+};
+
+struct roffsu;
+
+void print_gen_decls(struct html *);
+void print_gen_head(struct html *);
+struct tag *print_ofont(struct html *, enum htmlfont);
+struct tag *print_otag(struct html *, enum htmltag,
+ int, const struct htmlpair *);
+void print_tagq(struct html *, const struct tag *);
+void print_stagq(struct html *, const struct tag *);
+void print_text(struct html *, const char *);
+
+void bufcat_su(struct html *, const char *,
+ const struct roffsu *);
+void buffmt_man(struct html *,
+ const char *, const char *);
+void buffmt_includes(struct html *, const char *);
+void buffmt(struct html *, const char *, ...);
+void bufcat(struct html *, const char *);
+void bufcat_style(struct html *,
+ const char *, const char *);
+void bufncat(struct html *, const char *, size_t);
+void bufinit(struct html *);