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