109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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()
 | 
						|
    {
 | 
						|
        $filters = 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)),
 | 
						|
        );
 | 
						|
 | 
						|
        if (version_compare(Twig_Environment::VERSION, '1.5.0-DEV', '<')) {
 | 
						|
            $filters['nl2br'] = new Twig_Filter_Function('twig_nl2br_filter', array('pre_escape' => 'html', 'is_safe' => array('html')));
 | 
						|
        }
 | 
						|
 | 
						|
        return $filters;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 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);
 | 
						|
    }
 | 
						|
} |