This commit is contained in:
be5invis 2023-05-27 04:48:06 -07:00
parent a7ca29b14d
commit d53ce25062
5 changed files with 158 additions and 97 deletions

View file

@ -57,6 +57,11 @@ glyph-block Letter-Latin-Lower-B : begin
flat [mix SB 0 0.7] (yOverlay - Ascender * 0.1) flat [mix SB 0 0.7] (yOverlay - Ascender * 0.1)
curl [mix SB RightSB 0.625] (yOverlay + Ascender * 0.05) curl [mix SB RightSB 0.625] (yOverlay + Ascender * 0.05)
create-glyph "latn/be.\(suffix)" : glyph-proc
include [refer-glyph "b.\(suffix)"] AS_BASE ALSO_METRICS
include : HBar.t (SB - O) [mix SB RightSB 0.9] Ascender
if doTS : include : VSerif.dr [mix SB RightSB 0.9] Ascender VJut
create-glyph "bHookTop.\(suffix)" : glyph-proc create-glyph "bHookTop.\(suffix)" : glyph-proc
include : MarkSet.b include : MarkSet.b
include : Body XH include : Body XH
@ -67,6 +72,7 @@ glyph-block Letter-Latin-Lower-B : begin
select-variant 'b' 'b' select-variant 'b' 'b'
select-variant 'bBar' 0x180 (follow -- 'b') select-variant 'bBar' 0x180 (follow -- 'b')
select-variant 'bSlash' 0x2422 (follow -- 'b') select-variant 'bSlash' 0x2422 (follow -- 'b')
select-variant 'latn/be' 0x183 (follow -- 'b')
derive-composites 'bPalatalHook' 0x1D80 'b' : PalatalHook.r derive-composites 'bPalatalHook' 0x1D80 'b' : PalatalHook.r
x -- [mix (Middle + CorrectionOMidS) RightSB 0.75] x -- [mix (Middle + CorrectionOMidS) RightSB 0.75]
@ -77,16 +83,10 @@ glyph-block Letter-Latin-Lower-B : begin
CreateAccentedComposition 'bTildeOver' 0x1D6C 'b' 'tildeOverOnExension' CreateAccentedComposition 'bTildeOver' 0x1D6C 'b' 'tildeOverOnExension'
select-variant 'bHookTop' 0x253 select-variant 'bHookTop' 0x253
derive-glyphs 'bdot' 0x1E03 'b' : lambda [src gr] : glyph-proc derive-multi-part-glyphs 'bdot' 0x1E03 {'b' 'dotAbove'} : lambda [srcs gr] : glyph-proc
include : refer-glyph "dotAbove" local { base mark } srcs
include : Translate (Width + HalfStroke) 0 include [refer-glyph base] AS_BASE ALSO_METRICS
include [refer-glyph src] AS_BASE include : WithTransform [ApparentTranslate HalfStroke (XH - Ascender)] [refer-glyph mark]
derive-glyphs 'latinbe' 0x183 'b' : lambda [src gr] : glyph-proc
include [refer-glyph src] AS_BASE
include : HBar.t (SB - O) [mix SB RightSB 0.9] Ascender
if SLAB : begin
include : VSerif.dr [mix SB RightSB 0.9] Ascender VJut
glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft
create-glyph 'mathbb/b' 0x1D553 : glyph-proc create-glyph 'mathbb/b' 0x1D553 : glyph-proc

View file

@ -154,9 +154,10 @@ glyph-block Letter-Latin-Lower-H : begin
if SLAB : begin if SLAB : begin
include : HSerif.lt (RightSB - Stroke * HVContrast) XH SideJut include : HSerif.lt (RightSB - Stroke * HVContrast) XH SideJut
derive-glyphs 'hDot' 0x1E23 'h' : lambda [src gr] : glyph-proc derive-multi-part-glyphs 'hDot' 0x1E23 { 'h' 'dotAbove' } : lambda [srcs gr] : glyph-proc
include : WithTransform [ApparentTranslate (Width + HVContrast * HalfStroke) 0] : refer-glyph "dotAbove" local { base mark } srcs
include [refer-glyph src] AS_BASE include [refer-glyph base] AS_BASE ALSO_METRICS
include : WithTransform [ApparentTranslate (HVContrast * HalfStroke) (XH - Ascender)] [refer-glyph mark]
derive-glyphs 'hCedilla' 0x1E29 'h' : lambda [src gr] : glyph-proc derive-glyphs 'hCedilla' 0x1E29 'h' : lambda [src gr] : glyph-proc
local shift : Width + SB - Middle + HalfStroke * HVContrast local shift : Width + SB - Middle + HalfStroke * HVContrast

View file

@ -90,7 +90,7 @@ glyph-block Letter-Latin-Upper-H : begin
define HConfig : object define HConfig : object
serifless { HShape HTurned SLAB-NONE false } serifless { HShape HTurned SLAB-NONE false }
tailed { TailedHShape HTurned SLAB-NONE false } tailedSerifless { TailedHShape HTurned SLAB-NONE false }
topLeftSerifed { HShape HTurned SLAB-TOP-LEFT false } topLeftSerifed { HShape HTurned SLAB-TOP-LEFT false }
tailedTopLeftSerifed { TailedHShape HTurned SLAB-TOP-LEFT false } tailedTopLeftSerifed { TailedHShape HTurned SLAB-TOP-LEFT false }
topLeftBottomRightSerifed { HShape HTurned SLAB-TOP-LEFT-BOTTOM-RIGHT true } topLeftBottomRightSerifed { HShape HTurned SLAB-TOP-LEFT-BOTTOM-RIGHT true }

View file

@ -291,7 +291,7 @@ class VbStageAlternative {
ans.assignments.set(this.stage, this.key); ans.assignments.set(this.stage, this.key);
// RankGroup // RankGroup
if (this.groupRank) ans.groupRank += this.groupRank; if (this.groupRank) ans.groupRank += this.evalValue(this.groupRank, localState);
else if (this.stage === globalState.entry) ans.groupRank += this.rank; else if (this.stage === globalState.entry) ans.groupRank += this.rank;
if (this.keyAffix) ans.addKeyAffix(this.mode, this.evalValue(this.keyAffix, localState)); if (this.keyAffix) ans.addKeyAffix(this.mode, this.evalValue(this.keyAffix, localState));
@ -317,6 +317,7 @@ class VbStageAlternative {
} }
evalValue(expr, localState) { evalValue(expr, localState) {
if (typeof expr === "number") return expr;
if (typeof expr === "string") return expr; if (typeof expr === "string") return expr;
if (expr.if) { if (expr.if) {
const condition = this.evalCondition(expr.if, localState); const condition = this.evalCondition(expr.if, localState);

View file

@ -307,21 +307,21 @@ descriptionAffix = "top serif"
descriptionJoiner = "without" descriptionJoiner = "without"
selectorAffix.G = "serifless" selectorAffix.G = "serifless"
selectorAffix."G/sansSerif" = "serifless" selectorAffix."G/sansSerif" = "serifless"
selectorAffix.GHookTop = "serifless" selectorAffix.GHookTop = "serifed"
[prime.capital-g.variants-buildup.stages.top-serif.serifed] [prime.capital-g.variants-buildup.stages.top-serif.serifed]
rank = 2 rank = 2
descriptionAffix = "top serif" descriptionAffix = "top serif"
selectorAffix.G = "serifed" selectorAffix.G = "serifed"
selectorAffix."G/sansSerif" = "serifed" selectorAffix."G/sansSerif" = "serifless"
selectorAffix.GHookTop = "serifed" selectorAffix.GHookTop = "serifed"
[prime.capital-g.variants-buildup.stages.top-serif.inward-serifed] [prime.capital-g.variants-buildup.stages.top-serif.inward-serifed]
rank = 3 rank = 3
descriptionAffix = "inward top serif" descriptionAffix = "inward top serif"
selectorAffix.G = "inwardSerifed" selectorAffix.G = "inwardSerifed"
selectorAffix."G/sansSerif" = "inwardSerifed" selectorAffix."G/sansSerif" = "serifless"
selectorAffix.GHookTop = "inwardSerifed" selectorAffix.GHookTop = "serifed"
[prime.capital-g.variants-buildup.stages.hook.hookless] [prime.capital-g.variants-buildup.stages.hook.hookless]
rank = 1 rank = 1
@ -802,51 +802,61 @@ tag = "cv16"
[prime.capital-q.variants.curly-tailed] [prime.capital-q.variants.curly-tailed]
rank = 1 rank = 1
groupRank = 1
description = "`Q` with a curly tail" description = "`Q` with a curly tail"
selector.Q = "curlyTailed" selector.Q = "curlyTailed"
[prime.capital-q.variants.crossing-curly-tailed] [prime.capital-q.variants.crossing-curly-tailed]
rank = 2 rank = 2
groupRank = 1
description = "`Q` with a curly tail" description = "`Q` with a curly tail"
selector.Q = "crossingCurlyTailed" selector.Q = "crossingCurlyTailed"
[prime.capital-q.variants.straight] [prime.capital-q.variants.straight]
rank = 3 rank = 3
groupRank = 1
description = "`Q` with a straight tail like in the old versions" description = "`Q` with a straight tail like in the old versions"
selector.Q = "straight" selector.Q = "straight"
[prime.capital-q.variants.crossing] [prime.capital-q.variants.crossing]
rank = 4 rank = 4
groupRank = 1
description = "`Q` with a tail crossing the ring" description = "`Q` with a tail crossing the ring"
selector.Q = "crossing" selector.Q = "crossing"
[prime.capital-q.variants.crossing-baseline] [prime.capital-q.variants.crossing-baseline]
rank = 5 rank = 5
groupRank = 1
description = "`Q` with a tail above baseline crossing the ring" description = "`Q` with a tail above baseline crossing the ring"
selector.Q = "crossingBaseline" selector.Q = "crossingBaseline"
[prime.capital-q.variants.vertical-crossing] [prime.capital-q.variants.vertical-crossing]
rank = 6 rank = 6
groupRank = 1
description = "`Q` with a vertical tail crossing the ring" description = "`Q` with a vertical tail crossing the ring"
selector.Q = "verticalCrossing" selector.Q = "verticalCrossing"
[prime.capital-q.variants.horizontal-tailed] [prime.capital-q.variants.horizontal-tailed]
rank = 7 rank = 7
groupRank = 2
description = "`Q` with a horizontal tail, like Univers" description = "`Q` with a horizontal tail, like Univers"
selector.Q = "horizontalTailed" selector.Q = "horizontalTailed"
[prime.capital-q.variants.detached-tailed] [prime.capital-q.variants.detached-tailed]
rank = 8 rank = 8
groupRank = 2
description = "`Q` with a oblique tail detached" description = "`Q` with a oblique tail detached"
selector.Q = "detachedTailed" selector.Q = "detachedTailed"
[prime.capital-q.variants.detached-bend-tailed] [prime.capital-q.variants.detached-bend-tailed]
rank = 9 rank = 9
groupRank = 2
description = "`Q` with a bend tail detached" description = "`Q` with a bend tail detached"
selector.Q = "detachedBendTailed" selector.Q = "detachedBendTailed"
[prime.capital-q.variants.open-swash] [prime.capital-q.variants.open-swash]
rank = 10 rank = 10
groupRank = 2
description = "`Q` with open contour and swash-y shape" description = "`Q` with open contour and swash-y shape"
selector.Q = "openSwash" selector.Q = "openSwash"
@ -1793,11 +1803,12 @@ sampler = "f"
tag = "cv31" tag = "cv31"
[prime.f.variants-buildup] [prime.f.variants-buildup]
entry = "hook" entry = "tail"
descriptionLeader = "`f`" descriptionLeader = "`f`"
[prime.f.variants-buildup.stages.hook."*"] [prime.f.variants-buildup.stages.hook."*"]
next = "tail" next = "crossbar"
mode = "prepend"
[prime.f.variants-buildup.stages.hook.full] [prime.f.variants-buildup.stages.hook.full]
rank = 1 rank = 1
@ -1828,7 +1839,7 @@ selectorAffix.fLTail = "flatHook"
selectorAffix.dotlessjWithStrokeAndHook = "flatHook" selectorAffix.dotlessjWithStrokeAndHook = "flatHook"
[prime.f.variants-buildup.stages.tail."*"] [prime.f.variants-buildup.stages.tail."*"]
next = "crossbar" next = "hook"
[prime.f.variants-buildup.stages.tail.serifless] [prime.f.variants-buildup.stages.tail.serifless]
rank = 1 rank = 1
@ -2080,8 +2091,8 @@ descriptionAffix = "serif at top left"
selectorAffix.h = "topLeftSerifed" selectorAffix.h = "topLeftSerifed"
selectorAffix."h/descBase" = "topLeftSerifed" selectorAffix."h/descBase" = "topLeftSerifed"
selectorAffix."h/sansSerif" = "serifless" selectorAffix."h/sansSerif" = "serifless"
selectorAffix.hHookTop = "topLeftSerifed" selectorAffix.hHookTop = "serifless"
selectorAffix.hHookTopLTail = "topLeftSerifed" selectorAffix.hHookTopLTail = "serifless"
selectorAffix.heng = "topLeftSerifed" selectorAffix.heng = "topLeftSerifed"
selectorAffix."cyrl/shha" = "topLeftSerifed" selectorAffix."cyrl/shha" = "topLeftSerifed"
@ -2092,7 +2103,7 @@ selectorAffix.h = "motionSerifed"
selectorAffix."h/descBase" = "topLeftSerifed" selectorAffix."h/descBase" = "topLeftSerifed"
selectorAffix."h/sansSerif" = "serifless" selectorAffix."h/sansSerif" = "serifless"
selectorAffix.hHookTop = "motionSerifed" selectorAffix.hHookTop = "motionSerifed"
selectorAffix.hHookTopLTail = "motionSerifed" selectorAffix.hHookTopLTail = "serifless"
selectorAffix.heng = "topLeftSerifed" selectorAffix.heng = "topLeftSerifed"
selectorAffix."cyrl/shha" = "motionSerifed" selectorAffix."cyrl/shha" = "motionSerifed"
@ -2114,6 +2125,7 @@ tag = "cv34"
[prime.i.variants.serifed] [prime.i.variants.serifed]
rank = 1 rank = 1
groupRank = 1
description = "Serifed `i`" description = "Serifed `i`"
selector.dotlessi = "serifed" selector.dotlessi = "serifed"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2122,6 +2134,7 @@ selector."dotlessi/ital" = "tailedSerifed"
[prime.i.variants.zshaped] [prime.i.variants.zshaped]
rank = 2 rank = 2
groupRank = 1
description = "Z-shaped `i`" description = "Z-shaped `i`"
selector.dotlessi = "zshaped" selector.dotlessi = "zshaped"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2130,6 +2143,7 @@ selector."dotlessi/ital" = "tailedSerifed"
[prime.i.variants.serifless] [prime.i.variants.serifless]
rank = 3 rank = 3
groupRank = 1
description = "`i` like a straight line" description = "`i` like a straight line"
selector.dotlessi = "serifless" selector.dotlessi = "serifless"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2138,6 +2152,7 @@ selector."dotlessi/ital" = "tailed"
[prime.i.variants.hooky] [prime.i.variants.hooky]
rank = 4 rank = 4
groupRank = 1
description = "Hooky `i`" description = "Hooky `i`"
selector.dotlessi = "hooky" selector.dotlessi = "hooky"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2146,6 +2161,7 @@ selector."dotlessi/ital" = "tailedSerifed"
[prime.i.variants.hooky-bottom] [prime.i.variants.hooky-bottom]
rank = 5 rank = 5
groupRank = 1
description = "`i` with a sharp-turning horizontal tail" description = "`i` with a sharp-turning horizontal tail"
selector.dotlessi = "hookyBottom" selector.dotlessi = "hookyBottom"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2154,6 +2170,7 @@ selector."dotlessi/ital" = "tailed"
[prime.i.variants.serifed-asymmetric] [prime.i.variants.serifed-asymmetric]
rank = 6 rank = 6
groupRank = 1
description = "`i` with shorter top serif and full bottom serif" description = "`i` with shorter top serif and full bottom serif"
selector.dotlessi = "serifedAsymmetric" selector.dotlessi = "serifedAsymmetric"
selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/sansSerif" = "serifless"
@ -2162,6 +2179,7 @@ selector."dotlessi/ital" = "tailedSerifed"
[prime.i.variants.tailed] [prime.i.variants.tailed]
rank = 7 rank = 7
groupRank = 2
description = "`i` with curly tail" description = "`i` with curly tail"
selector.dotlessi = "tailed" selector.dotlessi = "tailed"
selector."dotlessi/sansSerif" = "tailed" selector."dotlessi/sansSerif" = "tailed"
@ -2170,6 +2188,7 @@ selector."dotlessi/ital" = "tailed"
[prime.i.variants.tailed-serifed] [prime.i.variants.tailed-serifed]
rank = 8 rank = 8
groupRank = 2
description = "`i` with top serif and curly tail" description = "`i` with top serif and curly tail"
selector.dotlessi = "tailedSerifed" selector.dotlessi = "tailedSerifed"
selector."dotlessi/sansSerif" = "tailed" selector."dotlessi/sansSerif" = "tailed"
@ -2178,6 +2197,7 @@ selector."dotlessi/ital" = "tailedSerifed"
[prime.i.variants.flat-tailed] [prime.i.variants.flat-tailed]
rank = 9 rank = 9
groupRank = 2
description = "`i` with curly-then-flat tail" description = "`i` with curly-then-flat tail"
selector.dotlessi = "flatTailed" selector.dotlessi = "flatTailed"
selector."dotlessi/sansSerif" = "flatTailed" selector."dotlessi/sansSerif" = "flatTailed"
@ -2186,6 +2206,7 @@ selector."dotlessi/ital" = "flatTailed"
[prime.i.variants.serifed-flat-tailed] [prime.i.variants.serifed-flat-tailed]
rank = 10 rank = 10
groupRank = 2
description = "`i` with top serif and curly-then-flat tail" description = "`i` with top serif and curly-then-flat tail"
selector.dotlessi = "serifedFlatTailed" selector.dotlessi = "serifedFlatTailed"
selector."dotlessi/sansSerif" = "flatTailed" selector."dotlessi/sansSerif" = "flatTailed"
@ -2194,6 +2215,7 @@ selector."dotlessi/ital" = "serifedFlatTailed"
[prime.i.variants.diagonal-tailed] [prime.i.variants.diagonal-tailed]
rank = 11 rank = 11
groupRank = 2
description = "`i` with diagonal tail" description = "`i` with diagonal tail"
selector.dotlessi = "diagonalTailed" selector.dotlessi = "diagonalTailed"
selector."dotlessi/sansSerif" = "diagonalTailed" selector."dotlessi/sansSerif" = "diagonalTailed"
@ -2202,6 +2224,7 @@ selector."dotlessi/ital" = "diagonalTailed"
[prime.i.variants.serifed-diagonal-tailed] [prime.i.variants.serifed-diagonal-tailed]
rank = 12 rank = 12
groupRank = 2
description = "`i` with top serif and diagonal tail" description = "`i` with top serif and diagonal tail"
selector.dotlessi = "serifedDiagonalTailed" selector.dotlessi = "serifedDiagonalTailed"
selector."dotlessi/sansSerif" = "diagonalTailed" selector."dotlessi/sansSerif" = "diagonalTailed"
@ -2383,6 +2406,7 @@ tag = "cv37"
[prime.l.variants.serifed] [prime.l.variants.serifed]
rank = 1 rank = 1
groupRank = 1
description = "Serifed `l`" description = "Serifed `l`"
selector.l = "serifed" selector.l = "serifed"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2396,6 +2420,7 @@ selector.lyogh = "hooky"
[prime.l.variants.serifless] [prime.l.variants.serifless]
rank = 2 rank = 2
groupRank = 1
description = "`l` like a straight line" description = "`l` like a straight line"
selector.l = "serifless" selector.l = "serifless"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2409,6 +2434,7 @@ selector.lyogh = "serifless"
[prime.l.variants.hooky] [prime.l.variants.hooky]
rank = 3 rank = 3
groupRank = 1
description = "Hooky `l`" description = "Hooky `l`"
selector.l = "hooky" selector.l = "hooky"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2422,6 +2448,7 @@ selector.lyogh = "hooky"
[prime.l.variants.zshaped] [prime.l.variants.zshaped]
rank = 4 rank = 4
groupRank = 1
description = "Z-shaped `l`" description = "Z-shaped `l`"
selector.l = "zshaped" selector.l = "zshaped"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2435,6 +2462,7 @@ selector.lyogh = "hooky"
[prime.l.variants.hooky-bottom] [prime.l.variants.hooky-bottom]
rank = 5 rank = 5
groupRank = 1
description = "`l` with a straight sharp-turning horizontal tail" description = "`l` with a straight sharp-turning horizontal tail"
selector.l = "hookyBottom" selector.l = "hookyBottom"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2448,6 +2476,7 @@ selector.lyogh = "serifless"
[prime.l.variants.serifed-asymmetric] [prime.l.variants.serifed-asymmetric]
rank = 6 rank = 6
groupRank = 1
description = "`l` with shorter top serif and full bottom serif" description = "`l` with shorter top serif and full bottom serif"
selector.l = "serifedAsymmetric" selector.l = "serifedAsymmetric"
selector."l/sansSerif" = "serifless" selector."l/sansSerif" = "serifless"
@ -2461,6 +2490,7 @@ selector.lyogh = "hooky"
[prime.l.variants.tailed] [prime.l.variants.tailed]
rank = 7 rank = 7
groupRank = 2
description = "`l` with curly tail" description = "`l` with curly tail"
selector.l = "tailed" selector.l = "tailed"
selector."l/sansSerif" = "tailed" selector."l/sansSerif" = "tailed"
@ -2474,6 +2504,7 @@ selector.lyogh = "serifless"
[prime.l.variants.tailed-serifed] [prime.l.variants.tailed-serifed]
rank = 8 rank = 8
groupRank = 2
description = "`l` with top serif and curly tail" description = "`l` with top serif and curly tail"
selector.l = "tailedSerifed" selector.l = "tailedSerifed"
selector."l/sansSerif" = "tailed" selector."l/sansSerif" = "tailed"
@ -2487,6 +2518,7 @@ selector.lyogh = "hooky"
[prime.l.variants.flat-tailed] [prime.l.variants.flat-tailed]
rank = 9 rank = 9
groupRank = 2
description = "`l` with curly-then-flat tail" description = "`l` with curly-then-flat tail"
selector.l = "flatTailed" selector.l = "flatTailed"
selector."l/sansSerif" = "flatTailed" selector."l/sansSerif" = "flatTailed"
@ -2500,6 +2532,7 @@ selector.lyogh = "serifless"
[prime.l.variants.serifed-flat-tailed] [prime.l.variants.serifed-flat-tailed]
rank = 10 rank = 10
groupRank = 2
description = "`l` with top serif and curly-then-flat tail" description = "`l` with top serif and curly-then-flat tail"
selector.l = "serifedFlatTailed" selector.l = "serifedFlatTailed"
selector."l/sansSerif" = "flatTailed" selector."l/sansSerif" = "flatTailed"
@ -2513,6 +2546,7 @@ selector.lyogh = "hooky"
[prime.l.variants.diagonal-tailed] [prime.l.variants.diagonal-tailed]
rank = 11 rank = 11
groupRank = 2
description = "`l` with diagonal tail" description = "`l` with diagonal tail"
selector.l = "diagonalTailed" selector.l = "diagonalTailed"
selector."l/sansSerif" = "diagonalTailed" selector."l/sansSerif" = "diagonalTailed"
@ -2526,6 +2560,7 @@ selector.lyogh = "serifless"
[prime.l.variants.serifed-diagonal-tailed] [prime.l.variants.serifed-diagonal-tailed]
rank = 12 rank = 12
groupRank = 2
description = "`l` with top serif and diagonal tail" description = "`l` with top serif and diagonal tail"
selector.l = "serifedDiagonalTailed" selector.l = "serifedDiagonalTailed"
selector."l/sansSerif" = "diagonalTailed" selector."l/sansSerif" = "diagonalTailed"
@ -2549,8 +2584,9 @@ descriptionLeader = "`m`"
[prime.m.variants-buildup.stages.body."*"] [prime.m.variants-buildup.stages.body."*"]
next = "leg" next = "leg"
[prime.m.variants-buildup.stages.body.normal] [prime.m.variants-buildup.stages.body.eared]
rank = 1 rank = 1
groupRank = 10
keyAffix = "" keyAffix = ""
descriptionAffix = "eared body shape" descriptionAffix = "eared body shape"
selectorAffix.m = "" selectorAffix.m = ""
@ -2561,6 +2597,7 @@ selectorAffix.mLTail = ""
[prime.m.variants-buildup.stages.body.earless-corner-double-arch] [prime.m.variants-buildup.stages.body.earless-corner-double-arch]
rank = 2 rank = 2
groupRank = 20
descriptionAffix = "earless (corner top-left) double-arch body shape" descriptionAffix = "earless (corner top-left) double-arch body shape"
selectorAffix.m = "earlessCornerDoubleArch" selectorAffix.m = "earlessCornerDoubleArch"
selectorAffix."m/tailless" = "earlessCornerDoubleArch" selectorAffix."m/tailless" = "earlessCornerDoubleArch"
@ -2570,6 +2607,7 @@ selectorAffix.mLTail = "earlessCornerDoubleArch"
[prime.m.variants-buildup.stages.body.earless-rounded-double-arch] [prime.m.variants-buildup.stages.body.earless-rounded-double-arch]
rank = 3 rank = 3
groupRank = 30
descriptionAffix = "earless (rounded top-left) double-arch body shape" descriptionAffix = "earless (rounded top-left) double-arch body shape"
selectorAffix.m = "earlessRoundedDoubleArch" selectorAffix.m = "earlessRoundedDoubleArch"
selectorAffix."m/tailless" = "earlessRoundedDoubleArch" selectorAffix."m/tailless" = "earlessRoundedDoubleArch"
@ -2579,6 +2617,7 @@ selectorAffix.mLTail = "earlessRoundedDoubleArch"
[prime.m.variants-buildup.stages.body.earless-single-arch] [prime.m.variants-buildup.stages.body.earless-single-arch]
rank = 4 rank = 4
groupRank = 40
descriptionAffix = "earless (corner top-left) body shape" descriptionAffix = "earless (corner top-left) body shape"
selectorAffix.m = "earlessSingleArch" selectorAffix.m = "earlessSingleArch"
selectorAffix."m/tailless" = "earlessSingleArch" selectorAffix."m/tailless" = "earlessSingleArch"
@ -2591,6 +2630,7 @@ next = "tail"
[prime.m.variants-buildup.stages.leg.normal] [prime.m.variants-buildup.stages.leg.normal]
rank = 1 rank = 1
groupRank = 1
keyAffix = "" keyAffix = ""
descriptionAffix = "normal middle leg" descriptionAffix = "normal middle leg"
selectorAffix.m = "" selectorAffix.m = ""
@ -2601,6 +2641,7 @@ selectorAffix.mLTail = ""
[prime.m.variants-buildup.stages.leg.short-leg] [prime.m.variants-buildup.stages.leg.short-leg]
rank = 2 rank = 2
groupRank = {if = [{body = "eared"}], then = 2, else = 1}
descriptionAffix = "shorter middle leg (like Ubuntu Mono)" descriptionAffix = "shorter middle leg (like Ubuntu Mono)"
selectorAffix.m = "shortLeg" selectorAffix.m = "shortLeg"
selectorAffix."m/tailless" = "shortLeg" selectorAffix."m/tailless" = "shortLeg"
@ -2642,7 +2683,7 @@ selectorAffix.mLTail = "serifless"
[prime.m.variants-buildup.stages.serifs.top-left-serifed] [prime.m.variants-buildup.stages.serifs.top-left-serifed]
rank = 2 rank = 2
descriptionAffix = "serif at top left" descriptionAffix = "serif at top left"
disableIf = [ { body = "NOT normal" } ] disableIf = [ { body = "NOT eared" } ]
selectorAffix.m = "topLeftSerifed" selectorAffix.m = "topLeftSerifed"
selectorAffix."m/tailless" = "topLeftSerifed" selectorAffix."m/tailless" = "topLeftSerifed"
selectorAffix."m/sansSerif" = "serifless" selectorAffix."m/sansSerif" = "serifless"
@ -2652,7 +2693,7 @@ selectorAffix.mLTail = "topLeftSerifed"
[prime.m.variants-buildup.stages.serifs.top-left-and-bottom-right-serifed] [prime.m.variants-buildup.stages.serifs.top-left-and-bottom-right-serifed]
rank = 3 rank = 3
descriptionAffix = "serifs at top left and bottom right" descriptionAffix = "serifs at top left and bottom right"
disableIf = [ { body = "NOT normal" }, { tail = "tailed" } ] disableIf = [ { body = "NOT eared" }, { tail = "tailed" } ]
selectorAffix.m = "topLeftAndBottomRightSerifed" selectorAffix.m = "topLeftAndBottomRightSerifed"
selectorAffix."m/tailless" = "topLeftAndBottomRightSerifed" selectorAffix."m/tailless" = "topLeftAndBottomRightSerifed"
selectorAffix."m/sansSerif" = "serifless" selectorAffix."m/sansSerif" = "serifless"
@ -3061,7 +3102,7 @@ rank = 4
descriptionAffix = "serifs" descriptionAffix = "serifs"
selectorAffix.r = "serifed" selectorAffix.r = "serifed"
selectorAffix."r/sansSerif" = "serifless" selectorAffix."r/sansSerif" = "serifless"
selectorAffix.rRTail = "serifed" selectorAffix.rRTail = {if = [{body="earless-corner"}, {body="earless-rounded"}], then = "serifless", else = "topSerifed"}
selectorAffix."rTurnRTail" = "serifed" selectorAffix."rTurnRTail" = "serifed"
selectorAffix."rFlap" = "serifed" selectorAffix."rFlap" = "serifed"
@ -3445,6 +3486,7 @@ next = "serifs"
[prime.w.variants-buildup.stages.body.straight] [prime.w.variants-buildup.stages.body.straight]
rank = 1 rank = 1
groupRank = 1
descriptionAffix = "standard, straight body" descriptionAffix = "standard, straight body"
selectorAffix.w = "straight" selectorAffix.w = "straight"
selectorAffix."w/sansSerif" = "straight" selectorAffix."w/sansSerif" = "straight"
@ -3452,41 +3494,47 @@ selectorAffix.wHookTop = "straight"
[prime.w.variants-buildup.stages.body.curly] [prime.w.variants-buildup.stages.body.curly]
rank = 2 rank = 2
groupRank = 1
descriptionAffix = "curly body" descriptionAffix = "curly body"
selectorAffix.w = "curly" selectorAffix.w = "curly"
selectorAffix."w/sansSerif" = "curly" selectorAffix."w/sansSerif" = "curly"
selectorAffix.wHookTop = "curly" selectorAffix.wHookTop = "curly"
[prime.w.variants-buildup.stages.body.straight-flat-top] [prime.w.variants-buildup.stages.body.straight-vertical-sides]
rank = 3 rank = 3
groupRank = 1
descriptionAffix = "body shape with vertical sides"
selectorAffix.w = "straightVerticalSides"
selectorAffix."w/sansSerif" = "straightVerticalSides"
selectorAffix.wHookTop = "straightVerticalSides"
[prime.w.variants-buildup.stages.body.straight-flat-top]
rank = 4
groupRank = 2
descriptionAffix = "straight body shape that the middle is forced to be aligned the top" descriptionAffix = "straight body shape that the middle is forced to be aligned the top"
selectorAffix.w = "straightFlatTop" selectorAffix.w = "straightFlatTop"
selectorAffix."w/sansSerif" = "straightFlatTop" selectorAffix."w/sansSerif" = "straightFlatTop"
selectorAffix.wHookTop = "straightFlatTop" selectorAffix.wHookTop = "straightFlatTop"
[prime.w.variants-buildup.stages.body.straight-double-v] [prime.w.variants-buildup.stages.body.straight-double-v]
rank = 4 rank = 5
groupRank = 2
descriptionAffix = "body shape like double V" descriptionAffix = "body shape like double V"
selectorAffix.w = "straightDoubleV" selectorAffix.w = "straightDoubleV"
selectorAffix."w/sansSerif" = "straightDoubleV" selectorAffix."w/sansSerif" = "straightDoubleV"
selectorAffix.wHookTop = "straightDoubleV" selectorAffix.wHookTop = "straightDoubleV"
[prime.w.variants-buildup.stages.body.straight-asymmetric] [prime.w.variants-buildup.stages.body.straight-asymmetric]
rank = 5 rank = 6
groupRank = 2
descriptionAffix = "asymmetric shape" descriptionAffix = "asymmetric shape"
selectorAffix.w = "straightAsymmetric" selectorAffix.w = "straightAsymmetric"
selectorAffix."w/sansSerif" = "straightAsymmetric" selectorAffix."w/sansSerif" = "straightAsymmetric"
selectorAffix.wHookTop = "straightAsymmetric" selectorAffix.wHookTop = "straightAsymmetric"
[prime.w.variants-buildup.stages.body.straight-vertical-sides]
rank = 6
descriptionAffix = "body shape with vertical sides"
selectorAffix.w = "straightVerticalSides"
selectorAffix."w/sansSerif" = "straightVerticalSides"
selectorAffix.wHookTop = "straightVerticalSides"
[prime.w.variants-buildup.stages.body.cursive] [prime.w.variants-buildup.stages.body.cursive]
rank = 7 rank = 7
groupRank = 3
descriptionAffix = "body shape with vertical sides" descriptionAffix = "body shape with vertical sides"
selectorAffix.w = "cursive" selectorAffix.w = "cursive"
selectorAffix."w/sansSerif" = "cursive" selectorAffix."w/sansSerif" = "cursive"
@ -3686,6 +3734,7 @@ next = "serifs"
[prime.z.variants-buildup.stages.body.straight] [prime.z.variants-buildup.stages.body.straight]
rank = 1 rank = 1
groupRank = 10
descriptionAffix = "straight body shape" descriptionAffix = "straight body shape"
selectorAffix.z = "straight" selectorAffix.z = "straight"
selectorAffix."z/sansSerif" = "straight" selectorAffix."z/sansSerif" = "straight"
@ -3695,6 +3744,7 @@ selectorAffix."zDesc/reduced" = "straight"
[prime.z.variants-buildup.stages.body.curly] [prime.z.variants-buildup.stages.body.curly]
rank = 2 rank = 2
groupRank = 20
descriptionAffix = "curly body shape" descriptionAffix = "curly body shape"
selectorAffix.z = "curly" selectorAffix.z = "curly"
selectorAffix."z/sansSerif" = "curly" selectorAffix."z/sansSerif" = "curly"
@ -3704,6 +3754,7 @@ selectorAffix."zDesc/reduced" = "curly"
[prime.z.variants-buildup.stages.body.cursive] [prime.z.variants-buildup.stages.body.cursive]
rank = 3 rank = 3
groupRank = 30
next = "overlay" next = "overlay"
descriptionAffix = "cursive body shape" descriptionAffix = "cursive body shape"
selectorAffix.z = "cursive" selectorAffix.z = "cursive"
@ -3717,6 +3768,7 @@ next = "overlay"
[prime.z.variants-buildup.stages.serifs.serifless] [prime.z.variants-buildup.stages.serifs.serifless]
rank = 1 rank = 1
groupRank = 1
descriptionAffix = "serifs" descriptionAffix = "serifs"
descriptionJoiner = "without" descriptionJoiner = "without"
selectorAffix.z = "serifless" selectorAffix.z = "serifless"
@ -3727,6 +3779,7 @@ selectorAffix."zDesc/reduced" = "serifless"
[prime.z.variants-buildup.stages.serifs.serifed] [prime.z.variants-buildup.stages.serifs.serifed]
rank = 2 rank = 2
groupRank = 1
descriptionAffix = "serifs" descriptionAffix = "serifs"
selectorAffix.z = "serifed" selectorAffix.z = "serifed"
selectorAffix."z/sansSerif" = "serifless" selectorAffix."z/sansSerif" = "serifless"
@ -3736,6 +3789,7 @@ selectorAffix."zDesc/reduced" = "topSerifed"
[prime.z.variants-buildup.stages.serifs.bottom-serifed] [prime.z.variants-buildup.stages.serifs.bottom-serifed]
rank = 3 rank = 3
groupRank = 2
descriptionAffix = "serifs at bottom" descriptionAffix = "serifs at bottom"
selectorAffix.z = "bottomSerifed" selectorAffix.z = "bottomSerifed"
selectorAffix."z/sansSerif" = "serifless" selectorAffix."z/sansSerif" = "serifless"
@ -3745,6 +3799,7 @@ selectorAffix."zDesc/reduced" = "serifless"
[prime.z.variants-buildup.stages.serifs.top-serifed] [prime.z.variants-buildup.stages.serifs.top-serifed]
rank = 4 rank = 4
groupRank = 2
descriptionAffix = "serifs at top" descriptionAffix = "serifs at top"
selectorAffix.z = "topSerifed" selectorAffix.z = "topSerifed"
selectorAffix."z/sansSerif" = "serifless" selectorAffix."z/sansSerif" = "serifless"
@ -4486,68 +4541,67 @@ sampler = "н"
samplerExplain = "Cyrillic Lower En" samplerExplain = "Cyrillic Lower En"
tag = "cv68" tag = "cv68"
[prime.cyrl-en.variants.serifless] [prime.cyrl-en.variants-buildup]
entry = "tail"
[prime.cyrl-en.variants-buildup.stages.tail."*"]
next = "serifs"
[prime.cyrl-en.variants-buildup.stages.tail.tailless]
rank = 1 rank = 1
description = "Cyrillic Lower En (`н`) with standard shape" keyAffix = ""
selector."cyrl/en" = "serifless" selectorAffix."cyrl/en" = ""
selector."cyrl/en.BGR" = "serifless" selectorAffix."cyrl/en.BGR" = ""
selector."cyrl/en/descenderBase" = "serifless" selectorAffix."cyrl/en/descenderBase" = ""
selector."cyrl/nje/leftHalf" = "serifless" selectorAffix."cyrl/nje/leftHalf" = ""
selector."cyrl/nje/leftHalf/reduced" = "serifless" selectorAffix."cyrl/nje/leftHalf/reduced" = ""
[prime.cyrl-en.variants.tailed-serifless] [prime.cyrl-en.variants-buildup.stages.tail.tailed]
rank = 2 rank = 2
description = "Cyrillic Lower En (`н`) with tail" descriptionAffix = "tail"
selector."cyrl/en" = "tailed" selectorAffix."cyrl/en" = "tailed"
selector."cyrl/en.BGR" = "tailed" selectorAffix."cyrl/en.BGR" = "tailed"
selector."cyrl/en/descenderBase" = "serifless" selectorAffix."cyrl/en/descenderBase" = ""
selector."cyrl/nje/leftHalf" = "serifless" selectorAffix."cyrl/nje/leftHalf" = ""
selector."cyrl/nje/leftHalf/reduced" = "serifless" selectorAffix."cyrl/nje/leftHalf/reduced" = ""
[prime.cyrl-en.variants.top-left-serifed] [prime.cyrl-en.variants-buildup.stages.serifs.serifless]
rank = 1
descriptionAffix = "serifs"
descriptionJoiner = "without"
selectorAffix."cyrl/en" = "serifless"
selectorAffix."cyrl/en.BGR" = "serifless"
selectorAffix."cyrl/en/descenderBase" = "serifless"
selectorAffix."cyrl/nje/leftHalf" = "serifless"
selectorAffix."cyrl/nje/leftHalf/reduced" = "serifless"
[prime.cyrl-en.variants-buildup.stages.serifs.top-left-serifed]
rank = 2
descriptionAffix = "serifs at top left"
selectorAffix."cyrl/en" = "topLeftSerifed"
selectorAffix."cyrl/en.BGR" = "topLeftSerifed"
selectorAffix."cyrl/en/descenderBase" = "topLeftSerifed"
selectorAffix."cyrl/nje/leftHalf" = "topLeftSerifed"
selectorAffix."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
[prime.cyrl-en.variants-buildup.stages.serifs.top-left-bottom-right-serifed]
rank = 3 rank = 3
description = "Cyrillic Lower En (`н`) with outward serifs only at top left" disableIf = [{ tail = "tailed" }]
selector."cyrl/en" = "topLeftSerifed" descriptionAffix = "serifs at top left and bottom right"
selector."cyrl/en.BGR" = "topLeftSerifed" selectorAffix."cyrl/en" = "topLeftBottomRightSerifed"
selector."cyrl/en/descenderBase" = "topLeftSerifed" selectorAffix."cyrl/en.BGR" = "topLeftBottomRightSerifed"
selector."cyrl/nje/leftHalf" = "topLeftSerifed" selectorAffix."cyrl/en/descenderBase" = "topLeftSerifed"
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed" selectorAffix."cyrl/nje/leftHalf" = "topLeftSerifed"
selectorAffix."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
[prime.cyrl-en.variants.tailed-top-left-serifed] [prime.cyrl-en.variants-buildup.stages.serifs.serifed]
rank = 4 rank = 4
description = "Cyrillic Lower En (`н`) with tail and outward serifs only at top left" descriptionAffix = "serifs"
selector."cyrl/en" = "tailedTopLeftSerifed" selectorAffix."cyrl/en" = "serifed"
selector."cyrl/en.BGR" = "tailedTopLeftSerifed" selectorAffix."cyrl/en.BGR" = "serifedBGR"
selector."cyrl/en/descenderBase" = "topLeftSerifed" selectorAffix."cyrl/en/descenderBase" = "serifed"
selector."cyrl/nje/leftHalf" = "topLeftSerifed" selectorAffix."cyrl/nje/leftHalf" = "serifed"
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed" selectorAffix."cyrl/nje/leftHalf/reduced" = "serifedExceptBottomRight"
[prime.cyrl-en.variants.top-left-bottom-right-serifed]
rank = 5
description = "Cyrillic Lower En (`н`) with outward serifs only at top left and bottom right"
selector."cyrl/en" = "topLeftBottomRightSerifed"
selector."cyrl/en.BGR" = "topLeftBottomRightSerifed"
selector."cyrl/en/descenderBase" = "topLeftSerifed"
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
[prime.cyrl-en.variants.serifed]
rank = 6
description = "Cyrillic Lower En (`н`) with full serifs"
selector."cyrl/en" = "serifed"
selector."cyrl/en.BGR" = "serifedBGR"
selector."cyrl/en/descenderBase" = "serifed"
selector."cyrl/nje/leftHalf" = "serifed"
selector."cyrl/nje/leftHalf/reduced" = "serifedExceptBottomRight"
[prime.cyrl-en.variants.tailed-serifed]
rank = 7
description = "Cyrillic Lower En (`н`) with tail and full serifs"
selector."cyrl/en" = "tailedSerifed"
selector."cyrl/en.BGR" = "tailedSerifedBGR"
selector."cyrl/en/descenderBase" = "serifed"
selector."cyrl/nje/leftHalf" = "serifed"
selector."cyrl/nje/leftHalf/reduced" = "serifedExceptBottomRight"
@ -4742,11 +4796,13 @@ next = "leg"
[prime.cyrl-ya.variants-buildup.stages.openness.closed] [prime.cyrl-ya.variants-buildup.stages.openness.closed]
rank = 1 rank = 1
groupRrank = 10
keyAffix = "" keyAffix = ""
selectorAffix."cyrl/ya" = "" selectorAffix."cyrl/ya" = ""
[prime.cyrl-ya.variants-buildup.stages.openness.open] [prime.cyrl-ya.variants-buildup.stages.openness.open]
rank = 2 rank = 2
groupRrank = 20
descriptionAffix = "open contour" descriptionAffix = "open contour"
selectorAffix."cyrl/ya" = "open" selectorAffix."cyrl/ya" = "open"
@ -4756,16 +4812,19 @@ mode = "prepend"
[prime.cyrl-ya.variants-buildup.stages.leg.straight] [prime.cyrl-ya.variants-buildup.stages.leg.straight]
rank = 1 rank = 1
groupRank = 1
description = "straight leg" description = "straight leg"
selectorAffix."cyrl/ya" = "straight" selectorAffix."cyrl/ya" = "straight"
[prime.cyrl-ya.variants-buildup.stages.leg.curly] [prime.cyrl-ya.variants-buildup.stages.leg.curly]
rank = 2 rank = 2
groupRank = 2
description = "curly leg" description = "curly leg"
selectorAffix."cyrl/ya" = "curly" selectorAffix."cyrl/ya" = "curly"
[prime.cyrl-ya.variants-buildup.stages.leg.standing] [prime.cyrl-ya.variants-buildup.stages.leg.standing]
rank = 3 rank = 3
groupRank = 3
description = "standing leg (like Helvetica)" description = "standing leg (like Helvetica)"
selectorAffix."cyrl/ya" = "standing" selectorAffix."cyrl/ya" = "standing"