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:
parent
b9dd29bc2b
commit
0056f78b11
16 changed files with 418 additions and 152 deletions
|
@ -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`).
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -24,8 +24,6 @@ glyph-block Symbol-Arrow-Thick : for-width-kinds WideWidth1
|
|||
.arrowDiagBot arrowDiagBot
|
||||
.arrowDiagTop arrowDiagTop
|
||||
|
||||
.arrowSw arrowSw
|
||||
.arrowHeadSize arrowHeadSize
|
||||
.halfTerminal halfTerminal
|
||||
} dims
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -26,7 +26,6 @@ glyph-block Symbol-Arrow-Weighted : for-width-kinds WideWidth1
|
|||
.arrowDiagBot arrowDiagBot
|
||||
.arrowDiagTop arrowDiagTop
|
||||
|
||||
.arrowSw arrowSw
|
||||
.halfArrowSw halfArrowSw
|
||||
.arrowHeadSize arrowHeadSize
|
||||
} dims
|
||||
|
|
|
@ -19,6 +19,7 @@ glyph-block Symbol-Arrow-Zigzag : for-width-kinds WideWidth1
|
|||
.arrowMidX arrowMidX
|
||||
.arrowSB arrowSB
|
||||
.arrowRSB arrowRSB
|
||||
|
||||
.arrowSw arrowSw
|
||||
.arrowHeadSize arrowHeadSize
|
||||
} dims
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue