From 7c96f645c075fbfed2436d4438dd0c68290cdfb8 Mon Sep 17 00:00:00 2001 From: John McWilliams <37010132+jmcwilliams403@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:23:20 -0400 Subject: [PATCH] Add `rounded-vertical-sides` variants for `W`/`w`. (#2467) --- changes/31.3.0.md | 1 + .../font-glyphs/src/letter/latin/lower-m.ptl | 1 + packages/font-glyphs/src/letter/latin/w.ptl | 29 ++++++++++++++++- params/variants.toml | 32 +++++++++++++++---- 4 files changed, 56 insertions(+), 7 deletions(-) diff --git a/changes/31.3.0.md b/changes/31.3.0.md index 90c88d827..0e52d8016 100644 --- a/changes/31.3.0.md +++ b/changes/31.3.0.md @@ -1,2 +1,3 @@ * Add `diagonal-tailed-cursive` variants for Cyrillic Lower Ef (`cv93`). +* Add `rounded-vertical-sides` variants for Capital/Lower W (`cv32`, `cv57`). * Prevent clipping of texture-extended glyphs in Kitty. diff --git a/packages/font-glyphs/src/letter/latin/lower-m.ptl b/packages/font-glyphs/src/letter/latin/lower-m.ptl index 4f2634b32..2bfda0cd5 100644 --- a/packages/font-glyphs/src/letter/latin/lower-m.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-m.ptl @@ -182,6 +182,7 @@ glyph-block Letter-Latin-Lower-M : begin include : tagged 'barL' : VBar.l df.leftSB lbot (top - DToothlessRise) df.mvs # include : tagged 'barM' : VBar.m mid mbot (top - DToothlessRise) df.mvs + glyph-block-export EarlessRoundedDoubleArchSmallMShape define [EarlessRoundedDoubleArchSmallMShape df top lbot mbot rbot _mid] : glyph-proc local mid : fallback _mid df.middle include : union diff --git a/packages/font-glyphs/src/letter/latin/w.ptl b/packages/font-glyphs/src/letter/latin/w.ptl index e9fc35241..0b1a96eae 100644 --- a/packages/font-glyphs/src/letter/latin/w.ptl +++ b/packages/font-glyphs/src/letter/latin/w.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Latin-W : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared : CreateTurnedLetter glyph-block-import Letter-Shared-Shapes : DiagTail SerifFrame VerticalHook + glyph-block-import Letter-Latin-Lower-M : EarlessRoundedDoubleArchSmallMShape glyph-block-import Letter-Latin-Upper-M : MShape define FORM-CURLY 0 @@ -269,6 +270,31 @@ glyph-block Letter-Latin-W : begin include : VerticalHook.r df.rightSB (top - TailY - HalfStroke - O) TailX (-TailY) + define [WRounded df top bodyType slabType] : glyph-proc + include : new-glyph : glyph-proc + include : EarlessRoundedDoubleArchSmallMShape df top 0 (top * 0.4) 0 + include : FlipAround (df.width / 2) (top / 2) + + local sf : SerifFrame top 0 df.leftSB df.rightSB + include : match slabType + [Just SERIFS-AUTO] : NeedSlab SLAB : composite-proc sf.lt.full sf.rt.full + [Just SERIFS-ALL] : composite-proc sf.lt.full sf.rt.full + [Just SERIFS-MOTION] : begin sf.lt.outer + ___ : glyph-proc + + define [WHookTopRounded df top bodyType slabType] : glyph-proc + include : new-glyph : glyph-proc + include : EarlessRoundedDoubleArchSmallMShape df top (TailY + HalfStroke + O) (top * 0.4) 0 + include : FlipAround (df.width / 2) (top / 2) + + local sf : SerifFrame top 0 df.leftSB df.rightSB + include : match slabType + [Just SERIFS-AUTO] : NeedSlab SLAB sf.lt.full + [Just SERIFS-ALL] : begin sf.lt.full + [Just SERIFS-MOTION] : begin sf.lt.outer + ___ : glyph-proc + + include : VerticalHook.r df.rightSB (top - TailY - HalfStroke - O) TailX (-TailY) (sw -- df.mvs) define [WCursiveImplImpl fHookTop df top bodyType slabType] : glyph-proc define fine : AdviceStroke 3.25 df.div @@ -327,9 +353,10 @@ glyph-block Letter-Latin-W : begin straightDoubleV { WShapeImpl WHooktopShape FORM-DOUBLE-V } straightFlatTop { WShapeImpl WHooktopShape FORM-FLAT-TOP } straightVerticalSides { WVertSides WVSHookTopShape FORM-STRAIGHT } + roundedVerticalSides { WRounded WHookTopRounded FORM-CURLY } curly { WShapeImpl WHooktopShape FORM-CURLY } cursive { WCursiveImpl WHookTopCursive FORM-CURLY } - cyrlCapialOmega { WShapeImpl WHooktopShape FORM-CYRL-OMEGA } + cyrlCapialOmega { WShapeImpl WHooktopShape FORM-CYRL-OMEGA } cyrlSmallOmega { WShapeImpl WHooktopShape FORM-CYRL-OMEGA } # Serifs diff --git a/params/variants.toml b/params/variants.toml index 296af6a09..28f0101ec 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -1818,11 +1818,19 @@ selectorAffix.WHookTop = "straightAsymmetric" [prime.capital-w.variants-buildup.stages.body.straight-vertical-sides] rank = 6 -descriptionAffix = "body shape with vertical sides" +descriptionAffix = "straight body shape with vertical sides" selectorAffix.W = "straightVerticalSides" selectorAffix."W/sansSerif" = "straightVerticalSides" selectorAffix.WHookTop = "straightVerticalSides" +[prime.capital-w.variants-buildup.stages.body.rounded-vertical-sides] +rank = 7 +nonBreakingVariantAdditionPriority = 100 +descriptionAffix = "rounded body shape with vertical sides" +selectorAffix.W = "roundedVerticalSides" +selectorAffix."W/sansSerif" = "roundedVerticalSides" +selectorAffix.WHookTop = "roundedVerticalSides" + [prime.capital-w.variants-buildup.stages.serifs.serifless] rank = 1 descriptionAffix = "serifs" @@ -4620,13 +4628,22 @@ selectorAffix.wHookTop = "curly" [prime.w.variants-buildup.stages.body.straight-vertical-sides] rank = 3 groupRank = 1 -descriptionAffix = "body shape with vertical sides" +descriptionAffix = "straight body shape with vertical sides" selectorAffix.w = "straightVerticalSides" selectorAffix."w/sansSerif" = "straightVerticalSides" selectorAffix.wHookTop = "straightVerticalSides" -[prime.w.variants-buildup.stages.body.straight-flat-top] +[prime.w.variants-buildup.stages.body.rounded-vertical-sides] rank = 4 +groupRank = 1 +nonBreakingVariantAdditionPriority = 100 +descriptionAffix = "rounded body shape with vertical sides" +selectorAffix.w = "roundedVerticalSides" +selectorAffix."w/sansSerif" = "roundedVerticalSides" +selectorAffix.wHookTop = "roundedVerticalSides" + +[prime.w.variants-buildup.stages.body.straight-flat-top] +rank = 5 groupRank = 2 descriptionAffix = "straight body shape that the middle is forced to be aligned the top" selectorAffix.w = "straightFlatTop" @@ -4634,7 +4651,7 @@ selectorAffix."w/sansSerif" = "straightFlatTop" selectorAffix.wHookTop = "straightFlatTop" [prime.w.variants-buildup.stages.body.straight-double-v] -rank = 5 +rank = 6 groupRank = 2 descriptionAffix = "body shape like double V" selectorAffix.w = "straightDoubleV" @@ -4642,7 +4659,7 @@ selectorAffix."w/sansSerif" = "straightDoubleV" selectorAffix.wHookTop = "straightDoubleV" [prime.w.variants-buildup.stages.body.straight-asymmetric] -rank = 6 +rank = 7 groupRank = 2 descriptionAffix = "asymmetric shape" selectorAffix.w = "straightAsymmetric" @@ -4650,7 +4667,7 @@ selectorAffix."w/sansSerif" = "straightAsymmetric" selectorAffix.wHookTop = "straightAsymmetric" [prime.w.variants-buildup.stages.body.cursive] -rank = 7 +rank = 8 groupRank = 3 descriptionAffix = "cursive shape" selectorAffix.w = "cursive" @@ -9808,6 +9825,7 @@ j = "flat-hook-serifed" k = "symmetric-connected-serifless" l = "hooky" t = "flat-hook" +w = "rounded-vertical-sides-serifless" y = "cursive-flat-hook-serifless" long-s = "flat-hook-middle-serifed" eszet = "sulzbacher-serifless" @@ -9850,6 +9868,7 @@ g = "single-storey-flat-hook-serifed" i = "serifed" k = "symmetric-connected-serifed" l = "serifed" +w = "rounded-vertical-sides-serifed" x = "straight-serifed" y = "cursive-flat-hook-serifed" z = "straight-serifed" @@ -9867,6 +9886,7 @@ g = "single-storey-flat-hook-serifless" i = "serifed-flat-tailed" k = "symmetric-connected-top-left-and-bottom-right-serifed" l = "serifed-flat-tailed" +w = "rounded-vertical-sides-motion-serifed" x = "straight-bilateral-motion-serifed" y = "cursive-flat-hook-motion-serifed" cyrl-ka = "symmetric-connected-top-left-and-bottom-right-serifed"