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`). - TILDE WITH DOT ABOVE (`U+2E1E`) ... TILDE WITH DOT BELOW (`U+2E1F`).
- LATIN CAPITAL LETTER LAMBDA WITH STROKE (`U+A7DC`). - LATIN CAPITAL LETTER LAMBDA WITH STROKE (`U+A7DC`).
- LATIN SMALL LETTER SCRIPT R (`U+AB4B`) ... LATIN SMALL LETTER SCRIPT R WITH RING (`U+AB4C`). - 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)) curl r (XH * (+1.1))
do "Arrow overlays" do "Arrow overlays"
local fine : AdviceStroke 6 glyph-block-import Symbol-Arrow-Shared : ArrowDims
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)
create-glyph 'arrVStrokeOver' : glyph-proc for-width-kinds WideWidth1
set-width 0 define dims : ArrowDims MosaicWidth MosaicWidthScalar
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)
create-glyph 'dblArrVStrokeOver' : glyph-proc define {
set-width 0 .arrowWidth arrowWidth
local dx : Width * 0 .arrowHeadSize arrowHeadSize
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)
create-glyph 'arrDblVStrokeOver' : glyph-proc .overlaySw overlaySw
set-width 0 .strokeSpan strokeSpan
local dx : Width * 0 .strokeSpan2 strokeSpan2
local dy : Width * 0.3 .dblArrSpace dblArrSpace
local gap : Math.max fine (Width * 0.1) .dhtArrSpace dhtArrSpace
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) .dblArrSw dblArrSw
include : dispiro .dhtArrSw dhtArrSw
flat (Middle - dx - Width - gap) (XH / 2 - dy) [widths.center fine] .terminal terminal
curl (Middle + dx - Width - gap) (XH / 2 + dy) } dims
include : dispiro
flat (Middle - dx - Width + gap) (XH / 2 - dy) [widths.center fine]
curl (Middle + dx - Width + gap) (XH / 2 + dy)
create-glyph 'arrHStrokeOver' : glyph-proc local VRingRadius : arrowHeadSize * 0.7
set-width 0 local HRingRadius : Math.min VRingRadius : arrowWidth - 2 * arrowHeadSize - 0.3 * terminal
local dx : Width * 0.3 local VRingSw : AdviceStrokeInSpace VRingRadius HVContrast 2.25 1
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2) local HRingSw : AdviceStrokeInSpace HRingRadius HVContrast 2.25 1
include : dispiro
flat (Middle - Width - dx) (XH / 2) [widths.center fine]
curl (Middle - Width + dx) (XH / 2)
create-glyph 'arrDblHStrokeOver' : glyph-proc create-glyph [MangleName 'arrSlashOver'] : glyph-proc
set-width 0 set-width 0
local dx : Width * 0.3 local dx : arrowHeadSize * 0.4
local gap : Math.max fine (Width * 0.1) local dy : arrowHeadSize * 1.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)
define [ArrowRingOverlay kr c] : glyph-proc
set-width 0
local r : Width * kr
set-mark-anchor 'slash' 0 0 0 0 set-mark-anchor 'slash' 0 0 0 0
include : RingStrokeAt 0 0 r [AdviceStroke c] include : dispiro
flat (-dx) (-dy) [widths.center overlaySw]
curl (+dx) (+dy)
define [ArrowRingMaskOverlay kr c] : glyph-proc create-glyph [MangleName 'arrVStrokeOver'] : glyph-proc
set-width 0 set-width 0
local r : Width * kr local dy strokeSpan
set-mark-anchor 'slash' 0 0 0 0 set-mark-anchor 'slash' 0 0 0 0
include : RingAt 0 0 r [AdviceStroke c] include : dispiro
flat 0 (-dy) [widths.center overlaySw]
curl 0 (+dy)
create-glyph 'arrRingOver.NWID' : ArrowRingOverlay 0.25 5 create-glyph [MangleName 'dblArrVStrokeOver'] : glyph-proc
create-glyph 'arrRingOver.WWID' : ArrowRingOverlay 0.35 4.5 set-width 0
create-glyph 'arrRingOverLR.NWID' : ArrowRingOverlay 0.2 6 local dy strokeSpan2
create-glyph 'arrRingOverLR.WWID' : ArrowRingOverlay 0.35 4.5 set-mark-anchor 'slash' 0 0 0 0
create-glyph 'arrRingOverMask.NWID' : ArrowRingMaskOverlay 0.25 5 include : dispiro
create-glyph 'arrRingOverMask.WWID' : ArrowRingMaskOverlay 0.35 4.5 flat 0 (-dy) [widths.center overlaySw]
create-glyph 'arrRingOverLRMask.NWID' : ArrowRingMaskOverlay 0.2 6 curl 0 (+dy)
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" do "Half-XH marks for spacing modifiers"
create-glyph 'leftTackOver' : glyph-proc create-glyph 'leftTackOver' : glyph-proc

View file

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

View file

@ -18,6 +18,7 @@ glyph-block Symbol-Arrow-Circular : for-width-kinds WideWidth1
.arrowMidX arrowMidX .arrowMidX arrowMidX
.arrowSB arrowSB .arrowSB arrowSB
.arrowRSB arrowRSB .arrowRSB arrowRSB
.arrowSw arrowSw .arrowSw arrowSw
.arrowHeadSize arrowHeadSize .arrowHeadSize arrowHeadSize
.fine fine .fine fine

View file

@ -29,91 +29,142 @@ glyph-block Symbol-Arrow-Composite : for-width-kinds WideWidth1
.terminal terminal .terminal terminal
} dims } dims
define [ThinArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc local VRingRadius : arrowHeadSize * 0.7
local halfSw : fallback _halfSw halfArrowSw local HRingRadius : Math.min VRingRadius : arrowWidth - 2 * arrowHeadSize - 0.3 * terminal
include : Arrow.Head.shape x1 y1 x2 y2 size local VRingSw : AdviceStrokeInSpace VRingRadius HVContrast 2.25 1
include : Arrow.Bar.shape x1 y1 x2 y2 (0.5 * [mix fine terminal 0.5]) 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 # Thin arrows for composition
MkArrow.single ThinArrowShape [MangleName 'thinArrowLeft'] null arrowRSB SymbolMid arrowSB SymbolMid MkArrow.single [ThinBarShape HRingSw] [MangleName 'thinArrowBarH'] null arrowRSB SymbolMid arrowSB SymbolMid
# MkArrow.single ThinArrowShape [MangleName 'thinArrowUp'] null arrowMidX arrowBot arrowMidX arrowTop # MkArrow.single [ThinBarShape VRingSw] [MangleName 'thinArrowBarV'] 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
do "Arrow with Stroke" do "Arrow with Stroke"
create-glyph [MangleName 'uni219A'] [MangleUnicode 0x219A] : composite-proc create-glyph [MangleName 'uni219A'] [MangleUnicode 0x219A] : composite-proc
refer-glyph : MangleName 'arrowLeft' refer-glyph : MangleName 'arrowLeft'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni219B'] [MangleUnicode 0x219B] : composite-proc create-glyph [MangleName 'uni219B'] [MangleUnicode 0x219B] : composite-proc
refer-glyph : MangleName 'arrowRight' refer-glyph : MangleName 'arrowRight'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni21AE'] [MangleUnicode 0x21AE] : composite-proc create-glyph [MangleName 'uni21AE'] [MangleUnicode 0x21AE] : composite-proc
refer-glyph : MangleName 'arrowLeftRight' refer-glyph : MangleName 'arrowLeftRight'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni21F7'] [MangleUnicode 0x21F7] : composite-proc create-glyph [MangleName 'uni21F7'] [MangleUnicode 0x21F7] : composite-proc
refer-glyph : MangleName 'arrowLeft' refer-glyph : MangleName 'arrowLeft'
refer-glyph 'arrVStrokeOver' refer-glyph : MangleName 'arrVStrokeOver'
create-glyph [MangleName 'uni21F8'] [MangleUnicode 0x21F8] : composite-proc create-glyph [MangleName 'uni21F8'] [MangleUnicode 0x21F8] : composite-proc
refer-glyph : MangleName 'arrowRight' refer-glyph : MangleName 'arrowRight'
refer-glyph 'arrVStrokeOver' refer-glyph : MangleName 'arrVStrokeOver'
create-glyph [MangleName 'uni21F9'] [MangleUnicode 0x21F9] : composite-proc create-glyph [MangleName 'uni21F9'] [MangleUnicode 0x21F9] : composite-proc
refer-glyph : MangleName 'arrowLeftRight' refer-glyph : MangleName 'arrowLeftRight'
refer-glyph 'arrVStrokeOver' refer-glyph : MangleName 'arrVStrokeOver'
create-glyph [MangleName 'uni21FA'] [MangleUnicode 0x21FA] : composite-proc create-glyph [MangleName 'uni21FA'] [MangleUnicode 0x21FA] : composite-proc
refer-glyph : MangleName 'arrowLeft' refer-glyph : MangleName 'arrowLeft'
refer-glyph 'arrDblVStrokeOver' refer-glyph : MangleName 'arrDblVStrokeOver'
create-glyph [MangleName 'uni21FB'] [MangleUnicode 0x21FB] : composite-proc create-glyph [MangleName 'uni21FB'] [MangleUnicode 0x21FB] : composite-proc
refer-glyph : MangleName 'arrowRight' refer-glyph : MangleName 'arrowRight'
refer-glyph 'arrDblVStrokeOver' refer-glyph : MangleName 'arrDblVStrokeOver'
create-glyph [MangleName 'uni21FC'] [MangleUnicode 0x21FC] : composite-proc create-glyph [MangleName 'uni21FC'] [MangleUnicode 0x21FC] : composite-proc
refer-glyph : MangleName 'arrowLeftRight' refer-glyph : MangleName 'arrowLeftRight'
refer-glyph 'arrDblVStrokeOver' refer-glyph : MangleName 'arrDblVStrokeOver'
create-glyph [MangleName 'uni21CD'] [MangleUnicode 0x21CD] : composite-proc create-glyph [MangleName 'uni21CD'] [MangleUnicode 0x21CD] : composite-proc
refer-glyph : MangleName 'dblArrowLeft' refer-glyph : MangleName 'dblArrowLeft'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni21CE'] [MangleUnicode 0x21CE] : composite-proc create-glyph [MangleName 'uni21CE'] [MangleUnicode 0x21CE] : composite-proc
refer-glyph : MangleName 'dblArrowLeftRight' refer-glyph : MangleName 'dblArrowLeftRight'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni21CF'] [MangleUnicode 0x21CF] : composite-proc create-glyph [MangleName 'uni21CF'] [MangleUnicode 0x21CF] : composite-proc
refer-glyph : MangleName 'dblArrowRight' refer-glyph : MangleName 'dblArrowRight'
refer-glyph 'arrSlashOver' refer-glyph : MangleName 'arrSlashOver'
create-glyph [MangleName 'uni2908'] [MangleUnicode 0x2908] : composite-proc create-glyph [MangleName 'uni2908'] [MangleUnicode 0x2908] : composite-proc
refer-glyph : MangleName 'arrowDown' refer-glyph : MangleName 'arrowDown'
refer-glyph 'arrHStrokeOver' refer-glyph : MangleName 'arrHStrokeOver'
create-glyph [MangleName 'uni2909'] [MangleUnicode 0x2909] : composite-proc create-glyph [MangleName 'uni2909'] [MangleUnicode 0x2909] : composite-proc
refer-glyph : MangleName 'arrowUp' refer-glyph : MangleName 'arrowUp'
refer-glyph 'arrHStrokeOver' refer-glyph : MangleName 'arrHStrokeOver'
create-glyph [MangleName 'uni21DF'] [MangleUnicode 0x21DF] : composite-proc create-glyph [MangleName 'uni21DF'] [MangleUnicode 0x21DF] : composite-proc
refer-glyph : MangleName 'arrowDown' refer-glyph : MangleName 'arrowDown'
refer-glyph 'arrDblHStrokeOver' refer-glyph : MangleName 'arrDblHStrokeOver'
create-glyph [MangleName 'uni21DE'] [MangleUnicode 0x21DE] : composite-proc create-glyph [MangleName 'uni21DE'] [MangleUnicode 0x21DE] : composite-proc
refer-glyph : MangleName 'arrowUp' refer-glyph : MangleName 'arrowUp'
refer-glyph 'arrDblHStrokeOver' refer-glyph : MangleName 'arrDblHStrokeOver'
create-glyph [MangleName 'uni2902'] [MangleUnicode 0x2902] : composite-proc create-glyph [MangleName 'uni2902'] [MangleUnicode 0x2902] : composite-proc
refer-glyph : MangleName 'dblArrowLeft' refer-glyph : MangleName 'dblArrowLeft'
refer-glyph 'dblArrVStrokeOver' refer-glyph : MangleName 'dblArrVStrokeOver'
create-glyph [MangleName 'uni2903'] [MangleUnicode 0x2903] : composite-proc create-glyph [MangleName 'uni2903'] [MangleUnicode 0x2903] : composite-proc
refer-glyph : MangleName 'dblArrowRight' refer-glyph : MangleName 'dblArrowRight'
refer-glyph 'dblArrVStrokeOver' refer-glyph : MangleName 'dblArrVStrokeOver'
create-glyph [MangleName 'uni2904'] [MangleUnicode 0x2904] : composite-proc create-glyph [MangleName 'uni2904'] [MangleUnicode 0x2904] : composite-proc
refer-glyph : MangleName 'dblArrowLeftRight' refer-glyph : MangleName 'dblArrowLeftRight'
refer-glyph 'dblArrVStrokeOver' refer-glyph : MangleName 'dblArrVStrokeOver'
create-glyph [MangleName 'uni2B7A'] [MangleUnicode 0x2B7A] : composite-proc create-glyph [MangleName 'uni2B7A'] [MangleUnicode 0x2B7A] : composite-proc
refer-glyph : MangleName 'trigArrowLeft' refer-glyph : MangleName 'trigArrowLeft'
refer-glyph 'arrDblVStrokeOver' refer-glyph : MangleName 'arrDblVStrokeOver'
create-glyph [MangleName 'uni2B7B'] [MangleUnicode 0x2B7B] : composite-proc create-glyph [MangleName 'uni2B7B'] [MangleUnicode 0x2B7B] : composite-proc
refer-glyph : MangleName 'trigArrowUp' refer-glyph : MangleName 'trigArrowUp'
refer-glyph 'arrDblHStrokeOver' refer-glyph : MangleName 'arrDblHStrokeOver'
create-glyph [MangleName 'uni2B7C'] [MangleUnicode 0x2B7C] : composite-proc create-glyph [MangleName 'uni2B7C'] [MangleUnicode 0x2B7C] : composite-proc
refer-glyph : MangleName 'trigArrowRight' refer-glyph : MangleName 'trigArrowRight'
refer-glyph 'arrDblVStrokeOver' refer-glyph : MangleName 'arrDblVStrokeOver'
create-glyph [MangleName 'uni2B7D'] [MangleUnicode 0x2B7D] : composite-proc create-glyph [MangleName 'uni2B7D'] [MangleUnicode 0x2B7D] : composite-proc
refer-glyph : MangleName 'trigArrowDown' 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" do "Arrow with ring"
define [RingOverlayShape base baseThin overlay overlayMask] : composite-proc 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 refer-glyph : MangleName overlayMask
create-glyph [MangleName 'uni21F4'] [MangleUnicode 0x21F4] create-glyph [MangleName 'uni21F4'] [MangleUnicode 0x21F4]
RingOverlayShape 'arrowRight' 'thinArrowRight' 'arrRingOverLR' 'arrRingOverLRMask' RingOverlayShape 'arrowRight' 'thinArrowBarH' 'arrRingOverLR' 'arrRingOverLRMask'
create-glyph [MangleName 'uni2B30'] [MangleUnicode 0x2B30] create-glyph [MangleName 'uni2B30'] [MangleUnicode 0x2B30]
RingOverlayShape 'arrowLeft' 'thinArrowLeft' 'arrRingOverLR' 'arrRingOverLRMask' RingOverlayShape 'arrowLeft' 'thinArrowBarH' 'arrRingOverLR' 'arrRingOverLRMask'
create-glyph [MangleName 'uni2948'] [MangleUnicode 0x2948] 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" do "Branched Arrows"
local branchInset : 0.5 * MosaicWidth - 1.5 * arrowHeadSize 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 Symbol-Arrow-Dashed : for-width-kinds WideWidth1
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives 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 dims : ArrowDims MosaicWidth MosaicWidthScalar
define Arrow : ArrowT dims
define MkArrow : MkArrowT dims define MkArrow : MkArrowT dims
define { define {
@ -21,8 +22,9 @@ glyph-block Symbol-Arrow-Dashed : for-width-kinds WideWidth1
.arrowSB arrowSB .arrowSB arrowSB
.arrowRSB arrowRSB .arrowRSB arrowRSB
.arrowSw arrowSw
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
.fine fine
.doubleHeadGap doubleHeadGap
} dims } dims
define o : O * 2 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 define [DashedArrowBar x1 y1 x2 y2 halfSw gap segLen w] : begin
return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc
local p : (mag - o - halfSw * [fallback w 1.1]) / mag 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) widths.center (halfSw * 2)
flat [mix (mag * (1 - p)) mag t] 0 flat [mix x0 mag t] 0
curl [mix (mag * (1 - p)) mag : Math.min p (t + segLen / mag)] 0 curl [mix x0 mag : Math.min 1 (t + dt0)] 0
define [SegmentArrowBar x1 y1 x2 y2 halfSw gap segCnt w] : begin define [SegmentArrowBar x1 y1 x2 y2 halfSw gap segCnt w] : begin
return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc return : PointingTo x1 y1 x2 y2 : lambda [mag] : glyph-proc
local p : (mag - o - halfSw * [fallback w 1.1]) / mag local p : (mag - o - halfSw * [fallback w 1.1]) / mag
local deltaT : (1 + gap / mag) / segCnt
local segLen : deltaT * mag - gap local fullLen : mag * p
for [local t 0] (t < p) [set t : t + deltaT] : include : dispiro 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) widths.center (halfSw * 2)
flat [mix (mag * (1 - p)) mag t] 0 flat [mix x0 mag t] 0
curl [mix (mag * (1 - p)) mag : Math.min p (t + segLen / mag)] 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 dashGap : AdviceStroke 6
define dashLen : Math.max (Width / 5) (dashGap * 3) define dashLen : Math.max (Width / 5) (dashGap * 3)
# Arrow Shapes # Arrow Shapes
define ArrowHead : ArrowHeadT dims
define [DashedArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc define [DashedArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc
local halfSw : fallback _halfSw halfArrowSw local halfSw : fallback _halfSw halfArrowSw
local gap : AdviceStroke 6 include : Arrow.Head.shape x1 y1 x2 y2 size
include : ArrowHead.shape x1 y1 x2 y2 size
include : DashedArrowBar x1 y1 x2 y2 halfSw dashGap dashLen include : DashedArrowBar x1 y1 x2 y2 halfSw dashGap dashLen
define [DashedTrigArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc define [DashedTrigArrowShape x1 y1 x2 y2 size _halfSw] : glyph-proc
local halfSw : fallback _halfSw halfArrowSw 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 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 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 include : SegmentArrowBar x1 y1 x2 y2 halfSw dashGap n
define TwoSegArrowShape : nSegArrowShape 2 define TwoSegArrowShape : nSegArrowShapeT 2
define ThreeSegArrowShape : nSegArrowShape 3 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 # Glyphs
MkArrow.single DashedArrowShape [MangleName 'dashArrowLeft'] [MangleUnicode 0x21E0] arrowRSB SymbolMid arrowSB SymbolMid 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 TwoSegArrowShape [MangleName 'twoDashArrowRight'] [MangleUnicode 0x290D] arrowSB SymbolMid arrowRSB SymbolMid
MkArrow.single ThreeSegArrowShape [MangleName 'threeDashArrowLeft'] [MangleUnicode 0x290E] arrowRSB SymbolMid arrowSB 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 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 .arrowMidX arrowMidX
.arrowSB arrowSB .arrowSB arrowSB
.arrowRSB arrowRSB .arrowRSB arrowRSB
.arrowSw arrowSw .arrowSw arrowSw
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
.arrowHeadSize arrowHeadSize
} dims } dims
define bodyWidth : Math.min arrowWidth (arrowHeight * 0.6) 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 arrowMidX : MosaicWidth / 2
define arrowSB : (MosaicWidth - arrowWidth) / 2 define arrowSB : (MosaicWidth - arrowWidth) / 2
define arrowRSB : MosaicWidth - arrowSB define arrowRSB : MosaicWidth - arrowSB
define o : O * 2
# Diagonal arrow params # Diagonal arrow params
define diagPropX : 1 / (2 ** (1 / 4)) define diagPropX : 1 / (2 ** (1 / 4))
@ -40,13 +39,28 @@ glyph-block Symbol-Arrow-Shared : begin
# Special arrow params # Special arrow params
define compactHeadSize : mix arrowSw arrowHeadSize 0.75 define compactHeadSize : mix arrowSw arrowHeadSize 0.75
define doubleBarSpan : arrowHeadSize * 1.1 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 return [object
MosaicWidth MosaicWidthScalar MosaicWidth MosaicWidthScalar
arrowHeight arrowWidth arrowTop arrowBot arrowMidX arrowSB arrowRSB arrowHeight arrowWidth arrowTop arrowBot arrowMidX arrowSB arrowRSB
diagPropX diagPropY arrowDiagRSB arrowDiagSB arrowDiagBot arrowDiagTop diagPropX diagPropY arrowDiagRSB arrowDiagSB arrowDiagBot arrowDiagTop
arrowHeadSize arrowSw halfArrowSw fine terminal halfTerminal arrowHeadSize arrowSw halfArrowSw fine terminal halfTerminal
compactHeadSize doubleBarSpan] compactHeadSize doubleBarSpan doubleHeadGap
overlaySw strokeSpan strokeSpan2 dblArrSpace dhtArrSpace dblArrSw dhtArrSw]
define [ArrowBarT dims] : namespace define [ArrowBarT dims] : namespace
local { .arrowSw arrowSw } dims local { .arrowSw arrowSw } dims
@ -90,6 +104,7 @@ glyph-block Symbol-Arrow-Shared : begin
define [ArrowHeadT dims] : namespace define [ArrowHeadT dims] : namespace
local { local {
.arrowHeadSize arrowHeadSize .arrowHeadSize arrowHeadSize
.doubleHeadGap doubleHeadGap
.fine fine .fine fine
.terminal terminal .terminal terminal
} dims } dims
@ -164,6 +179,14 @@ glyph-block Symbol-Arrow-Shared : begin
flat 0 (-size) flat 0 (-size)
curl 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 export : define [rectShape x1 y1 x2 y2 width _length _width2] : begin
local length : fallback _length width local length : fallback _length width
return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : begin 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 define [ArrowT dims] : namespace
local { local {
.MosaicWidth MosaicWidth
.MosaicWidthScalar MosaicWidthScalar
.fine fine .fine fine
.arrowSw arrowSw .arrowSw arrowSw
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
.arrowHeadSize arrowHeadSize
.doubleHeadGap doubleHeadGap
} dims } dims
export : define Head : ArrowHeadT 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 export : define [dblShape x1 y1 x2 y2 size _halfSw] : glyph-proc
local halfSw : fallback _halfSw halfArrowSw local halfSw : fallback _halfSw halfArrowSw
local mag : Math.hypot (y2 - y1) (x2 - x1) 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 x3 : mix x1 x2 p
local y3 : mix y1 y2 p local y3 : mix y1 y2 p
@ -259,7 +286,7 @@ glyph-block Symbol-Arrow-Shared : begin
local halfSw : fallback _halfSw halfArrowSw local halfSw : fallback _halfSw halfArrowSw
local mag : Math.hypot (y2 - y1) (x2 - x1) local mag : Math.hypot (y2 - y1) (x2 - x1)
local p : 1 - size / mag local p : 1 - size / mag
local p2 : 1 - (2 * size) / mag local p2 : 1 - (size + doubleHeadGap) / mag
local x3 : mix x1 x2 p local x3 : mix x1 x2 p
local y3 : mix y1 y2 p local y3 : mix y1 y2 p
local x4 : mix x1 x2 p2 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 : 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 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 # MkArrow Functions
define [MkArrowT dims] : namespace define [MkArrowT dims] : namespace
local { .MosaicWidth MosaicWidth .MosaicWidthScalar MosaicWidthScalar .arrowHeadSize arrowHeadSize } dims 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 create-glyph id unicode : glyph-proc
set-width [fallback width MosaicWidth] 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] 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 create-glyph id unicode : glyph-proc
set-width MosaicWidth set-width MosaicWidth
set-base-anchor 'slash' [mix x1 x2 (1/2)] [mix y1 y2 (1/2)] local pMid : fallback _pMid pAnchor
local xm : mix x1 x2 0.5 local xm : mix x1 x2 pMid
local ym : mix y1 y2 0.5 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 : shape1 xm ym x1 y1 arrowHeadSize
include : shape2 xm ym x2 y2 arrowHeadSize include : shape2 xm ym x2 y2 arrowHeadSize
export : define double : doubleAnchorAt : 1 / 2
do "exports" do "exports"
define MosaicWidth Width define MosaicWidth Width

View file

@ -27,8 +27,19 @@ glyph-block Symbol-Arrow-Simple : for-width-kinds WideWidth1
.arrowDiagTop arrowDiagTop .arrowDiagTop arrowDiagTop
.doubleBarSpan doubleBarSpan .doubleBarSpan doubleBarSpan
.arrowHeadSize arrowHeadSize
.strokeSpan strokeSpan
.doubleHeadGap doubleHeadGap
.fine fine
} dims } 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 define kLongArrowSB : [DivFrame MosaicWidthScalar 4].leftSB / [DivFrame MosaicWidthScalar 2].leftSB
MkArrow.single Arrow.shape [MangleName 'arrowLeft'] [MangleUnicode 0x2190] arrowRSB SymbolMid arrowSB SymbolMid 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 MkArrow.single QuadrupleBarArrowShape [MangleName 'quadrupleArrowRight'] [MangleUnicode 0x2B46] arrowSB SymbolMid arrowRSB SymbolMid
# Double Head # Double Head
MkArrow.single Arrow.dblShape [MangleName 'dhArrowLeft'] [MangleUnicode 0x219E] arrowRSB SymbolMid arrowSB SymbolMid [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowLeft'] [MangleUnicode 0x219E] arrowRSB SymbolMid arrowSB SymbolMid
MkArrow.single Arrow.dblShape [MangleName 'dhArrowRight'] [MangleUnicode 0x21A0] arrowSB SymbolMid arrowRSB SymbolMid [MkArrow.singleAnchorAt dhAnchorP] Arrow.dblShape [MangleName 'dhArrowRight'] [MangleUnicode 0x21A0] arrowSB SymbolMid arrowRSB SymbolMid
MkArrow.single Arrow.dblShape [MangleName 'dhArrowUp'] [MangleUnicode 0x219F] arrowMidX arrowBot arrowMidX arrowTop [MkArrow.singleAnchorAt dhAnchorP] 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 'dhArrowDown'] [MangleUnicode 0x21A1] arrowMidX arrowTop arrowMidX arrowBot
MkArrow.single Arrow.dblTrigShape [MangleName 'dblTrigArrowLeft'] [MangleUnicode 0x2BEC] arrowRSB SymbolMid arrowSB SymbolMid MkArrow.single Arrow.dblTrigShape [MangleName 'dblTrigArrowLeft'] [MangleUnicode 0x2BEC] arrowRSB SymbolMid arrowSB SymbolMid
MkArrow.single Arrow.dblTrigShape [MangleName 'dblTrigArrowUp'] [MangleUnicode 0x2BED] arrowMidX arrowBot arrowMidX arrowTop 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.lhsShape [MangleName 'barArrowUpHL'] [MangleUnicode 0x2960] arrowMidX arrowBot arrowMidX arrowTop
MkArrow.double BarToBarShape Arrow.rhsShape [MangleName 'barArrowDownHR'] [MangleUnicode 0x2961] arrowMidX arrowTop arrowMidX arrowBot 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 'barDblArrowLeft'] [MangleUnicode 0x2906] arrowRSB SymbolMid arrowSB SymbolMid
MkArrow.double DoubleBarToBarShape DoubleBarArrowShape [MangleName 'barDblArrowRight'] [MangleUnicode 0x2907] arrowSB SymbolMid arrowRSB 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.doubleAnchorAt htAnchorP 0.5] 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 '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 ArrowToBarShape : Arrow.toBarShapeT Arrow.shape
define TrigArrowToBarShape : Arrow.toBarShapeT Arrow.trigShape define TrigArrowToBarShape : Arrow.toBarShapeT Arrow.trigShape
define LHSArrowToBarShape : Arrow.toBarShapeT Arrow.lhsShape define LHSArrowToBarShape : Arrow.toBarShapeT Arrow.lhsShape
define RHSArrowToBarShape : Arrow.toBarShapeT Arrow.rhsShape 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 'arrowBarLeft'] [MangleUnicode 0x21E4] arrowRSB SymbolMid arrowSB SymbolMid
MkArrow.single ArrowToBarShape [MangleName 'arrowBarRight'] [MangleUnicode 0x21E5] arrowSB SymbolMid arrowRSB 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 LHSArrowToBarShape [MangleName 'arrowBarUpHL'] [MangleUnicode 0x2958] arrowMidX arrowBot arrowMidX arrowTop
MkArrow.single RHSArrowToBarShape [MangleName 'arrowBarDownHR'] [MangleUnicode 0x2959] arrowMidX arrowTop arrowMidX arrowBot 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.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 # Arrow Heads
create-glyph [MangleName 'arrowHeadUp'] [MangleUnicode 0x2303] : glyph-proc create-glyph [MangleName 'arrowHeadUp'] [MangleUnicode 0x2303] : glyph-proc
set-width MosaicWidth set-width MosaicWidth

View file

@ -20,9 +20,9 @@ glyph-block Symbol-Arrow-Stacked : for-width-kinds WideWidth1
.arrowMidX arrowMidX .arrowMidX arrowMidX
.arrowSB arrowSB .arrowSB arrowSB
.arrowRSB arrowRSB .arrowRSB arrowRSB
.arrowSw arrowSw .arrowSw arrowSw
.arrowHeadSize arrowHeadSize .arrowHeadSize arrowHeadSize
.compactHeadSize compactHeadSize .compactHeadSize compactHeadSize
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
} dims } dims

View file

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

View file

@ -22,7 +22,6 @@ glyph-block Symbol-Arrow-Wave : for-width-kinds WideWidth1
.arrowSw arrowSw .arrowSw arrowSw
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
.arrowHeadSize arrowHeadSize
} dims } dims
define kLongArrowSB : [DivFrame MosaicWidthScalar 4].leftSB / [DivFrame MosaicWidthScalar 2].leftSB 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) define waveArrowAmplitude : (Width - SB) * DesignParameters.arrow_size * (0.7 + 0.4 * MosaicWidthScalar)
do "Wave arrows" do "Wave arrows"
glyph-block-import Shared-Symbol-Shapes : CreateWaveShape glyph-block-import Shared-Symbol-Shapes : CreateWaveShape
define WaveSw : AdviceStroke (5.5 - MosaicWidthScalar) define WaveSw : AdviceStroke (5.5 - MosaicWidthScalar)
define WaveShape : CreateWaveShape define WaveShape : CreateWaveShape
waveArrowAmplitude * 0.4 + WaveSw / 4 * MosaicWidthScalar 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 rightTBias : (MosaicWidth / MosaicUnitWidth) - 1
define freeCoT : arrowSB / MosaicWidth define freeCoT : arrowSB / MosaicWidth
define connectedCoT : (arrowSB / MosaicWidth) + (9 / 32) * MosaicWidthScalar define connectedCoT : (arrowSB / MosaicWidth) + (9 / 32) * MosaicWidthScalar
local mag : arrowRSB - arrowSB local mag : arrowRSB - arrowSB
local p : (mag - o - halfArrowSw * 1.1) / mag local p : (mag - o - halfArrowSw * 1.1) / mag
create-glyph [MangleName 'waveArrowLeftRight'] [MangleUnicode 0x21AD] : glyph-proc 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 .arrowDiagBot arrowDiagBot
.arrowDiagTop arrowDiagTop .arrowDiagTop arrowDiagTop
.arrowSw arrowSw
.halfArrowSw halfArrowSw .halfArrowSw halfArrowSw
.arrowHeadSize arrowHeadSize .arrowHeadSize arrowHeadSize
} dims } dims

View file

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

View file

@ -10,7 +10,7 @@ glyph-block Symbol-Geometric-Corner-Shape: begin
for-width-kinds WideWidth1 : do for-width-kinds WideWidth1 : do
define ptMaxWidth : MosaicWidth - SB 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 ptHeight : (ptHeight0 ** 2) / [Math.hypot ptHeight0 : Math.min ptHeight0 ptMaxWidth]
define ptWidth : Math.min ptMaxWidth ptHeight define ptWidth : Math.min ptMaxWidth ptHeight
define ptMidX : MosaicWidth / 2 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 heavySw : UnicodeWeightGrade 900 Geom.Scalar GeometryStroke
define ptMaxWidth : MosaicWidth - SB 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 ptHeight : (ptHeight0 ** 2) / [Math.hypot ptHeight0 : Math.min ptHeight0 ptMaxWidth]
define ptWidth : Math.min ptMaxWidth ptHeight define ptWidth : Math.min ptMaxWidth ptHeight
define ptMidX : MosaicWidth / 2 define ptMidX : MosaicWidth / 2