2019-12-05 15:28:19 +00:00
|
|
|
#! /usr/bin/env python3
|
2015-08-20 12:36:19 +01:00
|
|
|
|
|
|
|
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]
|
2018-05-23 11:50:40 +01:00
|
|
|
if fontfile.rsplit(".", 1)[-1] == "ttx":
|
|
|
|
font = TTFont()
|
|
|
|
font.importXML(fontfile)
|
|
|
|
else:
|
|
|
|
font = TTFont(fontfile)
|
2015-08-20 12:36:19 +01:00
|
|
|
|
|
|
|
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))
|