mirror of
https://github.com/moodle/moodle.git
synced 2025-05-07 08:45:43 +02:00
Prior to this change, all the line endings in the imported HTMLPurifier library were using CRLF (\r\n aka Windows style), but the HTMLPurifier source and also the downloadable artefacts use LF (\n aka Linux style) as line endings. This has been the case since 510d190382003985eafd6f4407190d43509016a5 when with the commit "MDL-38672 import HTML Purifier 4.5.0" all line endings were changed from LF to CRLF. There was no comment in the commit on why this change was done. As the original source uses LF, this commit partly reverts 510d190382003985eafd6f4407190d43509016a5 and goes back to LF as line endings. Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
125 lines
4.5 KiB
PHP
125 lines
4.5 KiB
PHP
<?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
|