diff options
Diffstat (limited to 'www/dev_guide/flowControl.rst')
-rw-r--r-- | www/dev_guide/flowControl.rst | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/www/dev_guide/flowControl.rst b/www/dev_guide/flowControl.rst new file mode 100644 index 0000000..8b97f31 --- /dev/null +++ b/www/dev_guide/flowControl.rst @@ -0,0 +1,394 @@ +Directives: Flow Control +======================== + +(flowControl) + +#for +---- + +(flowControl.for) + +The template: + +:: + + #for $i in $range(10) + $i #slurp + #end for + +The output: + +:: + + 0 1 2 3 4 5 6 7 8 9 + +The generated code: + +:: + + for i in range(10): + write(filter(i)) # generated from '$i' at line 2, col 1. + write(' ') + +#repeat +------- + +(flowControl.repeat) + +The template: + +:: + + #repeat 3 + My bonnie lies over the ocean + #end repeat + O, bring back my bonnie to me! + +The output: + +:: + + My bonnie lies over the ocean + My bonnie lies over the ocean + My bonnie lies over the ocean + O, bring back my bonnie to me! + +(OK, so the second line should be "sea" instead of "ocean".) + +The generated code: + +:: + + for __i0 in range(3): + write('My bonnie lies over the ocean\n') + write('O, bring back my bonnie to me!\n') + +Note that a new local variable of the form {\_\_i$num} will be used +for each instance of {repeat} in order to permit nesting. + +#while +------ + +(flowControl.while) + +The template: + +:: + + #set $alive = True + #while $alive + I am alive! + #set $alive = False + #end while + +The output: + +:: + + I am alive! + +The generated code: + +:: + + alive = True + while alive: + write('I am alive!\n') + alive = False + +#if +--- + +() + +The template: + +:: + + #set $size = 500 + #if $size >= 1500 + It's big + #else if $size < 1500 and $size > 0 + It's small + #else + It's not there + #end if + +The output: + +:: + + It's small + +The generated code: + +:: + + size = 500 + if size >= 1500: + write("It's big\n") + elif size < 1500 and size > 0: + write("It's small\n") + else: + write("It's not there\n") + +#unless +------- + +(flowControl.unless) + +The template: + +:: + + #set $count = 9 + #unless $count + 5 > 15 + Count is in range. + #end unless + +The output: + +:: + + Count is in range. + +The generated code: + +:: + + count = 9 + if not (count + 5 > 15): + write('Count is in range.\n') + +{ Note:} There is a bug in Cheetah 0.9.13. It's forgetting the +parentheses in the {if} expression, which could lead to it +calculating something different than it should. + +#break and #continue +-------------------- + +(flowControl.break) + +The template: + +:: + + #for $i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow'] + #if $i == 10 + #continue + #end if + #if $i == 'Joe' + #break + #end if + $i - #slurp + #end for + +The output: + +:: + + 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 11 - 12 - James - + +The generated code: + +:: + + for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow']: + if i == 10: + write('') + continue + if i == 'Joe': + write('') + break + write(filter(i)) # generated from '$i' at line 8, col 1. + write(' - ') + +#pass +----- + +(flowControl.pass) + +The template: + +:: + + Let's check the number. + #set $size = 500 + #if $size >= 1500 + It's big + #elif $size > 0 + #pass + #else + Invalid entry + #end if + Done checking the number. + +The output: + +:: + + Let's check the number. + Done checking the number. + +The generated code: + +:: + + write("Let's check the number.\n") + size = 500 + if size >= 1500: + write("It's big\n") + elif size > 0: + pass + else: + write('Invalid entry\n') + write('Done checking the number.\n') + +#stop +----- + +(flowControl.stop) + +The template: + +:: + + A cat + #if 1 + sat on a mat + #stop + watching a rat + #end if + in a flat. + +The output: + +:: + + A cat + sat on a mat + +The generated code: + +:: + + write('A cat\n') + if 1: + write(' sat on a mat\n') + if dummyTrans: + return trans.response().getvalue() + else: + return "" + write(' watching a rat\n') + write('in a flat.\n') + +#return +------- + +(flowControl.return) + +The template: + +:: + + 1 + $test[1] + 3 + #def test + 1.5 + #if 1 + #return '123' + #else + 99999 + #end if + #end def + +The output: + +:: + + 1 + 2 + 3 + +The generated code: + +:: + + def test(self, + trans=None, + dummyTrans=False, + VFS=valueFromSearchList, + VFN=valueForName, + getmtime=getmtime, + currentTime=time.time): + + + """ + Generated from #def test at line 5, col 1. + """ + + if not trans: + trans = DummyTransaction() + dummyTrans = True + write = trans.response().write + SL = self._searchList + filter = self._currentFilter + globalSetVars = self._globalSetVars + + ######################################## + ## START - generated method body + + write('1.5\n') + if 1: + return '123' + else: + write('99999\n') + + ######################################## + ## END - generated method body + + if dummyTrans: + return trans.response().getvalue() + else: + return "" + +:: + + def respond(self, + trans=None, + dummyTrans=False, + VFS=valueFromSearchList, + VFN=valueForName, + getmtime=getmtime, + currentTime=time.time): + + + """ + This is the main method generated by Cheetah + """ + + if not trans: + trans = DummyTransaction() + dummyTrans = True + write = trans.response().write + SL = self._searchList + filter = self._currentFilter + globalSetVars = self._globalSetVars + + ######################################## + ## START - generated method body + + write('\n1\n') + write(filter(VFS(SL,"test",1)[1])) # generated from '$test[1]' at line 3, col 1. + write('\n3\n') + + ######################################## + ## END - generated method body + + if dummyTrans: + return trans.response().getvalue() + else: + return "" + + |