[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/i18n/src/template/tags/i18n/ -> clip.filter.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  /**
  10   * @filter i18n_clip
  11   * @min_attributes 1
  12   * @max_attributes 4
  13   * @package i18n
  14   * @version $Id: clip.filter.php 5945 2007-06-06 08:31:43Z pachanga $
  15   */
  16  class I18NClipFilter extends WactCompilerFilter
  17  {
  18    var $str;
  19    var $strlen;
  20    var $start;
  21    var $len;
  22    var $suffix;
  23    var $match;
  24  
  25    function getValue()
  26    {
  27      $suffix = '';
  28  
  29      if ($this->isConstant())
  30      {
  31        $value = $this->base->getValue();
  32        switch (count($this->parameters)) {
  33        case 1:
  34          return lmb_substr($value, 0, $this->parameters[0]->getValue());
  35          break;
  36        case 2:
  37          return lmb_substr($value, $this->parameters[1]->getValue(), $this->parameters[0]->getValue());
  38          break;
  39        case 3:
  40          $suffix = $this->_getSuffix($value,
  41                                     $this->parameters[0]->getValue(),
  42                                     $this->parameters[1]->getValue(),
  43                                     $this->parameters[2]->getValue());
  44          return lmb_substr($value, $this->parameters[1]->getValue(), $this->parameters[0]->getValue()) . $suffix;
  45          break;
  46        case 4:
  47          $limit = $this->parameters[0]->getValue();
  48          $offset = $this->parameters[1]->getValue();
  49          $word_wrap = $this->parameters[3]->getValue();
  50          $suffix = $this->_getSuffix($value, $limit, $offset, $this->parameters[2]->getValue());
  51  
  52          if (strtoupper(substr($word_wrap,0,1)) != 'N')
  53          {
  54              if(lmb_preg_match('~^(.{0,'.$limit.'}(?U)\w*)\b~ism', lmb_substr($value, $offset), $match))
  55                return $match[1].$suffix;
  56              else
  57                return '';
  58          }
  59          else
  60            return lmb_substr($value, $offset, $limit) . $suffix;
  61          break;
  62        default:
  63            throw new WactException('Wrong number of filter parameters(1..4)');
  64        }
  65      }
  66      else
  67        $this->raiseUnresolvedBindingError();
  68    }
  69  
  70    function _getSuffix($value, $limit, $offset, $suffix)
  71    {
  72      $result = '';
  73      if(lmb_strlen($value) > ($limit + $offset))
  74        $result = $suffix;
  75      return $result;
  76    }
  77  
  78    function generatePreStatement($code)
  79    {
  80      parent::generatePreStatement($code);
  81  
  82      switch (count($this->parameters))
  83      {
  84        case 1:
  85          $this->_generateBaseVars($code);
  86          break;
  87        case 2:
  88          $this->_generateBaseVars($code);
  89          $this->_generateOffset($code);
  90          break;
  91        case 3:
  92        case 4:
  93          $this->_generateBaseVars($code);
  94          $this->_generateOffset($code);
  95          $this->_generateSuffix($code);
  96          break;
  97        default:
  98          throw new WactException('Wrong number of filter parameters(1..4)');
  99      }
 100    }
 101  
 102    function generateExpression($code)
 103    {
 104      switch (count($this->parameters))
 105      {
 106        case 1:
 107          $code->writePHP('lmb_substr('.$this->str.',0 ,'.$this->len.')');
 108          break;
 109        case 2:
 110          $code->writePHP('lmb_substr('.$this->str.','.$this->start.','.$this->len.')');
 111          break;
 112        case 3:
 113        case 4:
 114            $code->writePHP('lmb_substr('.$this->str.','.$this->start.','.$this->len.').' . $this->suffix);
 115            break;
 116        default:
 117          throw new WactException('Wrong number of filter parameters(1..4)');
 118      }
 119    }
 120  
 121    protected function _generateBaseVars($code)
 122    {
 123      $this->str = $code->getTempVarRef();
 124      $this->strlen = $code->getTempVarRef();
 125      $this->len = $code->getTempVarRef();
 126  
 127      $code->writePHP($this->str.'=');
 128      $this->base->generateExpression($code);
 129      $code->writePHP(';');
 130  
 131      $code->writePHP($this->strlen.' = lmb_strlen('.$this->str.');');
 132  
 133      $code->writePHP($this->len.'=');
 134      $this->parameters[0]->generateExpression($code);
 135      $code->writePHP(';');
 136    }
 137  
 138    protected function _generateOffset($code)
 139    {
 140  
 141      $this->start = $code->getTempVarRef();
 142  
 143  
 144      $code->writePHP($this->start.'=');
 145      $this->parameters[1]->generateExpression($code);
 146      $code->writePHP(';');
 147  
 148    }
 149  
 150    protected function _generateSuffix($code)
 151    {
 152      $this->suffix = $code->getTempVarRef();
 153  
 154      $code->writePHP($this->suffix.'=('.$this->strlen.'>'.$this->start.'+'.$this->len.')?');
 155      $this->parameters[2]->generateExpression($code);
 156      $code->writePHP(':\'\';');
 157    }
 158  }
 159  
 160  ?>


Generated: Sat Nov 22 03:48:54 2008 Cross-referenced by PHPXref 0.7