-
Notifications
You must be signed in to change notification settings - Fork 7
/
features.fea
131 lines (115 loc) · 3.25 KB
/
features.fea
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
languagesystem DFLT dflt;
languagesystem latn dflt;
languagesystem grek dflt;
languagesystem cyrl dflt;
@lower_no_s = [a b c d e f g h i j k l m n o p q r t u v w x y z];
@lower = [a b c d e f g h i j k l m n o p q r s t u v w x y z];
@upper = [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z];
@B = [B B.alt];
@D = [D Eth Dcaron Dcroat D.alt];
@P = [P Thorn];
#@b
@d = [d dcroat dcaron eth];
@h = [h hcircumflex hbar];
@o = [o ograve oacute ocircumflex otilde odieresis oslash omacron obreve ohungarumlaut oslashacute];
@p = [p thorn];
@w = [w wcircumflex wgrave wacute];
@y = [y yacute ydieresis ycircumflex ygrave];
feature hist {
lookup hists {
# There was no capital V or I in 1611
sub V' by U;
sub I' by J;
# In the KJV, the initial `v` was always `v` but medial `v` became `u`
sub [@lower @upper] v' by u;
# For long s
sub s' @lower_no_s by longs;
sub s' s by longs;
# For R rotunda
sub [@B @D @P b @d @h @o @p @w @y] r' by r.rotunda;
} hists;
# This needs to be in a separate lookup or it will be ignored.
lookup longsfix {
sub longs' [f f_f] by s;
sub [f f_f] longs' by s;
} longsfix;
} hist;
feature kern {
lookup feakerns {
pos [longs longs_longs] longs_longs -185;
pos [longs longs_longs] longs -125;
pos [longs longs_longs] k -150;
pos [longs longs_longs] b -150;
} feakerns;
} kern;
feature calt {
lookup w {
sub [longs f f_f longs_longs] w' by w.alt;
} w;
} calt;
feature liga {
lookup default_ligatures {
sub f f by f_f;
sub f i by f_i;
sub f l by f_l;
sub L O R D by L_O_R_D;
sub longs h by longs_h;
sub longs i by longs_i;
sub longs t by longs_t;
sub longs l by longs_l;
sub longs longs by longs_longs;
sub longs longs h by longs_longs_h;
sub longs longs i by longs_longs_i;
sub longs longs t by longs_longs_t;
sub longs longs l by longs_longs_l;
sub [y thorn] combeabove by y_e;
sub [y thorn] combtabove by y_t;
sub w combtabove by w_t;
} default_ligatures;
} liga;
feature salt {
lookup s1 {
sub el by el.alt;
sub D by D.alt;
sub germandbls by germandbls.alt;
sub Q by Q.alt;
sub v by v.alt;
sub w by w.alt;
sub Y by Y.alt;
sub Z by Z.alt;
sub two by two.alt;
sub zero by zero.alt;
sub B by B.alt;
sub u by u.alt;
sub H by H.alt;
sub E by E.alt;
sub C by C.alt;
sub A by A.alt;
sub d by d.alt;
sub g by g.alt;
sub W by W.alt;
} s1;
} salt;
feature ss01 {
featureNames {
name "All stylistic alternates enabled";
};
lookup s1;
} ss01;
feature ss02 {
featureNames {
name "Historically accurate B and E, second alternate `w`";
};
lookup s2 {
sub B by B.alt2;
sub E by E.alt2;
sub w by w.alt2;
} s2;
} ss02;
feature ss03 {
featureNames {
name "Historical Forms";
};
lookup hists;
lookup longsfix;
} ss03;