diff --git a/changes/33.0.0.md b/changes/33.0.0.md index 1dbea7eee..46f29222f 100644 --- a/changes/33.0.0.md +++ b/changes/33.0.0.md @@ -3,6 +3,9 @@ - Adjustable via metric override * \[**Breaking**\] Reordered variants for `W`, `a`, `b`, `g`, `q`, `w`, `α`, Cyrillic `а`, Cyrillic `ф`, and `$`. * \[**Breaking**\] Add variants for Capital Thorn (`Þ`) with symmetric/asymmetric bowl position. +* \[**Breaking**\] Add variant selector for Greek Lower Theta (#2630). + - As a result, feature tags for `cv71` ... `cv99`, `VAAA` are shifted by one place to `cv72` ... `cv99`, `VSAA`, `VSAB`. +* Add `closed-contour` variant for Partial derivative symbol (#2148). * Refine shape of the following characters: - GREEK CAPITAL LETTER HETA (`U+0370`). - GREEK SMALL LETTER HETA (`U+0371`). diff --git a/packages/font-glyphs/src/common/o-shape-variants.ptl b/packages/font-glyphs/src/common/o-shape-variants.ptl index 012d7d9cb..bab0361aa 100644 --- a/packages/font-glyphs/src/common/o-shape-variants.ptl +++ b/packages/font-glyphs/src/common/o-shape-variants.ptl @@ -1,10 +1,6 @@ $$include '../meta/macros.ptl' -import [mix linreg clamp fallback boole boolePn] from "@iosevka/util" -import [Transform] from "@iosevka/geometry/transform" -import [Point] from "@iosevka/geometry/point" -import [FunctionInterpolator AfCombine] from "@iosevka/geometry/spiro-control" -import [RadicalGeometry StrokeGeometry RemoveHolesGeometry] from "@iosevka/geometry" +import [mix clamp fallback] from "@iosevka/util" glyph-module diff --git a/packages/font-glyphs/src/letter/greek/lower-theta.ptl b/packages/font-glyphs/src/letter/greek/lower-theta.ptl index c78c5f200..85dc282bf 100644 --- a/packages/font-glyphs/src/letter/greek/lower-theta.ptl +++ b/packages/font-glyphs/src/letter/greek/lower-theta.ptl @@ -8,11 +8,31 @@ glyph-module glyph-block Letter-Greek-Lower-Theta : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Common-OShape-Variants : OvalShapeT DiamondShapeT - create-glyph 'grek/theta' 0x3B8 : glyph-proc - include : MarkSet.b - include : OShape Ascender 0 (SB - O) (RightSB + O) Stroke (SmallArchDepthA * 100) (SmallArchDepthB * 100) - include : HBar.m (SB + HalfStroke) (RightSB - HalfStroke) (0.5 * Ascender) + define [ThetaShapeBase shapeT] : namespace + define [outlineT sink offsetX offsetY top] : shapeT sink (top - offsetY) (offsetY) (SB + offsetX) (RightSB - offsetX) + export : define [Shape top] : outlineT dispiro 0 0 top + export : define [Mask top] : outlineT spiro-outline 1 1 top + + define Capsule : ThetaShapeBase OShapeT + define Oval : ThetaShapeBase OvalShapeT + define Diamond : ThetaShapeBase DiamondShapeT + + define ThetaConfig : object + 'capsule' Capsule + 'oval' Oval + 'diamond' Diamond + + foreach { suffix ShapeBase } [pairs-of ThetaConfig] : begin + create-glyph "grek/theta.\(suffix)" : glyph-proc + include : MarkSet.b + include : ShapeBase.Shape Ascender + include : intersection + ShapeBase.Mask Ascender + HBar.m SB RightSB (0.5 * Ascender) + + select-variant 'grek/theta' 0x3B8 glyph-block Letter-Greek-Lower-Theta-Var : begin glyph-block-import CommonShapes diff --git a/packages/font-glyphs/src/letter/latin-ext/eth.ptl b/packages/font-glyphs/src/letter/latin-ext/eth.ptl index 2e3f531e8..d9d70fd9d 100644 --- a/packages/font-glyphs/src/letter/latin-ext/eth.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/eth.ptl @@ -15,14 +15,14 @@ glyph-block Letter-Latin-Eth : begin define yMid2 : YSmoothMidR yMid 0 SmallArchDepthA SmallArchDepthB define yMid3 : mix yMid yMid2 0.875 - define [ArcStartKnots] : list + define [ArcStartKnots _flatY1 _flatY2] : list widths.lhs fine straight.up.mid (RightSB - OX - [HSwToV : Stroke - fine]) yMid2 arch.lhs yMid (swBefore -- fine) g4 (SB + OX) [YSmoothMidL yMid 0 SmallArchDepthA SmallArchDepthB] arch.lhs 0 - flat (RightSB - OX) yMid2 - curl (RightSB - OX) yMid3 + flat (RightSB - OX) [fallback _flatY1 yMid2] + curl (RightSB - OX) [fallback _flatY2 yMid3] create-glyph 'dInsular.curly-bar' : glyph-proc include : MarkSet.b @@ -41,6 +41,13 @@ glyph-block Letter-Latin-Eth : begin flat [mix Width xTerminal pStraightBarStart] [mix yMockBarStart CAP pStraightBarStart] [widths.lhs] curl [mix Width xTerminal 2] [mix yMockBarStart CAP 2] + create-glyph 'dInsular.closed-contour' : glyph-proc + include : MarkSet.b + include : dispiro + ArcStartKnots SmallArchDepthA (Ascender - SmallArchDepthB) + hookend Ascender + g4 (SB + OX) (Ascender - Hook) + select-variant 'dInsular' 0xA77A (follow -- 'eth') select-variant 'partial' 0x2202 (shapeFrom -- 'dInsular') diff --git a/params/variants.toml b/params/variants.toml index 0168bdd01..0d9a93ec3 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -5595,7 +5595,6 @@ selectorAffix."grek/alpha/sansSerif" = "tailed" [prime.lower-beta] sampler = "β" samplerExplain = "Greek lower Beta" -nonBreakingTagForNewVariantSelector = "VXAC" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.lower-beta.variants.standard] @@ -5668,7 +5667,6 @@ selector."cyrl/enghe/ghePart" = "topRightSerifed" [prime.lower-gamma] sampler = "γ" samplerExplain = "Greek lower Gamma" -nonBreakingTagForNewVariantSelector = "VXAD" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.lower-gamma.variants.straight] @@ -5722,6 +5720,28 @@ selector."grek/delta" = "flatTop" +[prime.lower-theta] +sampler = "θ" +samplerExplain = "Greek lower Theta" +tagKind = "letter" + +[prime.lower-theta.variants.capsule] +rank = 1 +description = "Greek lower Theta (`θ`) with a capsule (O-like) body shape" +selector."grek/theta" = "capsule" + +[prime.lower-theta.variants.oval] +rank = 2 +description = "Greek lower Theta (`θ`) with a standard (oval) body shape" +selector."grek/theta" = "oval" + +[prime.lower-theta.variants.diamond] +rank = 3 +description = "Greek lower Theta (`θ`) with a diamond body shape" +selector."grek/theta" = "diamond" + + + [prime.lower-iota] sampler = "ι" samplerExplain = "Greek lower Iota" @@ -5980,7 +6000,6 @@ selectorAffix."grek/mu/sansSerif" = "serifless" [prime.lower-nu] sampler = "ν" samplerExplain = "Greek lower Nu" -nonBreakingTagForNewVariantSelector = "VXAE" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.lower-nu.variants.straight] @@ -6085,7 +6104,6 @@ selector."grek/tau/tailed" = "tau/semiTailed" [prime.lower-upsilon] sampler = "υ" samplerExplain = "Greek lower Upsilon" -nonBreakingTagForNewVariantSelector = "VXAF" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.lower-upsilon.variants-buildup] @@ -6125,7 +6143,6 @@ 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] @@ -6230,7 +6247,6 @@ 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] @@ -6921,7 +6937,6 @@ selectorAffix."cyrl/em" = "smallCyrl" [prime.cyrl-capital-en] sampler = "Н" samplerExplain = "Cyrillic Capital En" -nonBreakingTagForNewVariantSelector = "VXAA" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.cyrl-capital-en.variants.serifless] @@ -7041,7 +7056,6 @@ selectorAffix."cyrl/njeKomi" = "serifedExceptBottomRight" [prime.cyrl-capital-er] sampler = "Р" samplerExplain = "Cyrillic Capital Er" -nonBreakingTagForNewVariantSelector = "VXAB" # REMOVE IN NEXT MAJOR VERSION CHANGE tagKind = "letter" [prime.cyrl-capital-er.variants-buildup] @@ -8490,6 +8504,11 @@ rank = 2 description = "The upper bar of the partial derivative symbol is curly" selector."partial" = "curly-bar" +[prime.partial-derivative.variants.closed-contour] +rank = 3 +description = "The upper part of the partial derivative symbol is a full hook" +selector."partial" = "closed-contour" + [prime.micro-sign] @@ -8821,6 +8840,7 @@ capital-gamma = "serifless" lower-gamma = "casual" capital-delta = "straight" lower-delta = "rounded" +lower-theta = "oval" lower-iota = "serifed-semi-tailed" capital-lambda = "straight-serifless" lower-lambda = "straight" @@ -9113,6 +9133,7 @@ number-sign = "slanted" at = "fourfold" percent = "rings-continuous-slash" pilcrow = "low" +partial-derivative = "closed-contour" micro-sign = "toothed-serifless" [composite.ss01.slab-override.design] @@ -9321,6 +9342,7 @@ cent = "slanted-through-cap" percent = "rings-continuous-slash" pilcrow = "curved" question = "corner-flat-hooked" +partial-derivative = "closed-contour" micro-sign = "tailed-serifless" [composite.ss03.italic] @@ -9456,6 +9478,7 @@ ampersand = "upper-open" at = "threefold" percent = "rings-continuous-slash" bar = "force-upright" +partial-derivative = "closed-contour" micro-sign = "tailed-serifless" [composite.ss04.slab-override.design] @@ -9663,6 +9686,7 @@ cent = "open-cap" percent = "rings-continuous-slash" bar = "force-upright" pilcrow = "low" +partial-derivative = "closed-contour" micro-sign = "toothed-serifless" [composite.ss06.slab-override.design] @@ -9845,6 +9869,7 @@ capital-lambda = "curly-serifless" lower-lambda = "curly-tailed-turn" lower-mu = "toothed-serifless" lower-chi = "semi-chancery-curly-serifless" +lower-theta = "diamond" cyrl-a = "double-storey-serifless" cyrl-capital-zhe = "curly" cyrl-zhe = "curly" @@ -9873,6 +9898,7 @@ at = "threefold" dollar = "open" cent = "open" percent = "dots" +partial-derivative = "closed-contour" micro-sign = "toothed-serifless" lig-ltgteq = "slanted" lig-neq = "slightly-slanted-dotted" @@ -9993,6 +10019,7 @@ dollar = "open" cent = "through-cap" percent = "rings-segmented-slash" bar = "force-upright" +partial-derivative = "closed-contour" micro-sign = "tailed-serifless" [composite.ss09.italic] @@ -10255,6 +10282,7 @@ dollar = "open" cent = "open" percent = "rings-continuous-slash" pilcrow = "low" +partial-derivative = "closed-contour" micro-sign = "toothless-corner-serifless" [composite.ss12.italic] @@ -10380,6 +10408,7 @@ at = "threefold" cent = "through-cap" percent = "rings-continuous-slash" pilcrow = "low" +partial-derivative = "closed-contour" micro-sign = "toothed-serifless" [composite.ss13.slab-override.design] @@ -10454,6 +10483,7 @@ lower-alpha = "barred" lower-gamma = "straight" lower-delta = "flat-top" lower-iota = "serifed-flat-tailed" +lower-theta = "capsule" lower-lambda = "straight" lower-mu = "toothed-serifless" lower-nu = "straight" @@ -11005,6 +11035,7 @@ long-s = "bent-hook-middle-serifed-xh" eszet = "longs-s-lig-serifless" lower-alpha = "barred-tailed" lower-gamma = "straight" +lower-theta = "capsule" lower-lambda = "straight-turn" lower-tau = "short-tailed" lower-upsilon = "straight-serifless"