Theta and Partial Derivative variants (#2630, #2148) (#2687)

* cleanup

* add variants

* doc

* remove nonbreakingtags

* update style sets
This commit is contained in:
Logo 2025-02-23 06:14:24 +08:00 committed by GitHub
parent c661de7403
commit 485c21ee7c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 77 additions and 20 deletions

View file

@ -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`).

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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"