huangcm
2025-07-01 676035278781360996553c427a12bf358249ebf7
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 python
 
from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import *
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))