=================================================================== RCS file: /cvs/mandoc/html.h,v retrieving revision 1.1 retrieving revision 1.98 diff -u -p -r1.1 -r1.98 --- mandoc/html.h 2008/12/10 00:52:46 1.1 +++ mandoc/html.h 2019/01/05 09:14:44 1.98 @@ -1,83 +1,139 @@ -/* $Id: html.h,v 1.1 2008/12/10 00:52:46 kristaps Exp $ */ +/* $Id: html.h,v 1.98 2019/01/05 09:14:44 schwarze Exp $ */ /* - * Copyright (c) 2008 Kristaps Dzonsons + * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons + * Copyright (c) 2017, 2018 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef HTML_H -#define HTML_H -#include "ml.h" - -enum html_tag { - HTML_TAG_SPAN = 0, - HTML_TAG_HTML = 1, - HTML_TAG_HEAD = 2, - HTML_TAG_META = 3, - HTML_TAG_TITLE = 4, - 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 htmltag { + TAG_HTML, + TAG_HEAD, + TAG_BODY, + TAG_META, + TAG_TITLE, + TAG_DIV, + TAG_IDIV, + TAG_H1, + TAG_H2, + TAG_SPAN, + TAG_LINK, + TAG_BR, + TAG_A, + TAG_TABLE, + TAG_TR, + TAG_TD, + TAG_LI, + TAG_UL, + TAG_OL, + TAG_DL, + TAG_DT, + TAG_DD, + TAG_PRE, + TAG_VAR, + TAG_CITE, + TAG_B, + TAG_I, + TAG_CODE, + TAG_SMALL, + TAG_STYLE, + 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 }; -enum html_attr { - HTML_ATTR_CLASS = 0, - HTML_ATTR_HTTP_EQUIV = 1, - HTML_ATTR_CONTENT = 2, - HTML_ATTR_NAME = 3, - HTML_ATTR_TYPE = 4, - HTML_ATTR_REL = 5, - HTML_ATTR_HREF = 6, - HTML_ATTR_WIDTH = 7, +enum htmlfont { + HTMLFONT_NONE = 0, + HTMLFONT_BOLD, + HTMLFONT_ITALIC, + HTMLFONT_BI, + HTMLFONT_CW, + HTMLFONT_MAX }; -enum html_type { - HTML_TYPE_4_01_STRICT = 0 +struct tag { + struct tag *next; + enum htmltag tag; }; -struct html_pair { - enum html_attr attr; - char *val; +struct html { + int flags; +#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_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. */ +#define HTML_BUFFER (1 << 10) /* Collect a word to see if it fits. */ +#define HTML_TOCDONE (1 << 11) /* The TOC was already written. */ + size_t indent; /* current output indentation level */ + int noindent; /* indent disabled by
 */
+	size_t		  col; /* current output byte position */
+	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 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 */
+#define	HTML_TOC	 (1 << 1) /* emit a table of contents */
 };
 
-__BEGIN_DECLS
 
-int		 html_typeput(struct md_mbuf *, 
-			enum html_type, size_t *);
-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 *);
+struct	roff_node;
+struct	tbl_span;
+struct	eqn_box;
 
-__END_DECLS
+void		  roff_html_pre(struct html *, const struct roff_node *);
 
-#endif /*!HTML_H*/
+void		  print_gen_comment(struct html *, struct roff_node *);
+void		  print_gen_decls(struct html *);
+void		  print_gen_head(struct html *);
+void		  print_metaf(struct html *, enum mandoc_esc);
+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_box *);
+void		  print_paragraph(struct html *);
+void		  print_endline(struct html *);
+
+enum roff_tok	  html_fillmode(struct html *, enum roff_tok);
+char		 *html_make_id(const struct roff_node *, int);