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.
48 lines
1.5 KiB
48 lines
1.5 KiB
<?php |
|
|
|
/** |
|
* Implements special behavior for class attribute (normally NMTOKENS) |
|
*/ |
|
class HTMLPurifier_AttrDef_HTML_Class extends HTMLPurifier_AttrDef_HTML_Nmtokens |
|
{ |
|
/** |
|
* @param string $string |
|
* @param HTMLPurifier_Config $config |
|
* @param HTMLPurifier_Context $context |
|
* @return bool|string |
|
*/ |
|
protected function split($string, $config, $context) |
|
{ |
|
// really, this twiddle should be lazy loaded |
|
$name = $config->getDefinition('HTML')->doctype->name; |
|
if ($name == "XHTML 1.1" || $name == "XHTML 2.0") { |
|
return parent::split($string, $config, $context); |
|
} else { |
|
return preg_split('/\s+/', $string); |
|
} |
|
} |
|
|
|
/** |
|
* @param array $tokens |
|
* @param HTMLPurifier_Config $config |
|
* @param HTMLPurifier_Context $context |
|
* @return array |
|
*/ |
|
protected function filter($tokens, $config, $context) |
|
{ |
|
$allowed = $config->get('Attr.AllowedClasses'); |
|
$forbidden = $config->get('Attr.ForbiddenClasses'); |
|
$ret = array(); |
|
foreach ($tokens as $token) { |
|
if (($allowed === null || isset($allowed[$token])) && |
|
!isset($forbidden[$token]) && |
|
// We need this O(n) check because of PHP's array |
|
// implementation that casts -0 to 0. |
|
!in_array($token, $ret, true) |
|
) { |
|
$ret[] = $token; |
|
} |
|
} |
|
return $ret; |
|
} |
|
}
|
|
|