| 1: | <?php | 
| 2: |  | 
| 3: |  | 
| 4: |  | 
| 5: |  | 
| 6: | class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef | 
| 7: | { | 
| 8: |  | 
| 9: |  | 
| 10: |  | 
| 11: |  | 
| 12: |  | 
| 13: | protected $non_negative = false; | 
| 14: |  | 
| 15: |  | 
| 16: |  | 
| 17: |  | 
| 18: | public function __construct($non_negative = false) | 
| 19: | { | 
| 20: | $this->non_negative = $non_negative; | 
| 21: | } | 
| 22: |  | 
| 23: |  | 
| 24: |  | 
| 25: |  | 
| 26: |  | 
| 27: |  | 
| 28: |  | 
| 29: |  | 
| 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: |  | 
| 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: |  | 
| 73: | if (ltrim($left, '0') != '') { | 
| 74: | $left = ltrim($left, '0'); | 
| 75: | } else { | 
| 76: | $left = '0'; | 
| 77: | } | 
| 78: |  | 
| 79: | $right = rtrim($right, '0'); | 
| 80: |  | 
| 81: | if ($right === '') { | 
| 82: | return $left ? $sign . $left : '0'; | 
| 83: | } elseif (!ctype_digit($right)) { | 
| 84: | return false; | 
| 85: | } | 
| 86: | return $sign . $left . '.' . $right; | 
| 87: | } | 
| 88: | } | 
| 89: |  | 
| 90: |  | 
| 91: |  |