Re: [SMARTY-DEV] Simple math request

From: Date: Mon, 19 Apr 2004 11:39:03 +0000
Subject: Re: [SMARTY-DEV] Simple math request
References: 1 2 3  Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-2298@lists.php.net to get a copy of this message
On Fri, 16 Apr 2004 20:51:37 +0200, Messju Mohr <messju@lammfellpuschen.de> wrote: ...
{$var-5} works, but {5-$var} or {-$var) doesn't. {assign var='var2' value=$var-5} works, but value=5-$var or value=-$var doesn't (value=-$var can accidentally work because of string interpretation). Is it possible to implement at least in parameters? ...
I have this diff against Smarty_Compiler.class.php Well, your diff doesn't work good for my test case.
Today I tried to make my own version of that kludged regexp :) cvs diff Smarty_Compiler.class.php Index: Smarty_Compiler.class.php =================================================================== RCS file: /repository/smarty/libs/Smarty_Compiler.class.php,v retrieving revision 1.320 diff -u -r1.320 Smarty_Compiler.class.php
--- Smarty_Compiler.class.php   16 Apr 2004 10:31:43 -0000      1.320
+++ Smarty_Compiler.class.php 19 Apr 2004 11:26:36 -0000 @@ -115,7 +115,8 @@
         $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]';
         $this->_dvar_guts_regexp = '\w+(?:' . $this->_var_bracket_regexp
                 . ')*(?:\.\$?\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?';
-        $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp;
+        $this->_dvar_regexp = '[-+]?(?:' . $this->_num_const_regexp . $this->_dvar_math_regexp
+                . ')*\$' . $this->_dvar_guts_regexp;
         // matches config vars:
         // #foo#
This covers more cases, but still need some work. At least it doesn't work in modifier parameters. Here is my testcase output. Add { } around the second column.
101:    4                           4
102:    4+5*5                        doesn't compile
103:    5*5+4                        doesn't compile
104:    -0.5*1.5*4                   doesn't compile
111:    $var1                       3
112:    $var1+5*5                   28
113:    5*5+$var1                   28
114:    -0.5*1.5*$var1              -2.25
121:    $testarr1.ind1              1
122:    $testarr1.ind1+5*5          26
123:    5*5+$testarr1.ind1          26
124:    -0.5*1.5*$testarr1.ind1     -0.75
131:    $testarr1[2]                2
132:    $testarr1[2]+5*5            27
133:    5*5+$testarr1[2]            27
134:    -0.5*1.5*$testarr1[2]       -1.5
141:    $testobj1->prop1            12
142:    $testobj1->prop1+5*5        37
143:    5*5+$testobj1->prop1        37
144:    -0.5*1.5*$testobj1->prop1   -9
211:    ''|cat:$var1                       3
212:    ''|cat:$var1+5*5                   28
213:    ''|cat:5*5+$var1                    doesn't compile
214:    ''|cat:-0.5*1.5*$var1               doesn't compile
221:    ''|cat:$testarr1.ind1              1
222:    ''|cat:$testarr1.ind1+5*5          26
223:    ''|cat:5*5+$testarr1.ind1           doesn't compile
224:    ''|cat:-0.5*1.5*$testarr1.ind1      doesn't compile
231:    ''|cat:$testarr1[2]                2
232:    ''|cat:$testarr1[2]+5*5            27
233:    ''|cat:5*5+$testarr1[2]             doesn't compile
234:    ''|cat:-0.5*1.5*$testarr1[2]        doesn't compile
241:    ''|cat:$testobj1->prop1            12
242:    ''|cat:$testobj1->prop1+5*5        37
243:    ''|cat:5*5+$testobj1->prop1         doesn't compile
244:    ''|cat:-0.5*1.5*$testobj1->prop1    doesn't compile
311:    cycle values=$var1                       3
312:    cycle values=$var1+5*5                   28
313:    cycle values=5*5+$var1                   28
314:    cycle values=-0.5*1.5*$var1              -2.25
321:    cycle values=$testarr1.ind1              1
322:    cycle values=$testarr1.ind1+5*5          26
323:    cycle values=5*5+$testarr1.ind1          26
324:    cycle values=-0.5*1.5*$testarr1.ind1     -0.75
331:    cycle values=$testarr1[2]                2
332:    cycle values=$testarr1[2]+5*5            27
333:    cycle values=5*5+$testarr1[2]            27
334:    cycle values=-0.5*1.5*$testarr1[2]       -1.5
341:    cycle values=$testobj1->prop1            12
342:    cycle values=$testobj1->prop1+5*5        37
343:    cycle values=5*5+$testobj1->prop1        37
344:    cycle values=-0.5*1.5*$testobj1->prop1   -9
WBR, Konstantin A. Pelepelin

« previous php.smarty.dev (#2298) next »