Changeset 184
- Timestamp:
- 04/12/08 10:19:56 (9 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
packages/feaTools/trunk/Lib/feaTools/parser.py
r181 r184 246 246 ) 247 247 248 248 # use for finding all lookup flags 249 lookupflagRE = re.compile( 250 "([\s;\{\}]|^)" # whitepace, ; {, } or start of line 251 "lookupflag\s+" # lookupflag 252 "([\w\d,\s]+)" # values 253 "\s*;" # ; 254 ) 249 255 250 256 def _parseUnknown(writer, text): … … 378 384 text = _executeSimpleSlice(precedingMark, text, lookupReferenceRE, writer) 379 385 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 381 392 subtables = subtableRE.findall(text) 382 393 for precedingMark in subtables: … … 516 527 writer.gposType2(target, value) 517 528 529 def _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 518 561 def parseFeatures(writer, text): 519 562 # strip the strings. packages/feaTools/trunk/Lib/feaTools/test.py
r181 r184 31 31 self._instructions.append(("class", (name, contents))) 32 32 33 def lookupFlag(self, rightToLeft=False, ignoreBaseGlyphs=False, ignoreLigatures=False, ignoreMarks=False): 34 self._instructions.append(("lookup flag", (rightToLeft, ignoreBaseGlyphs, ignoreLigatures, ignoreMarks))) 35 33 36 def gsubType1(self, target, replacement): 34 37 self._instructions.append(("gsub type 1", (target, replacement))) … … 62 65 63 66 def subtableBreak(self): 64 self._instructions.append(("subtable Break", None))67 self._instructions.append(("subtable break", None)) 65 68 66 69 def lookupReference(self, name): 67 self._instructions.append(("lookup Reference", name))70 self._instructions.append(("lookup reference", name)) 68 71 69 72 def featureReference(self, name): 70 self._instructions.append(("feature Reference", name))73 self._instructions.append(("feature reference", name)) 71 74 72 75 … … 230 233 result = writer.getData() 231 234 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 ] 232 290 self.assertEqual(result, expected) 233 291 … … 691 749 result = writer.getData() 692 750 expected = [ 693 ("subtable Break", None)751 ("subtable break", None) 694 752 ] 695 753 self.assertEqual(result, expected) … … 700 758 result = writer.getData() 701 759 expected = [ 702 ("subtable Break", None),703 ("subtable Break", None)760 ("subtable break", None), 761 ("subtable break", None) 704 762 ] 705 763 self.assertEqual(result, expected) … … 711 769 result = writer.getData() 712 770 expected = [ 713 ("feature Reference", "test")771 ("feature reference", "test") 714 772 ] 715 773 self.assertEqual(result, expected) … … 719 777 parseFeatures(writer, test) 720 778 result = writer.getData() 721 expected = [("feature", ("TEST", [("feature Reference", "test")]))]779 expected = [("feature", ("TEST", [("feature reference", "test")]))] 722 780 self.assertEqual(result, expected) 723 781 … … 728 786 result = writer.getData() 729 787 expected = [ 730 ("lookup Reference", "test")788 ("lookup reference", "test") 731 789 ] 732 790 self.assertEqual(result, expected) … … 736 794 parseFeatures(writer, test) 737 795 result = writer.getData() 738 expected = [("lookup", ("TEST", [("lookup Reference", "test")]))]796 expected = [("lookup", ("TEST", [("lookup reference", "test")]))] 739 797 self.assertEqual(result, expected) 740 798 packages/feaTools/trunk/Lib/feaTools/writers/baseWriter.py
r182 r184 14 14 15 15 def classDefinition(self, name, contents): 16 pass 17 18 def lookupFlag(self, rightToLeft=False, ignoreBaseGlyphs=False, ignoreLigatures=False, ignoreMarks=False): 16 19 pass 17 20 packages/feaTools/trunk/Lib/feaTools/writers/fdkSyntaxWriter.py
r183 r184 76 76 def classDefinition(self, name, contents): 77 77 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 78 94 self._instructions.append(t) 79 95
