From 02e8fe60ca530549ec1f5842b48da6491492f96b Mon Sep 17 00:00:00 2001 From: be5invis Date: Sat, 19 Aug 2023 01:33:37 -0700 Subject: [PATCH] Add variant selection for Guillemets (#1899). --- changes/26.2.0.md | 1 + .../glyphs/symbol/punctuation/guillemet.ptl | 54 +++++++++++++------ params/variants.toml | 36 +++++++++++++ .../templates/stylistic-set.mjs | 4 +- 4 files changed, 77 insertions(+), 18 deletions(-) diff --git a/changes/26.2.0.md b/changes/26.2.0.md index 20e2ddef9..5940bde35 100644 --- a/changes/26.2.0.md +++ b/changes/26.2.0.md @@ -12,6 +12,7 @@ * Make below marks to avoid bottom-right Ogoneks (#1789). * Use oval shape for Empty Set symbols to distinguish with O-Slash (#1822). * Implement leaning mark mechanism for `F`, `L`, `P`, `b`, `d`, `h`, `k`, `p`, `q`, `r` to get better mark placement. Now, "narrow" marks will align to these letters' extension parts (#1851). +* Add variant selection for Guillemets (#1899). * Fix detached cedilla in Hookless asymmetric LATIN SMALL LETTER T WITH CEDILLA (`U+0163`) (#1914). * Fix broken hookless/tailless/asymmetric `t` variants in `ſt` ligature (`U+FB05`) (#1915). * Remove unnecessary tailed variants for Cyrillic Shha with Descender (`U+0527`) (#1916). diff --git a/font-src/glyphs/symbol/punctuation/guillemet.ptl b/font-src/glyphs/symbol/punctuation/guillemet.ptl index 1ad0e483d..c98d9aa87 100644 --- a/font-src/glyphs/symbol/punctuation/guillemet.ptl +++ b/font-src/glyphs/symbol/punctuation/guillemet.ptl @@ -9,32 +9,54 @@ glyph-block Symbol-Punctuation-Guillemet : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - create-glyph 'singleGuillemetLeft' 0x2039 : glyph-proc + create-glyph 'singleGuillemetLeft.straight' : glyph-proc local top : mix SymbolMid ParenTop 0.5 local bot : mix SymbolMid ParenBot 0.5 + local mid : mix bot top 0.5 local extension 0.55 - local cor 1 - local sw : AdviceStroke 3.5 + local sw : AdviceStroke 3 + local fine : AdviceStroke 4 - include : dispiro - widths.center sw - g4 [mix Middle RightSB extension] top - quadControls 0.4 0.75 - g4 [mix Middle SB extension] [mix top bot 0.5] [widths.center.heading (cor * sw) Leftward] + include : intersection [MaskAbove mid] : dispiro + flat [mix Middle SB extension] mid [widths.rhs sw] + curl [mix Middle RightSB extension] top [widths.center fine] - include : dispiro - widths.center (sw * cor) - g4 [mix Middle SB extension] [mix top bot 0.5] [heading Rightward] - quadControls (1 - 0.4) (1 - 0.75) - g4 [mix Middle RightSB extension] bot [widths.center sw] + include : intersection [MaskBelow mid] : dispiro + flat [mix Middle SB extension] mid [widths.lhs sw] + curl [mix Middle RightSB extension] bot [widths.center fine] include : Translate (-(RightSB - SB) * 0.05) 0 - create-glyph 'guillemetLeft' 0xAB : glyph-proc - include : refer-glyph "singleGuillemetLeft" + create-glyph 'singleGuillemetLeft.curly' : glyph-proc + local top : mix SymbolMid ParenTop 0.5 + local bot : mix SymbolMid ParenBot 0.5 + local mid : mix bot top 0.5 + local extension 0.55 + + local sw : AdviceStroke 3 + local fine : AdviceStroke 4 + + include : intersection [MaskAbove mid] : dispiro + g4 [mix Middle SB extension] (mid + sw * 0.25) [widths.rhs sw] + quadControls 0.6 0.3 + g4 [mix Middle RightSB extension] top [widths.center fine] + + include : intersection [MaskBelow mid] : dispiro + g4 [mix Middle SB extension] (mid - sw * 0.25) [widths.lhs sw] + quadControls 0.6 0.3 + g4 [mix Middle RightSB extension] bot [widths.center fine] + + include : VBar.l [mix Middle SB extension] (mid - sw * 0.25) (mid + sw * 0.25) sw + + include : Translate (-(RightSB - SB) * 0.05) 0 + + select-variant 'singleGuillemetLeft' 0x2039 (follow -- 'guillemet') + + derive-glyphs 'guillemetLeft' 0xAB 'singleGuillemetLeft' : function [src sel] : glyph-proc + include : refer-glyph src include : Translate ((RightSB - SB) * 0.5) 0 - include : refer-glyph "singleGuillemetLeft" + include : refer-glyph src include : Translate (-(RightSB - SB) * 0.25) 0 turned 'singleGuillemetRight' 0x203A "singleGuillemetLeft" Middle SymbolMid diff --git a/params/variants.toml b/params/variants.toml index 305acaa70..18a467fc4 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -6569,6 +6569,24 @@ selectorAffix."micro" = "serifed" +[prime.guillemet] +sampler = "« »" +samplerExplain = "Guillemets" +nonBreakingTagForNewVariantSelector = "VXAC" # REMOVE IN NEXT MAJOR VERSION CHANGE +tagKind = "symbol" + +[prime.guillemet.variants.straight] +rank = 1 +description = "Straight Guillemets (`« »`)" +selector."guillemet" = "straight" + +[prime.guillemet.variants.curly] +rank = 2 +description = "Curly Guillemets (`« »`)" +selector."guillemet" = "curly" + + + [prime.lig-ltgteq] sampler = "<= >=" samplerExplain = "Less-equal and Greater-equal ligations" @@ -6845,6 +6863,7 @@ diacritic-dot = "round" partial-derivative = "curly-bar" lower-eth = "curly-bar" micro-sign = "toothed-serifless" +guillemet = "curly" lig-neq = "slightly-slanted" lig-equal-chain = "with-notch" lig-hyphen-chain = "with-notch" @@ -6944,6 +6963,7 @@ cyrl-capital-u = "straight-turn-serifed" cyrl-capital-ya = "straight-serifed" cyrl-ya = "straight-serifed" micro-sign = "toothed-serifed" +guillemet = "straight" [composite.slab.upright-oblique] d = "toothed-serifed" @@ -7035,6 +7055,7 @@ number-sign = "slanted" at = "fourfold" percent = "rings-continuous-slash" lower-eth = "straight-bar" +guillemet = "straight" [composite.ss01.slab-override.design] capital-d = "more-rounded-bilateral-serifed" @@ -7115,6 +7136,7 @@ partial-derivative = "straight-bar" lower-eth = "straight-bar" punctuation-dot = "square" diacritic-dot = "square" +guillemet = "straight" [composite.ss02.slab-override.design] capital-j = "serifed" @@ -7177,6 +7199,7 @@ at = "fourfold" question = "corner-flat-hooked" lower-eth = "straight-bar" micro-sign = "tailed-serifless" +guillemet = "straight" [composite.ss03.italic] a = "single-storey-serifless" @@ -7267,6 +7290,7 @@ lower-eth = "straight-bar" micro-sign = "tailed-serifless" punctuation-dot = "square" diacritic-dot = "square" +guillemet = "straight" [composite.ss04.slab-override.design] capital-d = "more-rounded-bilateral-serifed" @@ -7334,6 +7358,7 @@ ampersand = "et-toothless-corner" at = "compact" cent = "open" percent = "rings-continuous-slash" +guillemet = "straight" lig-ltgteq = "slanted" lig-equal-chain = "without-notch" @@ -7398,6 +7423,7 @@ percent = "rings-continuous-slash" bar = "force-upright" punctuation-dot = "square" diacritic-dot = "square" +guillemet = "straight" [composite.ss06.slab-override.design] capital-d = "more-rounded-bilateral-serifed" @@ -7459,6 +7485,7 @@ pilcrow = "low" number-sign = "slanted" at = "fourfold" percent = "rings-continuous-slash" +guillemet = "straight" [composite.ss07.slab-override.design] capital-d = "more-rounded-bilateral-serifed" @@ -7545,6 +7572,7 @@ dollar = "open" cent = "open" percent = "dots" paren = "large-contour" +guillemet = "straight" lig-ltgteq = "slanted" lig-neq = "slightly-slanted-dotted" lig-equal-chain = "with-notch" @@ -7640,6 +7668,7 @@ number-sign = "slanted" dollar = "open" bar = "force-upright" micro-sign = "tailed-serifless" +guillemet = "straight" lig-neq = "more-slanted" [composite.ss09.italic] @@ -7703,6 +7732,7 @@ underscore = "low" pilcrow = "low" micro-sign = "toothless-rounded-serifless" percent = "rings-continuous-slash" +guillemet = "straight" [composite.ss10.italic] i = "serifed-flat-tailed" @@ -7804,6 +7834,7 @@ dollar = "open" cent = "open" micro-sign = "toothless-corner-serifless" percent = "rings-continuous-slash" +guillemet = "straight" [composite.ss12.italic] a = "single-storey-earless-corner-tailed" @@ -7956,6 +7987,7 @@ percent = "rings-continuous-slash" lower-eth = "straight-bar" lig-ltgteq = "slanted" question = "corner-flat-hooked" +guillemet = "straight" lig-neq = "more-slanted" lig-equal-chain = "without-notch" @@ -8029,6 +8061,7 @@ number-sign = "slanted-open" ampersand = "upper-open" question = "corner" brace = "curly-flat-boundary" +guillemet = "straight" [composite.ss15.italic] a = "single-storey-serifless" @@ -8128,6 +8161,7 @@ number-sign = "slanted" percent = "rings-continuous-slash" lower-eth = "straight-bar" micro-sign = "toothed-bottom-right-serifed" +guillemet = "straight" [composite.ss16.slab-override.design] capital-d = "more-rounded-bilateral-serifed" @@ -8200,6 +8234,7 @@ micro-sign = "tailed-serifless" punctuation-dot = "square" diacritic-dot = "square" brace = "curly-flat-boundary" +guillemet = "straight" [composite.ss17.italic] a = "single-storey-tailed" @@ -8280,6 +8315,7 @@ question = "corner" number-sign = "slanted" percent = "rings-continuous-slash" micro-sign = "tailed-serifless" +guillemet = "straight" [composite.ss18.italic] f = "extended-crossbar-at-x-height" diff --git a/utility/generate-samples/templates/stylistic-set.mjs b/utility/generate-samples/templates/stylistic-set.mjs index 947821173..20db59f7f 100644 --- a/utility/generate-samples/templates/stylistic-set.mjs +++ b/utility/generate-samples/templates/stylistic-set.mjs @@ -3,8 +3,8 @@ import * as themes from "../themes/index.mjs"; // prettier-ignore const ssStrings = [ ["ABC.DEF.GHI.JKL.MNO.PQRS.TUV.WXYZ", "abc.def.ghi.jkl.mno.pqrs.tuv.wxyz"], - ["¢þſßðΓΛΔ αδιλμξ КУЗЯЖэльфязычникж", "float il1[]={1-2/3.4,5+6=7/8%90};"], - ["1234567890 ,._-+= >< ¯-¬_ >~–÷+×<", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"], + ["¢þſßð ΓΛΔαδιλμξ КУЗЯЖэльфязычникж", "float il1[]={1-2/3.4,5+6=7/8%90};"], + ["1234567890 ,._-+= >« ¯-¬_ »~–÷+×<", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"], ["!iIlL17|¦ coO08BbDQ $5SZ2zsz 96G&", [..."dbqp E3 g9qCGQ vvwVVW ", "<=", " ", "!="," ","==", " ", ">="]] ];