]> git.mxchange.org Git - friendica.git/blob - vendor/smarty/smarty/libs/plugins/modifier.truncate.php
Add Smarty to Composer
[friendica.git] / vendor / smarty / 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, '',
39                                        mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
40             }
41             if (!$middle) {
42                 return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
43             }
44
45             return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc .
46                    mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET);
47         }
48
49         return $string;
50     }
51
52     // no MBString fallback
53     if (isset($string[ $length ])) {
54         $length -= min($length, strlen($etc));
55         if (!$break_words && !$middle) {
56             $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
57         }
58         if (!$middle) {
59             return substr($string, 0, $length) . $etc;
60         }
61
62         return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
63     }
64
65     return $string;
66 }