HTML5 の DOCTYPE 宣言を出力できるようにする

メッセージ

関連: BugTrack2/387

かなり場当たり感が目立っていますが、まずは機能を追加して、次にデフォルト引数を変更、最終的にガラッとリファクタリングできればいいかなと思っています。

osdn.net/users/beec1e/pf/pukiwiki/ にコードを置いてあります。

適用しづらそうなので git format-patch で分割したものを用意しました。
xrea.beecle.net/pukiwiki/?Patch/BugTrack2-389

一応 UnitTest も書いてみました(PHPUnit 4.8 なので PHP 5.3 以降限定ですが…)。
PHP 5.3 以降で Regression していることはないはず。
travis-ci.org/beec1e/pukiwiki/builds/167510623

patch

diff --git a/lib/html.php b/lib/html.php
index 6b2fc6c..274dca8 100644
--- a/lib/html.php
+++ b/lib/html.php
@@ -526,6 +526,7 @@ function pkwk_common_headers()
 }

 // DTD definitions
+define('PKWK_DOCTYPE_HTML5',              28);
 define('PKWK_DTD_XHTML_1_1',              17); // Strict only
 define('PKWK_DTD_XHTML_1_0',              16); // Strict
 define('PKWK_DTD_XHTML_1_0_STRICT',       16);
@@ -575,6 +575,9 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
                $option  = 'Transitional';
                $dtd     = 'http:// www.w3.org/TR/html4/loose.dtd';
                break;
+       case PKWK_DOCTYPE_HTML5:
+               $type    = PKWK_DTD_TYPE_HTML;
+               break;

        default: die('DTD not specified or invalid DTD');
                break;
@@ -586,13 +589,17 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
        if ($type == PKWK_DTD_TYPE_XHTML) echo '<?xml version="1.0" encoding="' . $charset . '" ?>' . "\n";

        // Output doctype
-       echo '<!DOCTYPE html PUBLIC "-//W3C//DTD ' .
-               ($type == PKWK_DTD_TYPE_XHTML ? 'XHTML' : 'HTML') . ' ' .
-               $version .
-               ($option != '' ? ' ' . $option : '') .
-               '//EN" "' .
-               $dtd .
-               '">' . "\n";
+       if ($pkwk_dtd == PKWK_DOCTYPE_HTML5) {
+               echo "<!DOCTYPE html>\n";
+       } else {
+               echo '<!DOCTYPE html PUBLIC "-//W3C//DTD ' .
+                       ($type == PKWK_DTD_TYPE_XHTML ? 'XHTML' : 'HTML') . ' ' .
+                       $version .
+                       ($option != '' ? ' ' . $option : '') .
+                       '//EN" "' .
+                       $dtd .
+                       '">' . "\n";
+       }
        // Output <html> start tag
        echo '<html';
@@ -609,6 +616,8 @@ function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHAR
        if ($type == PKWK_DTD_TYPE_XHTML) {
                // NOTE: XHTML 1.1 browser will ignore http-equiv
                return '<meta http-equiv="content-type" content="application/xhtml+xml; charset=' . $charset . '" />' . "\n";
+       } elseif ($pkwk_dtd == PKWK_DOCTYPE_HTML5) {
+               return '<meta charset="' . $charset . '" />' . "\n";
        } else {
                return '<meta http-equiv="content-type" content="text/html; charset=' . $charset . '" />' . "\n";
        }



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-19 (土) 22:28:55
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.188 sec.

SourceForge