It depends on what you want, but init and fina for Latin can be done with calt. I took some code from an earlier post and made some adjustments to enable init through calt:
script latn {
feature ContextualAlternates;
}
class @uppercase [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];
class @uppercaseinit [A.init B.init C.init D.init E.init F.init G.init H.init I.init J.init K.init L.init M.init N.init O.init P.init Q.init R.init S.init T.init U.init V.init W.init X.init Y.init Z.init];
class @latin_all [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 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 A.init B.init C.init D.init E.init F.init G.init H.init I.init J.init K.init L.init M.init N.init O.init P.init Q.init R.init S.init T.init U.init V.init W.init X.init Y.init Z.init];
feature ContextualAlternates calt {
lookup ChainingContextInit;
}
lookup ChainingContextInit {
ignore context (@latin_all) @latin_all;
context @uppercase;
sub 0 SingleSubstitutionInitUpper;
}
lookup SingleSubstitutionInitUpper {
sub @uppercase -> @uppercaseinit;
}
Character Variants support custom naming fields, which you can define with FontCreator. Just keep in mind the code editor doesn’t support it yet.