Changeset 178

Show
Ignore:
Timestamp:
04/11/08 23:13:06 (9 months ago)
Author:
tal
Message:
Filter out strings. A string could contain parsable text. That would confuse the parser.
Files:

Legend:

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

    r177 r178  
    1313# used for removing all comments 
    1414commentRE = re.compile("#.*") 
     15 
     16# used for finding all strings 
     17stringRE = re.compile( 
     18    "\""         # " 
     19    "([^\"]*)"   # anything but " 
     20    "\""         # " 
     21) 
    1522 
    1623# used for removing all comments 
     
    136143    "\s+<"                 # < 
    137144    "([-\d\s]+)"           # value 
    138     "\s*>\s*;"             # >;         
     145    "\s*>\s*;"             # >; 
    139146    ) 
    140147 
     
    447454 
    448455def parseFeatures(writer, text): 
     456    # strip the strings. 
     457    # (an alternative approach would be to escape the strings. 
     458    # the problem is that a string could contain parsable text 
     459    # that would fool the parsing algorithm.) 
     460    text = stringRE.sub("", text) 
    449461    # strip the comments 
    450462    text = commentRE.sub("", text) 
  • packages/feaTools/trunk/Lib/feaTools/test.py

    r177 r178  
    7272 
    7373class TestRead(unittest.TestCase): 
     74 
     75    def testStrings(self): 
     76        test = """ 
     77            "feature test { sub foo by bar; } test;" 
     78        """ 
     79        writer = TestFeatureWriter() 
     80        parseFeatures(writer, test) 
     81        result = writer.getData() 
     82        expected = [] 
     83        self.assertEqual(result, expected) 
    7484 
    7585    def testFeatureBlocks(self): 
     
    608618 
    609619    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")]))] 
     620        test = """feature test;""" 
     621        writer = TestFeatureWriter() 
     622        parseFeatures(writer, test) 
     623        result = writer.getData() 
     624        expected = [ 
     625                ("featureReference", "test") 
     626                ] 
     627        self.assertEqual(result, expected) 
     628        # 
     629        test = """feature TEST {feature test;} TEST;""" 
     630        writer = TestFeatureWriter() 
     631        parseFeatures(writer, test) 
     632        result = writer.getData() 
     633        expected = [("feature", ("TEST", [("featureReference", "test")]))] 
    624634        self.assertEqual(result, expected) 
    625635 
    626636    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")]))] 
     637        test = """lookup test;""" 
     638        writer = TestFeatureWriter() 
     639        parseFeatures(writer, test) 
     640        result = writer.getData() 
     641        expected = [ 
     642                ("lookupReference", "test") 
     643                ] 
     644        self.assertEqual(result, expected) 
     645        # 
     646        test = """lookup TEST {lookup test;} TEST;""" 
     647        writer = TestFeatureWriter() 
     648        parseFeatures(writer, test) 
     649        result = writer.getData() 
     650        expected = [("lookup", ("TEST", [("lookupReference", "test")]))] 
    641651        self.assertEqual(result, expected) 
    642652