\section{Directives: Flow Control} \label{flowControl} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#for} \label{flowControl.for} The template: \begin{verbatim} #for $i in $range(10) $i #slurp #end for \end{verbatim} The output: \begin{verbatim} 0 1 2 3 4 5 6 7 8 9 \end{verbatim} The generated code: \begin{verbatim} for i in range(10): write(filter(i)) # generated from '$i' at line 2, col 1. write(' ') \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#repeat} \label{flowControl.repeat} The template: \begin{verbatim} #repeat 3 My bonnie lies over the ocean #end repeat O, bring back my bonnie to me! \end{verbatim} The output: \begin{verbatim} 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! \end{verbatim} (OK, so the second line should be ``sea'' instead of ``ocean''.) The generated code: \begin{verbatim} for __i0 in range(3): write('My bonnie lies over the ocean\n') write('O, bring back my bonnie to me!\n') \end{verbatim} Note that a new local variable of the form \code{\_\_i\$num} will be used for each instance of \code{repeat} in order to permit nesting. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#while} \label{flowControl.while} The template: \begin{verbatim} #set $alive = True #while $alive I am alive! #set $alive = False #end while \end{verbatim} The output: \begin{verbatim} I am alive! \end{verbatim} The generated code: \begin{verbatim} alive = True while alive: write('I am alive!\n') alive = False \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#if} \label{} The template: \begin{verbatim} #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 \end{verbatim} The output: \begin{verbatim} It's small \end{verbatim} The generated code: \begin{verbatim} 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") \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#unless} \label{flowControl.unless} The template: \begin{verbatim} #set $count = 9 #unless $count + 5 > 15 Count is in range. #end unless \end{verbatim} The output: \begin{verbatim} Count is in range. \end{verbatim} The generated code: \begin{verbatim} count = 9 if not (count + 5 > 15): write('Count is in range.\n') \end{verbatim} {\em Note:} There is a bug in Cheetah 0.9.13. It's forgetting the parentheses in the \code{if} expression, which could lead to it calculating something different than it should. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#break and \#continue} \label{flowControl.break} The template: \begin{verbatim} #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 \end{verbatim} The output: \begin{verbatim} 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 11 - 12 - James - \end{verbatim} The generated code: \begin{verbatim} 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(' - ') \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#pass} \label{flowControl.pass} The template: \begin{verbatim} 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. \end{verbatim} The output: \begin{verbatim} Let's check the number. Done checking the number. \end{verbatim} The generated code: \begin{verbatim} 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') \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#stop} \label{flowControl.stop} The template: \begin{verbatim} A cat #if 1 sat on a mat #stop watching a rat #end if in a flat. \end{verbatim} The output: \begin{verbatim} A cat sat on a mat \end{verbatim} The generated code: \begin{verbatim} 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') \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{\#return} \label{flowControl.return} The template: \begin{verbatim} 1 $test[1] 3 #def test 1.5 #if 1 #return '123' #else 99999 #end if #end def \end{verbatim} The output: \begin{verbatim} 1 2 3 \end{verbatim} The generated code: \begin{verbatim} 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 "" \end{verbatim} \begin{verbatim} 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 "" \end{verbatim} % Local Variables: % TeX-master: "devel_guide" % End: