4 * This file is part of Twig.
6 * (c) 2009 Fabien Potencier
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
11 * @author Henrik Bjornskov <hb@peytz.dk>
13 * @subpackage Twig-extensions
15 class Twig_Extensions_Extension_Text
extends Twig_Extension
18 * Returns a list of filters.
22 public function getFilters()
25 'truncate' => new Twig_Filter_Function('twig_truncate_filter', array('needs_environment' => true)),
26 'wordwrap' => new Twig_Filter_Function('twig_wordwrap_filter', array('needs_environment' => true)),
29 if (version_compare(Twig_Environment
::VERSION
, '1.5.0-DEV', '<')) {
30 $filters['nl2br'] = new Twig_Filter_Function('twig_nl2br_filter', array('pre_escape' => 'html', 'is_safe' => array('html')));
37 * Name of this extension
41 public function getName()
47 function twig_nl2br_filter($value, $sep = '<br />')
49 return str_replace("\n", $sep."\n", $value);
52 if (function_exists('mb_get_info')) {
53 function twig_truncate_filter(Twig_Environment
$env, $value, $length = 30, $preserve = false, $separator = '...')
55 if (mb_strlen($value, $env->getCharset()) > $length) {
57 if (false !== ($breakpoint = mb_strpos($value, ' ', $length, $env->getCharset()))) {
58 $length = $breakpoint;
62 return rtrim(mb_substr($value, 0, $length, $env->getCharset())) . $separator;
68 function twig_wordwrap_filter(Twig_Environment
$env, $value, $length = 80, $separator = "\n", $preserve = false)
72 $previous = mb_regex_encoding();
73 mb_regex_encoding($env->getCharset());
75 $pieces = mb_split($separator, $value);
76 mb_regex_encoding($previous);
78 foreach ($pieces as $piece) {
79 while(!$preserve && mb_strlen($piece, $env->getCharset()) > $length) {
80 $sentences[] = mb_substr($piece, 0, $length, $env->getCharset());
81 $piece = mb_substr($piece, $length, 2048, $env->getCharset());
84 $sentences[] = $piece;
87 return implode($separator, $sentences);
90 function twig_truncate_filter(Twig_Environment
$env, $value, $length = 30, $preserve = false, $separator = '...')
92 if (strlen($value) > $length) {
94 if (false !== ($breakpoint = strpos($value, ' ', $length))) {
95 $length = $breakpoint;
99 return rtrim(substr($value, 0, $length)) . $separator;
105 function twig_wordwrap_filter(Twig_Environment
$env, $value, $length = 80, $separator = "\n", $preserve = false)
107 return wordwrap($value, $length, $separator, !$preserve);