#! /usr/bin/env python3 from fontTools.ttLib import TTFont from fontTools.ttLib.tables import otTables import sys if len(sys.argv) != 2: print("usage: layout-features.py fontfile.ttf") sys.exit(1) fontfile = sys.argv[1] if fontfile.rsplit(".", 1)[-1] == "ttx": font = TTFont() font.importXML(fontfile) else: font = TTFont(fontfile) for tag in ('GSUB', 'GPOS'): if not tag in font: continue print("Table:", tag) table = font[tag].table if not table.ScriptList or not table.FeatureList: continue featureRecords = table.FeatureList.FeatureRecord for script in table.ScriptList.ScriptRecord: print(" Script:", script.ScriptTag) if not script.Script: print (" Null script.") continue languages = list(script.Script.LangSysRecord) if script.Script.DefaultLangSys: defaultlangsys = otTables.LangSysRecord() defaultlangsys.LangSysTag = "default" defaultlangsys.LangSys = script.Script.DefaultLangSys languages.insert(0, defaultlangsys) for langsys in languages: print(" Language:", langsys.LangSysTag) if not langsys.LangSys: print (" Null language.") continue features = [featureRecords[index] for index in langsys.LangSys.FeatureIndex] if langsys.LangSys.ReqFeatureIndex != 0xFFFF: record = featureRecords[langsys.LangSys.ReqFeatureIndex] requiredfeature = otTables.FeatureRecord() requiredfeature.FeatureTag = 'required(%s)' % record.FeatureTag requiredfeature.Feature = record.Feature features.insert(0, requiredfeature) for feature in features: print(" Feature:", feature.FeatureTag) lookups = feature.Feature.LookupListIndex print(" Lookups:", ','.join(str(l) for l in lookups))