z variants refactor

This commit is contained in:
be5invis 2023-05-23 18:14:07 -07:00
parent 404013a4c9
commit 14b3e54b61
5 changed files with 245 additions and 531 deletions

View file

@ -1,6 +1,6 @@
$$include '../../../meta/macros.ptl'
import [mix fallback weaveSuffix] from"../../../support/utils.mjs"
import [mix fallback SuffixCfg] from"../../../support/utils.mjs"
import [Dotless CvDecompose MathSansSerif] from"../../../support/gr.mjs"
glyph-module
@ -168,7 +168,7 @@ glyph-block Letter-Latin-Lower-M : begin
flat df.rightSB [Math.max (top - [SmallMSmooth df]) (rbot + 0.1)]
curl df.rightSB rbot [heading Downward]
define SmallMConfig : weaveSuffix
define SmallMConfig : SuffixCfg.weave
object
"" { SmallMArches 0 }
"earlessCornerDoubleArch" { EarlessCornerDoubleArchSmallMShape 1 }

View file

@ -1,6 +1,6 @@
$$include '../../../meta/macros.ptl'
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
import [mix SuffixCfg fallback] from"../../../support/utils.mjs"
import [CvDecompose MathSansSerif] from"../../../support/gr.mjs"
glyph-module
@ -203,37 +203,23 @@ glyph-block Letter-Latin-Z : begin
archv
g4.down.end (SB + O + HVContrast * fine) Descender [heading Downward]
define ZConfig : SuffixCfg.weave
object # Body
straight { ZBaseShape SmallZBaseShape NoBottomStrokeMask }
curly { ZCurlyShape SmallZCurlyShape CurlyBottomStrokeMask }
cursive { ZCursiveShape SmallZCursiveShape NoBottomStrokeMask }
object # Serifs
"" { ZSerifless } # for Cursive
serifless { ZSerifless }
serifed { ZStdSerifs }
bottomSerifed { ZMotionSerifsB }
topSerifed { ZMotionSerifsT }
object # overlay
"" { null }
withCrossBar { DBarOver }
withHorizontalCrossBar { HBar.mOver }
define ZConfig : object
straightSerifless { ZBaseShape SmallZBaseShape ZSerifless null NoBottomStrokeMask }
straightSeriflessWithCrossBar { ZBaseShape SmallZBaseShape ZSerifless DBarOver NoBottomStrokeMask }
straightSeriflessWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZSerifless HBar.mOver NoBottomStrokeMask }
curlySerifless { ZCurlyShape SmallZCurlyShape ZSerifless null CurlyBottomStrokeMask }
curlySeriflessWithCrossBar { ZCurlyShape SmallZCurlyShape ZSerifless DBarOver CurlyBottomStrokeMask }
curlySeriflessWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZSerifless HBar.mOver CurlyBottomStrokeMask }
straightSerifed { ZBaseShape SmallZBaseShape ZStdSerifs null NoBottomStrokeMask }
straightSerifedWithCrossBar { ZBaseShape SmallZBaseShape ZStdSerifs DBarOver NoBottomStrokeMask }
straightSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZStdSerifs HBar.mOver NoBottomStrokeMask }
curlySerifed { ZCurlyShape SmallZCurlyShape ZStdSerifs null CurlyBottomStrokeMask }
curlySerifedWithCrossBar { ZCurlyShape SmallZCurlyShape ZStdSerifs DBarOver CurlyBottomStrokeMask }
curlySerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZStdSerifs HBar.mOver CurlyBottomStrokeMask }
straightBottomSerifed { ZBaseShape SmallZBaseShape ZMotionSerifsB null NoBottomStrokeMask }
straightBottomSerifedWithCrossbar { ZBaseShape SmallZBaseShape ZMotionSerifsB DBarOver NoBottomStrokeMask }
straightBottomSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZMotionSerifsB HBar.mOver NoBottomStrokeMask }
curlyBottomSerifed { ZCurlyShape SmallZCurlyShape ZMotionSerifsB null CurlyBottomStrokeMask }
curlyBottomSerifedWithCrossbar { ZCurlyShape SmallZCurlyShape ZMotionSerifsB DBarOver CurlyBottomStrokeMask }
curlyBottomSerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZMotionSerifsB HBar.mOver CurlyBottomStrokeMask }
straightTopSerifed { ZBaseShape SmallZBaseShape ZMotionSerifsT null NoBottomStrokeMask }
straightTopSerifedWithCrossbar { ZBaseShape SmallZBaseShape ZMotionSerifsT DBarOver NoBottomStrokeMask }
straightTopSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZMotionSerifsT HBar.mOver NoBottomStrokeMask }
curlyTopSerifed { ZCurlyShape SmallZCurlyShape ZMotionSerifsT null CurlyBottomStrokeMask }
curlyTopSerifedWithCrossbar { ZCurlyShape SmallZCurlyShape ZMotionSerifsT DBarOver CurlyBottomStrokeMask }
curlyTopSerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZMotionSerifsT HBar.mOver CurlyBottomStrokeMask }
cursive { ZCursiveShape SmallZCursiveShape ZSerifless null NoBottomStrokeMask }
cursiveWithCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless DBarOver NoBottomStrokeMask }
cursiveWithHorizontalCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless HBar.mOver NoBottomStrokeMask }
foreach { suffix { capital small serifs slash bsMask } } [Object.entries ZConfig] : do
foreach { suffix { {capital small bsMask} {serifs} {slash} } } [pairs-of ZConfig] : do
create-glyph "Z.\(suffix)" : glyph-proc
include : MarkSet.capital
include : capital MODE-Z

View file

@ -34,12 +34,6 @@ export function joinCamel(a, b) {
return a + b[0].toUpperCase() + b.slice(1);
}
export function weaveSuffix(...configs) {
let ans = {};
joinSuffixListImpl(ans, "", [], configs);
return ans;
}
function joinSuffixListImpl(sink, k, v, configs) {
if (!configs.length) {
sink[k] = v;
@ -52,3 +46,16 @@ function joinSuffixListImpl(sink, k, v, configs) {
joinSuffixListImpl(sink, k1, v1, configs.slice(1));
}
}
export const SuffixCfg = {
weave: function (...configs) {
let ans = {};
joinSuffixListImpl(ans, "", [], configs);
return ans;
},
combine: function (...configs) {
let ans = {};
for (const item of configs) for (const [k, v] of Object.entries(item)) ans[k] = v;
return ans;
}
};

View file

@ -222,6 +222,8 @@ class VariantBuilder {
let ans = {};
for (const item of globalState.sink) {
let cfg = item.createPrimeVariant();
if (!cfg.key) throw new Error("Invalid variant key");
if (ans[cfg.key]) throw new Error("Duplicate variant : " + cfg.key);
ans[cfg.key] = cfg;
}
return ans;
@ -353,6 +355,7 @@ class VbLocalState {
}
addDescription(joiner, segment) {
if (!segment) return;
if (!this.descriptions.has(joiner)) this.descriptions.set(joiner, []);
this.descriptions.get(joiner).push(segment);
}

View file

@ -1724,276 +1724,126 @@ selector."Y/sansSerif" = "curlySerifless"
sampler = "Z"
tag = "cv25"
[prime.capital-z.variants.straight-serifless]
[prime.capital-z.variants-buildup]
entry = "body"
descriptionLeader = "`z`"
[prime.capital-z.variants-buildup.stages.body."*"]
next = "serifs"
[prime.capital-z.variants-buildup.stages.body.straight]
rank = 1
description = "Straight `Z` without serifs"
selector.Z = "straightSerifless"
selector."Z/sansSerif" = "straightSerifless"
selector."Z/reduced" = "straightSerifless"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSerifless"
selector."ZDesc/reduced" = "straightSerifless"
keySuffix = "straight"
descriptionSuffix = "straight body shape"
selectorSuffix.Z = "straight"
selectorSuffix."Z/sansSerif" = "straight"
selectorSuffix."Z/reduced" = "straight"
selectorSuffix."Z/reduced/sansSerif" = "straight"
selectorSuffix.ZDesc = "straight"
selectorSuffix."ZDesc/reduced" = "straight"
[prime.capital-z.variants.straight-serifless-with-crossbar]
[prime.capital-z.variants-buildup.stages.body.curly]
rank = 2
description = "Straight `Z` with a diagonal crossbar, and without serifs"
selector.Z = "straightSeriflessWithCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithCrossBar"
selector."Z/reduced" = "straightSerifless"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSeriflessWithCrossBar"
selector."ZDesc/reduced" = "straightSerifless"
keySuffix = "curly"
descriptionSuffix = "curly body shape"
selectorSuffix.Z = "curly"
selectorSuffix."Z/sansSerif" = "curly"
selectorSuffix."Z/reduced" = "curly"
selectorSuffix."Z/reduced/sansSerif" = "curly"
selectorSuffix.ZDesc = "curly"
selectorSuffix."ZDesc/reduced" = "curly"
[prime.capital-z.variants.straight-serifless-with-horizontal-crossbar]
[prime.capital-z.variants-buildup.stages.body.cursive]
rank = 3
description = "Straight `Z` with a horizontal crossbar, and without serifs"
selector.Z = "straightSeriflessWithHorizontalCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "straightSerifless"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSeriflessWithHorizontalCrossBar"
selector."ZDesc/reduced" = "straightSerifless"
next = "overlay"
keySuffix = "cursive"
descriptionSuffix = "cursive body shape"
selectorSuffix.Z = "cursive"
selectorSuffix."Z/sansSerif" = "cursive"
selectorSuffix."Z/reduced" = "cursive"
selectorSuffix."Z/reduced/sansSerif" = "cursive"
selectorSuffix.ZDesc = "cursive"
selectorSuffix."ZDesc/reduced" = "cursive"
[prime.capital-z.variants.straight-serifed]
[prime.capital-z.variants-buildup.stages.serifs."*"]
next = "overlay"
[prime.capital-z.variants-buildup.stages.serifs.serifless]
rank = 1
keySuffix = "serifless"
descriptionSuffix = "serifs"
descriptionJoiner = "without"
selectorSuffix.Z = "serifless"
selectorSuffix."Z/sansSerif" = "serifless"
selectorSuffix."Z/reduced" = "serifless"
selectorSuffix."Z/reduced/sansSerif" = "serifless"
selectorSuffix.ZDesc = "serifless"
selectorSuffix."ZDesc/reduced" = "serifless"
[prime.capital-z.variants-buildup.stages.serifs.serifed]
rank = 2
keySuffix = "serifed"
descriptionSuffix = "serifs"
selectorSuffix.Z = "serifed"
selectorSuffix."Z/sansSerif" = "serifless"
selectorSuffix."Z/reduced" = "serifed"
selectorSuffix."Z/reduced/sansSerif" = "serifless"
selectorSuffix.ZDesc = "topSerifed"
selectorSuffix."ZDesc/reduced" = "topSerifed"
[prime.capital-z.variants-buildup.stages.serifs.bottom-serifed]
rank = 3
keySuffix = "bottom-serifed"
descriptionSuffix = "serifs at bottom"
selectorSuffix.Z = "bottomSerifed"
selectorSuffix."Z/sansSerif" = "serifless"
selectorSuffix."Z/reduced" = "bottomSerifed"
selectorSuffix."Z/reduced/sansSerif" = "serifless"
selectorSuffix.ZDesc = "serifless"
selectorSuffix."ZDesc/reduced" = "serifless"
[prime.capital-z.variants-buildup.stages.serifs.top-serifed]
rank = 4
description = "Straight `Z` with top and bottom serifs"
selector.Z = "straightSerifed"
selector."Z/sansSerif" = "straightSerifless"
selector."Z/reduced" = "straightSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifed"
selector."ZDesc/reduced" = "straightTopSerifed"
keySuffix = "top-serifed"
descriptionSuffix = "serifs at top"
selectorSuffix.Z = "topSerifed"
selectorSuffix."Z/sansSerif" = "serifless"
selectorSuffix."Z/reduced" = "topSerifed"
selectorSuffix."Z/reduced/sansSerif" = "serifless"
selectorSuffix.ZDesc = "topSerifed"
selectorSuffix."ZDesc/reduced" = "topSerifed"
[prime.capital-z.variants.straight-serifed-with-crossbar]
rank = 5
description = "Straight `Z` with a diagonal crossbar and serifs"
selector.Z = "straightSerifedWithCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithCrossBar"
selector."Z/reduced" = "straightSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifedWithCrossbar"
selector."ZDesc/reduced" = "straightTopSerifed"
[prime.capital-z.variants-buildup.stages.overlay.no-overlay]
rank = 1
keySuffix = ""
selectorSuffix.Z = ""
selectorSuffix."Z/sansSerif" = ""
selectorSuffix."Z/reduced" = ""
selectorSuffix."Z/reduced/sansSerif" = ""
selectorSuffix.ZDesc = ""
selectorSuffix."ZDesc/reduced" = ""
[prime.capital-z.variants.straight-serifed-with-horizontal-crossbar]
rank = 6
description = "Straight `Z` with a horizontal crossbar and serifs"
selector.Z = "straightSerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "straightSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifedWithHorizontalCrossBar"
selector."ZDesc/reduced" = "straightTopSerifed"
[prime.capital-z.variants.straight-bottom-serifed]
rank = 7
description = "Standard `Z` with serif at bottom"
selector.Z = "straightBottomSerifed"
selector."Z/sansSerif" = "straightSerifless"
selector."Z/reduced" = "straightBottomSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSerifless"
selector."ZDesc/reduced" = "straightSerifless"
[prime.capital-z.variants.straight-bottom-serifed-with-crossbar]
rank = 8
description = "Standard `Z` with a diagonal crossbar and serif at bottom"
selector.Z = "straightBottomSerifedWithCrossbar"
selector."Z/sansSerif" = "straightSeriflessWithCrossBar"
selector."Z/reduced" = "straightBottomSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSeriflessWithCrossBar"
selector."ZDesc/reduced" = "straightSerifless"
[prime.capital-z.variants.straight-bottom-serifed-with-horizontal-crossbar]
rank = 9
description = "Standard `Z` with a horizontal crossbar and serif at bottom"
selector.Z = "straightBottomSerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "straightBottomSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightSeriflessWithHorizontalCrossBar"
selector."ZDesc/reduced" = "straightSerifless"
[prime.capital-z.variants.straight-top-serifed]
rank = 10
description = "Standard `Z` with serif at top"
selector.Z = "straightTopSerifed"
selector."Z/sansSerif" = "straightSerifless"
selector."Z/reduced" = "straightTopSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifed"
selector."ZDesc/reduced" = "straightTopSerifed"
[prime.capital-z.variants.straight-top-serifed-with-crossbar]
rank = 11
description = "Standard `Z` with a diagonal crossbar and serif at top"
selector.Z = "straightTopSerifedWithCrossbar"
selector."Z/sansSerif" = "straightSeriflessWithCrossBar"
selector."Z/reduced" = "straightTopSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifedWithCrossbar"
selector."ZDesc/reduced" = "straightTopSerifed"
[prime.capital-z.variants.straight-top-serifed-with-horizontal-crossbar]
rank = 12
description = "Standard `Z` with a horizontal crossbar and serif at top"
selector.Z = "straightTopSerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "straightTopSerifed"
selector."Z/reduced/sansSerif" = "straightSerifless"
selector.ZDesc = "straightTopSerifedWithHorizontalCrossBar"
selector."ZDesc/reduced" = "straightTopSerifed"
[prime.capital-z.variants.curly-serifless]
rank = 13
description = "Curly `Z` without serifs"
selector.Z = "curlySerifless"
selector."Z/sansSerif" = "curlySerifless"
selector."Z/reduced" = "curlySerifless"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySerifless"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-serifless-with-crossbar]
rank = 14
description = "Curly `Z` with a diagonal crossbar, and without serifs"
selector.Z = "curlySeriflessWithCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithCrossBar"
selector."Z/reduced" = "curlySerifless"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySeriflessWithCrossBar"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-serifless-with-horizontal-crossbar]
rank = 15
description = "Curly `Z` with a horizontal crossbar, and without serifs"
selector.Z = "curlySeriflessWithHorizontalCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "curlySerifless"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySeriflessWithHorizontalCrossBar"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-serifed]
rank = 16
description = "Curly `Z` with top and bottom serifs"
selector.Z = "curlySerifed"
selector."Z/sansSerif" = "curlySerifless"
selector."Z/reduced" = "curlySerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifed"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.curly-serifed-with-crossbar]
rank = 17
description = "Curly `Z` with a diagonal crossbar and serifs"
selector.Z = "curlySerifedWithCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithCrossBar"
selector."Z/reduced" = "curlySerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifedWithCrossbar"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.curly-serifed-with-horizontal-crossbar]
rank = 18
description = "Curly `Z` with a horizontal crossbar and serifs"
selector.Z = "curlySerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "curlySerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifedWithHorizontalCrossBar"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.curly-bottom-serifed-with-crossbar]
rank = 19
description = "Curly `Z` with serif at bottom"
selector.Z = "curlyBottomSerifed"
selector."Z/sansSerif" = "curlySerifless"
selector."Z/reduced" = "curlyBottomSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySerifless"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-bottom-serifed-with-horizontal-crossbar]
rank = 20
description = "Curly `Z` with a diagonal crossbar and serif at bottom"
selector.Z = "curlyBottomSerifedWithCrossbar"
selector."Z/sansSerif" = "curlySeriflessWithCrossBar"
selector."Z/reduced" = "curlyBottomSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySeriflessWithCrossBar"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-bottom-serifed]
rank = 21
description = "Curly `Z` with a horizontal crossbar and serif at bottom"
selector.Z = "curlyBottomSerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "curlyBottomSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlySeriflessWithHorizontalCrossBar"
selector."ZDesc/reduced" = "curlySerifless"
[prime.capital-z.variants.curly-top-serifed]
rank = 22
description = "Curly `Z` with serif at top"
selector.Z = "curlyTopSerifed"
selector."Z/sansSerif" = "curlySerifless"
selector."Z/reduced" = "curlyTopSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifed"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.curly-top-serifed-with-crossbar]
rank = 23
description = "Curly `Z` with a diagonal crossbar and serif at top"
selector.Z = "curlyTopSerifedWithCrossbar"
selector."Z/sansSerif" = "curlySeriflessWithCrossBar"
selector."Z/reduced" = "curlyTopSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifedWithCrossbar"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.curly-top-serifed-with-horizontal-crossbar]
rank = 24
description = "Curly `Z` with a horizontal crossbar and serif at top"
selector.Z = "curlyTopSerifedWithHorizontalCrossBar"
selector."Z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."Z/reduced" = "curlyTopSerifed"
selector."Z/reduced/sansSerif" = "curlySerifless"
selector.ZDesc = "curlyTopSerifedWithHorizontalCrossBar"
selector."ZDesc/reduced" = "curlyTopSerifed"
[prime.capital-z.variants.cursive]
rank = 25
description = "Cursive `Z`"
selector.Z = "cursive"
selector."Z/sansSerif" = "cursive"
selector."Z/reduced" = "cursive"
selector."Z/reduced/sansSerif" = "cursive"
selector.ZDesc = "cursive"
selector."ZDesc/reduced" = "cursive"
[prime.capital-z.variants.cursive-with-crossbar]
rank = 26
description = "Cursive `Z` with a diagonal cross bar"
selector.Z = "cursiveWithCrossBar"
selector."Z/sansSerif" = "cursiveWithCrossBar"
selector."Z/reduced" = "cursive"
selector."Z/reduced/sansSerif" = "cursive"
selector.ZDesc = "cursiveWithCrossBar"
selector."ZDesc/reduced" = "cursive"
[prime.capital-z.variants.cursive-with-horizontal-crossbar]
rank = 27
description = "Cursive `Z` with a horizontal cross bar"
selector.Z = "cursiveWithHorizontalCrossBar"
selector."Z/sansSerif" = "cursiveWithHorizontalCrossBar"
selector."Z/reduced" = "cursive"
selector."Z/reduced/sansSerif" = "cursive"
selector.ZDesc = "cursiveWithHorizontalCrossBar"
selector."ZDesc/reduced" = "cursive"
[prime.capital-z.variants-buildup.stages.overlay.with-crossbar]
rank = 2
keySuffix = "with-crossbar"
descriptionSuffix = "a diagonal crossbar"
selectorSuffix.Z = "withCrossBar"
selectorSuffix."Z/sansSerif" = "withCrossBar"
selectorSuffix."Z/reduced" = ""
selectorSuffix."Z/reduced/sansSerif" = ""
selectorSuffix.ZDesc = "withCrossBar"
selectorSuffix."ZDesc/reduced" = ""
[prime.capital-z.variants-buildup.stages.overlay.with-horizontal-crossbar]
rank = 3
keySuffix = "with-horizontal-crossbar"
descriptionSuffix = "a horizontal crossbar"
selectorSuffix.Z = "withHorizontalCrossBar"
selectorSuffix."Z/sansSerif" = "withHorizontalCrossBar"
selectorSuffix."Z/reduced" = ""
selectorSuffix."Z/reduced/sansSerif" = ""
selectorSuffix.ZDesc = "withHorizontalCrossBar"
selectorSuffix."ZDesc/reduced" = ""
@ -4949,248 +4799,116 @@ selector."y/sansSerif" = "cursiveFlatHookSerifless"
sampler = "z"
tag = "cv50"
[prime.z.variants.straight-serifless]
[prime.z.variants-buildup]
entry = "body"
descriptionLeader = "`z`"
[prime.z.variants-buildup.stages.body."*"]
next = "serifs"
[prime.z.variants-buildup.stages.body.straight]
rank = 1
description = "Straight `z` without serifs"
selector.z = "straightSerifless"
selector."z/sansSerif" = "straightSerifless"
selector."z/reduced" = "straightSerifless"
selector.zDesc = "straightSerifless"
selector."zDesc/reduced" = "straightSerifless"
keySuffix = "straight"
descriptionSuffix = "straight body shape"
selectorSuffix.z = "straight"
selectorSuffix."z/sansSerif" = "straight"
selectorSuffix."z/reduced" = "straight"
selectorSuffix.zDesc = "straight"
selectorSuffix."zDesc/reduced" = "straight"
[prime.z.variants.straight-serifless-with-crossbar]
[prime.z.variants-buildup.stages.body.curly]
rank = 2
description = "Straight `z` with a diagonal crossbar, and without serifs"
selector.z = "straightSeriflessWithCrossBar"
selector."z/sansSerif" = "straightSeriflessWithCrossBar"
selector."z/reduced" = "straightSerifless"
selector.zDesc = "straightSeriflessWithCrossBar"
selector."zDesc/reduced" = "straightSerifless"
keySuffix = "curly"
descriptionSuffix = "curly body shape"
selectorSuffix.z = "curly"
selectorSuffix."z/sansSerif" = "curly"
selectorSuffix."z/reduced" = "curly"
selectorSuffix.zDesc = "curly"
selectorSuffix."zDesc/reduced" = "curly"
[prime.z.variants.straight-serifless-with-horizontal-crossbar]
[prime.z.variants-buildup.stages.body.cursive]
rank = 3
description = "Straight `z` with a horizontal crossbar, and without serifs"
selector.z = "straightSeriflessWithHorizontalCrossBar"
selector."z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."z/reduced" = "straightSerifless"
selector.zDesc = "straightSeriflessWithHorizontalCrossBar"
selector."zDesc/reduced" = "straightSerifless"
next = "overlay"
keySuffix = "cursive"
descriptionSuffix = "cursive body shape"
selectorSuffix.z = "cursive"
selectorSuffix."z/sansSerif" = "cursive"
selectorSuffix."z/reduced" = "cursive"
selectorSuffix.zDesc = "cursive"
selectorSuffix."zDesc/reduced" = "cursive"
[prime.z.variants.straight-serifed]
[prime.z.variants-buildup.stages.serifs."*"]
next = "overlay"
[prime.z.variants-buildup.stages.serifs.serifless]
rank = 1
keySuffix = "serifless"
descriptionSuffix = "serifs"
descriptionJoiner = "without"
selectorSuffix.z = "serifless"
selectorSuffix."z/sansSerif" = "serifless"
selectorSuffix."z/reduced" = "serifless"
selectorSuffix.zDesc = "serifless"
selectorSuffix."zDesc/reduced" = "serifless"
[prime.z.variants-buildup.stages.serifs.serifed]
rank = 2
keySuffix = "serifed"
descriptionSuffix = "serifs"
selectorSuffix.z = "serifed"
selectorSuffix."z/sansSerif" = "serifless"
selectorSuffix."z/reduced" = "serifed"
selectorSuffix.zDesc = "topSerifed"
selectorSuffix."zDesc/reduced" = "topSerifed"
[prime.z.variants-buildup.stages.serifs.bottom-serifed]
rank = 3
keySuffix = "bottom-serifed"
descriptionSuffix = "serifs at bottom"
selectorSuffix.z = "bottomSerifed"
selectorSuffix."z/sansSerif" = "serifless"
selectorSuffix."z/reduced" = "bottomSerifed"
selectorSuffix.zDesc = "serifless"
selectorSuffix."zDesc/reduced" = "serifless"
[prime.z.variants-buildup.stages.serifs.top-serifed]
rank = 4
description = "Straight `z` with top and bottom serifs"
selector.z = "straightSerifed"
selector."z/sansSerif" = "straightSerifless"
selector."z/reduced" = "straightSerifed"
selector.zDesc = "straightTopSerifed"
selector."zDesc/reduced" = "straightTopSerifed"
keySuffix = "top-serifed"
descriptionSuffix = "serifs at top"
selectorSuffix.z = "topSerifed"
selectorSuffix."z/sansSerif" = "serifless"
selectorSuffix."z/reduced" = "topSerifed"
selectorSuffix.zDesc = "topSerifed"
selectorSuffix."zDesc/reduced" = "topSerifed"
[prime.z.variants.straight-serifed-with-crossbar]
rank = 5
description = "Straight `z` with a diagonal crossbar and serifs"
selector.z = "straightSerifedWithCrossBar"
selector."z/sansSerif" = "straightSeriflessWithCrossBar"
selector."z/reduced" = "straightSerifed"
selector.zDesc = "straightTopSerifedWithCrossbar"
selector."zDesc/reduced" = "straightTopSerifed"
[prime.z.variants-buildup.stages.overlay.no-overlay]
rank = 1
keySuffix = ""
selectorSuffix.z = ""
selectorSuffix."z/sansSerif" = ""
selectorSuffix."z/reduced" = ""
selectorSuffix.zDesc = ""
selectorSuffix."zDesc/reduced" = ""
[prime.z.variants.straight-serifed-with-horizontal-crossbar]
rank = 6
description = "Straight `z` with a horizontal crossbar and serifs"
selector.z = "straightSerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."z/reduced" = "straightSerifed"
selector.zDesc = "straightTopSerifedWithHorizontalCrossBar"
selector."zDesc/reduced" = "straightTopSerifed"
[prime.z.variants-buildup.stages.overlay.with-crossbar]
rank = 2
keySuffix = "with-crossbar"
descriptionSuffix = "a diagonal crossbar"
selectorSuffix.z = "withCrossBar"
selectorSuffix."z/sansSerif" = "withCrossBar"
selectorSuffix."z/reduced" = ""
selectorSuffix.zDesc = "withCrossBar"
selectorSuffix."zDesc/reduced" = ""
[prime.z.variants.straight-bottom-serifed]
rank = 7
description = "Standard `z` with serif at bottom"
selector.z = "straightBottomSerifed"
selector."z/sansSerif" = "straightSerifless"
selector."z/reduced" = "straightBottomSerifed"
selector.zDesc = "straightSerifless"
selector."zDesc/reduced" = "straightSerifless"
[prime.z.variants.straight-bottom-serifed-with-crossbar]
rank = 8
description = "Standard `z` with a diagonal crossbar and serif at bottom"
selector.z = "straightBottomSerifedWithCrossbar"
selector."z/sansSerif" = "straightSeriflessWithCrossBar"
selector."z/reduced" = "straightBottomSerifed"
selector.zDesc = "straightSeriflessWithCrossBar"
selector."zDesc/reduced" = "straightSerifless"
[prime.z.variants.straight-bottom-serifed-with-horizontal-crossbar]
rank = 9
description = "Standard `z` with a horizontal crossbar and serif at bottom"
selector.z = "straightBottomSerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."z/reduced" = "straightBottomSerifed"
selector.zDesc = "straightSeriflessWithHorizontalCrossBar"
selector."zDesc/reduced" = "straightSerifless"
[prime.z.variants.straight-top-serifed]
rank = 10
description = "Standard `z` with serif at top"
selector.z = "straightTopSerifed"
selector."z/sansSerif" = "straightSerifless"
selector."z/reduced" = "straightTopSerifed"
selector.zDesc = "straightTopSerifed"
selector."zDesc/reduced" = "straightTopSerifed"
[prime.z.variants.straight-top-serifed-with-crossbar]
rank = 11
description = "Standard `z` with a diagonal crossbar and serif at top"
selector.z = "straightTopSerifedWithCrossbar"
selector."z/sansSerif" = "straightSeriflessWithCrossBar"
selector."z/reduced" = "straightTopSerifed"
selector.zDesc = "straightTopSerifedWithCrossbar"
selector."zDesc/reduced" = "straightTopSerifed"
[prime.z.variants.straight-top-serifed-with-horizontal-crossbar]
rank = 12
description = "Standard `z` with a horizontal crossbar and serif at top"
selector.z = "straightTopSerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "straightSeriflessWithHorizontalCrossBar"
selector."z/reduced" = "straightTopSerifed"
selector.zDesc = "straightTopSerifedWithHorizontalCrossBar"
selector."zDesc/reduced" = "straightTopSerifed"
[prime.z.variants.curly-serifless]
rank = 13
description = "Curly `z` without serifs"
selector.z = "curlySerifless"
selector."z/sansSerif" = "curlySerifless"
selector."z/reduced" = "curlySerifless"
selector.zDesc = "curlySerifless"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-serifless-with-crossbar]
rank = 14
description = "Curly `z` with a diagonal crossbar, and without serifs"
selector.z = "curlySeriflessWithCrossBar"
selector."z/sansSerif" = "curlySeriflessWithCrossBar"
selector."z/reduced" = "curlySerifless"
selector.zDesc = "curlySeriflessWithCrossBar"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-serifless-with-horizontal-crossbar]
rank = 15
description = "Curly `z` with a horizontal crossbar, and without serifs"
selector.z = "curlySeriflessWithHorizontalCrossBar"
selector."z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."z/reduced" = "curlySerifless"
selector.zDesc = "curlySeriflessWithHorizontalCrossBar"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-serifed]
rank = 16
description = "Curly `z` with top and bottom serifs"
selector.z = "curlySerifed"
selector."z/sansSerif" = "curlySerifless"
selector."z/reduced" = "curlySerifed"
selector.zDesc = "curlyTopSerifed"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.curly-serifed-with-crossbar]
rank = 17
description = "Curly `z` with a diagonal crossbar and serifs"
selector.z = "curlySerifedWithCrossBar"
selector."z/sansSerif" = "curlySeriflessWithCrossBar"
selector."z/reduced" = "curlySerifed"
selector.zDesc = "curlyTopSerifedWithCrossbar"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.curly-serifed-with-horizontal-crossbar]
rank = 18
description = "Curly `z` with a horizontal crossbar and serifs"
selector.z = "curlySerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."z/reduced" = "curlySerifed"
selector.zDesc = "curlyTopSerifedWithHorizontalCrossBar"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.curly-bottom-serifed-with-crossbar]
rank = 19
description = "Curly `z` with serif at bottom"
selector.z = "curlyBottomSerifed"
selector."z/sansSerif" = "curlySerifless"
selector."z/reduced" = "curlyBottomSerifed"
selector.zDesc = "curlySerifless"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-bottom-serifed-with-horizontal-crossbar]
rank = 20
description = "Curly `z` with a diagonal crossbar and serif at bottom"
selector.z = "curlyBottomSerifedWithCrossbar"
selector."z/sansSerif" = "curlySeriflessWithCrossBar"
selector."z/reduced" = "curlyBottomSerifed"
selector.zDesc = "curlySeriflessWithCrossBar"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-bottom-serifed]
rank = 21
description = "Curly `z` with a horizontal crossbar and serif at bottom"
selector.z = "curlyBottomSerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."z/reduced" = "curlyBottomSerifed"
selector.zDesc = "curlySeriflessWithHorizontalCrossBar"
selector."zDesc/reduced" = "curlySerifless"
[prime.z.variants.curly-top-serifed]
rank = 22
description = "Curly `z` with serif at top"
selector.z = "curlyTopSerifed"
selector."z/sansSerif" = "curlySerifless"
selector."z/reduced" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifed"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.curly-top-serifed-with-crossbar]
rank = 23
description = "Curly `z` with a diagonal crossbar and serif at top"
selector.z = "curlyTopSerifedWithCrossbar"
selector."z/sansSerif" = "curlySeriflessWithCrossBar"
selector."z/reduced" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifedWithCrossbar"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.curly-top-serifed-with-horizontal-crossbar]
rank = 24
description = "Curly `z` with a horizontal crossbar and serif at top"
selector.z = "curlyTopSerifedWithHorizontalCrossBar"
selector."z/sansSerif" = "curlySeriflessWithHorizontalCrossBar"
selector."z/reduced" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifedWithHorizontalCrossBar"
selector."zDesc/reduced" = "curlyTopSerifed"
[prime.z.variants.cursive]
rank = 25
description = "Cursive `z`"
selector.z = "cursive"
selector."z/sansSerif" = "cursive"
selector."z/reduced" = "cursive"
selector.zDesc = "cursive"
selector."zDesc/reduced" = "cursive"
[prime.z.variants.cursive-with-crossbar]
rank = 26
description = "Cursive `z` with a diagonal cross bar"
selector.z = "cursiveWithCrossBar"
selector."z/sansSerif" = "cursiveWithCrossBar"
selector."z/reduced" = "cursive"
selector.zDesc = "cursiveWithCrossBar"
selector."zDesc/reduced" = "cursive"
[prime.z.variants.cursive-with-horizontal-crossbar]
rank = 27
description = "Cursive `z` with a horizontal cross bar"
selector.z = "cursiveWithHorizontalCrossBar"
selector."z/sansSerif" = "cursiveWithHorizontalCrossBar"
selector."z/reduced" = "cursive"
selector.zDesc = "cursiveWithHorizontalCrossBar"
selector."zDesc/reduced" = "cursive"
[prime.z.variants-buildup.stages.overlay.with-horizontal-crossbar]
rank = 3
keySuffix = "with-horizontal-crossbar"
descriptionSuffix = "a horizontal crossbar"
selectorSuffix.z = "withHorizontalCrossBar"
selectorSuffix."z/sansSerif" = "withHorizontalCrossBar"
selectorSuffix."z/reduced" = ""
selectorSuffix.zDesc = "withHorizontalCrossBar"
selectorSuffix."zDesc/reduced" = ""