[cantarell-fonts/ufo-conversion: 2/4] Share feature file among UFOs



commit 8a37976b1ff73719b12b19eda5281d12d7ba5995
Author: Nikolaus Waxweiler <madigens gmail com>
Date:   Sat Feb 9 17:07:06 2019 +0000

    Share feature file among UFOs
    
    Also use the GDEF table as geenrated by Glyphs.app.
    
    Amend build script to expand the feature files to generated instances.

 scripts/fm.py                          |   1 +
 src/Cantarell-Bold.ufo/features.fea    | 496 +-------------------------------
 src/Cantarell-Light.ufo/features.fea   | 496 +-------------------------------
 src/Cantarell-Regular.ufo/features.fea | 496 +-------------------------------
 src/family.fea                         | 504 +++++++++++++++++++++++++++++++++
 5 files changed, 508 insertions(+), 1485 deletions(-)
---
diff --git a/scripts/fm.py b/scripts/fm.py
index c52f1b2f..b492a65c 100644
--- a/scripts/fm.py
+++ b/scripts/fm.py
@@ -36,6 +36,7 @@ subprocess.run(
         "otf",
         "--verbose",
         "WARNING",
+        "--expand-features-to-instances",
         "--output-dir",
         args.output_dir,
     ]
diff --git a/src/Cantarell-Bold.ufo/features.fea b/src/Cantarell-Bold.ufo/features.fea
index 58b08f1b..5e62ed1b 100644
--- a/src/Cantarell-Bold.ufo/features.fea
+++ b/src/Cantarell-Bold.ufo/features.fea
@@ -1,495 +1 @@
-# automatic
-@Uppercase = [ A Aacute Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acaron 
Acircumflex Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde 
Adblgrave Adieresis Adotbelow Agrave Ahookabove Ainvertedbreve Amacron Aogonek Aring Aringacute Atilde AE 
AEacute B C Cacute Ccaron Ccedilla Ccedillaacute Ccircumflex Cdotaccent D DZcaron Eth Dcaron Dcroat Ddotbelow 
Dlinebelow Dzcaron E Eacute Ebreve Ecaron Ecedillabreve Ecircumflex Ecircumflexacute Ecircumflexdotbelow 
Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Edblgrave Edieresis Edotaccent Edotbelow Egrave 
Ehookabove Einvertedbreve Emacron Emacronacute Emacrongrave Eogonek Etilde F G Gbreve Gcaron Gcircumflex 
Gcommaaccent Gdotaccent Gmacron H Hbar Hbrevebelow Hcircumflex Hdotbelow I Iacute Ibreve Icaron Icircumflex 
Idblgrave Idieresis Idieresisacute Idotaccent Idotbelow Igrave Ihookabove Iinvertedbreve Imacron Iogonek 
Itilde J Jacute Jcircumflex K Kacute K
 commaacc
 ent L LJ Lacute Lcaron Lcommaaccent Ldot Ldotbelow Lj Llinebelow Lslash M Mdotbelow N NJ Nacute Ncaron 
Ncommaaccent Ndotaccent Ndotbelow Eng Nj Nlinebelow Ntilde O Oacute Obreve Ocaron Ocircumflex 
Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Odblgrave 
Odieresis Odieresismacron Odotaccentmacron Odotbelow Ograve Ohookabove Ohorn Ohornacute Ohorndotbelow 
Ohorngrave Ohornhookabove Ohorntilde Ohungarumlaut Oinvertedbreve Omacron Omacronacute Omacrongrave Oogonek 
Oslash Oslashacute Otilde Otildeacute Otildedieresis Otildemacron OE P Thorn Q R Racute Rcaron Rcommaaccent 
Rdblgrave Rdotbelow Rinvertedbreve Rlinebelow S Sacute Sacutedotaccent Saltillo Scaron Scarondotaccent 
Scedilla Scircumflex Scommaaccent Sdotaccent Sdotbelow Sdotbelowdotaccent Germandbls Schwa T Tbar Tcaron 
Tcedilla Tcommaaccent Tdotbelow Tlinebelow U Uacute Ubreve Ucaron Ucircumflex Udblgrave Udieresis 
Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotb
 elow Ugr
 ave Uhookabove Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhookabove Uhorntilde Uhungarumlaut 
Uinvertedbreve Umacron Umacrondieresis Uogonek Uring Utilde Utildeacute V W Wacute Wcircumflex Wdieresis 
Wgrave X Y Yacute Ycircumflex Ydieresis Ydotaccent Ydotbelow Ygrave Yhookabove Ymacron Ytilde Z Zacute Zcaron 
Zdotaccent Zdotbelow A-cy Be-cy Ve-cy Ge-cy Gje-cy Gheupturn-cy De-cy Ie-cy Iegrave-cy Io-cy Zhe-cy Ze-cy 
Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy El-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy Te-cy U-cy Ushort-cy Ef-cy 
Ha-cy Che-cy Tse-cy Sha-cy Shcha-cy Dzhe-cy Softsign-cy Hardsign-cy Yeru-cy Lje-cy Nje-cy Dze-cy E-cy 
Ereversed-cy I-cy Yi-cy Je-cy Tshe-cy Iu-cy Ia-cy Dje-cy Yat-cy Yusbig-cy Fita-cy Izhitsa-cy Ghestroke-cy 
Ghemiddlehook-cy Zhedescender-cy Zedescender-cy Kadescender-cy Kaverticalstroke-cy Kabashkir-cy 
Endescender-cy Enghe-cy Esdescender-cy Ustrait-cy Ustraitstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Chekhak
 assian-c
 y Abreve-cy Adieresis-cy Aie-cy Iebreve-cy Schwa-cy Zhedieresis-cy Zedieresis-cy Imacron-cy Idieresis-cy 
Odieresis-cy Obarred-cy Umacron-cy Udieresis-cy Uhungarumlaut-cy Chedieresis-cy Gedescender-cy 
Yerudieresis-cy Qa-cy We-cy ];
-
-# Prefix: Languagesystems
-# automatic
-languagesystem DFLT dflt;
-languagesystem latn dflt;
-languagesystem latn NLD;
-languagesystem latn CAT;
-languagesystem latn ROM;
-languagesystem latn MOL;
-languagesystem latn KAZ;
-languagesystem latn TAT;
-languagesystem latn TRK;
-languagesystem latn CRT;
-languagesystem latn AZE;
-
-
-feature aalt {
-# automatic
-feature ccmp;
-feature locl;
-feature subs;
-feature sinf;
-feature sups;
-feature numr;
-feature dnom;
-feature frac;
-feature ordn;
-feature lnum;
-feature pnum;
-feature tnum;
-feature onum;
-feature case;
-feature zero;
-feature salt;
-feature ss01;
-
-} aalt;
-
-feature ccmp {
-# automatic
-lookup ccmp_Other_1 {
-       @CombiningTopAccents = [acutecomb brevecomb breveinvertedcomb caroncomb circumflexcomb 
commaturnedabovecomb dblgravecomb dieresiscomb dotaccentcomb gravecomb hookabovecomb hungarumlautcomb 
macroncomb ringcomb tildecomb verticallineabovecomb];
-       @CombiningNonTopAccents = [brevebelowcomb cedillacomb dieresisbelowcomb dotbelowcomb macronbelowcomb 
ogonekcomb verticallinebelowcomb horncomb slashlongcomb slashshortcomb strokelongcomb strokeshortcomb];
-       sub [i j]' @CombiningTopAccents by [idotless jdotless];
-       sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless];
-       @Markscomb = [dieresiscomb dotaccentcomb gravecomb acutecomb hungarumlautcomb circumflexcomb 
caroncomb brevecomb ringcomb ringcomb_acutecomb tildecomb macroncomb hookabovecomb dblgravecomb 
breveinvertedcomb strokeshortcomb slashshortcomb slashlongcomb macroncomb.narrow ogonekcomb.tall brevecomb-cy 
descender-cy brevecomb_acutecomb brevecomb_gravecomb brevecomb_hookabovecomb brevecomb_tildecomb 
circumflexcomb_acutecomb circumflexcomb_gravecomb circumflexcomb_hookabovecomb circumflexcomb_tildecomb];
-       @MarkscombCase = [dieresiscomb.case dotaccentcomb.case gravecomb.case acutecomb.case 
hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case ringcomb_acutecomb.case 
tildecomb.case macroncomb.case hookabovecomb.case dblgravecomb.case breveinvertedcomb.case 
strokeshortcomb.case slashshortcomb.case slashlongcomb.case macroncomb.narrow.case ogonekcomb.tall.case 
brevecomb-cy.case descender-cy.case brevecomb_acutecomb.case brevecomb_gravecomb.case 
brevecomb_hookabovecomb.case brevecomb_tildecomb.case circumflexcomb_acutecomb.case 
circumflexcomb_gravecomb.case circumflexcomb_hookabovecomb.case circumflexcomb_tildecomb.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;
-
-lookup ccmp_Other_3 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_3;
-
-lookup ccmp_Other_4 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_4;
-
-lookup ccmp_latn_1 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_1;
-
-lookup ccmp_latn_2 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_2;
-
-script latn;
-
-} ccmp;
-
-feature locl {
-# automatic
-script latn;
-language NLD;
-sub iacute j' by jacute;
-sub Iacute J' by Jacute;
-language CAT;
-sub l periodcentered' l by periodcentered.loclCAT;
-sub L periodcentered' L by periodcentered.loclCAT.case;
-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;
-language KAZ;
-sub i by idotaccent;
-language TAT;
-sub i by idotaccent;
-language TRK;
-sub i by idotaccent;
-language CRT;
-sub i by idotaccent;
-language AZE;
-sub i by idotaccent;
-
-} locl;
-
-feature subs {
-# automatic
-sub zero by zeroinferior;
-sub one by oneinferior;
-sub two by twoinferior;
-sub three by threeinferior;
-sub four by fourinferior;
-sub five by fiveinferior;
-sub six by sixinferior;
-sub seven by seveninferior;
-sub eight by eightinferior;
-sub nine by nineinferior;
-
-} subs;
-
-feature sinf {
-# automatic
-sub zero by zero.subs;
-sub one by one.subs;
-sub two by two.subs;
-sub three by three.subs;
-sub four by four.subs;
-sub five by five.subs;
-sub six by six.subs;
-sub seven by seven.subs;
-sub eight by eight.subs;
-sub nine by nine.subs;
-
-} sinf;
-
-feature sups {
-# automatic
-sub zero by zerosuperior;
-sub one by onesuperior;
-sub two by twosuperior;
-sub three by threesuperior;
-sub four by foursuperior;
-sub five by fivesuperior;
-sub six by sixsuperior;
-sub seven by sevensuperior;
-sub eight by eightsuperior;
-sub nine by ninesuperior;
-
-} sups;
-
-feature numr {
-# automatic
-sub zero by zero.numr;
-sub one by one.numr;
-sub two by two.numr;
-sub three by three.numr;
-sub four by four.numr;
-sub five by five.numr;
-sub six by six.numr;
-sub seven by seven.numr;
-sub eight by eight.numr;
-sub nine by nine.numr;
-
-} numr;
-
-feature dnom {
-# automatic
-sub zero by zero.dnom;
-sub one by one.dnom;
-sub two by two.dnom;
-sub three by three.dnom;
-sub four by four.dnom;
-sub five by five.dnom;
-sub six by six.dnom;
-sub seven by seven.dnom;
-sub eight by eight.dnom;
-sub nine by nine.dnom;
-
-} dnom;
-
-feature frac {
-# automatic
-lookup FRAC {
-       sub slash by fraction;
-} FRAC;
-lookup UP {
-       sub [zero one two three four five six seven eight nine] by [zero.numr one.numr two.numr three.numr 
four.numr five.numr six.numr seven.numr eight.numr nine.numr];
-} UP;
-lookup DOWN {
-       sub fraction [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr 
eight.numr nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom 
eight.dnom nine.dnom];
-       sub [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom] [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr 
nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom];
-} DOWN;
-
-} frac;
-
-feature ordn {
-# automatic
-sub [zero one two three four five six seven eight nine] [A a]' by ordfeminine;
-sub [zero one two three four five six seven eight nine] [O o]' by ordmasculine;
-sub N o period by numero;
-
-} ordn;
-
-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;
-sub bulletoperator.tf by bulletoperator;
-sub commercialMinusSign.tf by commercialMinusSign;
-sub divisionslash.tf by divisionslash;
-sub equivalence.tf by equivalence;
-sub notidentical.tf by notidentical;
-sub plus.tf by plus;
-sub minus.tf by minus;
-sub multiply.tf by multiply;
-sub divide.tf by divide;
-sub equal.tf by equal;
-sub notequal.tf by notequal;
-sub greater.tf by greater;
-sub less.tf by less;
-sub greaterequal.tf by greaterequal;
-sub lessequal.tf by lessequal;
-sub plusminus.tf by plusminus;
-sub approxequal.tf by approxequal;
-sub logicalnot.tf by logicalnot;
-sub zero.tosf by zero.osf;
-sub one.tosf by one.osf;
-sub two.tosf by two.osf;
-sub three.tosf by three.osf;
-sub four.tosf by four.osf;
-sub five.tosf by five.osf;
-sub six.tosf by six.osf;
-sub seven.tosf by seven.osf;
-sub eight.tosf by eight.osf;
-sub nine.tosf by nine.osf;
-
-} 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;
-sub bulletoperator by bulletoperator.tf;
-sub commercialMinusSign by commercialMinusSign.tf;
-sub divisionslash by divisionslash.tf;
-sub equivalence by equivalence.tf;
-sub notidentical by notidentical.tf;
-sub plus by plus.tf;
-sub minus by minus.tf;
-sub multiply by multiply.tf;
-sub divide by divide.tf;
-sub equal by equal.tf;
-sub notequal by notequal.tf;
-sub greater by greater.tf;
-sub less by less.tf;
-sub greaterequal by greaterequal.tf;
-sub lessequal by lessequal.tf;
-sub plusminus by plusminus.tf;
-sub approxequal by approxequal.tf;
-sub logicalnot by logicalnot.tf;
-sub zero.osf by zero.tosf;
-sub one.osf by one.tosf;
-sub two.osf by two.tosf;
-sub three.osf by three.tosf;
-sub four.osf by four.tosf;
-sub five.osf by five.tosf;
-sub six.osf by six.tosf;
-sub seven.osf by seven.tosf;
-sub eight.osf by eight.tosf;
-sub nine.osf by nine.tosf;
-
-} tnum;
-
-feature onum {
-# automatic
-sub zero.tf by zero.tosf;
-sub one.tf by one.tosf;
-sub two.tf by two.tosf;
-sub three.tf by three.tosf;
-sub four.tf by four.tosf;
-sub five.tf by five.tosf;
-sub six.tf by six.tosf;
-sub seven.tf by seven.tosf;
-sub eight.tf by eight.tosf;
-sub nine.tf by nine.tosf;
-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 periodcentered.loclCAT by periodcentered.loclCAT.case;
-sub dieresiscomb by dieresiscomb.case;
-sub dotaccentcomb by dotaccentcomb.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 ringcomb_acutecomb by ringcomb_acutecomb.case;
-sub tildecomb by tildecomb.case;
-sub macroncomb by macroncomb.case;
-sub hookabovecomb by hookabovecomb.case;
-sub dblgravecomb by dblgravecomb.case;
-sub breveinvertedcomb by breveinvertedcomb.case;
-sub strokeshortcomb by strokeshortcomb.case;
-sub slashshortcomb by slashshortcomb.case;
-sub slashlongcomb by slashlongcomb.case;
-sub macroncomb.narrow by macroncomb.narrow.case;
-sub ogonekcomb.tall by ogonekcomb.tall.case;
-sub brevecomb-cy by brevecomb-cy.case;
-sub descender-cy by descender-cy.case;
-sub brevecomb_acutecomb by brevecomb_acutecomb.case;
-sub brevecomb_gravecomb by brevecomb_gravecomb.case;
-sub brevecomb_hookabovecomb by brevecomb_hookabovecomb.case;
-sub brevecomb_tildecomb by brevecomb_tildecomb.case;
-sub circumflexcomb_acutecomb by circumflexcomb_acutecomb.case;
-sub circumflexcomb_gravecomb by circumflexcomb_gravecomb.case;
-sub circumflexcomb_hookabovecomb by circumflexcomb_hookabovecomb.case;
-sub circumflexcomb_tildecomb by circumflexcomb_tildecomb.case;
-sub zero.osf by zero.lf;
-sub one.osf by one.lf;
-sub two.osf by two.lf;
-sub three.osf by three.lf;
-sub four.osf by four.lf;
-sub five.osf by five.lf;
-sub six.osf by six.lf;
-sub seven.osf by seven.lf;
-sub eight.osf by eight.lf;
-sub nine.osf by nine.lf;
-sub zero.tf by zero.lf;
-sub one.tf by one.lf;
-sub two.tf by two.lf;
-sub three.tf by three.lf;
-sub four.tf by four.lf;
-sub five.tf by five.lf;
-sub six.tf by six.lf;
-sub seven.tf by seven.lf;
-sub eight.tf by eight.lf;
-sub nine.tf by nine.lf;
-sub zero.tosf by zero.lf;
-sub one.tosf by one.lf;
-sub two.tosf by two.lf;
-sub three.tosf by three.lf;
-sub four.tosf by four.lf;
-sub five.tosf by five.lf;
-sub six.tosf by six.lf;
-sub seven.tosf by seven.lf;
-sub eight.tosf by eight.lf;
-sub nine.tosf by nine.lf;
-
-} case;
-
-feature liga {
-# automatic
-sub f f i by f_f_i;
-sub f f l by f_f_l;
-sub f f by f_f;
-sub f i by fi;
-sub f l by fl;
-
-} liga;
-
-feature zero {
-# automatic
-sub zero.lf by zero.lf.zero;
-sub zero.osf by zero.osf.zero;
-sub zero.tf by zero.tf.zero;
-sub zero.tosf by zero.tosf.zero;
-sub zero by zero.zero;
-
-} zero;
-
-feature salt {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} salt;
-
-feature ss01 {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} ss01;
+include(family.fea)
diff --git a/src/Cantarell-Light.ufo/features.fea b/src/Cantarell-Light.ufo/features.fea
index 58b08f1b..5e62ed1b 100644
--- a/src/Cantarell-Light.ufo/features.fea
+++ b/src/Cantarell-Light.ufo/features.fea
@@ -1,495 +1 @@
-# automatic
-@Uppercase = [ A Aacute Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acaron 
Acircumflex Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde 
Adblgrave Adieresis Adotbelow Agrave Ahookabove Ainvertedbreve Amacron Aogonek Aring Aringacute Atilde AE 
AEacute B C Cacute Ccaron Ccedilla Ccedillaacute Ccircumflex Cdotaccent D DZcaron Eth Dcaron Dcroat Ddotbelow 
Dlinebelow Dzcaron E Eacute Ebreve Ecaron Ecedillabreve Ecircumflex Ecircumflexacute Ecircumflexdotbelow 
Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Edblgrave Edieresis Edotaccent Edotbelow Egrave 
Ehookabove Einvertedbreve Emacron Emacronacute Emacrongrave Eogonek Etilde F G Gbreve Gcaron Gcircumflex 
Gcommaaccent Gdotaccent Gmacron H Hbar Hbrevebelow Hcircumflex Hdotbelow I Iacute Ibreve Icaron Icircumflex 
Idblgrave Idieresis Idieresisacute Idotaccent Idotbelow Igrave Ihookabove Iinvertedbreve Imacron Iogonek 
Itilde J Jacute Jcircumflex K Kacute K
 commaacc
 ent L LJ Lacute Lcaron Lcommaaccent Ldot Ldotbelow Lj Llinebelow Lslash M Mdotbelow N NJ Nacute Ncaron 
Ncommaaccent Ndotaccent Ndotbelow Eng Nj Nlinebelow Ntilde O Oacute Obreve Ocaron Ocircumflex 
Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Odblgrave 
Odieresis Odieresismacron Odotaccentmacron Odotbelow Ograve Ohookabove Ohorn Ohornacute Ohorndotbelow 
Ohorngrave Ohornhookabove Ohorntilde Ohungarumlaut Oinvertedbreve Omacron Omacronacute Omacrongrave Oogonek 
Oslash Oslashacute Otilde Otildeacute Otildedieresis Otildemacron OE P Thorn Q R Racute Rcaron Rcommaaccent 
Rdblgrave Rdotbelow Rinvertedbreve Rlinebelow S Sacute Sacutedotaccent Saltillo Scaron Scarondotaccent 
Scedilla Scircumflex Scommaaccent Sdotaccent Sdotbelow Sdotbelowdotaccent Germandbls Schwa T Tbar Tcaron 
Tcedilla Tcommaaccent Tdotbelow Tlinebelow U Uacute Ubreve Ucaron Ucircumflex Udblgrave Udieresis 
Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotb
 elow Ugr
 ave Uhookabove Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhookabove Uhorntilde Uhungarumlaut 
Uinvertedbreve Umacron Umacrondieresis Uogonek Uring Utilde Utildeacute V W Wacute Wcircumflex Wdieresis 
Wgrave X Y Yacute Ycircumflex Ydieresis Ydotaccent Ydotbelow Ygrave Yhookabove Ymacron Ytilde Z Zacute Zcaron 
Zdotaccent Zdotbelow A-cy Be-cy Ve-cy Ge-cy Gje-cy Gheupturn-cy De-cy Ie-cy Iegrave-cy Io-cy Zhe-cy Ze-cy 
Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy El-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy Te-cy U-cy Ushort-cy Ef-cy 
Ha-cy Che-cy Tse-cy Sha-cy Shcha-cy Dzhe-cy Softsign-cy Hardsign-cy Yeru-cy Lje-cy Nje-cy Dze-cy E-cy 
Ereversed-cy I-cy Yi-cy Je-cy Tshe-cy Iu-cy Ia-cy Dje-cy Yat-cy Yusbig-cy Fita-cy Izhitsa-cy Ghestroke-cy 
Ghemiddlehook-cy Zhedescender-cy Zedescender-cy Kadescender-cy Kaverticalstroke-cy Kabashkir-cy 
Endescender-cy Enghe-cy Esdescender-cy Ustrait-cy Ustraitstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Chekhak
 assian-c
 y Abreve-cy Adieresis-cy Aie-cy Iebreve-cy Schwa-cy Zhedieresis-cy Zedieresis-cy Imacron-cy Idieresis-cy 
Odieresis-cy Obarred-cy Umacron-cy Udieresis-cy Uhungarumlaut-cy Chedieresis-cy Gedescender-cy 
Yerudieresis-cy Qa-cy We-cy ];
-
-# Prefix: Languagesystems
-# automatic
-languagesystem DFLT dflt;
-languagesystem latn dflt;
-languagesystem latn NLD;
-languagesystem latn CAT;
-languagesystem latn ROM;
-languagesystem latn MOL;
-languagesystem latn KAZ;
-languagesystem latn TAT;
-languagesystem latn TRK;
-languagesystem latn CRT;
-languagesystem latn AZE;
-
-
-feature aalt {
-# automatic
-feature ccmp;
-feature locl;
-feature subs;
-feature sinf;
-feature sups;
-feature numr;
-feature dnom;
-feature frac;
-feature ordn;
-feature lnum;
-feature pnum;
-feature tnum;
-feature onum;
-feature case;
-feature zero;
-feature salt;
-feature ss01;
-
-} aalt;
-
-feature ccmp {
-# automatic
-lookup ccmp_Other_1 {
-       @CombiningTopAccents = [acutecomb brevecomb breveinvertedcomb caroncomb circumflexcomb 
commaturnedabovecomb dblgravecomb dieresiscomb dotaccentcomb gravecomb hookabovecomb hungarumlautcomb 
macroncomb ringcomb tildecomb verticallineabovecomb];
-       @CombiningNonTopAccents = [brevebelowcomb cedillacomb dieresisbelowcomb dotbelowcomb macronbelowcomb 
ogonekcomb verticallinebelowcomb horncomb slashlongcomb slashshortcomb strokelongcomb strokeshortcomb];
-       sub [i j]' @CombiningTopAccents by [idotless jdotless];
-       sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless];
-       @Markscomb = [dieresiscomb dotaccentcomb gravecomb acutecomb hungarumlautcomb circumflexcomb 
caroncomb brevecomb ringcomb ringcomb_acutecomb tildecomb macroncomb hookabovecomb dblgravecomb 
breveinvertedcomb strokeshortcomb slashshortcomb slashlongcomb macroncomb.narrow ogonekcomb.tall brevecomb-cy 
descender-cy brevecomb_acutecomb brevecomb_gravecomb brevecomb_hookabovecomb brevecomb_tildecomb 
circumflexcomb_acutecomb circumflexcomb_gravecomb circumflexcomb_hookabovecomb circumflexcomb_tildecomb];
-       @MarkscombCase = [dieresiscomb.case dotaccentcomb.case gravecomb.case acutecomb.case 
hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case ringcomb_acutecomb.case 
tildecomb.case macroncomb.case hookabovecomb.case dblgravecomb.case breveinvertedcomb.case 
strokeshortcomb.case slashshortcomb.case slashlongcomb.case macroncomb.narrow.case ogonekcomb.tall.case 
brevecomb-cy.case descender-cy.case brevecomb_acutecomb.case brevecomb_gravecomb.case 
brevecomb_hookabovecomb.case brevecomb_tildecomb.case circumflexcomb_acutecomb.case 
circumflexcomb_gravecomb.case circumflexcomb_hookabovecomb.case circumflexcomb_tildecomb.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;
-
-lookup ccmp_Other_3 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_3;
-
-lookup ccmp_Other_4 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_4;
-
-lookup ccmp_latn_1 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_1;
-
-lookup ccmp_latn_2 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_2;
-
-script latn;
-
-} ccmp;
-
-feature locl {
-# automatic
-script latn;
-language NLD;
-sub iacute j' by jacute;
-sub Iacute J' by Jacute;
-language CAT;
-sub l periodcentered' l by periodcentered.loclCAT;
-sub L periodcentered' L by periodcentered.loclCAT.case;
-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;
-language KAZ;
-sub i by idotaccent;
-language TAT;
-sub i by idotaccent;
-language TRK;
-sub i by idotaccent;
-language CRT;
-sub i by idotaccent;
-language AZE;
-sub i by idotaccent;
-
-} locl;
-
-feature subs {
-# automatic
-sub zero by zeroinferior;
-sub one by oneinferior;
-sub two by twoinferior;
-sub three by threeinferior;
-sub four by fourinferior;
-sub five by fiveinferior;
-sub six by sixinferior;
-sub seven by seveninferior;
-sub eight by eightinferior;
-sub nine by nineinferior;
-
-} subs;
-
-feature sinf {
-# automatic
-sub zero by zero.subs;
-sub one by one.subs;
-sub two by two.subs;
-sub three by three.subs;
-sub four by four.subs;
-sub five by five.subs;
-sub six by six.subs;
-sub seven by seven.subs;
-sub eight by eight.subs;
-sub nine by nine.subs;
-
-} sinf;
-
-feature sups {
-# automatic
-sub zero by zerosuperior;
-sub one by onesuperior;
-sub two by twosuperior;
-sub three by threesuperior;
-sub four by foursuperior;
-sub five by fivesuperior;
-sub six by sixsuperior;
-sub seven by sevensuperior;
-sub eight by eightsuperior;
-sub nine by ninesuperior;
-
-} sups;
-
-feature numr {
-# automatic
-sub zero by zero.numr;
-sub one by one.numr;
-sub two by two.numr;
-sub three by three.numr;
-sub four by four.numr;
-sub five by five.numr;
-sub six by six.numr;
-sub seven by seven.numr;
-sub eight by eight.numr;
-sub nine by nine.numr;
-
-} numr;
-
-feature dnom {
-# automatic
-sub zero by zero.dnom;
-sub one by one.dnom;
-sub two by two.dnom;
-sub three by three.dnom;
-sub four by four.dnom;
-sub five by five.dnom;
-sub six by six.dnom;
-sub seven by seven.dnom;
-sub eight by eight.dnom;
-sub nine by nine.dnom;
-
-} dnom;
-
-feature frac {
-# automatic
-lookup FRAC {
-       sub slash by fraction;
-} FRAC;
-lookup UP {
-       sub [zero one two three four five six seven eight nine] by [zero.numr one.numr two.numr three.numr 
four.numr five.numr six.numr seven.numr eight.numr nine.numr];
-} UP;
-lookup DOWN {
-       sub fraction [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr 
eight.numr nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom 
eight.dnom nine.dnom];
-       sub [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom] [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr 
nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom];
-} DOWN;
-
-} frac;
-
-feature ordn {
-# automatic
-sub [zero one two three four five six seven eight nine] [A a]' by ordfeminine;
-sub [zero one two three four five six seven eight nine] [O o]' by ordmasculine;
-sub N o period by numero;
-
-} ordn;
-
-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;
-sub bulletoperator.tf by bulletoperator;
-sub commercialMinusSign.tf by commercialMinusSign;
-sub divisionslash.tf by divisionslash;
-sub equivalence.tf by equivalence;
-sub notidentical.tf by notidentical;
-sub plus.tf by plus;
-sub minus.tf by minus;
-sub multiply.tf by multiply;
-sub divide.tf by divide;
-sub equal.tf by equal;
-sub notequal.tf by notequal;
-sub greater.tf by greater;
-sub less.tf by less;
-sub greaterequal.tf by greaterequal;
-sub lessequal.tf by lessequal;
-sub plusminus.tf by plusminus;
-sub approxequal.tf by approxequal;
-sub logicalnot.tf by logicalnot;
-sub zero.tosf by zero.osf;
-sub one.tosf by one.osf;
-sub two.tosf by two.osf;
-sub three.tosf by three.osf;
-sub four.tosf by four.osf;
-sub five.tosf by five.osf;
-sub six.tosf by six.osf;
-sub seven.tosf by seven.osf;
-sub eight.tosf by eight.osf;
-sub nine.tosf by nine.osf;
-
-} 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;
-sub bulletoperator by bulletoperator.tf;
-sub commercialMinusSign by commercialMinusSign.tf;
-sub divisionslash by divisionslash.tf;
-sub equivalence by equivalence.tf;
-sub notidentical by notidentical.tf;
-sub plus by plus.tf;
-sub minus by minus.tf;
-sub multiply by multiply.tf;
-sub divide by divide.tf;
-sub equal by equal.tf;
-sub notequal by notequal.tf;
-sub greater by greater.tf;
-sub less by less.tf;
-sub greaterequal by greaterequal.tf;
-sub lessequal by lessequal.tf;
-sub plusminus by plusminus.tf;
-sub approxequal by approxequal.tf;
-sub logicalnot by logicalnot.tf;
-sub zero.osf by zero.tosf;
-sub one.osf by one.tosf;
-sub two.osf by two.tosf;
-sub three.osf by three.tosf;
-sub four.osf by four.tosf;
-sub five.osf by five.tosf;
-sub six.osf by six.tosf;
-sub seven.osf by seven.tosf;
-sub eight.osf by eight.tosf;
-sub nine.osf by nine.tosf;
-
-} tnum;
-
-feature onum {
-# automatic
-sub zero.tf by zero.tosf;
-sub one.tf by one.tosf;
-sub two.tf by two.tosf;
-sub three.tf by three.tosf;
-sub four.tf by four.tosf;
-sub five.tf by five.tosf;
-sub six.tf by six.tosf;
-sub seven.tf by seven.tosf;
-sub eight.tf by eight.tosf;
-sub nine.tf by nine.tosf;
-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 periodcentered.loclCAT by periodcentered.loclCAT.case;
-sub dieresiscomb by dieresiscomb.case;
-sub dotaccentcomb by dotaccentcomb.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 ringcomb_acutecomb by ringcomb_acutecomb.case;
-sub tildecomb by tildecomb.case;
-sub macroncomb by macroncomb.case;
-sub hookabovecomb by hookabovecomb.case;
-sub dblgravecomb by dblgravecomb.case;
-sub breveinvertedcomb by breveinvertedcomb.case;
-sub strokeshortcomb by strokeshortcomb.case;
-sub slashshortcomb by slashshortcomb.case;
-sub slashlongcomb by slashlongcomb.case;
-sub macroncomb.narrow by macroncomb.narrow.case;
-sub ogonekcomb.tall by ogonekcomb.tall.case;
-sub brevecomb-cy by brevecomb-cy.case;
-sub descender-cy by descender-cy.case;
-sub brevecomb_acutecomb by brevecomb_acutecomb.case;
-sub brevecomb_gravecomb by brevecomb_gravecomb.case;
-sub brevecomb_hookabovecomb by brevecomb_hookabovecomb.case;
-sub brevecomb_tildecomb by brevecomb_tildecomb.case;
-sub circumflexcomb_acutecomb by circumflexcomb_acutecomb.case;
-sub circumflexcomb_gravecomb by circumflexcomb_gravecomb.case;
-sub circumflexcomb_hookabovecomb by circumflexcomb_hookabovecomb.case;
-sub circumflexcomb_tildecomb by circumflexcomb_tildecomb.case;
-sub zero.osf by zero.lf;
-sub one.osf by one.lf;
-sub two.osf by two.lf;
-sub three.osf by three.lf;
-sub four.osf by four.lf;
-sub five.osf by five.lf;
-sub six.osf by six.lf;
-sub seven.osf by seven.lf;
-sub eight.osf by eight.lf;
-sub nine.osf by nine.lf;
-sub zero.tf by zero.lf;
-sub one.tf by one.lf;
-sub two.tf by two.lf;
-sub three.tf by three.lf;
-sub four.tf by four.lf;
-sub five.tf by five.lf;
-sub six.tf by six.lf;
-sub seven.tf by seven.lf;
-sub eight.tf by eight.lf;
-sub nine.tf by nine.lf;
-sub zero.tosf by zero.lf;
-sub one.tosf by one.lf;
-sub two.tosf by two.lf;
-sub three.tosf by three.lf;
-sub four.tosf by four.lf;
-sub five.tosf by five.lf;
-sub six.tosf by six.lf;
-sub seven.tosf by seven.lf;
-sub eight.tosf by eight.lf;
-sub nine.tosf by nine.lf;
-
-} case;
-
-feature liga {
-# automatic
-sub f f i by f_f_i;
-sub f f l by f_f_l;
-sub f f by f_f;
-sub f i by fi;
-sub f l by fl;
-
-} liga;
-
-feature zero {
-# automatic
-sub zero.lf by zero.lf.zero;
-sub zero.osf by zero.osf.zero;
-sub zero.tf by zero.tf.zero;
-sub zero.tosf by zero.tosf.zero;
-sub zero by zero.zero;
-
-} zero;
-
-feature salt {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} salt;
-
-feature ss01 {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} ss01;
+include(family.fea)
diff --git a/src/Cantarell-Regular.ufo/features.fea b/src/Cantarell-Regular.ufo/features.fea
index 58b08f1b..5e62ed1b 100644
--- a/src/Cantarell-Regular.ufo/features.fea
+++ b/src/Cantarell-Regular.ufo/features.fea
@@ -1,495 +1 @@
-# automatic
-@Uppercase = [ A Aacute Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acaron 
Acircumflex Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde 
Adblgrave Adieresis Adotbelow Agrave Ahookabove Ainvertedbreve Amacron Aogonek Aring Aringacute Atilde AE 
AEacute B C Cacute Ccaron Ccedilla Ccedillaacute Ccircumflex Cdotaccent D DZcaron Eth Dcaron Dcroat Ddotbelow 
Dlinebelow Dzcaron E Eacute Ebreve Ecaron Ecedillabreve Ecircumflex Ecircumflexacute Ecircumflexdotbelow 
Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Edblgrave Edieresis Edotaccent Edotbelow Egrave 
Ehookabove Einvertedbreve Emacron Emacronacute Emacrongrave Eogonek Etilde F G Gbreve Gcaron Gcircumflex 
Gcommaaccent Gdotaccent Gmacron H Hbar Hbrevebelow Hcircumflex Hdotbelow I Iacute Ibreve Icaron Icircumflex 
Idblgrave Idieresis Idieresisacute Idotaccent Idotbelow Igrave Ihookabove Iinvertedbreve Imacron Iogonek 
Itilde J Jacute Jcircumflex K Kacute K
 commaacc
 ent L LJ Lacute Lcaron Lcommaaccent Ldot Ldotbelow Lj Llinebelow Lslash M Mdotbelow N NJ Nacute Ncaron 
Ncommaaccent Ndotaccent Ndotbelow Eng Nj Nlinebelow Ntilde O Oacute Obreve Ocaron Ocircumflex 
Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Odblgrave 
Odieresis Odieresismacron Odotaccentmacron Odotbelow Ograve Ohookabove Ohorn Ohornacute Ohorndotbelow 
Ohorngrave Ohornhookabove Ohorntilde Ohungarumlaut Oinvertedbreve Omacron Omacronacute Omacrongrave Oogonek 
Oslash Oslashacute Otilde Otildeacute Otildedieresis Otildemacron OE P Thorn Q R Racute Rcaron Rcommaaccent 
Rdblgrave Rdotbelow Rinvertedbreve Rlinebelow S Sacute Sacutedotaccent Saltillo Scaron Scarondotaccent 
Scedilla Scircumflex Scommaaccent Sdotaccent Sdotbelow Sdotbelowdotaccent Germandbls Schwa T Tbar Tcaron 
Tcedilla Tcommaaccent Tdotbelow Tlinebelow U Uacute Ubreve Ucaron Ucircumflex Udblgrave Udieresis 
Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotb
 elow Ugr
 ave Uhookabove Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhookabove Uhorntilde Uhungarumlaut 
Uinvertedbreve Umacron Umacrondieresis Uogonek Uring Utilde Utildeacute V W Wacute Wcircumflex Wdieresis 
Wgrave X Y Yacute Ycircumflex Ydieresis Ydotaccent Ydotbelow Ygrave Yhookabove Ymacron Ytilde Z Zacute Zcaron 
Zdotaccent Zdotbelow A-cy Be-cy Ve-cy Ge-cy Gje-cy Gheupturn-cy De-cy Ie-cy Iegrave-cy Io-cy Zhe-cy Ze-cy 
Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy El-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy Te-cy U-cy Ushort-cy Ef-cy 
Ha-cy Che-cy Tse-cy Sha-cy Shcha-cy Dzhe-cy Softsign-cy Hardsign-cy Yeru-cy Lje-cy Nje-cy Dze-cy E-cy 
Ereversed-cy I-cy Yi-cy Je-cy Tshe-cy Iu-cy Ia-cy Dje-cy Yat-cy Yusbig-cy Fita-cy Izhitsa-cy Ghestroke-cy 
Ghemiddlehook-cy Zhedescender-cy Zedescender-cy Kadescender-cy Kaverticalstroke-cy Kabashkir-cy 
Endescender-cy Enghe-cy Esdescender-cy Ustrait-cy Ustraitstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Chekhak
 assian-c
 y Abreve-cy Adieresis-cy Aie-cy Iebreve-cy Schwa-cy Zhedieresis-cy Zedieresis-cy Imacron-cy Idieresis-cy 
Odieresis-cy Obarred-cy Umacron-cy Udieresis-cy Uhungarumlaut-cy Chedieresis-cy Gedescender-cy 
Yerudieresis-cy Qa-cy We-cy ];
-
-# Prefix: Languagesystems
-# automatic
-languagesystem DFLT dflt;
-languagesystem latn dflt;
-languagesystem latn NLD;
-languagesystem latn CAT;
-languagesystem latn ROM;
-languagesystem latn MOL;
-languagesystem latn KAZ;
-languagesystem latn TAT;
-languagesystem latn TRK;
-languagesystem latn CRT;
-languagesystem latn AZE;
-
-
-feature aalt {
-# automatic
-feature ccmp;
-feature locl;
-feature subs;
-feature sinf;
-feature sups;
-feature numr;
-feature dnom;
-feature frac;
-feature ordn;
-feature lnum;
-feature pnum;
-feature tnum;
-feature onum;
-feature case;
-feature zero;
-feature salt;
-feature ss01;
-
-} aalt;
-
-feature ccmp {
-# automatic
-lookup ccmp_Other_1 {
-       @CombiningTopAccents = [acutecomb brevecomb breveinvertedcomb caroncomb circumflexcomb 
commaturnedabovecomb dblgravecomb dieresiscomb dotaccentcomb gravecomb hookabovecomb hungarumlautcomb 
macroncomb ringcomb tildecomb verticallineabovecomb];
-       @CombiningNonTopAccents = [brevebelowcomb cedillacomb dieresisbelowcomb dotbelowcomb macronbelowcomb 
ogonekcomb verticallinebelowcomb horncomb slashlongcomb slashshortcomb strokelongcomb strokeshortcomb];
-       sub [i j]' @CombiningTopAccents by [idotless jdotless];
-       sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless];
-       @Markscomb = [dieresiscomb dotaccentcomb gravecomb acutecomb hungarumlautcomb circumflexcomb 
caroncomb brevecomb ringcomb ringcomb_acutecomb tildecomb macroncomb hookabovecomb dblgravecomb 
breveinvertedcomb strokeshortcomb slashshortcomb slashlongcomb macroncomb.narrow ogonekcomb.tall brevecomb-cy 
descender-cy brevecomb_acutecomb brevecomb_gravecomb brevecomb_hookabovecomb brevecomb_tildecomb 
circumflexcomb_acutecomb circumflexcomb_gravecomb circumflexcomb_hookabovecomb circumflexcomb_tildecomb];
-       @MarkscombCase = [dieresiscomb.case dotaccentcomb.case gravecomb.case acutecomb.case 
hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case ringcomb_acutecomb.case 
tildecomb.case macroncomb.case hookabovecomb.case dblgravecomb.case breveinvertedcomb.case 
strokeshortcomb.case slashshortcomb.case slashlongcomb.case macroncomb.narrow.case ogonekcomb.tall.case 
brevecomb-cy.case descender-cy.case brevecomb_acutecomb.case brevecomb_gravecomb.case 
brevecomb_hookabovecomb.case brevecomb_tildecomb.case circumflexcomb_acutecomb.case 
circumflexcomb_gravecomb.case circumflexcomb_hookabovecomb.case circumflexcomb_tildecomb.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;
-
-lookup ccmp_Other_3 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_3;
-
-lookup ccmp_Other_4 {
-       lookupflag 0;
-       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
-       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
-       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
-       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
-       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
-       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
-       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
-       sub macroncomb acutecomb by macroncomb_acutecomb;
-       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
-       sub macroncomb gravecomb by macroncomb_gravecomb;
-       sub ringcomb acutecomb by ringcomb_acutecomb;
-       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
-       sub tildecomb acutecomb by tildecomb_acutecomb;
-       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
-       sub tildecomb macroncomb by tildecomb_macroncomb;
-} ccmp_Other_4;
-
-lookup ccmp_latn_1 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_1;
-
-lookup ccmp_latn_2 {
-       lookupflag 0;
-       sub brevecomb acutecomb by brevecomb_acutecomb;
-       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
-       sub brevecomb gravecomb by brevecomb_gravecomb;
-       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
-       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
-       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
-       sub brevecomb tildecomb by brevecomb_tildecomb;
-       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
-       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
-       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
-       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
-       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
-       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
-       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
-       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
-       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
-} ccmp_latn_2;
-
-script latn;
-
-} ccmp;
-
-feature locl {
-# automatic
-script latn;
-language NLD;
-sub iacute j' by jacute;
-sub Iacute J' by Jacute;
-language CAT;
-sub l periodcentered' l by periodcentered.loclCAT;
-sub L periodcentered' L by periodcentered.loclCAT.case;
-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;
-language KAZ;
-sub i by idotaccent;
-language TAT;
-sub i by idotaccent;
-language TRK;
-sub i by idotaccent;
-language CRT;
-sub i by idotaccent;
-language AZE;
-sub i by idotaccent;
-
-} locl;
-
-feature subs {
-# automatic
-sub zero by zeroinferior;
-sub one by oneinferior;
-sub two by twoinferior;
-sub three by threeinferior;
-sub four by fourinferior;
-sub five by fiveinferior;
-sub six by sixinferior;
-sub seven by seveninferior;
-sub eight by eightinferior;
-sub nine by nineinferior;
-
-} subs;
-
-feature sinf {
-# automatic
-sub zero by zero.subs;
-sub one by one.subs;
-sub two by two.subs;
-sub three by three.subs;
-sub four by four.subs;
-sub five by five.subs;
-sub six by six.subs;
-sub seven by seven.subs;
-sub eight by eight.subs;
-sub nine by nine.subs;
-
-} sinf;
-
-feature sups {
-# automatic
-sub zero by zerosuperior;
-sub one by onesuperior;
-sub two by twosuperior;
-sub three by threesuperior;
-sub four by foursuperior;
-sub five by fivesuperior;
-sub six by sixsuperior;
-sub seven by sevensuperior;
-sub eight by eightsuperior;
-sub nine by ninesuperior;
-
-} sups;
-
-feature numr {
-# automatic
-sub zero by zero.numr;
-sub one by one.numr;
-sub two by two.numr;
-sub three by three.numr;
-sub four by four.numr;
-sub five by five.numr;
-sub six by six.numr;
-sub seven by seven.numr;
-sub eight by eight.numr;
-sub nine by nine.numr;
-
-} numr;
-
-feature dnom {
-# automatic
-sub zero by zero.dnom;
-sub one by one.dnom;
-sub two by two.dnom;
-sub three by three.dnom;
-sub four by four.dnom;
-sub five by five.dnom;
-sub six by six.dnom;
-sub seven by seven.dnom;
-sub eight by eight.dnom;
-sub nine by nine.dnom;
-
-} dnom;
-
-feature frac {
-# automatic
-lookup FRAC {
-       sub slash by fraction;
-} FRAC;
-lookup UP {
-       sub [zero one two three four five six seven eight nine] by [zero.numr one.numr two.numr three.numr 
four.numr five.numr six.numr seven.numr eight.numr nine.numr];
-} UP;
-lookup DOWN {
-       sub fraction [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr 
eight.numr nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom 
eight.dnom nine.dnom];
-       sub [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom] [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr 
nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom];
-} DOWN;
-
-} frac;
-
-feature ordn {
-# automatic
-sub [zero one two three four five six seven eight nine] [A a]' by ordfeminine;
-sub [zero one two three four five six seven eight nine] [O o]' by ordmasculine;
-sub N o period by numero;
-
-} ordn;
-
-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;
-sub bulletoperator.tf by bulletoperator;
-sub commercialMinusSign.tf by commercialMinusSign;
-sub divisionslash.tf by divisionslash;
-sub equivalence.tf by equivalence;
-sub notidentical.tf by notidentical;
-sub plus.tf by plus;
-sub minus.tf by minus;
-sub multiply.tf by multiply;
-sub divide.tf by divide;
-sub equal.tf by equal;
-sub notequal.tf by notequal;
-sub greater.tf by greater;
-sub less.tf by less;
-sub greaterequal.tf by greaterequal;
-sub lessequal.tf by lessequal;
-sub plusminus.tf by plusminus;
-sub approxequal.tf by approxequal;
-sub logicalnot.tf by logicalnot;
-sub zero.tosf by zero.osf;
-sub one.tosf by one.osf;
-sub two.tosf by two.osf;
-sub three.tosf by three.osf;
-sub four.tosf by four.osf;
-sub five.tosf by five.osf;
-sub six.tosf by six.osf;
-sub seven.tosf by seven.osf;
-sub eight.tosf by eight.osf;
-sub nine.tosf by nine.osf;
-
-} 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;
-sub bulletoperator by bulletoperator.tf;
-sub commercialMinusSign by commercialMinusSign.tf;
-sub divisionslash by divisionslash.tf;
-sub equivalence by equivalence.tf;
-sub notidentical by notidentical.tf;
-sub plus by plus.tf;
-sub minus by minus.tf;
-sub multiply by multiply.tf;
-sub divide by divide.tf;
-sub equal by equal.tf;
-sub notequal by notequal.tf;
-sub greater by greater.tf;
-sub less by less.tf;
-sub greaterequal by greaterequal.tf;
-sub lessequal by lessequal.tf;
-sub plusminus by plusminus.tf;
-sub approxequal by approxequal.tf;
-sub logicalnot by logicalnot.tf;
-sub zero.osf by zero.tosf;
-sub one.osf by one.tosf;
-sub two.osf by two.tosf;
-sub three.osf by three.tosf;
-sub four.osf by four.tosf;
-sub five.osf by five.tosf;
-sub six.osf by six.tosf;
-sub seven.osf by seven.tosf;
-sub eight.osf by eight.tosf;
-sub nine.osf by nine.tosf;
-
-} tnum;
-
-feature onum {
-# automatic
-sub zero.tf by zero.tosf;
-sub one.tf by one.tosf;
-sub two.tf by two.tosf;
-sub three.tf by three.tosf;
-sub four.tf by four.tosf;
-sub five.tf by five.tosf;
-sub six.tf by six.tosf;
-sub seven.tf by seven.tosf;
-sub eight.tf by eight.tosf;
-sub nine.tf by nine.tosf;
-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 periodcentered.loclCAT by periodcentered.loclCAT.case;
-sub dieresiscomb by dieresiscomb.case;
-sub dotaccentcomb by dotaccentcomb.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 ringcomb_acutecomb by ringcomb_acutecomb.case;
-sub tildecomb by tildecomb.case;
-sub macroncomb by macroncomb.case;
-sub hookabovecomb by hookabovecomb.case;
-sub dblgravecomb by dblgravecomb.case;
-sub breveinvertedcomb by breveinvertedcomb.case;
-sub strokeshortcomb by strokeshortcomb.case;
-sub slashshortcomb by slashshortcomb.case;
-sub slashlongcomb by slashlongcomb.case;
-sub macroncomb.narrow by macroncomb.narrow.case;
-sub ogonekcomb.tall by ogonekcomb.tall.case;
-sub brevecomb-cy by brevecomb-cy.case;
-sub descender-cy by descender-cy.case;
-sub brevecomb_acutecomb by brevecomb_acutecomb.case;
-sub brevecomb_gravecomb by brevecomb_gravecomb.case;
-sub brevecomb_hookabovecomb by brevecomb_hookabovecomb.case;
-sub brevecomb_tildecomb by brevecomb_tildecomb.case;
-sub circumflexcomb_acutecomb by circumflexcomb_acutecomb.case;
-sub circumflexcomb_gravecomb by circumflexcomb_gravecomb.case;
-sub circumflexcomb_hookabovecomb by circumflexcomb_hookabovecomb.case;
-sub circumflexcomb_tildecomb by circumflexcomb_tildecomb.case;
-sub zero.osf by zero.lf;
-sub one.osf by one.lf;
-sub two.osf by two.lf;
-sub three.osf by three.lf;
-sub four.osf by four.lf;
-sub five.osf by five.lf;
-sub six.osf by six.lf;
-sub seven.osf by seven.lf;
-sub eight.osf by eight.lf;
-sub nine.osf by nine.lf;
-sub zero.tf by zero.lf;
-sub one.tf by one.lf;
-sub two.tf by two.lf;
-sub three.tf by three.lf;
-sub four.tf by four.lf;
-sub five.tf by five.lf;
-sub six.tf by six.lf;
-sub seven.tf by seven.lf;
-sub eight.tf by eight.lf;
-sub nine.tf by nine.lf;
-sub zero.tosf by zero.lf;
-sub one.tosf by one.lf;
-sub two.tosf by two.lf;
-sub three.tosf by three.lf;
-sub four.tosf by four.lf;
-sub five.tosf by five.lf;
-sub six.tosf by six.lf;
-sub seven.tosf by seven.lf;
-sub eight.tosf by eight.lf;
-sub nine.tosf by nine.lf;
-
-} case;
-
-feature liga {
-# automatic
-sub f f i by f_f_i;
-sub f f l by f_f_l;
-sub f f by f_f;
-sub f i by fi;
-sub f l by fl;
-
-} liga;
-
-feature zero {
-# automatic
-sub zero.lf by zero.lf.zero;
-sub zero.osf by zero.osf.zero;
-sub zero.tf by zero.tf.zero;
-sub zero.tosf by zero.tosf.zero;
-sub zero by zero.zero;
-
-} zero;
-
-feature salt {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} salt;
-
-feature ss01 {
-# automatic
-sub six by six.ss01;
-sub nine by nine.ss01;
-
-} ss01;
+include(family.fea)
diff --git a/src/family.fea b/src/family.fea
new file mode 100644
index 00000000..ebd3d3b5
--- /dev/null
+++ b/src/family.fea
@@ -0,0 +1,504 @@
+# automatic
+@Uppercase = [ A Aacute Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acaron 
Acircumflex Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde 
Adblgrave Adieresis Adotbelow Agrave Ahookabove Ainvertedbreve Amacron Aogonek Aring Aringacute Atilde AE 
AEacute B C Cacute Ccaron Ccedilla Ccedillaacute Ccircumflex Cdotaccent D DZcaron Eth Dcaron Dcroat Ddotbelow 
Dlinebelow Dzcaron E Eacute Ebreve Ecaron Ecedillabreve Ecircumflex Ecircumflexacute Ecircumflexdotbelow 
Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Edblgrave Edieresis Edotaccent Edotbelow Egrave 
Ehookabove Einvertedbreve Emacron Emacronacute Emacrongrave Eogonek Etilde F G Gbreve Gcaron Gcircumflex 
Gcommaaccent Gdotaccent Gmacron H Hbar Hbrevebelow Hcircumflex Hdotbelow I Iacute Ibreve Icaron Icircumflex 
Idblgrave Idieresis Idieresisacute Idotaccent Idotbelow Igrave Ihookabove Iinvertedbreve Imacron Iogonek 
Itilde J Jacute Jcircumflex K Kacute K
 commaacc
 ent L LJ Lacute Lcaron Lcommaaccent Ldot Ldotbelow Lj Llinebelow Lslash M Mdotbelow N NJ Nacute Ncaron 
Ncommaaccent Ndotaccent Ndotbelow Eng Nj Nlinebelow Ntilde O Oacute Obreve Ocaron Ocircumflex 
Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Odblgrave 
Odieresis Odieresismacron Odotaccentmacron Odotbelow Ograve Ohookabove Ohorn Ohornacute Ohorndotbelow 
Ohorngrave Ohornhookabove Ohorntilde Ohungarumlaut Oinvertedbreve Omacron Omacronacute Omacrongrave Oogonek 
Oslash Oslashacute Otilde Otildeacute Otildedieresis Otildemacron OE P Thorn Q R Racute Rcaron Rcommaaccent 
Rdblgrave Rdotbelow Rinvertedbreve Rlinebelow S Sacute Sacutedotaccent Saltillo Scaron Scarondotaccent 
Scedilla Scircumflex Scommaaccent Sdotaccent Sdotbelow Sdotbelowdotaccent Germandbls Schwa T Tbar Tcaron 
Tcedilla Tcommaaccent Tdotbelow Tlinebelow U Uacute Ubreve Ucaron Ucircumflex Udblgrave Udieresis 
Udieresisacute Udieresiscaron Udieresisgrave Udieresismacron Udotb
 elow Ugr
 ave Uhookabove Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhookabove Uhorntilde Uhungarumlaut 
Uinvertedbreve Umacron Umacrondieresis Uogonek Uring Utilde Utildeacute V W Wacute Wcircumflex Wdieresis 
Wgrave X Y Yacute Ycircumflex Ydieresis Ydotaccent Ydotbelow Ygrave Yhookabove Ymacron Ytilde Z Zacute Zcaron 
Zdotaccent Zdotbelow A-cy Be-cy Ve-cy Ge-cy Gje-cy Gheupturn-cy De-cy Ie-cy Iegrave-cy Io-cy Zhe-cy Ze-cy 
Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy El-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy Te-cy U-cy Ushort-cy Ef-cy 
Ha-cy Che-cy Tse-cy Sha-cy Shcha-cy Dzhe-cy Softsign-cy Hardsign-cy Yeru-cy Lje-cy Nje-cy Dze-cy E-cy 
Ereversed-cy I-cy Yi-cy Je-cy Tshe-cy Iu-cy Ia-cy Dje-cy Yat-cy Yusbig-cy Fita-cy Izhitsa-cy Ghestroke-cy 
Ghemiddlehook-cy Zhedescender-cy Zedescender-cy Kadescender-cy Kaverticalstroke-cy Kabashkir-cy 
Endescender-cy Enghe-cy Esdescender-cy Ustrait-cy Ustraitstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Chekhak
 assian-c
 y Abreve-cy Adieresis-cy Aie-cy Iebreve-cy Schwa-cy Zhedieresis-cy Zedieresis-cy Imacron-cy Idieresis-cy 
Odieresis-cy Obarred-cy Umacron-cy Udieresis-cy Uhungarumlaut-cy Chedieresis-cy Gedescender-cy 
Yerudieresis-cy Qa-cy We-cy ];
+
+# Prefix: Languagesystems
+# automatic
+languagesystem DFLT dflt;
+languagesystem latn dflt;
+languagesystem latn NLD;
+languagesystem latn CAT;
+languagesystem latn ROM;
+languagesystem latn MOL;
+languagesystem latn KAZ;
+languagesystem latn TAT;
+languagesystem latn TRK;
+languagesystem latn CRT;
+languagesystem latn AZE;
+
+
+feature aalt {
+# automatic
+feature ccmp;
+feature locl;
+feature subs;
+feature sinf;
+feature sups;
+feature numr;
+feature dnom;
+feature frac;
+feature ordn;
+feature lnum;
+feature pnum;
+feature tnum;
+feature onum;
+feature case;
+feature zero;
+feature salt;
+feature ss01;
+
+} aalt;
+
+feature ccmp {
+# automatic
+lookup ccmp_Other_1 {
+       @CombiningTopAccents = [acutecomb brevecomb breveinvertedcomb caroncomb circumflexcomb 
commaturnedabovecomb dblgravecomb dieresiscomb dotaccentcomb gravecomb hookabovecomb hungarumlautcomb 
macroncomb ringcomb tildecomb verticallineabovecomb];
+       @CombiningNonTopAccents = [brevebelowcomb cedillacomb dieresisbelowcomb dotbelowcomb macronbelowcomb 
ogonekcomb verticallinebelowcomb horncomb slashlongcomb slashshortcomb strokelongcomb strokeshortcomb];
+       sub [i j]' @CombiningTopAccents by [idotless jdotless];
+       sub [i j]' @CombiningNonTopAccents @CombiningTopAccents by [idotless jdotless];
+       @Markscomb = [dieresiscomb dotaccentcomb gravecomb acutecomb hungarumlautcomb circumflexcomb 
caroncomb brevecomb ringcomb ringcomb_acutecomb tildecomb macroncomb hookabovecomb dblgravecomb 
breveinvertedcomb strokeshortcomb slashshortcomb slashlongcomb macroncomb.narrow ogonekcomb.tall brevecomb-cy 
descender-cy brevecomb_acutecomb brevecomb_gravecomb brevecomb_hookabovecomb brevecomb_tildecomb 
circumflexcomb_acutecomb circumflexcomb_gravecomb circumflexcomb_hookabovecomb circumflexcomb_tildecomb];
+       @MarkscombCase = [dieresiscomb.case dotaccentcomb.case gravecomb.case acutecomb.case 
hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case ringcomb_acutecomb.case 
tildecomb.case macroncomb.case hookabovecomb.case dblgravecomb.case breveinvertedcomb.case 
strokeshortcomb.case slashshortcomb.case slashlongcomb.case macroncomb.narrow.case ogonekcomb.tall.case 
brevecomb-cy.case descender-cy.case brevecomb_acutecomb.case brevecomb_gravecomb.case 
brevecomb_hookabovecomb.case brevecomb_tildecomb.case circumflexcomb_acutecomb.case 
circumflexcomb_gravecomb.case circumflexcomb_hookabovecomb.case circumflexcomb_tildecomb.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;
+
+lookup ccmp_Other_3 {
+       lookupflag 0;
+       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
+       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
+       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
+       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
+       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
+       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
+       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
+       sub macroncomb acutecomb by macroncomb_acutecomb;
+       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
+       sub macroncomb gravecomb by macroncomb_gravecomb;
+       sub ringcomb acutecomb by ringcomb_acutecomb;
+       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
+       sub tildecomb acutecomb by tildecomb_acutecomb;
+       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
+       sub tildecomb macroncomb by tildecomb_macroncomb;
+} ccmp_Other_3;
+
+lookup ccmp_Other_4 {
+       lookupflag 0;
+       sub acutecomb dotaccentcomb by acutecomb_dotaccentcomb;
+       sub caroncomb dotaccentcomb by caroncomb_dotaccentcomb;
+       sub dieresiscomb acutecomb by dieresiscomb_acutecomb;
+       sub dieresiscomb caroncomb by dieresiscomb_caroncomb;
+       sub dieresiscomb gravecomb by dieresiscomb_gravecomb;
+       sub dieresiscomb macroncomb by dieresiscomb_macroncomb;
+       sub dotaccentcomb macroncomb by dotaccentcomb_macroncomb;
+       sub macroncomb acutecomb by macroncomb_acutecomb;
+       sub macroncomb dieresiscomb by macroncomb_dieresiscomb;
+       sub macroncomb gravecomb by macroncomb_gravecomb;
+       sub ringcomb acutecomb by ringcomb_acutecomb;
+       sub ringcomb.case acutecomb.case by ringcomb_acutecomb.case;
+       sub tildecomb acutecomb by tildecomb_acutecomb;
+       sub tildecomb dieresiscomb by tildecomb_dieresiscomb;
+       sub tildecomb macroncomb by tildecomb_macroncomb;
+} ccmp_Other_4;
+
+lookup ccmp_latn_1 {
+       lookupflag 0;
+       sub brevecomb acutecomb by brevecomb_acutecomb;
+       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
+       sub brevecomb gravecomb by brevecomb_gravecomb;
+       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
+       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
+       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
+       sub brevecomb tildecomb by brevecomb_tildecomb;
+       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
+       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
+       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
+       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
+       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
+       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
+       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
+       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
+       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
+} ccmp_latn_1;
+
+lookup ccmp_latn_2 {
+       lookupflag 0;
+       sub brevecomb acutecomb by brevecomb_acutecomb;
+       sub brevecomb.case acutecomb.case by brevecomb_acutecomb.case;
+       sub brevecomb gravecomb by brevecomb_gravecomb;
+       sub brevecomb.case gravecomb.case by brevecomb_gravecomb.case;
+       sub brevecomb hookabovecomb by brevecomb_hookabovecomb;
+       sub brevecomb.case hookabovecomb.case by brevecomb_hookabovecomb.case;
+       sub brevecomb tildecomb by brevecomb_tildecomb;
+       sub brevecomb.case tildecomb.case by brevecomb_tildecomb.case;
+       sub circumflexcomb acutecomb by circumflexcomb_acutecomb;
+       sub circumflexcomb.case acutecomb.case by circumflexcomb_acutecomb.case;
+       sub circumflexcomb gravecomb by circumflexcomb_gravecomb;
+       sub circumflexcomb.case gravecomb.case by circumflexcomb_gravecomb.case;
+       sub circumflexcomb hookabovecomb by circumflexcomb_hookabovecomb;
+       sub circumflexcomb.case hookabovecomb.case by circumflexcomb_hookabovecomb.case;
+       sub circumflexcomb tildecomb by circumflexcomb_tildecomb;
+       sub circumflexcomb.case tildecomb.case by circumflexcomb_tildecomb.case;
+} ccmp_latn_2;
+
+script latn;
+
+} ccmp;
+
+feature locl {
+# automatic
+script latn;
+language NLD;
+sub iacute j' by jacute;
+sub Iacute J' by Jacute;
+language CAT;
+sub l periodcentered' l by periodcentered.loclCAT;
+sub L periodcentered' L by periodcentered.loclCAT.case;
+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;
+language KAZ;
+sub i by idotaccent;
+language TAT;
+sub i by idotaccent;
+language TRK;
+sub i by idotaccent;
+language CRT;
+sub i by idotaccent;
+language AZE;
+sub i by idotaccent;
+
+} locl;
+
+feature subs {
+# automatic
+sub zero by zeroinferior;
+sub one by oneinferior;
+sub two by twoinferior;
+sub three by threeinferior;
+sub four by fourinferior;
+sub five by fiveinferior;
+sub six by sixinferior;
+sub seven by seveninferior;
+sub eight by eightinferior;
+sub nine by nineinferior;
+
+} subs;
+
+feature sinf {
+# automatic
+sub zero by zero.subs;
+sub one by one.subs;
+sub two by two.subs;
+sub three by three.subs;
+sub four by four.subs;
+sub five by five.subs;
+sub six by six.subs;
+sub seven by seven.subs;
+sub eight by eight.subs;
+sub nine by nine.subs;
+
+} sinf;
+
+feature sups {
+# automatic
+sub zero by zerosuperior;
+sub one by onesuperior;
+sub two by twosuperior;
+sub three by threesuperior;
+sub four by foursuperior;
+sub five by fivesuperior;
+sub six by sixsuperior;
+sub seven by sevensuperior;
+sub eight by eightsuperior;
+sub nine by ninesuperior;
+
+} sups;
+
+feature numr {
+# automatic
+sub zero by zero.numr;
+sub one by one.numr;
+sub two by two.numr;
+sub three by three.numr;
+sub four by four.numr;
+sub five by five.numr;
+sub six by six.numr;
+sub seven by seven.numr;
+sub eight by eight.numr;
+sub nine by nine.numr;
+
+} numr;
+
+feature dnom {
+# automatic
+sub zero by zero.dnom;
+sub one by one.dnom;
+sub two by two.dnom;
+sub three by three.dnom;
+sub four by four.dnom;
+sub five by five.dnom;
+sub six by six.dnom;
+sub seven by seven.dnom;
+sub eight by eight.dnom;
+sub nine by nine.dnom;
+
+} dnom;
+
+feature frac {
+# automatic
+lookup FRAC {
+       sub slash by fraction;
+} FRAC;
+lookup UP {
+       sub [zero one two three four five six seven eight nine] by [zero.numr one.numr two.numr three.numr 
four.numr five.numr six.numr seven.numr eight.numr nine.numr];
+} UP;
+lookup DOWN {
+       sub fraction [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr 
eight.numr nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom 
eight.dnom nine.dnom];
+       sub [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom] [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr 
nine.numr]' by [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom 
nine.dnom];
+} DOWN;
+
+} frac;
+
+feature ordn {
+# automatic
+sub [zero one two three four five six seven eight nine] [A a]' by ordfeminine;
+sub [zero one two three four five six seven eight nine] [O o]' by ordmasculine;
+sub N o period by numero;
+
+} ordn;
+
+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;
+sub bulletoperator.tf by bulletoperator;
+sub commercialMinusSign.tf by commercialMinusSign;
+sub divisionslash.tf by divisionslash;
+sub equivalence.tf by equivalence;
+sub notidentical.tf by notidentical;
+sub plus.tf by plus;
+sub minus.tf by minus;
+sub multiply.tf by multiply;
+sub divide.tf by divide;
+sub equal.tf by equal;
+sub notequal.tf by notequal;
+sub greater.tf by greater;
+sub less.tf by less;
+sub greaterequal.tf by greaterequal;
+sub lessequal.tf by lessequal;
+sub plusminus.tf by plusminus;
+sub approxequal.tf by approxequal;
+sub logicalnot.tf by logicalnot;
+sub zero.tosf by zero.osf;
+sub one.tosf by one.osf;
+sub two.tosf by two.osf;
+sub three.tosf by three.osf;
+sub four.tosf by four.osf;
+sub five.tosf by five.osf;
+sub six.tosf by six.osf;
+sub seven.tosf by seven.osf;
+sub eight.tosf by eight.osf;
+sub nine.tosf by nine.osf;
+
+} 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;
+sub bulletoperator by bulletoperator.tf;
+sub commercialMinusSign by commercialMinusSign.tf;
+sub divisionslash by divisionslash.tf;
+sub equivalence by equivalence.tf;
+sub notidentical by notidentical.tf;
+sub plus by plus.tf;
+sub minus by minus.tf;
+sub multiply by multiply.tf;
+sub divide by divide.tf;
+sub equal by equal.tf;
+sub notequal by notequal.tf;
+sub greater by greater.tf;
+sub less by less.tf;
+sub greaterequal by greaterequal.tf;
+sub lessequal by lessequal.tf;
+sub plusminus by plusminus.tf;
+sub approxequal by approxequal.tf;
+sub logicalnot by logicalnot.tf;
+sub zero.osf by zero.tosf;
+sub one.osf by one.tosf;
+sub two.osf by two.tosf;
+sub three.osf by three.tosf;
+sub four.osf by four.tosf;
+sub five.osf by five.tosf;
+sub six.osf by six.tosf;
+sub seven.osf by seven.tosf;
+sub eight.osf by eight.tosf;
+sub nine.osf by nine.tosf;
+
+} tnum;
+
+feature onum {
+# automatic
+sub zero.tf by zero.tosf;
+sub one.tf by one.tosf;
+sub two.tf by two.tosf;
+sub three.tf by three.tosf;
+sub four.tf by four.tosf;
+sub five.tf by five.tosf;
+sub six.tf by six.tosf;
+sub seven.tf by seven.tosf;
+sub eight.tf by eight.tosf;
+sub nine.tf by nine.tosf;
+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 periodcentered.loclCAT by periodcentered.loclCAT.case;
+sub dieresiscomb by dieresiscomb.case;
+sub dotaccentcomb by dotaccentcomb.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 ringcomb_acutecomb by ringcomb_acutecomb.case;
+sub tildecomb by tildecomb.case;
+sub macroncomb by macroncomb.case;
+sub hookabovecomb by hookabovecomb.case;
+sub dblgravecomb by dblgravecomb.case;
+sub breveinvertedcomb by breveinvertedcomb.case;
+sub strokeshortcomb by strokeshortcomb.case;
+sub slashshortcomb by slashshortcomb.case;
+sub slashlongcomb by slashlongcomb.case;
+sub macroncomb.narrow by macroncomb.narrow.case;
+sub ogonekcomb.tall by ogonekcomb.tall.case;
+sub brevecomb-cy by brevecomb-cy.case;
+sub descender-cy by descender-cy.case;
+sub brevecomb_acutecomb by brevecomb_acutecomb.case;
+sub brevecomb_gravecomb by brevecomb_gravecomb.case;
+sub brevecomb_hookabovecomb by brevecomb_hookabovecomb.case;
+sub brevecomb_tildecomb by brevecomb_tildecomb.case;
+sub circumflexcomb_acutecomb by circumflexcomb_acutecomb.case;
+sub circumflexcomb_gravecomb by circumflexcomb_gravecomb.case;
+sub circumflexcomb_hookabovecomb by circumflexcomb_hookabovecomb.case;
+sub circumflexcomb_tildecomb by circumflexcomb_tildecomb.case;
+sub zero.osf by zero.lf;
+sub one.osf by one.lf;
+sub two.osf by two.lf;
+sub three.osf by three.lf;
+sub four.osf by four.lf;
+sub five.osf by five.lf;
+sub six.osf by six.lf;
+sub seven.osf by seven.lf;
+sub eight.osf by eight.lf;
+sub nine.osf by nine.lf;
+sub zero.tf by zero.lf;
+sub one.tf by one.lf;
+sub two.tf by two.lf;
+sub three.tf by three.lf;
+sub four.tf by four.lf;
+sub five.tf by five.lf;
+sub six.tf by six.lf;
+sub seven.tf by seven.lf;
+sub eight.tf by eight.lf;
+sub nine.tf by nine.lf;
+sub zero.tosf by zero.lf;
+sub one.tosf by one.lf;
+sub two.tosf by two.lf;
+sub three.tosf by three.lf;
+sub four.tosf by four.lf;
+sub five.tosf by five.lf;
+sub six.tosf by six.lf;
+sub seven.tosf by seven.lf;
+sub eight.tosf by eight.lf;
+sub nine.tosf by nine.lf;
+
+} case;
+
+feature liga {
+# automatic
+sub f f i by f_f_i;
+sub f f l by f_f_l;
+sub f f by f_f;
+sub f i by fi;
+sub f l by fl;
+
+} liga;
+
+feature zero {
+# automatic
+sub zero.lf by zero.lf.zero;
+sub zero.osf by zero.osf.zero;
+sub zero.tf by zero.tf.zero;
+sub zero.tosf by zero.tosf.zero;
+sub zero by zero.zero;
+
+} zero;
+
+feature salt {
+# automatic
+sub six by six.ss01;
+sub nine by nine.ss01;
+
+} salt;
+
+feature ss01 {
+# automatic
+sub six by six.ss01;
+sub nine by nine.ss01;
+
+} ss01;
+
+table GDEF {
+  # automatic
+  GlyphClassDef
+       [A Aacute Abreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acaron 
Acircumflex Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde 
Adblgrave Adieresis Adotbelow Agrave Ahookabove Ainvertedbreve Amacron Aogonek Aring Aringacute Atilde AE 
AEacute B C Cacute Ccaron Ccedilla Ccedillaacute Ccircumflex Cdotaccent D DZcaron Eth Dcaron Dcroat Ddotbelow 
Dlinebelow Dzcaron E Eacute Ebreve Ecaron Ecedillabreve Ecircumflex Ecircumflexacute Ecircumflexdotbelow 
Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Edblgrave Edieresis Edotaccent Edotbelow Egrave 
Ehookabove Einvertedbreve Emacron Emacronacute Emacrongrave Eogonek Etilde F G Gbreve Gcaron Gcircumflex 
Gcommaaccent Gdotaccent Gmacron H Hbar Hbrevebelow Hcircumflex Hdotbelow I Iacute Ibreve Icaron Icircumflex 
Idblgrave Idieresis Idieresisacute Idotaccent Idotbelow Igrave Ihookabove Iinvertedbreve Imacron Iogonek 
Itilde J Jacute Jcircumflex K Kacute Kcommaaccent L
  LJ Lacu
 te Lcaron Lcommaaccent Ldot Ldotbelow Lj Llinebelow Lslash M Mdotbelow N NJ Nacute Ncaron Ncommaaccent 
Ndotaccent Ndotbelow Nj Nlinebelow Ntilde O Oacute Obreve Ocaron Ocircumflex Ocircumflexacute 
Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Odblgrave Odieresis 
Odieresismacron Odotaccentmacron Odotbelow Ograve Ohookabove Ohorn Ohornacute Ohorndotbelow Ohorngrave 
Ohornhookabove Ohorntilde Ohungarumlaut Oinvertedbreve Omacron Omacronacute Omacrongrave Oogonek Oslash 
Oslashacute Otilde Otildeacute Otildedieresis Otildemacron OE P Q R Racute Rcaron Rcommaaccent Rdblgrave 
Rdotbelow Rinvertedbreve Rlinebelow S Sacute Sacutedotaccent Scaron Scarondotaccent Scedilla Scircumflex 
Scommaaccent Sdotaccent Sdotbelow Sdotbelowdotaccent Schwa T Tbar Tcaron Tcedilla Tcommaaccent Tdotbelow 
Tlinebelow U Uacute Ubreve Ucaron Ucircumflex Udblgrave Udieresis Udieresisacute Udieresiscaron 
Udieresisgrave Udieresismacron Udotbelow Ugrave Uhookabove Uhorn Uhornacute Uho
 rndotbel
 ow Uhorngrave Uhornhookabove Uhorntilde Uhungarumlaut Uinvertedbreve Umacron Umacrondieresis Uogonek Uring 
Utilde Utildeacute V W Wacute Wcircumflex Wdieresis Wgrave X Y Yacute Ycircumflex Ydieresis Ydotaccent 
Ydotbelow Ygrave Yhookabove Ymacron Ytilde Z Zacute Zcaron Zdotaccent Zdotbelow a aacute abreve abreveacute 
abrevedotbelow abrevegrave abrevehookabove abrevetilde acaron acircumflex acircumflexacute 
acircumflexdotbelow acircumflexgrave acircumflexhookabove acircumflextilde adblgrave adieresis adotbelow 
agrave ahookabove ainvertedbreve amacron aogonek aring aringacute atilde ae aeacute b c cacute ccaron 
ccedilla ccedillaacute ccircumflex cdotaccent d dcaron dcroat ddotbelow dlinebelow dzcaron e eacute ebreve 
ecaron ecedillabreve ecircumflex ecircumflexacute ecircumflexdotbelow ecircumflexgrave ecircumflexhookabove 
ecircumflextilde edblgrave edieresis edotaccent edotbelow egrave ehookabove einvertedbreve emacron 
emacronacute emacrongrave eogonek etilde schwa f g gbreve g
 caron gc
 ircumflex gcommaaccent gdotaccent gmacron h hbar hbrevebelow hcircumflex hdotbelow i idotless iacute ibreve 
icaron icircumflex idblgrave idieresis idieresisacute idotaccent idotbelow igrave ihookabove iinvertedbreve 
imacron iogonek itilde j jdotless jacute jcircumflex k kacute kcommaaccent l lacute lcaron lcommaaccent ldot 
ldotbelow lj llinebelow lslash m mdotbelow n nacute ncaron ncommaaccent ndotaccent ndotbelow nj nlinebelow 
ntilde o oacute obreve ocaron ocircumflex ocircumflexacute ocircumflexdotbelow ocircumflexgrave 
ocircumflexhookabove ocircumflextilde odblgrave odieresis odieresismacron odotaccentmacron odotbelow ograve 
ohookabove ohorn ohornacute ohorndotbelow ohorngrave ohornhookabove ohorntilde ohungarumlaut oinvertedbreve 
omacron omacronacute omacrongrave oogonek oslash oslashacute otilde otildeacute otildedieresis otildemacron 
oe p q r racute rcaron rcommaaccent rdblgrave rdotbelow rinvertedbreve rlinebelow s sacute sacutedotaccent 
scaron scarondotaccent scedill
 a scircu
 mflex scommaaccent sdotaccent sdotbelow sdotbelowdotaccent t tbar tcaron tcedilla tcommaaccent tdieresis 
tdotbelow tlinebelow u uacute ubreve ucaron ucircumflex udblgrave udieresis udieresisacute udieresiscaron 
udieresisgrave udieresismacron udotbelow ugrave uhookabove uhorn uhornacute uhorndotbelow uhorngrave 
uhornhookabove uhorntilde uhungarumlaut uinvertedbreve umacron umacrondieresis uogonek uring utilde 
utildeacute v w wacute wcircumflex wdieresis wgrave x y yacute ycircumflex ydieresis ydotaccent ydotbelow 
ygrave yhookabove ymacron ytilde z zacute zcaron zdotaccent zdotbelow A-cy Ve-cy Ge-cy Gje-cy Ie-cy 
Iegrave-cy Io-cy Zhe-cy Ze-cy Ii-cy Iishort-cy Iigrave-cy Ka-cy Kje-cy Em-cy En-cy O-cy Pe-cy Er-cy Es-cy 
Te-cy U-cy Ushort-cy Ha-cy Che-cy Hardsign-cy Yeru-cy Dze-cy Ereversed-cy I-cy Yi-cy Je-cy Iu-cy Ia-cy 
Fita-cy Zhedescender-cy Zedescender-cy Kadescender-cy Endescender-cy Esdescender-cy Ustrait-cy 
Ustraitstroke-cy Hadescender-cy Chedescender-cy Palochka-cy Zhebrev
 e-cy Che
 khakassian-cy Abreve-cy Adieresis-cy Aie-cy Iebreve-cy Schwa-cy Zhedieresis-cy Zedieresis-cy Imacron-cy 
Idieresis-cy Odieresis-cy Obarred-cy Umacron-cy Udieresis-cy Uhungarumlaut-cy Chedieresis-cy Gedescender-cy 
Yerudieresis-cy Qa-cy We-cy a-cy ge-cy gje-cy ie-cy iegrave-cy io-cy zhe-cy ze-cy ii-cy iishort-cy iigrave-cy 
ka-cy kje-cy en-cy o-cy pe-cy er-cy es-cy te-cy u-cy ushort-cy ha-cy che-cy yeru-cy dze-cy e-cy ereversed-cy 
i-cy yi-cy je-cy tshe-cy iu-cy ia-cy dje-cy fita-cy zhedescender-cy zedescender-cy kadescender-cy 
endescender-cy esdescender-cy ustrait-cy hadescender-cy chedescender-cy shha-cy palochka-cy zhebreve-cy 
chekhakassian-cy abreve-cy adieresis-cy aie-cy iebreve-cy schwa-cy zhedieresis-cy zedieresis-cy imacron-cy 
idieresis-cy odieresis-cy obarred-cy umacron-cy udieresis-cy uhungarumlaut-cy chedieresis-cy gedescender-cy 
yerudieresis-cy qa-cy we-cy cedi cent colonsign dollar dong euro franc guarani naira peseta peso won numero 
ustraitstroke-cy], # Base 
+       [f_f f_f_i f_f_l fi fl], # Liga 
+       [dieresiscomb dieresiscomb_gravecomb dieresiscomb_acutecomb dieresiscomb_caroncomb 
dieresiscomb_macroncomb dotaccentcomb dotaccentcomb_macroncomb gravecomb acutecomb acutecomb_dotaccentcomb 
hungarumlautcomb caroncomb.alt circumflexcomb caroncomb caroncomb_dotaccentcomb brevecomb ringcomb 
ringcomb_acutecomb tildecomb tildecomb_dieresiscomb tildecomb_acutecomb tildecomb_macroncomb macroncomb 
macroncomb_dieresiscomb macroncomb_gravecomb macroncomb_acutecomb hookabovecomb verticallineabovecomb 
dblgravecomb breveinvertedcomb commaturnedabovecomb horncomb dotbelowcomb dieresisbelowcomb commaaccentcomb 
cedillacomb ogonekcomb verticallinebelowcomb brevebelowcomb macronbelowcomb strokeshortcomb strokelongcomb 
slashshortcomb slashlongcomb dieresiscomb.case dotaccentcomb.case gravecomb.case acutecomb.case 
hungarumlautcomb.case circumflexcomb.case caroncomb.case brevecomb.case ringcomb.case ringcomb_acutecomb.case 
tildecomb.case macroncomb.case hookabovecomb.case dblgravecomb.case br
 eveinver
 tedcomb.case strokeshortcomb.case slashshortcomb.case slashlongcomb.case macroncomb.narrow.case 
ogonekcomb.tall.case dieresiscomb.loclVIET dotaccentcomb.loclVIET gravecomb.loclVIET acutecomb.loclVIET 
circumflexcomb.loclVIET caroncomb.loclVIET brevecomb.loclVIET tildecomb.loclVIET macroncomb.loclVIET 
hookabovecomb.loclVIET macroncomb.narrow ogonekcomb.narrow macronbelowcomb.narrow ogonekcomb.tall 
brevecomb-cy descender-cy brevecomb-cy.case descender-cy.case descender-cy.strait brevecomb_acutecomb 
brevecomb_gravecomb brevecomb_hookabovecomb brevecomb_tildecomb circumflexcomb_acutecomb 
circumflexcomb_gravecomb circumflexcomb_hookabovecomb circumflexcomb_tildecomb brevecomb_acutecomb.case 
brevecomb_gravecomb.case brevecomb_hookabovecomb.case brevecomb_tildecomb.case circumflexcomb_acutecomb.case 
circumflexcomb_gravecomb.case circumflexcomb_hookabovecomb.case circumflexcomb_tildecomb.case], # Mark 
+       ;
+} GDEF;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]