diff options
Diffstat (limited to 'libs/plugins/block.textformat.php')
| -rw-r--r-- | libs/plugins/block.textformat.php | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/libs/plugins/block.textformat.php b/libs/plugins/block.textformat.php index 517fd62d..dc465ac9 100644 --- a/libs/plugins/block.textformat.php +++ b/libs/plugins/block.textformat.php @@ -8,34 +8,35 @@ /** * Smarty {textformat}{/textformat} block plugin - * + * * Type: block function<br> * Name: textformat<br> * Purpose: format text a certain way with preset styles - * or custom wrap/indent settings<br> - * - * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} - * (Smarty online manual) - * @param array $params parameters + * or custom wrap/indent settings<br> + * Params: * <pre> - * Params: style: string (email) - * indent: integer (0) - * wrap: integer (80) - * wrap_char string ("\n") - * indent_char: string (" ") - * wrap_boundary: boolean (true) + * - style - string (email) + * - indent - integer (0) + * - wrap - integer (80) + * - wrap_char - string ("\n") + * - indent_char - string (" ") + * - wrap_boundary - boolean (true) * </pre> - * @author Monte Ohrt <monte at ohrt dot com> - * @param string $content contents of the block - * @param object $template template object - * @param boolean &$repeat repeat flag + * + * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * @param array $params parameters + * @param string $content contents of the block + * @param Smarty_Internal_Template $template template object + * @param boolean &$repeat repeat flag * @return string content re-formatted + * @author Monte Ohrt <monte at ohrt dot com> */ function smarty_block_textformat($params, $content, $template, &$repeat) { if (is_null($content)) { return; - } + } $style = null; $indent = 0; @@ -67,36 +68,41 @@ function smarty_block_textformat($params, $content, $template, &$repeat) default: trigger_error("textformat: unknown attribute '$_key'"); - } - } + } + } if ($style == 'email') { $wrap = 72; - } + } // split into paragraphs - $_paragraphs = preg_split('![\r\n][\r\n]!', $content); + $_paragraphs = preg_split('![\r\n]{2}!', $content); $_output = ''; for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { if ($_paragraphs[$_x] == '') { continue; - } + } // convert mult. spaces & special chars to single space - $_paragraphs[$_x] = preg_replace(array('!\s+!', '!(^\s+)|(\s+$)!'), array(' ', ''), $_paragraphs[$_x]); + $_paragraphs[$_x] = preg_replace(array('!\s+!u', '!(^\s+)|(\s+$)!u'), array(' ', ''), $_paragraphs[$_x]); // indent first line if ($indent_first > 0) { $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; - } + } // wordwrap sentences - $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); + if (SMARTY_MBSTRING /* ^phpunit */&&empty($_SERVER['SMARTY_PHPUNIT_DISABLE_MBSTRING'])/* phpunit$ */) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); + $_paragraphs[$_x] = smarty_mb_wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); + } else { + $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); + } // indent lines if ($indent > 0) { $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); - } - } + } + } $_output = implode($wrap_char . $wrap_char, $_paragraphs); - + return $assign ? $template->assign($assign, $_output) : $_output; -} +} ?>
\ No newline at end of file |
