| |
| 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 |
| ) |