From 0056f78b11765ad426b3af0df028105c1fc02588 Mon Sep 17 00:00:00 2001 From: Logo <21302803+Logo121@users.noreply.github.com> Date: Sat, 31 May 2025 10:55:34 +0800 Subject: [PATCH] Arrow Cleanup + 28 arrows (#2787) * "import" cleanups * More 2-sided arrows * overlay arrows * dashed rewrite * doc --------- Co-authored-by: Belleve --- changes/33.2.4.md | 33 +++ packages/font-glyphs/src/marks/overlay.ptl | 192 +++++++++++------- .../font-glyphs/src/symbol/arrow/angled.ptl | 1 + .../font-glyphs/src/symbol/arrow/circular.ptl | 1 + .../src/symbol/arrow/composite.ptl | 125 ++++++++---- .../font-glyphs/src/symbol/arrow/dashed.ptl | 106 ++++++++-- .../font-glyphs/src/symbol/arrow/legacy.ptl | 2 +- .../font-glyphs/src/symbol/arrow/shared.ptl | 59 +++++- .../font-glyphs/src/symbol/arrow/simple.ptl | 38 +++- .../font-glyphs/src/symbol/arrow/stacked.ptl | 2 +- .../font-glyphs/src/symbol/arrow/thick.ptl | 2 - .../font-glyphs/src/symbol/arrow/wave.ptl | 3 +- .../font-glyphs/src/symbol/arrow/weighted.ptl | 1 - .../font-glyphs/src/symbol/arrow/zigzag.ptl | 1 + .../src/symbol/geometric/corner-shape.ptl | 2 +- .../src/symbol/pictograph/checking-marks.ptl | 2 +- 16 files changed, 418 insertions(+), 152 deletions(-) diff --git a/changes/33.2.4.md b/changes/33.2.4.md index e69bd082a..d002c3770 100644 --- a/changes/33.2.4.md +++ b/changes/33.2.4.md @@ -18,3 +18,36 @@ - TILDE WITH DOT ABOVE (`U+2E1E`) ... TILDE WITH DOT BELOW (`U+2E1F`). - LATIN CAPITAL LETTER LAMBDA WITH STROKE (`U+A7DC`). - LATIN SMALL LETTER SCRIPT R (`U+AB4B`) ... LATIN SMALL LETTER SCRIPT R WITH RING (`U+AB4C`). + - LEFTWARDS ARROW WITH STROKE (`U+219A`). + - RIGHTWARDS ARROW WITH STROKE (`U+219B`). + - LEFTWARDS TWO HEADED ARROW (`U+219E`) ... DOWNWARDS TWO HEADED ARROW (`U+21A1`). + - LEFT RIGHT ARROW WITH STROKE (`U+21AE`). + - LEFTWARDS DOUBLE ARROW WITH STROKE (`U+21CD`). + - LEFT RIGHT DOUBLE ARROW WITH STROKE (`U+21CE`). + - RIGHTWARDS DOUBLE ARROW WITH STROKE (`U+21CF`). + - UPWARDS ARROW WITH DOUBLE STROKE (`U+21DE`). + - DOWNWARDS ARROW WITH DOUBLE STROKE (`U+21DF`). + - RIGHT ARROW WITH SMALL CIRCLE (`U+21F4`). + - LEFTWARDS ARROW WITH VERTICAL STROKE (`U+21F7`) ... LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE (`U+21FC`). + - LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE (`U+2902`). + - RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE (`U+2903`). + - LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE (`U+2904`). + - DOWNWARDS ARROW WITH HORIZONTAL STROKE (`U+2908`). + - UPWARDS ARROW WITH HORIZONTAL STROKE (`U+2909`). + - LEFTWARDS DOUBLE ARROW-TAIL (`U+291B`). + - RIGHTWARDS DOUBLE ARROW-TAIL (`U+291C`). + - LEFT RIGHT ARROW THROUGH SMALL CIRCLE (`U+2948`). + - LEFT ARROW WITH SMALL CIRCLE (`U+2B30`). + - LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE (`U+2B7A`) ... DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE (`U+2B7D`). +* Add Characters: + - RIGHT ARROW WITH CIRCLED PLUS (`U+27F4`). + - RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE (`U+2900`). + - RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE (`U+2901`). + - RIGHTWARDS TWO-HEADED ARROW FROM BAR (`U+2905`). + - RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW (`U+2910`). + - RIGHTWARDS ARROW WITH DOTTED STEM (`U+2911`). + - RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE (`U+2914`) ... RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE (`U+2918`). + - LEFTWARDS ARROW TO BLACK DIAMOND (`U+291D`) ... RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND (`U+2920`). + - RIGHTWARDS ARROW THROUGH X (`U+2947`). + - LEFT ARROW WITH CIRCLED PLUS (`U+2B32`). + - LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE (`U+2B34`) ... LEFTWARDS ARROW THROUGH X (`U+2B3E`). diff --git a/packages/font-glyphs/src/marks/overlay.ptl b/packages/font-glyphs/src/marks/overlay.ptl index b0f5a113e..924cfff0d 100644 --- a/packages/font-glyphs/src/marks/overlay.ptl +++ b/packages/font-glyphs/src/marks/overlay.ptl @@ -256,87 +256,133 @@ glyph-block Mark-Overlay : begin curl r (XH * (+1.1)) do "Arrow overlays" - local fine : AdviceStroke 6 - create-glyph 'arrSlashOver' : glyph-proc - set-width 0 - local dx : Width * 0.1 - local dy : Width * 0.4 - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - dx - Width) (XH / 2 - dy) [widths.center fine] - curl (Middle + dx - Width) (XH / 2 + dy) + glyph-block-import Symbol-Arrow-Shared : ArrowDims - create-glyph 'arrVStrokeOver' : glyph-proc - set-width 0 - local dx : Width * 0 - local dy : Width * 0.3 - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - dx - Width) (XH / 2 - dy) [widths.center fine] - curl (Middle + dx - Width) (XH / 2 + dy) + for-width-kinds WideWidth1 + define dims : ArrowDims MosaicWidth MosaicWidthScalar - create-glyph 'dblArrVStrokeOver' : glyph-proc - set-width 0 - local dx : Width * 0 - local dy : Width * 0.4 - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - dx - Width) (XH / 2 - dy) [widths.center fine] - curl (Middle + dx - Width) (XH / 2 + dy) + define { + .arrowWidth arrowWidth + .arrowHeadSize arrowHeadSize - create-glyph 'arrDblVStrokeOver' : glyph-proc - set-width 0 - local dx : Width * 0 - local dy : Width * 0.3 - local gap : Math.max fine (Width * 0.1) - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - dx - Width - gap) (XH / 2 - dy) [widths.center fine] - curl (Middle + dx - Width - gap) (XH / 2 + dy) - include : dispiro - flat (Middle - dx - Width + gap) (XH / 2 - dy) [widths.center fine] - curl (Middle + dx - Width + gap) (XH / 2 + dy) + .overlaySw overlaySw + .strokeSpan strokeSpan + .strokeSpan2 strokeSpan2 + .dblArrSpace dblArrSpace + .dhtArrSpace dhtArrSpace + .dblArrSw dblArrSw + .dhtArrSw dhtArrSw + .terminal terminal + } dims - create-glyph 'arrHStrokeOver' : glyph-proc - set-width 0 - local dx : Width * 0.3 - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - Width - dx) (XH / 2) [widths.center fine] - curl (Middle - Width + dx) (XH / 2) + local VRingRadius : arrowHeadSize * 0.7 + local HRingRadius : Math.min VRingRadius : arrowWidth - 2 * arrowHeadSize - 0.3 * terminal + local VRingSw : AdviceStrokeInSpace VRingRadius HVContrast 2.25 1 + local HRingSw : AdviceStrokeInSpace HRingRadius HVContrast 2.25 1 - create-glyph 'arrDblHStrokeOver' : glyph-proc - set-width 0 - local dx : Width * 0.3 - local gap : Math.max fine (Width * 0.1) - set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) - include : dispiro - flat (Middle - Width - dx) (XH / 2 - gap) [widths.center fine] - curl (Middle - Width + dx) (XH / 2 - gap) - include : dispiro - flat (Middle - Width - dx) (XH / 2 + gap) [widths.center fine] - curl (Middle - Width + dx) (XH / 2 + gap) + create-glyph [MangleName 'arrSlashOver'] : glyph-proc + set-width 0 + local dx : arrowHeadSize * 0.4 + local dy : arrowHeadSize * 1.1 + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-dx) (-dy) [widths.center overlaySw] + curl (+dx) (+dy) - define [ArrowRingOverlay kr c] : glyph-proc - set-width 0 - local r : Width * kr - set-mark-anchor 'slash' 0 0 0 0 - include : RingStrokeAt 0 0 r [AdviceStroke c] + create-glyph [MangleName 'arrVStrokeOver'] : glyph-proc + set-width 0 + local dy strokeSpan + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat 0 (-dy) [widths.center overlaySw] + curl 0 (+dy) - define [ArrowRingMaskOverlay kr c] : glyph-proc - set-width 0 - local r : Width * kr - set-mark-anchor 'slash' 0 0 0 0 - include : RingAt 0 0 r [AdviceStroke c] + create-glyph [MangleName 'dblArrVStrokeOver'] : glyph-proc + set-width 0 + local dy strokeSpan2 + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat 0 (-dy) [widths.center overlaySw] + curl 0 (+dy) - create-glyph 'arrRingOver.NWID' : ArrowRingOverlay 0.25 5 - create-glyph 'arrRingOver.WWID' : ArrowRingOverlay 0.35 4.5 - create-glyph 'arrRingOverLR.NWID' : ArrowRingOverlay 0.2 6 - create-glyph 'arrRingOverLR.WWID' : ArrowRingOverlay 0.35 4.5 - create-glyph 'arrRingOverMask.NWID' : ArrowRingMaskOverlay 0.25 5 - create-glyph 'arrRingOverMask.WWID' : ArrowRingMaskOverlay 0.35 4.5 - create-glyph 'arrRingOverLRMask.NWID' : ArrowRingMaskOverlay 0.2 6 - create-glyph 'arrRingOverLRMask.WWID' : ArrowRingMaskOverlay 0.35 4.5 + create-glyph [MangleName 'arrDblVStrokeOver'] : glyph-proc + set-width 0 + local dy strokeSpan + local gap : clamp dblArrSw (dblArrSpace - 2 * dblArrSw) (dblArrSpace / 4) + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-gap) (-dy) [widths.center dblArrSw] + curl (-gap) (+dy) + include : dispiro + flat (+gap) (-dy) [widths.center dblArrSw] + curl (+gap) (+dy) + + create-glyph [MangleName 'arrDhtVStrokeOver'] : glyph-proc + set-width 0 + local dy strokeSpan + local gap : clamp dhtArrSw (dhtArrSpace - 2 * dhtArrSw) (dhtArrSpace / 4) + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-gap) (-dy) [widths.center dhtArrSw] + curl (-gap) (+dy) + include : dispiro + flat (+gap) (-dy) [widths.center dhtArrSw] + curl (+gap) (+dy) + + create-glyph [MangleName 'arrHStrokeOver'] : glyph-proc + set-width 0 + local dx strokeSpan + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-dx) 0 [widths.center overlaySw] + curl (+dx) 0 + + create-glyph [MangleName 'arrDblHStrokeOver'] : glyph-proc + set-width 0 + local dx strokeSpan + local gap : clamp overlaySw (1.5 * arrowHeadSize - 2 * overlaySw) (1.5 * arrowHeadSize / 4) + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-dx) (-gap) [widths.center overlaySw] + curl (+dx) (-gap) + include : dispiro + flat (-dx) (+gap) [widths.center overlaySw] + curl (+dx) (+gap) + + create-glyph [MangleName 'arrCrossOver'] : glyph-proc + set-width 0 + local r : 0.7 * HRingRadius + 0.5 * overlaySw + set-mark-anchor 'slash' 0 0 0 0 + include : dispiro + flat (-r) (-r) [widths.center overlaySw] + curl (+r) (+r) + include : dispiro + flat (-r) (+r) [widths.center overlaySw] + curl (+r) (-r) + + define [ArrowRingOverlay r sw] : glyph-proc + set-width 0 + set-mark-anchor 'slash' 0 0 0 0 + include : RingStrokeAt 0 0 r sw + + define [ArrowRingPlusOverlay r sw] : glyph-proc + set-width 0 + set-mark-anchor 'slash' 0 0 0 0 + local rin : r - 0.5 * sw + include : RingStrokeAt 0 0 r sw + include : VBar.m 0 (-rin) rin sw + include : HBar.m (-rin) rin 0 sw + + define [ArrowRingMaskOverlay r sw] : glyph-proc + set-width 0 + set-mark-anchor 'slash' 0 0 0 0 + include : RingAt 0 0 r sw + + # create-glyph [MangleName 'arrRingOver'] : ArrowRingOverlay VRingRadius VRingSw + # create-glyph [MangleName 'arrRingOverMask'] : ArrowRingMaskOverlay VRingSw VRingSw + create-glyph [MangleName 'arrRingOverLR'] : ArrowRingOverlay HRingRadius HRingSw + create-glyph [MangleName 'arrRingPlusOverLR'] : ArrowRingPlusOverlay HRingRadius HRingSw + create-glyph [MangleName 'arrRingOverLRMask'] : ArrowRingMaskOverlay HRingRadius HRingSw do "Half-XH marks for spacing modifiers" create-glyph 'leftTackOver' : glyph-proc diff --git a/packages/font-glyphs/src/symbol/arrow/angled.ptl b/packages/font-glyphs/src/symbol/arrow/angled.ptl index cb64c9cb0..5436c848a 100644 --- a/packages/font-glyphs/src/symbol/arrow/angled.ptl +++ b/packages/font-glyphs/src/symbol/arrow/angled.ptl @@ -19,6 +19,7 @@ glyph-block Symbol-Arrow-Angled : for-width-kinds WideWidth1 .arrowMidX arrowMidX .arrowSB arrowSB .arrowRSB arrowRSB + .arrowSw arrowSw .halfArrowSw halfArrowSw .arrowHeadSize arrowHeadSize diff --git a/packages/font-glyphs/src/symbol/arrow/circular.ptl b/packages/font-glyphs/src/symbol/arrow/circular.ptl index aef94b8e3..65dbb1a25 100644 --- a/packages/font-glyphs/src/symbol/arrow/circular.ptl +++ b/packages/font-glyphs/src/symbol/arrow/circular.ptl @@ -18,6 +18,7 @@ glyph-block Symbol-Arrow-Circular : for-width-kinds WideWidth1 .arrowMidX arrowMidX .arrowSB arrowSB .arrowRSB arrowRSB + .arrowSw arrowSw .arrowHeadSize arrowHeadSize .fine fine diff --git a/packages/font-glyphs/src/symbol/arrow/composite.ptl b/packages/font-glyphs/src/symbol/arrow/composite.ptl index e78947f9e..4c92c9752 100644 --- a/packages/font-glyphs/src/symbol/arrow/composite.ptl +++ b/packages/font-glyphs/src/symbol/arrow/composite.ptl @@ -29,91 +29,142 @@ glyph-block Symbol-Arrow-Composite : for-width-kinds WideWidth1 .terminal terminal } dims - define [ThinArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc - local halfSw : fallback _halfSw halfArrowSw - include : Arrow.Head.shape x1 y1 x2 y2 size - include : Arrow.Bar.shape x1 y1 x2 y2 (0.5 * [mix fine terminal 0.5]) + local VRingRadius : arrowHeadSize * 0.7 + local HRingRadius : Math.min VRingRadius : arrowWidth - 2 * arrowHeadSize - 0.3 * terminal + local VRingSw : AdviceStrokeInSpace VRingRadius HVContrast 2.25 1 + local HRingSw : AdviceStrokeInSpace HRingRadius HVContrast 2.25 1 + + define [ThinBarShape thinSw] : lambda [x1 y1 x2 y2 size _halfSw] : glyph-proc + include : Arrow.Bar.shape x1 y1 x2 y2 (0.5 * thinSw) # Thin arrows for composition - MkArrow.single ThinArrowShape [MangleName 'thinArrowLeft'] null arrowRSB SymbolMid arrowSB SymbolMid - # MkArrow.single ThinArrowShape [MangleName 'thinArrowUp'] null arrowMidX arrowBot arrowMidX arrowTop - MkArrow.single ThinArrowShape [MangleName 'thinArrowRight'] null arrowSB SymbolMid arrowRSB SymbolMid - # MkArrow.single ThinArrowShape [MangleName 'thinArrowDown'] null arrowMidX arrowTop arrowMidX arrowBot - MkArrow.double ThinArrowShape ThinArrowShape [MangleName 'thinArrowLeftRight'] null arrowSB SymbolMid arrowRSB SymbolMid + MkArrow.single [ThinBarShape HRingSw] [MangleName 'thinArrowBarH'] null arrowRSB SymbolMid arrowSB SymbolMid + # MkArrow.single [ThinBarShape VRingSw] [MangleName 'thinArrowBarV'] null arrowMidX arrowBot arrowMidX arrowTop do "Arrow with Stroke" create-glyph [MangleName 'uni219A'] [MangleUnicode 0x219A] : composite-proc refer-glyph : MangleName 'arrowLeft' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni219B'] [MangleUnicode 0x219B] : composite-proc refer-glyph : MangleName 'arrowRight' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni21AE'] [MangleUnicode 0x21AE] : composite-proc refer-glyph : MangleName 'arrowLeftRight' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni21F7'] [MangleUnicode 0x21F7] : composite-proc refer-glyph : MangleName 'arrowLeft' - refer-glyph 'arrVStrokeOver' + refer-glyph : MangleName 'arrVStrokeOver' create-glyph [MangleName 'uni21F8'] [MangleUnicode 0x21F8] : composite-proc refer-glyph : MangleName 'arrowRight' - refer-glyph 'arrVStrokeOver' + refer-glyph : MangleName 'arrVStrokeOver' create-glyph [MangleName 'uni21F9'] [MangleUnicode 0x21F9] : composite-proc refer-glyph : MangleName 'arrowLeftRight' - refer-glyph 'arrVStrokeOver' + refer-glyph : MangleName 'arrVStrokeOver' create-glyph [MangleName 'uni21FA'] [MangleUnicode 0x21FA] : composite-proc refer-glyph : MangleName 'arrowLeft' - refer-glyph 'arrDblVStrokeOver' + refer-glyph : MangleName 'arrDblVStrokeOver' create-glyph [MangleName 'uni21FB'] [MangleUnicode 0x21FB] : composite-proc refer-glyph : MangleName 'arrowRight' - refer-glyph 'arrDblVStrokeOver' + refer-glyph : MangleName 'arrDblVStrokeOver' create-glyph [MangleName 'uni21FC'] [MangleUnicode 0x21FC] : composite-proc refer-glyph : MangleName 'arrowLeftRight' - refer-glyph 'arrDblVStrokeOver' + refer-glyph : MangleName 'arrDblVStrokeOver' create-glyph [MangleName 'uni21CD'] [MangleUnicode 0x21CD] : composite-proc refer-glyph : MangleName 'dblArrowLeft' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni21CE'] [MangleUnicode 0x21CE] : composite-proc refer-glyph : MangleName 'dblArrowLeftRight' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni21CF'] [MangleUnicode 0x21CF] : composite-proc refer-glyph : MangleName 'dblArrowRight' - refer-glyph 'arrSlashOver' + refer-glyph : MangleName 'arrSlashOver' create-glyph [MangleName 'uni2908'] [MangleUnicode 0x2908] : composite-proc refer-glyph : MangleName 'arrowDown' - refer-glyph 'arrHStrokeOver' + refer-glyph : MangleName 'arrHStrokeOver' create-glyph [MangleName 'uni2909'] [MangleUnicode 0x2909] : composite-proc refer-glyph : MangleName 'arrowUp' - refer-glyph 'arrHStrokeOver' + refer-glyph : MangleName 'arrHStrokeOver' create-glyph [MangleName 'uni21DF'] [MangleUnicode 0x21DF] : composite-proc refer-glyph : MangleName 'arrowDown' - refer-glyph 'arrDblHStrokeOver' + refer-glyph : MangleName 'arrDblHStrokeOver' create-glyph [MangleName 'uni21DE'] [MangleUnicode 0x21DE] : composite-proc refer-glyph : MangleName 'arrowUp' - refer-glyph 'arrDblHStrokeOver' + refer-glyph : MangleName 'arrDblHStrokeOver' create-glyph [MangleName 'uni2902'] [MangleUnicode 0x2902] : composite-proc refer-glyph : MangleName 'dblArrowLeft' - refer-glyph 'dblArrVStrokeOver' + refer-glyph : MangleName 'dblArrVStrokeOver' create-glyph [MangleName 'uni2903'] [MangleUnicode 0x2903] : composite-proc refer-glyph : MangleName 'dblArrowRight' - refer-glyph 'dblArrVStrokeOver' + refer-glyph : MangleName 'dblArrVStrokeOver' create-glyph [MangleName 'uni2904'] [MangleUnicode 0x2904] : composite-proc refer-glyph : MangleName 'dblArrowLeftRight' - refer-glyph 'dblArrVStrokeOver' + refer-glyph : MangleName 'dblArrVStrokeOver' create-glyph [MangleName 'uni2B7A'] [MangleUnicode 0x2B7A] : composite-proc refer-glyph : MangleName 'trigArrowLeft' - refer-glyph 'arrDblVStrokeOver' + refer-glyph : MangleName 'arrDblVStrokeOver' create-glyph [MangleName 'uni2B7B'] [MangleUnicode 0x2B7B] : composite-proc refer-glyph : MangleName 'trigArrowUp' - refer-glyph 'arrDblHStrokeOver' + refer-glyph : MangleName 'arrDblHStrokeOver' create-glyph [MangleName 'uni2B7C'] [MangleUnicode 0x2B7C] : composite-proc refer-glyph : MangleName 'trigArrowRight' - refer-glyph 'arrDblVStrokeOver' + refer-glyph : MangleName 'arrDblVStrokeOver' create-glyph [MangleName 'uni2B7D'] [MangleUnicode 0x2B7D] : composite-proc refer-glyph : MangleName 'trigArrowDown' - refer-glyph 'arrDblHStrokeOver' + refer-glyph : MangleName 'arrDblHStrokeOver' + + create-glyph [MangleName 'uni2947'] [MangleUnicode 0x2947] : composite-proc + refer-glyph : MangleName 'arrowRight' + refer-glyph : MangleName 'arrCrossOver' + create-glyph [MangleName 'uni2B3E'] [MangleUnicode 0x2B3E] : composite-proc + refer-glyph : MangleName 'arrowLeft' + refer-glyph : MangleName 'arrCrossOver' + + + create-glyph [MangleName 'uni2900'] [MangleUnicode 0x2900] : composite-proc + refer-glyph : MangleName 'dhArrowRight' + refer-glyph : MangleName 'arrVStrokeOver' + create-glyph [MangleName 'uni2B34'] [MangleUnicode 0x2B34] : composite-proc + refer-glyph : MangleName 'dhArrowLeft' + refer-glyph : MangleName 'arrVStrokeOver' + + create-glyph [MangleName 'uni2914'] [MangleUnicode 0x2914] : composite-proc + refer-glyph : MangleName 'htArrowRight' + refer-glyph : MangleName 'arrVStrokeOver' + create-glyph [MangleName 'uni2B39'] [MangleUnicode 0x2B39] : composite-proc + refer-glyph : MangleName 'htArrowLeft' + refer-glyph : MangleName 'arrVStrokeOver' + + create-glyph [MangleName 'uni2917'] [MangleUnicode 0x2917] : composite-proc + refer-glyph : MangleName 'dhtArrowRight' + refer-glyph : MangleName 'arrVStrokeOver' + create-glyph [MangleName 'uni2B3C'] [MangleUnicode 0x2B3C] : composite-proc + refer-glyph : MangleName 'dhtArrowLeft' + refer-glyph : MangleName 'arrVStrokeOver' + + create-glyph [MangleName 'uni2901'] [MangleUnicode 0x2901] : composite-proc + refer-glyph : MangleName 'dhArrowRight' + refer-glyph : MangleName 'arrDblVStrokeOver' + create-glyph [MangleName 'uni2B35'] [MangleUnicode 0x2B35] : composite-proc + refer-glyph : MangleName 'dhArrowLeft' + refer-glyph : MangleName 'arrDblVStrokeOver' + + create-glyph [MangleName 'uni2915'] [MangleUnicode 0x2915] : composite-proc + refer-glyph : MangleName 'htArrowRight' + refer-glyph : MangleName 'arrDblVStrokeOver' + create-glyph [MangleName 'uni2B3A'] [MangleUnicode 0x2B3A] : composite-proc + refer-glyph : MangleName 'htArrowLeft' + refer-glyph : MangleName 'arrDblVStrokeOver' + + create-glyph [MangleName 'uni2918'] [MangleUnicode 0x2918] : composite-proc + refer-glyph : MangleName 'dhtArrowRight' + refer-glyph : MangleName 'arrDhtVStrokeOver' + create-glyph [MangleName 'uni2B3D'] [MangleUnicode 0x2B3D] : composite-proc + refer-glyph : MangleName 'dhtArrowLeft' + refer-glyph : MangleName 'arrDhtVStrokeOver' + do "Arrow with ring" define [RingOverlayShape base baseThin overlay overlayMask] : composite-proc @@ -135,11 +186,15 @@ glyph-block Symbol-Arrow-Composite : for-width-kinds WideWidth1 refer-glyph : MangleName overlayMask create-glyph [MangleName 'uni21F4'] [MangleUnicode 0x21F4] - RingOverlayShape 'arrowRight' 'thinArrowRight' 'arrRingOverLR' 'arrRingOverLRMask' + RingOverlayShape 'arrowRight' 'thinArrowBarH' 'arrRingOverLR' 'arrRingOverLRMask' create-glyph [MangleName 'uni2B30'] [MangleUnicode 0x2B30] - RingOverlayShape 'arrowLeft' 'thinArrowLeft' 'arrRingOverLR' 'arrRingOverLRMask' + RingOverlayShape 'arrowLeft' 'thinArrowBarH' 'arrRingOverLR' 'arrRingOverLRMask' create-glyph [MangleName 'uni2948'] [MangleUnicode 0x2948] - RingOverlayShape 'arrowLeftRight' 'thinArrowLeftRight' 'arrRingOverLR' 'arrRingOverLRMask' + RingOverlayShape 'arrowLeftRight' 'thinArrowBarH' 'arrRingOverLR' 'arrRingOverLRMask' + create-glyph [MangleName 'uni27F4'] [MangleUnicode 0x27F4] + RingOverlayShape 'arrowRight' 'thinArrowBarH' 'arrRingPlusOverLR' 'arrRingOverLRMask' + create-glyph [MangleName 'uni2B32'] [MangleUnicode 0x2B32] + RingOverlayShape 'arrowLeft' 'thinArrowBarH' 'arrRingPlusOverLR' 'arrRingOverLRMask' do "Branched Arrows" local branchInset : 0.5 * MosaicWidth - 1.5 * arrowHeadSize diff --git a/packages/font-glyphs/src/symbol/arrow/dashed.ptl b/packages/font-glyphs/src/symbol/arrow/dashed.ptl index 41a700ab4..80b115dfd 100644 --- a/packages/font-glyphs/src/symbol/arrow/dashed.ptl +++ b/packages/font-glyphs/src/symbol/arrow/dashed.ptl @@ -7,9 +7,10 @@ glyph-module glyph-block Symbol-Arrow-Dashed : for-width-kinds WideWidth1 glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Symbol-Arrow-Shared : ArrowDims ArrowHeadT MkArrowT + glyph-block-import Symbol-Arrow-Shared : ArrowDims ArrowT MkArrowT define dims : ArrowDims MosaicWidth MosaicWidthScalar + define Arrow : ArrowT dims define MkArrow : MkArrowT dims define { @@ -21,8 +22,9 @@ glyph-block Symbol-Arrow-Dashed : for-width-kinds WideWidth1 .arrowSB arrowSB .arrowRSB arrowRSB - .arrowSw arrowSw .halfArrowSw halfArrowSw + .fine fine + .doubleHeadGap doubleHeadGap } dims define o : O * 2 @@ -31,46 +33,99 @@ glyph-block Symbol-Arrow-Dashed : for-width-kinds WideWidth1 define [DashedArrowBar x1 y1 x2 y2 halfSw gap segLen w] : begin return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc local p : (mag - o - halfSw * [fallback w 1.1]) / mag - local deltaT : (gap + segLen) / mag - for [local t 0] (t < p) [set t : t + deltaT] : include : dispiro + + local fullLen : mag * p + local x0 : mag * (1 - p) + local dt0 : segLen / fullLen + local dt : (gap + segLen) / fullLen + for [local t 0] (t < 1) [set t : t + dt] : include : dispiro widths.center (halfSw * 2) - flat [mix (mag * (1 - p)) mag t] 0 - curl [mix (mag * (1 - p)) mag : Math.min p (t + segLen / mag)] 0 + flat [mix x0 mag t] 0 + curl [mix x0 mag : Math.min 1 (t + dt0)] 0 define [SegmentArrowBar x1 y1 x2 y2 halfSw gap segCnt w] : begin return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc local p : (mag - o - halfSw * [fallback w 1.1]) / mag - local deltaT : (1 + gap / mag) / segCnt - local segLen : deltaT * mag - gap - for [local t 0] (t < p) [set t : t + deltaT] : include : dispiro + + local fullLen : mag * p + local x0 : mag * (1 - p) + local dt : (1 + gap / fullLen) / segCnt + local dt0 : dt - gap / fullLen + for [local t 0] (t < 1) [set t : t + dt] : include : dispiro widths.center (halfSw * 2) - flat [mix (mag * (1 - p)) mag t] 0 - curl [mix (mag * (1 - p)) mag : Math.min p (t + segLen / mag)] 0 + flat [mix x0 mag t] 0 + curl [mix x0 mag : Math.min 1 (t + dt0)] 0 + + define [DottedArrowBar x1 y1 x2 y2 fDot kDotR oDot halfSw gap w] : begin + return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc + local p : (mag - o - halfSw * [fallback w 1.1]) / mag + + local fullLen : mag * p + local x0 : mag * (1 - p) + local dt0 : 2 * halfSw * kDotR / fullLen + local dt : dt0 + gap / fullLen + + local dots : list + for [local t 0] (t < 1 + dt0) [set t : t + dt] : dots.push + fDot [mix mag x0 : t + dt0 / 2] 0 (halfSw * kDotR) + include : intersection + MaskRight x0 + union.apply null dots define dashGap : AdviceStroke 6 define dashLen : Math.max (Width / 5) (dashGap * 3) # Arrow Shapes - define ArrowHead : ArrowHeadT dims define [DashedArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc local halfSw : fallback _halfSw halfArrowSw - local gap : AdviceStroke 6 - include : ArrowHead.shape x1 y1 x2 y2 size + include : Arrow.Head.shape x1 y1 x2 y2 size include : DashedArrowBar x1 y1 x2 y2 halfSw dashGap dashLen define [DashedTrigArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc local halfSw : fallback _halfSw halfArrowSw - include : ArrowHead.trigShape x1 y1 x2 y2 (0.75 * size) + include : Arrow.Head.trigShape x1 y1 x2 y2 (0.75 * size) include : DashedArrowBar x1 y1 x2 y2 halfSw dashGap dashLen - define [nSegArrowShape n] : lambda [x1 y1 x2 y2 size _halfSw] : glyph-proc + define [nSegArrowShapeT n] : lambda [x1 y1 x2 y2 size _halfSw] : glyph-proc local halfSw : fallback _halfSw halfArrowSw - include : ArrowHead.shape x1 y1 x2 y2 size + include : Arrow.Head.shape x1 y1 x2 y2 size include : SegmentArrowBar x1 y1 x2 y2 halfSw dashGap n - define TwoSegArrowShape : nSegArrowShape 2 - define ThreeSegArrowShape : nSegArrowShape 3 + define TwoSegArrowShape : nSegArrowShapeT 2 + define ThreeSegArrowShape : nSegArrowShapeT 3 + + define [DottedArrowShapeT fDot kDotR oDot] : lambda [x1 y1 x2 y2 size _halfSw] : glyph-proc + local halfSw : fallback _halfSw halfArrowSw + include : Arrow.Head.shape x1 y1 x2 y2 size + include : DottedArrowBar x1 y1 x2 y2 fDot kDotR oDot halfSw dashGap + + define [DhtThreeSegArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc + local halfSw : fallback _halfSw halfArrowSw + local mag : Math.hypot (y2 - y1) (x2 - x1) + local pFine : 0.5 * fine / mag + local pHead : 1 - doubleHeadGap / mag + local xHead : mix x1 x2 pHead + local yHead : mix y1 y2 pHead + local xCoHead : mix x1 x2 : pHead - pFine + local yCoHead : mix y1 y2 : pHead - pFine + local pTail : size / mag + local xTail : mix x1 x2 pTail + local yTail : mix y1 y2 pTail + local xCoTail : mix x1 x2 : pTail - pFine + local yCoTail : mix y1 y2 : pTail - pFine + + local gap : AdviceStrokeInSpace (mag - doubleHeadGap - size - fine) HVContrast 6 1 + + include : Arrow.shape xCoHead yCoHead x2 y2 size + include : Arrow.Head.shape x1 y1 xHead yHead size + local bar : Arrow.Bar.shape xCoTail yCoTail xCoHead yCoHead halfSw + local dash : SegmentArrowBar xCoTail yCoTail xCoHead yCoHead halfSw gap 3 + include dash + include : difference + Arrow.Head.shape x1 y1 xTail yTail size + difference bar dash + # Glyphs MkArrow.single DashedArrowShape [MangleName 'dashArrowLeft'] [MangleUnicode 0x21E0] arrowRSB SymbolMid arrowSB SymbolMid @@ -87,3 +142,16 @@ glyph-block Symbol-Arrow-Dashed : for-width-kinds WideWidth1 MkArrow.single TwoSegArrowShape [MangleName 'twoDashArrowRight'] [MangleUnicode 0x290D] arrowSB SymbolMid arrowRSB SymbolMid MkArrow.single ThreeSegArrowShape [MangleName 'threeDashArrowLeft'] [MangleUnicode 0x290E] arrowRSB SymbolMid arrowSB SymbolMid MkArrow.single ThreeSegArrowShape [MangleName 'threeDashArrowRight'] [MangleUnicode 0x290F] arrowSB SymbolMid arrowRSB SymbolMid + + MkArrow.single DhtThreeSegArrowShape [MangleName 'dhtThreeDashArrowLeft'] [MangleUnicode 0x2910] arrowRSB SymbolMid arrowSB SymbolMid + MkArrow.single DhtThreeSegArrowShape [MangleName 'dhtThreeDashArrowRight'] [MangleUnicode 0x2B37] arrowSB SymbolMid arrowRSB SymbolMid + + # Dotted Arrows + foreach { suffix { fDot kDotR oDot } } [Object.entries DotVariants] : do + define DottedArrowShape : DottedArrowShapeT fDot kDotR oDot + + MkArrow.single DottedArrowShape "\[MangleName 'dottedArrowLeft'].\(suffix)" null arrowRSB SymbolMid arrowSB SymbolMid + MkArrow.single DottedArrowShape "\[MangleName 'dottedArrowRight'].\(suffix)" null arrowSB SymbolMid arrowRSB SymbolMid + + select-variant [MangleName "dottedArrowLeft"] [MangleUnicode 0x2911] (follow -- 'punctuationDot') + select-variant [MangleName "dottedArrowRight"] [MangleUnicode 0x2B38] (follow -- 'punctuationDot') diff --git a/packages/font-glyphs/src/symbol/arrow/legacy.ptl b/packages/font-glyphs/src/symbol/arrow/legacy.ptl index 2db84c8d6..e124e2ea4 100644 --- a/packages/font-glyphs/src/symbol/arrow/legacy.ptl +++ b/packages/font-glyphs/src/symbol/arrow/legacy.ptl @@ -20,9 +20,9 @@ glyph-block Symbol-Arrow-Legacy : for-width-kinds WideWidth1 .arrowMidX arrowMidX .arrowSB arrowSB .arrowRSB arrowRSB + .arrowSw arrowSw .halfArrowSw halfArrowSw - .arrowHeadSize arrowHeadSize } dims define bodyWidth : Math.min arrowWidth (arrowHeight * 0.6) diff --git a/packages/font-glyphs/src/symbol/arrow/shared.ptl b/packages/font-glyphs/src/symbol/arrow/shared.ptl index 7fea8c25d..901bfd5f2 100644 --- a/packages/font-glyphs/src/symbol/arrow/shared.ptl +++ b/packages/font-glyphs/src/symbol/arrow/shared.ptl @@ -18,7 +18,6 @@ glyph-block Symbol-Arrow-Shared : begin define arrowMidX : MosaicWidth / 2 define arrowSB : (MosaicWidth - arrowWidth) / 2 define arrowRSB : MosaicWidth - arrowSB - define o : O * 2 # Diagonal arrow params define diagPropX : 1 / (2 ** (1 / 4)) @@ -40,13 +39,28 @@ glyph-block Symbol-Arrow-Shared : begin # Special arrow params define compactHeadSize : mix arrowSw arrowHeadSize 0.75 define doubleBarSpan : arrowHeadSize * 1.1 + define doubleHeadGap : Math.max + 1.4 * fine + 0.15 * Width + 0.125 * MosaicWidth + + # Overlay spacing + define overlaySw : AdviceStroke 6 + define strokeSpan1 : mix halfArrowSw arrowHeadSize 0.6 + define strokeSpan2 : mix (0.5 * doubleBarSpan) arrowHeadSize 0.75 + define strokeSpan : mix strokeSpan1 strokeSpan2 : clamp 0 1 : MosaicWidthScalar - 1 + define dblArrSpace : arrowWidth - 2 * strokeSpan - 2 * terminal + define dhtArrSpace : Math.max (Width * 0.1) : arrowWidth - strokeSpan - doubleHeadGap - arrowHeadSize - 0.5 * fine + define dblArrSw : Math.min overlaySw : AdviceStrokeInSpace dblArrSpace HVContrast 2 1 + define dhtArrSw : Math.min overlaySw : AdviceStrokeInSpace dhtArrSpace HVContrast 2 1 return [object MosaicWidth MosaicWidthScalar arrowHeight arrowWidth arrowTop arrowBot arrowMidX arrowSB arrowRSB diagPropX diagPropY arrowDiagRSB arrowDiagSB arrowDiagBot arrowDiagTop arrowHeadSize arrowSw halfArrowSw fine terminal halfTerminal - compactHeadSize doubleBarSpan] + compactHeadSize doubleBarSpan doubleHeadGap + overlaySw strokeSpan strokeSpan2 dblArrSpace dhtArrSpace dblArrSw dhtArrSw] define [ArrowBarT dims] : namespace local { .arrowSw arrowSw } dims @@ -90,6 +104,7 @@ glyph-block Symbol-Arrow-Shared : begin define [ArrowHeadT dims] : namespace local { .arrowHeadSize arrowHeadSize + .doubleHeadGap doubleHeadGap .fine fine .terminal terminal } dims @@ -164,6 +179,14 @@ glyph-block Symbol-Arrow-Shared : begin flat 0 (-size) curl 0 size + export : define [diamondShape x1 y1 x2 y2 size] : begin + return : PointingTo x1 y1 x2 y2 : lambda [mag] : begin + spiro-outline + corner o 0 + corner size ( size - o) + corner (2 * size - o) 0 + corner size (-size + o) + export : define [rectShape x1 y1 x2 y2 width _length _width2] : begin local length : fallback _length width return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : begin @@ -171,9 +194,13 @@ glyph-block Symbol-Arrow-Shared : begin define [ArrowT dims] : namespace local { + .MosaicWidth MosaicWidth + .MosaicWidthScalar MosaicWidthScalar .fine fine .arrowSw arrowSw .halfArrowSw halfArrowSw + .arrowHeadSize arrowHeadSize + .doubleHeadGap doubleHeadGap } dims export : define Head : ArrowHeadT dims @@ -205,7 +232,7 @@ glyph-block Symbol-Arrow-Shared : begin export : define [dblShape x1 y1 x2 y2 size _halfSw] : glyph-proc local halfSw : fallback _halfSw halfArrowSw local mag : Math.hypot (y2 - y1) (x2 - x1) - local p : 1 - (size - o) / mag + local p : 1 - doubleHeadGap / mag local x3 : mix x1 x2 p local y3 : mix y1 y2 p @@ -259,7 +286,7 @@ glyph-block Symbol-Arrow-Shared : begin local halfSw : fallback _halfSw halfArrowSw local mag : Math.hypot (y2 - y1) (x2 - x1) local p : 1 - size / mag - local p2 : 1 - (2 * size) / mag + local p2 : 1 - (size + doubleHeadGap) / mag local x3 : mix x1 x2 p local y3 : mix y1 y2 p local x4 : mix x1 x2 p2 @@ -298,24 +325,36 @@ glyph-block Symbol-Arrow-Shared : begin include : arrowFunc x1 y1 [mix x1 x2 p] [mix y1 y2 p] size _halfSw include : Head.barShape x1 y1 [mix x1 x2 p2] [mix y1 y2 p2] size fine + export : define [toDiamondShapeT arrowFunc] : lambda [x1 y1 x2 y2 size _halfSw] : glyph-proc + local halfSw : fallback _halfSw halfArrowSw + local mag : Math.hypot (y2 - y1) (x2 - x1) + local diaSize : [Math.min 1.5 MosaicWidthScalar] * 0.75 * size + local p : 1 - (diaSize - 2 * o) / mag + + include : arrowFunc x1 y1 [mix x1 x2 p] [mix y1 y2 p] size _halfSw + include : Head.diamondShape x1 y1 x2 y2 (0.5 * diaSize) + # MkArrow Functions define [MkArrowT dims] : namespace local { .MosaicWidth MosaicWidth .MosaicWidthScalar MosaicWidthScalar .arrowHeadSize arrowHeadSize } dims - export : define [single shape id unicode x1 y1 x2 y2 width headSize] + export : define [singleAnchorAt p] : lambda [shape id unicode x1 y1 x2 y2 width headSize] create-glyph id unicode : glyph-proc set-width [fallback width MosaicWidth] - set-base-anchor 'slash' [mix x1 x2 (2/5)] [mix y1 y2 (2/5)] + set-base-anchor 'slash' [mix x1 x2 p] [mix y1 y2 p] include : shape x1 y1 x2 y2 [fallback headSize arrowHeadSize] + export : define single : singleAnchorAt : 2 / 5 - export : define [double shape1 shape2 id unicode x1 y1 x2 y2] + export : define [doubleAnchorAt pAnchor _pMid] : lambda [shape1 shape2 id unicode x1 y1 x2 y2] create-glyph id unicode : glyph-proc set-width MosaicWidth - set-base-anchor 'slash' [mix x1 x2 (1/2)] [mix y1 y2 (1/2)] - local xm : mix x1 x2 0.5 - local ym : mix y1 y2 0.5 + local pMid : fallback _pMid pAnchor + local xm : mix x1 x2 pMid + local ym : mix y1 y2 pMid + set-base-anchor 'slash' [mix x1 x2 pAnchor] [mix y1 y2 pAnchor] include : shape1 xm ym x1 y1 arrowHeadSize include : shape2 xm ym x2 y2 arrowHeadSize + export : define double : doubleAnchorAt : 1 / 2 do "exports" define MosaicWidth Width diff --git a/packages/font-glyphs/src/symbol/arrow/simple.ptl b/packages/font-glyphs/src/symbol/arrow/simple.ptl index 8dc1c9b52..9a3d09365 100644 --- a/packages/font-glyphs/src/symbol/arrow/simple.ptl +++ b/packages/font-glyphs/src/symbol/arrow/simple.ptl @@ -27,8 +27,19 @@ glyph-block Symbol-Arrow-Simple : for-width-kinds WideWidth1 .arrowDiagTop arrowDiagTop .doubleBarSpan doubleBarSpan + .arrowHeadSize arrowHeadSize + .strokeSpan strokeSpan + .doubleHeadGap doubleHeadGap + .fine fine } dims + # Determine anchor positions for horizontal multihead/tail arrows + define tailP : (arrowHeadSize - fine * 0.5) / arrowWidth + define headP : 1 - (strokeSpan + fine) / arrowWidth + define gapP : doubleHeadGap / arrowWidth + define dhAnchorP : mix 0 (headP - gapP) 0.6 + define htAnchorP : mix tailP headP 0.6 + define dhtAnchorP : mix tailP (headP - gapP) 0.6 define kLongArrowSB : [DivFrame MosaicWidthScalar 4].leftSB / [DivFrame MosaicWidthScalar 2].leftSB MkArrow.single Arrow.shape [MangleName 'arrowLeft'] [MangleUnicode 0x2190] arrowRSB SymbolMid arrowSB SymbolMid @@ -98,10 +109,10 @@ glyph-block Symbol-Arrow-Simple : for-width-kinds WideWidth1 MkArrow.single QuadrupleBarArrowShape [MangleName 'quadrupleArrowRight'] [MangleUnicode 0x2B46] arrowSB SymbolMid arrowRSB SymbolMid # Double Head - MkArrow.single Arrow.dblShape [MangleName 'dhArrowLeft'] [MangleUnicode 0x219E] arrowRSB SymbolMid arrowSB SymbolMid - MkArrow.single Arrow.dblShape [MangleName 'dhArrowRight'] [MangleUnicode 0x21A0] arrowSB SymbolMid arrowRSB SymbolMid - MkArrow.single Arrow.dblShape [MangleName 'dhArrowUp'] [MangleUnicode 0x219F] arrowMidX arrowBot arrowMidX arrowTop - MkArrow.single Arrow.dblShape [MangleName 'dhArrowDown'] [MangleUnicode 0x21A1] arrowMidX arrowTop arrowMidX arrowBot + [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowLeft'] [MangleUnicode 0x219E] arrowRSB SymbolMid arrowSB SymbolMid + [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowRight'] [MangleUnicode 0x21A0] arrowSB SymbolMid arrowRSB SymbolMid + [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowUp'] [MangleUnicode 0x219F] arrowMidX arrowBot arrowMidX arrowTop + [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowDown'] [MangleUnicode 0x21A1] arrowMidX arrowTop arrowMidX arrowBot MkArrow.single Arrow.dblTrigShape [MangleName 'dblTrigArrowLeft'] [MangleUnicode 0x2BEC] arrowRSB SymbolMid arrowSB SymbolMid MkArrow.single Arrow.dblTrigShape [MangleName 'dblTrigArrowUp'] [MangleUnicode 0x2BED] arrowMidX arrowBot arrowMidX arrowTop @@ -164,17 +175,24 @@ glyph-block Symbol-Arrow-Simple : for-width-kinds WideWidth1 MkArrow.double BarToBarShape Arrow.lhsShape [MangleName 'barArrowUpHL'] [MangleUnicode 0x2960] arrowMidX arrowBot arrowMidX arrowTop MkArrow.double BarToBarShape Arrow.rhsShape [MangleName 'barArrowDownHR'] [MangleUnicode 0x2961] arrowMidX arrowTop arrowMidX arrowBot + [MkArrow.doubleAnchorAt 0.2] BarToBarShape Arrow.dblShape [MangleName 'barDhArrowLeft'] [MangleUnicode 0x2905] arrowRSB SymbolMid arrowSB SymbolMid + [MkArrow.doubleAnchorAt 0.2] BarToBarShape Arrow.dblShape [MangleName 'barDhArrowRight'] [MangleUnicode 0x2B36] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow.double DoubleBarToBarShape DoubleBarArrowShape [MangleName 'barDblArrowLeft'] [MangleUnicode 0x2906] arrowRSB SymbolMid arrowSB SymbolMid MkArrow.double DoubleBarToBarShape DoubleBarArrowShape [MangleName 'barDblArrowRight'] [MangleUnicode 0x2907] arrowSB SymbolMid arrowRSB SymbolMid - MkArrow.double Arrow.tailShape Arrow.shape [MangleName 'htArrowLeft'] [MangleUnicode 0x21A2] arrowRSB SymbolMid arrowSB SymbolMid - MkArrow.double Arrow.tailShape Arrow.shape [MangleName 'htArrowRight'] [MangleUnicode 0x21A3] arrowSB SymbolMid arrowRSB SymbolMid + [MkArrow.doubleAnchorAt htAnchorP 0.5] Arrow.tailShape Arrow.shape [MangleName 'htArrowLeft'] [MangleUnicode 0x21A2] arrowRSB SymbolMid arrowSB SymbolMid + [MkArrow.doubleAnchorAt htAnchorP 0.5] Arrow.tailShape Arrow.shape [MangleName 'htArrowRight'] [MangleUnicode 0x21A3] arrowSB SymbolMid arrowRSB SymbolMid - # Arrow to Bar + [MkArrow.doubleAnchorAt dhtAnchorP 0.4] Arrow.tailShape Arrow.dblShape [MangleName 'dhtArrowLeft'] [MangleUnicode 0x2916] arrowRSB SymbolMid arrowSB SymbolMid + [MkArrow.doubleAnchorAt dhtAnchorP 0.4] Arrow.tailShape Arrow.dblShape [MangleName 'dhtArrowRight'] [MangleUnicode 0x2B3B] arrowSB SymbolMid arrowRSB SymbolMid + + # Arrow to Bar/Diamond define ArrowToBarShape : Arrow.toBarShapeT Arrow.shape define TrigArrowToBarShape : Arrow.toBarShapeT Arrow.trigShape define LHSArrowToBarShape : Arrow.toBarShapeT Arrow.lhsShape define RHSArrowToBarShape : Arrow.toBarShapeT Arrow.rhsShape + define ArrowToDiamondShape : Arrow.toDiamondShapeT Arrow.shape MkArrow.single ArrowToBarShape [MangleName 'arrowBarLeft'] [MangleUnicode 0x21E4] arrowRSB SymbolMid arrowSB SymbolMid MkArrow.single ArrowToBarShape [MangleName 'arrowBarRight'] [MangleUnicode 0x21E5] arrowSB SymbolMid arrowRSB SymbolMid @@ -195,8 +213,14 @@ glyph-block Symbol-Arrow-Simple : for-width-kinds WideWidth1 MkArrow.single LHSArrowToBarShape [MangleName 'arrowBarUpHL'] [MangleUnicode 0x2958] arrowMidX arrowBot arrowMidX arrowTop MkArrow.single RHSArrowToBarShape [MangleName 'arrowBarDownHR'] [MangleUnicode 0x2959] arrowMidX arrowTop arrowMidX arrowBot + MkArrow.single ArrowToDiamondShape [MangleName 'arrowDiamondLeft'] [MangleUnicode 0x291D] arrowRSB SymbolMid arrowSB SymbolMid + MkArrow.single ArrowToDiamondShape [MangleName 'arrowDiamondRight'] [MangleUnicode 0x291E] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow.double Arrow.shape ArrowToBarShape [MangleName 'arrowUpDownBar'] [MangleUnicode 0x21A8] arrowMidX arrowTop arrowMidX arrowBot + [MkArrow.doubleAnchorAt 0.1] BarToBarShape ArrowToDiamondShape [MangleName 'BarArrowDiamondLeft'] [MangleUnicode 0x291F] arrowRSB SymbolMid arrowSB SymbolMid + [MkArrow.doubleAnchorAt 0.1] BarToBarShape ArrowToDiamondShape [MangleName 'BarArrowDiamondRight'] [MangleUnicode 0x2920] arrowSB SymbolMid arrowRSB SymbolMid + # Arrow Heads create-glyph [MangleName 'arrowHeadUp'] [MangleUnicode 0x2303] : glyph-proc set-width MosaicWidth diff --git a/packages/font-glyphs/src/symbol/arrow/stacked.ptl b/packages/font-glyphs/src/symbol/arrow/stacked.ptl index f04004453..1416d44d2 100644 --- a/packages/font-glyphs/src/symbol/arrow/stacked.ptl +++ b/packages/font-glyphs/src/symbol/arrow/stacked.ptl @@ -20,9 +20,9 @@ glyph-block Symbol-Arrow-Stacked : for-width-kinds WideWidth1 .arrowMidX arrowMidX .arrowSB arrowSB .arrowRSB arrowRSB + .arrowSw arrowSw .arrowHeadSize arrowHeadSize - .compactHeadSize compactHeadSize .halfArrowSw halfArrowSw } dims diff --git a/packages/font-glyphs/src/symbol/arrow/thick.ptl b/packages/font-glyphs/src/symbol/arrow/thick.ptl index 97473e891..4435224e5 100644 --- a/packages/font-glyphs/src/symbol/arrow/thick.ptl +++ b/packages/font-glyphs/src/symbol/arrow/thick.ptl @@ -24,8 +24,6 @@ glyph-block Symbol-Arrow-Thick : for-width-kinds WideWidth1 .arrowDiagBot arrowDiagBot .arrowDiagTop arrowDiagTop - .arrowSw arrowSw - .arrowHeadSize arrowHeadSize .halfTerminal halfTerminal } dims diff --git a/packages/font-glyphs/src/symbol/arrow/wave.ptl b/packages/font-glyphs/src/symbol/arrow/wave.ptl index beb572fdf..a0de30ce8 100644 --- a/packages/font-glyphs/src/symbol/arrow/wave.ptl +++ b/packages/font-glyphs/src/symbol/arrow/wave.ptl @@ -22,7 +22,6 @@ glyph-block Symbol-Arrow-Wave : for-width-kinds WideWidth1 .arrowSw arrowSw .halfArrowSw halfArrowSw - .arrowHeadSize arrowHeadSize } dims define kLongArrowSB : [DivFrame MosaicWidthScalar 4].leftSB / [DivFrame MosaicWidthScalar 2].leftSB @@ -31,6 +30,7 @@ glyph-block Symbol-Arrow-Wave : for-width-kinds WideWidth1 define waveArrowAmplitude : (Width - SB) * DesignParameters.arrow_size * (0.7 + 0.4 * MosaicWidthScalar) do "Wave arrows" glyph-block-import Shared-Symbol-Shapes : CreateWaveShape + define WaveSw : AdviceStroke (5.5 - MosaicWidthScalar) define WaveShape : CreateWaveShape waveArrowAmplitude * 0.4 + WaveSw / 4 * MosaicWidthScalar @@ -38,6 +38,7 @@ glyph-block Symbol-Arrow-Wave : for-width-kinds WideWidth1 define rightTBias : (MosaicWidth / MosaicUnitWidth) - 1 define freeCoT : arrowSB / MosaicWidth define connectedCoT : (arrowSB / MosaicWidth) + (9 / 32) * MosaicWidthScalar + local mag : arrowRSB - arrowSB local p : (mag - o - halfArrowSw * 1.1) / mag create-glyph [MangleName 'waveArrowLeftRight'] [MangleUnicode 0x21AD] : glyph-proc diff --git a/packages/font-glyphs/src/symbol/arrow/weighted.ptl b/packages/font-glyphs/src/symbol/arrow/weighted.ptl index ad89c5882..e3d55fec9 100644 --- a/packages/font-glyphs/src/symbol/arrow/weighted.ptl +++ b/packages/font-glyphs/src/symbol/arrow/weighted.ptl @@ -26,7 +26,6 @@ glyph-block Symbol-Arrow-Weighted : for-width-kinds WideWidth1 .arrowDiagBot arrowDiagBot .arrowDiagTop arrowDiagTop - .arrowSw arrowSw .halfArrowSw halfArrowSw .arrowHeadSize arrowHeadSize } dims diff --git a/packages/font-glyphs/src/symbol/arrow/zigzag.ptl b/packages/font-glyphs/src/symbol/arrow/zigzag.ptl index 7f774a30c..19b868830 100644 --- a/packages/font-glyphs/src/symbol/arrow/zigzag.ptl +++ b/packages/font-glyphs/src/symbol/arrow/zigzag.ptl @@ -19,6 +19,7 @@ glyph-block Symbol-Arrow-Zigzag : for-width-kinds WideWidth1 .arrowMidX arrowMidX .arrowSB arrowSB .arrowRSB arrowRSB + .arrowSw arrowSw .arrowHeadSize arrowHeadSize } dims diff --git a/packages/font-glyphs/src/symbol/geometric/corner-shape.ptl b/packages/font-glyphs/src/symbol/geometric/corner-shape.ptl index 8febecabf..a7ad03727 100644 --- a/packages/font-glyphs/src/symbol/geometric/corner-shape.ptl +++ b/packages/font-glyphs/src/symbol/geometric/corner-shape.ptl @@ -10,7 +10,7 @@ glyph-block Symbol-Geometric-Corner-Shape: begin for-width-kinds WideWidth1 : do define ptMaxWidth : MosaicWidth - SB - define ptHeight0 : 1.5 * (Width - SB / 2) * ((MosaicWidth / MosaicUnitWidth) ** (1 / 4)) + define ptHeight0 : 1.5 * (Width - SB / 2) * (MosaicWidthScalar ** (1 / 4)) define ptHeight : (ptHeight0 ** 2) / [Math.hypot ptHeight0 : Math.min ptHeight0 ptMaxWidth] define ptWidth : Math.min ptMaxWidth ptHeight define ptMidX : MosaicWidth / 2 diff --git a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl index 0404940f1..cd3a5e040 100644 --- a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl @@ -15,7 +15,7 @@ glyph-block Symbol-Pictograph-Checking-Marks : begin define heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke define ptMaxWidth : MosaicWidth - SB - define ptHeight0 : 1.5 * (Width - SB / 2) * ((MosaicWidth / MosaicUnitWidth) ** (1 / 4)) + define ptHeight0 : 1.5 * (Width - SB / 2) * (MosaicWidthScalar ** (1 / 4)) define ptHeight : (ptHeight0 ** 2) / [Math.hypot ptHeight0 : Math.min ptHeight0 ptMaxWidth] define ptWidth : Math.min ptMaxWidth ptHeight define ptMidX : MosaicWidth / 2