diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-04-23 12:37:47 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-04-23 12:38:00 +0200 |
commit | fa7ee92a7824cfd185b9da50dff9581230ca64d1 (patch) | |
tree | baecfb244ba3a3c2ea09b3dc2c62b80b2af770c2 /3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php | |
parent | f7098f402e323ac676cd74f0acc902dc2e2bcfab (diff) |
update htmlpurifier
Diffstat (limited to '3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php')
-rw-r--r-- | 3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php | 183 |
1 files changed, 105 insertions, 78 deletions
diff --git a/3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php b/3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php index ec999d652..16d2a6b98 100644 --- a/3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php +++ b/3rdparty/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php @@ -1,78 +1,105 @@ -<?php
-
-/**
- * Validates Color as defined by CSS.
- */
-class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
-{
-
- public function validate($color, $config, $context) {
-
- static $colors = null;
- if ($colors === null) $colors = $config->get('Core.ColorKeywords');
-
- $color = trim($color);
- if ($color === '') return false;
-
- $lower = strtolower($color);
- if (isset($colors[$lower])) return $colors[$lower];
-
- if (strpos($color, 'rgb(') !== false) {
- // rgb literal handling
- $length = strlen($color);
- if (strpos($color, ')') !== $length - 1) return false;
- $triad = substr($color, 4, $length - 4 - 1);
- $parts = explode(',', $triad);
- if (count($parts) !== 3) return false;
- $type = false; // to ensure that they're all the same type
- $new_parts = array();
- foreach ($parts as $part) {
- $part = trim($part);
- if ($part === '') return false;
- $length = strlen($part);
- if ($part[$length - 1] === '%') {
- // handle percents
- if (!$type) {
- $type = 'percentage';
- } elseif ($type !== 'percentage') {
- return false;
- }
- $num = (float) substr($part, 0, $length - 1);
- if ($num < 0) $num = 0;
- if ($num > 100) $num = 100;
- $new_parts[] = "$num%";
- } else {
- // handle integers
- if (!$type) {
- $type = 'integer';
- } elseif ($type !== 'integer') {
- return false;
- }
- $num = (int) $part;
- if ($num < 0) $num = 0;
- if ($num > 255) $num = 255;
- $new_parts[] = (string) $num;
- }
- }
- $new_triad = implode(',', $new_parts);
- $color = "rgb($new_triad)";
- } else {
- // hexadecimal handling
- if ($color[0] === '#') {
- $hex = substr($color, 1);
- } else {
- $hex = $color;
- $color = '#' . $color;
- }
- $length = strlen($hex);
- if ($length !== 3 && $length !== 6) return false;
- if (!ctype_xdigit($hex)) return false;
- }
-
- return $color;
-
- }
-
-}
-
-// vim: et sw=4 sts=4
+<?php + +/** + * Validates Color as defined by CSS. + */ +class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef +{ + + /** + * @param string $color + * @param HTMLPurifier_Config $config + * @param HTMLPurifier_Context $context + * @return bool|string + */ + public function validate($color, $config, $context) + { + static $colors = null; + if ($colors === null) { + $colors = $config->get('Core.ColorKeywords'); + } + + $color = trim($color); + if ($color === '') { + return false; + } + + $lower = strtolower($color); + if (isset($colors[$lower])) { + return $colors[$lower]; + } + + if (strpos($color, 'rgb(') !== false) { + // rgb literal handling + $length = strlen($color); + if (strpos($color, ')') !== $length - 1) { + return false; + } + $triad = substr($color, 4, $length - 4 - 1); + $parts = explode(',', $triad); + if (count($parts) !== 3) { + return false; + } + $type = false; // to ensure that they're all the same type + $new_parts = array(); + foreach ($parts as $part) { + $part = trim($part); + if ($part === '') { + return false; + } + $length = strlen($part); + if ($part[$length - 1] === '%') { + // handle percents + if (!$type) { + $type = 'percentage'; + } elseif ($type !== 'percentage') { + return false; + } + $num = (float)substr($part, 0, $length - 1); + if ($num < 0) { + $num = 0; + } + if ($num > 100) { + $num = 100; + } + $new_parts[] = "$num%"; + } else { + // handle integers + if (!$type) { + $type = 'integer'; + } elseif ($type !== 'integer') { + return false; + } + $num = (int)$part; + if ($num < 0) { + $num = 0; + } + if ($num > 255) { + $num = 255; + } + $new_parts[] = (string)$num; + } + } + $new_triad = implode(',', $new_parts); + $color = "rgb($new_triad)"; + } else { + // hexadecimal handling + if ($color[0] === '#') { + $hex = substr($color, 1); + } else { + $hex = $color; + $color = '#' . $color; + } + $length = strlen($hex); + if ($length !== 3 && $length !== 6) { + return false; + } + if (!ctype_xdigit($hex)) { + return false; + } + } + return $color; + } +} + +// vim: et sw=4 sts=4 |