[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/libs/plugins/ -> shared.mb_wordwrap.php (source)

   1  <?php
   2  /**
   3   * Smarty shared plugin
   4   *
   5   * @package Smarty
   6   * @subpackage PluginsShared
   7   */
   8  
   9  if(!function_exists('smarty_mb_wordwrap')) {
  10  
  11      /**
  12       * Wrap a string to a given number of characters
  13       *
  14       * @link http://php.net/manual/en/function.wordwrap.php for similarity
  15       * @param string  $str   the string to wrap
  16       * @param int     $width the width of the output
  17       * @param string  $break the character used to break the line
  18       * @param boolean $cut   ignored parameter, just for the sake of
  19       * @return string wrapped string
  20       * @author Rodney Rehm
  21       */
  22      function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
  23      {
  24          // break words into tokens using white space as a delimiter
  25          $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
  26          $length = 0;
  27          $t = '';
  28          $_previous = false;
  29  
  30          foreach ($tokens as $_token) {
  31              $token_length = mb_strlen($_token, Smarty::$_CHARSET);
  32              $_tokens = array($_token);
  33              if ($token_length > $width) {
  34                  // remove last space
  35                  $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
  36                  $_previous = false;
  37                  $length = 0;
  38  
  39                  if ($cut) {
  40                      $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
  41                      // broken words go on a new line
  42                      $t .= $break;
  43                  }
  44              }
  45  
  46              foreach ($_tokens as $token) {
  47                  $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
  48                  $token_length = mb_strlen($token, Smarty::$_CHARSET);
  49                  $length += $token_length;
  50  
  51                  if ($length > $width) {
  52                      // remove space before inserted break
  53                      if ($_previous && $token_length < $width) {
  54                          $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
  55                      }
  56  
  57                      // add the break before the token
  58                      $t .= $break;
  59                      $length = $token_length;
  60  
  61                      // skip space after inserting a break
  62                      if ($_space) {
  63                          $length = 0;
  64                          continue;
  65                      }
  66                  } else if ($token == "\n") {
  67                      // hard break must reset counters
  68                      $_previous = 0;
  69                      $length = 0;
  70                  } else {
  71                      // remember if we had a space or not
  72                      $_previous = $_space;
  73                  }
  74                  // add the token
  75                  $t .= $token;
  76              }
  77          }
  78  
  79          return $t;
  80      }
  81  
  82  }
  83  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1