50 lines
1.7 KiB
Python
Executable File
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))
|