|
|
@@ -41,46 +41,58 @@ class Zend_Text_MultiByte
|
|
|
*/
|
|
|
public static function wordWrap($string, $width = 75, $break = "\n", $cut = false, $charset = 'UTF-8')
|
|
|
{
|
|
|
- $result = array();
|
|
|
+ $result = array();
|
|
|
+ $breakWidth = iconv_strlen($break, $charset);
|
|
|
|
|
|
while (($stringLength = iconv_strlen($string, $charset)) > 0) {
|
|
|
- $subString = iconv_substr($string, 0, $width, $charset);
|
|
|
+ $breakPos = iconv_strpos($string, $break, 0, $charset);
|
|
|
|
|
|
- if ($subString === $string) {
|
|
|
- $cutLength = null;
|
|
|
+ if ($breakPos !== false && $breakPos < $width) {
|
|
|
+ if ($breakPos === $stringLength - $breakWidth) {
|
|
|
+ $subString = $string;
|
|
|
+ $cutLength = null;
|
|
|
+ } else {
|
|
|
+ $subString = iconv_substr($string, 0, $breakPos, $charset);
|
|
|
+ $cutLength = $breakPos + $breakWidth;
|
|
|
+ }
|
|
|
} else {
|
|
|
- $nextChar = iconv_substr($string, $width, 1, $charset);
|
|
|
+ $subString = iconv_substr($string, 0, $width, $charset);
|
|
|
|
|
|
- if ($nextChar === ' ' || $nextChar === $break) {
|
|
|
- $afterNextChar = iconv_substr($string, $width + 1, 1, $charset);
|
|
|
-
|
|
|
- if ($afterNextChar === false) {
|
|
|
- $subString .= $nextChar;
|
|
|
- }
|
|
|
-
|
|
|
- $cutLength = iconv_strlen($subString, $charset) + 1;
|
|
|
+ if ($subString === $string) {
|
|
|
+ $cutLength = null;
|
|
|
} else {
|
|
|
- $spacePos = iconv_strrpos($subString, ' ', $charset);
|
|
|
+ $nextChar = iconv_substr($string, $width, 1, $charset);
|
|
|
+
|
|
|
+ if ($breakWidth === 1) {
|
|
|
+ $nextBreak = $nextChar;
|
|
|
+ } else {
|
|
|
+ $nextBreak = iconv_substr($string, $breakWidth, 1, $charset);
|
|
|
+ }
|
|
|
|
|
|
- if ($spacePos !== false) {
|
|
|
- $subString = iconv_substr($subString, 0, $spacePos, $charset);
|
|
|
- $cutLength = $spacePos + 1;
|
|
|
- } else if ($cut === false) {
|
|
|
- $spacePos = iconv_strpos($string, ' ', 0, $charset);
|
|
|
+ if ($nextChar === ' ' || $nextBreak === $break) {
|
|
|
+ $afterNextChar = iconv_substr($string, $width + 1, 1, $charset);
|
|
|
|
|
|
- if ($spacePos !== false) {
|
|
|
- $subString = iconv_substr($string, 0, $spacePos, $charset);
|
|
|
- $cutLength = $spacePos + 1;
|
|
|
- } else {
|
|
|
- $subString = $string;
|
|
|
- $cutLength = null;
|
|
|
+ if ($afterNextChar === false) {
|
|
|
+ $subString .= $nextChar;
|
|
|
}
|
|
|
+
|
|
|
+ $cutLength = iconv_strlen($subString, $charset) + 1;
|
|
|
} else {
|
|
|
- $breakPos = iconv_strpos($subString, $break, 0, $charset);
|
|
|
+ $spacePos = iconv_strrpos($subString, ' ', $charset);
|
|
|
|
|
|
- if ($breakPos !== false) {
|
|
|
- $subString = iconv_substr($subString, 0, $breakPos, $charset);
|
|
|
- $cutLength = $breakPos + 1;
|
|
|
+ if ($spacePos !== false) {
|
|
|
+ $subString = iconv_substr($subString, 0, $spacePos, $charset);
|
|
|
+ $cutLength = $spacePos + 1;
|
|
|
+ } else if ($cut === false) {
|
|
|
+ $spacePos = iconv_strpos($string, ' ', 0, $charset);
|
|
|
+
|
|
|
+ if ($spacePos !== false) {
|
|
|
+ $subString = iconv_substr($string, 0, $spacePos, $charset);
|
|
|
+ $cutLength = $spacePos + 1;
|
|
|
+ } else {
|
|
|
+ $subString = $string;
|
|
|
+ $cutLength = null;
|
|
|
+ }
|
|
|
} else {
|
|
|
$subString = iconv_substr($subString, 0, $width, $charset);
|
|
|
$cutLength = $width;
|