Blame view

libs/SMARTY/plugins/block.textformat.php 2.78 KB
42868d70   andryeyev   Создал GIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  <?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: */
  
  ?>