Added the Search API Synonym module to deal specifically with licence and license...
[yaffs-website] / vendor / ezyang / htmlpurifier / library / HTMLPurifier / AttrDef / CSS / Number.php
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