Files
Iosevka/glyphs/symbol-geometric.ptl
T

673 lines
29 KiB
Plaintext

###### GEOMETRIC SHAPES
$$include '../meta/macros.ptl'
import '../support/transform' as : Transform && [object [transformPoint tp] [unTransform utp] inverse]
import [mix linreg clamp fallback] from '../support/utils'
import [designParameters] from '../meta/aesthetics'
glyph-module
glyph-block Symbol-Geometric : begin
glyph-block-import CommonShapes
### Standard geometric shapes
for-width-kinds WIDE-WIDTH-1
define leftFW : 0 + SB * MosaicWidthScalar
define rightFW : MosaicWidth - SB * MosaicWidthScalar
define squareRadiusFW : (rightFW - leftFW) / 2
define topFW : symbolMid + squareRadiusFW
define bottomFW : symbolMid - squareRadiusFW
define scaffold : DivFrame MosaicWidthScalar
define [hollowScale w s] : (w - [fallback s GEOMETRYSTROKE]) / w
define [hollow newid unicode oldid zx zy cx cy] : create-glyph newid : glyph-construction
set-width MosaicWidth
depends-on glyphs.(oldid)
local zoom : hollowScale squareRadiusFW
include : difference
create-glyph : glyph-construction
include glyphs.(oldid)
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] [fallback zx zoom] [fallback zy zx zoom]
include : into-unicode unicode
define [hollowWithCenter newid unicode oldid zx zy cx cy] : create-glyph newid : glyph-construction
set-width MosaicWidth
depends-on glyphs.(oldid)
local zoom : hollowScale squareRadiusFW
local zx1 : mix [fallback zx zoom] 1 0.25
local zx2 : mix zx1 0 0.5
local zy1 : mix [fallback zy zx zoom] 1 0.25
local zy2 : mix zy1 0 0.5
include : union
difference
create-glyph : glyph-construction
include glyphs.(oldid)
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] zx1 zy1
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] zx2 zy2
include : into-unicode unicode
define [doubleHollow newid unicode oldid zx zy cx cy] : create-glyph newid : glyph-construction
set-width MosaicWidth
depends-on glyphs.(oldid)
local zoom : hollowScale squareRadiusFW
local zx1 : mix [fallback zx zoom] 1 0.25
local zx2 : [mix zx1 0 0.5] + (1 - zx1) / 2
local zx3 : zx2 - (1 - zx1)
local zy1 : mix [fallback zy zx zoom] 1 0.25
local zy2 : [mix zy1 0 0.5] + (1 - zy1) / 2
local zy3 : zy2 - (1 - zy1)
include : union
difference
create-glyph : glyph-construction
include glyphs.(oldid)
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] zx1 zy1
difference
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] zx2 zy2
create-glyph : glyph-construction
include glyphs.(oldid)
include : FlipAround [fallback cx MosaicMiddle] [fallback cy symbolMid] zx3 zy3
include : into-unicode unicode
define [resized newid unicode id x y s sy] : create-glyph newid : glyph-construction
set-width MosaicWidth
include glyphs.(id) AS_BASE
include : FlipAround x y s [fallback sy s]
include : into-unicode unicode
sketch # blacksquare
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid - squareRadiusFW)
line-to leftFW (symbolMid - squareRadiusFW)
save [MangleName 'blacksquare'] [MangleUnicode 0x25A0]
sketch # smallblacksquare
set-width MosaicWidth
local r : squareRadiusFW * designParameters.geometric_small_x
start-from (MosaicMiddle - r) (symbolMid + r)
line-to (MosaicMiddle + r) (symbolMid + r)
line-to (MosaicMiddle + r) (symbolMid - r)
line-to (MosaicMiddle - r) (symbolMid - r)
save [MangleName 'smallblacksquare'] [MangleUnicode 0x25AA]
sketch # blacktrianglerb
set-width MosaicWidth
start-from rightFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid - squareRadiusFW)
line-to leftFW (symbolMid - squareRadiusFW)
save [MangleName 'blacktrianglerb'] [MangleUnicode 0x25E2]
sketch # blacktrianglelb
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid - squareRadiusFW)
line-to leftFW (symbolMid - squareRadiusFW)
save [MangleName 'blacktrianglelb'] [MangleUnicode 0x25E3]
sketch # blacktrianglelt
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid + squareRadiusFW)
line-to leftFW (symbolMid - squareRadiusFW)
save [MangleName 'blacktrianglelt'] [MangleUnicode 0x25E4]
sketch # blacktrianglert
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid + squareRadiusFW)
line-to rightFW (symbolMid - squareRadiusFW)
save [MangleName 'blacktrianglert'] [MangleUnicode 0x25E5]
sketch # blackrectangle
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW / 1.5)
line-to rightFW (symbolMid + squareRadiusFW / 1.5)
line-to rightFW (symbolMid - squareRadiusFW / 1.5)
line-to leftFW (symbolMid - squareRadiusFW / 1.5)
save [MangleName 'blackrectangle'] [MangleUnicode 0x25AC]
sketch # blackparallelogram
set-width MosaicWidth
define skew : squareRadiusFW * 1 / 4
start-from (leftFW + skew) (symbolMid + squareRadiusFW / 1.5)
line-to (rightFW + skew) (symbolMid + squareRadiusFW / 1.5)
line-to (rightFW - skew) (symbolMid - squareRadiusFW / 1.5)
line-to (leftFW - skew) (symbolMid - squareRadiusFW / 1.5)
save [MangleName 'blackparallelogram'] [MangleUnicode 0x25B0]
sketch # whiteparallelogram
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'blackparallelogram']
glyph-construction
define skew : squareRadiusFW * 1 / 4
include : dispiro
widths.rhs GEOMETRYSTROKE
flat (leftFW + skew) (symbolMid + squareRadiusFW / 1.5)
curl (rightFW + skew) (symbolMid + squareRadiusFW / 1.5)
include : dispiro
widths.rhs GEOMETRYSTROKE
flat (rightFW + skew) (symbolMid + squareRadiusFW / 1.5)
curl (rightFW - skew) (symbolMid - squareRadiusFW / 1.5)
include : dispiro
widths.rhs GEOMETRYSTROKE
flat (rightFW - skew) (symbolMid - squareRadiusFW / 1.5)
curl (leftFW - skew) (symbolMid - squareRadiusFW / 1.5)
include : dispiro
widths.rhs GEOMETRYSTROKE
flat (leftFW - skew) (symbolMid - squareRadiusFW / 1.5)
curl (leftFW + skew) (symbolMid + squareRadiusFW / 1.5)
save [MangleName 'whiteparallelogram'] [MangleUnicode 0x25B1]
sketch # blacklongrectangle
set-width MosaicWidth
start-from leftFW (symbolMid + squareRadiusFW * 1.5)
line-to rightFW (symbolMid + squareRadiusFW * 1.5)
line-to rightFW (symbolMid - squareRadiusFW * 1.5)
line-to leftFW (symbolMid - squareRadiusFW * 1.5)
save [MangleName 'blacklongrectangle'] [MangleUnicode 0x25AE]
define triangleOvershoot : 2 / [Math.sqrt 3]
sketch # blacktriangleup
set-width MosaicWidth
start-from MosaicMiddle (symbolMid + squareRadiusFW)
line-to [mix MosaicMiddle rightFW triangleOvershoot] (symbolMid - squareRadiusFW)
line-to [mix MosaicMiddle leftFW triangleOvershoot] (symbolMid - squareRadiusFW)
save [MangleName 'blacktriangleup'] [MangleUnicode 0x25B2]
sketch # blacktriangledown
set-width MosaicWidth
start-from MosaicMiddle (symbolMid - squareRadiusFW)
line-to [mix MosaicMiddle leftFW triangleOvershoot] (symbolMid + squareRadiusFW)
line-to [mix MosaicMiddle rightFW triangleOvershoot] (symbolMid + squareRadiusFW)
save [MangleName 'blacktriangledown'] [MangleUnicode 0x25BC]
sketch # blacktriangleleft
set-width MosaicWidth
start-from leftFW symbolMid
line-to rightFW (symbolMid - squareRadiusFW * triangleOvershoot)
line-to rightFW (symbolMid + squareRadiusFW * triangleOvershoot)
save [MangleName 'blacktriangleleft'] [MangleUnicode 0x25C0]
sketch # blacktriangleright
set-width MosaicWidth
start-from rightFW symbolMid
line-to leftFW (symbolMid + squareRadiusFW * triangleOvershoot)
line-to leftFW (symbolMid - squareRadiusFW * triangleOvershoot)
save [MangleName 'blacktriangleright'] [MangleUnicode 0x25B6]
sketch # thinblacktriangleleft
set-width MosaicWidth
start-from leftFW symbolMid
line-to rightFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
line-to rightFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
save [MangleName 'thinblacktriangleleft'] [MangleUnicode 0x25C4]
sketch # thinwhitetriangleleft
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'thinblacktriangleleft']
union
dispiro
widths.lhs GEOMETRYSTROKE
corner leftFW symbolMid
corner rightFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
dispiro
widths.lhs GEOMETRYSTROKE
corner rightFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
corner rightFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
dispiro
widths.lhs GEOMETRYSTROKE
corner rightFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
corner leftFW symbolMid
save [MangleName 'thinwhitetriangleleft'] [MangleUnicode 0x25C5]
sketch # thinblacktriangleright
set-width MosaicWidth
start-from rightFW symbolMid
line-to leftFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
line-to leftFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
save [MangleName 'thinblacktriangleright'] [MangleUnicode 0x25BA]
sketch # thinwhitetriangleright
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'thinblacktriangleright']
union
dispiro
widths.rhs GEOMETRYSTROKE
corner rightFW symbolMid
corner leftFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
dispiro
widths.rhs GEOMETRYSTROKE
corner leftFW (symbolMid - squareRadiusFW * triangleOvershoot * 0.618)
corner leftFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
dispiro
widths.rhs GEOMETRYSTROKE
corner leftFW (symbolMid + squareRadiusFW * triangleOvershoot * 0.618)
corner rightFW symbolMid
save [MangleName 'thinwhitetriangleright'] [MangleUnicode 0x25BB]
sketch # blackdiamond
set-width MosaicWidth
start-from MosaicMiddle (symbolMid + squareRadiusFW)
line-to rightFW symbolMid
line-to MosaicMiddle (symbolMid - squareRadiusFW)
line-to leftFW symbolMid
save [MangleName 'blackdiamond'] [MangleUnicode 0x25C6]
sketch # blackLonzenge
set-width MosaicWidth
start-from MosaicMiddle (symbolMid + squareRadiusFW)
line-to [mix MosaicMiddle rightFW (2 / 3)] symbolMid
line-to MosaicMiddle (symbolMid - squareRadiusFW)
line-to [mix MosaicMiddle leftFW (2 / 3)] symbolMid
save [MangleName 'blackLonzenge'] [MangleUnicode 0x29EB]
sketch # whiteLonzenge
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'blackLonzenge']
create-glyph : glyph-construction
include : dispiro
widths.rhs GEOMETRYSTROKE
flat MosaicMiddle (symbolMid + squareRadiusFW)
curl [mix MosaicMiddle rightFW (2 / 3)] symbolMid
include : dispiro
widths.rhs GEOMETRYSTROKE
flat [mix MosaicMiddle rightFW (2 / 3)] symbolMid
curl MosaicMiddle (symbolMid - squareRadiusFW)
include : dispiro
widths.rhs GEOMETRYSTROKE
flat MosaicMiddle (symbolMid - squareRadiusFW)
curl [mix MosaicMiddle leftFW (2 / 3)] symbolMid
include : dispiro
widths.rhs GEOMETRYSTROKE
flat [mix MosaicMiddle leftFW (2 / 3)] symbolMid
curl MosaicMiddle (symbolMid + squareRadiusFW)
save [MangleName 'whiteLonzenge'] [MangleUnicode 0x25CA]
sketch # blackcircle
set-width MosaicWidth
include scaffold.markSet.plus
include : spiro-outline
g4 MosaicMiddle (symbolMid + squareRadiusFW + O)
g4 (leftFW - O) symbolMid
g4 MosaicMiddle (symbolMid - squareRadiusFW - O)
g4 (rightFW + O) symbolMid
close
reverse-last
save [MangleName 'blackcircleO']
sketch # blackcircle
set-width MosaicWidth
include scaffold.markSet.plus
include : spiro-outline
g4 MosaicMiddle (symbolMid + squareRadiusFW)
g4 leftFW symbolMid
g4 MosaicMiddle (symbolMid - squareRadiusFW)
g4 rightFW symbolMid
close
reverse-last
save [MangleName 'blackcircle'] [MangleUnicode 0x25CF]
sketch # leftblackcircle
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'blackcircle']
spiro-outline
corner (0 - MosaicWidth) (symbolMid - squareRadiusFW * 2)
corner (MosaicWidth / 2) (symbolMid - squareRadiusFW * 2)
corner (MosaicWidth / 2) (symbolMid + squareRadiusFW * 2)
corner (0 - MosaicWidth) (symbolMid + squareRadiusFW * 2)
save [MangleName 'leftblackcircle'] [MangleUnicode 0x25D6]
sketch # rightblackcircle
set-width MosaicWidth
include : intersection
begin glyphs.[MangleName 'blackcircle']
spiro-outline
corner (MosaicWidth * 2) (symbolMid - squareRadiusFW * 2)
corner (MosaicWidth / 2) (symbolMid - squareRadiusFW * 2)
corner (MosaicWidth / 2) (symbolMid + squareRadiusFW * 2)
corner (MosaicWidth * 2) (symbolMid + squareRadiusFW * 2)
save [MangleName 'rightblackcircle'] [MangleUnicode 0x25D7]
sketch # smallblackcircle
set-width MosaicWidth
include : spiro-outline
g4 MosaicMiddle (symbolMid + squareRadiusFW * designParameters.geometric_small_x)
g4 (MosaicMiddle - squareRadiusFW * designParameters.geometric_small_x) symbolMid
g4 MosaicMiddle (symbolMid - squareRadiusFW * designParameters.geometric_small_x)
g4 (MosaicMiddle + squareRadiusFW * designParameters.geometric_small_x) symbolMid
close
reverse-last
save [MangleName 'smallblackcircle']
sketch # bigblackcircle
set-width MosaicWidth
define scale : designParameters.GeometricLargeX MosaicWidth MosaicUnitWidth
include : spiro-outline
g4 MosaicMiddle (symbolMid + squareRadiusFW * scale)
g4 (MosaicMiddle - squareRadiusFW * scale) symbolMid
g4 MosaicMiddle (symbolMid - squareRadiusFW * scale)
g4 (MosaicMiddle + squareRadiusFW * scale) symbolMid
close
reverse-last
save [MangleName 'bigblackcircle'] [MangleUnicode 0x2B24]
let
: cfg : list
* {.sides 5 .skip 2 .name 'blackstar' .unicode 0x2605 .overflow 1.1 .phase 0}
* {.sides 5 .skip 1 .name 'blackpentagon' .unicode 0x2B1F .overflow 1.05 .phase 0}
* {.sides 6 .skip 1 .name 'blackhexagon' .unicode 0x2B22 .overflow 1.05 .phase 0}
* {.sides 5 .skip 1 .name 'rhblackpentagon' .unicode 0x2B53 .overflow 1.05 .phase (-Math.PI / 2)}
* {.sides 6 .skip 1 .name 'hblackhexagon' .unicode 0x2B23 .overflow 1.05 .phase (Math.PI / 2)}
: foreach [[object sides skip name unicode overflow phase] : items-of cfg] : sketch
set-width MosaicWidth
foreach [j : range 0 sides] : begin
local angle : 2 * Math.PI * j * skip / sides + phase
currentGlyph.([if j 'line-to' 'start-from'])
mix leftFW rightFW (0.5 - 0.5 * overflow * [Math.sin angle])
symbolMid + squareRadiusFW * [Math.cos angle] * overflow
save [MangleName name] [MangleUnicode unicode]
let
: cfg : list
* {.sides 6 .skip 1 .name 'SixPointedBlackStar' .unicode 0x2736 .overflow 1.05 .phase 0}
: foreach [[object sides skip name unicode overflow phase] : items-of cfg] : sketch
set-width MosaicWidth
foreach [j : range 0 (2 * sides)] : begin
local angle : Math.PI * j * skip / sides + phase
local mag : [if (j % 2) 0.5 1.0] * overflow
currentGlyph.([if j 'line-to' 'start-from'])
mix leftFW rightFW (0.5 - 0.5 * mag * [Math.sin angle])
symbolMid + squareRadiusFW * mag * [Math.cos angle]
save [MangleName name] [MangleUnicode unicode]
sketch # dottedcircle
set-width MosaicWidth
local n : 12 * [Math.ceil MosaicWidthScalar]
local fine : adviceBlackness 10
foreach j [range 0 n] : begin
local angle : Math.PI * 2 * j / n
local cx : MosaicMiddle + (rightFW - MosaicMiddle) * [Math.cos angle]
local cy : (XH / 2) + (rightFW - MosaicMiddle) * [Math.sin angle]
include : spiro-outline
g4 cx (cy + fine)
g4 (cx + fine) cy
g4 cx (cy - fine)
g4 (cx - fine) cy
close
include scaffold.markSet.e
apply-transform [Upright] true
apply-transform [Translate 0 (symbolMid - (XH / 2))] true
apply-transform [Italify] true
save [MangleName 'dottedcircle'] [MangleUnicode 0x25CC]
hollow [MangleName 'whitesquare'] [MangleUnicode 0x25A1] [MangleName 'blacksquare']
hollowWithCenter [MangleName 'whitesquareWithCenter'] [MangleUnicode 0x25A3] [MangleName 'blacksquare']
hollow [MangleName 'whitehexagon'] [MangleUnicode 0x2B21] [MangleName 'blackhexagon']
hollow [MangleName 'whitepentagon'] [MangleUnicode 0x2B20] [MangleName 'blackpentagon']
hollow [MangleName 'rhwhitepentagon'] [MangleUnicode 0x2B54] [MangleName 'rhblackpentagon']
hollow [MangleName 'whiterectangle'] [MangleUnicode 0x25AD] [MangleName 'blackrectangle'] [hollowScale squareRadiusFW] [hollowScale (squareRadiusFW / 1.5)]
hollow [MangleName 'whitelongrectangle'] [MangleUnicode 0x25AF] [MangleName 'blacklongrectangle'] [hollowScale squareRadiusFW] [hollowScale (squareRadiusFW * 1.5)]
hollow [MangleName 'whitecircle'] [MangleUnicode 0x25CB] [MangleName 'blackcircle']
hollowWithCenter [MangleName 'whitecircleWithCenter'] [MangleUnicode 0x25C9] [MangleName 'blackcircle']
doubleHollow [MangleName 'doubleWhitecircle'] [MangleUnicode 0x25CE] [MangleName 'blackcircle']
hollow [MangleName 'bigwhitecircle'] [MangleUnicode 0x25EF] [MangleName 'bigblackcircle'] [hollowScale : squareRadiusFW * [designParameters.GeometricLargeX MosaicWidth MosaicUnitWidth]]
hollow [MangleName 'smallwhitecircle'] null [MangleName 'smallblackcircle'] [hollowScale : squareRadiusFW * designParameters.geometric_small_x]
hollow [MangleName 'smallwhitesquare'] [MangleUnicode 0x25AB] [MangleName 'smallblacksquare'] [hollowScale : squareRadiusFW * designParameters.geometric_small_x]
do
define s : hollowScale squareRadiusFW (GEOMETRYSTROKE * [Math.sqrt 2])
hollow [MangleName 'whitediamond'] [MangleUnicode 0x25C7] [MangleName 'blackdiamond'] s
hollowWithCenter [MangleName 'whitediamondWithCenter'] [MangleUnicode 0x25C8] [MangleName 'blackdiamond'] s
resized [MangleName 'smallblacktriangleup'] [MangleUnicode 0x25B4] [MangleName 'blacktriangleup'] MosaicMiddle symbolMid 0.75
resized [MangleName 'smallblacktriangleright'] [MangleUnicode 0x25B8] [MangleName 'blacktriangleright'] MosaicMiddle symbolMid 0.75
resized [MangleName 'smallblacktriangledown'] [MangleUnicode 0x25BE] [MangleName 'blacktriangledown'] MosaicMiddle symbolMid 0.75
resized [MangleName 'smallblacktriangleleft'] [MangleUnicode 0x25C2] [MangleName 'blacktriangleleft'] MosaicMiddle symbolMid 0.75
define sts 0.75
define sl : hollowScale (squareRadiusFW * 2 / [Math.sqrt 3]) (GEOMETRYSTROKE * [Math.sqrt 3])
define spt : hollowScale (squareRadiusFW * 2 / [Math.sqrt 5]) ([adviceBlackness 5 scaffold.div] * [Math.sqrt 5])
define slt : hollowScale (squareRadiusFW * 2 / [Math.sqrt 3]) (GEOMETRYSTROKE * [Math.sqrt 3])
define ss : hollowScale (squareRadiusFW * sts * 2 / [Math.sqrt 3]) (GEOMETRYSTROKE * [Math.sqrt 3])
hollow [MangleName 'whitetriangleup'] [MangleUnicode 0x25B3] [MangleName 'blacktriangleup'] sl nothing MosaicMiddle (symbolMid - squareRadiusFW / 3)
hollow [MangleName 'whitetriangledown'] [MangleUnicode 0x25BD] [MangleName 'blacktriangledown'] sl nothing MosaicMiddle (symbolMid + squareRadiusFW / 3)
hollow [MangleName 'whitetriangleleft'] [MangleUnicode 0x25C1] [MangleName 'blacktriangleleft'] sl nothing [mix MosaicMiddle rightFW (1 / 3)] symbolMid
hollow [MangleName 'whitetriangleright'] [MangleUnicode 0x25B7] [MangleName 'blacktriangleright'] sl nothing [mix MosaicMiddle leftFW (1 / 3)] symbolMid
hollow [MangleName 'smallwhitetriangleup'] [MangleUnicode 0x25B5] [MangleName 'smallblacktriangleup'] ss nothing MosaicMiddle (symbolMid - squareRadiusFW / 3 * sts)
hollow [MangleName 'smallwhitetriangledown'] [MangleUnicode 0x25BF] [MangleName 'smallblacktriangledown'] ss nothing MosaicMiddle (symbolMid + squareRadiusFW / 3 * sts)
hollow [MangleName 'smallwhitetriangleleft'] [MangleUnicode 0x25C3] [MangleName 'smallblacktriangleleft'] ss nothing [mix MosaicMiddle rightFW (sts / 3)] symbolMid
hollow [MangleName 'smallwhitetriangleright'] [MangleUnicode 0x25B9] [MangleName 'smallblacktriangleright'] ss nothing [mix MosaicMiddle leftFW (sts / 3)] symbolMid
hollow [MangleName 'whitestar'] [MangleUnicode 0x2606] [MangleName 'blackstar'] spt
# Mark sampler
sketch
include MarkSet.e
include : spiro-outline
g4 MosaicMiddle XH
g4 (MosaicMiddle - XH / 2) (XH / 2)
g4 MosaicMiddle 0
close
include : spiro-outline
g4 MosaicMiddle (XH * 0.9)
g4 (MosaicMiddle + XH * 0.4) (XH * 0.5)
g4 MosaicMiddle (XH * 0.1)
close
save [MangleName 'marksampler'] [MangleUnicode 0xE09E]
# Rounded
sketch # roundwhitesquare, U+25A2
set-width MosaicWidth
define cr : squareRadiusFW - GEOMETRYSTROKE * 2
include : dispiro
widths.lhs GEOMETRYSTROKE
flat (MosaicMiddle + 1) (symbolMid + squareRadiusFW) [heading LEFTWARD]
curl (MosaicMiddle - cr) (symbolMid + squareRadiusFW) [heading LEFTWARD]
archv
flat (MosaicMiddle - squareRadiusFW) (symbolMid + cr) [heading DOWNWARD]
curl (MosaicMiddle - squareRadiusFW) (symbolMid - cr) [heading DOWNWARD]
arcvh
flat (MosaicMiddle - cr) (symbolMid - squareRadiusFW) [heading RIGHTWARD]
curl (MosaicMiddle + cr) (symbolMid - squareRadiusFW) [heading RIGHTWARD]
archv
flat (MosaicMiddle + squareRadiusFW) (symbolMid - cr) [heading UPWARD]
curl (MosaicMiddle + squareRadiusFW) (symbolMid + cr) [heading UPWARD]
arcvh
flat (MosaicMiddle + cr) (symbolMid + squareRadiusFW) [heading LEFTWARD]
curl (MosaicMiddle - 1) (symbolMid + squareRadiusFW) [heading LEFTWARD]
save [MangleName 'roundwhitesquare'] [MangleUnicode 0x25A2]
define [ThickRoundedArrowBar x1 y1 x2 y2 r w] : glyph-construction
include : PointingTo x1 y1 x2 y2 : lambda [mag] : spiro-outline
g4 (-r) 0
arcvh
flat 0 r
curl mag r
archv
g4 (mag + r) 0
arcvh
flat mag (-r)
curl 0 (-r)
archv
close
sketch
set-width MosaicWidth
local inner : [Math.max [adviceBlackness 3] (WIDTH / 8)] / 2
local thick : adviceBlackness 4
local left : leftFW + (inner + thick)
local right : rightFW - (inner + thick)
local bot : bottomFW + (inner + thick)
local top : topFW - (inner + thick)
include : difference
union
ThickRoundedArrowBar left top right bot (inner + thick) 0
ThickRoundedArrowBar right top left bot (inner + thick) 0
union
ThickRoundedArrowBar left top right bot inner 0
ThickRoundedArrowBar right top left bot inner 0
save [MangleName "whiteHeavySaltireWithRoundedCorners"] [MangleUnicode 0x1FBC0]
# Shaded hollow squares
sketch # hshadesquare, U+25A4
define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11)
define top : symbolMid + squareRadiusFW - GEOMETRYSTROKE + lineWidth / 2
define bot : symbolMid - (top - symbolMid)
set-width MosaicWidth
include : union
begin glyphs.[MangleName 'whitesquare']
intersection
begin glyphs.[MangleName 'blacksquare']
create-glyph : glyph-construction
include : dispiro
widths.center lineWidth
flat leftFW [mix top bot 0.25] [heading RIGHTWARD]
curl rightFW [mix top bot 0.25] [heading RIGHTWARD]
include : dispiro
widths.center lineWidth
flat leftFW [mix top bot 0.5] [heading RIGHTWARD]
curl rightFW [mix top bot 0.5] [heading RIGHTWARD]
include : dispiro
widths.center lineWidth
flat leftFW [mix top bot 0.75] [heading RIGHTWARD]
curl rightFW [mix top bot 0.75] [heading RIGHTWARD]
save [MangleName 'hshadesquare'] [MangleUnicode 0x25A4]
sketch # vshadesquare, U+25A5
define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11)
define r : MosaicWidth / 2 + squareRadiusFW - GEOMETRYSTROKE + lineWidth / 2
define l : MosaicWidth / 2 - (r - MosaicWidth / 2)
set-width MosaicWidth
include : union
begin glyphs.[MangleName 'whitesquare']
intersection
begin glyphs.[MangleName 'blacksquare']
create-glyph : glyph-construction
include : dispiro
widths.center lineWidth
flat [mix l r 0.25] topFW [heading DOWNWARD]
curl [mix l r 0.25] bottomFW [heading DOWNWARD]
include : dispiro
widths.center lineWidth
flat [mix l r 0.5] topFW [heading DOWNWARD]
curl [mix l r 0.5] bottomFW [heading DOWNWARD]
include : dispiro
widths.center lineWidth
flat [mix l r 0.75] topFW [heading DOWNWARD]
curl [mix l r 0.75] bottomFW [heading DOWNWARD]
save [MangleName 'vshadesquare'] [MangleUnicode 0x25A5]
sketch # hvshadesquare, U+25A6
set-width MosaicWidth
include : union glyphs.[MangleName 'hshadesquare'] glyphs.[MangleName 'vshadesquare']
save [MangleName 'hvshadesquare'] [MangleUnicode 0x25A6]
sketch # ddiagshadesquare, U+25A7
define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11)
define top : symbolMid + squareRadiusFW
define bot : symbolMid - (top - symbolMid)
set-width MosaicWidth
include : union
begin glyphs.[MangleName 'whitesquare']
intersection
begin glyphs.[MangleName 'blacksquare']
create-glyph : glyph-construction
foreach [j : range (-10) till 10] : include : dispiro
widths.center lineWidth
flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD]
curl rightFW [mix top bot (j / 4 + 1)] [heading RIGHTWARD]
save [MangleName 'ddiagshadesquare'] [MangleUnicode 0x25A7]
sketch # udiagshadesquare, U+25A8
define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11)
define top : symbolMid + squareRadiusFW
define bot : symbolMid - (top - symbolMid)
set-width MosaicWidth
include : union
begin glyphs.[MangleName 'whitesquare']
intersection
begin glyphs.[MangleName 'blacksquare']
create-glyph : glyph-construction
foreach [j : range (-10) till 10] : include : dispiro
widths.center lineWidth
flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD]
curl rightFW [mix top bot (j / 4 - 1)] [heading RIGHTWARD]
save [MangleName 'udiagshadesquare'] [MangleUnicode 0x25A8]
sketch # uddiagshadesquare, U+25A9
set-width MosaicWidth
include : union glyphs.[MangleName 'ddiagshadesquare'] glyphs.[MangleName 'udiagshadesquare']
save [MangleName 'uddiagshadesquare'] [MangleUnicode 0x25A9]
# partial circles
define quarters : list
list 0x25D0 1 1 0 0
list 0x25D1 0 0 1 1
list 0x25D2 0 1 0 1
list 0x25D3 1 0 1 0
list 0x25D4 0 0 1 0
list 0x25D5 0 1 1 1
foreach [{u LT LB RT RB} : items-of quarters] : sketch
define r : squareRadiusFW - GEOMETRYSTROKE / 2
set-width MosaicWidth
include : union
begin glyphs.[MangleName 'whitecircle']
intersection
spiro-outline
g4 MosaicMiddle (symbolMid + r)
g4 (MosaicMiddle - r) symbolMid
g4 MosaicMiddle (symbolMid - r)
g4 (MosaicMiddle + r) symbolMid
close
create-glyph : glyph-construction
if LT : include : spiro-outline
corner MosaicMiddle symbolMid
corner MosaicMiddle (symbolMid + squareRadiusFW)
corner (MosaicMiddle - squareRadiusFW) (symbolMid + squareRadiusFW)
corner (MosaicMiddle - squareRadiusFW) symbolMid
if LB : include : spiro-outline
corner MosaicMiddle symbolMid
corner MosaicMiddle (symbolMid - squareRadiusFW)
corner (MosaicMiddle - squareRadiusFW) (symbolMid - squareRadiusFW)
corner (MosaicMiddle - squareRadiusFW) symbolMid
if RT : include : spiro-outline
corner MosaicMiddle symbolMid
corner MosaicMiddle (symbolMid + squareRadiusFW)
corner (MosaicMiddle + squareRadiusFW) (symbolMid + squareRadiusFW)
corner (MosaicMiddle + squareRadiusFW) symbolMid
if RB : include : spiro-outline
corner MosaicMiddle symbolMid
corner MosaicMiddle (symbolMid - squareRadiusFW)
corner (MosaicMiddle + squareRadiusFW) (symbolMid - squareRadiusFW)
corner (MosaicMiddle + squareRadiusFW) symbolMid
save [MangleName ('uni' + u)] [MangleUnicode u]
sketch
set-width MosaicWidth
include : difference
begin glyphs.[MangleName 'blacklongrectangle']
begin glyphs.[MangleName 'blackcircle']
save [MangleName 'uni25D8'] [MangleUnicode 0x25D8]
sketch
set-width MosaicWidth
include : difference
begin glyphs.[MangleName 'blacklongrectangle']
begin glyphs.[MangleName 'whitecircle']
save [MangleName 'uni25D9'] [MangleUnicode 0x25D9]