vendor/twig-extensions/lib/Twig/Extensions/Extension/Text.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/twig-extensions/lib/Twig/Extensions/Extension/Text.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @author Henrik Bjornskov <hb@peytz.dk>
+ * @package Twig
+ * @subpackage Twig-extensions
+ */
+class Twig_Extensions_Extension_Text extends Twig_Extension
+{
+    /**
+     * Returns a list of filters.
+     *
+     * @return array
+     */
+    public function getFilters()
+    {
+        return array(
+            'truncate' => new Twig_Filter_Function('twig_truncate_filter', array('needs_environment' => true)),
+            'wordwrap' => new Twig_Filter_Function('twig_wordwrap_filter', array('needs_environment' => true)),
+            'nl2br'    => new Twig_Filter_Function('twig_nl2br_filter', array('pre_escape' => 'html', 'is_safe' => array('html'))),
+        );
+    }
+
+    /**
+     * Name of this extension
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return 'Text';
+    }
+}
+
+function twig_nl2br_filter($value, $sep = '<br />')
+{
+    return str_replace("\n", $sep."\n", $value);
+}
+
+if (function_exists('mb_get_info')) {
+    function twig_truncate_filter(Twig_Environment $env, $value, $length = 30, $preserve = false, $separator = '...')
+    {
+        if (mb_strlen($value, $env->getCharset()) > $length) {
+            if ($preserve) {
+                if (false !== ($breakpoint = mb_strpos($value, ' ', $length, $env->getCharset()))) {
+                    $length = $breakpoint;
+                }
+            }
+
+            return mb_substr($value, 0, $length, $env->getCharset()) . $separator;
+        }
+
+        return $value;
+    }
+
+    function twig_wordwrap_filter(Twig_Environment $env, $value, $length = 80, $separator = "\n", $preserve = false)
+    {
+        $sentences = array();
+
+        $previous = mb_regex_encoding();
+        mb_regex_encoding($env->getCharset());
+
+        $pieces = mb_split($separator, $value);
+        mb_regex_encoding($previous);
+
+        foreach ($pieces as $piece) {
+            while(!$preserve && mb_strlen($piece, $env->getCharset()) > $length) {
+                $sentences[] = mb_substr($piece, 0, $length, $env->getCharset());
+                $piece = mb_substr($piece, $length, 2048, $env->getCharset());
+            }
+
+            $sentences[] = $piece;
+        }
+
+        return implode($separator, $sentences);
+    }
+} else {
+  function twig_truncate_filter(Twig_Environment $env, $value, $length = 30, $preserve = false, $separator = '...')
+  {
+      if (strlen($value) > $length) {
+          if ($preserve) {
+              if (false !== ($breakpoint = strpos($value, ' ', $length))) {
+                  $length = $breakpoint;
+              }
+          }
+
+          return substr($value, 0, $length) . $separator;
+      }
+
+      return $value;
+  }
+
+  function twig_wordwrap_filter(Twig_Environment $env, $value, $length = 80, $separator = "\n", $preserve = false)
+  {
+      return wordwrap($value, $length, $separator, !$preserve);
+  }
+}