| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | <?php/** * Framework class for strings that involve multiple values. * * Certain CSS properties such as border-width and margin allow multiple * lengths to be specified.  This class can take a vanilla border-width * definition and multiply it, usually into a max of four. * * @note Even though the CSS specification isn't clear about it, inherit *       can only be used alone: it will never manifest as part of a multi *       shorthand declaration.  Thus, this class does not allow inherit. */class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef{    /**     * Instance of component definition to defer validation to.     * @type HTMLPurifier_AttrDef     * @todo Make protected     */    public $single;    /**     * Max number of values allowed.     * @todo Make protected     */    public $max;    /**     * @param HTMLPurifier_AttrDef $single HTMLPurifier_AttrDef to multiply     * @param int $max Max number of values allowed (usually four)     */    public function __construct($single, $max = 4)    {        $this->single = $single;        $this->max = $max;    }    /**     * @param string $string     * @param HTMLPurifier_Config $config     * @param HTMLPurifier_Context $context     * @return bool|string     */    public function validate($string, $config, $context)    {        $string = $this->mungeRgb($this->parseCDATA($string));        if ($string === '') {            return false;        }        $parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n        $length = count($parts);        $final = '';        for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) {            if (ctype_space($parts[$i])) {                continue;            }            $result = $this->single->validate($parts[$i], $config, $context);            if ($result !== false) {                $final .= $result . ' ';                $num++;            }        }        if ($final === '') {            return false;        }        return rtrim($final);    }}// vim: et sw=4 sts=4
 |