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 ""


