aboutsummaryrefslogtreecommitdiff
path: root/Snippets/layout-features.py
blob: 4368332b560aa5a83f56b44500aec0c23ba11ef2 (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
50
51
#! /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))