1 /* $Id: html.h,v 1.2 2009/10/27 21:40:07 schwarze 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_P, 32 TAG_SPAN, 33 TAG_LINK, 34 TAG_BR, 35 TAG_A, 36 TAG_TABLE, 37 TAG_COL, 38 TAG_TR, 39 TAG_TD, 40 TAG_LI, 41 TAG_UL, 42 TAG_OL, 43 TAG_BASE, 44 TAG_MAX 45 }; 46 47 enum htmlattr { 48 ATTR_HTTPEQUIV, 49 ATTR_CONTENT, 50 ATTR_NAME, 51 ATTR_REL, 52 ATTR_HREF, 53 ATTR_TYPE, 54 ATTR_MEDIA, 55 ATTR_CLASS, 56 ATTR_STYLE, 57 ATTR_WIDTH, 58 ATTR_VALIGN, 59 ATTR_TARGET, 60 ATTR_ID, 61 ATTR_MAX 62 }; 63 64 struct tag { 65 struct tag *next; 66 enum htmltag tag; 67 }; 68 69 struct ord { 70 struct ord *next; 71 const void *cookie; 72 int pos; 73 }; 74 75 struct tagq { 76 struct tag *head; 77 }; 78 struct ordq { 79 struct ord *head; 80 }; 81 82 struct htmlpair { 83 enum htmlattr key; 84 const char *val; 85 }; 86 87 #define PAIR_CLASS_INIT(p, v) \ 88 do { (p)->key = ATTR_CLASS; \ 89 (p)->val = (v); } while (/* CONSTCOND */ 0) 90 #define PAIR_HREF_INIT(p, v) \ 91 do { (p)->key = ATTR_HREF; \ 92 (p)->val = (v); } while (/* CONSTCOND */ 0) 93 #define PAIR_STYLE_INIT(p, h) \ 94 do { (p)->key = ATTR_STYLE; \ 95 (p)->val = (h)->buf; } while (/* CONSTCOND */ 0) 96 97 struct html { 98 int flags; 99 #define HTML_NOSPACE (1 << 0) 100 #define HTML_NEWLINE (1 << 1) 101 #define HTML_IGNDELIM (1 << 2) 102 struct tagq tags; 103 struct ordq ords; 104 void *symtab; 105 char *base; 106 char *base_man; 107 char *base_includes; 108 char *style; 109 char buf[BUFSIZ]; 110 size_t buflen; 111 }; 112 113 struct roffsu; 114 115 void print_gen_doctype(struct html *); 116 void print_gen_head(struct html *); 117 struct tag *print_otag(struct html *, enum htmltag, 118 int, const struct htmlpair *); 119 void print_tagq(struct html *, const struct tag *); 120 void print_stagq(struct html *, const struct tag *); 121 void print_text(struct html *, const char *); 122 123 void bufcat_su(struct html *, const char *, 124 const struct roffsu *); 125 void buffmt_man(struct html *, 126 const char *, const char *); 127 void buffmt_includes(struct html *, const char *); 128 void buffmt(struct html *, const char *, ...); 129 void bufcat(struct html *, const char *); 130 void bufcat_style(struct html *, 131 const char *, const char *); 132 void bufncat(struct html *, const char *, size_t); 133 void bufinit(struct html *); 134 135 __END_DECLS 136 137 #endif /*!HTML_H*/ 138