1*7295610fSBaptiste Daroussin /* $Id: html.h,v 1.102 2019/03/01 10:57:18 schwarze Exp $ */ 261d06d6bSBaptiste Daroussin /* 361d06d6bSBaptiste Daroussin * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> 4*7295610fSBaptiste Daroussin * Copyright (c) 2017, 2018, 2019 Ingo Schwarze <schwarze@openbsd.org> 561d06d6bSBaptiste Daroussin * 661d06d6bSBaptiste Daroussin * Permission to use, copy, modify, and distribute this software for any 761d06d6bSBaptiste Daroussin * purpose with or without fee is hereby granted, provided that the above 861d06d6bSBaptiste Daroussin * copyright notice and this permission notice appear in all copies. 961d06d6bSBaptiste Daroussin * 1061d06d6bSBaptiste Daroussin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1161d06d6bSBaptiste Daroussin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1261d06d6bSBaptiste Daroussin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1361d06d6bSBaptiste Daroussin * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1461d06d6bSBaptiste Daroussin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1561d06d6bSBaptiste Daroussin * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1661d06d6bSBaptiste Daroussin * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1761d06d6bSBaptiste Daroussin */ 1861d06d6bSBaptiste Daroussin 1961d06d6bSBaptiste Daroussin enum htmltag { 2061d06d6bSBaptiste Daroussin TAG_HTML, 2161d06d6bSBaptiste Daroussin TAG_HEAD, 2261d06d6bSBaptiste Daroussin TAG_BODY, 2361d06d6bSBaptiste Daroussin TAG_META, 2461d06d6bSBaptiste Daroussin TAG_TITLE, 2561d06d6bSBaptiste Daroussin TAG_DIV, 2661d06d6bSBaptiste Daroussin TAG_IDIV, 27*7295610fSBaptiste Daroussin TAG_SECTION, 2861d06d6bSBaptiste Daroussin TAG_H1, 2961d06d6bSBaptiste Daroussin TAG_H2, 3061d06d6bSBaptiste Daroussin TAG_SPAN, 3161d06d6bSBaptiste Daroussin TAG_LINK, 3261d06d6bSBaptiste Daroussin TAG_BR, 3361d06d6bSBaptiste Daroussin TAG_A, 3461d06d6bSBaptiste Daroussin TAG_TABLE, 3561d06d6bSBaptiste Daroussin TAG_TR, 3661d06d6bSBaptiste Daroussin TAG_TD, 3761d06d6bSBaptiste Daroussin TAG_LI, 3861d06d6bSBaptiste Daroussin TAG_UL, 3961d06d6bSBaptiste Daroussin TAG_OL, 4061d06d6bSBaptiste Daroussin TAG_DL, 4161d06d6bSBaptiste Daroussin TAG_DT, 4261d06d6bSBaptiste Daroussin TAG_DD, 43*7295610fSBaptiste Daroussin TAG_P, 4461d06d6bSBaptiste Daroussin TAG_PRE, 4561d06d6bSBaptiste Daroussin TAG_VAR, 4661d06d6bSBaptiste Daroussin TAG_CITE, 4761d06d6bSBaptiste Daroussin TAG_B, 4861d06d6bSBaptiste Daroussin TAG_I, 4961d06d6bSBaptiste Daroussin TAG_CODE, 5061d06d6bSBaptiste Daroussin TAG_SMALL, 5161d06d6bSBaptiste Daroussin TAG_STYLE, 5261d06d6bSBaptiste Daroussin TAG_MATH, 5361d06d6bSBaptiste Daroussin TAG_MROW, 5461d06d6bSBaptiste Daroussin TAG_MI, 5561d06d6bSBaptiste Daroussin TAG_MN, 5661d06d6bSBaptiste Daroussin TAG_MO, 5761d06d6bSBaptiste Daroussin TAG_MSUP, 5861d06d6bSBaptiste Daroussin TAG_MSUB, 5961d06d6bSBaptiste Daroussin TAG_MSUBSUP, 6061d06d6bSBaptiste Daroussin TAG_MFRAC, 6161d06d6bSBaptiste Daroussin TAG_MSQRT, 6261d06d6bSBaptiste Daroussin TAG_MFENCED, 6361d06d6bSBaptiste Daroussin TAG_MTABLE, 6461d06d6bSBaptiste Daroussin TAG_MTR, 6561d06d6bSBaptiste Daroussin TAG_MTD, 6661d06d6bSBaptiste Daroussin TAG_MUNDEROVER, 6761d06d6bSBaptiste Daroussin TAG_MUNDER, 6861d06d6bSBaptiste Daroussin TAG_MOVER, 6961d06d6bSBaptiste Daroussin TAG_MAX 7061d06d6bSBaptiste Daroussin }; 7161d06d6bSBaptiste Daroussin 7261d06d6bSBaptiste Daroussin enum htmlfont { 7361d06d6bSBaptiste Daroussin HTMLFONT_NONE = 0, 7461d06d6bSBaptiste Daroussin HTMLFONT_BOLD, 7561d06d6bSBaptiste Daroussin HTMLFONT_ITALIC, 7661d06d6bSBaptiste Daroussin HTMLFONT_BI, 77*7295610fSBaptiste Daroussin HTMLFONT_CW, 7861d06d6bSBaptiste Daroussin HTMLFONT_MAX 7961d06d6bSBaptiste Daroussin }; 8061d06d6bSBaptiste Daroussin 8161d06d6bSBaptiste Daroussin struct tag { 8261d06d6bSBaptiste Daroussin struct tag *next; 83*7295610fSBaptiste Daroussin int refcnt; 84*7295610fSBaptiste Daroussin int closed; 8561d06d6bSBaptiste Daroussin enum htmltag tag; 8661d06d6bSBaptiste Daroussin }; 8761d06d6bSBaptiste Daroussin 8861d06d6bSBaptiste Daroussin struct html { 8961d06d6bSBaptiste Daroussin int flags; 9061d06d6bSBaptiste Daroussin #define HTML_NOSPACE (1 << 0) /* suppress next space */ 9161d06d6bSBaptiste Daroussin #define HTML_IGNDELIM (1 << 1) 9261d06d6bSBaptiste Daroussin #define HTML_KEEP (1 << 2) 9361d06d6bSBaptiste Daroussin #define HTML_PREKEEP (1 << 3) 9461d06d6bSBaptiste Daroussin #define HTML_NONOSPACE (1 << 4) /* never add spaces */ 9561d06d6bSBaptiste Daroussin #define HTML_SKIPCHAR (1 << 6) /* skip the next character */ 9661d06d6bSBaptiste Daroussin #define HTML_NOSPLIT (1 << 7) /* do not break line before .An */ 9761d06d6bSBaptiste Daroussin #define HTML_SPLIT (1 << 8) /* break line before .An */ 9861d06d6bSBaptiste Daroussin #define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */ 9961d06d6bSBaptiste Daroussin #define HTML_BUFFER (1 << 10) /* Collect a word to see if it fits. */ 100*7295610fSBaptiste Daroussin #define HTML_TOCDONE (1 << 11) /* The TOC was already written. */ 10161d06d6bSBaptiste Daroussin size_t indent; /* current output indentation level */ 10261d06d6bSBaptiste Daroussin int noindent; /* indent disabled by <pre> */ 10361d06d6bSBaptiste Daroussin size_t col; /* current output byte position */ 10461d06d6bSBaptiste Daroussin size_t bufcol; /* current buf byte position */ 10561d06d6bSBaptiste Daroussin char buf[80]; /* output buffer */ 10661d06d6bSBaptiste Daroussin struct tag *tag; /* last open tag */ 10761d06d6bSBaptiste Daroussin struct rofftbl tbl; /* current table */ 10861d06d6bSBaptiste Daroussin struct tag *tblt; /* current open table scope */ 109*7295610fSBaptiste Daroussin char *base_man1; /* bases for manpage href */ 110*7295610fSBaptiste Daroussin char *base_man2; 11161d06d6bSBaptiste Daroussin char *base_includes; /* base for include href */ 11261d06d6bSBaptiste Daroussin char *style; /* style-sheet URI */ 11361d06d6bSBaptiste Daroussin struct tag *metaf; /* current open font scope */ 11461d06d6bSBaptiste Daroussin enum htmlfont metal; /* last used font */ 11561d06d6bSBaptiste Daroussin enum htmlfont metac; /* current font mode */ 11661d06d6bSBaptiste Daroussin int oflags; /* output options */ 11761d06d6bSBaptiste Daroussin #define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ 118*7295610fSBaptiste Daroussin #define HTML_TOC (1 << 1) /* emit a table of contents */ 11961d06d6bSBaptiste Daroussin }; 12061d06d6bSBaptiste Daroussin 12161d06d6bSBaptiste Daroussin 12261d06d6bSBaptiste Daroussin struct roff_node; 12361d06d6bSBaptiste Daroussin struct tbl_span; 12461d06d6bSBaptiste Daroussin struct eqn_box; 12561d06d6bSBaptiste Daroussin 12661d06d6bSBaptiste Daroussin void roff_html_pre(struct html *, const struct roff_node *); 12761d06d6bSBaptiste Daroussin 12861d06d6bSBaptiste Daroussin void print_gen_comment(struct html *, struct roff_node *); 12961d06d6bSBaptiste Daroussin void print_gen_decls(struct html *); 13061d06d6bSBaptiste Daroussin void print_gen_head(struct html *); 131*7295610fSBaptiste Daroussin void print_metaf(struct html *, enum mandoc_esc); 13261d06d6bSBaptiste Daroussin struct tag *print_otag(struct html *, enum htmltag, const char *, ...); 13361d06d6bSBaptiste Daroussin void print_tagq(struct html *, const struct tag *); 13461d06d6bSBaptiste Daroussin void print_stagq(struct html *, const struct tag *); 13561d06d6bSBaptiste Daroussin void print_text(struct html *, const char *); 13661d06d6bSBaptiste Daroussin void print_tblclose(struct html *); 13761d06d6bSBaptiste Daroussin void print_tbl(struct html *, const struct tbl_span *); 13861d06d6bSBaptiste Daroussin void print_eqn(struct html *, const struct eqn_box *); 13961d06d6bSBaptiste Daroussin void print_endline(struct html *); 14061d06d6bSBaptiste Daroussin 141*7295610fSBaptiste Daroussin void html_close_paragraph(struct html *); 142*7295610fSBaptiste Daroussin enum roff_tok html_fillmode(struct html *, enum roff_tok); 14361d06d6bSBaptiste Daroussin char *html_make_id(const struct roff_node *, int); 144