From 3dae50b429afc276585b8405a5f7a3de221ea99c Mon Sep 17 00:00:00 2001 From: be5invis Date: Fri, 11 Aug 2023 14:19:13 -0700 Subject: [PATCH] Make the top serif of Yogh (`U+021C`, `U+021D`) to follow Cyrillic Ze's variant selector (#1908). --- changes/26.1.0.md | 1 + .../glyphs/letter/greek/lower-epsilon.ptl | 22 +++--- font-src/glyphs/letter/latin-ext/yogh.ptl | 77 +++++++++++++------ params/variants.toml | 10 +++ 4 files changed, 77 insertions(+), 33 deletions(-) diff --git a/changes/26.1.0.md b/changes/26.1.0.md index 2e11b9935..eb731c2e1 100644 --- a/changes/26.1.0.md +++ b/changes/26.1.0.md @@ -7,6 +7,7 @@ * Drop APL form for `U+220D` as it is not used by any APL languages (#1901). * Add XH-height middle-serifed and dual-serifed variants for Eszet (#1904). * Remove duplicate variant glyphs for `U+0272` (#1905). +* Make the top serif of Yogh (`U+021C`, `U+021D`) to follow Cyrillic Ze's variant selector (#1908). * Merge duplicate variants of t with retroflex hook (`U+0288`, `U+1DF09`) (#1909). * Fix detached palatal hook on `U+01AB`` when t is both hookless/tailless and asymmetric (#1910). * Fix `cv36`, `cv46`, `cv47`, `cv48`, `cv49`, `cv50`, `cv61`, and `cv74` under Curly Slab. diff --git a/font-src/glyphs/letter/greek/lower-epsilon.ptl b/font-src/glyphs/letter/greek/lower-epsilon.ptl index 7211b1941..5392dbc05 100644 --- a/font-src/glyphs/letter/greek/lower-epsilon.ptl +++ b/font-src/glyphs/letter/greek/lower-epsilon.ptl @@ -119,7 +119,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin local stemFine : stroke * (ShoulderFine / Stroke) return : object stroke midx midy ada adb fine stemFine - define [CyrZeUpperShapeT sink] : begin + define [UpperShapeT sink] : begin define [object stroke midx midy ada adb fine stemFine] : Dim local middle : (left + right) / 2 return : sink @@ -143,7 +143,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin flat middle (midy - (fine - stroke / 2)) [widths.heading 0 fine Leftward] curl midx (midy - (fine - stroke / 2)) [heading Leftward] - define [CyrZeLowerShapeT sink] : begin + define [LowerShapeT sink] : begin define [object stroke midx midy ada adb fine stemFine] : Dim local middle : (left + right) / 2 return : sink @@ -167,11 +167,11 @@ glyph-block Letter-Greek-Lower-Epsilon : begin [Just CLOSED-STEM] : OBarLeft.arcEnd bot left right stroke stemFine ada2 adb2 midy __ : list [hookend (bot + O) (sw -- stroke)] [g4 (left + xo) (bot + hook)] - export : define [UpperShape] : CyrZeUpperShapeT dispiro + export : define [UpperShape] : UpperShapeT dispiro - export : define [LowerShape] : CyrZeLowerShapeT dispiro + export : define [LowerShape] : LowerShapeT dispiro - define [CyrZeLowerShapeTailed] : begin + define [LowerShapeTailed] : begin define [object stroke midx midy ada adb fine] : Dim local middle : (left + right) / 2 return : dispiro @@ -188,16 +188,16 @@ glyph-block Letter-Greek-Lower-Epsilon : begin curl midx (midy + (fine - stroke / 2)) [heading Leftward] export : define [Shape] : union - CyrZeUpperShapeT dispiro - CyrZeLowerShapeT dispiro + UpperShapeT dispiro + LowerShapeT dispiro export : define [ShapeMask] : union - CyrZeUpperShapeT spiro-outline - CyrZeLowerShapeT spiro-outline + UpperShapeT spiro-outline + LowerShapeT spiro-outline export : define [KsiBaseShape] : union - CyrZeUpperShapeT dispiro - CyrZeLowerShapeTailed + UpperShapeT dispiro + LowerShapeTailed export : define [AutoStartSerifL] : begin define [object stroke] : Dim diff --git a/font-src/glyphs/letter/latin-ext/yogh.ptl b/font-src/glyphs/letter/latin-ext/yogh.ptl index 869484924..0a4cb9f24 100644 --- a/font-src/glyphs/letter/latin-ext/yogh.ptl +++ b/font-src/glyphs/letter/latin-ext/yogh.ptl @@ -8,29 +8,62 @@ glyph-module glyph-block Letter-Latin-Yogh : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Shared-Shapes : SerifedArcStart ArcStartSerif + glyph-block-import Letter-Shared-Shapes : SerifedArcStart InwardSlabArcStart ArcStartSerif - define [YoghShape top bot] : glyph-proc - include : dispiro - if SLAB - then : SerifedArcStart.LtrRhs SB Middle top Stroke Hook - else : list [g4 SB (top - Hook) [widths.rhs]] [hookstart (top - O)] - g4 RightSB (top - ArchDepthB) - alsoThruThem {{0.5 0.75}} - g4 ([mix SB RightSB 0.1] + Stroke * 0.25) ([mix bot top 0.425] - HalfStroke) - include : dispiro - widths.rhs - g4 [mix SB RightSB 0.75] ([mix bot (top - ArchDepthB) 0.758] + HalfStroke) - g4 RightSB ([mix bot (top - ArchDepthB) 0.475]) - alsoThruThem {{0.25 0.6} {0.5 0.81}} - g4 SB (bot + O) + define SLAB-NONE 0 + define SLAB-CLASSICAL 1 + define SLAB-INWARD 2 - if SLAB : include : ArcStartSerif.L SB top Stroke Hook + define [PhantomBotYOfUpperHalf top bot] : [mix bot top OverlayPos] - 0.25 * Stroke + define [TopYOfLowerHalf top bot] : [mix bot top OverlayPos] + 0.06 * Stroke - create-glyph 'Yogh' 0x21C : glyph-proc - include : MarkSet.capital - include : YoghShape CAP 0 + define [UpperHalfT sink slab offset top bot] : begin + local py : PhantomBotYOfUpperHalf top bot + local yRightHalf : YSmoothMidR top py + local yBottomTerminal : mix top py 1.2 + return : sink + match slab + [Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs SB Middle (top - offset) Stroke Hook + [Just SLAB-INWARD] : InwardSlabArcStart.LtrRhs SB Middle (top - offset) Stroke Hook + __ : list [g4 SB (top - Hook) [widths.rhs]] [hookstart (top - offset - O)] + g4 (RightSB - offset) yRightHalf + alsoThruThem {{0.5 0.8} {0.75 0.92}} important + [if (sink == dispiro) g4 corner] ([mix SB RightSB 0.1] + Stroke * 0.25) yBottomTerminal - create-glyph 'yogh' 0x21D : glyph-proc - include : MarkSet.p - include : YoghShape XH Descender + define [LowerHalfT sink top bot] : begin + local pyt : mix bot [TopYOfLowerHalf top bot] 1.2 + local pyb : mix bot [TopYOfLowerHalf top bot] 0.2 + + return : sink + g4 (Middle - CorrectionOMidS) pyt [widths.rhs] + archv + g4 RightSB [YSmoothMidR pyt pyb] + alsoThruThem {{0.25 [StrokeWidthBlend 0.63 0.66]} {0.5 [StrokeWidthBlend 0.84 0.85]}} important + g4 (SB + 0.1 * HVContrast * Stroke) (bot + O) + + define [YoghShape slab top bot] : glyph-proc + include : UpperHalfT dispiro slab 0 top bot + include : difference + LowerHalfT dispiro top bot + UpperHalfT spiro-outline slab 0.1 top bot + + include : match slab + [Just SLAB-CLASSICAL] : ArcStartSerif.L SB top Stroke Hook + [Just SLAB-INWARD] : ArcStartSerif.InwardL SB top Stroke Hook + __ : no-shape + + define Config : object + serifless { SLAB-NONE } + unilateralSerifed { SLAB-CLASSICAL } + unilateralInwardSerifed { SLAB-INWARD } + + foreach { suffix { slabTop } } [Object.entries Config] : do + create-glyph "Yogh.\(suffix)" : glyph-proc + include : MarkSet.capital + include : YoghShape slabTop CAP 0 + create-glyph "yogh.\(suffix)" : glyph-proc + include : MarkSet.capital + include : YoghShape slabTop XH Descender + + select-variant 'Yogh' 0x21C + select-variant 'yogh' 0x21D diff --git a/params/variants.toml b/params/variants.toml index 2ab6b698f..69b76d6a8 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -4669,6 +4669,7 @@ description = "Serifless Cyrillic Capital Ze (`З`)" selector."latn/Epsilon" = "serifless" selector."cyrl/Ze" = "serifless" selector."cyrl/Ksi" = "serifless" +selector."Yogh" = "serifless" [prime.cyrl-capital-ze.variants.unilateral-serifed] rank = 2 @@ -4676,6 +4677,7 @@ description = "Cyrillic Capital Ze (`З`) with serif at top" selector."latn/Epsilon" = "unilateralSerifed" selector."cyrl/Ze" = "unilateralSerifed" selector."cyrl/Ksi" = "unilateralSerifed" +selector."Yogh" = "unilateralSerifed" [prime.cyrl-capital-ze.variants.bilateral-serifed] rank = 3 @@ -4683,6 +4685,7 @@ 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" [prime.cyrl-capital-ze.variants.unilateral-inward-serifed] rank = 4 @@ -4690,6 +4693,7 @@ description = "Cyrillic Capital Ze (`З`) with inward serif at top" selector."latn/Epsilon" = "unilateralInwardSerifed" selector."cyrl/Ze" = "unilateralInwardSerifed" selector."cyrl/Ksi" = "unilateralInwardSerifed" +selector."Yogh" = "unilateralInwardSerifed" [prime.cyrl-capital-ze.variants.bilateral-inward-serifed] rank = 5 @@ -4697,6 +4701,7 @@ description = "Cyrillic Capital Ze (`З`) with inward serif at both top and bott selector."latn/Epsilon" = "bilateralInwardSerifed" selector."cyrl/Ze" = "bilateralInwardSerifed" selector."cyrl/Ksi" = "unilateralInwardSerifed" +selector."Yogh" = "unilateralInwardSerifed" @@ -4713,6 +4718,7 @@ selector."latn/epsilon/descBase" = "seriflessDesc" selector."cyrl/ze" = "serifless" selector."cyrl/ze/topAttached" = "serifless" selector."cyrl/ksi" = "serifless" +selector."yogh" = "serifless" [prime.cyrl-ze.variants.unilateral-serifed] rank = 2 @@ -4722,6 +4728,7 @@ selector."latn/epsilon/descBase" = "bilateralSerifed" selector."cyrl/ze" = "unilateralSerifed" selector."cyrl/ze/topAttached" = "serifless" selector."cyrl/ksi" = "unilateralSerifed" +selector."yogh" = "unilateralSerifed" [prime.cyrl-ze.variants.bilateral-serifed] rank = 3 @@ -4731,6 +4738,7 @@ selector."latn/epsilon/descBase" = "bilateralSerifed" selector."cyrl/ze" = "bilateralSerifed" selector."cyrl/ze/topAttached" = "bilateralSerifed" selector."cyrl/ksi" = "unilateralSerifed" +selector."yogh" = "unilateralSerifed" [prime.cyrl-ze.variants.unilateral-inward-serifed] rank = 4 @@ -4740,6 +4748,7 @@ selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc" selector."cyrl/ze" = "unilateralInwardSerifed" selector."cyrl/ze/topAttached" = "serifless" selector."cyrl/ksi" = "unilateralInwardSerifed" +selector."yogh" = "unilateralInwardSerifed" [prime.cyrl-ze.variants.bilateral-inward-serifed] rank = 5 @@ -4749,6 +4758,7 @@ selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc" selector."cyrl/ze" = "bilateralInwardSerifed" selector."cyrl/ze/topAttached" = "bilateralInwardSerifed" selector."cyrl/ksi" = "unilateralInwardSerifed" +selector."yogh" = "unilateralInwardSerifed"