Make Latin Rams Horn (ɤ) slightly wider under Etoile. (#2792)

This commit is contained in:
John McWilliams 2025-06-02 20:30:49 -04:00 committed by GitHub
parent a778e7e08b
commit b31b75559e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 58 additions and 36 deletions

6
changes/33.2.5.md Normal file
View file

@ -0,0 +1,6 @@
* Refine shape of the following characters:
- LATIN SMALL LETTER RAMS HORN (`U+0264).
- LATIN LETTER AIN (`U+1D25`).
- MODIFIER LETTER SMALL AIN (`U+1D5C`).
- LATIN CAPITAL LETTER RAMS HORN (`U+A7CB`).
- MODIFIER LETTER SMALL RAMS HORN (`U+10791`).

View file

@ -10,79 +10,95 @@ glyph-block Letter-Latin-Rams-Horn : begin
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : SerifFrame glyph-block-import Letter-Shared-Shapes : SerifFrame
define [LatinGammaShape bottom top] : glyph-proc define [LatinGammaShape df top bottom] : glyph-proc
local hf : [AdviceStroke 4] / 2 local hf : [AdviceStroke 4] / 2
local d : hf * 2 + Width * 0.05 local d : hf * 2 + df.width * 0.05
include : dispiro include : dispiro
widths.center widths.center
g4 (SB + [HSwToV HalfStroke] + O) top [heading Downward] g4 (df.leftSB + [HSwToV HalfStroke] + O) top [heading Downward]
quadControls 1 0.7 16 quadControls 1 0.7 16
g4 (Middle + d - hf) (bottom + d * (1 - TanSlope * 0.5)) [widths.center : 2 * hf] g4 (df.middle + d - hf) (bottom + d * (1 - TanSlope * 0.5)) [widths.center : 2 * hf]
arch.rhs bottom (sw -- 2 * hf) arch.rhs bottom (sw -- 2 * hf)
g4 (Middle - d + hf) (bottom + d * (1 + TanSlope * 0.5)) [widths.center : 2 * hf] g4 (df.middle - d + hf) (bottom + d * (1 + TanSlope * 0.5)) [widths.center : 2 * hf]
quadControls 0 0.3 16 quadControls 0 0.3 16
g4 (RightSB - [HSwToV HalfStroke] - O) top [widths.heading HalfStroke HalfStroke Upward] g4 (df.rightSB - [HSwToV HalfStroke] - O) top [widths.heading HalfStroke HalfStroke Upward]
create-glyph 'latn/gamma' 0x263 : glyph-proc create-glyph 'latn/gamma' 0x263 : glyph-proc
include : MarkSet.p local df : include : DivFrame 1
include : LatinGammaShape Descender XH include : df.markSet.p
include : LatinGammaShape df XH Descender
if SLAB : begin if SLAB : begin
local sf : SerifFrame.fromDf [DivFrame 1] XH Descender local sf : SerifFrame.fromDf df XH Descender
include : if para.isItalic sf.lt.outer [composite-proc sf.lt.full sf.rt.full] include : if para.isItalic sf.lt.outer : composite-proc sf.lt.full sf.rt.full
create-glyph 'latn/Gamma' 0x194 : glyph-proc create-glyph 'latn/Gamma' 0x194 : glyph-proc
include : MarkSet.capDesc local df : include : DivFrame 1
include : LatinGammaShape Descender CAP include : df.markSet.capDesc
include : LatinGammaShape df CAP Descender
if SLAB : begin if SLAB : begin
local sf : SerifFrame.fromDf [DivFrame 1] CAP Descender local sf : SerifFrame.fromDf df CAP Descender
include : composite-proc sf.lt.full sf.rt.full include : composite-proc sf.lt.full sf.rt.full
define [RamsHornShape fFill bottom top] : glyph-proc define [RamsHornShape df top bottom fFill] : glyph-proc
local k1 0.625 local k1 0.625
local k2 0.7 local k2 0.7
local kIntersection 0.15 local kIntersection 0.15
local d : 0.25 * (RightSB - SB) * k1 * TanSlope
local lExt : df.leftSB + 0.75 * OX
local rExt : df.rightSB - 0.75 * OX
local dfLoop : DivFrame 1
local lInner : Math.max (lExt + TINY) : df.middle - (dfLoop.rightSB - dfLoop.leftSB) / 2
local rInner : Math.min (rExt - TINY) : df.middle + (dfLoop.rightSB - dfLoop.leftSB) / 2
local d : 0.25 * (rInner - lInner) * k1 * TanSlope
local sw : AdviceStroke : if SLAB 3.50 2.75 local sw : AdviceStroke : if SLAB 3.50 2.75
local fine : AdviceStroke : if SLAB 3.75 3.50 local fine : AdviceStroke : if SLAB 3.75 3.50
local coFine : mix sw fine (kIntersection / k2) local coFine : mix sw fine : kIntersection / k2
local fillOffset : sw * 0.25 local fillOffset : sw * 0.25
include : union include : union
dispiro dispiro
widths.rhs sw widths.rhs sw
straight.right.start SB top [heading Rightward] flat lExt top [heading Rightward]
g4 Middle [mix top bottom kIntersection] [widths.rhs coFine] curl lInner top [heading Rightward]
g4.down.mid [mix Middle RightSB k1] ([mix top bottom k2] - d) [widths.rhs fine] g4 df.middle [mix top bottom kIntersection] [widths.rhs coFine]
g4.down.mid [mix df.middle rInner k1] ([mix top bottom k2] - d) [widths.rhs fine]
arch.rhs bottom (sw -- fine) arch.rhs bottom (sw -- fine)
g4.up.mid [mix Middle SB k1] ([mix top bottom k2] + d) g4.up.mid [mix df.middle lInner k1] ([mix top bottom k2] + d)
g4 Middle [mix top bottom kIntersection] [widths.rhs coFine] g4 df.middle [mix top bottom kIntersection] [widths.rhs coFine]
straight.right.end RightSB top [widths.rhs.heading sw Rightward] flat rInner top [widths.rhs.heading sw Rightward]
curl rExt top [heading Rightward]
if fFill if fFill
then : spiro-outline then : spiro-outline
corner Middle ([mix top bottom kIntersection] - fillOffset) corner df.middle ([mix top bottom kIntersection] - fillOffset)
g4.down.mid ([mix Middle RightSB k1] - fillOffset) ([mix top bottom k2] - d) g4.down.mid ([mix df.middle rInner k1] - fillOffset) ([mix top bottom k2] - d)
g4.left.mid [arch.adjust-x.bot Middle (sw -- fine)] (bottom + fillOffset) g4.left.mid [arch.adjust-x.bot df.middle (sw -- fine)] (bottom + fillOffset)
g4.up.mid ([mix Middle SB k1] + fillOffset) ([mix top bottom k2] + d) g4.up.mid ([mix df.middle lInner k1] + fillOffset) ([mix top bottom k2] + d)
close close
else : no-shape else : no-shape
if SLAB : begin if SLAB : begin
local swSlab : AdviceStroke 4.5 local swSlab : Math.min VJutStroke : AdviceStroke 4.5 df.adws
include : VSerif.dl SB (top - sw) (VJut * (sw / Stroke) - sw) swSlab include : VSerif.dl lExt (top - sw) (VJut * (sw / Stroke) - sw) swSlab
include : VSerif.dr RightSB (top - sw) (VJut * (sw / Stroke) - sw) swSlab include : VSerif.dr rExt (top - sw) (VJut * (sw / Stroke) - sw) swSlab
create-glyph 'ramshorn' 0x264 : glyph-proc create-glyph 'ramshorn' 0x264 : glyph-proc
include : MarkSet.e local df : include : DivFrame : if SLAB para.advanceScaleT 1
include : RamsHornShape false 0 XH include : df.markSet.e
include : RamsHornShape df XH 0 false
create-glyph 'Ramshorn' 0xA7CB : glyph-proc create-glyph 'Ramshorn' 0xA7CB : glyph-proc
include : MarkSet.capital local df : include : DivFrame : if SLAB para.advanceScaleT 1
include : RamsHornShape false 0 CAP include : df.markSet.capital
include : RamsHornShape df CAP 0 false
### Ayin ### Ayin
create-glyph 'latinAyin' 0x1D25 : glyph-proc create-glyph 'latinAyin' 0x1D25 : glyph-proc
include : MarkSet.e local df : include : DivFrame : if SLAB para.advanceScaleT 1
include : RamsHornShape true 0 XH include : df.markSet.e
include : FlipAround Middle (XH / 2) include : RamsHornShape df XH 0 true
include : FlipAround df.middle (XH / 2)