version 1.24, 2010/06/19 20:46:27 |
version 1.111, 2022/07/03 14:29:44 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2017, 2018, 2019, 2020 Ingo Schwarze <schwarze@openbsd.org> |
|
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
* |
|
* Internal interfaces for mandoc(1) HTML formatters. |
|
* For use by the individual HTML formatters only. |
*/ |
*/ |
#ifndef HTML_H |
|
#define HTML_H |
|
|
|
__BEGIN_DECLS |
|
|
|
enum htmltag { |
enum htmltag { |
TAG_HTML, |
TAG_HTML, |
TAG_HEAD, |
TAG_HEAD, |
TAG_BODY, |
|
TAG_META, |
TAG_META, |
|
TAG_LINK, |
|
TAG_STYLE, |
TAG_TITLE, |
TAG_TITLE, |
|
TAG_BODY, |
|
TAG_MAIN, |
TAG_DIV, |
TAG_DIV, |
TAG_H1, |
TAG_SECTION, |
TAG_H2, |
TAG_NAV, |
TAG_SPAN, |
|
TAG_LINK, |
|
TAG_BR, |
|
TAG_A, |
|
TAG_TABLE, |
TAG_TABLE, |
TAG_COL, |
|
TAG_TR, |
TAG_TR, |
TAG_TD, |
TAG_TD, |
TAG_LI, |
TAG_LI, |
TAG_UL, |
TAG_UL, |
TAG_OL, |
TAG_OL, |
|
TAG_DL, |
|
TAG_DT, |
|
TAG_DD, |
|
TAG_H1, |
|
TAG_H2, |
|
TAG_P, |
|
TAG_PRE, |
|
TAG_A, |
|
TAG_B, |
|
TAG_CITE, |
|
TAG_CODE, |
|
TAG_I, |
|
TAG_SMALL, |
|
TAG_SPAN, |
|
TAG_VAR, |
|
TAG_BR, |
|
TAG_HR, |
|
TAG_MARK, |
|
TAG_MATH, |
|
TAG_MROW, |
|
TAG_MI, |
|
TAG_MN, |
|
TAG_MO, |
|
TAG_MSUP, |
|
TAG_MSUB, |
|
TAG_MSUBSUP, |
|
TAG_MFRAC, |
|
TAG_MSQRT, |
|
TAG_MFENCED, |
|
TAG_MTABLE, |
|
TAG_MTR, |
|
TAG_MTD, |
|
TAG_MUNDEROVER, |
|
TAG_MUNDER, |
|
TAG_MOVER, |
TAG_MAX |
TAG_MAX |
}; |
}; |
|
|
enum htmlattr { |
|
ATTR_HTTPEQUIV, |
|
ATTR_CONTENT, |
|
ATTR_NAME, |
|
ATTR_REL, |
|
ATTR_HREF, |
|
ATTR_TYPE, |
|
ATTR_MEDIA, |
|
ATTR_CLASS, |
|
ATTR_STYLE, |
|
ATTR_WIDTH, |
|
ATTR_VALIGN, |
|
ATTR_TARGET, |
|
ATTR_ID, |
|
ATTR_SUMMARY, |
|
ATTR_MAX |
|
}; |
|
|
|
enum htmlfont { |
|
HTMLFONT_NONE = 0, |
|
HTMLFONT_BOLD, |
|
HTMLFONT_ITALIC, |
|
HTMLFONT_MAX |
|
}; |
|
|
|
struct tag { |
struct tag { |
struct tag *next; |
struct tag *next; |
|
int refcnt; |
|
int closed; |
enum htmltag tag; |
enum htmltag tag; |
}; |
}; |
|
|
struct ord { |
|
struct ord *next; |
|
const void *cookie; |
|
int pos; |
|
}; |
|
|
|
struct tagq { |
|
struct tag *head; |
|
}; |
|
struct ordq { |
|
struct ord *head; |
|
}; |
|
|
|
struct htmlpair { |
|
enum htmlattr key; |
|
const char *val; |
|
}; |
|
|
|
#define PAIR_INIT(p, t, v) \ |
|
do { \ |
|
(p)->key = (t); \ |
|
(p)->val = (v); \ |
|
} while (/* CONSTCOND */ 0) |
|
|
|
#define PAIR_ID_INIT(p, v) PAIR_INIT(p, ATTR_ID, v) |
|
#define PAIR_CLASS_INIT(p, v) PAIR_INIT(p, ATTR_CLASS, v) |
|
#define PAIR_HREF_INIT(p, v) PAIR_INIT(p, ATTR_HREF, v) |
|
#define PAIR_STYLE_INIT(p, h) PAIR_INIT(p, ATTR_STYLE, (h)->buf) |
|
#define PAIR_SUMMARY_INIT(p, v) PAIR_INIT(p, ATTR_SUMMARY, v) |
|
|
|
enum htmltype { |
|
HTML_HTML_4_01_STRICT, |
|
HTML_XHTML_1_0_STRICT |
|
}; |
|
|
|
struct html { |
struct html { |
int flags; |
int flags; |
#define HTML_NOSPACE (1 << 0) |
#define HTML_NOSPACE (1 << 0) /* suppress next space */ |
#define HTML_IGNDELIM (1 << 2) |
#define HTML_IGNDELIM (1 << 1) |
struct tagq tags; |
#define HTML_KEEP (1 << 2) |
struct ordq ords; |
#define HTML_PREKEEP (1 << 3) |
void *symtab; |
#define HTML_NONOSPACE (1 << 4) /* never add spaces */ |
char *base; |
#define HTML_SKIPCHAR (1 << 6) /* skip the next character */ |
char *base_man; |
#define HTML_NOSPLIT (1 << 7) /* do not break line before .An */ |
char *base_includes; |
#define HTML_SPLIT (1 << 8) /* break line before .An */ |
char *style; |
#define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */ |
char buf[BUFSIZ]; |
#define HTML_BUFFER (1 << 10) /* Collect a word to see if it fits. */ |
size_t buflen; |
#define HTML_TOCDONE (1 << 11) /* The TOC was already written. */ |
struct tag *metaf; |
size_t indent; /* current output indentation level */ |
enum htmlfont metal; |
int noindent; /* indent disabled by <pre> */ |
enum htmlfont metac; |
size_t col; /* current output byte position */ |
enum htmltype type; |
size_t bufcol; /* current buf byte position */ |
|
char buf[80]; /* output buffer */ |
|
struct tag *tag; /* last open tag */ |
|
struct rofftbl tbl; /* current table */ |
|
struct tag *tblt; /* current open table scope */ |
|
char *base_man1; /* bases for manpage href */ |
|
char *base_man2; |
|
char *base_includes; /* base for include href */ |
|
char *style; /* style-sheet URI */ |
|
struct tag *metaf; /* current open font scope */ |
|
enum mandoc_esc metal; /* last used font */ |
|
enum mandoc_esc metac; /* current font mode */ |
|
int oflags; /* output options */ |
|
#define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ |
|
#define HTML_TOC (1 << 1) /* emit a table of contents */ |
}; |
}; |
|
|
struct roffsu; |
|
|
|
|
struct roff_node; |
|
struct tbl_span; |
|
struct eqn_box; |
|
|
|
void roff_html_pre(struct html *, const struct roff_node *); |
|
|
|
void print_gen_comment(struct html *, struct roff_node *); |
void print_gen_decls(struct html *); |
void print_gen_decls(struct html *); |
void print_gen_head(struct html *); |
void print_gen_head(struct html *); |
struct tag *print_ofont(struct html *, enum htmlfont); |
struct tag *print_otag(struct html *, enum htmltag, const char *, ...); |
struct tag *print_otag(struct html *, enum htmltag, |
struct tag *print_otag_id(struct html *, enum htmltag, const char *, |
int, const struct htmlpair *); |
struct roff_node *); |
void print_tagq(struct html *, const struct tag *); |
void print_tagq(struct html *, const struct tag *); |
void print_stagq(struct html *, const struct tag *); |
void print_stagq(struct html *, const struct tag *); |
|
void print_tagged_text(struct html *, const char *, |
|
struct roff_node *); |
void print_text(struct html *, const char *); |
void print_text(struct html *, const char *); |
|
void print_tblclose(struct html *); |
|
void print_tbl(struct html *, const struct tbl_span *); |
|
void print_eqn(struct html *, const struct eqn_box *); |
|
void print_endline(struct html *); |
|
|
void bufcat_su(struct html *, const char *, |
void html_close_paragraph(struct html *); |
const struct roffsu *); |
enum roff_tok html_fillmode(struct html *, enum roff_tok); |
void buffmt_man(struct html *, |
char *html_make_id(const struct roff_node *, int); |
const char *, const char *); |
int html_setfont(struct html *, enum mandoc_esc); |
void buffmt_includes(struct html *, const char *); |
|
void buffmt(struct html *, const char *, ...); |
|
void bufcat(struct html *, const char *); |
|
void bufcat_style(struct html *, |
|
const char *, const char *); |
|
void bufncat(struct html *, const char *, size_t); |
|
void bufinit(struct html *); |
|
|
|
void html_idcat(char *, const char *, int); |
|
|
|
__END_DECLS |
|
|
|
#endif /*!HTML_H*/ |
|