File indexing completed on 2024-05-26 06:02:31

0001 <?php
0002 
0003 /**
0004  * Validates a Percentage as defined by the CSS spec.
0005  */
0006 class HTMLPurifier_AttrDef_CSS_Percentage extends HTMLPurifier_AttrDef
0007 {
0008 
0009     /**
0010      * Instance to defer number validation to.
0011      * @type HTMLPurifier_AttrDef_CSS_Number
0012      */
0013     protected $number_def;
0014 
0015     /**
0016      * @param bool $non_negative Whether to forbid negative values
0017      */
0018     public function __construct($non_negative = false)
0019     {
0020         $this->number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative);
0021     }
0022 
0023     /**
0024      * @param string $string
0025      * @param HTMLPurifier_Config $config
0026      * @param HTMLPurifier_Context $context
0027      * @return bool|string
0028      */
0029     public function validate($string, $config, $context)
0030     {
0031         $string = $this->parseCDATA($string);
0032 
0033         if ($string === '') {
0034             return false;
0035         }
0036         $length = strlen($string);
0037         if ($length === 1) {
0038             return false;
0039         }
0040         if ($string[$length - 1] !== '%') {
0041             return false;
0042         }
0043 
0044         $number = substr($string, 0, $length - 1);
0045         $number = $this->number_def->validate($number, $config, $context);
0046 
0047         if ($number === false) {
0048             return false;
0049         }
0050         return "$number%";
0051     }
0052 }
0053 
0054 // vim: et sw=4 sts=4