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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
from fontFeatures import Substitution, FontFeatures, Routine
def test_language_ordering():
f = FontFeatures()
s1 = Substitution([["a"]], ["b"], languages=[("arab", "URD ")])
s2 = Substitution([["a"]], ["c"], languages=[("arab", "FAR ")])
s3 = Substitution([["x"], ["y"]], ["z"], languages=[("arab", "URD ")])
f.addFeature("locl", [Routine(rules=[s1, s2, s3])])
# When going to fea, we put everything in its own feature block to
# avoid stupid problems with language systems
expected = """languagesystem arab URD;
languagesystem arab FAR;
lookup Routine_1 {
lookupflag 0;
;
sub a by b;
} Routine_1;
lookup Routine_2 {
lookupflag 0;
;
sub a by c;
} Routine_2;
lookup Routine_3 {
lookupflag 0;
;
sub x y by z;
} Routine_3;
feature locl {
script arab;
language URD;
lookup Routine_1;
} locl;
feature locl {
script arab;
language FAR;
lookup Routine_2;
} locl;
feature locl {
script arab;
language URD;
lookup Routine_3;
} locl;
"""
assert f.asFea(do_gdef=False) == expected
# But the same is true of multiple lookups in the same feature
f = FontFeatures()
r1 = Routine(rules=[s1])
r2 = Routine(rules=[s2])
r3 = Routine(rules=[s3])
f.addFeature("locl", [r1, r2, r3])
assert f.asFea(do_gdef=False) == expected
def test_multiple_languages():
f = FontFeatures()
s1 = Substitution([["a"]], ["b"], languages=[("arab", "URD "), ("arab", "FAR ")])
expected = """languagesystem arab URD;
languagesystem arab FAR;
lookup Routine_1 {
lookupflag 0;
;
sub a by b;
} Routine_1;
lookup Routine_2 {
lookupflag 0;
;
sub a by b;
} Routine_2;
feature locl {
script arab;
language URD;
lookup Routine_1;
} locl;
feature locl {
script arab;
language FAR;
lookup Routine_2;
} locl;
"""
f = FontFeatures()
r1 = Routine(rules=[s1])
f.addFeature("locl", [r1])
assert f.asFea(do_gdef=False) == expected
def test_multiple_languages_routine():
f = FontFeatures()
s1 = Substitution([["a"]], ["b"])
expected = """languagesystem arab URD;
languagesystem arab FAR;
lookup Routine_1 {
lookupflag 0;
;
sub a by b;
} Routine_1;
feature locl {
script arab;
language URD;
lookup Routine_1;
} locl;
feature locl {
script arab;
language FAR;
lookup Routine_1;
} locl;
"""
f = FontFeatures()
r1 = Routine(rules=[s1], languages=[("arab", "URD "), ("arab", "FAR ")])
f.addFeature("locl", [r1])
assert f.asFea(do_gdef=False) == expected
|