smarty/plugins/block.textformat.php
changeset 0 c63de9eb7045
equal deleted inserted replaced
-1:000000000000 0:c63de9eb7045
       
     1 <?php
       
     2 /**
       
     3  * Smarty plugin
       
     4  * @package Smarty
       
     5  * @subpackage plugins
       
     6  */
       
     7 
       
     8 /**
       
     9  * Smarty {textformat}{/textformat} block plugin
       
    10  *
       
    11  * Type:     block function<br>
       
    12  * Name:     textformat<br>
       
    13  * Purpose:  format text a certain way with preset styles
       
    14  *           or custom wrap/indent settings<br>
       
    15  * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat}
       
    16  *       (Smarty online manual)
       
    17  * @param array
       
    18  * <pre>
       
    19  * Params:   style: string (email)
       
    20  *           indent: integer (0)
       
    21  *           wrap: integer (80)
       
    22  *           wrap_char string ("\n")
       
    23  *           indent_char: string (" ")
       
    24  *           wrap_boundary: boolean (true)
       
    25  * </pre>
       
    26  * @author Monte Ohrt <monte at ohrt dot com>
       
    27  * @param string contents of the block
       
    28  * @param Smarty clever simulation of a method
       
    29  * @return string string $content re-formatted
       
    30  */
       
    31 function smarty_block_textformat($params, $content, &$smarty)
       
    32 {
       
    33     if (is_null($content)) {
       
    34         return;
       
    35     }
       
    36 
       
    37     $style = null;
       
    38     $indent = 0;
       
    39     $indent_first = 0;
       
    40     $indent_char = ' ';
       
    41     $wrap = 80;
       
    42     $wrap_char = "\n";
       
    43     $wrap_cut = false;
       
    44     $assign = null;
       
    45     
       
    46     foreach ($params as $_key => $_val) {
       
    47         switch ($_key) {
       
    48             case 'style':
       
    49             case 'indent_char':
       
    50             case 'wrap_char':
       
    51             case 'assign':
       
    52                 $$_key = (string)$_val;
       
    53                 break;
       
    54 
       
    55             case 'indent':
       
    56             case 'indent_first':
       
    57             case 'wrap':
       
    58                 $$_key = (int)$_val;
       
    59                 break;
       
    60 
       
    61             case 'wrap_cut':
       
    62                 $$_key = (bool)$_val;
       
    63                 break;
       
    64 
       
    65             default:
       
    66                 $smarty->trigger_error("textformat: unknown attribute '$_key'");
       
    67         }
       
    68     }
       
    69 
       
    70     if ($style == 'email') {
       
    71         $wrap = 72;
       
    72     }
       
    73 
       
    74     // split into paragraphs
       
    75     $_paragraphs = preg_split('![\r\n][\r\n]!',$content);
       
    76     $_output = '';
       
    77 
       
    78     for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) {
       
    79         if ($_paragraphs[$_x] == '') {
       
    80             continue;
       
    81         }
       
    82         // convert mult. spaces & special chars to single space
       
    83         $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]);
       
    84         // indent first line
       
    85         if($indent_first > 0) {
       
    86             $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x];
       
    87         }
       
    88         // wordwrap sentences
       
    89         $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut);
       
    90         // indent lines
       
    91         if($indent > 0) {
       
    92             $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]);
       
    93         }
       
    94     }
       
    95     $_output = implode($wrap_char . $wrap_char, $_paragraphs);
       
    96 
       
    97     return $assign ? $smarty->assign($assign, $_output) : $_output;
       
    98 
       
    99 }
       
   100 
       
   101 /* vim: set expandtab: */
       
   102 
       
   103 ?>