From 07c93a3160735d177e76e8e7819853bbc313fe5b Mon Sep 17 00:00:00 2001 From: John McWilliams <37010132+jmcwilliams403@users.noreply.github.com> Date: Sun, 4 Aug 2024 12:26:53 -0400 Subject: [PATCH] Add variant selectors for Greek lower Phi/Psi (Last for forseeable future). (#2456) * Add variant selectors for Greek lower Phi/Psi. * fix --- changes/31.2.0.md | 1 + packages/font-glyphs/src/letter/greek.ptl | 3 +- .../src/letter/greek/lower-phi.ptl | 37 -------- .../letter/greek/{upper-phi.ptl => phi.ptl} | 43 +++++++++- packages/font-glyphs/src/letter/greek/psi.ptl | 31 ++++--- params/variants.toml | 86 +++++++++++++++++++ .../src/templates/package-sample.mjs | 4 +- .../src/templates/stylistic-set.mjs | 4 +- 8 files changed, 151 insertions(+), 58 deletions(-) create mode 100644 changes/31.2.0.md delete mode 100644 packages/font-glyphs/src/letter/greek/lower-phi.ptl rename packages/font-glyphs/src/letter/greek/{upper-phi.ptl => phi.ptl} (79%) diff --git a/changes/31.2.0.md b/changes/31.2.0.md new file mode 100644 index 0000000000..5b138971c0 --- /dev/null +++ b/changes/31.2.0.md @@ -0,0 +1 @@ +* Add variant selectors for Greek lower Phi/Psi (`VXAG`, `VXAH`). diff --git a/packages/font-glyphs/src/letter/greek.ptl b/packages/font-glyphs/src/letter/greek.ptl index d640f740c2..685c2f7210 100644 --- a/packages/font-glyphs/src/letter/greek.ptl +++ b/packages/font-glyphs/src/letter/greek.ptl @@ -7,7 +7,7 @@ export : define [apply] : begin run-glyph-module "./greek/upper-xi.mjs" run-glyph-module "./greek/pi.mjs" run-glyph-module "./greek/upper-sigma.mjs" - run-glyph-module "./greek/upper-phi.mjs" + run-glyph-module "./greek/phi.mjs" run-glyph-module "./greek/psi.mjs" run-glyph-module "./greek/upper-omega.mjs" @@ -24,7 +24,6 @@ export : define [apply] : begin run-glyph-module "./greek/lower-sigma.mjs" run-glyph-module "./greek/lower-sigma-final.mjs" run-glyph-module "./greek/lower-upsilon.mjs" - run-glyph-module "./greek/lower-phi.mjs" run-glyph-module "./greek/lower-omega.mjs" run-glyph-module "./greek/sampi.mjs" diff --git a/packages/font-glyphs/src/letter/greek/lower-phi.ptl b/packages/font-glyphs/src/letter/greek/lower-phi.ptl deleted file mode 100644 index 421129c4e8..0000000000 --- a/packages/font-glyphs/src/letter/greek/lower-phi.ptl +++ /dev/null @@ -1,37 +0,0 @@ -$$include '../../meta/macros.ptl' - -import [mix linreg clamp fallback] from "@iosevka/util" - -glyph-module - -glyph-block Letter-Greek-Lower-Phi : begin - glyph-block-import CommonShapes - glyph-block-import Common-Derivatives - - create-glyph 'taillessphi' 0x2C77 : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.e - - local x0 : mix df.leftSB df.rightSB 0.1 - local y1 : mix 0 XH 0.75 - local x1 : df.leftSB + OX * 2 - local y3 : XH * 0.66 - local y4 : XH * 0.65 - include : dispiro - widths.lhs df.mvs - g4 x0 XH - g4 x1 (XH * 0.55) - arch.lhs 0 (sw -- df.mvs) - g4 (df.width - x1) (XH * 0.55) - arcvh 8 - g4.left.mid [mix (df.width - x1) (df.middle - [HSwToV : 0.5 * df.mvs]) 0.525] XH [heading Leftward] - archv - flat (df.middle - [HSwToV : 0.5 * df.mvs]) y3 - curl (df.middle - [HSwToV : 0.5 * df.mvs]) (df.mvs * 0.2) [heading Downward] - - create-glyph 'grek/phi' 0x3C6 : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.p - include : refer-glyph "taillessphi" - include : VBar.m df.middle Descender (df.mvs * 0.2) - diff --git a/packages/font-glyphs/src/letter/greek/upper-phi.ptl b/packages/font-glyphs/src/letter/greek/phi.ptl similarity index 79% rename from packages/font-glyphs/src/letter/greek/upper-phi.ptl rename to packages/font-glyphs/src/letter/greek/phi.ptl index 241193758c..2086514628 100644 --- a/packages/font-glyphs/src/letter/greek/upper-phi.ptl +++ b/packages/font-glyphs/src/letter/greek/phi.ptl @@ -5,7 +5,7 @@ import [DesignParameters] from "../../meta/aesthetics.mjs" glyph-module -glyph-block Letter-Greek-Upper-Phi : begin +glyph-block Letter-Greek-Phi : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors ExtendBelowBaseAnchors @@ -41,6 +41,24 @@ glyph-block Letter-Greek-Upper-Phi : begin ada -- ada adb -- adb + define [GrekLowerPhiCursiveRing fFlatTB df y1 y2] : glyph-proc + local df : include : DivFrame para.diversityM 3 + include : df.markSet.e + + local l : df.leftSB + OX * 2 + local r : df.width - l + include : dispiro + widths.lhs df.mvs + g4 [mix df.leftSB df.rightSB 0.1] y2 + g4 l [mix y1 y2 0.55] + arch.lhs y1 (sw -- df.mvs) + g4 r [mix y1 y2 0.55] + arcvh 8 + g4.left.mid [mix r (df.middle - [HSwToV : 0.5 * df.mvs]) 0.525] y2 [heading Leftward] + archv + flat (df.middle - [HSwToV : 0.5 * df.mvs]) [mix y1 y2 0.66] + curl (df.middle - [HSwToV : 0.5 * df.mvs]) (y1 + 0.2 * df.mvs) [heading Downward] + define [StraightBar df bot y1 y2 top] : glyph-proc include : VBar.m df.middle bot (y1 + HalfStroke) include : VBar.m df.middle (y2 - HalfStroke) top @@ -108,13 +126,32 @@ glyph-block Letter-Greek-Upper-Phi : begin include : tagged 'serifMT' : HSerif.mt df.middle top MidJutSide include : tagged 'serifMB' : HSerif.mb df.middle bot MidJutSide - create-glyph 'grek/varphi' 0x3D5 : glyph-proc + create-glyph 'taillessphi' 0x2C77 : glyph-proc local df : include : DivFrame para.diversityM 3 - include : df.markSet.bp + include : df.markSet.e + include : GrekLowerPhiCursiveRing 0 df 0 XH + + create-glyph 'grek/phi.cursive' : glyph-proc + local df : include : DivFrame para.diversityM 3 + include : df.markSet.p + include : GrekLowerPhiCursiveRing 0 df 0 XH + include : VBar.m df.middle Descender (0.2 * df.mvs) + create-glyph 'grek/phi.straight' : glyph-proc + local df : include : DivFrame para.diversityM 3 + include : df.markSet.bp include : VarPhiRing 0 df 0 XH include : StraightBar df Descender 0 XH Ascender + create-glyph 'grek/phi.neohellenic' : glyph-proc + local df : include : DivFrame para.diversityM 3 + include : df.markSet.p + include : VarPhiRing 0 df 0 XH + include : VBar.m df.middle Descender (0.2 * df.mvs) + + select-variant 'grek/phi' 0x3C6 + alias 'grek/varphi' 0x3D5 'grek/phi.straight' + create-glyph 'latn/phi' 0x278 : glyph-proc local df : include : DivFrame para.diversityM 3 include [refer-glyph 'grek/varphi'] AS_BASE ALSO_METRICS diff --git a/packages/font-glyphs/src/letter/greek/psi.ptl b/packages/font-glyphs/src/letter/greek/psi.ptl index 825bd3f6f6..3f823c40d3 100644 --- a/packages/font-glyphs/src/letter/greek/psi.ptl +++ b/packages/font-glyphs/src/letter/greek/psi.ptl @@ -1,7 +1,8 @@ $$include '../../meta/macros.ptl' -import [mix linreg clamp fallback] from "@iosevka/util" +import [mix linreg clamp fallback SuffixCfg] from "@iosevka/util" import [DesignParameters] from "../../meta/aesthetics.mjs" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -39,14 +40,20 @@ glyph-block Letter-Greek-Psi : begin include : df.markSet.e include : PsiBaseShape df 0 (XH * 0.3) XH XH SLAB false SLAB SLAB - - create-glyph 'grek/psi' 0x3C8 : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.bp - include : PsiBaseShape df Descender 0 XH Ascender false false SLAB false - - create-glyph 'cyrl/psi' 0x471 : glyph-proc - local df : include : DivFrame para.diversityM 3 - include : df.markSet.p - include : PsiBaseShape df Descender 0 XH XH false false SLAB false - + define GrekLowerPsiConfig : SuffixCfg.weave + object # yBar + "" Ascender + flatTop XH + object # slab + serifless false + serifed true + + foreach { suffix { yBar slab } } [Object.entries GrekLowerPsiConfig] : do + create-glyph "grek/psi.\(suffix)" : glyph-proc + local df : include : DivFrame para.diversityM 3 + include : if (yBar > XH) [df.markSet.bp] [df.markSet.p] + include : PsiBaseShape df Descender 0 XH yBar false false slab false + + select-variant 'grek/psi' 0x3C8 + link-reduced-variant 'grek/psi/sansSerif' 'grek/psi' MathSansSerif + select-variant 'cyrl/psi' 0x471 (shapeFrom -- 'grek/psi') diff --git a/params/variants.toml b/params/variants.toml index f2d3039089..04664e2323 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -5970,6 +5970,29 @@ selectorAffix."grek/upsilon/sansSerif" = "serifless" +[prime.lower-phi] +sampler = "φ" +samplerExplain = "Greek lower Phi" +nonBreakingTagForNewVariantSelector = "VXAG" # REMOVE IN NEXT MAJOR VERSION CHANGE +tagKind = "letter" + +[prime.lower-phi.variants.straight] +rank = 1 +description = "Greek lower Phi (`φ`) with straight shape" +selector."grek/phi" = "straight" + +[prime.lower-phi.variants.cursive] +rank = 2 +description = "Greek lower Phi (`φ`) with cursive shape" +selector."grek/phi" = "cursive" + +[prime.lower-phi.variants.neo-hellenic] +rank = 3 +description = "Greek lower Phi (`ν`) with neo-hellenic shape" +selector."grek/phi" = "neohellenic" + + + [prime.lower-chi] sampler = "χ" samplerExplain = "Greek lower Chi" @@ -6052,6 +6075,50 @@ selectorAffix."grek/chi/sansSerif" = "serifless" +[prime.lower-psi] +sampler = "ψ" +samplerExplain = "Greek lower Psi" +nonBreakingTagForNewVariantSelector = "VXAH" # REMOVE IN NEXT MAJOR VERSION CHANGE +tagKind = "letter" + +[prime.lower-psi.variants-buildup] +entry = "body" +descriptionLeader = "Greek lower Psi (`ψ`)" + +[prime.lower-psi.variants-buildup.stages.body."*"] +next = "serifs" + +[prime.lower-psi.variants-buildup.stages.body.normal] +rank = 1 +keyAffix = "" +selectorAffix."grek/psi" = "" +selectorAffix."grek/psi/sansSerif" = "" +selectorAffix."cyrl/psi" = "flatTop" + +[prime.lower-psi.variants-buildup.stages.body.flat-top] +rank = 2 +descriptionAffix = "flat top" +selectorAffix."grek/psi" = "flatTop" +selectorAffix."grek/psi/sansSerif" = "flatTop" +selectorAffix."cyrl/psi" = "flatTop" + +[prime.lower-psi.variants-buildup.stages.serifs.serifless] +rank = 1 +descriptionAffix = "serifs" +descriptionJoiner = "without" +selectorAffix."grek/psi" = "serifless" +selectorAffix."grek/psi/sansSerif" = "serifless" +selectorAffix."cyrl/psi" = "serifless" + +[prime.lower-psi.variants-buildup.stages.serifs.serifed] +rank = 2 +descriptionAffix = "serifs" +selectorAffix."grek/psi" = "serifed" +selectorAffix."grek/psi/sansSerif" = "serifless" +selectorAffix."cyrl/psi" = "serifed" + + + [prime.cyrl-a] sampler = "а" samplerExplain = "Cyrillic A" @@ -8515,7 +8582,9 @@ lower-xi = "flat-top" lower-pi = "tailed" lower-tau = "semi-tailed" lower-upsilon = "casual-serifless" +lower-phi = "cursive" lower-chi = "straight-serifless" +lower-psi = "serifless" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" cyrl-capital-zhe = "symmetric-connected" @@ -8672,6 +8741,7 @@ lower-lambda = "straight-turn" lower-mu = "tailed-serifed" lower-upsilon = "casual-serifed" lower-chi = "straight-bilateral-motion-serifed" +lower-psi = "serifed" cyrl-a = "double-storey-serifed" cyrl-ve = "standard-bilateral-serifed" cyrl-capital-ze = "unilateral-serifed" @@ -8765,6 +8835,7 @@ lower-mu = "toothed-serifless" lower-nu = "straight" lower-pi = "tailless" lower-tau = "tailless" +lower-phi = "straight" lower-chi = "semi-chancery-straight-serifless" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" @@ -8969,6 +9040,7 @@ lower-beta = "standard" lower-chi = "semi-chancery-straight-serifless" lower-eth = "straight-bar" lower-lambda = "tailed-turn" +lower-phi = "straight" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" cyrl-capital-zhe = "symmetric-touching" @@ -9006,6 +9078,7 @@ l = "tailed" long-s = "flat-hook-descending" eszet = "longs-s-lig-descending-serifless" lower-beta = "cursive" +lower-phi = "cursive" cyrl-a = "single-storey-serifless" cyrl-ve = "cursive-tall" cyrl-zhe = "symmetric-connected" @@ -9093,6 +9166,7 @@ lower-lambda = "straight-turn" lower-tau = "flat-tailed" lower-upsilon = "casual-serifed" lower-chi = "semi-chancery-straight-serifless" +lower-psi = "flat-top-serifless" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" cyrl-capital-zhe = "straight" @@ -9154,6 +9228,7 @@ capital-eszet = "rounded-serifed" long-s = "flat-hook-double-serifed" eszet = "longs-s-lig-bottom-serifed" lower-mu = "tailed-serifed" +lower-psi = "flat-top-serifed" cyrl-a = "double-storey-serifed" cyrl-ve = "standard-bilateral-serifed" cyrl-ze = "unilateral-serifed" @@ -9202,6 +9277,7 @@ lower-lambda = "straight-turn" lower-mu = "toothed-serifless" lower-xi = "rounded" lower-tau = "semi-tailed" +lower-psi = "flat-top-serifless" cyrl-a = "double-storey-tailed" cyrl-ve = "standard-serifless" cyrl-em = "slanted-sides-hanging-serifless" @@ -9258,6 +9334,7 @@ capital-eszet = "rounded-serifed" long-s = "bent-hook-bottom-serifed" eszet = "longs-s-lig-bottom-serifed" lower-mu = "toothed-serifed" +lower-psi = "flat-top-serifed" cyrl-ve = "standard-bilateral-serifed" cyrl-ze = "unilateral-serifed" cyrl-ka = "symmetric-connected-serifed" @@ -9627,6 +9704,7 @@ long-s = "flat-hook-middle-serifed" eszet = "longs-s-lig-serifless" lower-lambda = "straight-turn" lower-tau = "short-tailed" +lower-phi = "straight" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" cyrl-capital-u = "straight-turn-serifless" @@ -9860,6 +9938,8 @@ lower-nu = "straight" lower-xi = "rounded" lower-pi = "small-capital" lower-upsilon = "straight-serifless" +lower-phi = "neo-hellenic" +lower-psi = "flat-top-serifless" cyrl-a = "double-storey-tailed" cyrl-capital-zhe = "symmetric-touching" cyrl-zhe = "symmetric-touching" @@ -9928,6 +10008,7 @@ eszet = "longs-s-lig-bottom-serifed" capital-gamma = "serifed" lower-mu = "toothless-corner-serifed" lower-upsilon = "straight-serifed" +lower-psi = "flat-top-serifed" cyrl-capital-ka = "symmetric-touching-serifed" cyrl-ka = "symmetric-touching-serifed" cyrl-em = "slanted-sides-hanging-serifed" @@ -9987,6 +10068,7 @@ lower-lambda = "straight-turn" lower-mu = "toothed-serifless" lower-pi = "tailless" lower-tau = "tailless" +lower-phi = "straight" cyrl-a = "double-storey-tailed" cyrl-ve = "standard-serifless" cyrl-capital-u = "straight-turn-serifless" @@ -10091,6 +10173,7 @@ lower-nu = "straight" lower-xi = "rounded" lower-tau = "flat-tailed" lower-upsilon = "straight-serifless" +lower-psi = "flat-top-serifless" cyrl-a = "double-storey-serifless" cyrl-ve = "standard-serifless" cyrl-em = "hanging-serifless" @@ -10152,6 +10235,7 @@ eszet = "sulzbacher-bottom-serifed" lower-alpha = "barred-double-serifed" lower-mu = "toothed-serifed" lower-upsilon = "straight-serifed" +lower-psi = "flat-top-serifed" cyrl-a = "double-storey-serifed" cyrl-ve = "standard-bilateral-serifed" cyrl-ka = "symmetric-connected-serifed" @@ -10629,6 +10713,7 @@ lower-gamma = "straight" lower-lambda = "straight-turn" lower-tau = "short-tailed" lower-upsilon = "straight-serifless" +lower-psi = "flat-top-serifless" cyrl-a = "double-storey-tailed" cyrl-ve = "standard-serifless" cyrl-em = "hanging-serifless" @@ -10678,6 +10763,7 @@ long-s = "flat-hook-double-serifed-xh" eszet = "longs-s-lig-bottom-serifed" lower-alpha = "barred-tailed-serifed" lower-upsilon = "straight-serifed" +lower-psi = "flat-top-serifed" cyrl-ve = "standard-bilateral-serifed" cyrl-ka = "symmetric-connected-serifed" cyrl-em = "hanging-serifed" diff --git a/tools/generate-samples/src/templates/package-sample.mjs b/tools/generate-samples/src/templates/package-sample.mjs index 41eafa91e9..50fe7735a3 100644 --- a/tools/generate-samples/src/templates/package-sample.mjs +++ b/tools/generate-samples/src/templates/package-sample.mjs @@ -3,9 +3,9 @@ import * as themes from "../themes/index.mjs"; // prettier-ignore export const ssStrings = [ ["ABC.DEF.GHI.JKL.MNO.PQRS.TUV.WXYZ", "abc.def.ghi.jkl.mno.pqrs.tuv.wxyz"], - ["!iIlL17|¦ ¢coO08BbDQ $5SZ2zs 96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"], + ["!iIlL17|¦ ¢coO08BDQ $5SZ2zs ∂96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"], ["1234567890 ,._-+= >< «¯-¬_» ~–÷+×", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"], - ["CG6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]] + ["G6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυφχψ", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]] ]; function* makeSample(lbm, hotChars) { diff --git a/tools/generate-samples/src/templates/stylistic-set.mjs b/tools/generate-samples/src/templates/stylistic-set.mjs index a0223269d8..d5eb9f0a93 100644 --- a/tools/generate-samples/src/templates/stylistic-set.mjs +++ b/tools/generate-samples/src/templates/stylistic-set.mjs @@ -3,9 +3,9 @@ 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"], - ["!iIlL17|¦ ¢coO08BbDQ $5SZ2zs 96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"], + ["!iIlL17|¦ ¢coO08BDQ $5SZ2zs ∂96µm", "float il1[]={1-2/3.4,5+6=7/8%90};"], ["1234567890 ,._-+= >< «¯-¬_» ~–÷+×", "{*}[]()<>`+-=$/#_%^@\\&|~?'\" !,.;:"], - ["CG6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυχ∂", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]] + ["G6Qg9q¶ Þẞðþſß ΓΔΛαβγδιλμνξπτυφχψ", [..."ЖЗКНРУЭЯавжзклмнруфчьыэя ", "<=", " ", "!=", " ", "=="]] ]; function* makeSample(theme, lbm, features, hotChars) {