From: fabien Date: Mon, 14 Dec 2009 06:46:16 +0000 (+0000) Subject: included the default filter function definitions in the extension class files directl... X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=1a033bab6f170582b6da3ac1f5d74d0fd4d0c6d1;p=konrad%2Ftwig.git included the default filter function definitions in the extension class files directly (Core, Escaper) git-svn-id: http://svn.twig-project.org/trunk@176 93ef8e89-cb99-4229-a87c-7fa0fa45744b --- diff --git a/CHANGELOG b/CHANGELOG index d146da9..afa74ac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ * 0.9.5-DEV + * included the default filter function definitions in the extension class files directly (Core, Escaper) * added the .. operator (as a syntactic sugar for the range filter when the step is 1) * added the in operator (as a syntactic sugar for the in filter) * added the following filters in the Core extension: in, range diff --git a/lib/Twig/Extension/Core.php b/lib/Twig/Extension/Core.php index 7116bf2..34672be 100644 --- a/lib/Twig/Extension/Core.php +++ b/lib/Twig/Extension/Core.php @@ -17,7 +17,6 @@ class Twig_Extension_Core extends Twig_Extension */ public function initRuntime() { - require_once dirname(__FILE__).'/../runtime.php'; } /** @@ -116,3 +115,216 @@ class Twig_Extension_Core extends Twig_Extension return 'core'; } } + +function twig_date_format_filter($timestamp, $format = 'F j, Y H:i') +{ + return $timestamp instanceof DateTime ? $timestamp->format($format) : date($format, $timestamp); +} + +function twig_urlencode_filter($url, $raw = false) +{ + if ($raw) + { + return rawurlencode($url); + } + + return urlencode($url); +} + +function twig_join_filter($value, $glue = '') +{ + return implode($glue, (array) $value); +} + +function twig_default_filter($value, $default = '') +{ + return is_null($value) ? $default : $value; +} + +function twig_get_array_keys_filter($array) +{ + if (is_object($array) && $array instanceof Traversable) + { + return array_keys(iterator_to_array($array)); + } + + if (!is_array($array)) + { + return array(); + } + + return array_keys($array); +} + +function twig_reverse_filter($array) +{ + if (is_object($array) && $array instanceof Traversable) + { + return array_reverse(iterator_to_array($array)); + } + + if (!is_array($array)) + { + return array(); + } + + return array_reverse($array); +} + +function twig_is_even_filter($value) +{ + return $value % 2 == 0; +} + +function twig_is_odd_filter($value) +{ + return $value % 2 == 1; +} + +function twig_length_filter($thing) +{ + return is_string($thing) ? strlen($thing) : count($thing); +} + +function twig_sort_filter($array) +{ + asort($array); + + return $array; +} + +function twig_in_filter($value, $compare) +{ + if (is_array($compare)) + { + return in_array($value, $compare); + } + elseif (is_string($compare)) + { + return false !== strpos($compare, (string) $value); + } + elseif (is_object($compare) && $compare instanceof Traversable) + { + return in_array($value, iterator_to_array($compare)); + } + + return false; +} + +function twig_range_filter($start, $end, $step = 1) +{ + return range($start, $end, $step); +} + +/* + * Each type specifies a way for applying a transformation to a string + * The purpose is for the string to be "escaped" so it is suitable for + * the format it is being displayed in. + * + * For example, the string: "It's required that you enter a username & password.\n" + * If this were to be displayed as HTML it would be sensible to turn the + * ampersand into '&' and the apostrophe into '&aps;'. However if it were + * going to be used as a string in JavaScript to be displayed in an alert box + * it would be right to leave the string as-is, but c-escape the apostrophe and + * the new line. + */ +function twig_escape_filter(Twig_Environment $env, $string, $type = 'html') +{ + if (!is_string($string)) + { + return $string; + } + + switch ($type) + { + case 'js': + // a function the c-escapes a string, making it suitable to be placed in a JavaScript string + return str_replace(array("\\" , "\n" , "\r" , "\"" , "'"), + array("\\\\", "\\n" , "\\r", "\\\"", "\\'"), + $string); + case 'html': + default: + return htmlspecialchars($string, ENT_QUOTES, $env->getCharset()); + } +} + +// add multibyte extensions if possible +if (function_exists('mb_get_info')) +{ + function twig_upper_filter(Twig_Environment $env, $string) + { + if (!is_null($env->getCharset())) + { + return mb_strtoupper($string, $env->getCharset()); + } + + return strtoupper($string); + } + + function twig_lower_filter(Twig_Environment $env, $string) + { + if (!is_null($env->getCharset())) + { + return mb_strtolower($string, $env->getCharset()); + } + + return strtolower($string); + } + + function twig_title_string_filter(Twig_Environment $env, $string) + { + if (is_null($env->getCharset())) + { + return ucwords(strtolower($string)); + } + + return mb_convert_case($string, MB_CASE_TITLE, $env->getCharset()); + } + + function twig_capitalize_string_filter(Twig_Environment $env, $string) + { + if (is_null($env->getCharset())) + { + return ucfirst(strtolower($string)); + } + + return mb_strtoupper(mb_substr($string, 0, 1, $env->getCharset())). + mb_strtolower(mb_substr($string, 1, mb_strlen($string), $env->getCharset())); + } +} +// and byte fallback +else +{ + function twig_title_string_filter(Twig_Environment $env, $string) + { + return ucwords(strtolower($string)); + } + + function twig_capitalize_string_filter(Twig_Environment $env, $string) + { + return ucfirst(strtolower($string)); + } +} + +function twig_iterator_to_array($seq) +{ + if (is_array($seq)) + { + return $seq; + } + elseif (is_object($seq) && $seq instanceof Traversable) + { + return $seq instanceof Countable ? $seq : iterator_to_array($seq); + } + else + { + return array(); + } +} + +// only for backward compatibility +function twig_get_array_items_filter($array) +{ + // noop + return $array; +} diff --git a/lib/Twig/Extension/Escaper.php b/lib/Twig/Extension/Escaper.php index c6ac240..cefe3ac 100644 --- a/lib/Twig/Extension/Escaper.php +++ b/lib/Twig/Extension/Escaper.php @@ -24,7 +24,6 @@ class Twig_Extension_Escaper extends Twig_Extension */ public function initRuntime() { - require_once dirname(__FILE__).'/../runtime_escaper.php'; } /** @@ -74,3 +73,9 @@ class Twig_Extension_Escaper extends Twig_Extension return 'escaper'; } } + +// tells the escaper node transformer that the string is safe +function twig_safe_filter($string) +{ + return $string; +} diff --git a/lib/Twig/runtime.php b/lib/Twig/runtime.php deleted file mode 100644 index 14235e0..0000000 --- a/lib/Twig/runtime.php +++ /dev/null @@ -1,224 +0,0 @@ -format($format) : date($format, $timestamp); -} - -function twig_urlencode_filter($url, $raw = false) -{ - if ($raw) - { - return rawurlencode($url); - } - - return urlencode($url); -} - -function twig_join_filter($value, $glue = '') -{ - return implode($glue, (array) $value); -} - -function twig_default_filter($value, $default = '') -{ - return is_null($value) ? $default : $value; -} - -function twig_get_array_keys_filter($array) -{ - if (is_object($array) && $array instanceof Traversable) - { - return array_keys(iterator_to_array($array)); - } - - if (!is_array($array)) - { - return array(); - } - - return array_keys($array); -} - -function twig_reverse_filter($array) -{ - if (is_object($array) && $array instanceof Traversable) - { - return array_reverse(iterator_to_array($array)); - } - - if (!is_array($array)) - { - return array(); - } - - return array_reverse($array); -} - -function twig_is_even_filter($value) -{ - return $value % 2 == 0; -} - -function twig_is_odd_filter($value) -{ - return $value % 2 == 1; -} - -function twig_length_filter($thing) -{ - return is_string($thing) ? strlen($thing) : count($thing); -} - -function twig_sort_filter($array) -{ - asort($array); - - return $array; -} - -function twig_in_filter($value, $compare) -{ - if (is_array($compare)) - { - return in_array($value, $compare); - } - elseif (is_string($compare)) - { - return false !== strpos($compare, (string) $value); - } - elseif (is_object($compare) && $compare instanceof Traversable) - { - return in_array($value, iterator_to_array($compare)); - } - - return false; -} - -function twig_range_filter($start, $end, $step = 1) -{ - return range($start, $end, $step); -} - -/* - * Each type specifies a way for applying a transformation to a string - * The purpose is for the string to be "escaped" so it is suitable for - * the format it is being displayed in. - * - * For example, the string: "It's required that you enter a username & password.\n" - * If this were to be displayed as HTML it would be sensible to turn the - * ampersand into '&' and the apostrophe into '&aps;'. However if it were - * going to be used as a string in JavaScript to be displayed in an alert box - * it would be right to leave the string as-is, but c-escape the apostrophe and - * the new line. - */ -function twig_escape_filter(Twig_Environment $env, $string, $type = 'html') -{ - if (!is_string($string)) - { - return $string; - } - - switch ($type) - { - case 'js': - // a function the c-escapes a string, making it suitable to be placed in a JavaScript string - return str_replace(array("\\" , "\n" , "\r" , "\"" , "'"), - array("\\\\", "\\n" , "\\r", "\\\"", "\\'"), - $string); - case 'html': - default: - return htmlspecialchars($string, ENT_QUOTES, $env->getCharset()); - } -} - -// add multibyte extensions if possible -if (function_exists('mb_get_info')) -{ - function twig_upper_filter(Twig_Environment $env, $string) - { - if (!is_null($env->getCharset())) - { - return mb_strtoupper($string, $env->getCharset()); - } - - return strtoupper($string); - } - - function twig_lower_filter(Twig_Environment $env, $string) - { - if (!is_null($env->getCharset())) - { - return mb_strtolower($string, $env->getCharset()); - } - - return strtolower($string); - } - - function twig_title_string_filter(Twig_Environment $env, $string) - { - if (is_null($env->getCharset())) - { - return ucwords(strtolower($string)); - } - - return mb_convert_case($string, MB_CASE_TITLE, $env->getCharset()); - } - - function twig_capitalize_string_filter(Twig_Environment $env, $string) - { - if (is_null($env->getCharset())) - { - return ucfirst(strtolower($string)); - } - - return mb_strtoupper(mb_substr($string, 0, 1, $env->getCharset())). - mb_strtolower(mb_substr($string, 1, mb_strlen($string), $env->getCharset())); - } -} -// and byte fallback -else -{ - function twig_title_string_filter(Twig_Environment $env, $string) - { - return ucwords(strtolower($string)); - } - - function twig_capitalize_string_filter(Twig_Environment $env, $string) - { - return ucfirst(strtolower($string)); - } -} - -function twig_iterator_to_array($seq) -{ - if (is_array($seq)) - { - return $seq; - } - elseif (is_object($seq) && $seq instanceof Traversable) - { - return $seq instanceof Countable ? $seq : iterator_to_array($seq); - } - else - { - return array(); - } -} - -// only for backward compatibility -function twig_get_array_items_filter($array) -{ - // noop - return $array; -} diff --git a/lib/Twig/runtime_escaper.php b/lib/Twig/runtime_escaper.php deleted file mode 100644 index 1a40d48..0000000 --- a/lib/Twig/runtime_escaper.php +++ /dev/null @@ -1,16 +0,0 @@ -