| 
<?php/**
 * Smarty shared plugin
 *
 * @package Smarty
 * @subpackage PluginsShared
 */
 
 if (!function_exists('smarty_mb_wordwrap')) {
 
 /**
 * Wrap a string to a given number of characters
 *
 * @link http://php.net/manual/en/function.wordwrap.php for similarity
 * @param  string  $str   the string to wrap
 * @param  int     $width the width of the output
 * @param  string  $break the character used to break the line
 * @param  boolean $cut   ignored parameter, just for the sake of
 * @return string  wrapped string
 * @author Rodney Rehm
 */
 function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
 {
 // break words into tokens using white space as a delimiter
 $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
 $length = 0;
 $t = '';
 $_previous = false;
 
 foreach ($tokens as $_token) {
 $token_length = mb_strlen($_token, Smarty::$_CHARSET);
 $_tokens = array($_token);
 if ($token_length > $width) {
 // remove last space
 $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
 $_previous = false;
 $length = 0;
 
 if ($cut) {
 $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
 // broken words go on a new line
 $t .= $break;
 }
 }
 
 foreach ($_tokens as $token) {
 $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
 $token_length = mb_strlen($token, Smarty::$_CHARSET);
 $length += $token_length;
 
 if ($length > $width) {
 // remove space before inserted break
 if ($_previous && $token_length < $width) {
 $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
 }
 
 // add the break before the token
 $t .= $break;
 $length = $token_length;
 
 // skip space after inserting a break
 if ($_space) {
 $length = 0;
 continue;
 }
 } elseif ($token == "\n") {
 // hard break must reset counters
 $_previous = 0;
 $length = 0;
 } else {
 // remember if we had a space or not
 $_previous = $_space;
 }
 // add the token
 $t .= $token;
 }
 }
 
 return $t;
 }
 
 }
 
 |