discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: Kristaps Dzonsons <kristaps@bsd.lv>
To: discuss@mdocml.bsd.lv
Subject: HTML5
Date: Sun, 10 Aug 2014 01:33:49 +0200	[thread overview]
Message-ID: <53E6AFDD.8010001@bsd.lv> (raw)

[-- Attachment #1: Type: text/plain, Size: 968 bytes --]

Hi,

Most everybody supports HTML5 these days.  Do we really need to knock 
around with XHTML and HTML-4.01?  Does anybody have a pressing need to 
use one or the other?

The enclosed ten-minute patch adds HTML5 support and makes it the 
default for both modes.  It also adds a default CSS style (if one isn't 
passed on the command line) identical to OpenBSD's man.cgi CSS.  I don't 
like this--I think online manpages should take more advantage of 
online-ness--but I'm just putting up the bikeshed so it's ready to 
paint.  This patch also rips out some chunks (embedded widths, etc.) 
that didn't HTML5 validate, so be warned...

If it looks useful, we could rip out a decent chunk of code that 
switches between the two existing modes.  (Including some attributes and 
elements in there.)  (Yes, I'd document it better, if useful, and 
probably tidy up the *html.c files as well.)

(Note this doesn't include the earlier patch for SCALE_BU.)

Thoughts?

Kristaps

[-- Attachment #2: html5.diff --]
[-- Type: text/plain, Size: 10557 bytes --]

Index: html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.c,v
retrieving revision 1.159
diff -u -p -r1.159 html.c
--- html.c	23 Jul 2014 15:00:08 -0000	1.159
+++ html.c	9 Aug 2014 23:31:38 -0000
@@ -70,12 +70,13 @@ static	const struct htmldata htmltags[TA
 	{"dt",		HTML_CLRLINE}, /* TAG_DT */
 	{"dd",		HTML_CLRLINE}, /* TAG_DD */
 	{"blockquote",	HTML_CLRLINE}, /* TAG_BLOCKQUOTE */
-	{"p",		HTML_CLRLINE | HTML_NOSTACK | HTML_AUTOCLOSE}, /* TAG_P */
+	{"p",		HTML_CLRLINE | HTML_NOSTACK }, /* TAG_P */
 	{"pre",		HTML_CLRLINE }, /* TAG_PRE */
 	{"b",		0 }, /* TAG_B */
 	{"i",		0 }, /* TAG_I */
 	{"code",	0 }, /* TAG_CODE */
 	{"small",	0 }, /* TAG_SMALL */
+	{"style",	HTML_CLRLINE }, /* TAG_STYLE */
 };
 
 static	const char	*const htmlattrs[ATTR_MAX] = {
@@ -93,6 +94,7 @@ static	const char	*const htmlattrs[ATTR_
 	"summary", /* ATTR_SUMMARY */
 	"align", /* ATTR_ALIGN */
 	"colspan", /* ATTR_COLSPAN */
+	"charset", /* ATTR_CHARSET */
 };
 
 static	const char	*const roffscales[SCALE_MAX] = {
@@ -161,14 +163,14 @@ void *
 html_alloc(char *outopts)
 {
 
-	return(ml_alloc(outopts, HTML_HTML_4_01_STRICT));
+	return(ml_alloc(outopts, HTML_HTML5));
 }
 
 void *
 xhtml_alloc(char *outopts)
 {
 
-	return(ml_alloc(outopts, HTML_XHTML_1_0_STRICT));
+	return(ml_alloc(outopts, HTML_HTML5));
 }
 
 void
@@ -194,20 +196,26 @@ void
 print_gen_head(struct html *h)
 {
 	struct htmlpair	 tag[4];
+	struct tag	*t;
 
-	tag[0].key = ATTR_HTTPEQUIV;
-	tag[0].val = "Content-Type";
-	tag[1].key = ATTR_CONTENT;
-	tag[1].val = "text/html; charset=utf-8";
-	print_otag(h, TAG_META, 2, tag);
-
-	tag[0].key = ATTR_NAME;
-	tag[0].val = "resource-type";
-	tag[1].key = ATTR_CONTENT;
-	tag[1].val = "document";
-	print_otag(h, TAG_META, 2, tag);
+	if (HTML_HTML5 == h->type) {
+		tag[0].key = ATTR_CHARSET;
+		tag[0].val = "utf-8";
+		print_otag(h, TAG_META, 1, tag);
+	} else {
+		tag[0].key = ATTR_HTTPEQUIV;
+		tag[0].val = "Content-Type";
+		tag[1].key = ATTR_CONTENT;
+		tag[1].val = "text/html; charset=utf-8";
+		print_otag(h, TAG_META, 2, tag);
+		tag[0].key = ATTR_NAME;
+		tag[0].val = "resource-type";
+		tag[1].key = ATTR_CONTENT;
+		tag[1].val = "document";
+		print_otag(h, TAG_META, 2, tag);
+	}
 
-	if (h->style) {
+	if (NULL != h->style) {
 		tag[0].key = ATTR_REL;
 		tag[0].val = "stylesheet";
 		tag[1].key = ATTR_HREF;
@@ -217,7 +225,66 @@ print_gen_head(struct html *h)
 		tag[3].key = ATTR_MEDIA;
 		tag[3].val = "all";
 		print_otag(h, TAG_LINK, 4, tag);
+		return;
 	}
+
+	/*
+	 * If we don't have a stylesheet, print some nice defaults here.
+	 * This looks like a terminal.
+	 */
+	if (HTML_HTML5 != h->type) {
+		PAIR_INIT(&tag[0], ATTR_TYPE, "text/css");
+		t = print_otag(h, TAG_STYLE, 1, tag);
+	} else 
+		t = print_otag(h, TAG_STYLE, 0, NULL);
+
+	print_text(h, "div.mandoc { min-width: 102ex; "
+		"width: 102ex; font-family: monospace; }\n");
+	print_text(h, "div.mandoc h1, div.mandoc h2 "
+		"{ margin-bottom: 0ex; font-size: inherit; }\n");
+	print_text(h, "div.mandoc h1 { margin-left: -4ex; }\n");
+	print_text(h, "div.mandoc h2 { margin-left: -2ex; }\n");
+       	print_text(h, "div.mandoc div.section { margin: 1ex 5ex; }\n");
+       	print_text(h, "div.mandoc table { width: 100%; }\n");
+	print_text(h, "div.mandoc td { vertical-align: top; }\n");
+       	print_text(h, "div.mandoc blockquote { margin: 0 5ex; }\n");
+       	print_text(h, "div.mandoc table.head.foot "
+		"td:last-child { text-align: right; }\n");
+       	print_text(h, "div.mandoc table.foot td { width: 50%; }\n");
+       	print_text(h, "div.mandoc table.head td { width: 10%; }\n");
+       	print_text(h, "div.mandoc table.head td.head-vol "
+		"{ width: 80%; text-align: center; }\n");
+       	print_text(h, "div.mandoc .emph { font-style: italic; "
+		"font-weight: normal; }\n");
+       	print_text(h, "div.mandoc .symb { font-style: normal; "
+		"font-weight: bold; }\n");
+       	print_text(h, "div.mandoc .symb { font-style: normal; "
+		"font-weight: normal; }\n");
+       	print_text(h, "div.mandoc i.addr.arg.farg.file.ftype."
+		"link-sec.ref-book.ref-issue.ref-jrnl "
+		"{ font-weight: normal; }\n");
+       	print_text(h, "div.mandoc b.cmd.config.diag.flag.fname."
+		"includes.macro.name.var { font-style: normal; }\n");
+       	print_text(h, "div.mandoc span.ref-title "
+		"{ text-decoration: underline; }\n");
+       	print_text(h, "div.mandoc span.type "
+		"{ font-style: italic; font-weight: normal; }\n");
+       	print_text(h, "div.mandoc dd.list-ohang "
+		"{ margin-left: 0ex; }\n");
+	print_text(h, "div.mandoc ul.list-bul "
+		"{ list-style-type: disc; padding-left: 1em; }\n");
+	print_text(h, "div.mandoc ul.list-dash "
+		"{ list-style-type: none; padding-left: 0em; }\n");
+	print_text(h, "div.mandoc li.list-dash:before "
+		"{ content: \'\\\\2014  \'; }\n");
+	print_text(h, "div.mandoc ul.list-hyph "
+		"{ list-style-type: none; padding-left: 0em; }\n");
+	print_text(h, "div.mandoc li.list-hyph:before "
+		"{ content: \'\\\\2013  \'; }\n");
+	print_text(h, "div.mandoc ul.list-item "
+		"{ list-style-type: none; padding-left: 0em; }\n");
+	print_text(h, "div.mandoc ol.list-enum { padding-left: 2em; }\n");
+	print_tagq(h, t);
 }
 
 static void
@@ -508,6 +575,7 @@ print_otag(struct html *h, enum htmltag 
 	if (HTML_AUTOCLOSE & htmltags[tag].flags)
 		switch (h->type) {
 		case HTML_XHTML_1_0_STRICT:
+		case HTML_HTML5:
 			putchar('/');
 			break;
 		default:
@@ -543,6 +611,9 @@ print_gen_decls(struct html *h)
 	const char	*name;
 
 	switch (h->type) {
+	case HTML_HTML5:
+		printf("<!DOCTYPE html>\n");
+		return;
 	case HTML_HTML_4_01_STRICT:
 		name = "HTML";
 		doctype = "-//W3C//DTD HTML 4.01//EN";
Index: html.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.h,v
retrieving revision 1.51
diff -u -p -r1.51 html.h
--- html.h	20 Apr 2014 16:46:04 -0000	1.51
+++ html.h	9 Aug 2014 23:31:38 -0000
@@ -50,6 +50,7 @@ enum	htmltag {
 	TAG_I,
 	TAG_CODE,
 	TAG_SMALL,
+	TAG_STYLE,
 	TAG_MAX
 };
 
@@ -68,6 +69,7 @@ enum	htmlattr {
 	ATTR_SUMMARY,
 	ATTR_ALIGN,
 	ATTR_COLSPAN,
+	ATTR_CHARSET,
 	ATTR_MAX
 };
 
@@ -107,7 +109,8 @@ struct	htmlpair {
 
 enum	htmltype {
 	HTML_HTML_4_01_STRICT,
-	HTML_XHTML_1_0_STRICT
+	HTML_XHTML_1_0_STRICT,
+	HTML_HTML5
 };
 
 struct	html {
Index: man_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v
retrieving revision 1.96
diff -u -p -r1.96 man_html.c
--- man_html.c	1 Aug 2014 19:25:52 -0000	1.96
+++ man_html.c	9 Aug 2014 23:31:38 -0000
@@ -309,14 +309,8 @@ man_root_pre(MAN_ARGS)
 	assert(man->msec);
 	mandoc_asprintf(&title, "%s(%s)", man->title, man->msec);
 
-	PAIR_SUMMARY_INIT(&tag[0], "Document Header");
-	PAIR_CLASS_INIT(&tag[1], "head");
-	PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");
-	t = print_otag(h, TAG_TABLE, 3, tag);
-	PAIR_INIT(&tag[0], ATTR_WIDTH, "30%");
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
+	PAIR_CLASS_INIT(&tag[0], "head");
+	t = print_otag(h, TAG_TABLE, 1, tag);
 
 	print_otag(h, TAG_TBODY, 0, NULL);
 
@@ -328,15 +322,13 @@ man_root_pre(MAN_ARGS)
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "head-vol");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "center");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 	if (NULL != man->vol)
 		print_text(h, man->vol);
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "head-rtitle");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "right");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 	print_text(h, title);
 	print_tagq(h, t);
 	free(title);
@@ -348,13 +340,8 @@ man_root_post(MAN_ARGS)
 	struct htmlpair	 tag[3];
 	struct tag	*t, *tt;
 
-	PAIR_SUMMARY_INIT(&tag[0], "Document Footer");
-	PAIR_CLASS_INIT(&tag[1], "foot");
-	PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");
-	t = print_otag(h, TAG_TABLE, 3, tag);
-	PAIR_INIT(&tag[0], ATTR_WIDTH, "50%");
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
+	PAIR_CLASS_INIT(&tag[0], "foot");
+	t = print_otag(h, TAG_TABLE, 1, tag);
 
 	tt = print_otag(h, TAG_TR, 0, NULL);
 
@@ -366,8 +353,7 @@ man_root_post(MAN_ARGS)
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "foot-os");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "right");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 
 	if (man->source)
 		print_text(h, man->source);
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.195
diff -u -p -r1.195 mdoc_html.c
--- mdoc_html.c	6 Aug 2014 15:09:05 -0000	1.195
+++ mdoc_html.c	9 Aug 2014 23:31:38 -0000
@@ -489,13 +489,8 @@ mdoc_root_post(MDOC_ARGS)
 	struct htmlpair	 tag[3];
 	struct tag	*t, *tt;
 
-	PAIR_SUMMARY_INIT(&tag[0], "Document Footer");
-	PAIR_CLASS_INIT(&tag[1], "foot");
-	PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");
-	t = print_otag(h, TAG_TABLE, 3, tag);
-	PAIR_INIT(&tag[0], ATTR_WIDTH, "50%");
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
+	PAIR_CLASS_INIT(&tag[0], "foot");
+	t = print_otag(h, TAG_TABLE, 1, tag);
 
 	print_otag(h, TAG_TBODY, 0, NULL);
 
@@ -507,8 +502,7 @@ mdoc_root_post(MDOC_ARGS)
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "foot-os");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "right");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 	print_text(h, meta->os);
 	print_tagq(h, t);
 }
@@ -532,14 +526,8 @@ mdoc_root_pre(MDOC_ARGS)
 		mandoc_asprintf(&title, "%s(%s)",
 		    meta->title, meta->msec);
 
-	PAIR_SUMMARY_INIT(&tag[0], "Document Header");
-	PAIR_CLASS_INIT(&tag[1], "head");
-	PAIR_INIT(&tag[2], ATTR_WIDTH, "100%");
-	t = print_otag(h, TAG_TABLE, 3, tag);
-	PAIR_INIT(&tag[0], ATTR_WIDTH, "30%");
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
-	print_otag(h, TAG_COL, 1, tag);
+	PAIR_CLASS_INIT(&tag[0], "head");
+	t = print_otag(h, TAG_TABLE, 1, tag);
 
 	print_otag(h, TAG_TBODY, 0, NULL);
 
@@ -551,14 +539,12 @@ mdoc_root_pre(MDOC_ARGS)
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "head-vol");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "center");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 	print_text(h, volume);
 	print_stagq(h, tt);
 
 	PAIR_CLASS_INIT(&tag[0], "head-rtitle");
-	PAIR_INIT(&tag[1], ATTR_ALIGN, "right");
-	print_otag(h, TAG_TD, 2, tag);
+	print_otag(h, TAG_TD, 1, tag);
 	print_text(h, title);
 	print_tagq(h, t);
 

             reply	other threads:[~2014-08-09 23:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-09 23:33 Kristaps Dzonsons [this message]
2014-08-10  2:23 ` HTML5 Ingo Schwarze
2014-08-10 11:39   ` HTML5 Kristaps Dzonsons
2014-08-10 16:12     ` HTML5 Ingo Schwarze
2014-08-10  4:33 ` HTML5 Anthony J. Bentley
2014-08-10 15:17   ` HTML5 Ingo Schwarze
2014-08-10 17:38     ` HTML5 Anthony J. Bentley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53E6AFDD.8010001@bsd.lv \
    --to=kristaps@bsd.lv \
    --cc=discuss@mdocml.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).