1<?php
2
3/**
4 * Validates a Percentage as defined by the CSS spec.
5 */
6class 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