From 7607d9dd450275911eec5fcb66b69aacd13a4cc8 Mon Sep 17 00:00:00 2001 From: Shaun McCance Date: Fri, 3 Apr 2015 22:52:36 +0800 Subject: [PATCH] Allow HTML serializer to output HTML5 DOCTYPE For https://bugzilla.gnome.org/show_bug.cgi?id=747301 Use simple HTML5 DOCTYPE for about:legacy-compat HTML5 uses a DOCTYPE without a PUBLIC or SYSTEM identifier. It looks like this: I can't use XSLT to output this, because to get a DOCTYPE I have to provide a PUBLIC or SYSTEM identifier. Luckily, the standards folks recognized this and provided this semantically equivalent form for the HTML DOCTYPE: But people don't like seeing the "legacy" identifier in their output. They'd rather see the shiny new DOCTYPE. Since we know that about:legacy-compat is defined by the W3C to be semantically equivalent to the sans-SYSTEM DOCTYPE, we could just special-case it in the HTML serializer in libxml2. So if you set the SYSTEM identifier to "about:legacy-compat", you get an HTML5 short-form DOCTYPE. --- HTMLtree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HTMLtree.c b/HTMLtree.c index 5c57fc57..2fd0c9c5 100644 --- a/HTMLtree.c +++ b/HTMLtree.c @@ -668,7 +668,8 @@ htmlDtdDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlOutputBufferWriteString(buf, " "); xmlBufWriteQuotedString(buf->buffer, cur->SystemID); } - } else if (cur->SystemID != NULL) { + } else if (cur->SystemID != NULL && + xmlStrcmp(cur->SystemID, BAD_CAST "about:legacy-compat")) { xmlOutputBufferWriteString(buf, " SYSTEM "); xmlBufWriteQuotedString(buf->buffer, cur->SystemID); } -- GitLab