Changeset 179

Show
Ignore:
Timestamp:
04/11/08 23:21:22 (9 months ago)
Author:
tal
Message:
Ignore table blocks.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • packages/feaTools/trunk/Lib/feaTools/parser.py

    r178 r179  
    6868        ] 
    6969 
     70# used for finding all table names. 
     71table_findAll_RE = re.compile( 
     72        "([\s;\{\}]|^)"        # whitepace, ; {, } or start of line 
     73        "table\s+"             # table 
     74        "([\w\d]{4})"          # name 
     75        "\s*{"                 # { 
     76        ) 
     77 
     78# used for finding the content of tables. 
     79# this regular expression will be compiled 
     80# for each table name found. 
     81tableContentRE = [ 
     82        "([\s;\{\}]|^)",       # whitepace, ; {, } or start of line 
     83        "table\s+",            # feature 
     84        # table name           # name 
     85        "\s*\{",               # { 
     86        "([\S\s]*)",           # content 
     87        "}\s*",                # } 
     88        # table name           # name 
     89        "\s*;"                 # ; 
     90        ] 
     91 
    7092# used for finding all class definitions. 
    7193classDefinitionRE = re.compile( 
     
    220242def _parseUnknown(writer, text): 
    221243    text = text.strip() 
     244    ## extract all table names 
     245    tableNames = table_findAll_RE.findall(text) 
     246    for precedingMark, tableName in tableNames: 
     247        # a regular expression specific to this lookup must 
     248        # be created so that nested lookups are safely handled 
     249        thisTableContentRE = list(tableContentRE) 
     250        thisTableContentRE.insert(2, tableName) 
     251        thisTableContentRE.insert(6, tableName) 
     252        thisTableContentRE = re.compile("".join(thisTableContentRE)) 
     253        found = thisTableContentRE.search(text) 
     254        tableText = found.group(2) 
     255        start, end = found.span() 
     256        precedingText = text[:start] 
     257        if precedingMark: 
     258            precedingText += precedingMark 
     259        _parseUnknown(writer, precedingText) 
     260        _parseTable(writer, tableName, tableText) 
     261        text = text[end:] 
    222262    ## extract all feature names 
    223263    featureNames = feature_findAll_RE.findall(text) 
     
    352392    parsed = _parseUnknown(lookupWriter, lookup) 
    353393 
     394def _parseTable(writer, name, table): 
     395    # this could parse table secific data. 
     396    # for now, simply ignore the text. 
     397    pass 
     398 
    354399def _parseClass(writer, name, content): 
    355400    content = classContentRE.findall(content) 
  • packages/feaTools/trunk/Lib/feaTools/test.py

    r178 r179  
    188188                ("lookup", ("TEST", [])) 
    189189                ]))] 
     190        self.assertEqual(result, expected) 
     191 
     192    def testTableBlocks(self): 
     193        test = """ 
     194        table test { 
     195        } test; 
     196        """ 
     197        writer = TestFeatureWriter() 
     198        parseFeatures(writer, test) 
     199        result = writer.getData() 
     200        expected = [] 
     201        self.assertEqual(result, expected) 
     202        # 
     203        test = """ 
     204        table test{}test; 
     205        """ 
     206        writer = TestFeatureWriter() 
     207        parseFeatures(writer, test) 
     208        result = writer.getData() 
     209        expected = [] 
     210        self.assertEqual(result, expected) 
     211        # 
     212        test = """ 
     213        table test { 
     214            lookup TEST {} TEST; 
     215        } test; 
     216        """ 
     217        writer = TestFeatureWriter() 
     218        parseFeatures(writer, test) 
     219        result = writer.getData() 
     220        expected = [] 
     221        self.assertEqual(result, expected) 
     222        # 
     223        test = """ 
     224        table test { 
     225            feature TEST {} TEST; 
     226        } test; 
     227        """ 
     228        writer = TestFeatureWriter() 
     229        parseFeatures(writer, test) 
     230        result = writer.getData() 
     231        expected = [] 
    190232        self.assertEqual(result, expected) 
    191233