aosp12/external/fonttools/Snippets/layout-features.py

50 lines
1.7 KiB
Python
Executable File

#! /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))