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: continue 19 print("Table:", tag) 20 table = font[tag].table 21 if not table.ScriptList or not table.FeatureList: continue 22 featureRecords = table.FeatureList.FeatureRecord 23 for script in table.ScriptList.ScriptRecord: 24 print(" Script:", script.ScriptTag) 25 if not script.Script: 26 print (" Null script.") 27 continue 28 languages = list(script.Script.LangSysRecord) 29 if script.Script.DefaultLangSys: 30 defaultlangsys = otTables.LangSysRecord() 31 defaultlangsys.LangSysTag = "default" 32 defaultlangsys.LangSys = script.Script.DefaultLangSys 33 languages.insert(0, defaultlangsys) 34 for langsys in languages: 35 print(" Language:", langsys.LangSysTag) 36 if not langsys.LangSys: 37 print (" Null language.") 38 continue 39 features = [featureRecords[index] for index in langsys.LangSys.FeatureIndex] 40 if langsys.LangSys.ReqFeatureIndex != 0xFFFF: 41 record = featureRecords[langsys.LangSys.ReqFeatureIndex] 42 requiredfeature = otTables.FeatureRecord() 43 requiredfeature.FeatureTag = 'required(%s)' % record.FeatureTag 44 requiredfeature.Feature = record.Feature 45 features.insert(0, requiredfeature) 46 for feature in features: 47 print(" Feature:", feature.FeatureTag) 48 lookups = feature.Feature.LookupListIndex 49 print(" Lookups:", ','.join(str(l) for l in lookups)) 50