mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.8 KiB
103 lines
2.8 KiB
<?php |
|
/** |
|
* Smarty plugin |
|
* @package Smarty |
|
* @subpackage plugins |
|
*/ |
|
|
|
/** |
|
* 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 |
|
* <pre> |
|
* Params: 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 contents of the block |
|
* @param Smarty clever simulation of a method |
|
* @return string string $content re-formatted |
|
*/ |
|
function smarty_block_textformat($params, $content, &$smarty) |
|
{ |
|
if (is_null($content)) { |
|
return; |
|
} |
|
|
|
$style = null; |
|
$indent = 0; |
|
$indent_first = 0; |
|
$indent_char = ' '; |
|
$wrap = 80; |
|
$wrap_char = "\n"; |
|
$wrap_cut = false; |
|
$assign = null; |
|
|
|
foreach ($params as $_key => $_val) { |
|
switch ($_key) { |
|
case 'style': |
|
case 'indent_char': |
|
case 'wrap_char': |
|
case 'assign': |
|
$$_key = (string)$_val; |
|
break; |
|
|
|
case 'indent': |
|
case 'indent_first': |
|
case 'wrap': |
|
$$_key = (int)$_val; |
|
break; |
|
|
|
case 'wrap_cut': |
|
$$_key = (bool)$_val; |
|
break; |
|
|
|
default: |
|
$smarty->trigger_error("textformat: unknown attribute '$_key'"); |
|
} |
|
} |
|
|
|
if ($style == 'email') { |
|
$wrap = 72; |
|
} |
|
|
|
// split into paragraphs |
|
$_paragraphs = preg_split('![\r\n][\r\n]!',$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]); |
|
// 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); |
|
// 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 ? $smarty->assign($assign, $_output) : $_output; |
|
|
|
} |
|
|
|
/* vim: set expandtab: */ |
|
|
|
?>
|
|
|