# LANGUAGE SYSTEMS

languagesystem DFLT dflt;
languagesystem latn dflt;
languagesystem latn AZE;
languagesystem latn CRT;
languagesystem latn MOL;
languagesystem latn NLD;
languagesystem latn ROM;
languagesystem latn TRK;

# FEATURES CLASSES

@uc=[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Agrave Aacute Acircumflex Atilde Adieresis Amacron Abreve Aring Aringacute Adotbelow Aogonek Adblgrave Ainvertedbreve Abreveacute Abrevedotbelow Abrevegrave Abrevehookabove Abrevetilde Acircumflexacute Acircumflexdotbelow Acircumflexgrave Acircumflexhookabove Acircumflextilde Ahookabove AE AEacute Cacute Ccircumflex Ccaron Cdotaccent Ccedilla Ccedillaacute Dcaron Dcroat Ddotbelow Dlinebelow Egrave Eacute Ecircumflex Ecaron Etilde Edieresis Emacron Ebreve Edotaccent Eogonek Edotbelow Edblgrave Einvertedbreve Ecircumflexacute Ecircumflexdotbelow Ecircumflexgrave Ecircumflexhookabove Ecircumflextilde Ehookabove Emacrongrave Emacronacute Ecedillabreve Gcircumflex Gbreve Gdotaccent Gcommaaccent Gcaron Gmacron Hcircumflex Hbar Hdotbelow Hbrevebelow Igrave Iacute Icircumflex Itilde Idieresis Imacron Ibreve Iogonek Idotbelow Idblgrave Iinvertedbreve Ihookabove Idieresisacute IJ Jacute Jcircumflex Kcommaaccent Lacute Lcaron Lcommaaccent Lslash Ldot Ldotbelow Llinebelow Mdotbelow Nacute Ncaron Ntilde Ncommaaccent Ndotaccent Ndotbelow Nlinebelow Ograve Oacute Ocircumflex Otilde Odieresis Omacron Obreve Ohungarumlaut Odotbelow Oogonek Odblgrave Oinvertedbreve Odieresismacron Otildemacron Odotaccentmacron Ocircumflexacute Ocircumflexdotbelow Ocircumflexgrave Ocircumflexhookabove Ocircumflextilde Ohookabove Otildeacute Otildedieresis Omacrongrave Omacronacute Oslash Oslashacute Ohorn Ohornacute Ohorndotbelow Ohorngrave Ohornhookabove Ohorntilde OE Racute Rcaron Rcommaaccent Rdblgrave Rinvertedbreve Rdotbelow Rlinebelow Sacute Scircumflex Scaron Scedilla Scommaaccent Sdotaccent Sdotbelow Sacutedotaccent Scarondotaccent Sdotbelowdotaccent Tcaron Tcommaaccent Tbar Tcedilla Tdotbelow Tlinebelow Ugrave Uacute Ucircumflex Utilde Udieresis Umacron Ubreve Uring Uhungarumlaut Uogonek Udotbelow Udblgrave Uinvertedbreve Uhookabove Utildeacute Umacrondieresis Uhorn Uhornacute Uhorndotbelow Uhorngrave Uhornhookabove Uhorntilde Wgrave Wacute Wcircumflex Wdieresis Ygrave Yacute Ycircumflex Ydieresis Ytilde Ymacron Ydotbelow Yhookabove Ydotaccent Zacute Zcaron Zdotaccent Zdotbelow Schwa Eng Eth Thorn uni01C4 uni01C7 uni01CA];
@uc.all = [@uc Germandbls Idotaccent];
@uc.punct = [hyphen.case exclamdown.case questiondown.case guilsinglleft.case guilsinglright.case guillemotleft.case guillemotright.case slash.case backslash.case endash.case emdash.case periodcentered.case parenleft.case parenright.case bracketleft.case bracketright.case braceleft.case braceright.case at.case];

@lc=[a b c d e f g h i j k l m n o p q r s t u v w x y z agrave aacute acircumflex atilde adieresis amacron abreve aring aringacute adotbelow aogonek adblgrave ainvertedbreve abreveacute abrevedotbelow abrevegrave abrevehookabove abrevetilde acircumflexacute acircumflexdotbelow acircumflexgrave acircumflexhookabove acircumflextilde ahookabove ae aeacute cacute ccircumflex ccaron cdotaccent ccedilla ccedillaacute dcaron dcroat ddotbelow dlinebelow egrave eacute ecircumflex ecaron etilde edieresis emacron ebreve edotaccent eogonek edotbelow edblgrave einvertedbreve ecircumflexacute ecircumflexdotbelow ecircumflexgrave ecircumflexhookabove ecircumflextilde ehookabove emacrongrave emacronacute ecedillabreve gcircumflex gbreve gdotaccent gcommaaccent gcaron gmacron hcircumflex hbar hdotbelow hbrevebelow igrave iacute icircumflex itilde idieresis imacron ibreve iogonek idotbelow idblgrave iinvertedbreve ihookabove idieresisacute ij jacute jcircumflex kcommaaccent lacute lcaron lcommaaccent lslash ldot ldotbelow llinebelow mdotbelow nacute ncaron ntilde ncommaaccent ndotaccent ndotbelow nlinebelow ograve oacute ocircumflex otilde odieresis omacron obreve ohungarumlaut odotbelow oogonek odblgrave oinvertedbreve odieresismacron otildemacron odotaccentmacron ocircumflexacute ocircumflexdotbelow ocircumflexgrave ocircumflexhookabove ocircumflextilde ohookabove otildeacute otildedieresis omacrongrave omacronacute oslash oslashacute ohorn ohornacute ohorndotbelow ohorngrave ohornhookabove ohorntilde oe racute rcaron rcommaaccent rdblgrave rinvertedbreve rdotbelow rlinebelow sacute scircumflex scaron scedilla scommaaccent sdotaccent sdotbelow sacutedotaccent scarondotaccent sdotbelowdotaccent tcaron tcommaaccent tbar tcedilla tdotbelow tlinebelow ugrave uacute ucircumflex utilde udieresis umacron ubreve uring uhungarumlaut uogonek udotbelow udblgrave uinvertedbreve uhookabove utildeacute umacrondieresis uhorn uhornacute uhorndotbelow uhorngrave uhornhookabove uhorntilde wgrave wacute wcircumflex wdieresis ygrave yacute ycircumflex ydieresis ytilde ymacron ydotbelow yhookabove ydotaccent zacute zcaron zdotaccent zdotbelow schwa eng eth thorn uni01C6 uni01C9 uni01CC];
@lc.punct_sc=[exclam exclamdown question questiondown quotesingle quotedbl quotedblleft quotedblright quoteleft quoteright periodcentered ampersand at];
@lc.punct_uc = [hyphen exclamdown questiondown guilsinglleft guilsinglright guillemotleft guillemotright slash backslash endash emdash periodcentered parenleft parenright bracketleft bracketright braceleft braceright at];
@lc.all = [@lc idotless idotaccent longs];

@sc=[a.sc b.sc c.sc d.sc e.sc f.sc g.sc h.sc i.sc j.sc k.sc l.sc m.sc n.sc o.sc p.sc q.sc r.sc s.sc t.sc u.sc v.sc w.sc x.sc y.sc z.sc agrave.sc aacute.sc acircumflex.sc atilde.sc adieresis.sc amacron.sc abreve.sc aring.sc aringacute.sc adotbelow.sc aogonek.sc adblgrave.sc ainvertedbreve.sc abreveacute.sc abrevedotbelow.sc abrevegrave.sc abrevehookabove.sc abrevetilde.sc acircumflexacute.sc acircumflexdotbelow.sc acircumflexgrave.sc acircumflexhookabove.sc acircumflextilde.sc ahookabove.sc ae.sc aeacute.sc cacute.sc ccircumflex.sc ccaron.sc cdotaccent.sc ccedilla.sc ccedillaacute.sc dcaron.sc dcroat.sc ddotbelow.sc dlinebelow.sc egrave.sc eacute.sc ecircumflex.sc ecaron.sc etilde.sc edieresis.sc emacron.sc ebreve.sc edotaccent.sc eogonek.sc edotbelow.sc edblgrave.sc einvertedbreve.sc ecircumflexacute.sc ecircumflexdotbelow.sc ecircumflexgrave.sc ecircumflexhookabove.sc ecircumflextilde.sc ehookabove.sc emacrongrave.sc emacronacute.sc ecedillabreve.sc gcircumflex.sc gbreve.sc gdotaccent.sc gcommaaccent.sc gcaron.sc gmacron.sc hcircumflex.sc hbar.sc hdotbelow.sc hbrevebelow.sc igrave.sc iacute.sc icircumflex.sc itilde.sc idieresis.sc imacron.sc ibreve.sc iogonek.sc idotbelow.sc idblgrave.sc iinvertedbreve.sc ihookabove.sc idieresisacute.sc ij.sc jacute.sc jcircumflex.sc kcommaaccent.sc lacute.sc lcaron.sc lcommaaccent.sc lslash.sc ldot.sc ldotbelow.sc llinebelow.sc mdotbelow.sc nacute.sc ncaron.sc ntilde.sc ncommaaccent.sc ndotaccent.sc ndotbelow.sc nlinebelow.sc ograve.sc oacute.sc ocircumflex.sc otilde.sc odieresis.sc omacron.sc obreve.sc ohungarumlaut.sc odotbelow.sc oogonek.sc odblgrave.sc oinvertedbreve.sc odieresismacron.sc otildemacron.sc odotaccentmacron.sc ocircumflexacute.sc ocircumflexdotbelow.sc ocircumflexgrave.sc ocircumflexhookabove.sc ocircumflextilde.sc ohookabove.sc otildeacute.sc otildedieresis.sc omacrongrave.sc omacronacute.sc oslash.sc oslashacute.sc ohorn.sc ohornacute.sc ohorndotbelow.sc ohorngrave.sc ohornhookabove.sc ohorntilde.sc oe.sc racute.sc rcaron.sc rcommaaccent.sc rdblgrave.sc rinvertedbreve.sc rdotbelow.sc rlinebelow.sc sacute.sc scircumflex.sc scaron.sc scedilla.sc scommaaccent.sc sdotaccent.sc sdotbelow.sc sacutedotaccent.sc scarondotaccent.sc sdotbelowdotaccent.sc tcaron.sc tcommaaccent.sc tbar.sc tcedilla.sc tdotbelow.sc tlinebelow.sc ugrave.sc uacute.sc ucircumflex.sc utilde.sc udieresis.sc umacron.sc ubreve.sc uring.sc uhungarumlaut.sc uogonek.sc udotbelow.sc udblgrave.sc uinvertedbreve.sc uhookabove.sc utildeacute.sc umacrondieresis.sc uhorn.sc uhornacute.sc uhorndotbelow.sc uhorngrave.sc uhornhookabove.sc uhorntilde.sc wgrave.sc wacute.sc wcircumflex.sc wdieresis.sc ygrave.sc yacute.sc ycircumflex.sc ydieresis.sc ytilde.sc ymacron.sc ydotbelow.sc yhookabove.sc ydotaccent.sc zacute.sc zcaron.sc zdotaccent.sc zdotbelow.sc schwa.sc eng.sc eth.sc thorn.sc dzcaron.sc lj.sc nj.sc];
@sc.punct=[exclam.sc exclamdown.sc question.sc questiondown.sc quotesingle.sc quotedbl.sc quotedblleft.sc quotedblright.sc quoteleft.sc quoteright.sc periodcentered.sc ampersand.sc at.sc];
@sc.all = [@sc germandbls.sc idotaccent.sc];

@figs.default = [ zero one two three four five six seven eight nine ];
@currency.default = [ numbersign Euro dollar cent sterling florin yen zero.zero ];

@figs.lt = [ zero one two three four five six seven eight nine ];
@currency.lt = [ numbersign Euro dollar cent sterling florin yen zero.zero ];

@figs.lp = [ zero.LP one.LP two.LP three.LP four.LP five.LP six.LP seven.LP eight.LP nine.LP ];
@currency.lp = [ numbersign.LP Euro.LP dollar.LP cent.LP sterling.LP florin.LP yen.LP zero.slashLP ];

@figs.ot = [ zero.OT one.OT two.OT three.OT four.OT five.OT six.OT seven.OT eight.OT nine.OT ];
@currency.ot = [ numbersign.OT Euro.OT dollar.OT cent.OT sterling.OT florin.OT yen.OT zero.slashOT ];

@figs.op = [ zero.OP one.OP two.OP three.OP four.OP five.OP six.OP seven.OP eight.OP nine.OP ];
@currency.op = [ numbersign.OP Euro.OP dollar.OP cent.OP sterling.OP florin.OP yen.OP zero.slashOP ];

@figs.denominator = [ zero.sinf one.sinf two.sinf three.sinf four.sinf five.sinf six.sinf seven.sinf eight.sinf nine.sinf ];

@figs.numerator = [ zero.sups one.sups two.sups three.sups four.sups five.sups six.sups seven.sups eight.sups nine.sups ];

@figs.superior = [ zerosuperior onesuperior twosuperior threesuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior ];

@figs.inferior = [ zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior ];

@sup_from = [ a b c d e f g h i j k l m n o p q r s t u v w x y z ];
@sup_to = [ a.superior b.superior c.superior d.superior e.superior f.superior g.superior h.superior i.superior j.superior k.superior l.superior m.superior n.superior o.superior p.superior q.superior r.superior s.superior t.superior u.superior v.superior w.superior x.superior y.superior z.superior ];

@figs.opencirc = [ zero.opencirc uni2780 uni2781 uni2782 uni2783 uni2784 uni2785 uni2786 uni2787 uni2788 ];
@figs.closecirc = [ zero.closecirc uni278A uni278B uni278C uni278D uni278E uni278F uni2790 uni2791 uni2792 ];

@arrows.from = [less greater plus minus multiply divide equal plusminus];
@arrows.to = [ arrowleft arrowright arrowup arrowdown arrowupleft arrowupright arrowdownleft arrowdownright ];

@dingbats.from = [a b c d];
@dingbats.to = [blacksquare blackdiamond blackcircle blacktriangle];

# FEATURES

feature aalt { # ALL ALTERNATES
    feature locl;
    feature ordn;
    feature numr;
    feature dnom;
    feature sinf;
    feature sups;
    feature zero;
    feature onum;
    feature lnum;
    feature tnum;
    feature pnum;
    feature c2sc;
    feature smcp;
    feature case;
    feature hist;
    feature ss01;
    feature ss02;
    feature ss03;
    feature ss04;
} aalt;

feature ornm {
    lookup arrows_all {
        sub @arrows.from by @arrows.to;
    } arrows_all;
} ornm ;

feature cpsp { # Capital Spacing
    pos @uc.all  <5 0 10 0>;
} cpsp;

feature locl { # Localized Forms
    script latn;
    language AZE; # Azeri
        sub i by idotaccent;
    language CRT; # Crimean Tatar
        sub i by idotaccent;
    language MOL; # Moldavian
        sub [Scedilla scedilla.sc scedilla] by [Scommaaccent scommaaccent.sc scommaaccent];
    language NLD; #Dutch
		sub iacute j' by jacute;
		sub iacute.sc j.sc' by jacute.sc;
		sub Iacute J' by Jacute;
    language ROM; # Romanian
        sub [Scedilla scedilla.sc scedilla] by [Scommaaccent scommaaccent.sc scommaaccent];
    language TRK; # Turkish        
        sub i by idotaccent;
} locl;

feature ordn { # Ordinals
    lookup ordn_base {
        sub @figs.default [O o.sc o]' by ordmasculine;
        sub @figs.default [A a.sc a]' by ordfeminine;
    } ordn_base;
    lookup ordn_numero {
        sub N [O o o.sc degree ordmasculine] by numero;
        sub n [O o o.sc degree ordmasculine] by numero;
        sub n.sc [O o o.sc degree ordmasculine] by numero;
    } ordn_numero;
} ordn;
    
feature frac { # Fractions - This feature code by Tal Leming
      lookup FractionBar {
         ignore    sub slash @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt slash'; ignore    sub slash' @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt slash; ignore    sub slash @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   @figs.lt   slash'; ignore    sub slash'   @figs.lt   @figs.lt   slash; ignore    sub slash   @figs.lt   slash'; ignore    sub slash'   @figs.lt   slash;    sub @figs.lt slash' @figs.lt by fraction;
         ignore    sub slash @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp slash'; ignore    sub slash' @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp slash; ignore    sub slash @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   @figs.lp   slash'; ignore    sub slash'   @figs.lp   @figs.lp   slash; ignore    sub slash   @figs.lp   slash'; ignore    sub slash'   @figs.lp   slash;    sub @figs.lp slash' @figs.lp by fraction;
         ignore    sub slash @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot slash'; ignore    sub slash' @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot slash; ignore    sub slash @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   @figs.ot   slash'; ignore    sub slash'   @figs.ot   @figs.ot   slash; ignore    sub slash   @figs.ot   slash'; ignore    sub slash'   @figs.ot   slash;    sub @figs.ot slash' @figs.ot by fraction;
         ignore    sub slash @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op slash'; ignore    sub slash' @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op slash; ignore    sub slash @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   @figs.op   slash'; ignore    sub slash'   @figs.op   @figs.op   slash; ignore    sub slash   @figs.op   slash'; ignore    sub slash'   @figs.op   slash;    sub @figs.op slash' @figs.op by fraction;
      } FractionBar;
      lookup Numerator1 {
        sub @figs.lt' fraction by @figs.numerator;
        sub @figs.lp' fraction by @figs.numerator;
        sub @figs.ot' fraction by @figs.numerator;
        sub @figs.op' fraction by @figs.numerator;
      } Numerator1;
      lookup Numerator2 {
        sub @figs.lt' @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator fraction by @figs.numerator;
      } Numerator2;
      lookup Numerator3 {
        sub @figs.lt' @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator fraction by @figs.numerator;
    } Numerator3;
      lookup Numerator4 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator4;
      lookup Numerator5 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator5;
      lookup Numerator6 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator6;
      lookup Numerator7 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator7;
      lookup Numerator8 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator8;
      lookup Numerator9 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator9;
      lookup Numerator10 {
        sub @figs.lt' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.lp' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.ot' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
        sub @figs.op' @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator @figs.numerator fraction by @figs.numerator;
      } Numerator10;
      lookup Denominator {
        sub [fraction @figs.denominator] @figs.lt' by @figs.denominator;
        sub [fraction @figs.denominator] @figs.lp' by @figs.denominator;
        sub [fraction @figs.denominator] @figs.ot' by @figs.denominator;
        sub [fraction @figs.denominator] @figs.op' by @figs.denominator;
      } Denominator;
      lookup ThinSpace {
         sub @figs.lt space' @figs.numerator by thinspace;
         sub @figs.lp space' @figs.numerator by thinspace;
         sub @figs.ot space' @figs.numerator by thinspace;
         sub @figs.op space' @figs.numerator by thinspace;
     } ThinSpace; 
} frac;

feature numr { # numerator
    lookup numr_all {
        sub @figs.default by @figs.numerator;
    } numr_all;
} numr;

feature dnom { # denominator
    lookup dnom_all {
        sub @figs.default by @figs.denominator;
    } dnom_all;
} dnom;

feature sinf { # inferior
    lookup sups_all {
        sub @figs.default by @figs.inferior;
    } sups_all;
} sinf;

feature sups { # superior
    lookup sups_figs {
        sub @figs.default by @figs.superior;
    } sups_figs;
    lookup sups_letters {
        sub @sup_from by @sup_to;
        sub idotaccent by i.superior;
    } sups_letters;
} sups;

feature zero { # zero slash
    lookup zero_all {
        sub zero by zero.zero;
    } zero_all;
} zero;

feature onum { # old style figures
    lookup onum_all {
        sub [@figs.lt @figs.lp] by [@figs.ot @figs.op];
        sub [@currency.lt @currency.lp] by [@currency.ot @currency.op];
    } onum_all;
} onum;

feature lnum { # lining figures
    lookup lnum_all {
        sub [@figs.ot @figs.op] by [@figs.lt @figs.lp];
        sub [@currency.ot @currency.op] by [@currency.lt @currency.lp];
    } lnum_all;
} lnum;

feature tnum { # tabular figures
    lookup tnum_all {
        sub [@figs.lp @figs.op] by [@figs.lt @figs.ot];
        sub [@currency.lp @currency.op] by [@currency.lt @currency.ot];
    } tnum_all;
} tnum;

feature pnum { # proportional figures
    lookup pnum_all {
        sub [@figs.lt @figs.ot] by [@figs.lp @figs.op];
        sub [@currency.lt @currency.ot] by [@currency.lp @currency.op];
    } pnum_all;
} pnum;

feature c2sc { # caps to small caps
    lookup c2sc_letters {
          sub @uc by @sc;
          sub @lc by @sc;
          sub @lc.punct_sc by @sc.punct;
          sub Germandbls by germandbls.sc;
          sub Idotaccent by idotaccent.sc;
      } c2sc_letters;
      lookup onum_all;
} c2sc;

feature smcp { # small caps
    lookup smcp_letters {
          sub @lc by @sc;
          sub @lc.punct_sc by @sc.punct;
          sub idotless by i.sc;
          sub idotaccent by idotaccent.sc;
          sub germandbls by germandbls.sc;
      } smcp_letters;
      lookup onum_all;
} smcp;

feature case { # Case-sensitive forms
    lookup case {
        sub @lc by @uc;
    } case; 
    lookup case_exceptions {
         sub [germandbls longs] by [Germandbls S]; 
         sub [uni01C5 uni01C8 uni01CB] by [uni01C4 uni01C7 uni01CA];
         sub idotaccent by Idotaccent;
         sub idotless by I;
     } case_exceptions;
    lookup case_punctuation {
        sub @lc.punct_uc by @uc.punct;
    } case_punctuation; 
    lookup lnum_all;
} case;

feature hist { # Historical Forms
    lookup hist_all {
        sub s' @lc.all by longs;
    } hist_all;
} hist;

feature liga {
    lookup liga_all {
        sub f f b by f_f_b ;
        sub f f h by f_f_h ;
        sub f f i by f_f_i ;
        sub f f j by f_f_j ;
        sub f f k by f_f_k ;
        sub f f l by f_f_l ;
        sub f f t by f_f_t ;
        sub f b by f_b ;
        sub f f by f_f ;
        sub f h by f_h ;
        sub f i by fi ;
        sub f j by f_j ;
        sub f k by f_k ;
        sub f l by fl ;
        sub f t by f_t ;
    } liga_all ;
} liga ;

feature dlig {
    lookup dlig_all {
        sub c h by c_h ;
        sub c t by c_t ;
        sub s t by s_t ;
        sub s p by s_p ;
        sub T h by T_h ;
    } dlig_all ;
} dlig ;

feature ss01 { # Open circled figures
    featureNames {
        name "Open circled figures"; # Windows English
        name 1 0 0 "Open circled figures"; # Mac English
    };
    lookup opencirc_01 {
        sub one zero by uni2789;
    } opencirc_01;
    lookup opencirc_02 {
        sub @figs.default by @figs.opencirc;
    } opencirc_02;
} ss01;

feature ss02 { # close circled figures
    featureNames {
        name "Closed circled figures"; # Windows English
        name 1 0 0 "Closed circled figures"; # Mac English
    };
    lookup closecirc_01 {
        sub one zero by uni2793;
    } closecirc_01;
    lookup closecirc_02 {
        sub @figs.default by @figs.closecirc;
    } closecirc_02;
} ss02;

feature ss03 { #Arrows
    featureNames {
        name "Arrows"; # Windows English
        name 1 0 0 "Arrows"; # Mac English
    };
    lookup arrows_all;
} ss03;

feature ss04 { #Dingbats
    featureNames { 
        name "Dingbats"; # Windows English
        name 1 0 0 "Dingbats"; # Mac English
    };
    lookup dingbats_all {
        sub @dingbats.from by @dingbats.to;
    } dingbats_all;
} ss04;