| class Pluf_Text␊ |
| {␊ |
| /**␊ |
| * Wrap a string containing HTML code.␊ |
| *␊ |
| * The HTML is not broken, words are broken only if very long. ␊ |
| *␊ |
| * Improved from a version available on php.net␊ |
| *␊ |
| * @see http://www.php.net/manual/en/function.wordwrap.php#89782␊ |
| *␊ |
| * @param string The string to wrap␊ |
| * @param int The maximal length of a string (45)␊ |
| * @param string Wrap string ("\n")␊ |
| * @return string Wrapped string␊ |
| */␊ |
| public static function wrapHtml($string, $length=45, $wrapString="\n")␊ |
| {␊ |
| $wrapped = '';␊ |
| $word = '';␊ |
| $html = false;␊ |
| $line_len = 0;␊ |
| $n = mb_strlen($string);␊ |
| for ($i=0; $i<$n; $i++) {␊ |
| $char = mb_substr($string, $i, 1);␊ |
| /** HTML Begins */␊ |
| if ($char === '<') {␊ |
| if(!empty($word)) {␊ |
| $wrapped .= $word;␊ |
| $word = '';␊ |
| }␊ |
| $html = true;␊ |
| $wrapped .= $char;␊ |
| } elseif ($char === '>') {␊ |
| /** HTML ends */␊ |
| $html = false;␊ |
| $wrapped .= $char;␊ |
| } elseif ($html) {␊ |
| /** If this is inside HTML -> append to the wrapped string */␊ |
| $wrapped .= $char;␊ |
| } elseif ($char === "\n") {␊ |
| /** Whitespace characted / new line */␊ |
| $wrapped .= $word.$char;␊ |
| $word = '';␊ |
| $line_len = 0;␊ |
| } elseif ($char === ' ' || $char === "\t") {␊ |
| $word .= $char;␊ |
| if(strlen($word) + $line_len <= $length) {␊ |
| $line_len += strlen($word);␊ |
| $wrapped .= $word;␊ |
| $word = '';␊ |
| }␊ |
| ␊ |
| } else {␊ |
| /** Check chars */␊ |
| $word .= $char;␊ |
| if (mb_strlen($word) >= $length) {␊ |
| $wrapped .= $word.$wrapString;␊ |
| $word = '';␊ |
| $line_len = 0;␊ |
| } elseif (mb_strlen($word) + $line_len > $length) {␊ |
| $wrapped .= $wrapString;␊ |
| $line_len = 0;␊ |
| } ␊ |
| }␊ |
| }␊ |
| if ($word !== '') {␊ |
| $wrapped .= $word;␊ |
| }␊ |
| return $wrapped;␊ |
| }␊ |
| ␊ |
| /**␊ |
| * Given a string, cleaned from the not interesting characters,␊ |
| * returns an array with the words as index and the number of␊ |
| * times it was in the text as the value.␊ |