1/* $Id: html.h,v 1.87 2017/07/08 14:51:04 schwarze Exp $ */ 2/* 3 * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> 4 * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19enum htmltag { 20 TAG_HTML, 21 TAG_HEAD, 22 TAG_BODY, 23 TAG_META, 24 TAG_TITLE, 25 TAG_DIV, 26 TAG_H1, 27 TAG_H2, 28 TAG_SPAN, 29 TAG_LINK, 30 TAG_BR, 31 TAG_A, 32 TAG_TABLE, 33 TAG_COLGROUP, 34 TAG_COL, 35 TAG_TR, 36 TAG_TD, 37 TAG_LI, 38 TAG_UL, 39 TAG_OL, 40 TAG_DL, 41 TAG_DT, 42 TAG_DD, 43 TAG_PRE, 44 TAG_VAR, 45 TAG_CITE, 46 TAG_B, 47 TAG_I, 48 TAG_CODE, 49 TAG_SMALL, 50 TAG_STYLE, 51 TAG_MATH, 52 TAG_MROW, 53 TAG_MI, 54 TAG_MN, 55 TAG_MO, 56 TAG_MSUP, 57 TAG_MSUB, 58 TAG_MSUBSUP, 59 TAG_MFRAC, 60 TAG_MSQRT, 61 TAG_MFENCED, 62 TAG_MTABLE, 63 TAG_MTR, 64 TAG_MTD, 65 TAG_MUNDEROVER, 66 TAG_MUNDER, 67 TAG_MOVER, 68 TAG_MAX 69}; 70 71enum htmlfont { 72 HTMLFONT_NONE = 0, 73 HTMLFONT_BOLD, 74 HTMLFONT_ITALIC, 75 HTMLFONT_BI, 76 HTMLFONT_MAX 77}; 78 79struct tag { 80 struct tag *next; 81 enum htmltag tag; 82}; 83 84struct html { 85 int flags; 86#define HTML_NOSPACE (1 << 0) /* suppress next space */ 87#define HTML_IGNDELIM (1 << 1) 88#define HTML_KEEP (1 << 2) 89#define HTML_PREKEEP (1 << 3) 90#define HTML_NONOSPACE (1 << 4) /* never add spaces */ 91#define HTML_LITERAL (1 << 5) /* literal (e.g., <PRE>) context */ 92#define HTML_SKIPCHAR (1 << 6) /* skip the next character */ 93#define HTML_NOSPLIT (1 << 7) /* do not break line before .An */ 94#define HTML_SPLIT (1 << 8) /* break line before .An */ 95#define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */ 96#define HTML_BUFFER (1 << 10) /* Collect a word to see if it fits. */ 97 size_t indent; /* current output indentation level */ 98 int noindent; /* indent disabled by <pre> */ 99 size_t col; /* current output byte position */ 100 size_t bufcol; /* current buf byte position */ 101 char buf[80]; /* output buffer */ 102 struct tag *tag; /* last open tag */ 103 struct rofftbl tbl; /* current table */ 104 struct tag *tblt; /* current open table scope */ 105 char *base_man; /* base for manpage href */ 106 char *base_includes; /* base for include href */ 107 char *style; /* style-sheet URI */ 108 struct tag *metaf; /* current open font scope */ 109 enum htmlfont metal; /* last used font */ 110 enum htmlfont metac; /* current font mode */ 111 int oflags; /* output options */ 112#define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ 113}; 114 115 116struct roff_node; 117struct tbl_span; 118struct eqn_box; 119 120void roff_html_pre(struct html *, const struct roff_node *); 121 122void print_gen_decls(struct html *); 123void print_gen_head(struct html *); 124struct tag *print_otag(struct html *, enum htmltag, const char *, ...); 125void print_tagq(struct html *, const struct tag *); 126void print_stagq(struct html *, const struct tag *); 127void print_text(struct html *, const char *); 128void print_tblclose(struct html *); 129void print_tbl(struct html *, const struct tbl_span *); 130void print_eqn(struct html *, const struct eqn_box *); 131void print_paragraph(struct html *); 132void print_endline(struct html *); 133 134char *html_make_id(const struct roff_node *); 135int html_strlen(const char *); 136