You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
|
|
import os
|
|
import pytest
|
|
from fontTools.ttLib import TTFont
|
|
from fontTools.otlLib.maxContextCalc import maxCtxFont
|
|
from fontTools.feaLib.builder import addOpenTypeFeaturesFromString
|
|
|
|
|
|
def test_max_ctx_calc_no_features():
|
|
font = TTFont()
|
|
assert maxCtxFont(font) == 0
|
|
font.setGlyphOrder(['.notdef'])
|
|
addOpenTypeFeaturesFromString(font, '')
|
|
assert maxCtxFont(font) == 0
|
|
|
|
|
|
def test_max_ctx_calc_features():
|
|
glyphs = '.notdef space A B C a b c'.split()
|
|
features = """
|
|
lookup GSUB_EXT useExtension {
|
|
sub a by b;
|
|
} GSUB_EXT;
|
|
|
|
lookup GPOS_EXT useExtension {
|
|
pos a b -10;
|
|
} GPOS_EXT;
|
|
|
|
feature sub1 {
|
|
sub A by a;
|
|
sub A B by b;
|
|
sub A B C by c;
|
|
sub [A B] C by c;
|
|
sub [A B] C [A B] by c;
|
|
sub A by A B;
|
|
sub A' C by A B;
|
|
sub a' by b;
|
|
sub a' b by c;
|
|
sub a from [A B C];
|
|
rsub a by b;
|
|
rsub a' by b;
|
|
rsub a b' by c;
|
|
rsub a b' c by A;
|
|
rsub [a b] c' by A;
|
|
rsub [a b] c' [a b] by B;
|
|
lookup GSUB_EXT;
|
|
} sub1;
|
|
|
|
feature pos1 {
|
|
pos A 20;
|
|
pos A B -50;
|
|
pos A B' 10 C;
|
|
lookup GPOS_EXT;
|
|
} pos1;
|
|
"""
|
|
font = TTFont()
|
|
font.setGlyphOrder(glyphs)
|
|
addOpenTypeFeaturesFromString(font, features)
|
|
|
|
assert maxCtxFont(font) == 3
|
|
|
|
|
|
@pytest.mark.parametrize('file_name, max_context', [
|
|
('gsub_51', 2),
|
|
('gsub_52', 2),
|
|
('gsub_71', 1),
|
|
('gpos_91', 1),
|
|
])
|
|
def test_max_ctx_calc_features_ttx(file_name, max_context):
|
|
ttx_path = os.path.join(os.path.dirname(__file__),
|
|
'data', '{}.ttx'.format(file_name))
|
|
font = TTFont()
|
|
font.importXML(ttx_path)
|
|
|
|
assert maxCtxFont(font) == max_context
|