Arrow Cleanup + 28 arrows (#2787)

* "import" cleanups

* More 2-sided arrows

* overlay arrows

* dashed rewrite

* doc

---------

Co-authored-by: Belleve <belleve@typeof.net>
This commit is contained in:
Logo 2025-05-31 10:55:34 +08:00 committed by GitHub
parent b9dd29bc2b
commit 0056f78b11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 418 additions and 152 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -24,8 +24,6 @@ glyph-block Symbol-Arrow-Thick : for-width-kinds WideWidth1
.arrowDiagBot arrowDiagBot
.arrowDiagTop arrowDiagTop
.arrowSw arrowSw
.arrowHeadSize arrowHeadSize
.halfTerminal halfTerminal
} dims

View file

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

View file

@ -26,7 +26,6 @@ glyph-block Symbol-Arrow-Weighted : for-width-kinds WideWidth1
.arrowDiagBot arrowDiagBot
.arrowDiagTop arrowDiagTop
.arrowSw arrowSw
.halfArrowSw halfArrowSw
.arrowHeadSize arrowHeadSize
} dims

View file

@ -19,6 +19,7 @@ glyph-block Symbol-Arrow-Zigzag : for-width-kinds WideWidth1
.arrowMidX arrowMidX
.arrowSB arrowSB
.arrowRSB arrowRSB
.arrowSw arrowSw
.arrowHeadSize arrowHeadSize
} dims

View file

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

View file

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