]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/plugins/modifier.truncate.php
reverting tinymce changes, updating smarty to 3.1.19
[friendica.git] / library / Smarty / libs / 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  * Type:     modifier<br>
12  * Name:     truncate<br>
13  * Purpose:  Truncate a string to a certain length if necessary,
14  *               optionally splitting in the middle of a word, and
15  *               appending the $etc string or inserting $etc into the middle.
16  *
17  * @link   http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
18  * @author Monte Ohrt <monte at ohrt dot com>
19  *
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  *
26  * @return string truncated string
27  */
28 function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
29 {
30     if ($length == 0) {
31         return '';
32     }
33
34     if (Smarty::$_MBSTRING) {
35         if (mb_strlen($string, Smarty::$_CHARSET) > $length) {
36             $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET));
37             if (!$break_words && !$middle) {
38                 $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
39             }
40             if (!$middle) {
41                 return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
42             }
43
44             return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET);
45         }
46
47         return $string;
48     }
49
50     // no MBString fallback
51     if (isset($string[$length])) {
52         $length -= min($length, strlen($etc));
53         if (!$break_words && !$middle) {
54             $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
55         }
56         if (!$middle) {
57             return substr($string, 0, $length) . $etc;
58         }
59
60         return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
61     }
62
63     return $string;
64 }