1*45a5aec3SBaptiste Daroussin /* $Id: html.h,v 1.103 2019/04/30 15:53:00 schwarze Exp $ */ 261d06d6bSBaptiste Daroussin /* 361d06d6bSBaptiste Daroussin * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> 47295610fSBaptiste 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, 277295610fSBaptiste 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, 437295610fSBaptiste 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 struct tag { 7361d06d6bSBaptiste Daroussin struct tag *next; 747295610fSBaptiste Daroussin int refcnt; 757295610fSBaptiste Daroussin int closed; 7661d06d6bSBaptiste Daroussin enum htmltag tag; 7761d06d6bSBaptiste Daroussin }; 7861d06d6bSBaptiste Daroussin 7961d06d6bSBaptiste Daroussin struct html { 8061d06d6bSBaptiste Daroussin int flags; 8161d06d6bSBaptiste Daroussin #define HTML_NOSPACE (1 << 0) /* suppress next space */ 8261d06d6bSBaptiste Daroussin #define HTML_IGNDELIM (1 << 1) 8361d06d6bSBaptiste Daroussin #define HTML_KEEP (1 << 2) 8461d06d6bSBaptiste Daroussin #define HTML_PREKEEP (1 << 3) 8561d06d6bSBaptiste Daroussin #define HTML_NONOSPACE (1 << 4) /* never add spaces */ 8661d06d6bSBaptiste Daroussin #define HTML_SKIPCHAR (1 << 6) /* skip the next character */ 8761d06d6bSBaptiste Daroussin #define HTML_NOSPLIT (1 << 7) /* do not break line before .An */ 8861d06d6bSBaptiste Daroussin #define HTML_SPLIT (1 << 8) /* break line before .An */ 8961d06d6bSBaptiste Daroussin #define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */ 9061d06d6bSBaptiste Daroussin #define HTML_BUFFER (1 << 10) /* Collect a word to see if it fits. */ 917295610fSBaptiste Daroussin #define HTML_TOCDONE (1 << 11) /* The TOC was already written. */ 9261d06d6bSBaptiste Daroussin size_t indent; /* current output indentation level */ 9361d06d6bSBaptiste Daroussin int noindent; /* indent disabled by <pre> */ 9461d06d6bSBaptiste Daroussin size_t col; /* current output byte position */ 9561d06d6bSBaptiste Daroussin size_t bufcol; /* current buf byte position */ 9661d06d6bSBaptiste Daroussin char buf[80]; /* output buffer */ 9761d06d6bSBaptiste Daroussin struct tag *tag; /* last open tag */ 9861d06d6bSBaptiste Daroussin struct rofftbl tbl; /* current table */ 9961d06d6bSBaptiste Daroussin struct tag *tblt; /* current open table scope */ 1007295610fSBaptiste Daroussin char *base_man1; /* bases for manpage href */ 1017295610fSBaptiste Daroussin char *base_man2; 10261d06d6bSBaptiste Daroussin char *base_includes; /* base for include href */ 10361d06d6bSBaptiste Daroussin char *style; /* style-sheet URI */ 10461d06d6bSBaptiste Daroussin struct tag *metaf; /* current open font scope */ 105*45a5aec3SBaptiste Daroussin enum mandoc_esc metal; /* last used font */ 106*45a5aec3SBaptiste Daroussin enum mandoc_esc metac; /* current font mode */ 10761d06d6bSBaptiste Daroussin int oflags; /* output options */ 10861d06d6bSBaptiste Daroussin #define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ 1097295610fSBaptiste Daroussin #define HTML_TOC (1 << 1) /* emit a table of contents */ 11061d06d6bSBaptiste Daroussin }; 11161d06d6bSBaptiste Daroussin 11261d06d6bSBaptiste Daroussin 11361d06d6bSBaptiste Daroussin struct roff_node; 11461d06d6bSBaptiste Daroussin struct tbl_span; 11561d06d6bSBaptiste Daroussin struct eqn_box; 11661d06d6bSBaptiste Daroussin 11761d06d6bSBaptiste Daroussin void roff_html_pre(struct html *, const struct roff_node *); 11861d06d6bSBaptiste Daroussin 11961d06d6bSBaptiste Daroussin void print_gen_comment(struct html *, struct roff_node *); 12061d06d6bSBaptiste Daroussin void print_gen_decls(struct html *); 12161d06d6bSBaptiste Daroussin void print_gen_head(struct html *); 12261d06d6bSBaptiste Daroussin struct tag *print_otag(struct html *, enum htmltag, const char *, ...); 12361d06d6bSBaptiste Daroussin void print_tagq(struct html *, const struct tag *); 12461d06d6bSBaptiste Daroussin void print_stagq(struct html *, const struct tag *); 12561d06d6bSBaptiste Daroussin void print_text(struct html *, const char *); 12661d06d6bSBaptiste Daroussin void print_tblclose(struct html *); 12761d06d6bSBaptiste Daroussin void print_tbl(struct html *, const struct tbl_span *); 12861d06d6bSBaptiste Daroussin void print_eqn(struct html *, const struct eqn_box *); 12961d06d6bSBaptiste Daroussin void print_endline(struct html *); 13061d06d6bSBaptiste Daroussin 1317295610fSBaptiste Daroussin void html_close_paragraph(struct html *); 1327295610fSBaptiste Daroussin enum roff_tok html_fillmode(struct html *, enum roff_tok); 13361d06d6bSBaptiste Daroussin char *html_make_id(const struct roff_node *, int); 134*45a5aec3SBaptiste Daroussin int html_setfont(struct html *, enum mandoc_esc); 135