diff --git a/changes/29.1.1.md b/changes/29.1.1.md index 856063f6e3..dadad24199 100644 --- a/changes/29.1.1.md +++ b/changes/29.1.1.md @@ -1,2 +1,5 @@ * Make presence of descender serif automatic for GREEK CAPITAL KAI SYMBOL (`U+03CF`). * Make presence of top-left serif automatic for CYRILLIC {CAPITAL|SMALL} LETTER BASHKIR KA (`U+04A0`..`U+04A1`). +* Make GREEK SMALL LETTER DIGAMMA (`U+03DD`) respond to top-right serif variants of Greek Capital Gamma (`cv56`). +* Make GREEK SMALL LETTER HETA (`U+0371`) respond to top-left serif variants of `H` (`cv08`). +* Make CYRILLIC {CAPITAL|SMALL} LIGATURE EN GHE (`U+04A4`..`U+04A5`) respond to top-right serif variants of Greek Capital Gamma (`cv56`). diff --git a/packages/font-glyphs/src/letter/greek/upper-gamma.ptl b/packages/font-glyphs/src/letter/greek/upper-gamma.ptl index 282698f4d1..0059ca5634 100644 --- a/packages/font-glyphs/src/letter/greek/upper-gamma.ptl +++ b/packages/font-glyphs/src/letter/greek/upper-gamma.ptl @@ -38,10 +38,10 @@ glyph-block Letter-Greek-Upper-Gamma: begin include : tagged 'serifRT' : VSerif.dr (RightSB - OX) top VJut define GammaConfig : object - serifless { SLAB-NONE SLAB } - topRightSerifed { SLAB-TR true } - bottomSerifed { SLAB-BOTTOM SLAB } - serifed { SLAB-ALL true } + serifless { SLAB-NONE false } + topRightSerifed { SLAB-TR true } + bottomSerifed { SLAB-BOTTOM false } + serifed { SLAB-ALL true } foreach { suffix { slabType doSM } } [Object.entries GammaConfig] : do create-glyph "grek/Gamma.\(suffix)" : glyph-proc @@ -139,16 +139,19 @@ glyph-block Letter-Greek-Upper-Gamma: begin select-variant 'grek/smcpGamma' 0x1D26 (shapeFrom -- 'cyrl/ghe.upright') (follow -- 'grek/Gamma') select-variant 'cyrl/ge' 0x491 select-variant 'cyrl/gheMidHook' 0x495 (follow -- 'cyrl/ghe.upright') - - select-variant 'grek/Digamma' 0x3DC (follow -- 'grek/Gamma') - - create-glyph 'grek/digamma' 0x3DD : glyph-proc + + create-glyph "grek/digamma.serifless" : glyph-proc include : MarkSet.p include : GammaShape XH Descender SLAB-NONE - local yBar : mix 0 XH DesignParameters.upperEBarPos - include : HBar.m GammaBarLeft (RightSB - [xMidBarShrink SLAB]) yBar - if SLAB : include : tagged 'serifRM' - VSerif.dr (RightSB - [xMidBarShrink SLAB]) (yBar + HalfStroke) [mix Stroke VJut 0.5] + include : HBar.m GammaBarLeft (RightSB - [xMidBarShrink SLAB]) [mix 0 XH DesignParameters.upperEBarPos] + + create-glyph "grek/digamma.topRightSerifed" : glyph-proc + include [refer-glyph "grek/digamma.serifless"] AS_BASE ALSO_METRICS + include : tagged 'serifRM' + VSerif.dr (RightSB - [xMidBarShrink SLAB]) ([mix 0 XH DesignParameters.upperEBarPos] + HalfStroke) [mix Stroke VJut 0.5] + + select-variant 'grek/Digamma' 0x3DC + select-variant 'grek/digamma' 0x3DD define [GhaynOverlayBar top] : LetterBarOverlay.l GammaBarLeft (top * (1 - OverlayPos)) diff --git a/packages/font-glyphs/src/letter/latin/upper-h.ptl b/packages/font-glyphs/src/letter/latin/upper-h.ptl index 8dbd88ae72..6a40c95a4e 100644 --- a/packages/font-glyphs/src/letter/latin/upper-h.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-h.ptl @@ -1,7 +1,7 @@ $$include '../../meta/macros.ptl' import [mix linreg clamp fallback] from "@iosevka/util" -import [MathSansSerif] from "@iosevka/glyph/relation" +import [MathSansSerif DependentSelector] from "@iosevka/glyph/relation" glyph-module @@ -13,6 +13,7 @@ glyph-block Letter-Latin-Upper-H : begin glyph-block-import Mark-Below : belowMarkMid glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Shared : SetGrekUpperTonos + glyph-block-import Letter-Shared : CreateSelectorVariants DefineSelectorGlyph glyph-block-import Letter-Shared-Shapes : SerifFrame RightwardTailedBar glyph-block-import Letter-Shared-Shapes : LeftHook MidHook EngHook UpwardHookShape glyph-block-import Letter-Shared-Shapes : CyrDescender CyrTailDescender PalatalHook @@ -65,7 +66,9 @@ glyph-block Letter-Latin-Upper-H : begin include : HBar.t (xRightBar + O) xTopRight top include : HSerifs slabType top 0 df.leftSB xRightBar sw - if vSlab : include : VSerif.dr xTopRight top VJut (df.mvs / HVContrast) + if vSlab + then : include : VSerif.dr xTopRight top VJut (df.mvs / HVContrast) + else : eject-contour 'serifRT' define [HwairShape df top yend slabType] : glyph-proc include : VBar.l df.leftSB 0 top df.mvs @@ -91,19 +94,22 @@ glyph-block Letter-Latin-Upper-H : begin Math.min OverlayStroke (0.625 * (yt - yb)) define HConfig : object - serifless { HShape HTurned SLAB-NONE false } - tailedSerifless { TailedHShape HTurned SLAB-NONE false } - topLeftSerifed { HShape HTurned SLAB-TOP-LEFT false } - tailedTopLeftSerifed { TailedHShape HTurned SLAB-TOP-LEFT SLAB } - topLeftBottomRightSerifed { HShape HTurned SLAB-TOP-LEFT-BOTTOM-RIGHT true } - serifed { HShape HTurned SLAB-ALL true } - tailedSerifed { TailedHShape HTurned SLAB-TAILED-CYRILLIC true } - serifedExceptBottomRight { HShape HTurned SLAB-TAILED-CYRILLIC true } - serifedBGR { HShape HTurned SLAB-ALL-BGR true } - tailedSerifedBGR { TailedHShape HTurned SLAB-TAILED-CYRILLIC-BGR true } - serifedSmallHeta { HShape HTurned [if SLAB SLAB-TOP-LEFT SLAB-NONE] false } - - foreach { suffix { Body TurnedBody slabType enGheVSlab } } [Object.entries HConfig] : do + serifless { HShape HTurned SLAB-NONE } + tailedSerifless { TailedHShape HTurned SLAB-NONE } + topLeftSerifed { HShape HTurned SLAB-TOP-LEFT } + tailedTopLeftSerifed { TailedHShape HTurned SLAB-TOP-LEFT } + topLeftBottomRightSerifed { HShape HTurned SLAB-TOP-LEFT-BOTTOM-RIGHT } + serifed { HShape HTurned SLAB-ALL } + tailedSerifed { TailedHShape HTurned SLAB-TAILED-CYRILLIC } + serifedExceptBottomRight { HShape HTurned SLAB-TAILED-CYRILLIC } + serifedBGR { HShape HTurned SLAB-ALL-BGR } + tailedSerifedBGR { TailedHShape HTurned SLAB-TAILED-CYRILLIC-BGR } + + define EnGheGheConfig : object + serifless false + topRightSerifed true + + foreach { suffix { Body TurnedBody slabType } } [Object.entries HConfig] : do create-glyph "H.\(suffix)" : glyph-proc include : MarkSet.capital include : Body SB RightSB CAP @@ -165,15 +171,24 @@ glyph-block Letter-Latin-Upper-H : begin eject-contour 'serifLT' eject-contour 'serifLB' - create-glyph "cyrl/EnGhe.\(suffix)" : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.capital - include : EnGheShape Body df CAP slabType enGheVSlab + define enGheDf : DivFrame para.diversityM 3 - create-glyph "cyrl/enghe.\(suffix)" : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.e - include : EnGheShape Body df XH slabType enGheVSlab + DefineSelectorGlyph "cyrl/EnGhe" suffix [enGheDf.markSet.capital] + DefineSelectorGlyph "cyrl/enghe" suffix [enGheDf.markSet.e] + + foreach { suffixGhe enGheVSlab } [Object.entries EnGheGheConfig] : do + create-glyph "cyrl/EnGhe.\(suffix).\(suffixGhe)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : EnGheShape Body enGheDf CAP slabType enGheVSlab + + create-glyph "cyrl/enghe.\(suffix).\(suffixGhe)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : EnGheShape Body enGheDf XH slabType enGheVSlab + + select-variant "cyrl/EnGhe.\(suffix)" (follow -- 'cyrl/EnGhe/GhePart') + select-variant "cyrl/enghe.\(suffix)" (follow -- 'cyrl/enghe/ghePart') create-glyph "Hwair.\(suffix)" : glyph-proc local df : include : DivFrame para.diversityM 3 @@ -232,7 +247,7 @@ glyph-block Letter-Latin-Upper-H : begin alias 'cyrl/En/descenderBase' null 'H/descenderBase' select-variant 'leftHalfH' 0x2C75 select-variant 'rightHalfH' 0xA7F5 - alias 'grek/Heta' 0x370 'leftHalfH' + select-variant 'grek/Heta' 0x370 (shapeFrom -- 'leftHalfH') select-variant 'smcpH' 0x29C (follow -- 'H') select-variant 'leftHalfSmcpH' 0x2C76 (follow -- 'leftHalfH') @@ -240,7 +255,7 @@ glyph-block Letter-Latin-Upper-H : begin select-variant 'cyrl/en' 0x43D (shapeFrom -- 'smcpH') select-variant 'cyrl/en/descenderBase' (shapeFrom -- 'smcpH') select-variant 'cyrl/en.BGR' (shapeFrom -- 'smcpH') - alias 'grek/heta' 0x371 'leftHalfSmcpH.serifedSmallHeta' + select-variant 'grek/heta' 0x371 (shapeFrom -- 'leftHalfSmcpH') derive-composites 'HDescender' 0x2C67 'H/descenderBase' [CyrDescender.rSideJut RightSB 0] @@ -250,8 +265,8 @@ glyph-block Letter-Latin-Upper-H : begin derive-composites 'cyrl/EnTail' 0x4C9 'cyrl/En/descenderBase' [CyrTailDescender.rSideJut RightSB 0] derive-composites 'cyrl/enTail' 0x4CA 'cyrl/en/descenderBase' [CyrTailDescender.rSideJut RightSB 0] - select-variant 'cyrl/EnGhe' 0x4A4 (follow -- 'H') - select-variant 'cyrl/enghe' 0x4A5 (follow -- 'cyrl/en') + CreateSelectorVariants 'cyrl/EnGhe' 0x4A4 [Object.keys HConfig] (follow -- 'H') + CreateSelectorVariants 'cyrl/enghe' 0x4A5 [Object.keys HConfig] (follow -- 'cyrl/en') select-variant 'Hwair' 0x1F6 select-variant 'HHookLeft' 0xA7AA diff --git a/params/variants.toml b/params/variants.toml index b1cfe3bb9d..b890f4d9a5 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -393,10 +393,12 @@ tagKind = "letter" rank = 1 description = "H without serifs" selector.H = "serifless" +selector."H/sansSerif" = "serifless" selector."H/descenderBase" = "serifless" selector.leftHalfH = "serifless" selector.rightHalfH = "serifless" -selector."H/sansSerif" = "serifless" +selector."grek/Heta" = "serifless" +selector."grek/heta" = "serifless" selector.Hwair = "serifless" selector.HHookLeft = "serifless" selector."cyrl/Nje/leftHalf" = "serifless" @@ -406,10 +408,12 @@ selector."cyrl/Nje/leftHalf/reduced" = "serifless" rank = 2 description = "H with serif only at top left" selector.H = "topLeftSerifed" +selector."H/sansSerif" = "serifless" selector."H/descenderBase" = "topLeftSerifed" selector.leftHalfH = "topLeftSerifed" selector.rightHalfH = "serifless" -selector."H/sansSerif" = "serifless" +selector."grek/Heta" = "topLeftSerifed" +selector."grek/heta" = "topLeftSerifed" selector.Hwair = "topLeftSerifed" selector.HHookLeft = "serifless" selector."cyrl/Nje/leftHalf" = "topLeftSerifed" @@ -419,10 +423,12 @@ selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed" rank = 3 description = "H with serif only at top left and bottom right" selector.H = "topLeftBottomRightSerifed" +selector."H/sansSerif" = "serifless" selector."H/descenderBase" = "topLeftSerifed" selector.leftHalfH = "topLeftSerifed" selector.rightHalfH = "topLeftBottomRightSerifed" -selector."H/sansSerif" = "serifless" +selector."grek/Heta" = "topLeftSerifed" +selector."grek/heta" = "topLeftSerifed" selector.Hwair = "topLeftSerifed" selector.HHookLeft = "topLeftBottomRightSerifed" selector."cyrl/Nje/leftHalf" = "topLeftSerifed" @@ -432,10 +438,12 @@ selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed" rank = 4 description = "H with serifs" selector.H = "serifed" +selector."H/sansSerif" = "serifless" selector."H/descenderBase" = "serifed" selector.leftHalfH = "serifed" selector.rightHalfH = "serifed" -selector."H/sansSerif" = "serifless" +selector."grek/Heta" = "serifed" +selector."grek/heta" = "topLeftSerifed" selector.Hwair = "serifedExceptBottomRight" selector.HHookLeft = "serifed" selector."cyrl/Nje/leftHalf" = "serifed" @@ -4710,40 +4718,56 @@ rank = 1 description = "Standard capital Gamma (`Γ`) without serifs" selector."grek/Gamma" = "serifless" selector."grek/Gamma/sansSerif" = "serifless" +selector."grek/Digamma" = "serifless" +selector."grek/digamma" = "serifless" selector."cyrl/Ghe" = "serifless" -selector."cyrl/Ge" = "serifless" selector."cyrl/ghe.upright" = "serifless" +selector."cyrl/Ge" = "serifless" selector."cyrl/ge" = "serifless" +selector."cyrl/EnGhe/GhePart" = "serifless" +selector."cyrl/enghe/ghePart" = "serifless" [prime.capital-gamma.variants.top-right-serifed] rank = 2 description = "Standard capital Gamma (`Γ`) with serifs at top right" selector."grek/Gamma" = "topRightSerifed" selector."grek/Gamma/sansSerif" = "serifless" +selector."grek/Digamma" = "topRightSerifed" +selector."grek/digamma" = "topRightSerifed" selector."cyrl/Ghe" = "topRightSerifed" -selector."cyrl/Ge" = "serifless" selector."cyrl/ghe.upright" = "topRightSerifed" +selector."cyrl/Ge" = "serifless" selector."cyrl/ge" = "serifless" +selector."cyrl/EnGhe/GhePart" = "topRightSerifed" +selector."cyrl/enghe/ghePart" = "topRightSerifed" [prime.capital-gamma.variants.bottom-serifed] rank = 3 description = "Standard capital Gamma (`Γ`) with bottom serif" selector."grek/Gamma" = "bottomSerifed" selector."grek/Gamma/sansSerif" = "serifless" +selector."grek/Digamma" = "bottomSerifed" +selector."grek/digamma" = "serifless" selector."cyrl/Ghe" = "bottomSerifed" -selector."cyrl/Ge" = "bottomSerifed" selector."cyrl/ghe.upright" = "serifless" +selector."cyrl/Ge" = "bottomSerifed" selector."cyrl/ge" = "serifless" +selector."cyrl/EnGhe/GhePart" = "serifless" +selector."cyrl/enghe/ghePart" = "serifless" [prime.capital-gamma.variants.serifed] rank = 4 description = "Standard capital Gamma (`Γ`) with motion serifs at top and bottom" selector."grek/Gamma" = "serifed" selector."grek/Gamma/sansSerif" = "serifless" +selector."grek/Digamma" = "serifed" +selector."grek/digamma" = "topRightSerifed" selector."cyrl/Ghe" = "serifed" -selector."cyrl/Ge" = "serifed" selector."cyrl/ghe.upright" = "serifed" +selector."cyrl/Ge" = "serifed" selector."cyrl/ge" = "serifed" +selector."cyrl/EnGhe/GhePart" = "topRightSerifed" +selector."cyrl/enghe/ghePart" = "topRightSerifed"