aboutsummaryrefslogtreecommitdiff
path: root/Snippets/layout-features.py
blob: 53e9735590809253fed2a5aa3f4dd06856bdba70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /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))