Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
/**
4
 * Framework class for strings that involve multiple values.
5
 *
6
 * Certain CSS properties such as border-width and margin allow multiple
7
 * lengths to be specified.  This class can take a vanilla border-width
8
 * definition and multiply it, usually into a max of four.
9
 *
10
 * @note Even though the CSS specification isn't clear about it, inherit
11
 *       can only be used alone: it will never manifest as part of a multi
12
 *       shorthand declaration.  Thus, this class does not allow inherit.
13
 */
14
class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
15
{
16
    /**
17
     * Instance of component definition to defer validation to.
18
     * @type HTMLPurifier_AttrDef
19
     * @todo Make protected
20
     */
21
    public $single;
22
 
23
    /**
24
     * Max number of values allowed.
25
     * @todo Make protected
26
     */
27
    public $max;
28
 
29
    /**
30
     * @param HTMLPurifier_AttrDef $single HTMLPurifier_AttrDef to multiply
31
     * @param int $max Max number of values allowed (usually four)
32
     */
33
    public function __construct($single, $max = 4)
34
    {
35
        $this->single = $single;
36
        $this->max = $max;
37
    }
38
 
39
    /**
40
     * @param string $string
41
     * @param HTMLPurifier_Config $config
42
     * @param HTMLPurifier_Context $context
43
     * @return bool|string
44
     */
45
    public function validate($string, $config, $context)
46
    {
47
        $string = $this->mungeRgb($this->parseCDATA($string));
48
        if ($string === '') {
49
            return false;
50
        }
51
        $parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n
52
        $length = count($parts);
53
        $final = '';
54
        for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) {
55
            if (ctype_space($parts[$i])) {
56
                continue;
57
            }
58
            $result = $this->single->validate($parts[$i], $config, $context);
59
            if ($result !== false) {
60
                $final .= $result . ' ';
61
                $num++;
62
            }
63
        }
64
        if ($final === '') {
65
            return false;
66
        }
67
        return rtrim($final);
68
    }
69
}
70
 
71
// vim: et sw=4 sts=4