Changeset 15

Show
Ignore:
Timestamp:
17/08/04 18:10:28 (4 years ago)
Author:
steve
Message:

support for #else blocks

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/airspeed.py

    r14 r15  
    4545 
    4646class StringLiteralElement: 
    47     MY_PATTERN = re.compile(r'^"((?:\\["nrbt\\]|[^"\n\r"\\])+)"(.*)', re.S) 
     47    MY_PATTERN = re.compile(r'^"((?:\\["nrbt\\\\]|[^"\n\r"\\])+)"(.*)', re.S) 
    4848    ESCAPED_CHAR = re.compile(r'\\([nrbt"\\])') 
    4949    def __init__(self, text): 
     
    205205        self.remaining_text = m.group(1) 
    206206 
     207class NullElement: 
     208    def evaluate(self, namespace, stream): pass 
    207209 
    208210class IfElement: 
    209     START = re.compile(r'^#if\b\s*(.*)', re.S + re.I) 
     211    START = re.compile(r'^#if\b\s*(.*)$', re.S + re.I) 
     212    START_ELSE = re.compile(r'^#else(.*)$', re.S + re.I) 
     213    else_block = NullElement() 
     214 
    210215    def __init__(self, text): 
    211216        m = self.START.match(text) 
     
    216221        self.block = BlockElement(text) 
    217222        text = self.block.remaining_text 
     223        m = self.START_ELSE.match(text) 
     224        if m: 
     225            text = m.group(1) 
     226            self.else_block = BlockElement(text) 
     227            text = self.else_block.remaining_text 
    218228        try: 
    219229            end = EndElement(text) 
     
    225235        if self.condition.calculate(namespace): 
    226236            self.block.evaluate(namespace, stream) 
     237        else: 
     238            self.else_block.evaluate(namespace, stream) 
    227239 
    228240 
  • trunk/airspeed_test.py

    r14 r15  
    150150        self.assertEquals('"batman"', template.merge({})) 
    151151 
    152 #    def test_else_block_evaluated_if_if_expression_false(self): 
    153 #        template = airspeed.Template('#if ($value) true #else false #end') 
    154 #        self.assertEquals(" false ", template.merge({})) 
     152    def test_string_literal_can_contain_embedded_escaped_newlines(self): 
     153        template = airspeed.Template('#set ($name = "\\\\batman\\nand robin")$name') 
     154        self.assertEquals('\\batman\nand robin', template.merge({})) 
     155 
     156    def test_else_block_evaluated_when_if_expression_false(self): 
     157        template = airspeed.Template('#if ($value) true #else false #end') 
     158        self.assertEquals(" false ", template.merge({})) 
    155159 
    156160