Skip to content

Commit

Permalink
Collection of around 17 arrows (#2613)
Browse files Browse the repository at this point in the history
* Arrows

* doc
  • Loading branch information
Logo121 authored Dec 11, 2024
1 parent 4b0edd4 commit 8ad0efe
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 15 deletions.
3 changes: 3 additions & 0 deletions changes/32.3.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,6 @@
- Z NOTATION RANGE ANTIRESTRICTION (`U+2A65`).
- SMALLER THAN (`U+2AAA`) ... LARGER THAN OR EQUAL TO (`U+2AAD`).
- CLOSED SUBSET (`U+2ACF`) ... CLOSED SUPERSET OR EQUAL TO (`U+2AD2`).
- ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW (`U+2B8C`) ... ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW (`U+2B8F`).
- RETURN LEFT (`U+2B90`) ... FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE (`U+2B94`).
- DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS (`U+2BA0`) ... RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS (`U+2BA7`).
173 changes: 158 additions & 15 deletions packages/font-glyphs/src/symbol/arrow.ptl
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1
create-glyph id unicode : glyph-proc
set-width MosaicWidth
include : union
shape x2 y2 x3 y3 size
shape x2 y2 x3 y3 [fallback size arrowHeadSize]
bar x1 y1 x2 y2

do "Straight Arrow"
Expand Down Expand Up @@ -706,23 +706,166 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1
define bendT : SymbolMid + bendArrowHeadSize * 2
define bendB : SymbolMid - bendArrowHeadSize * 2

define [VBS x1 y1 x2 y2] : VBar.m x1 y1 (y2 - 0.5 * arrowSw) arrowSw
define [VBE x1 y1 x2 y2] : VBar.m x1 y1 (y2 + 0.5 * arrowSw) arrowSw
define [HBS x1 y1 x2 y2] : HBar.m x1 (x2 - 0.5 * arrowSw) y1 arrowSw
define [HBE x1 y1 x2 y2] : HBar.m x1 (x2 + 0.5 * arrowSw) y1 arrowSw
define [VBS x1 y1 x2 y2] : ArrowBar x1 y1 x2 (y2 - halfArrowSw) halfArrowSw 0 0
define [VBE x1 y1 x2 y2] : ArrowBar x1 y1 x2 (y2 + halfArrowSw) halfArrowSw 0 0
define [HBS x1 y1 x2 y2] : ArrowBar x1 y1 (x2 - halfArrowSw) y2 halfArrowSw 0 0
define [HBE x1 y1 x2 y2] : ArrowBar x1 y1 (x2 + halfArrowSw) y2 halfArrowSw 0 0

MkAngleArrow ArrowShape VBE [MangleName 'Arrow-up-angle-bend-left'] [MangleUnicode 0x21b0] bendR arrowBot bendR (arrowTop - bendArrowHeadSize) bendL (arrowTop - bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBE [MangleName 'Arrow-up-angle-bend-right'] [MangleUnicode 0x21b1] bendL arrowBot bendL (arrowTop - bendArrowHeadSize) bendR (arrowTop - bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'Arrow-down-angle-bend-left'] [MangleUnicode 0x21b2] bendR arrowTop bendR (arrowBot + bendArrowHeadSize) bendL (arrowBot + bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'Arrow-down-angle-bend-right'] [MangleUnicode 0x21b3] bendL arrowTop bendL (arrowBot + bendArrowHeadSize) bendR (arrowBot + bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBE [MangleName 'arrowUpTipBendLeft'] [MangleUnicode 0x21B0] bendR arrowBot bendR (arrowTop - bendArrowHeadSize) bendL (arrowTop - bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBE [MangleName 'arrowUpTipBendRight'] [MangleUnicode 0x21B1] bendL arrowBot bendL (arrowTop - bendArrowHeadSize) bendR (arrowTop - bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'arrowDownTipBendLeft'] [MangleUnicode 0x21B2] bendR arrowTop bendR (arrowBot + bendArrowHeadSize) bendL (arrowBot + bendArrowHeadSize) bendArrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'arrowDownTipBendRight'] [MangleUnicode 0x21B3] bendL arrowTop bendL (arrowBot + bendArrowHeadSize) bendR (arrowBot + bendArrowHeadSize) bendArrowHeadSize

MkAngleArrow ArrowShape HBE [MangleName 'Arrow-right-angle-bend-down'] [MangleUnicode 0x2B0E] arrowSB SymbolMid (arrowRSB - bendArrowHeadSize) SymbolMid (arrowRSB - bendArrowHeadSize) bendB bendArrowHeadSize
MkAngleArrow ArrowShape HBE [MangleName 'Arrow-right-angle-bend-up'] [MangleUnicode 0x2B0F] arrowSB SymbolMid (arrowRSB - bendArrowHeadSize) SymbolMid (arrowRSB - bendArrowHeadSize) bendT bendArrowHeadSize
MkAngleArrow ArrowShape HBS [MangleName 'Arrow-left-angle-bend-down'] [MangleUnicode 0x2B10] arrowRSB SymbolMid (arrowSB + bendArrowHeadSize) SymbolMid (arrowSB + bendArrowHeadSize) bendB bendArrowHeadSize
MkAngleArrow ArrowShape HBS [MangleName 'Arrow-left-angle-bend-up'] [MangleUnicode 0x2B11] arrowRSB SymbolMid (arrowSB + bendArrowHeadSize) SymbolMid (arrowSB + bendArrowHeadSize) bendT bendArrowHeadSize
MkAngleArrow ArrowShape HBE [MangleName 'arrowRightTipBendDown'] [MangleUnicode 0x2B0E] arrowSB SymbolMid (arrowRSB - bendArrowHeadSize) SymbolMid (arrowRSB - bendArrowHeadSize) bendB bendArrowHeadSize
MkAngleArrow ArrowShape HBE [MangleName 'arrowRightTipBendUp'] [MangleUnicode 0x2B0F] arrowSB SymbolMid (arrowRSB - bendArrowHeadSize) SymbolMid (arrowRSB - bendArrowHeadSize) bendT bendArrowHeadSize
MkAngleArrow ArrowShape HBS [MangleName 'arrowLeftTipBendDown'] [MangleUnicode 0x2B10] arrowRSB SymbolMid (arrowSB + bendArrowHeadSize) SymbolMid (arrowSB + bendArrowHeadSize) bendB bendArrowHeadSize
MkAngleArrow ArrowShape HBS [MangleName 'arrowLeftTipBendUp'] [MangleUnicode 0x2B11] arrowRSB SymbolMid (arrowSB + bendArrowHeadSize) SymbolMid (arrowSB + bendArrowHeadSize) bendT bendArrowHeadSize

MkAngleArrow ArrowShape HBE [MangleName 'arrowRightCornerDown'] [MangleUnicode 0x21B4] arrowSB arrowTop (arrowRSB - arrowHeadSize) arrowTop (arrowRSB - arrowHeadSize) arrowBot arrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'arrowDownCornerLeft'] [MangleUnicode 0x21B5] arrowRSB arrowTop arrowRSB (arrowBot + arrowHeadSize) arrowSB (arrowBot + arrowHeadSize) arrowHeadSize

# Bent TrigArrows
local hcDist : Math.max (halfArrowSw * 5) (arrowWidth / 2)
local vcDist : arrowHeadSize * 1.75

define yLower : SymbolMid - vcDist / 2
define yUpper : SymbolMid + vcDist / 2
define xLeft : arrowMidX - hcDist / 2
define xRight : arrowMidX + hcDist / 2
define arrowSB2 : arrowSB + halfArrowSw
define arrowRSB2 : arrowRSB - halfArrowSw

MkAngleArrow TrigArrowShape VBS [MangleName 'trigArrowDownLongBendLeft'] [MangleUnicode 0x2BA0] arrowRSB2 yUpper arrowRSB2 yLower arrowSB yLower
MkAngleArrow TrigArrowShape VBS [MangleName 'trigArrowDownLongBendRight'] [MangleUnicode 0x2BA1] arrowSB2 yUpper arrowSB2 yLower arrowRSB yLower
MkAngleArrow TrigArrowShape VBE [MangleName 'trigArrowUpLongBendLeft'] [MangleUnicode 0x2BA2] arrowRSB2 yLower arrowRSB2 yUpper arrowSB yUpper
MkAngleArrow TrigArrowShape VBE [MangleName 'trigArrowUpLongBendRight'] [MangleUnicode 0x2BA3] arrowSB2 yLower arrowSB2 yUpper arrowRSB yUpper
MkAngleArrow TrigArrowShape HBS [MangleName 'trigArrowLeftLongBendUp'] [MangleUnicode 0x2BA4] xRight arrowBot xLeft arrowBot xLeft arrowTop
MkAngleArrow TrigArrowShape HBE [MangleName 'trigArrowRightLongBendUp'] [MangleUnicode 0x2BA5] xLeft arrowBot xRight arrowBot xRight arrowTop
MkAngleArrow TrigArrowShape HBS [MangleName 'trigArrowLeftLongBendDown'] [MangleUnicode 0x2BA6] xRight arrowTop xLeft arrowTop xLeft arrowBot
MkAngleArrow TrigArrowShape HBE [MangleName 'trigArrowRightLongBendDown'] [MangleUnicode 0x2BA7] xLeft arrowTop xRight arrowTop xRight arrowBot

# Complex Bent Arrows
define pSlant 0.2
create-glyph [MangleName 'arrowReturnLeft'] [MangleUnicode 0x2B90] : glyph-proc
set-width MosaicWidth
local x1 : mix arrowRSB arrowSB pSlant
include : TrigArrowShape x1 yLower arrowSB yLower arrowHeadSize
include : intersection [MaskBelow : yUpper + halfArrowSw] : dispiro
widths.lhs arrowSw
disable-contrast
flat x1 (yLower - halfArrowSw)
curl arrowRSB (yUpper + halfArrowSw)
include : intersection
MaskLeftLine x1 (yLower - halfArrowSw) arrowRSB (yUpper + halfArrowSw)
ArrowBar arrowMidX yUpper arrowRSB yUpper halfArrowSw 0 0

create-glyph [MangleName 'arrowReturnRight'] [MangleUnicode 0x2B91] : glyph-proc
set-width MosaicWidth
local x1 : mix arrowSB arrowRSB pSlant
include : TrigArrowShape x1 yLower arrowRSB yLower arrowHeadSize
include : intersection [MaskBelow : yUpper + halfArrowSw] : dispiro
widths.rhs arrowSw
disable-contrast
flat x1 (yLower - halfArrowSw)
curl arrowSB (yUpper + halfArrowSw)
include : intersection
MaskRightLine x1 (yLower - halfArrowSw) arrowSB (yUpper + halfArrowSw)
ArrowBar arrowMidX yUpper arrowSB yUpper halfArrowSw 0 0

define pNewline 0.35
define pGap : StrokeWidthBlend 0.1 0.05
define arrowGapX : pGap * (arrowRSB - arrowSB)
define arrowGapX2 : 0.1 * (arrowRSB - arrowSB)
define arrowGapY : pGap * (arrowTop - arrowBot)
create-glyph [MangleName 'arrowNewlineLeft'] [MangleUnicode 0x2B92] : glyph-proc
set-width MosaicWidth
local x1 : mix arrowRSB arrowSB pNewline
local x2 : mix arrowSB arrowRSB pNewline
local x3 : arrowRSB - halfArrowSw
include : ArrowBar arrowSB yUpper (x1 - arrowGapX2) yUpper halfArrowSw 0 0
include : ArrowBar x1 yUpper arrowRSB yUpper halfArrowSw 0 0
include : ArrowBar x3 yUpper x3 yLower halfArrowSw 0 0
include : TrigArrowShape arrowRSB yLower x2 yLower arrowHeadSize
include : ArrowBar (x2 - arrowGapX) yLower arrowSB yLower halfArrowSw 0 0

create-glyph [MangleName 'arrowNewlineRight'] [MangleUnicode 0x2B93] : glyph-proc
set-width MosaicWidth
local x1 : mix arrowSB arrowRSB pNewline
local x2 : mix arrowRSB arrowSB pNewline
local x3 : arrowSB + halfArrowSw
include : ArrowBar arrowRSB yUpper (x1 + arrowGapX2) yUpper halfArrowSw 0 0
include : ArrowBar x1 yUpper arrowSB yUpper halfArrowSw 0 0
include : ArrowBar x3 yUpper x3 yLower halfArrowSw 0 0
include : TrigArrowShape arrowSB yLower x2 yLower arrowHeadSize
include : ArrowBar (x2 + arrowGapX) yLower arrowRSB yLower halfArrowSw 0 0

create-glyph [MangleName 'arrowCirclingCCW'] [MangleUnicode 0x2B94] : glyph-proc
set-width MosaicWidth
define headSize : arrowHeadSize * 0.5
define offset : 0.75 * headSize / 2
include : VBE xRight (SymbolMid + offset + arrowGapY) xRight yUpper
include : TrigArrowShape xRight yUpper (arrowMidX - offset) yUpper headSize
include : HBS (arrowMidX - offset - arrowGapX) yUpper xLeft yUpper
include : TrigArrowShape xLeft yUpper xLeft (SymbolMid - offset) headSize
include : VBS xLeft (SymbolMid - offset - arrowGapY) xLeft yLower
include : TrigArrowShape xLeft yLower (arrowMidX + offset) yLower headSize
include : HBE (arrowMidX + offset + arrowGapX) yLower xRight yLower
include : TrigArrowShape xRight yLower xRight (SymbolMid + offset) headSize

# U-Shaped Arrows
create-glyph [MangleName 'trigArrowUShapeLeft'] [MangleUnicode 0x2B8C] : glyph-proc
set-width MosaicWidth
include : dispiro
widths.center arrowSw
disable-contrast
flat arrowSB yLower [heading Rightward]
curl (arrowRSB2 - vcDist / 2) yLower
archv
g4 arrowRSB2 SymbolMid
arcvh
flat (arrowRSB2 - vcDist / 2) yUpper
curl arrowMidX yUpper [heading Leftward]
include : TrigArrowShape arrowMidX yUpper arrowSB yUpper arrowHeadSize
create-glyph [MangleName 'trigArrowUShapeUp'] [MangleUnicode 0x2B8D] : glyph-proc
set-width MosaicWidth
include : dispiro
widths.center arrowSw
disable-contrast
flat xLeft arrowTop [heading {.x 1 .y 0}]
curl xLeft (arrowBot + hcDist / 2)
arcvh
g4 arrowMidX arrowBot
archv
flat xRight (arrowBot + hcDist / 2)
curl xRight [Math.max SymbolMid : arrowBot + hcDist / 2 + TINY] [heading {.x (-1) .y 0}]
include : TrigArrowShape xRight SymbolMid xRight arrowTop arrowHeadSize
create-glyph [MangleName 'trigArrowUShapeRight'] [MangleUnicode 0x2B8E] : glyph-proc
set-width MosaicWidth
include : dispiro
widths.center arrowSw
disable-contrast
flat arrowRSB yUpper [heading Leftward]
curl (arrowSB2 + vcDist / 2) yUpper
archv
g4 arrowSB2 SymbolMid
arcvh
flat (arrowSB2 + vcDist / 2) yLower
curl arrowMidX yLower [heading Rightward]
include : TrigArrowShape arrowMidX yLower arrowRSB yLower arrowHeadSize
create-glyph [MangleName 'trigArrowUShapeDown'] [MangleUnicode 0x2B8F] : glyph-proc
set-width MosaicWidth
include : dispiro
widths.center arrowSw
disable-contrast
flat xRight arrowBot [heading {.x (-1) .y 0}]
curl xRight (arrowTop - hcDist / 2)
arcvh
g4 arrowMidX arrowTop
archv
flat xLeft (arrowTop - hcDist / 2)
curl xLeft [Math.min SymbolMid : arrowTop - hcDist / 2 - TINY] [heading {.x 1 .y 0}]
include : TrigArrowShape xLeft SymbolMid xLeft arrowBot arrowHeadSize

MkAngleArrow ArrowShape HBE [MangleName 'Arrow-right-angle-down'] [MangleUnicode 0x21b4] arrowSB arrowTop (arrowRSB - arrowHeadSize) arrowTop (arrowRSB - arrowHeadSize) arrowBot arrowHeadSize
MkAngleArrow ArrowShape VBS [MangleName 'Arrow-down-angle-left'] [MangleUnicode 0x21b5] arrowRSB arrowTop arrowRSB (arrowBot + arrowHeadSize) arrowSB (arrowBot + arrowHeadSize) arrowHeadSize

do "Half-head Arrows"
MkArrow [HalfArrowShape RHSHalfArrowHead] [MangleName 'arrowLeftHR'] [MangleUnicode 0x21BC] arrowRSB SymbolMid arrowSB SymbolMid
Expand Down

0 comments on commit 8ad0efe

Please sign in to comment.