Add variant selectors for Greek lower Beta/Gamma/Nu/Upsilon. (#2451)

This commit is contained in:
John McWilliams 2024-08-01 20:30:15 -04:00 committed by GitHub
parent dc9d7f3ac2
commit 8f945312fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 173 additions and 21 deletions

View file

@ -1,4 +1,5 @@
* Add separate variant selectors for Cyrillic Capital En/Er (`VXAA`, `VXAB`).
* Add variant selectors for Greek lower Beta/Gamma/Nu/Upsilon (`VXAC`, `VXAD`, `VXAE`, `VXAF`).
* Optimize glyph for VERTICAL LINE WITH MIDDLE DOT (`U+2327`).
* Improve `k` (`cv46`) and `x` (`cv58`) variants used by `ss03`, `ss08`, `ss09`, `ss10`, `ss12`, `ss14`, and `ss18` under slab italic.
* Add characters:

View file

@ -9,8 +9,17 @@ glyph-block Letter-Greek-Lower-Gamma : begin
glyph-block-import Common-Derivatives
glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft
create-glyph 'grek/gamma.straight' : glyph-proc
include : MarkSet.p
include : refer-glyph "v.straightSerifless"
include : VBar.m Middle Descender HalfStroke
create-glyph 'grek/gamma' 0x3B3 : glyph-proc
create-glyph 'grek/gamma.curly' : glyph-proc
include : MarkSet.p
include : refer-glyph "v.curlySerifless"
include : VBar.m Middle Descender HalfStroke
create-glyph 'grek/gamma.casual' : glyph-proc
include : MarkSet.p
local xMid : [mix SB RightSB 0.46] + [HSwToV HalfStroke]
@ -28,6 +37,8 @@ glyph-block Letter-Greek-Lower-Gamma : begin
quadControls 0 0.3 6
g4 xMid 0 [widths.rhs : Stroke * 0.9]
select-variant 'grek/gamma' 0x3B3
create-glyph 'mathbb/grek/gamma' 0x213D : glyph-proc
include : MarkSet.p

View file

@ -8,7 +8,10 @@ glyph-block Letter-Greek-Lower-Nu : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
create-glyph 'grek/nu' 0x3BD : glyph-proc
alias 'grek/nu.straight' null 'v.straightSerifless'
alias 'grek/nu.curly' null 'v.curlySerifless'
create-glyph 'grek/nu.casual' : glyph-proc
include : MarkSet.e
local xmid : Middle + HalfStroke * 0.75
include : dispiro
@ -21,3 +24,5 @@ glyph-block Letter-Greek-Lower-Nu : begin
curl RightSB (XH * 0.9) [heading Downward]
quadControls 0 0.3 6
g4 xmid 0
select-variant 'grek/nu' 0x3BD

View file

@ -2,6 +2,7 @@ $$include '../../meta/macros.ptl'
import [mix linreg clamp fallback] from "@iosevka/util"
import [DesignParameters] from "../../meta/aesthetics.mjs"
import [MathSansSerif] from "@iosevka/glyph/relation"
glyph-module
@ -9,7 +10,10 @@ glyph-block Letter-Greek-Lower-Upsilon : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [LowerUpsilonShape] : with-params [k top ada adb [sw Stroke]] : glyph-proc
alias 'grek/upsilon.straightSerifless' null 'u.toothlessRoundedSerifless'
alias 'grek/upsilon.straightSerifed' null 'u.toothlessRoundedMotionSerifed'
define [LowerUpsilonCasualShape] : with-params [k top ada adb [sw Stroke]] : glyph-proc
define xArcRight : RightSB - OX
define yArcRight : [mix 0 top 0.6] - sw * (0.2 + TanSlope)
define xArcEnd : [mix SB RightSB 0.82] + sw * 0.375
@ -22,8 +26,11 @@ glyph-block Letter-Greek-Lower-Upsilon : begin
g4 xArcRight yArcRight
g4 xArcEnd yArcEnd
create-glyph 'grek/upsilon' 0x3C5 : glyph-proc
create-glyph 'grek/upsilon.casualSerifless' : glyph-proc
include : MarkSet.e
include : LowerUpsilonShape 0.5 XH SmallArchDepthA SmallArchDepthB
if SLAB : include : HSerif.lt SB XH SideJut
include : LowerUpsilonCasualShape 0.5 XH SmallArchDepthA SmallArchDepthB
derive-composites 'grek/upsilon.casualSerifed' null 'grek/upsilon.casualSerifless' : HSerif.lt SB XH SideJut
select-variant 'grek/upsilon' 0x3C5
link-reduced-variant 'grek/upsilon/sansSerif' 'grek/upsilon' MathSansSerif

View file

@ -186,8 +186,6 @@ glyph-block Letter-Latin-Upper-B : begin
alias 'cyrl/Ve' 0x412 'B'
select-variant 'BBar'
select-variant 'smcpBBar' 0x1D03
select-variant 'Bhookleft' 0x181
define [CursiveCyrveShape top] : glyph-proc
@ -222,9 +220,7 @@ glyph-block Letter-Latin-Upper-B : begin
select-variant 'cyrl/ve' 0x432
select-variant 'smcpB' 0x299 (shapeFrom -- 'cyrl/ve')
alias 'grek/betaSymbol' 0x3D0 'cyrl/ve.cursiveTall'
alias 'cyrl/ve.BGR' null 'cyrl/ve.cursiveTall'
select-variant 'smcpBBar' 0x1D03
create-glyph 'mathbb/B' 0x1D539 : glyph-proc
include : MarkSet.capital
@ -237,7 +233,7 @@ glyph-block Letter-Latin-Upper-B : begin
VBar.r ([mix SB RightSB BArcMix] - BBD - OX * 2) (CAP * BBarPos) CAP BBS
VBar.l (SB + BBD) 0 CAP BBS
create-glyph 'grek/beta' 0x3B2 : glyph-proc
create-glyph 'grek/beta.standard' : glyph-proc
include : MarkSet.bp
include : LeaningAnchor.Below.VBar.l SB
define pBar 0.55
@ -265,7 +261,13 @@ glyph-block Letter-Latin-Upper-B : begin
arch.rhs 0 (swAfter -- ShoulderFine)
g4.up.end (SB + HVContrast * (Stroke - ShoulderFine)) adb [widths.rhs ShoulderFine]
derive-composites 'latn/beta' 0xA7B5 'grek/beta'
alias 'grek/beta.cursive' null 'cyrl/ve.cursiveTall'
select-variant 'grek/beta' 0x3B2
alias 'grek/betaSymbol' 0x3D0 'cyrl/ve.cursiveTall'
alias 'cyrl/ve.BGR' null 'cyrl/ve.cursiveTall'
derive-composites 'latn/beta' 0xA7B5 'grek/beta.standard'
if SLAB [SerifFrame.fromDf [DivFrame 1] XH Descender].lb.fullSide [no-shape]
create-glyph 'cyrl/veRounded' 0x1C80 : glyph-proc

View file

@ -5438,6 +5438,24 @@ selectorAffix."grek/alpha/sansSerif" = "tailed"
[prime.lower-beta]
sampler = "β"
samplerExplain = "Greek lower Beta"
nonBreakingTagForNewVariantSelector = "VXAC" # REMOVE IN NEXT MAJOR VERSION CHANGE
tagKind = "letter"
[prime.lower-beta.variants.standard]
rank = 1
description = "Greek lower Beta (`β`) with standard shape"
selector."grek/beta" = "standard"
[prime.lower-beta.variants.cursive]
rank = 2
description = "Greek lower Beta (`β`) with cursive shape"
selector."grek/beta" = "cursive"
[prime.capital-gamma]
sampler = "Γ"
samplerExplain = "Greek capital Gamma"
@ -5445,7 +5463,7 @@ tagKind = "letter"
[prime.capital-gamma.variants.serifless]
rank = 1
description = "Standard capital Gamma (`Γ`) without serifs"
description = "Greek capital Gamma (`Γ`) without serifs"
selector."grek/Gamma" = "serifless"
selector."grek/Gamma/sansSerif" = "serifless"
selector."grek/Digamma" = "serifless"
@ -5459,7 +5477,7 @@ selector."cyrl/enghe/ghePart" = "serifless"
[prime.capital-gamma.variants.top-right-serifed]
rank = 2
description = "Standard capital Gamma (`Γ`) with serifs at top right"
description = "Greek capital Gamma (`Γ`) with serifs at top right"
selector."grek/Gamma" = "topRightSerifed"
selector."grek/Gamma/sansSerif" = "serifless"
selector."grek/Digamma" = "topRightSerifed"
@ -5473,7 +5491,7 @@ selector."cyrl/enghe/ghePart" = "topRightSerifed"
[prime.capital-gamma.variants.bottom-serifed]
rank = 3
description = "Standard capital Gamma (`Γ`) with bottom serif"
description = "Greek capital Gamma (`Γ`) with bottom serif"
selector."grek/Gamma" = "bottomSerifed"
selector."grek/Gamma/sansSerif" = "serifless"
selector."grek/Digamma" = "bottomSerifed"
@ -5487,7 +5505,7 @@ selector."cyrl/enghe/ghePart" = "serifless"
[prime.capital-gamma.variants.serifed]
rank = 4
description = "Standard capital Gamma (`Γ`) with motion serifs at top and bottom"
description = "Greek capital Gamma (`Γ`) with motion serifs at top and bottom"
selector."grek/Gamma" = "serifed"
selector."grek/Gamma/sansSerif" = "serifless"
selector."grek/Digamma" = "serifed"
@ -5501,6 +5519,29 @@ selector."cyrl/enghe/ghePart" = "topRightSerifed"
[prime.lower-gamma]
sampler = "γ"
samplerExplain = "Greek lower Gamma"
nonBreakingTagForNewVariantSelector = "VXAD" # REMOVE IN NEXT MAJOR VERSION CHANGE
tagKind = "letter"
[prime.lower-gamma.variants.straight]
rank = 1
description = "Greek lower Gamma (`γ`) with straight shape"
selector."grek/gamma" = "straight"
[prime.lower-gamma.variants.curly]
rank = 2
description = "Greek lower Gamma (`γ`) with curly shape"
selector."grek/gamma" = "curly"
[prime.lower-gamma.variants.casual]
rank = 3
description = "Greek lower Gamma (`γ`) with casual shape"
selector."grek/gamma" = "casual"
[prime.capital-delta]
sampler = "Δ"
samplerExplain = "Greek capital Delta (`Δ`)"
@ -5784,6 +5825,29 @@ selectorAffix."grek/mu/sansSerif" = "serifless"
[prime.lower-nu]
sampler = "ν"
samplerExplain = "Greek lower Nu"
nonBreakingTagForNewVariantSelector = "VXAE" # REMOVE IN NEXT MAJOR VERSION CHANGE
tagKind = "letter"
[prime.lower-nu.variants.straight]
rank = 1
description = "Greek lower Nu (`ν`) with straight shape"
selector."grek/nu" = "straight"
[prime.lower-nu.variants.curly]
rank = 2
description = "Greek lower Nu (`ν`) with curly shape"
selector."grek/nu" = "curly"
[prime.lower-nu.variants.casual]
rank = 3
description = "Greek lower Nu (`ν`) with casual shape"
selector."grek/nu" = "casual"
[prime.lower-xi]
sampler = "ξ"
samplerExplain = "Greek lower Xi"
@ -5866,6 +5930,46 @@ selector."grek/tau/tailed" = "tau/semiTailed"
[prime.lower-upsilon]
sampler = "υ"
samplerExplain = "Greek lower Upsilon"
nonBreakingTagForNewVariantSelector = "VXAF" # REMOVE IN NEXT MAJOR VERSION CHANGE
tagKind = "letter"
[prime.lower-upsilon.variants-buildup]
entry = "body"
descriptionLeader = "Greek lower Upsilon (`υ`)"
[prime.lower-upsilon.variants-buildup.stages.body."*"]
next = "serifs"
[prime.lower-upsilon.variants-buildup.stages.body.straight]
rank = 1
descriptionAffix = "straight shape"
selectorAffix."grek/upsilon" = "straight"
selectorAffix."grek/upsilon/sansSerif" = "straight"
[prime.lower-upsilon.variants-buildup.stages.body.casual]
rank = 2
descriptionAffix = "casual shape"
selectorAffix."grek/upsilon" = "casual"
selectorAffix."grek/upsilon/sansSerif" = "casual"
[prime.lower-upsilon.variants-buildup.stages.serifs.serifless]
rank = 1
descriptionAffix = "serifs"
descriptionJoiner = "without"
selectorAffix."grek/upsilon" = "serifless"
selectorAffix."grek/upsilon/sansSerif" = "serifless"
[prime.lower-upsilon.variants-buildup.stages.serifs.serifed]
rank = 2
descriptionAffix = "serifs"
selectorAffix."grek/upsilon" = "serifed"
selectorAffix."grek/upsilon/sansSerif" = "serifless"
[prime.lower-chi]
sampler = "χ"
samplerExplain = "Greek lower Chi"
@ -8397,16 +8501,20 @@ capital-thorn = "serifless"
lower-thorn = "serifless"
# Non-latin
lower-alpha = "crossing"
lower-beta = "standard"
capital-gamma = "serifless"
lower-gamma = "casual"
capital-delta = "straight"
lower-delta = "rounded"
lower-iota = "serifed-semi-tailed"
capital-lambda = "straight-serifless"
lower-lambda = "straight"
lower-mu = "tailed-serifless"
lower-nu = "casual"
lower-xi = "flat-top"
lower-pi = "tailed"
lower-tau = "semi-tailed"
lower-upsilon = "casual-serifless"
lower-chi = "straight-serifless"
cyrl-a = "double-storey-serifless"
cyrl-ve = "standard-serifless"
@ -8562,6 +8670,7 @@ capital-gamma = "serifed"
capital-lambda = "straight-base-serifed"
lower-lambda = "straight-turn"
lower-mu = "tailed-serifed"
lower-upsilon = "casual-serifed"
lower-chi = "straight-bilateral-motion-serifed"
cyrl-a = "double-storey-serifed"
cyrl-ve = "standard-bilateral-serifed"
@ -8650,8 +8759,10 @@ long-s = "flat-hook-middle-serifed"
eszet = "longs-s-lig-serifless"
lower-eth = "straight-bar"
lower-iota = "tailed"
lower-gamma = "straight"
lower-lambda = "tailed-turn"
lower-mu = "toothed-serifless"
lower-nu = "straight"
lower-pi = "tailless"
lower-tau = "tailless"
lower-chi = "semi-chancery-straight-serifless"
@ -8854,6 +8965,7 @@ y = "straight-turn-serifless"
capital-eszet = "rounded-serifless"
long-s = "flat-hook-serifless"
eszet = "longs-s-lig-serifless"
lower-beta = "standard"
lower-chi = "semi-chancery-straight-serifless"
lower-eth = "straight-bar"
lower-lambda = "tailed-turn"
@ -8893,6 +9005,7 @@ k = "cursive-serifless"
l = "tailed"
long-s = "flat-hook-descending"
eszet = "longs-s-lig-descending-serifless"
lower-beta = "cursive"
cyrl-a = "single-storey-serifless"
cyrl-ve = "cursive-tall"
cyrl-zhe = "symmetric-connected"
@ -8978,6 +9091,7 @@ lower-eth = "straight-bar"
lower-iota = "serifed-flat-tailed"
lower-lambda = "straight-turn"
lower-tau = "flat-tailed"
lower-upsilon = "casual-serifed"
lower-chi = "semi-chancery-straight-serifless"
cyrl-a = "double-storey-serifless"
cyrl-ve = "standard-serifless"
@ -9742,8 +9856,10 @@ lower-alpha = "barred-earless-corner-tailed"
capital-gamma = "bottom-serifed"
lower-lambda = "straight-turn"
lower-mu = "toothless-corner-serifless"
lower-nu = "straight"
lower-xi = "rounded"
lower-pi = "small-capital"
lower-upsilon = "straight-serifless"
cyrl-a = "double-storey-tailed"
cyrl-capital-zhe = "symmetric-touching"
cyrl-zhe = "symmetric-touching"
@ -9811,6 +9927,7 @@ long-s = "bent-hook-bottom-serifed"
eszet = "longs-s-lig-bottom-serifed"
capital-gamma = "serifed"
lower-mu = "toothless-corner-serifed"
lower-upsilon = "straight-serifed"
cyrl-capital-ka = "symmetric-touching-serifed"
cyrl-ka = "symmetric-touching-serifed"
cyrl-em = "slanted-sides-hanging-serifed"
@ -9965,12 +10082,15 @@ long-s = "flat-hook-serifless"
eszet = "sulzbacher-serifless"
lower-eth = "straight-bar"
lower-alpha = "barred"
lower-gamma = "straight"
lower-delta = "flat-top"
lower-iota = "serifed-flat-tailed"
lower-lambda = "straight"
lower-mu = "toothed-serifless"
lower-nu = "straight"
lower-xi = "rounded"
lower-tau = "flat-tailed"
lower-upsilon = "straight-serifless"
cyrl-a = "double-storey-serifless"
cyrl-ve = "standard-serifless"
cyrl-em = "hanging-serifless"
@ -10031,6 +10151,7 @@ long-s = "flat-hook-bottom-serifed"
eszet = "sulzbacher-bottom-serifed"
lower-alpha = "barred-double-serifed"
lower-mu = "toothed-serifed"
lower-upsilon = "straight-serifed"
cyrl-a = "double-storey-serifed"
cyrl-ve = "standard-bilateral-serifed"
cyrl-ka = "symmetric-connected-serifed"
@ -10093,6 +10214,7 @@ lower-delta = "flat-top"
lower-iota = "serifed-flat-tailed"
lower-lambda = "tailed-turn"
lower-tau = "flat-tailed"
lower-upsilon = "straight-serifless"
lower-chi = "semi-chancery-straight-serifless"
cyrl-a = "double-storey-tailed"
cyrl-capital-ka = "symmetric-connected-bottom-right-serifed"
@ -10160,6 +10282,7 @@ x = "straight-serifed"
y = "straight-turn-serifed"
capital-eszet = "corner-bottom-serifed"
eszet = "traditional-flat-hook-bottom-serifed"
lower-upsilon = "straight-serifed"
cyrl-capital-ka = "symmetric-connected-serifed"
cyrl-ka = "symmetric-connected-serifed"
cyrl-em = "hanging-serifed"
@ -10502,8 +10625,10 @@ y = "straight-turn-serifless"
long-s = "flat-hook-middle-serifed-xh"
eszet = "longs-s-lig-serifless"
lower-alpha = "barred-tailed"
lower-gamma = "straight"
lower-lambda = "straight-turn"
lower-tau = "short-tailed"
lower-upsilon = "straight-serifless"
cyrl-a = "double-storey-tailed"
cyrl-ve = "standard-serifless"
cyrl-em = "hanging-serifless"
@ -10552,6 +10677,7 @@ z = "straight-serifed"
long-s = "flat-hook-double-serifed-xh"
eszet = "longs-s-lig-bottom-serifed"
lower-alpha = "barred-tailed-serifed"
lower-upsilon = "straight-serifed"
cyrl-ve = "standard-bilateral-serifed"
cyrl-ka = "symmetric-connected-serifed"
cyrl-em = "hanging-serifed"

View file

@ -5,7 +5,7 @@ export const ssStrings = [
["ABC.DEF.GHI.JKL.MNO.PQRS.TUV.WXYZ", "abc.def.ghi.jkl.mno.pqrs.tuv.wxyz"],
["!iIlL17|¦ ¢coO08BbDQ $5SZ2zs 96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"],
["1234567890 ,._-+= >< «¯-¬_» ~–÷+×", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"],
["CG6Qg9q¶ äöü Þẞðþſß ΓΔΛαδιλμξπτχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]]
["CG6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]]
];
function* makeSample(lbm, hotChars) {

View file

@ -5,7 +5,7 @@ const ssStrings = [
["ABC.DEF.GHI.JKL.MNO.PQRS.TUV.WXYZ", "abc.def.ghi.jkl.mno.pqrs.tuv.wxyz"],
["!iIlL17|¦ ¢coO08BbDQ $5SZ2zs 96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"],
["1234567890 ,._-+= >< «¯-¬_» ~–÷+×", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"],
["CG6Qg9q¶ äöü Þẞðþſß ΓΔΛαδιλμξπτχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]]
["CG6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]]
];
function* makeSample(theme, lbm, features, hotChars) {