diff options
author | Nicolas Lœuillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
---|---|---|
committer | Nicolas Lœuillet <nicolas@loeuillet.org> | 2014-02-21 15:57:10 +0100 |
commit | 99679d06884120c57f43b44e55e03595f1f87bed (patch) | |
tree | a3f2a1aa1afdaeca1386d0c6e8a75344fd2241fb /inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php | |
parent | 655214ab30ee84884dc408488b85586f36263fcb (diff) | |
parent | d3b47e94705e17b3ba3529cbb1dc6efe69c5d2b7 (diff) | |
download | wallabag-1.5.2.tar.gz wallabag-1.5.2.tar.zst wallabag-1.5.2.zip |
Merge pull request #481 from wallabag/dev1.5.2
1.5.2
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php new file mode 100644 index 00000000..c78f6c9d --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/AttrDef/CSS/Number.php | |||
@@ -0,0 +1,84 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Validates a number as defined by the CSS spec. | ||
5 | */ | ||
6 | class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef | ||
7 | { | ||
8 | |||
9 | /** | ||
10 | * Indicates whether or not only positive values are allowed. | ||
11 | * @type bool | ||
12 | */ | ||
13 | protected $non_negative = false; | ||
14 | |||
15 | /** | ||
16 | * @param bool $non_negative indicates whether negatives are forbidden | ||
17 | */ | ||
18 | public function __construct($non_negative = false) | ||
19 | { | ||
20 | $this->non_negative = $non_negative; | ||
21 | } | ||
22 | |||
23 | /** | ||
24 | * @param string $number | ||
25 | * @param HTMLPurifier_Config $config | ||
26 | * @param HTMLPurifier_Context $context | ||
27 | * @return string|bool | ||
28 | * @warning Some contexts do not pass $config, $context. These | ||
29 | * variables should not be used without checking HTMLPurifier_Length | ||
30 | */ | ||
31 | public function validate($number, $config, $context) | ||
32 | { | ||
33 | $number = $this->parseCDATA($number); | ||
34 | |||
35 | if ($number === '') { | ||
36 | return false; | ||
37 | } | ||
38 | if ($number === '0') { | ||
39 | return '0'; | ||
40 | } | ||
41 | |||
42 | $sign = ''; | ||
43 | switch ($number[0]) { | ||
44 | case '-': | ||
45 | if ($this->non_negative) { | ||
46 | return false; | ||
47 | } | ||
48 | $sign = '-'; | ||
49 | case '+': | ||
50 | $number = substr($number, 1); | ||
51 | } | ||
52 | |||
53 | if (ctype_digit($number)) { | ||
54 | $number = ltrim($number, '0'); | ||
55 | return $number ? $sign . $number : '0'; | ||
56 | } | ||
57 | |||
58 | // Period is the only non-numeric character allowed | ||
59 | if (strpos($number, '.') === false) { | ||
60 | return false; | ||
61 | } | ||
62 | |||
63 | list($left, $right) = explode('.', $number, 2); | ||
64 | |||
65 | if ($left === '' && $right === '') { | ||
66 | return false; | ||
67 | } | ||
68 | if ($left !== '' && !ctype_digit($left)) { | ||
69 | return false; | ||
70 | } | ||
71 | |||
72 | $left = ltrim($left, '0'); | ||
73 | $right = rtrim($right, '0'); | ||
74 | |||
75 | if ($right === '') { | ||
76 | return $left ? $sign . $left : '0'; | ||
77 | } elseif (!ctype_digit($right)) { | ||
78 | return false; | ||
79 | } | ||
80 | return $sign . $left . '.' . $right; | ||
81 | } | ||
82 | } | ||
83 | |||
84 | // vim: et sw=4 sts=4 | ||