1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?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;
- }
- } else if ($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;
- }
- }
- ?>
|