version 1.4, 2008/12/10 17:40:56 |
version 1.74, 2017/01/17 01:47:51 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se> |
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> |
|
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* 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 |
* purpose with or without fee is hereby granted, provided that the above |
* above copyright notice and this permission notice appear in all |
* copyright notice and this permission notice appear in all copies. |
* copies. |
|
* |
* |
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* PERFORMANCE OF THIS SOFTWARE. |
|
*/ |
*/ |
#ifndef HTML_H |
|
#define HTML_H |
|
|
|
#include "ml.h" |
enum htmltag { |
|
TAG_HTML, |
|
TAG_HEAD, |
|
TAG_BODY, |
|
TAG_META, |
|
TAG_TITLE, |
|
TAG_DIV, |
|
TAG_H1, |
|
TAG_H2, |
|
TAG_SPAN, |
|
TAG_LINK, |
|
TAG_BR, |
|
TAG_A, |
|
TAG_TABLE, |
|
TAG_TBODY, |
|
TAG_COL, |
|
TAG_TR, |
|
TAG_TD, |
|
TAG_LI, |
|
TAG_UL, |
|
TAG_OL, |
|
TAG_DL, |
|
TAG_DT, |
|
TAG_DD, |
|
TAG_BLOCKQUOTE, |
|
TAG_PRE, |
|
TAG_B, |
|
TAG_I, |
|
TAG_CODE, |
|
TAG_SMALL, |
|
TAG_STYLE, |
|
TAG_MATH, |
|
TAG_MROW, |
|
TAG_MI, |
|
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 |
|
}; |
|
|
enum html_tag { |
enum htmlfont { |
HTML_TAG_SPAN = 0, |
HTMLFONT_NONE = 0, |
HTML_TAG_HTML = 1, |
HTMLFONT_BOLD, |
HTML_TAG_HEAD = 2, |
HTMLFONT_ITALIC, |
HTML_TAG_META = 3, |
HTMLFONT_BI, |
HTML_TAG_TITLE = 4, |
HTMLFONT_MAX |
HTML_TAG_STYLE = 5, |
|
HTML_TAG_LINK = 6, |
|
HTML_TAG_BODY = 7, |
|
HTML_TAG_DIV = 8, |
|
HTML_TAG_TABLE = 9, |
|
HTML_TAG_TD = 10, |
|
HTML_TAG_TR = 11, |
|
HTML_TAG_OL = 12, |
|
HTML_TAG_UL = 13, |
|
HTML_TAG_LI = 14, |
|
HTML_TAG_H1 = 15, |
|
HTML_TAG_H2 = 16, |
|
HTML_TAG_A = 17 |
|
}; |
}; |
|
|
enum html_attr { |
struct tag { |
HTML_ATTR_CLASS = 0, |
struct tag *next; |
HTML_ATTR_HTTP_EQUIV = 1, |
enum htmltag tag; |
HTML_ATTR_CONTENT = 2, |
|
HTML_ATTR_NAME = 3, |
|
HTML_ATTR_TYPE = 4, |
|
HTML_ATTR_REL = 5, |
|
HTML_ATTR_HREF = 6, |
|
HTML_ATTR_WIDTH = 7, |
|
HTML_ATTR_ALIGN = 8, |
|
HTML_ATTR_VALIGN = 9, |
|
HTML_ATTR_NOWRAP = 10 |
|
}; |
}; |
|
|
enum html_type { |
struct tagq { |
HTML_TYPE_4_01_STRICT = 0 |
struct tag *head; |
}; |
}; |
|
|
struct html_pair { |
struct html { |
enum html_attr attr; |
int flags; |
char *val; |
#define HTML_NOSPACE (1 << 0) /* suppress next space */ |
|
#define HTML_IGNDELIM (1 << 1) |
|
#define HTML_KEEP (1 << 2) |
|
#define HTML_PREKEEP (1 << 3) |
|
#define HTML_NONOSPACE (1 << 4) /* never add spaces */ |
|
#define HTML_LITERAL (1 << 5) /* literal (e.g., <PRE>) context */ |
|
#define HTML_SKIPCHAR (1 << 6) /* skip the next character */ |
|
#define HTML_NOSPLIT (1 << 7) /* do not break line before .An */ |
|
#define HTML_SPLIT (1 << 8) /* break line before .An */ |
|
#define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */ |
|
struct tagq tags; /* stack of open tags */ |
|
struct rofftbl tbl; /* current table */ |
|
struct tag *tblt; /* current open table scope */ |
|
char *base_man; /* base for manpage href */ |
|
char *base_includes; /* base for include href */ |
|
char *style; /* style-sheet URI */ |
|
char buf[BUFSIZ]; /* see bufcat and friends */ |
|
size_t buflen; |
|
struct tag *metaf; /* current open font scope */ |
|
enum htmlfont metal; /* last used font */ |
|
enum htmlfont metac; /* current font mode */ |
|
int oflags; /* output options */ |
|
#define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ |
}; |
}; |
|
|
__BEGIN_DECLS |
|
|
|
int html_typeput(struct md_mbuf *, |
struct tbl_span; |
enum html_type, size_t *); |
struct eqn; |
int html_commentput(struct md_mbuf *, |
|
enum ml_scope, size_t *); |
|
int html_tput(struct md_mbuf *, |
|
enum ml_scope, enum html_tag, size_t *); |
|
int html_aput(struct md_mbuf *, enum ml_scope, |
|
enum html_tag, size_t *, |
|
int, const struct html_pair *); |
|
int html_stput(struct md_mbuf *, |
|
enum html_tag, size_t *); |
|
int html_saput(struct md_mbuf *, enum html_tag, |
|
size_t *, int, const struct html_pair *); |
|
|
|
__END_DECLS |
void print_gen_decls(struct html *); |
|
void print_gen_head(struct html *); |
|
struct tag *print_otag(struct html *, enum htmltag, const char *, ...); |
|
void print_tagq(struct html *, const struct tag *); |
|
void print_stagq(struct html *, const struct tag *); |
|
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 *); |
|
void print_paragraph(struct html *); |
|
|
#endif /*!HTML_H*/ |
void bufcat_fmt(struct html *, const char *, ...) |
|
__attribute__((__format__ (printf, 2, 3))); |
|
void bufcat(struct html *, const char *); |
|
void bufcat_id(struct html *, const char *); |
|
void bufcat_style(struct html *, |
|
const char *, const char *); |
|
void bufcat_su(struct html *, const char *, |
|
const struct roffsu *); |
|
void bufinit(struct html *); |
|
void buffmt_man(struct html *, |
|
const char *, const char *); |
|
void buffmt_includes(struct html *, const char *); |
|
|
|
int html_strlen(const char *); |