]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/plugins/shared.mb_wordwrap.php
reverting tinymce changes, updating smarty to 3.1.19
[friendica.git] / library / Smarty / libs / plugins / shared.mb_wordwrap.php
1 <?php
2 /**
3  * Smarty shared plugin
4  *
5  * @package    Smarty
6  * @subpackage PluginsShared
7  */
8
9 if (!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      *
16      * @param  string  $str   the string to wrap
17      * @param  int     $width the width of the output
18      * @param  string  $break the character used to break the line
19      * @param  boolean $cut   ignored parameter, just for the sake of
20      *
21      * @return string  wrapped string
22      * @author Rodney Rehm
23      */
24     function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
25     {
26         // break words into tokens using white space as a delimiter
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
32         foreach ($tokens as $_token) {
33             $token_length = mb_strlen($_token, Smarty::$_CHARSET);
34             $_tokens = array($_token);
35             if ($token_length > $width) {
36                 // remove last space
37                 $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
38                 $_previous = false;
39                 $length = 0;
40
41                 if ($cut) {
42                     $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
43                     // broken words go on a new line
44                     $t .= $break;
45                 }
46             }
47
48             foreach ($_tokens as $token) {
49                 $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
50                 $token_length = mb_strlen($token, Smarty::$_CHARSET);
51                 $length += $token_length;
52
53                 if ($length > $width) {
54                     // remove space before inserted break
55                     if ($_previous && $token_length < $width) {
56                         $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
57                     }
58
59                     // add the break before the token
60                     $t .= $break;
61                     $length = $token_length;
62
63                     // skip space after inserting a break
64                     if ($_space) {
65                         $length = 0;
66                         continue;
67                     }
68                 } elseif ($token == "\n") {
69                     // hard break must reset counters
70                     $_previous = 0;
71                     $length = 0;
72                 } else {
73                     // remember if we had a space or not
74                     $_previous = $_space;
75                 }
76                 // add the token
77                 $t .= $token;
78             }
79         }
80
81         return $t;
82     }
83 }