From b23d7cba8c6f9b193cd14769a2152e6332b753f0 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 20 Aug 2015 12:36:19 +0100 Subject: [PATCH] [Snippets] Add layout-features.py that prints GSUB/GPOS features --- Snippets/layout-features.py | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 Snippets/layout-features.py diff --git a/Snippets/layout-features.py b/Snippets/layout-features.py new file mode 100755 index 000000000..5e6074e8e --- /dev/null +++ b/Snippets/layout-features.py @@ -0,0 +1,47 @@ +#! /usr/bin/env python + +from __future__ import print_function, division, absolute_import +from fontTools.misc.py23 import * +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] +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))