summaryrefslogtreecommitdiff
path: root/www/dev_guide/flowControl.rst
diff options
context:
space:
mode:
Diffstat (limited to 'www/dev_guide/flowControl.rst')
-rw-r--r--www/dev_guide/flowControl.rst394
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 ""
+
+