summaryrefslogtreecommitdiff
path: root/docs/devel_guide_src/flowControl.tex
diff options
context:
space:
mode:
Diffstat (limited to 'docs/devel_guide_src/flowControl.tex')
-rwxr-xr-xdocs/devel_guide_src/flowControl.tex360
1 files changed, 360 insertions, 0 deletions
diff --git a/docs/devel_guide_src/flowControl.tex b/docs/devel_guide_src/flowControl.tex
new file mode 100755
index 0000000..936df67
--- /dev/null
+++ b/docs/devel_guide_src/flowControl.tex
@@ -0,0 +1,360 @@
+\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: