@Uppercase = [ A B C D E E.isol F G G.e G.isol H I J J.e J.isol K K.isol K.swsh L M N O P Q Q.isol Q.swsh R R.isol R.swsh S T U V W X Y Z Eth Thorn AE IJ IJ.e IJ.isol OE Eng Germandbls Aacute Abreve Acircumflex Adieresis Agrave Amacron Aogonek Aring Atilde Cacute Ccaron Ccedilla Cdotaccent Dcaron Dcroat Eacute Ebreve Ecaron Ecircumflex Edieresis Edotaccent Egrave Emacron Eogonek Gbreve Gcommaaccent Gdotaccent Hbar Iacute Icircumflex Idieresis Idotaccent Igrave Imacron Iogonek Jacute Kcommaaccent Lacute Lcaron Lcommaaccent Lslash Nacute Ncaron Ncommaaccent Ntilde Oacute Ocircumflex Odieresis Ograve Ohungarumlaut Omacron Oslash Otilde Racute Rcaron Rcommaaccent Sacute Scaron Scedilla Scommaaccent Tcaron Tcedilla Tcommaaccent Uacute Ucircumflex Udieresis Ugrave Uhungarumlaut Umacron Uogonek Uring Wacute Wcircumflex Wdieresis Wgrave Yacute Ycircumflex Ydieresis Ygrave Zacute Zcaron Zdotaccent Eacute.isol Ebreve.isol Ecaron.isol Ecircumflex.isol Edieresis.isol Edotaccent.isol Egrave.isol Emacron.isol Eogonek.isol Gbreve.e Gcommaaccent.e Gdotaccent.e Gbreve.isol Gcommaaccent.isol Gdotaccent.isol Jacute.isol Jacute.e Kcommaaccent.isol Racute.isol Rcaron.isol Rcommaaccent.isol Kcommaaccent.swsh Lacute.swsh Lcaron.swsh Lcommaaccent.swsh Lslash.swsh Racute.swsh Rcaron.swsh Rcommaaccent.swsh
 ];

@Lowercase = [ germandbls.salt a a.medi b b.e b.medi b.medi.e c c.medi d d.medi e e.medi e.postb f f.medi g g.e g.medi g.medi.e g.fina h h.medi idotless i jdotless jdotless.e jdotless.fina j j.e j.fina k k.medi l l.medi m n o o.e o.isol p q q.medi r s s.init s.medi germandbls t t.r u v w y y.e y.fina z eth eth.posto thorn ae ae.salt ij ij.e ij.fina oe eng lslash_lslash aacute abreve acircumflex adieresis agrave amacron aogonek aring atilde cacute ccaron ccedilla cdotaccent dcaron dcroat eacute ebreve ecaron ecircumflex edieresis edotaccent egrave emacron eogonek gbreve gcommaaccent gdotaccent hbar iacute icircumflex idieresis idotaccent igrave imacron iogonek jacute kcommaaccent lacute lcaron lcommaaccent lslash nacute ncaron ncommaaccent ntilde oacute ocircumflex odieresis ograve ohungarumlaut omacron oslash otilde racute rcaron rcommaaccent sacute scaron scedilla scommaaccent tcaron tcedilla tcommaaccent uacute ucircumflex udieresis ugrave uhungarumlaut umacron uogonek uring wacute wcircumflex wdieresis wgrave yacute ycircumflex ydieresis ygrave zacute zcaron zdotaccent gbreve.e gcommaaccent.e gdotaccent.e jacute.e oacute.e ocircumflex.e odieresis.e ograve.e ohungarumlaut.e omacron.e oslash.e otilde.e oacute.isol ocircumflex.isol odieresis.isol ograve.isol ohungarumlaut.isol omacron.isol oslash.isol otilde.isol yacute.e ycircumflex.e ydieresis.e ygrave.e gbreve.fina gcommaaccent.fina gdotaccent.fina jacute.fina yacute.fina ycircumflex.fina ydieresis.fina ygrave.fina sacute.init scaron.init scedilla.init scommaaccent.init aacute.medi abreve.medi acircumflex.medi adieresis.medi agrave.medi amacron.medi aogonek.medi aring.medi atilde.medi dcaron.medi dcroat.medi eacute.medi ebreve.medi ecaron.medi ecircumflex.medi edieresis.medi edotaccent.medi egrave.medi emacron.medi eogonek.medi gbreve.medi gcommaaccent.medi gdotaccent.medi kcommaaccent.medi lacute.medi lcaron.medi lcommaaccent.medi sacute.medi scaron.medi scedilla.medi scommaaccent.medi eacute.postb ebreve.postb ecaron.postb ecircumflex.postb edieresis.postb edotaccent.postb egrave.postb emacron.postb eogonek.postb tcaron.r tcedilla.r tcommaaccent.r gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e x.poste adieresis.salt adieresis.medi.salt odieresis.salt udieresis.salt g.isol gbreve.isol gcommaaccent.isol gdotaccent.isol schwa schwa.medi
 ];

@figures = [ zero one two three four five six seven eight nine 
zero.tf one.tf two.tf three.tf four.tf five.tf six.tf seven.tf eight.tf nine.tf 
 ];

@punct-dflt = [ endash emdash ];

@punct-case = [ endash.case emdash.case ];

@init = [ a aacute abreve acircumflex adieresis agrave amacron aogonek aring atilde adieresis.salt
b b.e
d dcaron dcroat
e eacute ebreve ecaron ecircumflex edieresis edotaccent egrave emacron eogonek 
f
g gbreve gcommaaccent gdotaccent 
g.e gbreve.e gcommaaccent.e gdotaccent.e 
h
k kcommaaccent
l lacute lcaron lcommaaccent
q
s sacute scaron scedilla scommaaccent 
schwa ];

@medi = [ a.medi aacute.medi abreve.medi acircumflex.medi adieresis.medi agrave.medi amacron.medi aogonek.medi aring.medi atilde.medi adieresis.medi.salt
b.medi b.medi.e
d.medi dcaron.medi dcroat.medi
e.medi eacute.medi ebreve.medi ecaron.medi ecircumflex.medi edieresis.medi edotaccent.medi egrave.medi emacron.medi eogonek.medi 
f.medi
g.medi gbreve.medi gcommaaccent.medi gdotaccent.medi 
g.medi.e gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e 
h.medi
k.medi kcommaaccent.medi
l.medi lacute.medi lcaron.medi lcommaaccent.medi  
q.medi
s.medi sacute.medi scaron.medi scedilla.medi scommaaccent.medi 
schwa.medi ];

@nonjoiner = [ Eogonek

K.swsh Kcommaaccent.swsh
L.isol Lacute.isol Lcaron.isol Lcommaaccent.isol Lslash.isol
L.swsh Lacute.swsh Lcaron.swsh Lcommaaccent.swsh Lslash.swsh 
Q.swsh
R.swsh  Racute.swsh Rcaron.swsh Rcommaaccent.swsh 

aogonek 
eogonek eogonek.medi eogonek.postb
iogonek
uogonek

adieresis.salt
adieresis.medi.salt
odieresis.salt
udieresis.salt

eth
eth.posto
 ];

@A-right = [ A Aacute Abreve Acircumflex Adieresis Agrave Amacron Aogonek Aring Atilde 
 ];

@CELQZ-right = [ C Cacute Ccaron Ccedilla Cdotaccent 
E Eacute Ebreve Ecaron Ecircumflex Edieresis Edotaccent Egrave Emacron 
L Lacute Lcaron Lcommaaccent Lslash 
Z Zacute Zcaron Zdotaccent ];

@GJ-isol = [ G.isol Gbreve.isol Gcommaaccent.isol Gdotaccent.isol 
J.isol Jacute.isol
IJ.isol
 ];

@GJ = [ G Gbreve Gcommaaccent Gdotaccent 
J Jacute 
IJ
 ];

@GJ-e = [ G.e Gbreve.e Gcommaaccent.e Gdotaccent.e 
J.e Jacute.e
IJ.e
 ];

@GJ-right = [ G
J
IJ ];

@H-right = [ H
Hbar ];

@I = [ I Iacute Icircumflex Idieresis Idotaccent Igrave Imacron Iogonek 
 ];

@MKRU-right = [ M
K Kcommaaccent
R Racute Rcaron Rcommaaccent 
U Uacute Ucircumflex Udieresis Ugrave Uhungarumlaut Umacron Uring 
Q ];

@ascender-left = [ b b.medi b.medi.e
f f.medi
h hbar 
h.medi
k kcommaaccent
k.medi kcommaaccent.medi
l lacute lcaron lcommaaccent lslash
l.medi lacute.medi lcaron.medi lcommaaccent.medi  
germandbls
germandbls.salt
thorn
lslash_lslash
 ];

@descender-right = [ g gbreve gcommaaccent gdotaccent 
g.e gbreve.e gcommaaccent.e gdotaccent.e 
g.medi gbreve.medi gcommaaccent.medi gdotaccent.medi
g.medi.e gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e 
j jacute
j.e jacute.e
jdotless 
jdotless.e
ij 
ij.e
y yacute ycircumflex ydieresis ygrave 
y.e yacute.e ycircumflex.e ydieresis.e ygrave.e 
G Gbreve Gcommaaccent Gdotaccent
G.e Gbreve.e Gcommaaccent.e Gdotaccent.e
J Jacute
J.e Jacute.e
IJ IJ.e
 ];

@a-left = [ a adieresis aacute abreve acircumflex adieresis agrave amacron aogonek atilde
a.medi aacute.medi abreve.medi acircumflex.medi adieresis.medi agrave.medi amacron.medi aogonek.medi aring.medi atilde.medi 
adieresis.salt 
adieresis.medi.salt
ae ae.salt
c cacute ccaron ccedilla cdotaccent
d dcaron dcroat 
d.medi dcaron.medi dcroat.medi 
g gbreve gcommaaccent gdotaccent 
g.e gbreve.e gcommaaccent.e gdotaccent.e 
g.medi gbreve.medi gcommaaccent.medi gdotaccent.medi
g.medi.e gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e 
g.fina gbreve.fina gcommaaccent.fina gdotaccent.fina 
q 
q.medi
 ];

@a-init = [ a aacute abreve acircumflex adieresis agrave amacron aogonek aring atilde 
d dcaron dcroat 
g gbreve gcommaaccent gdotaccent 
q
 ];

@a-medi = [ a.medi aacute.medi abreve.medi acircumflex.medi adieresis.medi agrave.medi amacron.medi aogonek.medi aring.medi atilde.medi 
d.medi dcaron.medi dcroat.medi 
g.medi gbreve.medi gcommaaccent.medi gdotaccent.medi 
q.medi
 ];

@b-right = [ b 
b.e 
b.medi
b.medi.e
 ];

@b-medi = [ b.medi
b.medi.e
 ];

@e = [ e eacute ebreve ecaron ecircumflex edieresis edotaccent egrave emacron eogonek 
 ];

@e-postb = [ e.postb eacute.postb ebreve.postb ecaron.postb ecircumflex.postb edieresis.postb edotaccent.postb egrave.postb emacron.postb eogonek.postb 
 ];

@e-right = [ ae ae.salt
c cacute ccaron ccedilla cdotaccent 
e eacute ebreve ecaron ecircumflex edieresis edotaccent egrave emacron
ae
oe
e.medi eacute.medi ebreve.medi ecaron.medi ecircumflex.medi edieresis.medi edotaccent.medi egrave.medi emacron.medi 
e.postb eacute.postb ebreve.postb ecaron.postb ecircumflex.postb edieresis.postb edotaccent.postb egrave.postb emacron.postb 
z zacute zcaron zdotaccent
 ];

@e-left = [ e eacute ebreve ecaron ecircumflex edieresis edotaccent egrave emacron eogonek 
e.medi eacute.medi ebreve.medi ecaron.medi ecircumflex.medi edieresis.medi edotaccent.medi egrave.medi emacron.medi eogonek.medi 
e.postb eacute.postb ebreve.postb ecaron.postb ecircumflex.postb edieresis.postb edotaccent.postb egrave.postb emacron.postb eogonek.postb 
 ];

@f-right = [ f f.medi
 ];

@g = [ g gbreve gcommaaccent gdotaccent 
 ];

@g-medi = [ g.medi gbreve.medi gcommaaccent.medi gdotaccent.medi 
 ];

@g-medi-e = [ g.medi.e gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e 
 ];

@g-fina = [ g.fina gbreve.fina gcommaaccent.fina gdotaccent.fina 
 ];

@g-e = [ g.e gbreve.e gcommaaccent.e gdotaccent.e ];

@g-isol = [ g.isol
gbreve.isol
gcommaaccent.isol
gdotaccent.isol
 ];

@j = [ j jacute 
jdotless
ij
 ];

@j-e = [ j.e jacute.e
jdotless.e
ij.e
 ];

@j-fina = [ j.fina jacute.fina
jdotless.fina
ij.fina
 ];

@k-salt = [ k.salt
kcommaaccent.salt ];

@l-init = [ l lacute lcaron lcommaaccent 
 ];

@l-medi = [ l.medi l.medi lcaron.medi lcommaaccent.medi
 ];

@n-right = [ a aacute abreve acircumflex adieresis agrave amacron aring atilde 
a.medi aacute.medi abreve.medi acircumflex.medi adieresis.medi agrave.medi amacron.medi aring.medi atilde.medi 
d dcaron dcroat 
d.medi dcaron.medi dcroat.medi 
h hbar 
h.medi
i iacute icircumflex idieresis idotaccent igrave imacron 
idotless 
k kcommaaccent 
k.medi kcommaaccent.medi
k.salt kcommaaccent.salt
l lacute lcaron lcommaaccent lslash 
l.medi lacute.medi lcaron.medi lcommaaccent.medi  
lslash_lslash
m
n nacute ncaron ncommaaccent ntilde 
u uacute ucircumflex udieresis ugrave uhungarumlaut umacron uring 
t tcaron tcedilla tcommaaccent 
t.r tcaron.r tcedilla.r tcommaaccent.r ];

@n-left = [ i idotless iacute icircumflex idieresis idotaccent igrave imacron iogonek 
j jacute 
j.e jacute.e
j.fina jacute.fina
jdotless
jdotless.e
jdotless.fina
m 
n nacute ncaron ncommaaccent ntilde 
p
r racute rcaron rcommaaccent 
u uacute ucircumflex udieresis ugrave uhungarumlaut umacron uogonek uring
udieresis.salt
y yacute ycircumflex ydieresis ygrave 
y.e
y.fina
ij ij.e 
eng
 ];

@o = [ o oacute ocircumflex odieresis ograve ohungarumlaut omacron oslash otilde ];

@o-isol = [ o.isol oacute.isol ocircumflex.isol odieresis.isol ograve.isol ohungarumlaut.isol omacron.isol oslash.isol otilde.isol
 ];

@o-left = [ o oacute ocircumflex odieresis ograve ohungarumlaut omacron oslash otilde 
o.e oacute.e ocircumflex.e odieresis.e ograve.e ohungarumlaut.e omacron.e oslash.e otilde.e
odieresis.salt
oe 
eth eth.posto
 ];

@o-right = [ b b.medi
o oacute ocircumflex odieresis ograve ohungarumlaut omacron oslash otilde 
o.e oacute.e ocircumflex.e odieresis.e ograve.e ohungarumlaut.e omacron.e oslash.e otilde.e ];

@o-e = [ o.e oacute.e ocircumflex.e odieresis.e ograve.e ohungarumlaut.e omacron.e oslash.e otilde.e 
 ];

@p-right = [ p
thorn ];

@q-right = [ q q.medi
 ];

@r = [ r racute rcaron rcommaaccent ];

@r-right = [ r racute rcaron rcommaaccent ];

@s-isol = [ s sacute scaron scedilla scommaaccent
 ];

@s-init = [ s.init sacute.init scaron.init scedilla.init scommaaccent.init

 ];

@s-medi = [ s.medi sacute.medi scaron.medi scedilla.medi scommaaccent.medi
 ];

@s-right = [ s.medi sacute.medi scaron.medi scedilla.medi scommaaccent.medi
germandbls
germandbls.salt ];

@s-left = [ s.init sacute.init scaron.init scedilla.init scommaaccent.init
s.medi sacute.medi scaron.medi scedilla.medi scommaaccent.medi
 ];

@t = [ t tcaron tcedilla tcommaaccent ];

@t-r = [ t.r tcaron.r tcedilla.r tcommaaccent.r
 ];

@t-left = [ t tcaron tcedilla tcommaaccent 
t.r tcaron.r tcedilla.r tcommaaccent.r 
 ];

@t-right = [ t tcaron tcedilla tcommaaccent 
t.r tcaron.r tcedilla.r tcommaaccent.r
 ];

@v-right = [ v
w wacute wcircumflex wdieresis wgrave 
 ];

@v-left = [ v
w wacute wcircumflex wdieresis wgrave 
 ];

@x-left = [ x ];

@x-poste = [ x.poste
 ];

@y = [ y yacute ycircumflex ydieresis ygrave 
 ];

@y-e = [ y.e yacute.e ycircumflex.e ydieresis.e ygrave.e ];

@y-fina = [ y.fina yacute.fina ycircumflex.fina ydieresis.fina ygrave.fina 
 ];

@z-right = [ z zacute zcaron zdotaccent

 ];

@z-left = [ z zacute zcaron zdotaccent
 ];

@schwa = [ schwa
schwa.medi ];

@space = [ CR space nbspace emspace enspace figurespace thinspace ];

@punct = [ period comma colon semicolon exclam question bullet hyphen softhyphen endash emdash parenleft parenright braceleft braceright bracketleft bracketright quotesinglbase quotedblbase quotedblleft quotedblright quoteleft quoteright guillemetleft guillemetright guilsinglleft guilsinglright ellipsis exclamdown questiondown asterisk periodcentered numbersign slash backslash underscore quotedbl quotesingle ];

@joint.Ea = [ joint.Ea ];

@joint.En = [ joint.En ];

@joint.Es = [ joint.Es ];

@joint.Ex = [ joint.Ex ];

@joint.Ez = [ joint.Ez
 ];

@joint.Eschwa = [ joint.Eschwa ];

@joint.Ha = [ joint.Ha ];

@joint.He = [ joint.He ];

@joint.Ho = [ joint.Ho ];

@joint.Hn = [ joint.Hn ];

@joint.Hv = [ joint.Hv ];

@joint.Hschwa = [ joint.Hschwa ];

@joint.be = [ joint.be
 ];

@joint.bh = [ joint.bh ];

@joint.bo = [ joint.bo ];

@joint.bz = [ joint.bz ];

@joint.ea = [ joint.ea ];

@joint.ee = [ joint.ee ];

@joint.en = [ joint.en ];

@joint.einitn = [ joint.einitn ];

@joint.es = [ joint.es ];

@joint.ev = [ joint.ev
 ];

@joint.ex = [ joint.ex
 ];

@joint.ez = [ joint.ez ];

@joint.fa = [ joint.fa ];

@joint.fe = [ joint.fe ];

@joint.fn = [ joint.fn ];

@joint.fs = [ joint.fs ];

@joint.fv = [ joint.fv ];

@joint.fz = [ joint.fz ];

@joint.fschwa = [ joint.fschwa ];

@joint.ga = [ joint.ga ];

@joint.gn = [ joint.gn ];

@joint.go = [  ];

@joint.ge = [ joint.ge ];

@joint.gs = [ joint.gs ];

@joint.gv = [ joint.gv ];

@joint.gz = [ joint.gz ];

@joint.gschwa = [ joint.gschwa ];

@joint.Mschwa = [ joint.Mschwa ];

@joint.na = [ joint.na
 ];

@joint.ne = [ joint.ne
 ];

@joint.nn = [ joint.nn
 ];

@joint.ns = [ joint.ns
 ];

@joint.nv = [ joint.nv ];

@joint.nx = [ joint.nx ];

@joint.nz = [ joint.nz ];

@joint.nschwa = [ joint.nschwa
 ];

@joint.oa = [ joint.oa ];

@joint.oe = [ joint.oe ];

@joint.oh = [ joint.oh ];

@joint.on = [ joint.on
 ];

@joint.oo = [ joint.oo ];

@joint.os = [ joint.os ];

@joint.ot = [ joint.ot ];

@joint.ov = [ joint.ov ];

@joint.ox = [ joint.ox ];

@joint.oschwa = [ joint.oschwa ];

@joint.qschwa = [ joint.qschwa ];

@joint.pe = [ joint.pe ];

@joint.pn = [ joint.pn ];

@joint.po = [ joint.po ];

@joint.ps = [ joint.ps ];

@joint.pv = [ joint.pv ];

@joint.pz = [ joint.pz
 ];

@joint.pschwa = [ joint.pschwa ];

@joint.qa = [ joint.qa ];

@joint.qe = [ joint.qe ];

@joint.qn = [ joint.qn ];

@joint.qs = [ joint.qs ];

@joint.qz = [ joint.qz ];

@joint.ra = [ joint.ra ];

@joint.re = [ joint.re ];

@joint.rh = [ joint.rh ];

@joint.rn = [ joint.rn ];

@joint.ro = [ joint.ro
 ];

@joint.rs = [ joint.rs ];

@joint.rt = [ joint.rt ];

@joint.rv = [ joint.rv ];

@joint.rz = [ joint.rz ];

@joint.rschwa = [ joint.rschwa ];

@joint.sa = [ joint.sa
 ];

@joint.se = [ joint.se ];

@joint.sinite = [ joint.sinite ];

@joint.sn = [ joint.sn
 ];

@joint.ss = [ joint.ss ];

@joint.st = [ joint.st ];

@joint.sv = [ joint.sv ];

@joint.sz = [ joint.sz ];

@joint.sschwa = [ joint.sschwa ];

@joint.va = [ joint.va ];

@joint.vb = [ joint.vb ];

@joint.ve = [ joint.ve ];

@joint.vn = [ joint.vn ];

@joint.vo = [ joint.vo ];

@joint.vs = [ joint.vs
 ];

@joint.vv = [ joint.vv ];

@joint.vx = [ joint.vx ];

@joint.vz = [ joint.vz ];

@joint.vschwa = [ joint.vschwa ];

@joint.xe = [ joint.xe
 ];

@joint.xn = [ joint.xn ];

@joint.yx = [ joint.yx ];

@joint.schwaa = [ joint.schwaa
 ];

@joint.schwae = [ joint.schwae ];

@joint.schwan = [ joint.schwan ];

@joint.schwao = [ joint.schwao ];

@joint.schwaascender = [ joint.schwaascender ];

@joint.schwav = [ joint.schwav ];

@joint.schwax = [ joint.schwax ];

@joint.schwaschwa = [ joint.schwaschwa ];

@joints-all = [ instroke.ascender joint.Ea joint.En joint.Es joint.Ex joint.Ha joint.He joint.Hn joint.Ho joint.Hv joint.ax joint.az joint.be joint.bh joint.bo joint.bz joint.einitn joint.ea joint.ee joint.en joint.es joint.ex joint.ex.salt joint.ez joint.fa joint.fe joint.fn joint.fs joint.fv joint.fz joint.ga joint.ge joint.gh joint.gn joint.gs joint.gv joint.gz joint.na joint.ne joint.nn joint.ns joint.nv joint.nx joint.nz joint.oa joint.oe joint.oh joint.on joint.oo joint.os joint.ot joint.ov joint.ox joint.pe joint.pn joint.po joint.ps joint.pv joint.pz joint.qa joint.qe joint.qn joint.qs joint.qz joint.ra joint.re joint.rh joint.rn joint.ro joint.rs joint.rt joint.rv joint.rz joint.sa joint.se joint.sinite joint.sn joint.ss joint.st joint.sv joint.sz joint.va joint.vb joint.ve joint.vh joint.vn joint.vo joint.vv joint.vz joint.xa joint.xe joint.xn joint.yx joint.Ez joint.ev joint.vs joint.vx joint.Eschwa joint.Hschwa joint.Mschwa joint.gschwa joint.nschwa joint.oschwa joint.pschwa joint.rschwa joint.schwaa joint.schwaascender joint.schwae joint.schwan joint.schwaschwa joint.schwav joint.schwax joint.sschwa joint.vschwa joint.fschwa joint.qschwa joint.schwao  
 ];

@finial.all = [ finial finial.A finial.H finial.f finial.r finial.uc finial.uc.short ];

@uc-swash-off = [ K Kcommaaccent L Lacute Lcaron Lcommaaccent Lslash R Racute Rcaron Rcommaaccent Q
 ];

@uc-swash-on = [ K.swsh Kcommaaccent.swsh L.swsh Lacute.swsh Lcaron.swsh Lcommaaccent.swsh Lslash.swsh R.swsh Racute.swsh Rcaron.swsh Rcommaaccent.swsh Q.swsh
 ];

@noswash = [ f f.medi g g.e g.medi g.medi.e g.fina jdotless jdotless.e jdotless.fina j j.e j.fina p q q.medi y y.e y.fina thorn ij ij.e ij.fina eng gbreve gcommaaccent gdotaccent jacute yacute ycircumflex ydieresis ygrave gbreve.e gcommaaccent.e gdotaccent.e jacute.e yacute.e ycircumflex.e ydieresis.e ygrave.e gbreve.fina gcommaaccent.fina gdotaccent.fina jacute.fina yacute.fina ycircumflex.fina ydieresis.fina ygrave.fina gbreve.medi gcommaaccent.medi gdotaccent.medi gbreve.medi.e gcommaaccent.medi.e gdotaccent.medi.e g.isol gbreve.isol gcommaaccent.isol gdotaccent.isol germandbls.salt aogonek ccedilla eogonek iogonek kcommaaccent lcommaaccent ncommaaccent rcommaaccent scedilla scommaaccent tcedilla tcommaaccent uogonek scedilla.init scommaaccent.init aogonek.medi eogonek.medi kcommaaccent.medi lacute.medi lcommaaccent.medi scedilla.medi scommaaccent.medi eogonek.postb tcedilla.r tcommaaccent.r kcommaaccent.salt ];

@odieresis-salt = [ odieresis.salt ];

@odieresis-isol = [ odieresis.isol ];

@aoudieresis = [ adieresis
odieresis
udieresis
 ];

@aoudieresis-salt = [ adieresis.salt
odieresis.salt
udieresis.salt
 ];

# Prefix: Languagesystems
# automatic
languagesystem DFLT dflt;

languagesystem latn dflt;
languagesystem latn AZE;
languagesystem latn CRT;
languagesystem latn KAZ;
languagesystem latn TAT;
languagesystem latn TRK;
languagesystem latn ROM;
languagesystem latn MOL;
languagesystem latn CAT;
languagesystem latn NLD;

# Prefix: Standalone
lookup uc-swash {
	ignore sub @uc-swash-off' @noswash ;
	ignore sub @uc-swash-off' [ idotless i iacute icircumflex idieresis idotaccent igrave imacron iogonek ] @noswash ;
	sub @uc-swash-off' by @uc-swash-on ;
} uc-swash ;

lookup E-isol {
	sub E by E.isol ;
	sub Eacute by Eacute.isol ;
	sub Ebreve by Ebreve.isol ;
	sub Ecaron by Ecaron.isol	;
	sub Ecircumflex by Ecircumflex.isol ;
	sub Edieresis by Edieresis.isol ;
	sub Edotaccent by Edotaccent.isol ;
	sub Egrave by Egrave.isol ;
	sub Emacron by Emacron.isol ;
	sub Eogonek by Eogonek.isol ;
} E-isol ; 

lookup G-isol {
	sub G by G.isol ;
	sub Gbreve by Gbreve.isol ;
	sub Gcommaaccent by Gcommaaccent.isol ;
	sub Gdotaccent by Gdotaccent.isol ;
} G-isol ; 

lookup K-isol {
	sub K by K.isol ;
	sub Kcommaaccent by Kcommaaccent.isol ;
} K-isol ; 

lookup L-isol {
	sub L by L.isol ;
	sub Lacute by Lacute.isol ;
	sub Lcaron by Lcaron.isol ;
	sub Lcommaaccent by Lcommaaccent.isol ;
	sub Lslash by Lslash.isol ;
} L-isol ; 

lookup Q-isol {
	sub Q by Q.isol ;
} Q-isol ; 

lookup R-isol {
	sub R by R.isol ;
	sub Racute by Racute.isol ;
	sub Rcaron by Rcaron.isol ;
	sub Rcommaaccent by Rcommaaccent.isol ;
} R-isol ; 

lookup x-isol {
	sub x by x.isol ;
} x-isol ;

lookup k-salt {
	sub k by k.salt ;
	sub k.medi by k.salt ;
	sub kcommaaccent by kcommaaccent.salt ;
} k-salt ;

lookup germandbls-salt {
	sub germandbls by germandbls.salt ;
} germandbls-salt ;

lookup t-salt {
	sub t by t finial ;
	sub tcaron by tcaron finial ;
	sub tcedilla by tcedilla finial ;
	sub tcommaaccent by tcommaaccent finial ;
} t-salt ;

lookup r-salt {
	sub r by r finial.r ;
	sub racute by racute finial.r ;
	sub rcommaaccent by rcommaaccent finial.r ;
} r-salt ;

lookup descender-salt {
	sub @g by @g-fina ;
	sub @j by @j-fina ;
	sub @y by @y-fina ;
} descender-salt ;

lookup ae-salt {
	sub ae by ae.salt ;
} ae-salt ;

lookup dieresis-salt {
	sub @aoudieresis' by @aoudieresis-salt ;
} dieresis-salt ;

# sub default form of x to dedicated form if preceded by select glyphs
lookup x-forms {
	sub [ @CELQZ-right @MKRU-right @e-right @n-right @descender-right ] x' by x.poste ;
} x-forms ;

feature ccmp {
# automatic
lookup ccmp_Other_1 {
	@CombiningTopAccents = [acutecomb brevecomb caroncomb circumflexcomb commaturnedabovecomb dieresiscomb dotaccentcomb gravecomb hungarumlautcomb macroncomb ringcomb tildecomb];
	@CombiningNonTopAccents = [cedillacomb ogonekcomb];
	sub [i j]' @CombiningTopAccents by [idotless jdotless];
	sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless];
	@Markscomb = [commaaccentcomb dieresiscomb gravecomb acutecomb hungarumlautcomb circumflexcomb caroncomb brevecomb ringcomb tildecomb macroncomb cedillacomb];
	@MarkscombCase = [commaaccentcomb.case dieresiscomb.case gravecomb.case acutecomb.case hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case tildecomb.case macroncomb.case cedillacomb.case];
	sub @Markscomb @Markscomb' by @MarkscombCase;
	sub @Uppercase @Markscomb' by @MarkscombCase;
} ccmp_Other_1;

lookup ccmp_Other_2 {
	sub @Markscomb' @MarkscombCase by @MarkscombCase;
	sub @MarkscombCase @Markscomb' by @MarkscombCase;
} ccmp_Other_2;
} ccmp;

feature locl {
# automatic
lookup locl_latn_0 {
	script latn;
	language AZE;
	sub i by idotaccent;
	language CRT;
	sub i by idotaccent;
	language KAZ;
	sub i by idotaccent;
	language TAT;
	sub i by idotaccent;
	language TRK;
	sub i by idotaccent;
} locl_latn_0;

lookup locl_latn_1 {
	script latn;
	language ROM;
	sub Scedilla by Scommaaccent;
	sub scedilla by scommaaccent;
	sub Tcedilla by Tcommaaccent;
	sub tcedilla by tcommaaccent;
	language MOL;
	sub Scedilla by Scommaaccent;
	sub scedilla by scommaaccent;
	sub Tcedilla by Tcommaaccent;
	sub tcedilla by tcommaaccent;
} locl_latn_1;

lookup locl_latn_2 {
	script latn;
	language CAT;
	sub l periodcentered' l by periodcentered.loclCAT;
	sub L periodcentered' L by periodcentered.loclCAT;
} locl_latn_2;

lookup locl_latn_3 {
	script latn;
	language NLD;
	sub iacute j' by jacute;
	sub Iacute J' by Jacute;
} locl_latn_3;
} locl;

feature calt {
# dedicated case forms of punctuation 

sub @figures @punct-dflt' @figures by @punct-case ;
sub @Uppercase @punct-dflt' @Uppercase by @punct-case ;

# -------------------------------------------------------------------------------
# dedicated positional forms
#

# sub default g by g.isol unless preceded or followed by other alphabetic character

lookup g-isol {
ignore sub @g' [ @Uppercase @Lowercase @k-salt x x.isol ] ;
ignore sub [ @Uppercase @Lowercase @k-salt x x.isol ] @g' ;
	sub @g' by @g-isol ;
} g-isol ;

# sub default o and non-joining o by o.isol unless preceded or followed by other alphabetic characters
lookup o-isol {
	ignore sub @o' [ @Uppercase @Lowercase x x.isol ] ;
	ignore sub [ @Uppercase @Lowercase x x.isol ]  @o' ;
	sub @o' by @o-isol ;
} o-isol ;

# sub default forms of select glyphs to dedicated forms if followed by e
lookup pre-e-forms {
	sub [ b b.medi @o ]' [ @e-left @ascender-left ] by [ b.e b.medi.e @o-e ] ;
	sub [ @GJ @g @g-medi @j @y ]' @e-left by [ @GJ-e @g-e @g-medi-e @j-e @y-e ] ;
} pre-e-forms ;

# sub default forms of e to dedicated forms if preceded by select glyphs
lookup e-forms {
	sub [ @A-right @H-right @b-right @o-right @r-right @v-right @schwa ] @e' by @e-postb ;
} e-forms ;

# sub default forms of t to dedicated forms if preceded by r
lookup t-forms {
	sub @r-right @t' by @t-r ;
} t-forms ;

# sub default form of eth to dedicated form if preceded by select glyphs
lookup eth-forms {
	sub [ @o-right @r-right @v-right ] eth' by eth.posto ;
} eth-forms ;

# sub initial forms of lowercase glyphs to medial (connecting) forms if preceded by select glyphs
lookup medi {
	ignore sub [ instroke.ascender @nonjoiner @g-fina @j-fina @y-fina ] @init' ;
	sub [ @CELQZ-right @GJ @GJ-e @MKRU-right @Lowercase @k-salt ] @init' by @medi ;
	sub [ @A-right @H-right ] [ @a-init ]' by [ @a-medi ] ;
	sub @I @l-init' by instroke.ascender @l-medi ;
	sub periodcentered.loclCAT @l-init' by @l-medi ;
} medi ;

lookup medi2 {
	sub @s-isol' [ @Lowercase x ] by @s-init ;
} medi2 ;

# -----------------------------------
# joints

# introduce joints before glyphs with left side like a
lookup joints-a {
	sub [ @A-right @H-right ]' @a-left by [ @A-right @H-right ] @joint.Ha ;
	sub @CELQZ-right' @a-left by @CELQZ-right @joint.Ea ;
	sub @MKRU-right' @a-left by @MKRU-right @joint.na ;
	sub @e-right' @a-left by @e-right @joint.ea ;
	sub @f-right' [ @a-left @o-left ] by @f-right @joint.fa ;
	sub [ @n-right @x-poste ]' @a-left by [ @n-right @x-poste ] @joint.na ;
	sub @o-right' @a-left by @o-right @joint.oa ;
	sub @q-right' @a-left by @q-right @joint.qa ;
	sub @r-right' @a-left by @r-right @joint.ra ;
	sub [ @s-init @s-right ]' @a-left by [ @s-init @s-right ] @joint.sa ;
	sub @v-right' @a-left by @v-right @joint.va ;
	sub @schwa' @a-left by @schwa @joint.schwaa ;
	} joints-a ;

# introduce joints before glyphs with left side like e
lookup joints-e {
	sub [ @A-right @H-right ]' @e-left by [ @A-right @H-right ] @joint.He ;
	sub @b-right' @e-left by @b-right @joint.be ;
	sub @o-right' @e-left by @o-right @joint.oe ;
	sub [ @CELQZ-right @e-right ]' @e-left by [ @CELQZ-right @e-right ] @joint.ee ;
	sub @MKRU-right' @e-left by @MKRU-right @joint.xe ;
	sub @f-right' @e-left by @f-right @joint.fe ;
	sub [ @n-right @x-poste ]' @e-left by [ @n-right @x-poste ] @joint.ne ;
	sub @descender-right' @e-left by @descender-right @joint.ge ;
	sub @s-right' @e-left by @s-right @joint.se ;
	sub @s-init' @e-left by @s-init @joint.sinite ;
	sub @p-right' @e-left by @p-right @joint.pe ;
	sub @q-right' @e-left by @q-right @joint.qe ;
	sub @r-right' @e-left by @r-right @joint.re ;
	sub @v-right' @e-left by @v-right @joint.ve ;
	sub @schwa' @e-left by @schwa @joint.schwae ;
	} joints-e ;

# introduce joints before glyphs with left side like n
lookup joints-n {
	sub [ @A-right @H-right ]' @n-left by [ @A-right @H-right ] @joint.Hn ;
	sub @CELQZ-right' [ @ascender-left @n-left ] by @CELQZ-right @joint.En ; 
	sub @MKRU-right' @n-left by @MKRU-right @joint.xn ;
	sub @e-right' [ @ascender-left @n-left ] by @e-right @joint.en ; 
	sub @f-right' [ @ascender-left @n-left ] by @f-right @joint.fn ; 
	sub [ @n-right @x-poste ]' @n-left by [ @n-right @x-poste ] @joint.nn ;
	sub @o-right' @n-left by @o-right @joint.on ;
	sub @p-right' @n-left by @p-right @joint.pn ;
	sub @q-right' @n-left by @q-right @joint.qn ;
	sub @descender-right' @n-left by @descender-right @joint.gn ;
	sub @r-right' @n-left by @r-right @joint.rn ;
	sub [ @s-init @s-right ]' [ @ascender-left @n-left ] by [ @s-init @s-right ] @joint.sn ;
	sub @t-right' [ @t-right @n-left ] by @t-right @joint.nn ;
	sub @v-right' @n-left by @v-right @joint.vn ;
	sub @schwa' @n-left by @schwa @joint.schwan ;
	} joints-n ;

# introduce joints before glyphs with left side like o
lookup joints-o {
	sub [ @A-right @H-right ]' @o-left by [ @A-right @H-right ] @joint.Ho ;
	sub @e-right' @o-left by @e-right @joint.ea ;
	sub @CELQZ-right' @o-left by @CELQZ-right @joint.Ea ;
	sub @MKRU-right' @o-left by @MKRU-right @joint.na ;
	sub @b-right' @o-left by @b-right @joint.bo ;
	sub [ @n-right @x-poste ]' @o-left by [ @n-right @x-poste ] @joint.na ;
	sub @o-right' @o-left by @o-right @joint.oo ;
	sub @p-right' [ @a-left @o-left ] by @p-right @joint.po ;
	sub @q-right' @o-left by @q-right @joint.qa ;
	sub @r-right' @o-left by @r-right @joint.ro ;
	sub [ @s-init @s-right ]' @o-left by [ @s-init @s-right ] @joint.sa ;
	sub @v-right' @o-left by @v-right @joint.vo ;
	sub @schwa' @o-left by @schwa @joint.schwao ;
	} joints-o ;
 
# introduce joints before s
lookup joints-s {
	sub @CELQZ-right' @s-left by @CELQZ-right @joint.Es ;
	sub @MKRU-right' @s-left by @MKRU-right @joint.ns ;
	sub @f-right' @s-left by @f-right @joint.fs ;
	sub [ @n-right @x-poste ]' @s-left by [ @n-right @x-poste ] @joint.ns ;
	sub @descender-right' @s-left by @descender-right @joint.gs ;
	sub @e-right' @s-left by @e-right @joint.es ;
	sub @o-right' @s-left by @o-right @joint.os ;
	sub @p-right' @s-left by @p-right @joint.ps ;
	sub @q-right' @s-left  by @q-right @joint.qs ;
	sub @r-right' @s-left by @r-right @joint.rs ;
	sub [ @s-init @s-right ]' @s-left by [ @s-init @s-right ] @joint.ss ;
	sub @v-right' @s-left by @v-right @joint.vs ;
	sub @schwa' @s-left by @schwa @joint.schwaa ;
	} joints-s ;

# introduce joints before t
lookup joints-t {
	sub @CELQZ-right' @t-left by @CELQZ-right @joint.En ;
	sub @MKRU-right' @t-left by @MKRU-right @joint.xn ;
	sub @e-right' @t-left by @e-right @joint.en ;
	sub @f-right' @t-left by @f-right @joint.fn ;
	sub @descender-right' @t-left by @descender-right @joint.gn ;
	sub [ @n-right @x-poste ]' @t-left by [ @n-right @x-poste ] @joint.nn ;
	sub @o-right' @t-left by @o-right @joint.ot ;
	sub @p-right' @t-left by @p-right @joint.pn ;
	sub @q-right' @t-left by @q-right @joint.qn ;
	sub @r-right' @t-left by @r-right @joint.rt ;
	sub [ @s-init @s-right ]' @t-left by [ @s-init @s-right ] @joint.st ;
	sub @v-right' @t-left by @v-right @joint.vb ;
	sub @schwa' @t-left by @schwa @joint.schwaascender ;
	} joints-t ;

# introduce joints before glyphs with left side like v
lookup joints-v {
	sub @CELQZ-right' @v-left  by @CELQZ-right @joint.Ez ;	
	sub @A-right' @v-left  by @A-right @joint.Hv ;
	sub @H-right' @v-left  by @H-right @joint.Hv ;
	sub @MKRU-right' @v-left  by @MKRU-right @joint.nv ;
	sub @e-right' @v-left  by @e-right @joint.ev ;	
	sub @f-right' @v-left  by @f-right @joint.fv ;	
	sub [ @n-right @x-poste ]' @v-left  by [ @n-right @x-poste ] @joint.nv ;
	sub @o-right' @v-left  by @o-right @joint.ov ;
	sub @p-right' @v-left by @p-right @joint.pv ;
	sub @q-right' @v-left by @q-right @joint.qz ;
	sub @r-right' @v-left by @r-right @joint.rv ;
	sub [ @s-init @s-right ]' @v-left  by [ @s-init @s-right ] @joint.sv ;
	sub @descender-right' @v-left  by @descender-right @joint.gv ;
	sub @v-right' @v-left by @v-right @joint.vv ;
	sub @schwa' @v-left by @schwa @joint.schwav ;
	} joints-v ;

# introduce joints before x
lookup joints-x {
	sub @CELQZ-right' @x-left  by @CELQZ-right @joint.Ex ;	
	sub @n-right' @x-left  by @n-right @joint.nx ;	
	sub @A-right' @x-left  by @A-right @joint.Hv ;
	sub @H-right' @x-left  by @H-right @joint.Hv ;
	sub @MKRU-right' @x-left  by @MKRU-right @joint.nx ;	
	sub @e-right' @x-left  by @e-right @joint.ex ;	
	sub @f-right' @x-left  by @f-right @joint.fn ;	
	sub @descender-right' @x-left  by @descender-right @joint.gn ;
	sub @o-right' @x-left by @o-right @joint.ox ;	
	sub @p-right' @x-left  by @p-right @joint.pn ;	
	sub @q-right' @x-left  by @q-right @joint.qn ;	
	sub @r-right' @x-left  by @r-right @joint.rn ;	
	sub [ @s-init @s-right ]' @x-left  by [ @s-init @s-right ] @joint.sn ;	
	sub @v-right' @x-left  by @v-right @joint.vx ;	
	sub @schwa' @x-left by @schwa @joint.schwax ;
	} joints-x ;

# introduce joints before x.poste
lookup joints-xposte {
	sub [ @CELQZ-right @MKRU-right @e-right @n-right ]' @x-poste  by [ @CELQZ-right @MKRU-right @e-right @n-right ] joint.ex.salt ;	
	sub @descender-right' @x-poste  by @descender-right @joint.yx ;
	sub @p-right' @x-left  by @p-right @joint.pn ;	
	sub @q-right' @x-left  by @q-right @joint.qn ;	
} joints-xposte ;

# introduce joints before z
lookup joints-z {
	sub [ @b-right @o-right ]' @z-left  by [ @b-right @o-right ] @joint.bz ;
	sub @CELQZ-right' @z-left  by @CELQZ-right @joint.Ez ;
	sub @MKRU-right' @z-left  by @MKRU-right @joint.nz ;
	sub @e-right' @z-left  by @e-right @joint.ez ;
	sub @f-right' @z-left  by @f-right @joint.fz ;
	sub [ @n-right @x-poste ]' @z-left  by [ @n-right @x-poste ] @joint.nz ;
	sub @p-right' @z-left  by @p-right @joint.pz ;
	sub @q-right' @z-left  by @q-right @joint.qz ;
	sub @r-right' @z-left  by @r-right @joint.rz ;
	sub [ @s-init @s-right ]' @z-left  by [ @s-init @s-right ] @joint.sz ;
	sub @v-right' @z-left  by @v-right @joint.vz ;
	sub @descender-right' @z-left  by @descender-right @joint.gz ;
	sub @schwa' @z-left  by @schwa @joint.schwav ;
	} joints-z ;

# introduce joints before ascenders
lookup joints-ascenders {
	sub @MKRU-right' @ascender-left by @MKRU-right @joint.nn ;

	sub @descender-right' @ascender-left by @descender-right @joint.gn ;
	sub @b-right' @ascender-left by @b-right @joint.bh ;
	sub [ @n-right @x-poste ]' @ascender-left by [ @n-right @x-poste ] @joint.nn ;
	sub @o-right' @ascender-left by @o-right @joint.oh ;
	sub @p-right' @ascender-left by @p-right @joint.pn ;
	sub @q-right' @ascender-left by @q-right @joint.qn ;
	sub @r-right' @ascender-left by @r-right @joint.rh ;
	sub @v-right' @ascender-left by @v-right @joint.vb ;
	sub @schwa' @ascender-left by @schwa @joint.schwaascender ;
} joints-ascenders ;

# introduce joints before schwa
lookup joints-schwa {
	sub @CELQZ-right' @schwa by @CELQZ-right @joint.Eschwa ;
	sub @MKRU-right' @schwa by @MKRU-right @joint.Mschwa ;
	sub @e-right' @schwa by @e-right @joint.Eschwa ;
	sub @f-right' @schwa by @f-right @joint.fschwa ;
	sub [ @n-right @x-poste ]' @schwa by [ @n-right @x-poste ] @joint.nschwa ;
	sub @o-right' @schwa by @o-right @joint.oschwa ;
	sub @p-right' @schwa by @p-right @joint.pschwa ;
	sub @q-right' @schwa by @q-right @joint.qschwa ;
	sub @r-right' @schwa by @r-right @joint.rschwa ;
	sub [ @s-init @s-right ]' @schwa by [ @s-init @s-right ] @joint.sschwa ;
	sub @schwa' @schwa by @schwa @joint.schwaschwa ;
	sub @v-right' @schwa by @v-right @joint.vschwa ;
	sub @descender-right' @schwa  by @descender-right @joint.gschwa ;
 	} joints-schwa ;


# introduce joints after descenders
lookup joints-ga {
	sub @descender-right' [ @a-left @o-left ] by @descender-right @joint.ga ;
} joints-ga ;

# add outstroke after uppercase when not joining or isolated
lookup unjoined-uc {
	ignore sub [ @A-right @H-right ]' [ @a-left @e-left @n-left @o-left @v-left @x-left @joint.Ha @joint.He @joint.Hn @joint.Hv @joint.Ho ] ;
	sub @A-right' by @A-right finial.A ;
	sub @H-right' by @H-right finial.H ;
} unjoined-uc ;

# add outstroke after joining uc and lc unless followed by other lc glyphs
lookup finial {
	ignore sub [ @A-right @H-right @CELQZ-right @MKRU-right @e-right @f-right @n-right @r-right @t-right @x-poste @uc-swash-on ]' [ @Lowercase @joints-all @finial.all ] ;
	sub [ @e-right @n-right @t-right @x-poste ]' by [ @e-right @n-right @t-right @x-poste ] finial ;
	sub @f-right' by @f-right finial.f ;
	sub @r-right' by @r-right finial.r ;
	sub [ @CELQZ-right ]' by [ @CELQZ-right ] finial.uc ;
	sub [ @MKRU-right ]' by [ @MKRU-right ] finial.uc.short ;
} finial ;

# add outstroke after joining uc and lc if followed by stylistic alternates
lookup finial_explicit {
	sub [ @e-right @n-right @t-right ]' [ @g-fina @j-fina @k-salt @y-fina ] by [ @e-right @n-right @t-right ] finial ;
	sub @f-right' [ @g-fina @j-fina @k-salt @y-fina ] by @f-right finial.f ;
	sub @j' [ @g-fina @j-fina @k-salt @y-fina ] by @j-fina ;
	sub @g' [ @g-fina @j-fina @k-salt @y-fina ] by @g-fina ;
	sub @g-medi' @k-salt by @g-fina ;
	sub @r-right' [ @g-fina @j-fina @k-salt @y-fina ] by @r-right finial.r ;
	sub [ @CELQZ-right ]' [ @g-fina @j-fina @k-salt @y-fina ] by [ @CELQZ-right ] finial.uc ;
	sub [ @MKRU-right ]' [ @g-fina @j-fina @k-salt @y-fina ] by [ @MKRU-right ] finial.uc.short ;
	sub @y' [ @g-fina @j-fina @k-salt @y-fina ] by @y-fina ;
} finial_explicit ;

# use dedicated final forms of selected glyphs unless followed by other lc glyphs
lookup final {
	ignore sub  [ @GJ @g @g-medi @j @r @y ]' [ @Lowercase @joints-all @finial.all ] ;
	sub @g' by @g-fina ;
	sub @g-medi' by @g-fina ;
	sub @GJ' by @GJ-isol ;
	sub @j' by @j-fina ;
	sub @y' by @y-fina ;
} final ;

# Germandbls between capitals
lookup uppercaseSharpS {
    sub @Uppercase @Uppercase germandbls' by germandbls.calt;
    sub germandbls' @Uppercase by germandbls.calt;
} uppercaseSharpS;

# Build arrows on the fly  
lookup make_arrow {
	sub hyphen greater by arrowright ;
	sub less hyphen by arrowleft ;
} make_arrow ;

lookup arrow_extension {
	sub hyphen' arrowright by hyphen.calt ;
	sub hyphen' hyphen arrowright by hyphen.calt ;
	sub hyphen' hyphen hyphen arrowright by hyphen.calt ;
	sub hyphen' hyphen hyphen hyphen arrowright by hyphen.calt ;
	sub hyphen' hyphen hyphen hyphen hyphen arrowright by hyphen.calt ;
} arrow_extension ;

lookup arrow_left {
	sub arrowleft hyphen' by hyphen.calt ;
	sub arrowleft hyphen.calt hyphen' by hyphen.calt ;
	sub arrowleft hyphen.calt hyphen.calt hyphen' by hyphen.calt ;
	sub arrowleft hyphen.calt hyphen.calt hyphen.calt hyphen' by hyphen.calt ;
	sub arrowleft hyphen.calt hyphen.calt hyphen.calt hyphen.calt hyphen' by hyphen.calt ;
} arrow_left ;
} calt;

feature lnum {
# automatic
sub zero.osf by zero;
sub one.osf by one;
sub two.osf by two;
sub three.osf by three;
sub four.osf by four;
sub five.osf by five;
sub six.osf by six;
sub seven.osf by seven;
sub eight.osf by eight;
sub nine.osf by nine;
} lnum;

feature pnum {
# automatic
sub zero.tf by zero;
sub one.tf by one;
sub two.tf by two;
sub three.tf by three;
sub four.tf by four;
sub five.tf by five;
sub six.tf by six;
sub seven.tf by seven;
sub eight.tf by eight;
sub nine.tf by nine;
} pnum;

feature tnum {
# automatic
sub zero by zero.tf;
sub one by one.tf;
sub two by two.tf;
sub three by three.tf;
sub four by four.tf;
sub five by five.tf;
sub six by six.tf;
sub seven by seven.tf;
sub eight by eight.tf;
sub nine by nine.tf;
} tnum;

feature onum {
# automatic
sub zero by zero.osf;
sub one by one.osf;
sub two by two.osf;
sub three by three.osf;
sub four by four.osf;
sub five by five.osf;
sub six by six.osf;
sub seven by seven.osf;
sub eight by eight.osf;
sub nine by nine.osf;
} onum;

feature case {
# automatic
sub endash by endash.case;
sub emdash by emdash.case;
sub commaaccentcomb by commaaccentcomb.case;
sub dieresiscomb by dieresiscomb.case;
sub gravecomb by gravecomb.case;
sub acutecomb by acutecomb.case;
sub hungarumlautcomb by hungarumlautcomb.case;
sub circumflexcomb by circumflexcomb.case;
sub caroncomb by caroncomb.case;
sub brevecomb by brevecomb.case;
sub ringcomb by ringcomb.case;
sub tildecomb by tildecomb.case;
sub macroncomb by macroncomb.case;
sub cedillacomb by cedillacomb.case;
sub zero.osf by zero;
sub one.osf by one;
sub two.osf by two;
sub three.osf by three;
sub four.osf by four;
sub five.osf by five;
sub six.osf by six;
sub seven.osf by seven;
sub eight.osf by eight;
sub nine.osf by nine;
} case;

feature subs {
# automatic
sub zero by zeroinferior;
sub one by oneinferior;
sub two by twoinferior;
} subs;

feature sinf {
# automatic
sub zero by zeroinferior;
sub one by oneinferior;
sub two by twoinferior;
} sinf;

feature sups {
# automatic
sub zero by zerosuperior;
sub one by onesuperior;
sub two by twosuperior;
} sups;

feature numr {
# automatic
sub zero by zero.numr;
sub one by one.numr;
sub two by two.numr;
} numr;

feature dnom {
# automatic
sub zero by zero.dnom;
sub one by one.dnom;
sub two by two.dnom;
} dnom;

feature frac {
# automatic
sub one slash two by onehalf;
} frac;

feature dlig {
sub lslash lslash by lslash_lslash ;

lookup wordliga {
sub Y e a h exclam by Y_e_a_h_exclam ;
sub B r a v o exclam exclam exclam by B_r_a_v_o_exclam_exclam_exclam ;
sub s e h r space g u t exclam by s_e_h_r_g_u_t_exclam ;
} wordliga ;
} dlig;

feature cv01 {
lookup cv01 {
sub whiteLeftBackhandIndex by whiteLeftBackhandIndex.cv01;
sub whiteRightBackhandIndex by whiteRightBackhandIndex.cv01;
sub whiteUpBackhandIndex by whiteUpBackhandIndex.cv01;
sub whiteDownBackhandIndex by whiteDownBackhandIndex.cv01;
sub pencil by pencil.cv01;
} cv01 ;
} cv01;

feature cv02 {
lookup cv02 {
sub whiteLeftBackhandIndex by whiteLeftBackhandIndex.cv02;
sub whiteRightBackhandIndex by whiteRightBackhandIndex.cv02;
sub whiteUpBackhandIndex by whiteUpBackhandIndex.cv02;
sub whiteDownBackhandIndex by whiteDownBackhandIndex.cv02;
} cv02 ;
} cv02;

feature cv03 {
lookup cv03 { 
sub whiteLeftBackhandIndex by whiteLeftBackhandIndex.cv03;
sub whiteRightBackhandIndex by whiteRightBackhandIndex.cv03;
sub whiteUpBackhandIndex by whiteUpBackhandIndex.cv03;
sub whiteDownBackhandIndex by whiteDownBackhandIndex.cv03;
} cv03 ;
} cv03;

feature ss01 {
featureNames {
	name "Unjoined k";
	name 3 1 0x407 "Unverbundenes k";
	name 3 1 0x409 "Unjoined k";
};
lookup k-salt ;
#sub @o' by @o-isol ;
} ss01;

feature ss02 {
featureNames {
	name "Unjoined r";
	name 3 1 0x407 "Unverbundenes r";
	name 3 1 0x409 "Unjoined r";
};
lookup r-salt ;
} ss02;

feature ss03 {
featureNames {
	name "Unjoined t";
	name 3 1 0x407 "Unverbundenes t";
	name 3 1 0x409 "Unjoined t";
};
lookup t-salt ;
} ss03;

feature ss04 {
featureNames {
	name "Unjoined g j y";
	name 3 1 0x407 "Unverbundene g j y";
	name 3 1 0x409 "Unjoined g j y";
};
lookup descender-salt ;
} ss04;

feature ss05 {
featureNames {
	name "Unjoined k r t";
	name 3 1 0x407 "Unverbundene k r t";
	name 3 1 0x409 "Unjoined k r t";
};
lookup k-salt ;
lookup r-salt ;
lookup t-salt ;
} ss05;

feature ss06 {
featureNames {
	name "Unjoined ä ö ü";
	name 3 1 0x407 "Unverbundene ä ö ü";
	name 3 1 0x409 "Unjoined ä ö ü";
};
lookup dieresis-salt ;

sub @nonjoiner @odieresis-salt' by @odieresis-isol ;
} ss06;

feature ss07 {
featureNames {
	name "Unjoined x";
	name 3 1 0x407 "Unverbundenes x";
	name 3 1 0x409 "Unjoined x";
};
lookup x-isol ;
} ss07;

feature ss08 {
featureNames {
	name "Alternative joined form of x";
	name 3 1 0x407 "Alternative verbundene Form von x";
	name 3 1 0x409 "Alternative joined form of x";
};
# sub default form of x to dedicated form if preceded by select glyphs
lookup x-forms ;
} ss08;

feature ss09 {
featureNames {
	name "Alternative form of ß with descender";
	name 3 1 0x407 "Alternative Form von ß mit Unterlänge";
	name 3 1 0x409 "Alternative form of ß with descender";
};
lookup germandbls-salt ;
} ss09;

feature ss10 {
featureNames {
	name "Alternative form of ae";
	name 3 1 0x407 "Alternative Form von ae";
	name 3 1 0x409 "Alternative form of ae";
};
lookup ae-salt ;
} ss10;

feature ss11 {
featureNames {
	name "Unjoined E";
	name 3 1 0x407 "Unverbundenes E";
	name 3 1 0x409 "Unjoined E";
};
lookup E-isol ;	
} ss11;

feature ss12 {
featureNames {
	name "Unjoined G";
	name 3 1 0x407 "Unverbundenes G";
	name 3 1 0x409 "Unjoined G";
};
lookup G-isol ;
} ss12;

feature ss13 {
featureNames {
	name "Unjoined K";
	name 3 1 0x407 "Unverbundenes K";
	name 3 1 0x409 "Unjoined K";
};
lookup K-isol ;
} ss13;

feature ss14 {
featureNames {
	name "Unjoined L";
	name 3 1 0x407 "Unverbundenes L";
	name 3 1 0x409 "Unjoined L";
};
lookup L-isol ;
} ss14;

feature ss15 {
featureNames {
	name "Unjoined R";
	name 3 1 0x407 "Unverbundenes R";
	name 3 1 0x409 "Unjoined R";
};
lookup R-isol ;
} ss15;

feature ss16 {
featureNames {
	name "Unjoined Q";
	name 3 1 0x407 "Unverbundenes Q";
	name 3 1 0x409 "Unjoined Q";
};
lookup Q-isol ;
} ss16;

feature ss17 {
featureNames {
	name "Unjoined E G K L Q R";
	name 3 1 0x407 "Unverbundene E G K L Q R";
	name 3 1 0x409 "Unjoined E G K L Q R";
};
lookup E-isol;
lookup G-isol;
lookup K-isol;
lookup L-isol;
lookup Q-isol;
lookup R-isol;
} ss17;

feature ss18 {
featureNames {
	name "variant 1 of pointing hands";
	name 3 1 0x407 "Variante 1 der deutenden Hände";
	name 3 1 0x409 "variant 1 of pointing hands";
};
lookup cv01 ;
} ss18;

feature ss19 {
featureNames {
	name "variant 2 of pointing hands";
	name 3 1 0x407 "Variante 2 der deutenden Hände";
	name 3 1 0x409 "variant 2 of pointing hands";
};
lookup cv02 ;
} ss19;

feature ss20 {
featureNames {
	name "variant 3 of pointing hands";
	name 3 1 0x407 "Variante 3 der deutenden Hände";
	name 3 1 0x409 "variant 3 of pointing hands";
};
lookup cv03 ;
} ss20;

feature swsh {
lookup uc-swash ;
} swsh;

feature ornm {
sub bullet from [ whiteHeart heavyBlackHeart heartsuitwhite heartsuitblack pencil lowerRightPencil upperRightPencil s_e_h_r_g_u_t_exclam B_r_a_v_o_exclam_exclam_exclam Y_e_a_h_exclam whiteLeftBackhandIndex whiteLeftBackhandIndex.cv01 whiteLeftBackhandIndex.cv02 whiteLeftBackhandIndex.cv03 whiteRightBackhandIndex whiteRightBackhandIndex.cv01 whiteRightBackhandIndex.cv02 whiteRightBackhandIndex.cv03  ] ;
} ornm;

feature kern {
lookup kern-calt {
# asterisk
	pos f' finial.f' 300 asterisk ; 
	pos f.medi' finial.f' 150 asterisk ;
	pos [ l l.medi ]' finial' 180 asterisk ;
	pos [ lcaron lcaron.medi dcaron dcaron.medi tcaron ]' finial' 300 asterisk ;
# quotes
	pos f' finial.f' 280 [ quoteleft quotedblleft ] ; 
	pos f.medi' finial.f' 130 [ quoteleft quotedblleft ] ;
	pos [ l l.medi ]' finial' 150 [ quoteleft quotedblleft ] ;
	pos [ lcaron lcaron.medi dcaron dcaron.medi tcaron ]' finial' 250 [ quoteleft quotedblleft ] ;
	pos f' finial.f' 230 [ quoteright quotedblright ] ; 
	pos f.medi' finial.f' 100 [ quoteright quotedblright ] ;
	pos [ l l.medi ]' finial' 80 [ quoteright quotedblright ] ;
	pos [ lcaron lcaron.medi dcaron dcaron.medi tcaron ]' finial' 200 [ quoteright quotedblright ] ;
} kern-calt ;
} kern;

