diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php new file mode 100644 index 00000000..73d586f2 --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Multiple.php | |||
@@ -0,0 +1,71 @@ | |||
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->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 | ||