| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | <?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;    }}
 |