languagesystem DFLT dflt; languagesystem latn dflt; @full = [ \a - \z ]; @upper = [ \A - \Z ]; @hfhz = [ \a.hfhz - \z.hfhz ]; @hfvt = [ \a.hfvt - \z.hfvt ]; @qrtr = [ \a.qrtr - \z.qrtr ]; @all = [ @full @hfhz @hfvt @qrtr space space.hfhz space.hfvt space.qrtr ]; # GSUB lookup full2qrtr { sub [@full space] by [@qrtr space.qrtr]; } full2qrtr; lookup full2hfvt { sub [@full space] by [@hfvt space.hfvt]; } full2hfvt; lookup full2hfhz { sub [@full space] by [@hfhz space.hfhz]; } full2hfhz; feature calt { # the script is unicameral, so map caps to lowercase to simplify substitutions lookup up2lo { sub @upper by @full; } up2lo; lookup blocksub { sub @full' lookup full2qrtr @full' lookup full2qrtr @full' lookup full2qrtr [@full space]' lookup full2qrtr; sub @full' lookup full2qrtr @full' lookup full2qrtr [@full space]' lookup full2hfvt; sub @full' lookup full2hfvt [@full space]' lookup full2hfvt; } blocksub; } calt; # GPOS lookup qrtr1 { pos @qrtr <300 300 0 0>; } qrtr1; lookup qrtr2 { pos @qrtr <0 0 0 0>; } qrtr2; lookup qrtr3 { pos @qrtr <-600 0 -300 0>; } qrtr3; lookup qrtr4 { pos [@qrtr space.qrtr] <-600 300 -300 0>; } qrtr4; lookup hfvt1 { pos [@hfvt space.hfvt] <-600 0 -300 0>; } hfvt1; lookup hfvt2 { pos @hfvt <300 0 0 0>; } hfvt2; lookup hfvt3 { pos [@hfvt space.hfvt] <-300 0 0 0>; } hfvt3; feature kern { lookup blockpos { pos @qrtr' lookup qrtr1 @qrtr' lookup qrtr2 @qrtr' lookup qrtr3 [@qrtr space.qrtr]' lookup qrtr4; pos @qrtr' lookup qrtr1 @qrtr' lookup qrtr2 [@hfvt space.hfvt]' lookup hfvt1; pos @hfvt' lookup hfvt2 [@hfvt space.hfvt]' lookup hfvt3; } blockpos; } kern; #Mark attachment classes (defined in GDEF, used in lookupflags) @GDEF_Simple = [ \A -\Z \a - \z \a.hfvt - \z.hfvt \a.hfhz - \z.hfhz \a.qrtr - \z.qrtr \space \space.hfvt \space.hfhz \space.qrtr ]; table GDEF { GlyphClassDef @GDEF_Simple, , , ; } GDEF;