Code

Updated integrated smarty
[gosa.git] / gosa-core / include / smarty / plugins / modifier.truncate.php
1 <?php
2 /**
3  * Smarty plugin
4  *
5  * @package Smarty
6  * @subpackage PluginsModifier
7  */
8  
9 /**
10  * Smarty truncate modifier plugin
11  * 
12  * Type:     modifier<br>
13  * Name:     truncate<br>
14  * Purpose:  Truncate a string to a certain length if necessary,
15  *               optionally splitting in the middle of a word, and
16  *               appending the $etc string or inserting $etc into the middle.
17  * 
18  * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
19  * @author Monte Ohrt <monte at ohrt dot com> 
20  * @param string  $string      input string
21  * @param integer $length      length of truncated text
22  * @param string  $etc         end string
23  * @param boolean $break_words truncate at word boundary
24  * @param boolean $middle      truncate in the middle of text
25  * @return string truncated string
26  */
27 function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) {
28     if ($length == 0)
29         return '';
31     if (SMARTY_MBSTRING /* ^phpunit */&&empty($_SERVER['SMARTY_PHPUNIT_DISABLE_MBSTRING'])/* phpunit$ */) {
32         if (mb_strlen($string, SMARTY_RESOURCE_CHAR_SET) > $length) {
33             $length -= min($length, mb_strlen($etc, SMARTY_RESOURCE_CHAR_SET));
34             if (!$break_words && !$middle) {
35                 $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1, SMARTY_RESOURCE_CHAR_SET));
36             } 
37             if (!$middle) {
38                 return mb_substr($string, 0, $length, SMARTY_RESOURCE_CHAR_SET) . $etc;
39             }
40             return mb_substr($string, 0, $length / 2, SMARTY_RESOURCE_CHAR_SET) . $etc . mb_substr($string, - $length / 2, $length, SMARTY_RESOURCE_CHAR_SET);
41         }
42         return $string;
43     }
44     
45     // no MBString fallback
46     if (isset($string[$length])) {
47         $length -= min($length, strlen($etc));
48         if (!$break_words && !$middle) {
49             $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
50         } 
51         if (!$middle) {
52             return substr($string, 0, $length) . $etc;
53         }
54         return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
55     }
56     return $string;
57
59 ?>