source: trunk/include/smarty/libs/plugins/shared.mb_wordwrap.php @ 23485

Last change on this file since 23485 was 23485, checked in by rvelices, 11 years ago

Smarty EOL style LF svn property

  • Property svn:eol-style set to LF
File size: 2.8 KB
Line 
1<?php
2/**
3 * Smarty shared plugin
4 *
5 * @package Smarty
6 * @subpackage PluginsShared
7 */
8
9if(!function_exists('smarty_mb_wordwrap')) {
10
11    /**
12     * Wrap a string to a given number of characters
13     *
14     * @link http://php.net/manual/en/function.wordwrap.php for similarity
15     * @param string  $str   the string to wrap
16     * @param int     $width the width of the output
17     * @param string  $break the character used to break the line
18     * @param boolean $cut   ignored parameter, just for the sake of
19     * @return string wrapped string
20     * @author Rodney Rehm
21     */
22    function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
23    {
24        // break words into tokens using white space as a delimiter
25        $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
26        $length = 0;
27        $t = '';
28        $_previous = false;
29
30        foreach ($tokens as $_token) {
31            $token_length = mb_strlen($_token, Smarty::$_CHARSET);
32            $_tokens = array($_token);
33            if ($token_length > $width) {
34                // remove last space
35                $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
36                $_previous = false;
37                $length = 0;
38
39                if ($cut) {
40                    $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
41                    // broken words go on a new line
42                    $t .= $break;
43                }
44            }
45
46            foreach ($_tokens as $token) {
47                $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
48                $token_length = mb_strlen($token, Smarty::$_CHARSET);
49                $length += $token_length;
50
51                if ($length > $width) {
52                    // remove space before inserted break
53                    if ($_previous && $token_length < $width) {
54                        $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
55                    }
56
57                    // add the break before the token
58                    $t .= $break;
59                    $length = $token_length;
60
61                    // skip space after inserting a break
62                    if ($_space) {
63                        $length = 0;
64                        continue;
65                    }
66                } else if ($token == "\n") {
67                    // hard break must reset counters
68                    $_previous = 0;
69                    $length = 0;
70                } else {
71                    // remember if we had a space or not
72                    $_previous = $_space;
73                }
74                // add the token
75                $t .= $token;
76            }
77        }
78
79        return $t;
80    }
81
82}
83?>
Note: See TracBrowser for help on using the repository browser.