Changeset 184

Show
Ignore:
Timestamp:
04/12/08 10:19:56 (2 years ago)
Author:
tal
Message:
Added support for lookupflag.
Files:

Legend:

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

    r181 r184  
    246246        ) 
    247247 
    248  
     248# use for finding all lookup flags 
     249lookupflagRE = re.compile( 
     250        "([\s;\{\}]|^)"        # whitepace, ; {, } or start of line 
     251        "lookupflag\s+"        # lookupflag 
     252        "([\w\d,\s]+)"         # values 
     253        "\s*;"                 # ; 
     254        ) 
    249255 
    250256def _parseUnknown(writer, text): 
     
    378384        text = _executeSimpleSlice(precedingMark, text, lookupReferenceRE, writer) 
    379385        writer.lookupReference(lookupName) 
    380     # subtable 
     386    # lookupflag 
     387    lookupflags = lookupflagRE.findall(text) 
     388    for precedingMark, lookupflagValues in lookupflags: 
     389        text = _executeSimpleSlice(precedingMark, text, lookupflagRE, writer) 
     390        _parseLookupFlag(writer, lookupflagValues) 
     391    # subtable break 
    381392    subtables = subtableRE.findall(text) 
    382393    for precedingMark in subtables: 
     
    516527    writer.gposType2(target, value) 
    517528 
     529def _parseLookupFlag(writer, values): 
     530    values = values.replace(",", " ") 
     531    values = [i for i in values.split(" ") if i] 
     532    # lookupflag format B is not supported except for value 0 
     533    if len(values) == 1: 
     534        try: 
     535            v = int(values[0]) 
     536            if v != 0: 
     537                raise FeaToolsParserSyntaxError("lookupflag format B is not supported for any value other than 0") 
     538            else: 
     539                writer.lookupFlag() 
     540                return 
     541        except ValueError: 
     542            pass 
     543    rightToLeft = False 
     544    ignoreBaseGlyphs = False 
     545    ignoreLigatures = False 
     546    ignoreMarks = False 
     547    possibleValues = ["RightToLeft", "IgnoreBaseGlyphs", "IgnoreLigatures", "IgnoreMarks"] 
     548    for value in values: 
     549        if value not in possibleValues: 
     550            raise FeaToolsParserSyntaxError("Unknown lookupflag value: %s" % value) 
     551        if value == "RightToLeft": 
     552            rightToLeft = True 
     553        elif value == "IgnoreBaseGlyphs": 
     554            ignoreBaseGlyphs = True 
     555        elif value == "IgnoreLigatures": 
     556            ignoreLigatures = True 
     557        elif value == "IgnoreMarks": 
     558            ignoreMarks = True 
     559    writer.lookupFlag(rightToLeft=rightToLeft, ignoreBaseGlyphs=ignoreBaseGlyphs, ignoreLigatures=ignoreLigatures, ignoreMarks=ignoreMarks) 
     560 
    518561def parseFeatures(writer, text): 
    519562    # strip the strings. 
  • packages/feaTools/trunk/Lib/feaTools/test.py

    r181 r184  
    3131        self._instructions.append(("class", (name, contents))) 
    3232 
     33    def lookupFlag(self, rightToLeft=False, ignoreBaseGlyphs=False, ignoreLigatures=False, ignoreMarks=False): 
     34        self._instructions.append(("lookup flag", (rightToLeft, ignoreBaseGlyphs, ignoreLigatures, ignoreMarks))) 
     35 
    3336    def gsubType1(self, target, replacement): 
    3437        self._instructions.append(("gsub type 1", (target, replacement))) 
     
    6265 
    6366    def subtableBreak(self): 
    64         self._instructions.append(("subtableBreak", None)) 
     67        self._instructions.append(("subtable break", None)) 
    6568 
    6669    def lookupReference(self, name): 
    67         self._instructions.append(("lookupReference", name)) 
     70        self._instructions.append(("lookup reference", name)) 
    6871 
    6972    def featureReference(self, name): 
    70         self._instructions.append(("featureReference", name)) 
     73        self._instructions.append(("feature reference", name)) 
    7174 
    7275 
     
    230233        result = writer.getData() 
    231234        expected = [] 
     235        self.assertEqual(result, expected) 
     236 
     237    def testLookupFlag(self): 
     238        test = """lookupflag RightToLeft;""" 
     239        writer = TestFeatureWriter() 
     240        parseFeatures(writer, test) 
     241        result = writer.getData() 
     242        expected = [ 
     243                ("lookup flag", (True, False, False, False)) 
     244                ] 
     245        self.assertEqual(result, expected) 
     246        # 
     247        test = """lookupflag IgnoreBaseGlyphs;""" 
     248        writer = TestFeatureWriter() 
     249        parseFeatures(writer, test) 
     250        result = writer.getData() 
     251        expected = [ 
     252                ("lookup flag", (False, True, False, False)) 
     253                ] 
     254        self.assertEqual(result, expected) 
     255        # 
     256        test = """lookupflag IgnoreLigatures;""" 
     257        writer = TestFeatureWriter() 
     258        parseFeatures(writer, test) 
     259        result = writer.getData() 
     260        expected = [ 
     261                ("lookup flag", (False, False, True, False)) 
     262                ] 
     263        self.assertEqual(result, expected) 
     264        # 
     265        test = """lookupflag IgnoreMarks;""" 
     266        writer = TestFeatureWriter() 
     267        parseFeatures(writer, test) 
     268        result = writer.getData() 
     269        expected = [ 
     270                ("lookup flag", (False, False, False, True)) 
     271                ] 
     272        self.assertEqual(result, expected) 
     273        # 
     274        test = """lookupflag RightToLeft, IgnoreBaseGlyphs, IgnoreLigatures, IgnoreMarks;""" 
     275        writer = TestFeatureWriter() 
     276        parseFeatures(writer, test) 
     277        result = writer.getData() 
     278        expected = [ 
     279                ("lookup flag", (True, True, True, True)) 
     280                ] 
     281        self.assertEqual(result, expected) 
     282        # 
     283        test = """lookupflag 0;""" 
     284        writer = TestFeatureWriter() 
     285        parseFeatures(writer, test) 
     286        result = writer.getData() 
     287        expected = [ 
     288                ("lookup flag", (False, False, False, False)) 
     289                ] 
    232290        self.assertEqual(result, expected) 
    233291 
     
    691749        result = writer.getData() 
    692750        expected = [ 
    693                 ("subtableBreak", None) 
     751                ("subtable break", None) 
    694752                ] 
    695753        self.assertEqual(result, expected) 
     
    700758        result = writer.getData() 
    701759        expected = [ 
    702                 ("subtableBreak", None), 
    703                 ("subtableBreak", None) 
     760                ("subtable break", None), 
     761                ("subtable break", None) 
    704762                ] 
    705763        self.assertEqual(result, expected) 
     
    711769        result = writer.getData() 
    712770        expected = [ 
    713                 ("featureReference", "test") 
     771                ("feature reference", "test") 
    714772                ] 
    715773        self.assertEqual(result, expected) 
     
    719777        parseFeatures(writer, test) 
    720778        result = writer.getData() 
    721         expected = [("feature", ("TEST", [("featureReference", "test")]))] 
     779        expected = [("feature", ("TEST", [("feature reference", "test")]))] 
    722780        self.assertEqual(result, expected) 
    723781 
     
    728786        result = writer.getData() 
    729787        expected = [ 
    730                 ("lookupReference", "test") 
     788                ("lookup reference", "test") 
    731789                ] 
    732790        self.assertEqual(result, expected) 
     
    736794        parseFeatures(writer, test) 
    737795        result = writer.getData() 
    738         expected = [("lookup", ("TEST", [("lookupReference", "test")]))] 
     796        expected = [("lookup", ("TEST", [("lookup reference", "test")]))] 
    739797        self.assertEqual(result, expected) 
    740798 
  • packages/feaTools/trunk/Lib/feaTools/writers/baseWriter.py

    r182 r184  
    1414 
    1515    def classDefinition(self, name, contents): 
     16        pass 
     17 
     18    def lookupFlag(self, rightToLeft=False, ignoreBaseGlyphs=False, ignoreLigatures=False, ignoreMarks=False): 
    1619        pass 
    1720 
  • packages/feaTools/trunk/Lib/feaTools/writers/fdkSyntaxWriter.py

    r183 r184  
    7676    def classDefinition(self, name, contents): 
    7777        t = "%s = [%s];" % (name, self._list2String(contents)) 
     78        self._instructions.append(t) 
     79 
     80    def lookupFlag(self, rightToLeft=False, ignoreBaseGlyphs=False, ignoreLigatures=False, ignoreMarks=False): 
     81        values = [] 
     82        if rightToLeft: 
     83            values.append("RightToLeft") 
     84        if ignoreBaseGlyphs: 
     85            values.append("IgnoreBaseGlyphs") 
     86        if ignoreLigatures: 
     87            values.append("IgnoreLigatures") 
     88        if ignoreMarks: 
     89            values.append("IgnoreMarks") 
     90        if not values: 
     91            values = "0" 
     92        values = ", ".join(values) 
     93        t = "lookupflag %s;" % values 
    7894        self._instructions.append(t) 
    7995