Skip to content

Commit

Permalink
Make four Γ/H-derived characters respond to cv (#2283)
Browse files Browse the repository at this point in the history
Co-authored-by: Belleve <[email protected]>
  • Loading branch information
jmcwilliams403 and be5invis authored Apr 9, 2024
1 parent 93b3450 commit 4b004bc
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 47 deletions.
3 changes: 3 additions & 0 deletions changes/29.1.1.md
Original file line number Diff line number Diff line change
@@ -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`).
27 changes: 15 additions & 12 deletions packages/font-glyphs/src/letter/greek/upper-gamma.ptl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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))

Expand Down
69 changes: 42 additions & 27 deletions packages/font-glyphs/src/letter/latin/upper-h.ptl
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -232,15 +247,15 @@ 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')
select-variant 'rightHalfSmcpH' 0xA7F6 (follow -- 'rightHalfH')
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]

Expand All @@ -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
Expand Down
40 changes: 32 additions & 8 deletions params/variants.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand All @@ -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"
Expand All @@ -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"
Expand Down Expand Up @@ -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"



Expand Down

0 comments on commit 4b004bc

Please sign in to comment.