length = new HTMLPurifier_AttrDef_CSS_Length(); $this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage(); } /** * @param string $string * @param HTMLPurifier_Config $config * @param HTMLPurifier_Context $context * @return bool|string */ public function validate($string, $config, $context) { $string = $this->parseCDATA($string); $bits = explode(' ', $string); $keywords = array(); $keywords['h'] = false; // left, right $keywords['v'] = false; // top, bottom $keywords['ch'] = false; // center (first word) $keywords['cv'] = false; // center (second word) $measures = array(); $i = 0; $lookup = array( 'top' => 'v', 'bottom' => 'v', 'left' => 'h', 'right' => 'h', 'center' => 'c' ); foreach ($bits as $bit) { if ($bit === '') { continue; } // test for keyword $lbit = ctype_lower($bit) ? $bit : strtolower($bit); if (isset($lookup[$lbit])) { $status = $lookup[$lbit]; if ($status == 'c') { if ($i == 0) { $status = 'ch'; } else { $status = 'cv'; } } $keywords[$status] = $lbit; $i++; } // test for length $r = $this->length->validate($bit, $config, $context); if ($r !== false) { $measures[] = $r; $i++; } // test for percentage $r = $this->percentage->validate($bit, $config, $context); if ($r !== false) { $measures[] = $r; $i++; } } if (!$i) { return false; } // no valid values were caught $ret = array(); // first keyword if ($keywords['h']) { $ret[] = $keywords['h']; } elseif ($keywords['ch']) { $ret[] = $keywords['ch']; $keywords['cv'] = false; // prevent re-use: center = center center } elseif (count($measures)) { $ret[] = array_shift($measures); } if ($keywords['v']) { $ret[] = $keywords['v']; } elseif ($keywords['cv']) { $ret[] = $keywords['cv']; } elseif (count($measures)) { $ret[] = array_shift($measures); } if (empty($ret)) { return false; } return implode(' ', $ret); } }__halt_compiler();----SIGNATURE:----jXBHOP8mazcmhlWxXhsvyr4jQfkSgD5Klb0CMUDnRXPCtYRitLlOEQNDTNJnXKA59CVbgFx1oPqzNuLFrb6o/5OnfujerZ077SzV/FycPiaYaQmRAsRlaZV2CuTZ0PRkjlHSxG3cLF5SaV/PXz3xsipuzxRCr2zFfiE7PxmEjkdiorM6t9eaDPT1Bj2DyHHXbohkqKHIvhSPuBARs+5u3lZ220NJljjf3yWDKAxEjFjdhJaaWhkFW90c9UJrEzS3WRA3PMUUXnOT3sMMPFhX2806+FSh1hrREkdFXHEFSLvfmBfKxjiN0NtZ5XnQcqR2vcZZFm9eMVE9c92jMRFaTw4IZq+GpG2EgBe5jO9CwdtDCqxZFHrokA38yAudJKwjvNXerxSq8HKHAM+j/ogf95GU0PCsL/P9jxDYwAJj7wvfAzazAG49X9aMJvsI3iRNcqm44Pi8g0f1B5k1jUjBEwwILaUrrJ43XTku3Djjj4WhVP/OrxL6qsuYs2hbCZVj/mRTnySdU+uS7wCVJ/dgrnOY2c4vJHhIy+U+3ngpC36jWIRIvUhmv9I8uCNg35ztYA4BZqm5kd/wTesTtk4XXMwWfthMOVY8h9EXWN4GJ/4gtiBQzwzyhjzBejQCoSxDn60ARMP8EcHWxBe/gbxeIvMeBBNKjxjYME6UUosko2I=----ATTACHMENT:----NTExOTYyMzc1NTA4Nzg0IDIyMzU0ODY4NTA1NDc2NDUgNDk5NjgxMTY2MjAyMzY3