From 6fc07742f8fca9d32db23243d374ea27e8ee4c1e Mon Sep 17 00:00:00 2001 From: rvelices Date: Thu, 20 Jun 2013 03:38:47 +0000 Subject: smarty 3 - first pass for tests git-svn-id: http://piwigo.org/svn/trunk@23384 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/smarty/libs/plugins/modifier.truncate.php | 69 +++++++++++++---------- 1 file changed, 39 insertions(+), 30 deletions(-) (limited to 'include/smarty/libs/plugins/modifier.truncate.php') diff --git a/include/smarty/libs/plugins/modifier.truncate.php b/include/smarty/libs/plugins/modifier.truncate.php index 35c89690a..9a803ec99 100644 --- a/include/smarty/libs/plugins/modifier.truncate.php +++ b/include/smarty/libs/plugins/modifier.truncate.php @@ -1,50 +1,59 @@ * Name: truncate
* Purpose: Truncate a string to a certain length if necessary, - * optionally splitting in the middle of a word, and - * appending the $etc string or inserting $etc into the middle. - * @link http://smarty.php.net/manual/en/language.modifier.truncate.php - * truncate (Smarty online manual) - * @author Monte Ohrt - * @param string - * @param integer - * @param string - * @param boolean - * @param boolean - * @return string + * optionally splitting in the middle of a word, and + * appending the $etc string or inserting $etc into the middle. + * + * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) + * @author Monte Ohrt + * @param string $string input string + * @param integer $length length of truncated text + * @param string $etc end string + * @param boolean $break_words truncate at word boundary + * @param boolean $middle truncate in the middle of text + * @return string truncated string */ -function smarty_modifier_truncate($string, $length = 80, $etc = '...', - $break_words = false, $middle = false) -{ +function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) { if ($length == 0) return ''; - if (strlen($string) > $length) { + if (Smarty::$_MBSTRING) { + if (mb_strlen($string, Smarty::$_CHARSET) > $length) { + $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET)); + if (!$break_words && !$middle) { + $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)); + } + if (!$middle) { + return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; + } + return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET); + } + return $string; + } + + // no MBString fallback + if (isset($string[$length])) { $length -= min($length, strlen($etc)); if (!$break_words && !$middle) { - $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1)); - } - if(!$middle) { + $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); + } + if (!$middle) { return substr($string, 0, $length) . $etc; - } else { - return substr($string, 0, $length/2) . $etc . substr($string, -$length/2); } - } else { - return $string; + return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2); } -} - -/* vim: set expandtab: */ + return $string; +} -?> +?> \ No newline at end of file -- cgit v1.2.3