diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/Bootstrap.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/Bootstrap.php | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/Bootstrap.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/Bootstrap.php new file mode 100644 index 00000000..0ab0e341 --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/Bootstrap.php | |||
@@ -0,0 +1,124 @@ | |||
1 | <?php | ||
2 | |||
3 | // constants are slow, so we use as few as possible | ||
4 | if (!defined('HTMLPURIFIER_PREFIX')) { | ||
5 | define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/..')); | ||
6 | } | ||
7 | |||
8 | // accomodations for versions earlier than 5.0.2 | ||
9 | // borrowed from PHP_Compat, LGPL licensed, by Aidan Lister <aidan@php.net> | ||
10 | if (!defined('PHP_EOL')) { | ||
11 | switch (strtoupper(substr(PHP_OS, 0, 3))) { | ||
12 | case 'WIN': | ||
13 | define('PHP_EOL', "\r\n"); | ||
14 | break; | ||
15 | case 'DAR': | ||
16 | define('PHP_EOL', "\r"); | ||
17 | break; | ||
18 | default: | ||
19 | define('PHP_EOL', "\n"); | ||
20 | } | ||
21 | } | ||
22 | |||
23 | /** | ||
24 | * Bootstrap class that contains meta-functionality for HTML Purifier such as | ||
25 | * the autoload function. | ||
26 | * | ||
27 | * @note | ||
28 | * This class may be used without any other files from HTML Purifier. | ||
29 | */ | ||
30 | class HTMLPurifier_Bootstrap | ||
31 | { | ||
32 | |||
33 | /** | ||
34 | * Autoload function for HTML Purifier | ||
35 | * @param string $class Class to load | ||
36 | * @return bool | ||
37 | */ | ||
38 | public static function autoload($class) | ||
39 | { | ||
40 | $file = HTMLPurifier_Bootstrap::getPath($class); | ||
41 | if (!$file) { | ||
42 | return false; | ||
43 | } | ||
44 | // Technically speaking, it should be ok and more efficient to | ||
45 | // just do 'require', but Antonio Parraga reports that with | ||
46 | // Zend extensions such as Zend debugger and APC, this invariant | ||
47 | // may be broken. Since we have efficient alternatives, pay | ||
48 | // the cost here and avoid the bug. | ||
49 | require_once HTMLPURIFIER_PREFIX . '/' . $file; | ||
50 | return true; | ||
51 | } | ||
52 | |||
53 | /** | ||
54 | * Returns the path for a specific class. | ||
55 | * @param string $class Class path to get | ||
56 | * @return string | ||
57 | */ | ||
58 | public static function getPath($class) | ||
59 | { | ||
60 | if (strncmp('HTMLPurifier', $class, 12) !== 0) { | ||
61 | return false; | ||
62 | } | ||
63 | // Custom implementations | ||
64 | if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) { | ||
65 | $code = str_replace('_', '-', substr($class, 22)); | ||
66 | $file = 'HTMLPurifier/Language/classes/' . $code . '.php'; | ||
67 | } else { | ||
68 | $file = str_replace('_', '/', $class) . '.php'; | ||
69 | } | ||
70 | if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) { | ||
71 | return false; | ||
72 | } | ||
73 | return $file; | ||
74 | } | ||
75 | |||
76 | /** | ||
77 | * "Pre-registers" our autoloader on the SPL stack. | ||
78 | */ | ||
79 | public static function registerAutoload() | ||
80 | { | ||
81 | $autoload = array('HTMLPurifier_Bootstrap', 'autoload'); | ||
82 | if (($funcs = spl_autoload_functions()) === false) { | ||
83 | spl_autoload_register($autoload); | ||
84 | } elseif (function_exists('spl_autoload_unregister')) { | ||
85 | if (version_compare(PHP_VERSION, '5.3.0', '>=')) { | ||
86 | // prepend flag exists, no need for shenanigans | ||
87 | spl_autoload_register($autoload, true, true); | ||
88 | } else { | ||
89 | $buggy = version_compare(PHP_VERSION, '5.2.11', '<'); | ||
90 | $compat = version_compare(PHP_VERSION, '5.1.2', '<=') && | ||
91 | version_compare(PHP_VERSION, '5.1.0', '>='); | ||
92 | foreach ($funcs as $func) { | ||
93 | if ($buggy && is_array($func)) { | ||
94 | // :TRICKY: There are some compatibility issues and some | ||
95 | // places where we need to error out | ||
96 | $reflector = new ReflectionMethod($func[0], $func[1]); | ||
97 | if (!$reflector->isStatic()) { | ||
98 | throw new Exception( | ||
99 | 'HTML Purifier autoloader registrar is not compatible | ||
100 | with non-static object methods due to PHP Bug #44144; | ||
101 | Please do not use HTMLPurifier.autoload.php (or any | ||
102 | file that includes this file); instead, place the code: | ||
103 | spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) | ||
104 | after your own autoloaders.' | ||
105 | ); | ||
106 | } | ||
107 | // Suprisingly, spl_autoload_register supports the | ||
108 | // Class::staticMethod callback format, although call_user_func doesn't | ||
109 | if ($compat) { | ||
110 | $func = implode('::', $func); | ||
111 | } | ||
112 | } | ||
113 | spl_autoload_unregister($func); | ||
114 | } | ||
115 | spl_autoload_register($autoload); | ||
116 | foreach ($funcs as $func) { | ||
117 | spl_autoload_register($func); | ||
118 | } | ||
119 | } | ||
120 | } | ||
121 | } | ||
122 | } | ||
123 | |||
124 | // vim: et sw=4 sts=4 | ||