1#! /usr/bin/env python3 2 3from fontTools.ttLib import TTFont 4from fontTools.ttLib.tables import otTables 5import sys 6 7if len(sys.argv) != 2: 8 print("usage: layout-features.py fontfile.ttf") 9 sys.exit(1) 10fontfile = sys.argv[1] 11if fontfile.rsplit(".", 1)[-1] == "ttx": 12 font = TTFont() 13 font.importXML(fontfile) 14else: 15 font = TTFont(fontfile) 16 17for tag in ("GSUB", "GPOS"): 18 if not tag in font: 19 continue 20 print("Table:", tag) 21 table = font[tag].table 22 if not table.ScriptList or not table.FeatureList: 23 continue 24 featureRecords = table.FeatureList.FeatureRecord 25 for script in table.ScriptList.ScriptRecord: 26 print(" Script:", script.ScriptTag) 27 if not script.Script: 28 print(" Null script.") 29 continue 30 languages = list(script.Script.LangSysRecord) 31 if script.Script.DefaultLangSys: 32 defaultlangsys = otTables.LangSysRecord() 33 defaultlangsys.LangSysTag = "default" 34 defaultlangsys.LangSys = script.Script.DefaultLangSys 35 languages.insert(0, defaultlangsys) 36 for langsys in languages: 37 print(" Language:", langsys.LangSysTag) 38 if not langsys.LangSys: 39 print(" Null language.") 40 continue 41 features = [featureRecords[index] for index in langsys.LangSys.FeatureIndex] 42 if langsys.LangSys.ReqFeatureIndex != 0xFFFF: 43 record = featureRecords[langsys.LangSys.ReqFeatureIndex] 44 requiredfeature = otTables.FeatureRecord() 45 requiredfeature.FeatureTag = "required(%s)" % record.FeatureTag 46 requiredfeature.Feature = record.Feature 47 features.insert(0, requiredfeature) 48 for feature in features: 49 print(" Feature:", feature.FeatureTag) 50 lookups = feature.Feature.LookupListIndex 51 print(" Lookups:", ",".join(str(l) for l in lookups)) 52