Changeset 26

Show
Ignore:
Timestamp:
19/08/04 12:59:29 (4 years ago)
Author:
steve
Message:

cleaner #foreach

Files:

Legend:

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

    r25 r26  
    511511 
    512512class ForeachDirective(_Element): 
    513     START = re.compile(r'#foreach\s*\(\s*\$([a-z_][a-z0-9_]*)\s*in\s*(.*)$', re.S + re.I) 
    514     END = re.compile(r'\s*\)(.*)$', re.S) 
     513    START = re.compile(r'#foreach\b(.*)$', re.S + re.I) 
     514    OPEN_PAREN = re.compile(r'[ \t]*\(\s*(.*)$', re.S) 
     515    IN = re.compile(r'[ \t]+in[ \t]+(.*)$', re.S) 
     516    LOOP_VAR_NAME = re.compile(r'\$([a-z_][a-z0-9_]*)(.*)$', re.S + re.I) 
     517    CLOSE_PAREN = re.compile(r'[ \t]*\)(.*)$', re.S) 
    515518 
    516519    def parse(self): 
    517520        ## Could be cleaner b/c syntax error if no '(' 
    518         self.loop_var_name, = self.identity_match(self.START) 
     521        self.identity_match(self.START) 
     522        self.require_match(self.OPEN_PAREN, '(') 
     523        self.loop_var_name, = self.require_match(self.LOOP_VAR_NAME, 'loop var name') 
     524        self.require_match(self.IN, 'in') 
    519525        self.value = self.next_element(Value) 
    520         self.require_match(self.END, ')') 
     526        self.require_match(self.CLOSE_PAREN, ')') 
    521527        self.block = self.next_element(Block) 
    522528        self.require_next_element(End, '#end')