Changeset 177

Show
Ignore:
Timestamp:
04/11/08 19:38:03 (9 months ago)
Author:
tal
Message:
Added support for lookup and feature references.
Files:

Legend:

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

    r172 r177  
    192192    "\s*;"                 # ; 
    193193) 
     194 
     195# used for finding feature references 
     196featureReferenceRE = re.compile( 
     197        "([\s;\{\}]|^)"        # whitepace, ; {, } or start of line 
     198        "feature\s+"           # feature 
     199        "([\w\d]{4})"          # name 
     200        "\s*;"                 # { 
     201        ) 
     202 
     203# used for finding lookup references 
     204lookupReferenceRE = re.compile( 
     205        "([\s;\{\}]|^)"        # whitepace, ; {, } or start of line 
     206        "lookup\s+"            # lookup 
     207        "([\w\d]+)"            # name 
     208        "\s*;"                 # { 
     209        ) 
     210 
     211 
    194212 
    195213def _parseUnknown(writer, text): 
     
    290308        text = _executeSimpleSlice(precedingMark, text, includeRE, writer) 
    291309        writer.include(path) 
     310    # feature reference 
     311    featureReferences = featureReferenceRE.findall(text) 
     312    for precedingMark, featureName in featureReferences: 
     313        text = _executeSimpleSlice(precedingMark, text, featureReferenceRE, writer) 
     314        writer.featureReference(featureName) 
     315    # lookup reference 
     316    lookupReferences = lookupReferenceRE.findall(text) 
     317    for precedingMark, lookupName in lookupReferences: 
     318        text = _executeSimpleSlice(precedingMark, text, lookupReferenceRE, writer) 
     319        writer.lookupReference(lookupName) 
    292320    # subtable 
    293321    subtables = subtableRE.findall(text) 
  • packages/feaTools/trunk/Lib/feaTools/test.py

    r112 r177  
    6060    def include(self, path): 
    6161        self._instructions.append(("include", (path))) 
     62 
     63    def subtableBreak(self): 
     64        self._instructions.append(("subtableBreak", None)) 
     65 
     66    def lookupReference(self, name): 
     67        self._instructions.append(("lookupReference", name)) 
     68 
     69    def featureReference(self, name): 
     70        self._instructions.append(("featureReference", name)) 
    6271 
    6372 
     
    578587        self.assertEqual(result, expected) 
    579588 
     589    def testSubtableBreak(self): 
     590        test = """subtable;""" 
     591        writer = TestFeatureWriter() 
     592        parseFeatures(writer, test) 
     593        result = writer.getData() 
     594        expected = [ 
     595                ("subtableBreak", None) 
     596                ] 
     597        self.assertEqual(result, expected) 
     598        # 
     599        test = """subtable;subtable;""" 
     600        writer = TestFeatureWriter() 
     601        parseFeatures(writer, test) 
     602        result = writer.getData() 
     603        expected = [ 
     604                ("subtableBreak", None), 
     605                ("subtableBreak", None) 
     606                ] 
     607        self.assertEqual(result, expected) 
     608 
     609    def testFeatureReference(self): 
     610        test = """feature fooo;""" 
     611        writer = TestFeatureWriter() 
     612        parseFeatures(writer, test) 
     613        result = writer.getData() 
     614        expected = [ 
     615                ("featureReference", "fooo") 
     616                ] 
     617        self.assertEqual(result, expected) 
     618        # 
     619        test = """feature barr {feature fooo;} barr;""" 
     620        writer = TestFeatureWriter() 
     621        parseFeatures(writer, test) 
     622        result = writer.getData() 
     623        expected = [("feature", ("barr", [("featureReference", "fooo")]))] 
     624        self.assertEqual(result, expected) 
     625 
     626    def testLookupReference(self): 
     627        test = """lookup foo;""" 
     628        writer = TestFeatureWriter() 
     629        parseFeatures(writer, test) 
     630        result = writer.getData() 
     631        expected = [ 
     632                ("lookupReference", "foo") 
     633                ] 
     634        self.assertEqual(result, expected) 
     635        # 
     636        test = """lookup bar {lookup foo;} bar;""" 
     637        writer = TestFeatureWriter() 
     638        parseFeatures(writer, test) 
     639        result = writer.getData() 
     640        expected = [("lookup", ("bar", [("lookupReference", "foo")]))] 
     641        self.assertEqual(result, expected) 
     642 
    580643 
    581644if __name__ == "__main__": 
  • packages/feaTools/trunk/Lib/feaTools/writers/baseWriter.py

    r172 r177  
    55 
    66    def lookup(self, name): 
     7        raise NotImplementedError 
     8 
     9    def featureReference(self, name): 
     10        raise NotImplementedError 
     11 
     12    def lookupReference(self, name): 
    713        raise NotImplementedError 
    814