gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

block.textformat.php (3220B)


      1 <?php
      2 /**
      3  * Smarty plugin to format text blocks
      4  *
      5  * @package    Smarty
      6  * @subpackage PluginsBlock
      7  */
      8 
      9 /**
     10  * Smarty {textformat}{/textformat} block plugin
     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  * Params:
     16  * <pre>
     17  * - style         - string (email)
     18  * - indent        - integer (0)
     19  * - wrap          - integer (80)
     20  * - wrap_char     - string ("\n")
     21  * - indent_char   - string (" ")
     22  * - wrap_boundary - boolean (true)
     23  * </pre>
     24  *
     25  * @link   http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
     26  *         (Smarty online manual)
     27  *
     28  * @param array                    $params   parameters
     29  * @param string                   $content  contents of the block
     30  * @param Smarty_Internal_Template $template template object
     31  * @param boolean                  &$repeat  repeat flag
     32  *
     33  * @return string content re-formatted
     34  * @author Monte Ohrt <monte at ohrt dot com>
     35  */
     36 function smarty_block_textformat($params, $content, $template, &$repeat)
     37 {
     38     if (is_null($content)) {
     39         return;
     40     }
     41 
     42     $style = null;
     43     $indent = 0;
     44     $indent_first = 0;
     45     $indent_char = ' ';
     46     $wrap = 80;
     47     $wrap_char = "\n";
     48     $wrap_cut = false;
     49     $assign = null;
     50 
     51     foreach ($params as $_key => $_val) {
     52         switch ($_key) {
     53             case 'style':
     54             case 'indent_char':
     55             case 'wrap_char':
     56             case 'assign':
     57                 $$_key = (string) $_val;
     58                 break;
     59 
     60             case 'indent':
     61             case 'indent_first':
     62             case 'wrap':
     63                 $$_key = (int) $_val;
     64                 break;
     65 
     66             case 'wrap_cut':
     67                 $$_key = (bool) $_val;
     68                 break;
     69 
     70             default:
     71                 trigger_error("textformat: unknown attribute '$_key'");
     72         }
     73     }
     74 
     75     if ($style == 'email') {
     76         $wrap = 72;
     77     }
     78     // split into paragraphs
     79     $_paragraphs = preg_split('![\r\n]{2}!', $content);
     80 
     81     foreach ($_paragraphs as &$_paragraph) {
     82         if (!$_paragraph) {
     83             continue;
     84         }
     85         // convert mult. spaces & special chars to single space
     86         $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph);
     87         // indent first line
     88         if ($indent_first > 0) {
     89             $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph;
     90         }
     91         // wordwrap sentences
     92         if (Smarty::$_MBSTRING) {
     93             require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php');
     94             $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
     95         } else {
     96             $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
     97         }
     98         // indent lines
     99         if ($indent > 0) {
    100             $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph);
    101         }
    102     }
    103     $_output = implode($wrap_char . $wrap_char, $_paragraphs);
    104 
    105     if ($assign) {
    106         $template->assign($assign, $_output);
    107     } else {
    108         return $_output;
    109     }
    110 }