Blame view

application/_libs/Smarty-3.0.9/libs/plugins/block.textformat.php 2.86 KB
8d65d0ce   andryeyev   init
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
  <?php
  /**
   * Smarty plugin to format text blocks
   *
   * @package Smarty
   * @subpackage PluginsBlock
   */
  
  /**
   * 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
   * <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 $content contents of the block
   * @param object $template template object
   * @param boolean &$repeat repeat flag
   * @return string content re-formatted
   */
  function smarty_block_textformat($params, $content, $template, &$repeat)
  {
      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:
                  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 ? $template->assign($assign, $_output) : $_output;
  } 
  
  ?>