aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/otlLib/builder.py.sketch
blob: 9addf8c8c8b7837260b24e0fcb7adb0e3d93cb7b (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

from fontTools.otlLib import builder as builder

GDEF::mark filtering sets
name::

lookup_flags = builder.LOOKUP_FLAG_IGNORE_MARKS | builder.LOOKUP_FLAG_RTL
smcp_subtable = builder.buildSingleSubstitute({'a':'a.scmp'})
smcp_lookup = builder.buildLookup([smcp_subtable], lookup_flags=lookup_flags, mark_filter_set=int)

lookups = [smcp_lookup, ...]

scmp_feature = builder.buildFeature('smcp', [scmp_lookup], lookup_list=lookups)
scmp_feature = builder.buildFeature('smcp', [0])

features = [smcp_feature]

default_langsys = builder.buildLangSys(set([scmp_feature]), requiredFeature=None, featureOrder=features)
default_langsys = builder.buildLangSys(set([0]), requiredFeature=None)

script = 


#GSUB:

builder.buildSingleSubst({'a':'a.scmp'})
builder.buildLigatureSubst({('f','i'):'fi'})
builder.buildMultipleSubst({'a':('a0','a1')})
builder.buildAlternateSubst({'a':('a.0','a.1')})


class ChainSequence : namedtuple(['backtrack', 'input', 'lookahead')])
	pass

ChainSequence(backtrack=..., input=..., lookahead=...)

klass0 = frozenset()

builder.buildChainContextGlyphs(
	[
		( (None, ('f','f','i'), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
	],
	glyphMap
)
builder.buildChainContextClass(
	[
		( (None, (2,0,1), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
	],
	klasses = ( backtrackClass, ... ),
	glyphMap
)
builder.buildChainContextCoverage(
	( (None, (frozenset('f'),frozenset('f'),frozenset('i')), (,)), ( (1,lookup_fi), (1,lookup_2) ) ),
	glyphMap
)
builder.buildExtension(...)

#GPOS:
device = builder.buildDevice()
builder.buildAnchor(100, -200) or (100,-200)
builder.buildAnchor(100, -200, device=device)
builder.buildAnchor(100, -200, point=2)

valueRecord = builder.buildValue({'XAdvance':-200, ...})

builder.buildSinglePos({'a':valueRecord})
builder.buildPairPosGlyphs(
	{
		('a','b'): (valueRecord1,valueRecord2),
	},
	glyphMap,
	, valueFormat1=None, valueFormat2=None
)
builder.buildPairPosClasses(
	{
		(frozenset(['a']),frozenset(['b'])): (valueRecord1,valueRecord2),
	},
	glyphMap,
	, valueFormat1=None, valueFormat2=None
)

builder.buildCursivePos(
	{
		'alef': (entry,exit),
	}
	glyphMap
)
builder.buildMarkBasePos(
	marks = {
		'mark1': (klass, anchor),
	},
	bases = {
		'base0': [anchor0, anchor1, anchor2],
	},
	glyphMap
)
builder.buildMarkBasePos(
	marks = {
		'mark1': (name, anchor),
	},
	bases = {
		'base0': {'top':anchor0, 'left':anchor1},
	},
	glyphMap
)