+ if(defined('PKWK_ZLIB_LOADABLE_MODULE')) {
+ $matches = array();
+ if(ini_get('zlib.output_compression') &&
+ preg_match('/\b(gzip|deflate)\b/i', $_SERVER['HTTP_ACCEPT_ENCODING'], $matches)) {
+ // Bug #29350 output_compression compresses everything _without header_ as loadable module
+ // http://bugs.php.net/bug.php?id=29350
+ header('Content-Encoding: ' . $matches[1]);
+ header('Vary: Accept-Encoding');
+ }
+ }
+}
+
+// DTD definitions
+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);
+define('PKWK_DTD_XHTML_1_0_TRANSITIONAL', 15);
+define('PKWK_DTD_XHTML_1_0_FRAMESET', 14);
+define('PKWK_DTD_HTML_4_01', 3); // Strict
+define('PKWK_DTD_HTML_4_01_STRICT', 3);
+define('PKWK_DTD_HTML_4_01_TRANSITIONAL', 2);
+define('PKWK_DTD_HTML_4_01_FRAMESET', 1);
+
+define('PKWK_DTD_TYPE_XHTML', 1);
+define('PKWK_DTD_TYPE_HTML', 0);
+
+// Output HTML DTD, <html> start tag. Return content-type.
+function pkwk_output_dtd($pkwk_dtd = PKWK_DTD_XHTML_1_1, $charset = CONTENT_CHARSET)
+{
+ static $called;
+ if (isset($called)) die('pkwk_output_dtd() already called. Why?');
+ $called = TRUE;
+
+ $type = PKWK_DTD_TYPE_XHTML;
+ $option = '';
+ switch($pkwk_dtd){
+ case PKWK_DTD_XHTML_1_1 :
+ $version = '1.1' ;
+ $dtd = 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd';
+ break;
+ case PKWK_DTD_XHTML_1_0_STRICT :
+ $version = '1.0' ;
+ $option = 'Strict';
+ $dtd = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd';
+ break;
+ case PKWK_DTD_XHTML_1_0_TRANSITIONAL:
+ $version = '1.0' ;
+ $option = 'Transitional';
+ $dtd = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd';
+ break;
+
+ case PKWK_DTD_HTML_4_01_STRICT :
+ $type = PKWK_DTD_TYPE_HTML;
+ $version = '4.01';
+ $dtd = 'http://www.w3.org/TR/html4/strict.dtd';
+ break;
+ case PKWK_DTD_HTML_4_01_TRANSITIONAL:
+ $type = PKWK_DTD_TYPE_HTML;
+ $version = '4.01';
+ $option = 'Transitional';
+ $dtd = 'http://www.w3.org/TR/html4/loose.dtd';
+ break;
+
+ default: die('DTD not specified or invalid DTD');
+ break;