1: <?php
2:
3: /**
4: * Validates a Percentage as defined by the CSS spec.
5: */
6: class HTMLPurifier_AttrDef_CSS_Percentage extends HTMLPurifier_AttrDef
7: {
8:
9: /**
10: * Instance to defer number validation to.
11: * @type HTMLPurifier_AttrDef_CSS_Number
12: */
13: protected $number_def;
14:
15: /**
16: * @param bool $non_negative Whether to forbid negative values
17: */
18: public function __construct($non_negative = false)
19: {
20: $this->number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative);
21: }
22:
23: /**
24: * @param string $string
25: * @param HTMLPurifier_Config $config
26: * @param HTMLPurifier_Context $context
27: * @return bool|string
28: */
29: public function validate($string, $config, $context)
30: {
31: $string = $this->parseCDATA($string);
32:
33: if ($string === '') {
34: return false;
35: }
36: $length = strlen($string);
37: if ($length === 1) {
38: return false;
39: }
40: if ($string[$length - 1] !== '%') {
41: return false;
42: }
43:
44: $number = substr($string, 0, $length - 1);
45: $number = $this->number_def->validate($number, $config, $context);
46:
47: if ($number === false) {
48: return false;
49: }
50: return "$number%";
51: }
52: }
53:
54: // vim: et sw=4 sts=4
55: