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