]>
Commit | Line | Data |
---|---|---|
010efc9b AD |
1 | <?php |
2 | ||
3 | /** | |
4 | * Represents a Length as defined by CSS. | |
5 | */ | |
6 | class HTMLPurifier_AttrDef_CSS_Length extends HTMLPurifier_AttrDef | |
7 | { | |
8 | ||
9 | protected $min, $max; | |
10 | ||
11 | /** | |
12 | * @param HTMLPurifier_Length $max Minimum length, or null for no bound. String is also acceptable. | |
13 | * @param HTMLPurifier_Length $max Maximum length, or null for no bound. String is also acceptable. | |
14 | */ | |
15 | public function __construct($min = null, $max = null) { | |
16 | $this->min = $min !== null ? HTMLPurifier_Length::make($min) : null; | |
17 | $this->max = $max !== null ? HTMLPurifier_Length::make($max) : null; | |
18 | } | |
19 | ||
20 | public function validate($string, $config, $context) { | |
21 | $string = $this->parseCDATA($string); | |
22 | ||
23 | // Optimizations | |
24 | if ($string === '') return false; | |
25 | if ($string === '0') return '0'; | |
26 | if (strlen($string) === 1) return false; | |
27 | ||
28 | $length = HTMLPurifier_Length::make($string); | |
29 | if (!$length->isValid()) return false; | |
30 | ||
31 | if ($this->min) { | |
32 | $c = $length->compareTo($this->min); | |
33 | if ($c === false) return false; | |
34 | if ($c < 0) return false; | |
35 | } | |
36 | if ($this->max) { | |
37 | $c = $length->compareTo($this->max); | |
38 | if ($c === false) return false; | |
39 | if ($c > 0) return false; | |
40 | } | |
41 | ||
42 | return $length->toString(); | |
43 | } | |
44 | ||
45 | } | |
46 | ||
47 | // vim: et sw=4 sts=4 |