| [ Index ] |
PHP Cross Reference of Limb3 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 * Limb PHP Framework 4 * 5 * @link http://limb-project.com 6 * @copyright Copyright © 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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Sat Nov 22 03:48:54 2008 | Cross-referenced by PHPXref 0.7 |