1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | |
19: | |
20: | |
21: | |
22: | |
23: |
|
24: | function smarty_modifier_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
|
25: | {
|
26: |
|
27: | $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
|
28: | $length = 0;
|
29: | $t = '';
|
30: | $_previous = false;
|
31: | $_space = false;
|
32: | foreach ($tokens as $_token) {
|
33: | $token_length = mb_strlen($_token, Smarty::$_CHARSET);
|
34: | $_tokens = array($_token);
|
35: | if ($token_length > $width) {
|
36: | if ($cut) {
|
37: | $_tokens = preg_split(
|
38: | '!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER,
|
39: | $_token,
|
40: | -1,
|
41: | PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE
|
42: | );
|
43: | }
|
44: | }
|
45: | foreach ($_tokens as $token) {
|
46: | $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
|
47: | $token_length = mb_strlen($token, Smarty::$_CHARSET);
|
48: | $length += $token_length;
|
49: | if ($length > $width) {
|
50: |
|
51: | if ($_previous) {
|
52: | $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
|
53: | }
|
54: | if (!$_space) {
|
55: |
|
56: | if (!empty($t)) {
|
57: | $t .= $break;
|
58: | }
|
59: | $length = $token_length;
|
60: | }
|
61: | } elseif ($token === "\n") {
|
62: |
|
63: | $length = 0;
|
64: | }
|
65: | $_previous = $_space;
|
66: |
|
67: | $t .= $token;
|
68: | }
|
69: | }
|
70: | return $t;
|
71: | }
|
72: | |