[cantarell-fonts/ufo-conversion] Make separate feature file again



commit 51310ae9c292732369310773d525919a04d89cbb
Author: Nikolaus Waxweiler <madigens gmail com>
Date:   Sun Feb 17 23:01:50 2019 +0000

    Make separate feature file again
    
    The only practical way to use Glyphs...

 scripts/update-gdef.py                 |  50 ++--
 src/Cantarell-Bold.ufo/features.fea    | 505 ++++++++++++++++++++++++++++++++-
 src/Cantarell-Light.ufo/features.fea   | 505 ++++++++++++++++++++++++++++++++-
 src/Cantarell-Regular.ufo/features.fea | 505 ++++++++++++++++++++++++++++++++-
 src/family.fea                         | 498 --------------------------------
 src/gdef.fea                           |   8 -
 6 files changed, 1543 insertions(+), 528 deletions(-)
---
diff --git a/scripts/update-gdef.py b/scripts/update-gdef.py
index b82dc73f..9104d06d 100644
--- a/scripts/update-gdef.py
+++ b/scripts/update-gdef.py
@@ -6,15 +6,17 @@ glyphs with anchors.
 """
 
 from pathlib import Path
+from typing import Any, Dict, List
 
 import defcon
-import ufo2ft.filters
-
 import glyphsLib.builder.constants
+import glyphsLib.glyphdata
+import ufo2ft.filters
 
 
-# Lifted from glyphsLib and adapted to only recognize Letters as bases.
-def _build_gdef(ufo):
+# Lifted from glyphsLib and adapted to only recognize Letters as bases and not
+# insert a "# automatic".
+def _build_gdef(ufo) -> List[str]:
     """Build a GDEF table statement (GlyphClassDef and LigatureCaretByPos).
 
     Building GlyphClassDef requires anchor propagation or user care to work as
@@ -34,9 +36,8 @@ def _build_gdef(ufo):
     * https://github.com/googlei18n/glyphsLib/issues/85
     * https://github.com/googlei18n/glyphsLib/pull/100#issuecomment-275430289
     """
-    from glyphsLib import glyphdata
-
-    bases, ligatures, marks, carets = set(), set(), set(), {}
+    bases, ligatures, marks = set(), set(), set()
+    carets: Dict[str, Any] = {}  # glyph names to anchor objects
     category_key = glyphsLib.builder.constants.GLYPHLIB_PREFIX + "category"
     subCategory_key = glyphsLib.builder.constants.GLYPHLIB_PREFIX + "subCategory"
 
@@ -51,7 +52,7 @@ def _build_gdef(ufo):
 
         # First check glyph.lib for category/subCategory overrides. Otherwise,
         # use global values from GlyphData.
-        glyphinfo = glyphdata.get_glyph(glyph.name)
+        glyphinfo = glyphsLib.glyphdata.get_glyph(glyph.name)
         category = glyph.lib.get(category_key) or glyphinfo.category
         subCategory = glyph.lib.get(subCategory_key) or glyphinfo.subCategory
 
@@ -65,7 +66,7 @@ def _build_gdef(ufo):
             bases.add(glyph.name)
 
     if not any((bases, ligatures, marks, carets)):
-        return None
+        return []
 
     def fmt(g):
         if g:
@@ -75,7 +76,6 @@ def _build_gdef(ufo):
 
     lines = [
         "table GDEF {",
-        "  # automatic",
         "  GlyphClassDef",
         f"    {fmt(bases)}, # Base",
         f"    {fmt(ligatures)}, # Liga",
@@ -87,18 +87,30 @@ def _build_gdef(ufo):
         lines.append(f"  LigatureCaretByPos {glyph} {caretPos_joined};")
     lines.append("} GDEF;")
 
-    return "\n".join(lines)
+    return lines
 
 
+# Anchors have to be propagated before we can construct the GDEF table.
 if __name__ == "__main__":
-    main_source_path = Path(__file__).parent.parent / "src" / "Cantarell-Regular.ufo"
-    main_source = defcon.Font(main_source_path)
+    source_directory = Path(__file__).parent.parent / "src"
 
+    # The list of glyph names for anchor propagation is stored in the main UFO
+    # (main == whatever has info=1 set in the Designspace).
+    main_source_path = source_directory / "Cantarell-Regular.ufo"
+    main_source = defcon.Font(main_source_path)
     pre_filter, _ = ufo2ft.filters.loadFilters(main_source)
     for pf in pre_filter:
-        pf(font=main_source)
-
-    gdef_table = _build_gdef(main_source)
-
-    with open(Path(__file__).parent.parent / "src" / "gdef.fea", "w") as fp:
-        print(gdef_table, file=fp)
+        pf(font=main_source)  # Run propagation filters on main UFO
+
+    # Generate GDEF definition string from processed, in-memory UFO
+    gdef_table_lines = [f"{l}\n" for l in _build_gdef(main_source)]
+
+    # Update features.fea in all UFOs.
+    for feature_file in source_directory.glob("*.ufo/features.fea"):
+        with open(feature_file) as fp:
+            file_contents = fp.readlines()
+        gdef_start = file_contents.index("table GDEF {\n")
+        gdef_end = file_contents.index("} GDEF;\n") + 1
+        file_contents[gdef_start:gdef_end] = gdef_table_lines
+        with open(feature_file, "w+") as fp:
+            fp.write("".join(file_contents))
diff --git a/src/Cantarell-Bold.ufo/features.fea b/src/Cantarell-Bold.ufo/features.fea
index bda7ea17..da527abc 100644
--- a/src/Cantarell-Bold.ufo/features.fea
+++ b/src/Cantarell-Bold.ufo/features.fea
@@ -1 +1,504 @@
-include(family.fea)
\ No newline at end of file
+# 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Che
 khakassi
 an-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 ];
+
+# 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;
+
+
+# Prefix: GDEF
+table GDEF {
+  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 Eth Dcaron Dcroat Ddotbelow Dlinebelow 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 Lacute Lcaro
 n Lcomma
 accent Ldotbelow Llinebelow Lslash M Mdotbelow N Nacute Ncaron Ncommaaccent Ndotaccent Ndotbelow 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 
Uhorndotbelow Uhorngrave Uhornhoo
 kabove U
 horntilde 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 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 
gcaron gcircumflex gcommaaccent gdotacc
 ent gmac
 ron 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 ldotbelow llinebelow lslash m mdotbelow n 
nacute ncaron ncommaaccent ndotaccent ndotbelow 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 s
 dotbelow
 dotaccent 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy Palochka-cy 
Zhebreve-cy Chekhakassian-cy Abreve-cy Adieresis-cy 
 Aie-cy I
 ebreve-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 ustraight-cy 
ustraightstroke-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], # Base
+    , # 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 b
 reveinve
 rtedcomb.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;
+
+
+feature aalt {
+# automatic
+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;
diff --git a/src/Cantarell-Light.ufo/features.fea b/src/Cantarell-Light.ufo/features.fea
index bda7ea17..da527abc 100644
--- a/src/Cantarell-Light.ufo/features.fea
+++ b/src/Cantarell-Light.ufo/features.fea
@@ -1 +1,504 @@
-include(family.fea)
\ No newline at end of file
+# 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Che
 khakassi
 an-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 ];
+
+# 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;
+
+
+# Prefix: GDEF
+table GDEF {
+  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 Eth Dcaron Dcroat Ddotbelow Dlinebelow 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 Lacute Lcaro
 n Lcomma
 accent Ldotbelow Llinebelow Lslash M Mdotbelow N Nacute Ncaron Ncommaaccent Ndotaccent Ndotbelow 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 
Uhorndotbelow Uhorngrave Uhornhoo
 kabove U
 horntilde 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 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 
gcaron gcircumflex gcommaaccent gdotacc
 ent gmac
 ron 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 ldotbelow llinebelow lslash m mdotbelow n 
nacute ncaron ncommaaccent ndotaccent ndotbelow 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 s
 dotbelow
 dotaccent 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy Palochka-cy 
Zhebreve-cy Chekhakassian-cy Abreve-cy Adieresis-cy 
 Aie-cy I
 ebreve-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 ustraight-cy 
ustraightstroke-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], # Base
+    , # 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 b
 reveinve
 rtedcomb.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;
+
+
+feature aalt {
+# automatic
+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;
diff --git a/src/Cantarell-Regular.ufo/features.fea b/src/Cantarell-Regular.ufo/features.fea
index bda7ea17..da527abc 100644
--- a/src/Cantarell-Regular.ufo/features.fea
+++ b/src/Cantarell-Regular.ufo/features.fea
@@ -1 +1,504 @@
-include(family.fea)
\ No newline at end of file
+# 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy 
Cheverticalstroke-cy Shha-cy Palochka-cy Zhebreve-cy Che
 khakassi
 an-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 ];
+
+# 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;
+
+
+# Prefix: GDEF
+table GDEF {
+  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 Eth Dcaron Dcroat Ddotbelow Dlinebelow 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 Lacute Lcaro
 n Lcomma
 accent Ldotbelow Llinebelow Lslash M Mdotbelow N Nacute Ncaron Ncommaaccent Ndotaccent Ndotbelow 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 
Uhorndotbelow Uhorngrave Uhornhoo
 kabove U
 horntilde 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 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 
gcaron gcircumflex gcommaaccent gdotacc
 ent gmac
 ron 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 ldotbelow llinebelow lslash m mdotbelow n 
nacute ncaron ncommaaccent ndotaccent ndotbelow 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 s
 dotbelow
 dotaccent 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 Ustraight-cy Ustraightstroke-cy Hadescender-cy Chedescender-cy Palochka-cy 
Zhebreve-cy Chekhakassian-cy Abreve-cy Adieresis-cy 
 Aie-cy I
 ebreve-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 ustraight-cy 
ustraightstroke-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], # Base
+    , # 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 b
 reveinve
 rtedcomb.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;
+
+
+feature aalt {
+# automatic
+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;


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