You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.5 KiB
124 lines
4.5 KiB
<?php |
|
|
|
// constants are slow, so we use as few as possible |
|
if (!defined('HTMLPURIFIER_PREFIX')) { |
|
define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/..')); |
|
} |
|
|
|
// accomodations for versions earlier than 5.0.2 |
|
// borrowed from PHP_Compat, LGPL licensed, by Aidan Lister <aidan@php.net> |
|
if (!defined('PHP_EOL')) { |
|
switch (strtoupper(substr(PHP_OS, 0, 3))) { |
|
case 'WIN': |
|
define('PHP_EOL', "\r\n"); |
|
break; |
|
case 'DAR': |
|
define('PHP_EOL', "\r"); |
|
break; |
|
default: |
|
define('PHP_EOL', "\n"); |
|
} |
|
} |
|
|
|
/** |
|
* Bootstrap class that contains meta-functionality for HTML Purifier such as |
|
* the autoload function. |
|
* |
|
* @note |
|
* This class may be used without any other files from HTML Purifier. |
|
*/ |
|
class HTMLPurifier_Bootstrap |
|
{ |
|
|
|
/** |
|
* Autoload function for HTML Purifier |
|
* @param string $class Class to load |
|
* @return bool |
|
*/ |
|
public static function autoload($class) |
|
{ |
|
$file = HTMLPurifier_Bootstrap::getPath($class); |
|
if (!$file) { |
|
return false; |
|
} |
|
// Technically speaking, it should be ok and more efficient to |
|
// just do 'require', but Antonio Parraga reports that with |
|
// Zend extensions such as Zend debugger and APC, this invariant |
|
// may be broken. Since we have efficient alternatives, pay |
|
// the cost here and avoid the bug. |
|
require_once HTMLPURIFIER_PREFIX . '/' . $file; |
|
return true; |
|
} |
|
|
|
/** |
|
* Returns the path for a specific class. |
|
* @param string $class Class path to get |
|
* @return string |
|
*/ |
|
public static function getPath($class) |
|
{ |
|
if (strncmp('HTMLPurifier', $class, 12) !== 0) { |
|
return false; |
|
} |
|
// Custom implementations |
|
if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) { |
|
$code = str_replace('_', '-', substr($class, 22)); |
|
$file = 'HTMLPurifier/Language/classes/' . $code . '.php'; |
|
} else { |
|
$file = str_replace('_', '/', $class) . '.php'; |
|
} |
|
if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) { |
|
return false; |
|
} |
|
return $file; |
|
} |
|
|
|
/** |
|
* "Pre-registers" our autoloader on the SPL stack. |
|
*/ |
|
public static function registerAutoload() |
|
{ |
|
$autoload = array('HTMLPurifier_Bootstrap', 'autoload'); |
|
if (($funcs = spl_autoload_functions()) === false) { |
|
spl_autoload_register($autoload); |
|
} elseif (function_exists('spl_autoload_unregister')) { |
|
if (version_compare(PHP_VERSION, '5.3.0', '>=')) { |
|
// prepend flag exists, no need for shenanigans |
|
spl_autoload_register($autoload, true, true); |
|
} else { |
|
$buggy = version_compare(PHP_VERSION, '5.2.11', '<'); |
|
$compat = version_compare(PHP_VERSION, '5.1.2', '<=') && |
|
version_compare(PHP_VERSION, '5.1.0', '>='); |
|
foreach ($funcs as $func) { |
|
if ($buggy && is_array($func)) { |
|
// :TRICKY: There are some compatibility issues and some |
|
// places where we need to error out |
|
$reflector = new ReflectionMethod($func[0], $func[1]); |
|
if (!$reflector->isStatic()) { |
|
throw new Exception( |
|
'HTML Purifier autoloader registrar is not compatible |
|
with non-static object methods due to PHP Bug #44144; |
|
Please do not use HTMLPurifier.autoload.php (or any |
|
file that includes this file); instead, place the code: |
|
spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) |
|
after your own autoloaders.' |
|
); |
|
} |
|
// Suprisingly, spl_autoload_register supports the |
|
// Class::staticMethod callback format, although call_user_func doesn't |
|
if ($compat) { |
|
$func = implode('::', $func); |
|
} |
|
} |
|
spl_autoload_unregister($func); |
|
} |
|
spl_autoload_register($autoload); |
|
foreach ($funcs as $func) { |
|
spl_autoload_register($func); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
// vim: et sw=4 sts=4
|
|
|