From 8ad0efe7df358ca79b5ec9b441a0aa41d45e22f1 Mon Sep 17 00:00:00 2001 From: Logo <21302803+Logo121@users.noreply.github.com> Date: Thu, 12 Dec 2024 03:36:22 +0800 Subject: [PATCH] Collection of around 17 arrows (#2613) * Arrows * doc --- changes/32.3.0.md | 3 + packages/font-glyphs/src/symbol/arrow.ptl | 173 ++++++++++++++++++++-- 2 files changed, 161 insertions(+), 15 deletions(-) diff --git a/changes/32.3.0.md b/changes/32.3.0.md index 6db09e4f96..0c4c8d317c 100644 --- a/changes/32.3.0.md +++ b/changes/32.3.0.md @@ -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`). diff --git a/packages/font-glyphs/src/symbol/arrow.ptl b/packages/font-glyphs/src/symbol/arrow.ptl index c35315ceff..0fd6cfa1d5 100644 --- a/packages/font-glyphs/src/symbol/arrow.ptl +++ b/packages/font-glyphs/src/symbol/arrow.ptl @@ -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" @@ -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