From babb2c8ea4bcbb03b6a834c2efaa87c47232bef1 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sat, 3 May 2025 06:42:50 -0400 Subject: [PATCH 1/3] Make `_scl` argument for `[UnicodeWeightGrade n _scl]` default to `1`. --- packages/font-glyphs/src/meta/aesthetics.ptl | 35 ++++++++++---------- packages/font-glyphs/src/symbol/letter.ptl | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/font-glyphs/src/meta/aesthetics.ptl b/packages/font-glyphs/src/meta/aesthetics.ptl index cffe94abc..266382945 100644 --- a/packages/font-glyphs/src/meta/aesthetics.ptl +++ b/packages/font-glyphs/src/meta/aesthetics.ptl @@ -39,7 +39,7 @@ export : define [calculateMetrics para] : begin # Transform constructors define [Italify angle shift] : begin - local slope : Math.tan ([fallback angle para.slopeAngle] / 180 * Math.PI) + local slope : Math.tan : [fallback angle para.slopeAngle] / 180 * Math.PI return : new Transform 1 slope 0 1 [fallback shift : (-slope) * SymbolMid] 0 define [Upright angle shift] [Italify angle shift :.inverse] define [Scale sx sy] : new Transform sx 0 0 [fallback sy sx] 0 0 @@ -49,16 +49,16 @@ export : define [calculateMetrics para] : begin define GlobalTransform : Italify para.slopeAngle define TanSlope GlobalTransform.xy - define SinSlope : Math.sin (para.slopeAngle / 180 * Math.PI) - define CosSlope : Math.cos (para.slopeAngle / 180 * Math.PI) + define SinSlope : Math.sin : para.slopeAngle / 180 * Math.PI + define CosSlope : Math.cos : para.slopeAngle / 180 * Math.PI define HVContrast : Contrast * CosSlope + SinSlope * TanSlope define [HSwToV sw] : sw * HVContrast define [VSwToH sw] : sw / HVContrast # Orient parameters define Upward : new Point Point.Type.Corner (-HVContrast) 0 - define Downward : new Point Point.Type.Corner HVContrast 0 - define Rightward : new Point Point.Type.Corner 0 1 + define Downward : new Point Point.Type.Corner (+HVContrast) 0 + define Rightward : new Point Point.Type.Corner 0 (+1) define Leftward : new Point Point.Type.Corner 0 (-1) # Style parameters @@ -77,7 +77,7 @@ export : define [calculateMetrics para] : begin define SmallArchDepth para.smallArchDepth # Weight Control - define BaseFillRate : Math.min 0.95 : 2 * HVContrast * para.stroke / (Width - SB * 2) + define BaseFillRate : Math.min 0.95 : [HSwToV : 2 * para.stroke] / (Width - SB * 2) define WeightControlFactor : [Math.atanh BaseFillRate] / BaseFillRate define [StrokeWeightControlSigmoid x] : Math.tanh : WeightControlFactor * x @@ -112,22 +112,22 @@ export : define [calculateMetrics para] : begin define AccentStackOffset para.accentStackOffset define AccentWidth para.accentWidth define AccentClearance para.accentClearance - define AccentHeight para.accentHeight + define AccentHeight para.accentHeight - define CThin : fallback para.cthin 0.75 - define CThinB : fallback para.cthinb 0.5 + define CThin : fallback para.cthin 0.75 + define CThinB : fallback para.cthinb 0.50 define SLAB para.slab define [IBalance df] : df.adws * df.adws * [fallback para.ibalance (LongJut * 0.04)] # Serifed define [IBalance2 df] : df.adws * [fallback para.ibalance2 (LongJut * 0.14)] # Hooky, Tailed - define JBalance : fallback para.jbalance 0 - define JBalance2 : fallback para.jbalance2 (QuarterStroke + LongJut * 0.04) - define TBalance : fallback para.tbalance JBalance + define JBalance : fallback para.jbalance 0 + define JBalance2 : fallback para.jbalance2 (LongJut * 0.04 + QuarterStroke) + define TBalance : fallback para.tbalance JBalance define TBalance2 : fallback para.tbalance2 TBalance define RBalance : fallback para.rbalance (JBalance * 0.3) define RBalance2 : fallback para.rbalance2 0 - define FBalance : fallback para.fbalance 0 + define FBalance : fallback para.fbalance 0 define OneBalance : fallback para.onebalance 0 # derived metrics @@ -190,10 +190,11 @@ export : define [calculateMetrics para] : begin define GeometryStroke : AdviceStroke 4 define ShoulderFine : Math.min (Stroke * para.shoulderFineMin) : AdviceStroke 24 - define [UnicodeWeightGrade n s] : begin - define kw : 10 - s - n / 200 - define [mulPow ss] : (0.25 + ss / 8) * [StrokeWidthBlend 2 1] - define kMul : [Math.pow (n / 100) : mulPow s] / [Math.pow 4 : mulPow 2] + define [UnicodeWeightGrade n _scl] : begin + define scl : fallback _scl 1 + define kw : 10 - scl - n / 200 + define [mulPow s] : (0.25 + s / 8) * [StrokeWidthBlend 2 1] + define kMul : [Math.pow (n / 100) : mulPow scl] / [Math.pow 4 : mulPow 2] define kAdj : GeometryStroke / [AdviceStroke 6] return : kMul * kAdj * [AdviceStroke kw] diff --git a/packages/font-glyphs/src/symbol/letter.ptl b/packages/font-glyphs/src/symbol/letter.ptl index 12f840e1b..060bb17fe 100644 --- a/packages/font-glyphs/src/symbol/letter.ptl +++ b/packages/font-glyphs/src/symbol/letter.ptl @@ -334,7 +334,7 @@ glyph-block Symbol-Letter : begin create-glyph 'informationSource' 0x2139 : glyph-proc include : MarkSet.b - local sw : UnicodeWeightGrade 900 1 + local sw : UnicodeWeightGrade 900 include : VBar.m Middle 0 XH sw include : HSerif.lt (Middle - [HSwToV : 0.5 * sw]) XH (LongJut / 2) include : HSerif.lb (Middle - [HSwToV : 0.5 * sw]) 0 (LongJut / 2) From 021d52d6b95a66e43261b25d3420451f24eed0b9 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sat, 3 May 2025 06:49:47 -0400 Subject: [PATCH 2/3] Add `_swRef` arg to `[UnicodeWeightGrade n _scl]`, default `Stroke`. --- changes/33.2.3.md | 5 +++ packages/font-glyphs/src/meta/aesthetics.ptl | 4 +- packages/font-glyphs/src/symbol/arrow.ptl | 40 +++++++++---------- .../src/symbol/geometric/ballot-box.ptl | 4 +- .../src/symbol/geometric/masked.ptl | 2 +- .../src/symbol/geometric/plain.ptl | 30 +++++++------- .../src/symbol/geometric/rotational.ptl | 10 ++--- .../src/symbol/geometric/shaded.ptl | 2 +- .../src/symbol/geometric/stars.ptl | 24 +++++------ packages/font-glyphs/src/symbol/letter.ptl | 3 +- .../src/symbol/pictograph/checking-marks.ptl | 11 +++-- .../src/symbol/pictograph/clock.ptl | 6 +-- .../src/symbol/pictograph/cross.ptl | 6 +-- 13 files changed, 76 insertions(+), 71 deletions(-) create mode 100644 changes/33.2.3.md diff --git a/changes/33.2.3.md b/changes/33.2.3.md new file mode 100644 index 000000000..2f6a43000 --- /dev/null +++ b/changes/33.2.3.md @@ -0,0 +1,5 @@ +* Refine shape of the following characters: + - INFORMATION SOURCE (`U+2139`). + - TRIANGLE-HEADED RIGHTWARDS ARROW (`U+279D`). + - HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW (`U+279E`). + - MATHEMATICAL DOUBLE-STRUCK CAPITAL B (`U+1D539`). diff --git a/packages/font-glyphs/src/meta/aesthetics.ptl b/packages/font-glyphs/src/meta/aesthetics.ptl index 266382945..1ec14359e 100644 --- a/packages/font-glyphs/src/meta/aesthetics.ptl +++ b/packages/font-glyphs/src/meta/aesthetics.ptl @@ -190,12 +190,12 @@ export : define [calculateMetrics para] : begin define GeometryStroke : AdviceStroke 4 define ShoulderFine : Math.min (Stroke * para.shoulderFineMin) : AdviceStroke 24 - define [UnicodeWeightGrade n _scl] : begin + define [UnicodeWeightGrade n _scl _swRef] : begin define scl : fallback _scl 1 define kw : 10 - scl - n / 200 define [mulPow s] : (0.25 + s / 8) * [StrokeWidthBlend 2 1] define kMul : [Math.pow (n / 100) : mulPow scl] / [Math.pow 4 : mulPow 2] - define kAdj : GeometryStroke / [AdviceStroke 6] + define kAdj : [fallback _swRef Stroke] / [AdviceStroke 6] return : kMul * kAdj * [AdviceStroke kw] define [AdviceGlottalStopArchDepth y sign] : begin diff --git a/packages/font-glyphs/src/symbol/arrow.ptl b/packages/font-glyphs/src/symbol/arrow.ptl index 4ee1a5637..fef1d80c5 100644 --- a/packages/font-glyphs/src/symbol/arrow.ptl +++ b/packages/font-glyphs/src/symbol/arrow.ptl @@ -987,8 +987,8 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define [SquiggleArrowBar kL kR] : begin return : spiro-outline - SquiggleArrowBarSide 0.3 (-0.25) arrowSB arrowRSB kL kR (SymbolMid + arrowSw / 2) - [SquiggleArrowBarSide 0.25 (-0.3) arrowSB arrowRSB kL kR (SymbolMid - arrowSw / 2)].reverse + SquiggleArrowBarSide 0.3 (-0.25) arrowSB arrowRSB kL kR (SymbolMid + halfArrowSw) + [SquiggleArrowBarSide 0.25 (-0.3) arrowSB arrowRSB kL kR (SymbolMid - halfArrowSw)].reverse create-glyph [MangleName 'squiggleArrowLeft'] [MangleUnicode 0x21DC] : glyph-proc set-width MosaicWidth @@ -1006,8 +1006,8 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define [LongSquiggleArrowBar kL kR] : begin return : spiro-outline - SquiggleArrowBarSide 0.3 (-0.25) l r kL kR (SymbolMid + arrowSw / 2) - [SquiggleArrowBarSide 0.25 (-0.3) l r kL kR (SymbolMid - arrowSw / 2)].reverse + SquiggleArrowBarSide 0.3 (-0.25) l r kL kR (SymbolMid + halfArrowSw) + [SquiggleArrowBarSide 0.25 (-0.3) l r kL kR (SymbolMid - halfArrowSw)].reverse create-glyph 'longSquiggleArrowLeft' 0x2B33 : glyph-proc set-width MosaicWidth @@ -1062,7 +1062,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 MkArrow [ThickArrowShape 'blackSemiHookR'] [MangleName 'uni27A6'] [MangleUnicode 0x27A6] arrowSB SymbolMid arrowRSB SymbolMid do "Barb arrows" - define BarbHeavyWideHeaded : BarbArrowShape 0.25 : UnicodeWeightGrade 900 MosaicWidthScalar + define BarbHeavyWideHeaded : BarbArrowShape 0.25 : UnicodeWeightGrade 900 MosaicWidthScalar GeometryStroke MkArrow BarbHeavyWideHeaded [MangleName 'uni2794'] [MangleUnicode 0x2794] arrowSB SymbolMid arrowRSB SymbolMid define [BarbGroup prefix b k w] : begin @@ -1105,18 +1105,18 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 MkArrow [WeightedTrigArrowShape sw w h] [MangleName "\(prefix)Right"] [MangleUnicode : b + 2] arrowSB SymbolMid arrowRSB SymbolMid MkArrow [WeightedTrigArrowShape sw w h] [MangleName "\(prefix)Down"] [MangleUnicode : b + 3] arrowMidX arrowTop arrowMidX arrowBot - TrigGroup 'trigArrowSmallHead' 0x1F800 [UnicodeWeightGrade 300 MosaicWidthScalar] Size.Small.size - TrigGroup 'trigArrowMediumHead' 0x1F804 [UnicodeWeightGrade 500 MosaicWidthScalar] Size.Medium.size - TrigGroup 'trigArrowLargeHead' 0x1F808 [UnicodeWeightGrade 700 MosaicWidthScalar] Size.Large.size - TrigGroup 'trigArrowSmallEqHead' 0x1F810 [UnicodeWeightGrade 300 MosaicWidthScalar] Size.Small.size (Size.Small.size * eqHeight) - TrigGroup 'trigArrowEqHead' 0x1F814 [UnicodeWeightGrade 400 MosaicWidthScalar] 1 eqHeight - TrigGroup 'trigArrowEqHeadHeavy' 0x1F818 [UnicodeWeightGrade 500 MosaicWidthScalar] 1 eqHeight - TrigGroup 'trigArrowLargeEqHeadHeavy' 0x1F81C [UnicodeWeightGrade 700 MosaicWidthScalar] Size.Large.size (Size.Large.size * eqHeight) - TrigGroup 'trigArrowNarrowShaft' 0x1F820 [UnicodeWeightGrade 300 MosaicWidthScalar] 1 - TrigGroup 'trigArrowMediumShaft' 0x1F824 [UnicodeWeightGrade 500 MosaicWidthScalar] 1 - TrigGroup 'trigArrowBoldShaft' 0x1F828 [UnicodeWeightGrade 700 MosaicWidthScalar] 1 - TrigGroup 'trigArrowHeavyShaft' 0x1F82C [UnicodeWeightGrade 900 MosaicWidthScalar] 1 - TrigGroup 'trigArrowVeryHeavyShaft' 0x1F830 [UnicodeWeightGrade 1000 MosaicWidthScalar] 1 + TrigGroup 'trigArrowSmallHead' 0x1F800 [UnicodeWeightGrade 300 MosaicWidthScalar GeometryStroke] Size.Small.size + TrigGroup 'trigArrowMediumHead' 0x1F804 [UnicodeWeightGrade 500 MosaicWidthScalar GeometryStroke] Size.Medium.size + TrigGroup 'trigArrowLargeHead' 0x1F808 [UnicodeWeightGrade 700 MosaicWidthScalar GeometryStroke] Size.Large.size + TrigGroup 'trigArrowSmallEqHead' 0x1F810 [UnicodeWeightGrade 300 MosaicWidthScalar GeometryStroke] Size.Small.size (Size.Small.size * eqHeight) + TrigGroup 'trigArrowEqHead' 0x1F814 [UnicodeWeightGrade 400 MosaicWidthScalar GeometryStroke] 1 eqHeight + TrigGroup 'trigArrowEqHeadHeavy' 0x1F818 [UnicodeWeightGrade 500 MosaicWidthScalar GeometryStroke] 1 eqHeight + TrigGroup 'trigArrowLargeEqHeadHeavy' 0x1F81C [UnicodeWeightGrade 700 MosaicWidthScalar GeometryStroke] Size.Large.size (Size.Large.size * eqHeight) + TrigGroup 'trigArrowNarrowShaft' 0x1F820 [UnicodeWeightGrade 300 MosaicWidthScalar GeometryStroke] 1 + TrigGroup 'trigArrowMediumShaft' 0x1F824 [UnicodeWeightGrade 500 MosaicWidthScalar GeometryStroke] 1 + TrigGroup 'trigArrowBoldShaft' 0x1F828 [UnicodeWeightGrade 700 MosaicWidthScalar GeometryStroke] 1 + TrigGroup 'trigArrowHeavyShaft' 0x1F82C [UnicodeWeightGrade 900 MosaicWidthScalar GeometryStroke] 1 + TrigGroup 'trigArrowVeryHeavyShaft' 0x1F830 [UnicodeWeightGrade 1000 MosaicWidthScalar GeometryStroke] 1 TrigGroup 'fingerPost' 0x1F834 (2 * (trigArrowSize - o)) 1 TrigGroup 'trigArrowHeavy' 0x1F844 (2 * (trigArrowSize - o)) kMedium @@ -1124,12 +1124,12 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 TrigGroupSquat 'trigArrowCompressed' 0x1F83C (2 * Geom.Size * Size.Small.size) kMedium kSmall TrigGroupSquat 'trigArrowCompressedHeavy' 0x1F840 (2 * Geom.Size * Size.MediumSmall.size) kMedium kSmall - MkArrow [WeightedTrigArrowShape [UnicodeWeightGrade 300 MosaicWidthScalar] 1] [MangleName "uni279D"] [MangleUnicode 0x279D] arrowSB SymbolMid arrowRSB SymbolMid - MkArrow [WeightedTrigArrowShape [UnicodeWeightGrade 700 MosaicWidthScalar] 1] [MangleName "uni279E"] [MangleUnicode 0x279E] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow [WeightedTrigArrowShape [UnicodeWeightGrade 400 MosaicWidthScalar GeometryStroke] 1] [MangleName "uni279D"] [MangleUnicode 0x279D] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow [WeightedTrigArrowShape [UnicodeWeightGrade 900 MosaicWidthScalar GeometryStroke] 1] [MangleName "uni279E"] [MangleUnicode 0x279E] arrowSB SymbolMid arrowRSB SymbolMid MkArrow [WeightedTrigArrowShape (2 * Geom.Size * Size.Medium.size) kMedium kSmall] [MangleName "trigArrowSquatBlackRight"] [MangleUnicode 0x27A7] (arrowMidX - squatRange) SymbolMid (arrowMidX + squatRange) SymbolMid do "Round-stroke arrows" - define sw : UnicodeWeightGrade 900 MosaicWidthScalar + define sw : UnicodeWeightGrade 900 MosaicWidthScalar GeometryStroke MkArrow [RoundArrow.Shape sw] [MangleName 'heavyRoundArrowRight'] [MangleUnicode 0x279C] arrowSB SymbolMid arrowRSB SymbolMid do "Sans-serif Arrows" diff --git a/packages/font-glyphs/src/symbol/geometric/ballot-box.ptl b/packages/font-glyphs/src/symbol/geometric/ballot-box.ptl index b2b4a0bbd..ca02cefcf 100644 --- a/packages/font-glyphs/src/symbol/geometric/ballot-box.ptl +++ b/packages/font-glyphs/src/symbol/geometric/ballot-box.ptl @@ -37,8 +37,8 @@ glyph-block Symbol-Geometric-Ballot-Box : for-width-kinds WideWidth1 define bbGap : Math.max (Geom.Size / 6) [AdviceStroke 5 Geom.Scalar] define swMark : Math.min GeometryStroke : AdviceStroke 5 Geom.Scalar - define lightSwMark : UnicodeWeightGrade 300 Geom.Scalar - define boldSwMark : UnicodeWeightGrade 700 Geom.Scalar + define lightSwMark : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke + define boldSwMark : UnicodeWeightGrade 700 Geom.Scalar GeometryStroke define bbSize : Geom.Size - bbGap - swMark * 0.75 define circXSize : (Geom.Size - bbGap) * Math.SQRT1_2 - swMark * 0.75 diff --git a/packages/font-glyphs/src/symbol/geometric/masked.ptl b/packages/font-glyphs/src/symbol/geometric/masked.ptl index c11dd4e95..2eb0b2a07 100644 --- a/packages/font-glyphs/src/symbol/geometric/masked.ptl +++ b/packages/font-glyphs/src/symbol/geometric/masked.ptl @@ -237,7 +237,7 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1 do "Diamond minus white X" create-glyph [MangleName "blackDiamondMinusWhiteX"] [MangleUnicode 0x2756] : glyph-proc set-width Geom.Width - local gap : Math.max (0.2 * Geom.Size) [UnicodeWeightGrade 400 Geom.Scalar] + local gap : Math.max (0.2 * Geom.Size) [UnicodeWeightGrade 400 Geom.Scalar GeometryStroke] include : difference refer-glyph : MangleName "blackDiamond" dispiro diff --git a/packages/font-glyphs/src/symbol/geometric/plain.ptl b/packages/font-glyphs/src/symbol/geometric/plain.ptl index 75b3b72e0..c02ddd9d7 100644 --- a/packages/font-glyphs/src/symbol/geometric/plain.ptl +++ b/packages/font-glyphs/src/symbol/geometric/plain.ptl @@ -136,12 +136,12 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 StdBlackShape SquareShape 'blackSquare' 0x25A0 StdWhiteShape SquareShape 'whiteSquare' 0x25A1 - StdWhiteShape SquareShape 'lightWhiteSquare' 0x1F78E {.sw [UnicodeWeightGrade 300 Geom.Scalar]} - StdWhiteShape SquareShape 'mediumWhiteSquare' 0x1F78F {.sw [UnicodeWeightGrade 500 Geom.Scalar]} - StdWhiteShape SquareShape 'boldWhiteSquare' 0x1F790 {.sw [UnicodeWeightGrade 700 Geom.Scalar]} - StdWhiteShape SquareShape 'heavyWhiteSquare' 0x1F791 {.sw [UnicodeWeightGrade 900 Geom.Scalar]} - StdWhiteShape SquareShape 'veryHeavyWhiteSquare' 0x1F792 {.sw [UnicodeWeightGrade 1000 Geom.Scalar]} - StdWhiteShape SquareShape 'exHeavyWhiteSquare' 0x1F793 {.sw [UnicodeWeightGrade 1100 Geom.Scalar]} + StdWhiteShape SquareShape 'lightWhiteSquare' 0x1F78E {.sw [UnicodeWeightGrade 300 Geom.Scalar GeometryStroke]} + StdWhiteShape SquareShape 'mediumWhiteSquare' 0x1F78F {.sw [UnicodeWeightGrade 500 Geom.Scalar GeometryStroke]} + StdWhiteShape SquareShape 'boldWhiteSquare' 0x1F790 {.sw [UnicodeWeightGrade 700 Geom.Scalar GeometryStroke]} + StdWhiteShape SquareShape 'heavyWhiteSquare' 0x1F791 {.sw [UnicodeWeightGrade 900 Geom.Scalar GeometryStroke]} + StdWhiteShape SquareShape 'veryHeavyWhiteSquare' 0x1F792 {.sw [UnicodeWeightGrade 1000 Geom.Scalar GeometryStroke]} + StdWhiteShape SquareShape 'exHeavyWhiteSquare' 0x1F793 {.sw [UnicodeWeightGrade 1100 Geom.Scalar GeometryStroke]} StdBlackShape SquareShape 'blackLargeSquare' 0x2B1B Size.Large StdBlackShape SquareShape 'blackMediumSquare' 0x25FC Size.Medium @@ -161,7 +161,7 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 StdWhiteContainingBlackShape SquareShape 'whiteSquareWithCenter' 0x25A3 StdWhiteContainingBlackShape SquareShape 'whiteSquareContainingBlackVerySmallSquare' 0x1F794 Size.TinyInner StdWhiteContainingBlackShape SquareShape 'whiteSquareContainingBlackMediumSquare' 0x1F795 Size.MediumInner - StdWhiteContainingBlackShape SquareShape 'heavyWhiteSquareContainingBlackMediumSquare' 0x1CE05 : Object.assign Size.TinyInner {.sw [UnicodeWeightGrade 900 Geom.Scalar]} + StdWhiteContainingBlackShape SquareShape 'heavyWhiteSquareContainingBlackMediumSquare' 0x1CE05 : Object.assign Size.TinyInner {.sw [UnicodeWeightGrade 900 Geom.Scalar GeometryStroke]} StdGeomTargetShape SquareShape 'squareTarget' 0x1F796 @@ -447,7 +447,7 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 g4 [mix cx [mix cx (cx - size) 0.5] p] [mix cy [mix (cy + size) cy 0.5] p] close - StdWhiteShape DiamondLazongeShape 'whiteConcaveSidedDiamond' 0x27E1 [Object.assign {.} Size.Oblique {.sw (Math.SQRT2 * [UnicodeWeightGrade 600 Geom.Scalar])}] + StdWhiteShape DiamondLazongeShape 'whiteConcaveSidedDiamond' 0x27E1 [Object.assign {.} Size.Oblique {.sw (Math.SQRT2 * [UnicodeWeightGrade 600 Geom.Scalar GeometryStroke])}] StdBlackShape DiamondLazongeShape 'lightFourPointedBlackCusp' 0x2BCC Size.Oblique StdWhiteShape DiamondLazongeShape 'whiteFourPointedBlackCusp' 0x2BCE Size.ObliqueSA @@ -472,12 +472,12 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 StdBlackShape CircleShape 'blackCircle' 0x25CF StdWhiteShape CircleShape 'whiteCircle' 0x25CB - StdWhiteShape CircleShape 'mediumWhiteCircle' 0x1F785 {.sw [UnicodeWeightGrade 600 Geom.Scalar]} - StdWhiteShape CircleShape 'boldWhiteCircle' 0x1F786 {.sw [UnicodeWeightGrade 700 Geom.Scalar]} - StdWhiteShape CircleShape 'heavyWhiteCircle' 0x1F787 {.sw [UnicodeWeightGrade 900 Geom.Scalar]} - StdWhiteShape CircleShape 'veryHeavyWhiteCircle' 0x1F788 {.sw [UnicodeWeightGrade 1000 Geom.Scalar]} - StdWhiteShape CircleShape 'exHeavyWhiteCircle' 0x1F789 {.sw [UnicodeWeightGrade 1100 Geom.Scalar]} - StdWhiteShape CircleShape 'heavyLargeCircle' 0x2B55 [Object.assign {.sw [UnicodeWeightGrade 900 Geom.Scalar]} Size.Large] + StdWhiteShape CircleShape 'mediumWhiteCircle' 0x1F785 {.sw [UnicodeWeightGrade 600 Geom.Scalar GeometryStroke]} + StdWhiteShape CircleShape 'boldWhiteCircle' 0x1F786 {.sw [UnicodeWeightGrade 700 Geom.Scalar GeometryStroke]} + StdWhiteShape CircleShape 'heavyWhiteCircle' 0x1F787 {.sw [UnicodeWeightGrade 900 Geom.Scalar GeometryStroke]} + StdWhiteShape CircleShape 'veryHeavyWhiteCircle' 0x1F788 {.sw [UnicodeWeightGrade 1000 Geom.Scalar GeometryStroke]} + StdWhiteShape CircleShape 'exHeavyWhiteCircle' 0x1F789 {.sw [UnicodeWeightGrade 1100 Geom.Scalar GeometryStroke]} + StdWhiteShape CircleShape 'heavyLargeCircle' 0x2B55 [Object.assign {.sw [UnicodeWeightGrade 900 Geom.Scalar GeometryStroke]} Size.Large] StdBlackShape CircleShape 'blackVerySmallCircle' null Size.VerySmall StdBlackShape CircleShape 'blackSmallCircle' null Size.Small @@ -572,7 +572,7 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 define [PentagramSw c] {.sw ([AdviceStroke c : Math.sqrt Geom.Scalar] * [Math.sqrt 5])} StdBlackShape [RegularPolygonFill 5 2 1.1 0] 'blackStar' 0x2605 StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'whiteStar' 0x2606 [PentagramSw 5.5] - StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'lightWhiteStar' null {.sw ([UnicodeWeightGrade 300 : Math.sqrt Geom.Scalar] * [Math.sqrt 5])} + StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'lightWhiteStar' null {.sw ([UnicodeWeightGrade 300 [Math.sqrt Geom.Scalar] GeometryStroke] * [Math.sqrt 5])} StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'whiteMediumStar' 0x2B50 [Object.assign [PentagramSw 7] Size.Medium] StdBlackShape [RegularPolygonFill 5 2 1.1 0] 'blackSmallStar' 0x2B51 Size.Small StdWhiteShape [RegularPolygonFill 5 2 1.1 0] 'whiteSmallStar' 0x2B52 [Object.assign [PentagramSw 3] Size.Small] diff --git a/packages/font-glyphs/src/symbol/geometric/rotational.ptl b/packages/font-glyphs/src/symbol/geometric/rotational.ptl index 41768224d..477163079 100644 --- a/packages/font-glyphs/src/symbol/geometric/rotational.ptl +++ b/packages/font-glyphs/src/symbol/geometric/rotational.ptl @@ -97,11 +97,11 @@ glyph-block Symbol-Geometric-Rotational : begin for-width-kinds WideWidth1 : begin define Geom : GeometricDim MosaicUnitWidth MosaicWidth - define lightSw : UnicodeWeightGrade 300 Geom.Scalar - define normalSw : UnicodeWeightGrade 400 Geom.Scalar - define semiBoldSw : UnicodeWeightGrade 600 Geom.Scalar - define boldSw : UnicodeWeightGrade 700 Geom.Scalar - define heavySw : UnicodeWeightGrade 900 Geom.Scalar + define lightSw : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke + define normalSw : UnicodeWeightGrade 400 Geom.Scalar GeometryStroke + define semiBoldSw : UnicodeWeightGrade 600 Geom.Scalar GeometryStroke + define boldSw : UnicodeWeightGrade 700 Geom.Scalar GeometryStroke + define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke define [for-rotational-pointing sides phase mag gap fn] : begin local shapes {} diff --git a/packages/font-glyphs/src/symbol/geometric/shaded.ptl b/packages/font-glyphs/src/symbol/geometric/shaded.ptl index 0e695bc91..a509d4edd 100644 --- a/packages/font-glyphs/src/symbol/geometric/shaded.ptl +++ b/packages/font-glyphs/src/symbol/geometric/shaded.ptl @@ -140,7 +140,7 @@ glyph-block Symbol-Geometric-Shaded-Narrow : for-width-kinds WideWidth4 define Geom : GeometricDim MosaicUnitWidth MosaicWidth create-glyph [MangleName 'symbolForDeleteFormTwo'] [MangleUnicode 0x2425] : glyph-proc - local sw : UnicodeWeightGrade 300 Geom.Scalar + local sw : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke local gap : 0.75 * sw + [Math.max (Geom.Size * 0.125) (sw / 2)] set-width Geom.Width include : intersection diff --git a/packages/font-glyphs/src/symbol/geometric/stars.ptl b/packages/font-glyphs/src/symbol/geometric/stars.ptl index 8febd9375..b5228d507 100644 --- a/packages/font-glyphs/src/symbol/geometric/stars.ptl +++ b/packages/font-glyphs/src/symbol/geometric/stars.ptl @@ -32,18 +32,18 @@ glyph-block Symbol-Geometric-Stars : for-width-kinds WideWidth1 Geom.MidY + Geom.Size * mag * [Math.cos angle] include : spiro-outline corners - define extThinSw : UnicodeWeightGrade 100 Geom.Scalar - define extLightSw : UnicodeWeightGrade 200 Geom.Scalar - define lightSw : UnicodeWeightGrade 300 Geom.Scalar - define semiLightSw : UnicodeWeightGrade 350 Geom.Scalar - define normalSw : UnicodeWeightGrade 400 Geom.Scalar - define mediumSw : UnicodeWeightGrade 500 Geom.Scalar - define semiBoldSw : UnicodeWeightGrade 600 Geom.Scalar - define boldSw : UnicodeWeightGrade 700 Geom.Scalar - define exBoldSw : UnicodeWeightGrade 800 Geom.Scalar - define heavySw : UnicodeWeightGrade 900 Geom.Scalar - define veryHeavySw : UnicodeWeightGrade 1000 Geom.Scalar - define exHeavySw : UnicodeWeightGrade 1100 Geom.Scalar + define extThinSw : UnicodeWeightGrade 100 Geom.Scalar GeometryStroke + define extLightSw : UnicodeWeightGrade 200 Geom.Scalar GeometryStroke + define lightSw : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke + define semiLightSw : UnicodeWeightGrade 350 Geom.Scalar GeometryStroke + define normalSw : UnicodeWeightGrade 400 Geom.Scalar GeometryStroke + define mediumSw : UnicodeWeightGrade 500 Geom.Scalar GeometryStroke + define semiBoldSw : UnicodeWeightGrade 600 Geom.Scalar GeometryStroke + define boldSw : UnicodeWeightGrade 700 Geom.Scalar GeometryStroke + define exBoldSw : UnicodeWeightGrade 800 Geom.Scalar GeometryStroke + define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke + define veryHeavySw : UnicodeWeightGrade 1000 Geom.Scalar GeometryStroke + define exHeavySw : UnicodeWeightGrade 1100 Geom.Scalar GeometryStroke define AsteriskCfg : list * { .name 'saltire' .unicode 0x2613 .sides 4 .phase (1/8) .sw normalSw } diff --git a/packages/font-glyphs/src/symbol/letter.ptl b/packages/font-glyphs/src/symbol/letter.ptl index 060bb17fe..021a1ff96 100644 --- a/packages/font-glyphs/src/symbol/letter.ptl +++ b/packages/font-glyphs/src/symbol/letter.ptl @@ -200,6 +200,7 @@ glyph-block Symbol-Letter : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Latin-X : XStrand glyph-block-import Letter-Shared-Shapes : FlatHookDepth + glyph-block-import Mark-Above : aboveMarkMid alias 'eulerConst' 0x2107 'latn/Epsilon' alias 'scruple' 0x2108 'cyrl/E' @@ -339,7 +340,7 @@ glyph-block Symbol-Letter : begin include : HSerif.lt (Middle - [HSwToV : 0.5 * sw]) XH (LongJut / 2) include : HSerif.lb (Middle - [HSwToV : 0.5 * sw]) 0 (LongJut / 2) include : HSerif.rb (Middle + [HSwToV : 0.5 * sw]) 0 (LongJut / 2) - include : DotAt Middle (XH + AccentStackOffset) (DotRadius * sw / Stroke) + include : DotAt Middle aboveMarkMid (DotRadius * sw / Stroke) turned 'turnAmpersand' 0x214B 'ampersand' Middle (CAP / 2) diff --git a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl index 177407712..0404940f1 100644 --- a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl @@ -11,9 +11,8 @@ glyph-block Symbol-Pictograph-Checking-Marks : begin for-width-kinds WideWidth1 : do define Geom : GeometricDim MosaicUnitWidth MosaicWidth - define lightSw : UnicodeWeightGrade 300 Geom.Scalar - # define mediumSw : UnicodeWeightGrade 500 Geom.Scalar - define heavySw : UnicodeWeightGrade 900 Geom.Scalar + define lightSw : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke + define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke define ptMaxWidth : MosaicWidth - SB define ptHeight0 : 1.5 * (Width - SB / 2) * ((MosaicWidth / MosaicUnitWidth) ** (1 / 4)) @@ -70,9 +69,9 @@ glyph-block Symbol-Pictograph-Checking-Marks : begin do "Decorative angular brackets" define Geom : GeometricDim Width Width - define mediumSw : UnicodeWeightGrade 500 Geom.Scalar - define heavySw : UnicodeWeightGrade 900 Geom.Scalar - define xHeavySw : UnicodeWeightGrade 1100 Geom.Scalar + define mediumSw : UnicodeWeightGrade 500 Geom.Scalar GeometryStroke + define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke + define xHeavySw : UnicodeWeightGrade 1100 Geom.Scalar GeometryStroke define HeightConfig : object # suffix width scale height scale diff --git a/packages/font-glyphs/src/symbol/pictograph/clock.ptl b/packages/font-glyphs/src/symbol/pictograph/clock.ptl index 4c4d14a2a..c934ad4ca 100644 --- a/packages/font-glyphs/src/symbol/pictograph/clock.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/clock.ptl @@ -16,9 +16,9 @@ glyph-block Symbol-Geometric-Clock : for-width-kinds WideWidth1 define pMin 0.8 define pSec 0.9 - define extLightSw : UnicodeWeightGrade 200 Geom.Scalar - define lightSw : UnicodeWeightGrade 300 Geom.Scalar - define mediumSw : UnicodeWeightGrade 500 Geom.Scalar + define extLightSw : UnicodeWeightGrade 200 Geom.Scalar GeometryStroke + define lightSw : UnicodeWeightGrade 300 Geom.Scalar GeometryStroke + define mediumSw : UnicodeWeightGrade 500 Geom.Scalar GeometryStroke define dotSize : Math.max (0.6 * mediumSw) (0.1 * Geom.Size) diff --git a/packages/font-glyphs/src/symbol/pictograph/cross.ptl b/packages/font-glyphs/src/symbol/pictograph/cross.ptl index 5d8d53158..bbe304ac8 100644 --- a/packages/font-glyphs/src/symbol/pictograph/cross.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/cross.ptl @@ -13,9 +13,9 @@ glyph-block Symbol-Cross : for-width-kinds WideWidth1 define Geom : GeometricDim MosaicUnitWidth MosaicWidth define Size : GeometricSizes Geom - define normalSw : UnicodeWeightGrade 400 Geom.Scalar - define mediumSw : UnicodeWeightGrade 500 Geom.Scalar - define heavySw : UnicodeWeightGrade 900 Geom.Scalar + define normalSw : UnicodeWeightGrade 400 Geom.Scalar GeometryStroke + define mediumSw : UnicodeWeightGrade 500 Geom.Scalar GeometryStroke + define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke define pBottom 2 define pShortBar 0.6 From cf6f108d54460ee792921a260d0bdae82deafc49 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sat, 3 May 2025 11:22:42 -0400 Subject: [PATCH 3/3] Clamp weight to canonical min/max. --- packages/font-glyphs/src/symbol/letter.ptl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/font-glyphs/src/symbol/letter.ptl b/packages/font-glyphs/src/symbol/letter.ptl index 021a1ff96..73d75af45 100644 --- a/packages/font-glyphs/src/symbol/letter.ptl +++ b/packages/font-glyphs/src/symbol/letter.ptl @@ -335,7 +335,7 @@ glyph-block Symbol-Letter : begin create-glyph 'informationSource' 0x2139 : glyph-proc include : MarkSet.b - local sw : UnicodeWeightGrade 900 + local sw : clamp para.canonicalStrokeWidthMin para.canonicalStrokeWidthMax : UnicodeWeightGrade 900 include : VBar.m Middle 0 XH sw include : HSerif.lt (Middle - [HSwToV : 0.5 * sw]) XH (LongJut / 2) include : HSerif.lb (Middle - [HSwToV : 0.5 * sw]) 0 (LongJut / 2)