=================================================================== RCS file: /cvs/mandoc/html.h,v retrieving revision 1.4 retrieving revision 1.80 diff -u -p -r1.4 -r1.80 --- mandoc/html.h 2008/12/10 17:40:56 1.4 +++ mandoc/html.h 2017/01/29 14:02:42 1.80 @@ -1,86 +1,128 @@ -/* $Id: html.h,v 1.4 2008/12/10 17:40:56 kristaps Exp $ */ +/* $Id: html.h,v 1.80 2017/01/29 14:02:42 schwarze Exp $ */ /* - * Copyright (c) 2008 Kristaps Dzonsons + * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons + * Copyright (c) 2017 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_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_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_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, - HTML_ATTR_ALIGN = 8, - HTML_ATTR_VALIGN = 9, - HTML_ATTR_NOWRAP = 10 +enum htmlfont { + HTMLFONT_NONE = 0, + HTMLFONT_BOLD, + HTMLFONT_ITALIC, + HTMLFONT_BI, + 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_LITERAL (1 << 5) /* literal (e.g.,
) 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. */
+#define	HTML_BUFFER	 (1 << 10) /* Collect a word to see if it fits. */
+	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_man; /* base for manpage href */
+	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 */
 };
 
-__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	tbl_span;
+struct	eqn;
 
-__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 *);
+void		  print_endline(struct html *);
 
-#endif /*!HTML_H*/
+int		  html_strlen(const char *);