Fix(?) Guillemet + Around 13 Keyboard/Technical Symbols (#2662)

* guillmet fix

* arrow head, electric arrow

* keyboard symbols

* more dimension symbols

* doc

* minor fix
This commit is contained in:
Logo 2025-01-28 05:59:11 +08:00 committed by GitHub
parent 3a2b7a3622
commit 8056f49d8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 227 additions and 30 deletions

View file

@ -11,3 +11,17 @@
- HORIZONTAL ZIGZAG LINE (`U+1CEB0`).
* Optimize metrics for bowl of Cyrillic Lower Ef (`ф`) and Greek Small Letter Phi Symbol (`ϕ`).
* Add italic form for Cyrillic Small Letter Ghe with Upturn (`ґ`).
* Add characters:
- ELECTRIC ARROW (`U+2301`).
- UP ARROWHEAD (`U+2303`).
- DOWN ARROWHEAD (`U+2304`).
- POSITION INDICATOR (`U+2316`).
- UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS (`U+2324`).
- OPTION KEY (`U+2325`).
- CYLINDRICITY (`U+232D`).
- ALL AROUND-PROFILE (`U+232E`).
- TOTAL RUNOUT (`U+2330`).
- DIMENSION ORIGIN (`U+2331`).
- ENTER SYMBOL (`U+2386`).
- ALTERNATIVE KEY SYMBOL (`U+2387`).
- SQUARE POSITION INDICATOR (`U+2BD0`).

View file

@ -297,7 +297,7 @@ glyph-block Letter-Latin-W : begin
include : VerticalHook.r df.rightSB (top - TailY - HalfStroke - O) TailX (-TailY) (sw -- df.mvs)
define [WCursiveImplImpl fHookTop df top bodyType slabType] : glyph-proc
define fine : AdviceStroke 3.25 df.advs
define fine : AdviceStroke 3.25 df.adws
define mfine : fine * CThin
define x0 : mix df.leftSB df.rightSB 0.1
define y0 : top - O

View file

@ -1588,6 +1588,14 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1
curl [mix x2 x3 pLastSeg] [mix y2 y3 pLastSeg]
include : ArrowHead x2 y2 x3 y3 arrowHeadSize
do "Arrow Heads"
create-glyph [MangleName 'arrowHeadUp'] [MangleUnicode 0x2303] : glyph-proc
set-width MosaicWidth
include : ArrowHead arrowMidX arrowBot arrowMidX arrowTop
create-glyph [MangleName 'arrowHeadDown'] [MangleUnicode 0x2304] : glyph-proc
set-width MosaicWidth
include : ArrowHead arrowMidX arrowTop arrowMidX arrowBot
do "Legacy computing arrows"
define bodyWidth : Math.min arrowWidth (arrowHeight * 0.6)
create-glyph [MangleName 'arrowUpThenNW'] [MangleUnicode 0x1F8B0] : glyph-proc
@ -1660,4 +1668,4 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1
include : FlipAround arrowMidX SymbolMid
if (MosaicWidthScalar == 1) : begin
glyph-block-export ArrowShape ArrowHead ArrowBar TrigArrowShape
glyph-block-export ArrowShape ArrowHead ArrowBar TrigArrowShape TriangleArrowHead

View file

@ -329,6 +329,90 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1
dispiro [widths.rhs GeometryStroke] [corner Geom.MidX Geom.MidY] [corner Geom.Left Geom.Top]
do "Miscellaneous"
glyph-block-import Symbol-Arrow : TrigArrowShape
define fineGeometryStroke : AdviceStroke2 4 4 Geom.Size
create-glyph [MangleName 'positionIndicator'] [MangleUnicode 0x2316] : glyph-proc
set-width Geom.Width
include : refer-glyph : MangleName 'whiteMediumCircle'
include : difference
union
HBar.m Geom.Left Geom.Right Geom.MidY GeometryStroke
VBar.m Geom.MidX Geom.Bot Geom.Top GeometryStroke
refer-glyph : MangleName 'blackMediumCircle'
include : intersection
union
HBar.m Geom.Left Geom.Right Geom.MidY fineGeometryStroke
VBar.m Geom.MidX Geom.Bot Geom.Top fineGeometryStroke
refer-glyph : MangleName 'blackMediumCircle'
create-glyph [MangleName 'positionIndicatorSquare'] [MangleUnicode 0x2BD0] : glyph-proc
set-width Geom.Width
include : refer-glyph : MangleName 'whiteMediumSquare'
include : difference
union
HBar.m Geom.Left Geom.Right Geom.MidY GeometryStroke
VBar.m Geom.MidX Geom.Bot Geom.Top GeometryStroke
refer-glyph : MangleName 'blackMediumSquare'
include : intersection
union
HBar.m Geom.Left Geom.Right Geom.MidY fineGeometryStroke
VBar.m Geom.MidX Geom.Bot Geom.Top fineGeometryStroke
refer-glyph : MangleName 'blackMediumSquare'
create-glyph [MangleName 'cylindricity'] [MangleUnicode 0x232D] : glyph-proc
set-width Geom.Width
local radius : Geom.Size * Size.Medium.size
local x1 Geom.Left
local y1 : Geom.Bot + 0.15 * GeometryStroke
local y2 Geom.Top
local dist : Math.hypot (Geom.MidX - x1) (Geom.MidY - y1)
local tan1 : radius / [Math.sqrt : dist ** 2 - radius ** 2]
local tan2 : (Geom.MidY - y1) / (Geom.MidX - x1)
local tan3 : (tan1 + tan2) / (1 - tan1 * tan2)
local x2 : x1 + (y2 - y1) / tan3
include : difference
union
dispiro
widths.rhs GeometryStroke
flat x1 y1
curl x2 y2
dispiro
widths.rhs GeometryStroke
flat [mix x1 Geom.MidX 2] [mix y1 Geom.MidY 2]
curl [mix x2 Geom.MidX 2] [mix y2 Geom.MidY 2]
refer-glyph : MangleName 'blackMediumCircle'
include : refer-glyph : MangleName 'whiteMediumCircle'
create-glyph [MangleName 'allRoundProfile'] [MangleUnicode 0x232E] : glyph-proc
set-width Geom.Width
include : refer-glyph : MangleName 'whiteMediumCircle'
local mx : Geom.MidX - Geom.Size * 0.5
local my : Geom.MidY - Geom.Size * 0.5
include : dispiro
disable-contrast
flat Geom.Right Geom.MidY [widths.center.heading GeometryStroke Leftward]
sharp-corner Geom.MidX Geom.MidY (contrast -- 1)
curl mx my [widths.center GeometryStroke]
include : TrigArrowShape mx my Geom.Left Geom.Bot (Geom.Size * 0.375 / Math.SQRT1_2) (GeometryStroke / 2)
create-glyph [MangleName 'dimensionOrigin'] [MangleUnicode 0x2331] : glyph-proc
set-width Geom.Width
include : refer-glyph : MangleName 'whiteMediumCircle'
local offset : Geom.Size * (1 - Size.Medium.size)
include : difference
union
TrigArrowShape Geom.MidX Geom.MidY (Geom.Right + offset) Geom.MidY (Geom.Size * 0.375 / Math.SQRT1_2) (GeometryStroke / 2)
VBar.m Geom.MidX Geom.Bot Geom.Top GeometryStroke
refer-glyph : MangleName 'blackMediumCircle'
include : intersection
union
HBar.m Geom.MidX Geom.Right Geom.MidY fineGeometryStroke
VBar.m Geom.MidX Geom.Bot Geom.Top fineGeometryStroke
refer-glyph : MangleName 'blackMediumCircle'
include : Translate (-offset) 0
create-glyph [MangleName 'uni2389'] [MangleUnicode 0x2389] : glyph-proc
define shiftUp : ApparentTranslate 0
Math.max
@ -354,6 +438,18 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1
refer-glyph : MangleName 'blackCircleO'
refer-glyph : MangleName 'whiteEqualTriangleDown'
create-glyph [MangleName 'enterSymbol'] [MangleUnicode 0x2386] : glyph-proc
set-width Geom.Width
include : difference
refer-glyph : MangleName 'whiteDiamond'
intersection [MaskLeftLine Geom.MidX (Geom.MidY - Geom.Size / 3) Geom.MidX (Geom.MidY + Geom.Size / 3)]
include : HBar.m Geom.Left Geom.MidX Geom.MidY GeometryStroke
local size : Geom.Size * 0.375 / Math.SQRT1_2
include : spiro-outline
corner Geom.MidX (Geom.MidY + size)
corner (Geom.MidX + size) Geom.MidY
corner Geom.MidX (Geom.MidY - size)
create-glyph [MangleName 'uni238B'] [MangleUnicode 0x238B] : glyph-proc
set-width Geom.Width
include : difference
@ -441,6 +537,7 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1
refer-glyph : MangleName 'blackLozenge'
HBar.m 0 MosaicWidth Geom.MidY GeometryStroke
# Mathematical Triangle Symbols
define triangleSideRadius : Geom.Size * 2.1 / [Math.sqrt 3]
derive-multi-part-glyphs [MangleName 'whiteTriangleUpDotAbove'] [MangleUnicode 0x29CA] { [MangleName 'whiteTriangleUp'] 'dotAbove' } : lambda [srcs gr] : glyph-proc
local { base mark } srcs
@ -458,6 +555,7 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1
include : HSerif.lb (Geom.MidX - triangleSideRadius) Geom.Bot jut GeometryStroke
include : HSerif.rb (Geom.MidX + triangleSideRadius) Geom.Bot jut GeometryStroke
# Genealogy Symbols
create-glyph [MangleName 'marriageSymbol'] [MangleUnicode 0x26AD] : glyph-proc
set-width Geom.Width
local radius : Geom.Size * Size.SlightlySmall.size

View file

@ -9,7 +9,8 @@ glyph-block Symbol-Geometric-Technical : for-width-kinds WideWidth1
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes
glyph-block-import Shared-Symbol-Shapes : TriangleShape
glyph-block-import Shared-Symbol-Shapes : TriangleShape Polyline
glyph-block-import Symbol-Arrow : ArrowShape ArrowHead TrigArrowShape
define Geom : GeometricDim MosaicUnitWidth MosaicWidth
define Size : GeometricSizes Geom
@ -29,6 +30,25 @@ glyph-block Symbol-Geometric-Technical : for-width-kinds WideWidth1
include : HBar.b (Geom.Left + xShrink) (Geom.Right - xShrink) (Geom.MidY + yOffset) GeometryStroke
include : HBar.t (Geom.Left + xShrink) (Geom.Right - xShrink) (Geom.MidY - yOffset) GeometryStroke
create-glyph [MangleName 'totalRunoff'] [MangleUnicode 0x2330] : glyph-proc
set-width Geom.Width
local headSize : Geom.Size * 0.375 / Math.SQRT1_2
local offset : Geom.Size * 0.4
local x0 Geom.Left
local x1 : Geom.Left + offset
local x2 : Geom.Right - offset - headSize * 0.35
local x3 : Geom.Right - headSize * 0.35
local vsw : HSwToV : 0.5 * GeometryStroke
include : dispiro
disable-contrast
flat ([mix x0 x1 0.75] + vsw) [mix Geom.Bot Geom.Top 0.75] [widths.center GeometryStroke]
sharp-corner (x0 + vsw) Geom.Bot (contrast -- 1)
corner Geom.MidX Geom.Bot [widths.lhs GeometryStroke]
sharp-corner (x2 - vsw) Geom.Bot (contrast -- 1)
curl ([mix x2 x3 0.75] - vsw) [mix Geom.Bot Geom.Top 0.75] [widths.center GeometryStroke]
include : TrigArrowShape ([mix x0 x1 0.5] + vsw) Geom.MidY (x1 + vsw) Geom.Top headSize (GeometryStroke / 2)
include : TrigArrowShape ([mix x2 x3 0.5] - vsw) Geom.MidY (x3 - vsw) Geom.Top headSize (GeometryStroke / 2)
create-glyph [MangleName 'conicalTaper'] [MangleUnicode 0x2332] : glyph-proc
set-width Geom.Width
include : TriangleShape Geom.Left (Geom.MidY - Geom.Size * 0.8) Geom.Left (Geom.MidY + Geom.Size * 0.8) Geom.Right Geom.MidY fineGeometryStroke
@ -38,6 +58,17 @@ glyph-block Symbol-Geometric-Technical : for-width-kinds WideWidth1
set-width Geom.Width
include : TriangleShape Geom.Left Geom.Bot Geom.Left Geom.MidY Geom.Right Geom.Bot fineGeometryStroke
create-glyph [MangleName 'electricArrow'] [MangleUnicode 0x2301] : glyph-proc
set-width Geom.Width
define amp : Geom.Size / 2
define amp2 : Geom.Size / 4
include : intersection [MaskRight Geom.Left] [MaskLeft Geom.Right] : dispiro
corner (Geom.MidX - Geom.Size * 2) (Geom.MidY + amp2 * 4) [widths.center GeometryStroke]
sharp-corner Geom.MidX (Geom.MidY - amp)
corner Geom.MidX Geom.MidY [widths.center.heading GeometryStroke Upward]
sharp-corner Geom.MidX (Geom.MidY + amp)
corner (Geom.MidX + Geom.Size * 2) (Geom.MidY - amp2 * 4) [widths.center GeometryStroke]
create-glyph [MangleName 'viewdataSquare'] [MangleUnicode 0x2317] : glyph-proc
set-width Geom.Width
define shrink : Geom.Size * 2 * 0.13
@ -83,3 +114,44 @@ glyph-block Symbol-Geometric-Technical : for-width-kinds WideWidth1
arcvh 4
flat @x2 @y3
curl Geom.MidX @y3
do "Keyboard Symbols"
define topLine : Geom.MidY + Geom.Size / 1.5
define botLine : Geom.MidY - Geom.Size / 1.5
define topLineC : topLine - GeometryStroke / 2
define botLineC : botLine + GeometryStroke / 2
create-glyph [MangleName 'arrowHeadUpBetweenBars'] [MangleUnicode 0x2324] : glyph-proc
set-width MosaicWidth
include : ArrowHead Geom.MidX Geom.Bot Geom.MidX topLine
include : HBar.t Geom.Left (Geom.MidX - Geom.Size / 3) topLine GeometryStroke
include : HBar.t (Geom.MidX + Geom.Size / 3) Geom.Right topLine GeometryStroke
create-glyph [MangleName 'optionKey'] [MangleUnicode 0x2325] : glyph-proc
set-width Geom.Width
include : dispiro
Polyline [widths.center GeometryStroke]
points -- {
{ Geom.Left topLineC }
{ (Geom.MidX - Geom.Size / 3) topLineC }
{ (Geom.MidX + Geom.Size / 3) botLineC }
{ Geom.Right botLineC }
}
startAf -- [widths.center.heading GeometryStroke Rightward]
endAf -- [widths.center.heading GeometryStroke Rightward]
include : HBar.t (Geom.MidX + Geom.Size / 3) Geom.Right topLine GeometryStroke
create-glyph [MangleName 'alternateKey'] [MangleUnicode 0x2387] : glyph-proc
set-width Geom.Width
include : dispiro
Polyline [widths.center GeometryStroke]
points -- {
{ Geom.Left botLineC }
{ (Geom.MidX - Geom.Size / 3) botLineC }
{ (Geom.MidX + Geom.Size / 3) topLineC }
{ (Geom.Right - Geom.Size / 6) topLineC }
}
startAf -- [widths.center.heading GeometryStroke Rightward]
endAf -- [widths.center.heading GeometryStroke Rightward]
include : ArrowShape (Geom.Right - Geom.Size / 6) topLineC (Geom.Right + GeometryStroke / 2) topLineC (GeometryStroke / 2 + Geom.Size / 3)
include : HBar.b (Geom.MidX + Geom.Size / 3) Geom.Right botLine GeometryStroke

View file

@ -9,45 +9,50 @@ glyph-block Symbol-Punctuation-Guillemet : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define guilTop : mix SymbolMid ParenTop 0.5
define guilBot : mix SymbolMid ParenBot 0.5
define extension 0.55
define guilLeft : mix Middle SB extension
define guilRight : mix Middle RightSB extension
create-glyph 'singleGuillemetLeft.straight' : glyph-proc
local top : mix SymbolMid ParenTop 0.5
local bot : mix SymbolMid ParenBot 0.5
local mid : mix bot top 0.5
local extension 0.55
local sw : AdviceStroke 3
local fine : AdviceStroke 4
include : intersection [MaskAbove mid] : dispiro
flat [mix Middle SB extension] mid [widths.rhs sw]
curl [mix Middle RightSB extension] top [widths.center fine]
include : intersection [MaskBelow mid] : dispiro
flat [mix Middle SB extension] mid [widths.lhs sw]
curl [mix Middle RightSB extension] bot [widths.center fine]
include : intersection
MaskAboveLine guilLeft SymbolMid guilRight [mix SymbolMid guilBot 0.5] 2
dispiro
flat guilLeft SymbolMid [widths.rhs sw]
curl guilRight guilTop [widths.center fine]
include : intersection
MaskBelowLine guilLeft SymbolMid guilRight [mix SymbolMid guilTop 0.5] 2
dispiro
flat guilLeft SymbolMid [widths.lhs sw]
curl guilRight guilBot [widths.center fine]
include : Translate (-(RightSB - SB) * 0.05) 0
create-glyph 'singleGuillemetLeft.curly' : glyph-proc
local top : mix SymbolMid ParenTop 0.5
local bot : mix SymbolMid ParenBot 0.5
local mid : mix bot top 0.5
local extension 0.55
local sw : AdviceStroke 3
local fine : AdviceStroke 4
include : intersection [MaskAbove mid] : dispiro
g4 [mix Middle SB extension] (mid + sw * 0.25) [widths.rhs sw]
quadControls 0.6 0.3
g4 [mix Middle RightSB extension] top [widths.center fine]
include : intersection [MaskBelow mid] : dispiro
g4 [mix Middle SB extension] (mid - sw * 0.25) [widths.lhs sw]
quadControls 0.6 0.3
g4 [mix Middle RightSB extension] bot [widths.center fine]
include : VBar.l [mix Middle SB extension] (mid - sw * 0.25) (mid + sw * 0.25) sw
include : intersection
MaskAboveLine guilLeft SymbolMid guilRight [mix SymbolMid guilBot 0.5] 2
dispiro
g4 guilLeft (SymbolMid + sw * 0.25) [widths.rhs sw]
quadControls 0.6 0.3
g4 guilRight guilTop [widths.center fine]
include : intersection
MaskBelowLine guilLeft SymbolMid guilRight [mix SymbolMid guilTop 0.5] 2
dispiro
g4 guilLeft (SymbolMid - sw * 0.25) [widths.lhs sw]
quadControls 0.6 0.3
g4 guilRight guilBot [widths.center fine]
include : VBar.l guilLeft (SymbolMid - sw * 0.25) (SymbolMid + sw * 0.25) sw
include : Translate (-(RightSB - SB) * 0.05) 0

View file

@ -38,17 +38,17 @@ glyph-block Shared-Symbol-Shapes : begin
return WaveShape
glyph-block-export Polyline ClosedPolyline
define [Polyline] : with-params [af points [contrast HVContrast] [upright 0]] : begin
define [Polyline] : with-params [af points [contrast HVContrast] [upright 0] [startAf af] [endAf af]] : begin
local {{x0 y0} {xp yp}} points
local knots : list
flat x0 y0 af
flat x0 y0 startAf
sharp-corner xp yp contrast upright
foreach {x y} [items-of : points.slice 2 (-1)] : begin
knots.push : virt [mix xp x 0.5] [mix yp y 0.5] af
knots.push : sharp-corner x y contrast upright
set {xp yp} {x y}
set {xp yp} points.[points.length - 1]
knots.push : curl xp yp af
knots.push : curl xp yp endAf
return knots