Skip to content

Commit

Permalink
gitweb: switch to an XHTML5 DOCTYPE
Browse files Browse the repository at this point in the history
According to the HTML Standard FAQ:

	“What is the DOCTYPE for modern HTML documents?

	In text/html documents:

		<!DOCTYPE html>

	In documents delivered with an XML media type: no DOCTYPE is required
	and its use is generally unnecessary. However, you may use one if you
	want (see the following question). Note that the above is well-formed
	XML.”

	Source: [1]

Gitweb uses an XHTML 1.0 DOCTYPE:

	<!DOCTYPE html PUBLIC
	"-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

While that DOCTYPE is still valid [2], it has several disadvantages:

1. It’s misleading. If an XML parser uses the DTD at the given link,
   then the entities &nbsp; and &sdot; won’t get declared. Instead, the
   parser has to use a DTD from the HTML Standard that has nothing to do
   with XHTML 1.0 [2].
2. It’s obsolete. XHTML 1.0 was last revised in 2002 and was superseded in
   2018 [3].
3. It’s unreliable. Gitweb uses &nbsp; and &sdot; but lets an external file
   define them. “[…U]using entity references for characters in XML documents
   is unsafe if they are defined in an external file (except for &lt;, &gt;,
   &amp;, &quot;, and &apos;).” [4]

[1]: <https://github.com/whatwg/html/blob/main/FAQ.md#what-is-the-doctype-for-modern-html-documents>
[2]: <https://html.spec.whatwg.org/multipage/xhtml.html#parsing-xhtml-documents>
[3]: <https://www.w3.org/TR/xhtml1/#xhtml>
[4]: <https://html.spec.whatwg.org/multipage/xhtml.html#writing-xhtml-documents>

Signed-off-by: Jason Yundt <jason@jasonyundt.email>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jayman2000 authored and gitster committed Jun 2, 2022
1 parent 2668e36 commit 0e1a85c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
5 changes: 4 additions & 1 deletion gitweb/gitweb.perl
Expand Up @@ -4219,7 +4219,10 @@ sub git_header_html {
my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
print <<EOF;
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html [
<!ENTITY nbsp "&#xA0;">
<!ENTITY sdot "&#x22C5;">
]>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<!-- git web interface version $version, (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
<!-- git core binaries version $git_version -->
Expand Down
14 changes: 14 additions & 0 deletions t/t9502-gitweb-standalone-parse-output.sh
Expand Up @@ -220,4 +220,18 @@ test_expect_success 'no http-equiv="content-type" in XHTML' '
no_http_equiv_content_type "p=.git;a=tree"
'

proper_doctype() {
gitweb_run "$@" &&
grep -F "<!DOCTYPE html [" gitweb.body &&
grep "<!ENTITY nbsp" gitweb.body &&
grep "<!ENTITY sdot" gitweb.body
}

test_expect_success 'Proper DOCTYPE with entity declarations' '
proper_doctype &&
proper_doctype "p=.git" &&
proper_doctype "p=.git;a=log" &&
proper_doctype "p=.git;a=tree"
'

test_done

0 comments on commit 0e1a85c

Please sign in to comment.