1
2from fontTools.otlLib import builder as builder
3
4GDEF::mark filtering sets
5name::
6
7lookup_flags = builder.LOOKUP_FLAG_IGNORE_MARKS | builder.LOOKUP_FLAG_RTL
8smcp_subtable = builder.buildSingleSubstitute({'a':'a.scmp'})
9smcp_lookup = builder.buildLookup([smcp_subtable], lookup_flags=lookup_flags, mark_filter_set=int)
10
11lookups = [smcp_lookup, ...]
12
13scmp_feature = builder.buildFeature('smcp', [scmp_lookup], lookup_list=lookups)
14scmp_feature = builder.buildFeature('smcp', [0])
15
16features = [smcp_feature]
17
18default_langsys = builder.buildLangSys(set([scmp_feature]), requiredFeature=None, featureOrder=features)
19default_langsys = builder.buildLangSys(set([0]), requiredFeature=None)
20
21script =
22
23
24#GSUB:
25
26builder.buildSingleSubst({'a':'a.scmp'})
27builder.buildLigatureSubst({('f','i'):'fi'})
28builder.buildMultipleSubst({'a':('a0','a1')})
29builder.buildAlternateSubst({'a':('a.0','a.1')})
30
31
32class ChainSequence : namedtuple(['backtrack', 'input', 'lookahead')])
33	pass
34
35ChainSequence(backtrack=..., input=..., lookahead=...)
36
37klass0 = frozenset()
38
39builder.buildChainContextGlyphs(
40	[
41		( (None, ('f','f','i'), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
42	],
43	glyphMap
44)
45builder.buildChainContextClass(
46	[
47		( (None, (2,0,1), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
48	],
49	klasses = ( backtrackClass, ... ),
50	glyphMap
51)
52builder.buildChainContextCoverage(
53	( (None, (frozenset('f'),frozenset('f'),frozenset('i')), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
54	glyphMap
55)
56builder.buildExtension(...)
57
58#GPOS:
59device = builder.buildDevice()
60builder.buildAnchor(100, -200) or (100,-200)
61builder.buildAnchor(100, -200, device=device)
62builder.buildAnchor(100, -200, point=2)
63
64valueRecord = builder.buildValue({'XAdvance':-200, ...})
65
66builder.buildSinglePos({'a':valueRecord})
67builder.buildPairPosGlyphs(
68	{
69		('a','b'): (valueRecord1,valueRecord2),
70	},
71	glyphMap,
72	, valueFormat1=None, valueFormat2=None
73)
74builder.buildPairPosClasses(
75	{
76		(frozenset(['a']),frozenset(['b'])): (valueRecord1,valueRecord2),
77	},
78	glyphMap,
79	, valueFormat1=None, valueFormat2=None
80)
81
82builder.buildCursivePos(
83	{
84		'alef': (entry,exit),
85	}
86	glyphMap
87)
88builder.buildMarkBasePos(
89	marks = {
90		'mark1': (klass, anchor),
91	},
92	bases = {
93		'base0': [anchor0, anchor1, anchor2],
94	},
95	glyphMap
96)
97builder.buildMarkBasePos(
98	marks = {
99		'mark1': (name, anchor),
100	},
101	bases = {
102		'base0': {'top':anchor0, 'left':anchor1},
103	},
104	glyphMap
105)
106