* Add bottom-serifed variants to Cyrillic Ze. (#2381)

This commit is contained in:
John McWilliams 2024-06-17 21:40:57 -04:00 committed by GitHub
parent 1b8d466de9
commit 43a4c87843
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 93 additions and 63 deletions

View file

@ -1 +1,2 @@
* Add separate variant selectors For Cyrillic Capital/Lower E (`VXAA`, `VXAB`).
* Add `unilateral-bottom-serifed` and `unilateral-bottom-inward-serifed` variants for Cyrillic Capital/Lower Ze (`cv69`, `cv70`).

View file

@ -179,6 +179,6 @@ glyph-block Letter-Cyrillic-De : begin
local ze : CyrZe 1 sb XH Descender xZeLeft xZeRight 0.65 Hook df.mvs
include : union [ze.Shape] [ze.AutoEndSerifL]
select-variant 'cyrl/Dzze' 0xA688 (follow -- 'cyrl/ze/topAttached')
select-variant 'cyrl/dzze.upright' (follow -- 'cyrl/ze/topAttached')
select-variant 'cyrl/dzze.italic' (follow -- 'cyrl/ze/topAttached')
select-variant 'cyrl/Dzze' 0xA688 (follow -- 'cyrl/ZeBottomSerifOnly')
select-variant 'cyrl/dzze.upright' (follow -- 'cyrl/zeBottomSerifOnly')
select-variant 'cyrl/dzze.italic' (follow -- 'cyrl/zeBottomSerifOnly')

View file

@ -7,7 +7,7 @@ glyph-module
glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Greek-Lower-Epsilon : CyrZe
glyph-block-import Letter-Greek-Lower-Epsilon : CyrZe EpsilonConfig
glyph-block-export SubDfDimBy4
define [SubDfDimBy4 pShift keeps df _o] : begin
@ -51,17 +51,6 @@ glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
include : CyrDzzheDeItalicShape df
do "ze subglyph"
define SLAB-NONE 0
define SLAB-CLASSICAL 1
define SLAB-INWARD 2
define ZeConfig : object
serifless { SLAB-NONE SLAB-NONE }
unilateralSerifed { SLAB-CLASSICAL SLAB-NONE }
bilateralSerifed { SLAB-CLASSICAL SLAB-CLASSICAL }
unilateralInwardSerifed { SLAB-INWARD SLAB-NONE }
bilateralInwardSerifed { SLAB-INWARD SLAB-INWARD }
define [CyrZhweZeShape slabTop slabBot df top hook] : glyph-proc
local [object subDf sw] : SubDfDimBy4 0 2 df OX
local ze : CyrZe slabTop slabBot top 0 subDf.leftSB subDf.rightSB 0.65 hook sw (xo -- 0.33 * OX)
@ -69,7 +58,7 @@ glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
include : ze.AutoStartSerifL
include : ze.AutoEndSerifL
foreach { suffix { slabTop slabBot } } [Object.entries ZeConfig] : do
foreach { suffix { slabTop slabBot } } [Object.entries EpsilonConfig] : do
create-glyph "cyrl/Zhwe/left.\(suffix)" : glyph-proc
define df : include : DivFrame para.diversityM 3.5
include : df.markSet.capital

View file

@ -208,13 +208,13 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
glyph-block-export EpsilonConfig
define EpsilonConfig : object
serifless { SLAB-NONE SLAB-NONE }
bottomSerifed { SLAB-NONE SLAB-CLASSICAL }
bottomInwardSerifed { SLAB-NONE SLAB-INWARD }
unilateralSerifed { SLAB-CLASSICAL SLAB-NONE }
bilateralSerifed { SLAB-CLASSICAL SLAB-CLASSICAL }
unilateralInwardSerifed { SLAB-INWARD SLAB-NONE }
bilateralInwardSerifed { SLAB-INWARD SLAB-INWARD }
seriflessDesc { SLAB-NONE SLAB-CLASSICAL }
unilateralInwardSerifedDesc { SLAB-INWARD SLAB-CLASSICAL }
hybridSerifed1 { SLAB-INWARD SLAB-CLASSICAL }
foreach { suffix { slabTop slabBot } } [Object.entries EpsilonConfig] : do
create-glyph "latn/Epsilon.\(suffix)" : glyph-proc
@ -471,22 +471,22 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
select-variant 'cyrl/Ze' 0x417
select-variant 'cyrl/ze' 0x437
select-variant 'cyrl/KsiBase' (follow -- 'cyrl/Ksi')
select-variant 'cyrl/ksiBase' (follow -- 'cyrl/ksi')
select-variant 'cyrl/KsiBase' (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'cyrl/ksiBase' (follow -- 'cyrl/zeTopSerifOnly')
select-variant 'cyrl/ze.BGR' (follow -- 'cyrl/ze')
alias 'latn/EpsilonRev' 0xA7AB 'cyrl/Ze'
alias 'latn/epsilonRev' 0x25C 'cyrl/ze'
select-variant 'cyrl/ZjeKomi' 0x504 (follow -- 'cyrl/Ksi')
select-variant 'cyrl/zjeKomi' 0x505 (follow -- 'cyrl/ksi')
select-variant 'cyrl/DzjeKomi' 0x506 (follow -- 'cyrl/Ksi')
select-variant 'cyrl/dzjeKomi' 0x507 (follow -- 'cyrl/ksi')
select-variant 'cyrl/ZjeKomi' 0x504 (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'cyrl/zjeKomi' 0x505 (follow -- 'cyrl/zeTopSerifOnly')
select-variant 'cyrl/DzjeKomi' 0x506 (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'cyrl/dzjeKomi' 0x507 (follow -- 'cyrl/zeTopSerifOnly')
derive-composites 'cyrl/Dhe' 0x498 'cyrl/Ze' 'cedillaExtShapeBelowOArc'
derive-composites 'cyrl/dhe' 0x499 'cyrl/ze' 'cedillaExtShapeBelowSOArc'
select-variant 'latn/epsilon/descBase' (shapeFrom -- 'latn/epsilon')
select-variant 'latn/epsilonRev/descBase' (shapeFrom -- 'cyrl/ze') (follow -- 'latn/epsilon/descBase')
select-variant 'latn/epsilonRev/descBase' (shapeFrom -- 'cyrl/ze') (follow -- 'cyrl/ze/descBase')
derive-composites 'latn/epsilonRetroflexHook' 0x1D93 'latn/epsilon/descBase'
RetroflexHook.r RightSB 0 (refSw -- [AdviceStroke2 2 3 XH])

View file

@ -64,5 +64,5 @@ glyph-block Letter-Latin-Yogh : begin
include : MarkSet.capital
include : YoghShape slabTop XH Descender
select-variant 'Yogh' 0x21C
select-variant 'yogh' 0x21D
select-variant 'Yogh' 0x21C (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'yogh' 0x21D (follow -- 'cyrl/zeTopSerifOnly')

View file

@ -5353,40 +5353,58 @@ rank = 1
description = "Serifless Cyrillic Capital Ze (`З`)"
selector."latn/Epsilon" = "serifless"
selector."cyrl/Ze" = "serifless"
selector."cyrl/Ksi" = "serifless"
selector."Yogh" = "serifless"
selector."cyrl/ZeTopSerifOnly" = "serifless"
selector."cyrl/ZeBottomSerifOnly" = "serifless"
[prime.cyrl-capital-ze.variants.unilateral-serifed]
rank = 2
description = "Cyrillic Capital Ze (`З`) with serif at top"
selector."latn/Epsilon" = "unilateralSerifed"
selector."cyrl/Ze" = "unilateralSerifed"
selector."cyrl/Ksi" = "unilateralSerifed"
selector."Yogh" = "unilateralSerifed"
selector."cyrl/ZeTopSerifOnly" = "unilateralSerifed"
selector."cyrl/ZeBottomSerifOnly" = "serifless"
[prime.cyrl-capital-ze.variants.unilateral-bottom-serifed]
rank = 3
nonBreakingVariantAdditionPriority = 100
description = "Cyrillic Capital Ze (`З`) with serif at bottom"
selector."latn/Epsilon" = "unilateralSerifed"
selector."cyrl/Ze" = "bottomSerifed"
selector."cyrl/ZeTopSerifOnly" = "serifless"
selector."cyrl/ZeBottomSerifOnly" = "bottomSerifed"
[prime.cyrl-capital-ze.variants.bilateral-serifed]
rank = 3
rank = 4
description = "Cyrillic Capital Ze (`З`) with serif at both top and bottom"
selector."latn/Epsilon" = "bilateralSerifed"
selector."cyrl/Ze" = "bilateralSerifed"
selector."cyrl/Ksi" = "unilateralSerifed"
selector."Yogh" = "unilateralSerifed"
selector."cyrl/ZeTopSerifOnly" = "unilateralSerifed"
selector."cyrl/ZeBottomSerifOnly" = "bottomSerifed"
[prime.cyrl-capital-ze.variants.unilateral-inward-serifed]
rank = 4
rank = 5
description = "Cyrillic Capital Ze (`З`) with inward serif at top"
selector."latn/Epsilon" = "unilateralInwardSerifed"
selector."cyrl/Ze" = "unilateralInwardSerifed"
selector."cyrl/Ksi" = "unilateralInwardSerifed"
selector."Yogh" = "unilateralInwardSerifed"
selector."cyrl/ZeTopSerifOnly" = "unilateralInwardSerifed"
selector."cyrl/ZeBottomSerifOnly" = "serifless"
[prime.cyrl-capital-ze.variants.unilateral-bottom-inward-serifed]
rank = 6
nonBreakingVariantAdditionPriority = 200
description = "Cyrillic Capital Ze (`З`) with inward serif at bottom"
selector."latn/Epsilon" = "unilateralInwardSerifed"
selector."cyrl/Ze" = "bottomInwardSerifed"
selector."cyrl/ZeTopSerifOnly" = "serifless"
selector."cyrl/ZeBottomSerifOnly" = "bottomInwardSerifed"
[prime.cyrl-capital-ze.variants.bilateral-inward-serifed]
rank = 5
rank = 7
description = "Cyrillic Capital Ze (`З`) with inward serif at both top and bottom"
selector."latn/Epsilon" = "bilateralInwardSerifed"
selector."cyrl/Ze" = "bilateralInwardSerifed"
selector."cyrl/Ksi" = "unilateralInwardSerifed"
selector."Yogh" = "unilateralInwardSerifed"
selector."cyrl/ZeTopSerifOnly" = "unilateralInwardSerifed"
selector."cyrl/ZeBottomSerifOnly" = "bottomInwardSerifed"
@ -5399,11 +5417,11 @@ tagKind = "letter"
rank = 1
description = "Serifless Cyrillic Lower Ze (`з`)"
selector."latn/epsilon" = "serifless"
selector."latn/epsilon/descBase" = "seriflessDesc"
selector."latn/epsilon/descBase" = "bottomSerifed"
selector."cyrl/ze" = "serifless"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "serifless"
selector."yogh" = "serifless"
selector."cyrl/ze/descBase" = "bottomSerifed"
selector."cyrl/zeTopSerifOnly" = "serifless"
selector."cyrl/zeBottomSerifOnly" = "serifless"
[prime.cyrl-ze.variants.unilateral-serifed]
rank = 2
@ -5411,39 +5429,61 @@ description = "Cyrillic Lower Ze (`з`) with serif at top"
selector."latn/epsilon" = "unilateralSerifed"
selector."latn/epsilon/descBase" = "bilateralSerifed"
selector."cyrl/ze" = "unilateralSerifed"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "unilateralSerifed"
selector."yogh" = "unilateralSerifed"
selector."cyrl/ze/descBase" = "bilateralSerifed"
selector."cyrl/zeTopSerifOnly" = "unilateralSerifed"
selector."cyrl/zeBottomSerifOnly" = "serifless"
[prime.cyrl-ze.variants.unilateral-bottom-serifed]
rank = 3
nonBreakingVariantAdditionPriority = 100
description = "Cyrillic Lower Ze (`з`) with serif at bottom"
selector."latn/epsilon" = "unilateralSerifed"
selector."latn/epsilon/descBase" = "bilateralSerifed"
selector."cyrl/ze" = "bottomSerifed"
selector."cyrl/ze/descBase" = "bottomSerifed"
selector."cyrl/zeTopSerifOnly" = "serifless"
selector."cyrl/zeBottomSerifOnly" = "bottomSerifed"
[prime.cyrl-ze.variants.bilateral-serifed]
rank = 3
rank = 4
description = "Cyrillic Lower Ze (`з`) with serif at both top and bottom"
selector."latn/epsilon" = "bilateralSerifed"
selector."latn/epsilon/descBase" = "bilateralSerifed"
selector."cyrl/ze" = "bilateralSerifed"
selector."cyrl/ze/topAttached" = "bilateralSerifed"
selector."cyrl/ksi" = "unilateralSerifed"
selector."yogh" = "unilateralSerifed"
selector."cyrl/ze/descBase" = "bilateralSerifed"
selector."cyrl/zeTopSerifOnly" = "unilateralSerifed"
selector."cyrl/zeBottomSerifOnly" = "bottomSerifed"
[prime.cyrl-ze.variants.unilateral-inward-serifed]
rank = 4
rank = 5
description = "Cyrillic Lower Ze (`з`) with inward serif at top"
selector."latn/epsilon" = "unilateralInwardSerifed"
selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc"
selector."latn/epsilon/descBase" = "hybridSerifed1"
selector."cyrl/ze" = "unilateralInwardSerifed"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "unilateralInwardSerifed"
selector."yogh" = "unilateralInwardSerifed"
selector."cyrl/ze/descBase" = "hybridSerifed1"
selector."cyrl/zeTopSerifOnly" = "unilateralInwardSerifed"
selector."cyrl/zeBottomSerifOnly" = "serifless"
[prime.cyrl-ze.variants.unilateral-bottom-inward-serifed]
rank = 6
nonBreakingVariantAdditionPriority = 200
description = "Cyrillic Lower Ze (`з`) with inward serif at bottom"
selector."latn/epsilon" = "unilateralInwardSerifed"
selector."latn/epsilon/descBase" = "hybridSerifed1"
selector."cyrl/ze" = "bottomInwardSerifed"
selector."cyrl/ze/descBase" = "bottomSerifed"
selector."cyrl/zeTopSerifOnly" = "serifless"
selector."cyrl/zeBottomSerifOnly" = "bottomInwardSerifed"
[prime.cyrl-ze.variants.bilateral-inward-serifed]
rank = 5
rank = 7
description = "Cyrillic Lower Ze (`з`) with inward serif at both top and bottom"
selector."latn/epsilon" = "bilateralInwardSerifed"
selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc"
selector."latn/epsilon/descBase" = "hybridSerifed1"
selector."cyrl/ze" = "bilateralInwardSerifed"
selector."cyrl/ze/topAttached" = "bilateralInwardSerifed"
selector."cyrl/ksi" = "unilateralInwardSerifed"
selector."yogh" = "unilateralInwardSerifed"
selector."cyrl/ze/descBase" = "hybridSerifed1"
selector."cyrl/zeTopSerifOnly" = "unilateralInwardSerifed"
selector."cyrl/zeBottomSerifOnly" = "bottomInwardSerifed"