• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#! /usr/bin/env python3
2
3from fontTools.ttLib import TTFont
4from fontTools.ttLib.tables import otTables
5import sys
6
7if len(sys.argv) != 2:
8	print("usage: layout-features.py fontfile.ttf")
9	sys.exit(1)
10fontfile = sys.argv[1]
11if fontfile.rsplit(".", 1)[-1] == "ttx":
12	font = TTFont()
13	font.importXML(fontfile)
14else:
15	font = TTFont(fontfile)
16
17for tag in ('GSUB', 'GPOS'):
18	if not tag in font: continue
19	print("Table:", tag)
20	table = font[tag].table
21	if not table.ScriptList or not table.FeatureList: continue
22	featureRecords = table.FeatureList.FeatureRecord
23	for script in table.ScriptList.ScriptRecord:
24		print("  Script:", script.ScriptTag)
25		if not script.Script:
26			print ("    Null script.")
27			continue
28		languages = list(script.Script.LangSysRecord)
29		if script.Script.DefaultLangSys:
30			defaultlangsys = otTables.LangSysRecord()
31			defaultlangsys.LangSysTag = "default"
32			defaultlangsys.LangSys = script.Script.DefaultLangSys
33			languages.insert(0, defaultlangsys)
34		for langsys in languages:
35			print("    Language:", langsys.LangSysTag)
36			if not langsys.LangSys:
37				print ("    Null language.")
38				continue
39			features = [featureRecords[index] for index in langsys.LangSys.FeatureIndex]
40			if langsys.LangSys.ReqFeatureIndex != 0xFFFF:
41				record = featureRecords[langsys.LangSys.ReqFeatureIndex]
42				requiredfeature = otTables.FeatureRecord()
43				requiredfeature.FeatureTag = 'required(%s)' % record.FeatureTag
44				requiredfeature.Feature = record.Feature
45				features.insert(0, requiredfeature)
46			for feature in features:
47				print("      Feature:", feature.FeatureTag)
48				lookups = feature.Feature.LookupListIndex
49				print("        Lookups:", ','.join(str(l) for l in lookups))
50