* Fix broken serif shapes in Italic Cyrillic Small I (#717).

* Make variant selectors for `m` and `u` have more effect on Cyrillic letters.
This commit is contained in:
be5invis 2020-11-08 09:17:09 -08:00
parent 8a1ded959a
commit 4998206c50
8 changed files with 126 additions and 62 deletions

View file

@ -1 +1,3 @@
* Fix broken Bulgarian localized of Cyrillic Small Sha (#716). * Fix broken Bulgarian localized of Cyrillic Small Sha and Cyrillic Capital El (#716).
* Fix broken serif shapes in Italic Cyrillic Small I (#717).
* Make variant selectors for `m` and `u` have more effect on Cyrillic letters.

View file

@ -166,18 +166,20 @@ glyph-block Letter-Cyrillic-I : begin
alias 'cyrl/i.italicMotionSerifed' null 'u.motionSerifed' alias 'cyrl/i.italicMotionSerifed' null 'u.motionSerifed'
alias 'cyrl/i.italicMotionSerifedTailed' null 'u.motionSerifedTailed' alias 'cyrl/i.italicMotionSerifedTailed' null 'u.motionSerifedTailed'
alias 'cyrl/i.italicTailed' null 'u.tailed' alias 'cyrl/i.italicTailed' null 'u.tailed'
select-variant 'cyrl/i' 0x438 select-variant 'cyrl/i' 0x438
create-glyph 'cyrl/i.BGR' : glyph-proc alias 'cyrl/i.BGR.toothed' null 'u.toothed'
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS alias 'cyrl/i.BGR.motionSerifed' null 'u.motionSerifed'
alias 'cyrl/i.BGR.motionSerifedTailed' null 'u.motionSerifedTailed'
alias 'cyrl/i.BGR.tailed' null 'u.tailed'
select-variant 'cyrl/i.BGR'
create-glyph 'cyrl/ibreve.BGR' : glyph-proc with-related-glyphs 'cyrl/i.BGR' 'cyrl/ibreve.BGR' null : lambda [src sel] : glyph-proc
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS
include [refer-glyph 'breveAbove'] include [refer-glyph 'breveAbove']
create-glyph 'cyrl/igrave.BGR' : glyph-proc with-related-glyphs 'cyrl/i.BGR' 'cyrl/igrave.BGR' null : lambda [src sel] : glyph-proc
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS
include [refer-glyph 'graveAbove'] include [refer-glyph 'graveAbove']
glyph-block Letter-Cyrillic-Tse : begin glyph-block Letter-Cyrillic-Tse : begin
@ -202,13 +204,20 @@ glyph-block Letter-Cyrillic-Tse : begin
include : MarkSet.e include : MarkSet.e
include : CyrTseShape XH include : CyrTseShape XH
create-glyph 'cyrl/tse.italic' : glyph-proc create-glyph 'cyrl/tse.italicToothed' : glyph-proc
include [refer-glyph "u.toothed"] AS_BASE include [refer-glyph "u.toothed"] AS_BASE
eject-contour 'serifLT' eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05) include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.toothed'
italic-variant 'cyrl/tse' 0x446 create-glyph 'cyrl/tse.italicMotionSerifed' : glyph-proc
include [refer-glyph "u.motionSerifed"] AS_BASE
eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.motionSerifed'
select-variant 'cyrl/tse' 0x446
select-variant 'cyrl/tse.BGR'
glyph-block Letter-Cyrillic-Dzhe : begin glyph-block Letter-Cyrillic-Dzhe : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
@ -232,7 +241,7 @@ glyph-block Letter-Cyrillic-Dzhe : begin
include : MarkSet.p include : MarkSet.p
include : CyrDzheShape XH include : CyrDzheShape XH
create-glyph 'cyrl/dzhe.italicStraight' : glyph-proc create-glyph 'cyrl/dzhe.italicToothed' : glyph-proc
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow'] include [refer-glyph 'descenderBarBelow']
@ -333,6 +342,9 @@ glyph-block Letter-Cyrillic-El : begin
include : MarkSet.e include : MarkSet.e
include : CyrElShape XH include : CyrElShape XH
alias 'cyrl/El.BGR' null 'grek/Lambda'
alias 'cyrl/el.BGR' null 'turnv'
glyph-block Letter-Cyrillic-Zhe : begin glyph-block Letter-Cyrillic-Zhe : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
@ -580,7 +592,7 @@ glyph-block Letter-Cyrillic-Sha : begin
include : df.markSet.e include : df.markSet.e
include : CyrShaShape XH df include : CyrShaShape XH df
turned 'cyrl/sha.italicStraight' null 'm.normal' [DivFrame para.diversityM 3].middle (XH / 2) turned 'cyrl/sha.italicToothed' null 'm.normal' [DivFrame para.diversityM 3].middle (XH / 2)
create-glyph 'cyrl/sha.italicTailed' : glyph-proc create-glyph 'cyrl/sha.italicTailed' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
include [refer-glyph 'm.normal'] AS_BASE include [refer-glyph 'm.normal'] AS_BASE
@ -600,7 +612,7 @@ glyph-block Letter-Cyrillic-Sha : begin
select-variant 'cyrl/sha' 0x448 select-variant 'cyrl/sha' 0x448
alias 'cyrl/sha.BGR.straight' null 'cyrl/sha.italicStraight' alias 'cyrl/sha.BGR.toothed' null 'cyrl/sha.italicToothed'
alias 'cyrl/sha.BGR.tailed' null 'cyrl/sha.italicTailed' alias 'cyrl/sha.BGR.tailed' null 'cyrl/sha.italicTailed'
alias 'cyrl/sha.BGR.motionSerifed' null 'cyrl/sha.italicMotionSerifed' alias 'cyrl/sha.BGR.motionSerifed' null 'cyrl/sha.italicMotionSerifed'
alias 'cyrl/sha.BGR.motionSerifedTailed' null 'cyrl/sha.italicMotionSerifedTailed' alias 'cyrl/sha.BGR.motionSerifedTailed' null 'cyrl/sha.italicMotionSerifedTailed'
@ -626,7 +638,7 @@ glyph-block Letter-Cyrillic-Sha : begin
create-glyph 'cyrl/shcha.italic' : glyph-proc create-glyph 'cyrl/shcha.italic' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
set-width df.width set-width df.width
include [refer-glyph 'cyrl/sha.italicStraight'] AS_BASE include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE
include : CyrDescender df.rightSB (shift -- 0.05) include : CyrDescender df.rightSB (shift -- 0.05)
italic-variant 'cyrl/shcha' 0x449 italic-variant 'cyrl/shcha' 0x449
@ -635,7 +647,7 @@ glyph-block Letter-Cyrillic-Sha : begin
create-glyph 'cyrl/te.SRB' : glyph-proc create-glyph 'cyrl/te.SRB' : glyph-proc
local df : DivFrame para.diversityM 3 local df : DivFrame para.diversityM 3
set-width df.width set-width df.width
include [refer-glyph 'cyrl/sha.italicStraight'] AS_BASE include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE
include : refer-glyph "macronAbove" include : refer-glyph "macronAbove"
select-variant 'cyrl/te' 0x442 select-variant 'cyrl/te' 0x442

View file

@ -2273,6 +2273,7 @@ glyph-block Letter-Latin-K : begin
include : LowerKCursiveShape true include : LowerKCursiveShape true
select-variant 'k' 'k' select-variant 'k' 'k'
alias 'cyrl/ka.BGR' null 'k'
glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft
define [BBKLegShape top left right] : begin define [BBKLegShape top left right] : begin
@ -4554,6 +4555,7 @@ glyph-block Letter-Latin-Lower-N : begin
alias 'cyrl/pe.italicEarlessCornerTailed' null 'n.earlessCornerTailed' alias 'cyrl/pe.italicEarlessCornerTailed' null 'n.earlessCornerTailed'
alias 'cyrl/pe.italicEarlessRoundedStraight' null 'n.earlessRoundedStraight' alias 'cyrl/pe.italicEarlessRoundedStraight' null 'n.earlessRoundedStraight'
alias 'cyrl/pe.italicEarlessRoundedTailed' null 'n.earlessRoundedTailed' alias 'cyrl/pe.italicEarlessRoundedTailed' null 'n.earlessRoundedTailed'
alias 'cyrl/pe.BGR' null 'n'
with-related-glyphs 'n' 'nApostrophe' 0x149 : lambda [src srl] : glyph-proc with-related-glyphs 'n' 'nApostrophe' 0x149 : lambda [src srl] : glyph-proc
include : refer-glyph "commaAbove" include : refer-glyph "commaAbove"
@ -4798,14 +4800,14 @@ glyph-block Letter-Latin-Lower-U : begin
include : VBarRight RightSB 0 XH include : VBarRight RightSB 0 XH
if SLAB : begin if SLAB : begin
include : UTopLeftSerif XH include : UTopLeftSerif XH
include : UTopRightSerif XH if [not para.isItalic] : include : UTopRightSerif XH
include : UBottomRightSerif XH include : UBottomRightSerif XH
create-derived 'u.tailed' : glyph-proc create-derived 'u.tailed' : glyph-proc
include : RightwardTailedBar RightSB 0 XH include : RightwardTailedBar RightSB 0 XH
if SLAB : begin if SLAB : begin
include : UTopLeftSerif XH include : UTopLeftSerif XH
include : UBottomRightSerif XH if [not para.isItalic] : include : UTopRightSerif XH
create-derived 'u.motionSerifed' : glyph-proc create-derived 'u.motionSerifed' : glyph-proc
include : VBarRight RightSB 0 XH include : VBarRight RightSB 0 XH
@ -5300,6 +5302,7 @@ glyph-block Letter-Latin-Lower-M : begin
include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs) include : RightwardTailedBar df.rightSB 0 [SmallMSmoothHeight df] (sw -- df.mvs)
select-variant 'm' 'm' select-variant 'm' 'm'
alias 'cyrl/te.italicNormal' null 'm.normal' alias 'cyrl/te.italicNormal' null 'm.normal'
alias 'cyrl/te.italicTailed' null 'm.tailed' alias 'cyrl/te.italicTailed' null 'm.tailed'
alias 'cyrl/te.italicMotionSerifed' null 'm.motionSerifed' alias 'cyrl/te.italicMotionSerifed' null 'm.motionSerifed'
@ -5307,6 +5310,11 @@ glyph-block Letter-Latin-Lower-M : begin
refer-glyph 'm.normal' refer-glyph 'm.normal'
CyrDescender (Width * para.diversityM - SB) CyrDescender (Width * para.diversityM - SB)
alias 'cyrl/te.BGR.normal' null 'm.normal'
alias 'cyrl/te.BGR.tailed' null 'm.tailed'
alias 'cyrl/te.BGR.motionSerifed' null 'm.motionSerifed'
select-variant 'cyrl/te.BGR'
create-glyph 'mltail' 0x271 : glyph-proc create-glyph 'mltail' 0x271 : glyph-proc
local df : dfM local df : dfM
include : df.markSet.p include : df.markSet.p

View file

@ -39,7 +39,7 @@ export : define [buildCVSS sink para glyphStore] : begin
local st [pick-lookup sink lookupName].subtables.0 local st [pick-lookup sink lookupName].subtables.0
if [not st.(gn)] : set st.(gn) { } if [not st.(gn)] : set st.(gn) { }
set st.(gn).(gr.rank - 1) : gr.get glyph set st.(gn).(gr.rank - 1) : glyphStore.ensureExists : gr.get glyph
# ssxx # ssxx
foreach {name composition} para.variants.composites : if composition.tag : do foreach {name composition} para.variants.composites : if composition.tag : do

View file

@ -1,6 +1,6 @@
import [copy-language add-feature add-lookup BeginLookupBlock EndLookupBlock] from "./table-util" import [copy-language add-feature add-lookup BeginLookupBlock EndLookupBlock] from "./table-util"
export : define [buildLOCL sink para] : begin export : define [buildLOCL sink para glyphStore] : begin
local rec : BeginLookupBlock sink local rec : BeginLookupBlock sink
define cyrlSRB : copy-language sink 'cyrl_SRB ' 'cyrl_DFLT' define cyrlSRB : copy-language sink 'cyrl_SRB ' 'cyrl_DFLT'
@ -15,13 +15,13 @@ export : define [buildLOCL sink para] : begin
type 'gsub_single' type 'gsub_single'
subtables : list : if para.isItalic subtables : list : if para.isItalic
object object
'cyrl/be' 'cyrl/be.SRB' 'cyrl/be' : glyphStore.ensureExists 'cyrl/be.SRB'
'cyrl/ghe' 'cyrl/ghe.SRB' 'cyrl/ghe' : glyphStore.ensureExists 'cyrl/ghe.SRB'
'cyrl/de' 'cyrl/de.SRB' 'cyrl/de' : glyphStore.ensureExists 'cyrl/de.SRB'
'cyrl/pe' 'cyrl/pe.SRB' 'cyrl/pe' : glyphStore.ensureExists 'cyrl/pe.SRB'
'cyrl/te' 'cyrl/te.SRB' 'cyrl/te' : glyphStore.ensureExists 'cyrl/te.SRB'
object object
'cyrl/be' 'cyrl/be.SRB' 'cyrl/be' : glyphStore.ensureExists 'cyrl/be.SRB'
# BGR # BGR
define loclBGR : add-feature sink 'locl' define loclBGR : add-feature sink 'locl'
@ -29,22 +29,22 @@ export : define [buildLOCL sink para] : begin
loclBGR.lookups.push : add-lookup sink : object loclBGR.lookups.push : add-lookup sink : object
type 'gsub_single' type 'gsub_single'
subtables : list : object subtables : list : object
'cyrl/ve' 'cyrl/ve.BGR' 'cyrl/ve' : glyphStore.ensureExists 'cyrl/ve.BGR'
'cyrl/ghe' 'cyrl/ghe.italic' 'cyrl/ghe' : glyphStore.ensureExists 'cyrl/ghe.italic'
'cyrl/de' 'cyrl/de.BGR' 'cyrl/de' : glyphStore.ensureExists 'cyrl/de.BGR'
'cyrl/zhe' 'cyrl/zhe.BGR' 'cyrl/zhe' : glyphStore.ensureExists 'cyrl/zhe.BGR'
'cyrl/ze' 'cyrl/ze.BGR' 'cyrl/ze' : glyphStore.ensureExists 'cyrl/ze.BGR'
'cyrl/i' 'cyrl/i.BGR' 'cyrl/i' : glyphStore.ensureExists 'cyrl/i.BGR'
'cyrl/ibreve' 'cyrl/ibreve.BGR' 'cyrl/ibreve' : glyphStore.ensureExists 'cyrl/ibreve.BGR'
'cyrl/igrave' 'cyrl/igrave.BGR' 'cyrl/igrave' : glyphStore.ensureExists 'cyrl/igrave.BGR'
'cyrl/ka' 'k' 'cyrl/ka' : glyphStore.ensureExists 'cyrl/ka.BGR'
'cyrl/El' 'Lambda' 'cyrl/El' : glyphStore.ensureExists 'cyrl/El.BGR'
'cyrl/el' 'turnv' 'cyrl/el' : glyphStore.ensureExists 'cyrl/el.BGR'
'cyrl/pe' 'n' 'cyrl/pe' : glyphStore.ensureExists 'cyrl/pe.BGR'
'cyrl/te' 'm.normal' 'cyrl/te' : glyphStore.ensureExists 'cyrl/te.BGR'
'cyrl/sha' 'cyrl/sha.BGR' 'cyrl/sha' : glyphStore.ensureExists 'cyrl/sha.BGR'
'cyrl/shcha' 'cyrl/shcha.BGR' 'cyrl/shcha' : glyphStore.ensureExists 'cyrl/shcha.BGR'
'cyrl/yu' 'cyrl/yu.BGR' 'cyrl/yu' : glyphStore.ensureExists 'cyrl/yu.BGR'
'cyrl/tse' 'cyrl/tse.italic' 'cyrl/tse' : glyphStore.ensureExists 'cyrl/tse.BGR'
EndLookupBlock.Front rec sink EndLookupBlock.Front rec sink

View file

@ -47,7 +47,7 @@ define [buildGSUB para glyphStore markGlyphs] : begin
# locl # locl
# Builds last, but the lookups are added into the beginning of the lookup list # Builds last, but the lookups are added into the beginning of the lookup list
buildLOCL gsub para buildLOCL gsub para glyphStore
MoveBackUtilityLookups gsub MoveBackUtilityLookups gsub
finalizeTable gsub finalizeTable gsub

View file

@ -34,6 +34,11 @@ class GlyphStore {
if (!g) throw new Error(`Glyph ${name} doesn't exist.`); if (!g) throw new Error(`Glyph ${name} doesn't exist.`);
return g; return g;
} }
ensureExists(name) {
const g = this.nameForward.get(name);
if (!g) throw new Error(`Glyph ${name} doesn't exist.`);
return name;
}
queryNameOf(g) { queryNameOf(g) {
return this.nameBackward.get(g); return this.nameBackward.get(g);
} }

View file

@ -562,6 +562,7 @@ description = '`m` with normal middle leg, touching the baseline'
selector.m = 'normal' selector.m = 'normal'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.shortleg] [prime.m.variants.shortleg]
rank = 2 rank = 2
@ -569,6 +570,7 @@ description = '`m` with shorter middle leg, like Ubuntu Mono'
selector.m = 'shortleg' selector.m = 'shortleg'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.tailed] [prime.m.variants.tailed]
rank = 3 rank = 3
@ -576,6 +578,7 @@ description = '`m` with normal middle leg, touching the baseline, and a curly ta
selector.m = 'tailed' selector.m = 'tailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicTailed" selectorItalic."cyrl/te" = "italicTailed"
selector."cyrl/te.BGR" = "tailed"
[prime.m.variants.shortleg-tailed] [prime.m.variants.shortleg-tailed]
rank = 4 rank = 4
@ -583,6 +586,7 @@ description = '`m` with shorter middle leg, like Ubuntu Mono, and a curly tail'
selector.m = 'shortlegTailed' selector.m = 'shortlegTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicTailed" selectorItalic."cyrl/te" = "italicTailed"
selector."cyrl/te.BGR" = "tailed"
[prime.m.variants.earless-corner-double-arch] [prime.m.variants.earless-corner-double-arch]
rank = 5 rank = 5
@ -590,6 +594,7 @@ description = "Earless (corner top-left) `m` with normal middle leg touching bas
selector.m = 'earlessCornerDoubleArch' selector.m = 'earlessCornerDoubleArch'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-shortleg] [prime.m.variants.earless-corner-double-arch-shortleg]
rank = 6 rank = 6
@ -597,6 +602,7 @@ description = "Earless (corner top-left) `m` with a shorter middle leg like Ubun
selector.m = 'earlessCornerDoubleArchShortleg' selector.m = 'earlessCornerDoubleArchShortleg'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-tailed] [prime.m.variants.earless-corner-double-arch-tailed]
rank = 7 rank = 7
@ -604,6 +610,7 @@ description = "Earless (corner top-left) `m` with normal middle leg touching bas
selector.m = 'earlessCornerDoubleArchTailed' selector.m = 'earlessCornerDoubleArchTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-corner-double-arch-shortleg-tailed] [prime.m.variants.earless-corner-double-arch-shortleg-tailed]
rank = 8 rank = 8
@ -611,6 +618,7 @@ description = "Earless (corner top-left) `m` with a shorter middle leg like Ubun
selector.m = 'earlessCornerDoubleArchShortlegTailed' selector.m = 'earlessCornerDoubleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch] [prime.m.variants.earless-rounded-double-arch]
rank = 9 rank = 9
@ -618,6 +626,7 @@ description = "Earless (rounded top-left) `m` with normal middle leg touching ba
selector.m = 'earlessRoundedDoubleArch' selector.m = 'earlessRoundedDoubleArch'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch-shortleg] [prime.m.variants.earless-rounded-double-arch-shortleg]
rank = 10 rank = 10
@ -632,6 +641,7 @@ description = "Earless (rounded top-left) `m` with normal middle leg touching ba
selector.m = 'earlessRoundedDoubleArchTailed' selector.m = 'earlessRoundedDoubleArchTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-rounded-double-arch-shortleg-tailed] [prime.m.variants.earless-rounded-double-arch-shortleg-tailed]
rank = 12 rank = 12
@ -639,6 +649,7 @@ description = "Earless (rounded top-left) `m` with a shorter middle leg like Ubu
selector.m = 'earlessRoundedDoubleArchShortlegTailed' selector.m = 'earlessRoundedDoubleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch] [prime.m.variants.earless-single-arch]
rank = 13 rank = 13
@ -646,6 +657,7 @@ description = "Earless (single-arch) `m` with normal middle leg touching baselin
selector.m = 'earlessSingleArch' selector.m = 'earlessSingleArch'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-shortleg] [prime.m.variants.earless-single-arch-shortleg]
rank = 14 rank = 14
@ -653,6 +665,7 @@ description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu M
selector.m = 'earlessSingleArchShortleg' selector.m = 'earlessSingleArchShortleg'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-tailed] [prime.m.variants.earless-single-arch-tailed]
rank = 15 rank = 15
@ -660,6 +673,7 @@ description = "Earless (single-arch) `m` with normal middle leg touching baselin
selector.m = 'earlessSingleArchTailed' selector.m = 'earlessSingleArchTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.earless-single-arch-shortleg-tailed] [prime.m.variants.earless-single-arch-shortleg-tailed]
rank = 16 rank = 16
@ -667,6 +681,7 @@ description = "Earless (single-arch) `m` with a shorter middle leg like Ubuntu M
selector.m = 'earlessSingleArchShortlegTailed' selector.m = 'earlessSingleArchShortlegTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicNormal" selectorItalic."cyrl/te" = "italicNormal"
selector."cyrl/te.BGR" = "normal"
[prime.m.variants.motion-serifed] [prime.m.variants.motion-serifed]
rank = 17 rank = 17
@ -674,6 +689,7 @@ description = "`m` with motion serifs, normal middle leg touching baseline"
selector.m = 'motionSerifed' selector.m = 'motionSerifed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicMotionSerifed" selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-shortleg] [prime.m.variants.motion-serifed-shortleg]
rank = 18 rank = 18
@ -681,6 +697,7 @@ description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono"
selector.m = 'motionSerifedShortleg' selector.m = 'motionSerifedShortleg'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicMotionSerifed" selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-tailed] [prime.m.variants.motion-serifed-tailed]
rank = 19 rank = 19
@ -688,6 +705,7 @@ description = "`m` with motion serifs, normal middle leg touching baseline, and
selector.m = 'motionSerifedTailed' selector.m = 'motionSerifedTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicMotionSerifed" selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
[prime.m.variants.motion-serifed-shortleg-tailed] [prime.m.variants.motion-serifed-shortleg-tailed]
rank = 20 rank = 20
@ -695,6 +713,7 @@ description = "`m` with motion serifs, a shorter middle leg like Ubuntu Mono, an
selector.m = 'motionSerifedShortlegTailed' selector.m = 'motionSerifedShortlegTailed'
selectorUpright."cyrl/te" = "upright" selectorUpright."cyrl/te" = "upright"
selectorItalic."cyrl/te" = "italicMotionSerifed" selectorItalic."cyrl/te" = "italicMotionSerifed"
selector."cyrl/te.BGR" = "motionSerifed"
@ -918,11 +937,14 @@ selector.u = "toothed"
selectorUpright."cyrl/i" = "upright" selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicToothed" selectorItalic."cyrl/i" = "italicToothed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicStraight" selectorItalic."cyrl/sha" = "italicToothed"
selectorUpright."cyrl/sha.BGR" = "straight"
selectorItalic."cyrl/sha.BGR" = "straight"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicStraight" selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.toothless-corner] [prime.u.variants.toothless-corner]
rank = 2 rank = 2
@ -931,11 +953,14 @@ selector.u = 'toothlessCorner'
selectorUpright."cyrl/i" = "upright" selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicToothed" selectorItalic."cyrl/i" = "italicToothed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicStraight" selectorItalic."cyrl/sha" = "italicToothed"
selectorUpright."cyrl/sha.BGR" = "straight"
selectorItalic."cyrl/sha.BGR" = "straight"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicStraight" selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.toothless-rounded] [prime.u.variants.toothless-rounded]
rank = 3 rank = 3
@ -944,11 +969,14 @@ selector.u = "toothlessRounded"
selectorUpright."cyrl/i" = "upright" selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicToothed" selectorItalic."cyrl/i" = "italicToothed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicStraight" selectorItalic."cyrl/sha" = "italicToothed"
selectorUpright."cyrl/sha.BGR" = "straight"
selectorItalic."cyrl/sha.BGR" = "straight"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicStraight" selectorItalic."cyrl/dzhe" = "italicToothed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "toothed"
selector."cyrl/sha.BGR" = "toothed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.tailed] [prime.u.variants.tailed]
rank = 4 rank = 4
@ -958,10 +986,13 @@ selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicTailed" selectorItalic."cyrl/i" = "italicTailed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicTailed" selectorItalic."cyrl/sha" = "italicTailed"
selectorUpright."cyrl/sha.BGR" = "tailed"
selectorItalic."cyrl/sha.BGR" = "tailed"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicTailed" selectorItalic."cyrl/dzhe" = "italicTailed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicToothed"
selector."cyrl/i.BGR" = "tailed"
selector."cyrl/sha.BGR" = "tailed"
selector."cyrl/tse.BGR" = "toothed"
[prime.u.variants.motion-serifed] [prime.u.variants.motion-serifed]
rank = 5 rank = 5
@ -971,10 +1002,13 @@ selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicMotionSerifed" selectorItalic."cyrl/i" = "italicMotionSerifed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicMotionSerifed" selectorItalic."cyrl/sha" = "italicMotionSerifed"
selectorUpright."cyrl/sha.BGR" = "motionSerifed"
selectorItalic."cyrl/sha.BGR" = "motionSerifed"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicMotionSerifed" selectorItalic."cyrl/dzhe" = "italicMotionSerifed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicMotionSerifed"
selector."cyrl/i.BGR" = "motionSerifed"
selector."cyrl/sha.BGR" = "motionSerifed"
selector."cyrl/tse.BGR" = "motionSerifed"
[prime.u.variants.motion-serifed-tailed] [prime.u.variants.motion-serifed-tailed]
rank = 6 rank = 6
@ -984,10 +1018,13 @@ selectorUpright."cyrl/i" = "upright"
selectorItalic."cyrl/i" = "italicMotionSerifedTailed" selectorItalic."cyrl/i" = "italicMotionSerifedTailed"
selectorUpright."cyrl/sha" = "upright" selectorUpright."cyrl/sha" = "upright"
selectorItalic."cyrl/sha" = "italicMotionSerifedTailed" selectorItalic."cyrl/sha" = "italicMotionSerifedTailed"
selectorUpright."cyrl/sha.BGR" = "motionSerifedTailed"
selectorItalic."cyrl/sha.BGR" = "motionSerifedTailed"
selectorUpright."cyrl/dzhe" = "upright" selectorUpright."cyrl/dzhe" = "upright"
selectorItalic."cyrl/dzhe" = "italicMotionSerifedTailed" selectorItalic."cyrl/dzhe" = "italicMotionSerifedTailed"
selectorUpright."cyrl/tse" = "upright"
selectorItalic."cyrl/tse" = "italicMotionSerifed"
selector."cyrl/i.BGR" = "motionSerifedTailed"
selector."cyrl/sha.BGR" = "motionSerifedTailed"
selector."cyrl/tse.BGR" = "motionSerifed"
[prime.v] [prime.v]
sampler = 'vV' sampler = 'vV'