]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/plugins/shared.mb_wordwrap.php
remove screenshot for greenzero
[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      * @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 ?>