Iosevka/glyphs/symbol-math.ptl
2020-01-20 23:55:36 -08:00

1275 lines
47 KiB
Text

###### Mathematical symbols
$$include '../meta/macros.ptl'
import [mix linreg clamp fallback] from '../support/utils'
import [designParameters] from '../meta/aesthetics'
export : define [apply] : begin
glyph-module-entry commonShapes overmarks letterBasic letterExt
do "Letter-like"
sketch # micro
include glyphs.mu AS_BASE
if SLAB : if (!para.isItalic) : begin
include : CenterBottomSerif (SB + HALFSTROKE * HVCONTRAST) DESCENDER JUT
tag-contour 'serifLB'
save 'micro' 0xB5
sketch # forall
include : LambdaShape CAP OPERATORSTROKE true
eject-contour 'serif'
include : intersection
AMaskShape CAP OPERATORSTROKE true
HBar 0 WIDTH (XH / 2) OPERATORSTROKE
include : FlipAround MIDDLE (CAP / 2)
save 'forall' 0x2200
sketch # exists
include : HBarTop (SB * 1.5 - O) RIGHTSB CAP OPERATORSTROKE
include : HBarBottom (SB * 1.5 - O) RIGHTSB 0 OPERATORSTROKE
include : HBar (SB * 1.5 - O) (RIGHTSB - HALFSTROKE) (CAP * 0.5) OPERATORSTROKE
include : VBarLeft (SB * 1.5) 0 CAP OPERATORSTROKE
include : FlipAround MIDDLE (CAP / 2)
save 'exists' 0x2203
sketch # emptyset
include : OShape CAP 0 SB RIGHTSB OPERATORSTROKE
local fine : OPERATORSTROKE / 2
include : dispiro
widths.center OPERATORSTROKE
flat (SB + O + fine) [mix CAP 0 1.05]
curl (RIGHTSB - O - fine) [mix 0 CAP 1.05]
save 'emptyset' 0x2205
sketch # increment
include markset.capital
include : DeltaShape CAP OPERATORSTROKE true
save 'increment' 0x2206
turned 'nabla' 0x2207 'increment' MIDDLE (CAP / 2)
if [not recursive] : let : begin
local fullWidth FULLWIDTH2
local s : (RIGHTSB - SB - O * 4 + (fullWidth - WIDTH) * 0.5) / CAP
local df : Miniature
glyphs -- {'eight' 'rotetedpropto'}
crowd -- 4
scale -- s
slantAngle -- 0
unfair -- true
sketch # infty
set-width fullWidth
include df.eight
apply-transform : Translate (-(fullWidth / 2)) (-CAP / 2)
apply-transform : Rotate (Math.PI / 2)
apply-transform : Scale s
apply-transform : Translate (fullWidth / 2) symbolMid
apply-transform : Italify
refair currentGlyph
save 'infty' 0x221E
sketch # propto
set-width fullWidth
include df.rotetedpropto
apply-transform : Translate (-(fullWidth / 2)) (-CAP / 2)
apply-transform : Rotate (Math.PI / 2)
apply-transform : Scale s
apply-transform : Translate (fullWidth / 2) symbolMid
apply-transform : Italify
refair currentGlyph
save 'propto' 0x221D
sketch # partial
include markset.b
include : OShape (CAP * 0.65) 0 SB RIGHTSB OPERATORSTROKE
include : dispiro
widths.lhs OPERATORSTROKE
flat (RIGHTSB - OX) SMALLSMOOTHA
curl (RIGHTSB - OX) (CAP - SMALLSMOOTHB)
hookend CAPO
g4 SB (CAP - HOOK)
save 'partial' 0x2202
do "Frames"
local sw GEOMETRYSTROKE
local k : 2 / 3
local top : symbolMid + (RIGHTSB - SB) * 0.5 + sw * k
local bottom : symbolMid - (RIGHTSB - SB) * 0.5 - sw * k
local left : SB - sw * k
local right : RIGHTSB + sw * k
sketch # mathO
include glyphs.'whitecircle.hwid'
save 'mathO'
sketch # mathO-outline
include glyphs.'blackcircleO.hwid'
save 'mathOOutline'
sketch # mathBoxOutline
include : spiro-outline
corner left top
corner left bottom
corner right bottom
corner right top
save 'mathBoxOutline'
sketch # mathBox
include : intersection glyphs.mathBoxOutline : union
dispiro [widths.lhs sw] [flat left top] [curl left bottom]
dispiro [widths.lhs sw] [flat left bottom] [curl right bottom]
dispiro [widths.lhs sw] [flat right bottom] [curl right top]
dispiro [widths.lhs sw] [flat right top] [curl left top]
save 'mathBox'
do "Geometry"
sketch
include : intersection
spiro-outline
corner left bottom
corner right bottom
corner right top
union
dispiro [widths.lhs sw] [flat left bottom] [curl right bottom]
dispiro [widths.lhs sw] [flat right bottom] [curl right top]
dispiro [widths.lhs sw] [flat right top] [curl left bottom]
save 'mathRightTriangle' 0x22BF
sketch
include : intersection
spiro-outline
corner left bottom
corner right bottom
corner right top
union
dispiro [widths.lhs sw] [flat left bottom] [curl right bottom]
dispiro [widths.lhs sw] [flat right top] [curl left bottom]
save 'angle' 0x2220
do "Arith"
sketch # plus
include markset.plus
include : HBar SB RIGHTSB symbolMid OPERATORSTROKE
include : VBar MIDDLE plusTop plusBot OPERATORSTROKE
save 'plus' '+'
sketch # plus
include markset.plus
include : HBar SB RIGHTSB symbolMid GEOMETRYSTROKE
include : VBar MIDDLE plusTop plusBot GEOMETRYSTROKE
save 'innerPlus'
sketch # ligplus.lc
include markset.plus
include : HBar SB (WIDTH - O) symbolMid OPERATORSTROKE
include : VBar MIDDLE plusTop plusBot OPERATORSTROKE
save 'ligplus.lc'
sketch # ligplus.lc.s
include markset.plus
include : HBar SB (WIDTH - O) symbolMid OPERATORSTROKE
include : VBar (MIDDLE + SB) plusTop plusBot OPERATORSTROKE
save 'ligplus.lc.s'
sketch # ligplus.cc
include markset.plus
include : HBar O (WIDTH - O) symbolMid OPERATORSTROKE
include : VBar MIDDLE plusTop plusBot OPERATORSTROKE
save 'ligplus.cc'
sketch # ligplus.cr
include markset.plus
include : HBar O RIGHTSB symbolMid OPERATORSTROKE
include : VBar MIDDLE plusTop plusBot OPERATORSTROKE
save 'ligplus.cr'
sketch # ligplus.cr.s
include markset.plus
include : HBar O RIGHTSB symbolMid OPERATORSTROKE
include : VBar (MIDDLE - SB) plusTop plusBot OPERATORSTROKE
save 'ligplus.cr.s'
sketch # ligplus.jr
include markset.plus
include : HBar (-SB + O) RIGHTSB symbolMid OPERATORSTROKE
include : VBar MIDDLE plusTop plusBot OPERATORSTROKE
save 'ligplus.jr'
sketch # minus
include markset.plus
include : HBar SB RIGHTSB symbolMid OPERATORSTROKE
save 'minus' 0x2212
include : DotAt MIDDLE plusTop DOTRADIUS
save 'minusDot' 0x2238
sketch # innerMinus
include markset.plus
include : HBar SB RIGHTSB symbolMid GEOMETRYSTROKE
save 'innerMinus'
sketch # plusminus
include markset.plus
include : HBarBottom SB RIGHTSB 0 OPERATORSTROKE
include glyphs.plus
save 'plusminus' 0xB1
turned 'minusplus' 0x2213 'plusminus' MIDDLE symbolMid
sketch # multiply
include markset.plus
local radius : (RIGHTSB - SB) / 2
include : dispiro
widths.center OPERATORSTROKE
flat (MIDDLE - radius) (symbolMid - radius)
curl (MIDDLE + radius) (symbolMid + radius)
save 'multiplyStroke1'
sketch # multiply
include markset.plus
local radius : (RIGHTSB - SB) / 2
include : dispiro
widths.center OPERATORSTROKE
flat (MIDDLE + radius) (symbolMid - radius)
curl (MIDDLE - radius) (symbolMid + radius)
save 'multiplyStroke2'
sketch # multiply
include markset.plus
local radius : (RIGHTSB - SB) / 2
include : dispiro
widths.center GEOMETRYSTROKE
flat (MIDDLE - radius) (symbolMid - radius)
curl (MIDDLE + radius) (symbolMid + radius)
save 'innerMultiplyStroke1'
sketch # multiply
include markset.plus
local radius : (RIGHTSB - SB) / 2
include : dispiro
widths.center GEOMETRYSTROKE
flat (MIDDLE + radius) (symbolMid - radius)
curl (MIDDLE - radius) (symbolMid + radius)
save 'innerMultiplyStroke2'
sketch # multiply
include markset.plus
include glyphs.multiplyStroke1
include glyphs.multiplyStroke2
save 'multiply' 0xD7
sketch # multiply
include markset.plus
include glyphs.innerMultiplyStroke1
include glyphs.innerMultiplyStroke2
save 'innerMultiply'
sketch # divide
include markset.plus
include glyphs.minus
local radius : (RIGHTSB - SB) / 2
include : Ring (symbolMid + radius + DOTRADIUS) (symbolMid + radius - DOTRADIUS) (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true
include : Ring (symbolMid - radius + DOTRADIUS) (symbolMid - radius - DOTRADIUS) (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true
save 'divide' 0xF7
local equalHalfSpace : (operTop - operBot) * 2 * designParameters.equal_wideness
do "Equality"
define [EqualShape left right] : union
HBar left right (symbolMid + equalHalfSpace) OPERATORSTROKE
HBar left right (symbolMid - equalHalfSpace) OPERATORSTROKE
define [EqualHole x] : VBar x (symbolMid - equalHalfSpace) (symbolMid + equalHalfSpace) [adviceBlackness 6]
define [IdentShape left right] : union
HBar left right (symbolMid + equalHalfSpace * 1.5) OPERATORSTROKE
HBar left right symbolMid OPERATORSTROKE
HBar left right (symbolMid - equalHalfSpace * 1.5) OPERATORSTROKE
define [IdentHole x] : VBar x (symbolMid - equalHalfSpace * 1.5) (symbolMid + equalHalfSpace * 1.5) [adviceBlackness 6]
sketch # equal
include markset.plus
include : EqualShape SB RIGHTSB
save 'equal' '='
branch
include : DotAt [mix SB RIGHTSB (1/6)] (symbolMid + equalHalfSpace * 2.5) DOTRADIUS
include : DotAt [mix SB RIGHTSB (5/6)] (symbolMid - equalHalfSpace * 2.5) DOTRADIUS
save 'twodotapproxeq' 0x2252
sketch # colon-equal
include glyphs.'baselineDot'
include glyphs.'xhDot'
local sbSquash 0.5
local delta : Math.max 0 : WIDTH / 2 - DOTRADIUS - SB * sbSquash
apply-transform : Upright
apply-transform : Translate (-delta) (symbolMid - XH / 2)
apply-transform : Italify
include : EqualShape (SB + PERIODSIZE) (WIDTH - SB * sbSquash)
save 'colonEq' 0x2254
# Ligation glyphs
sketch # equal.fc
include markset.plus
include : difference
EqualShape SB (WIDTH - O)
EqualHole WIDTH
save 'equal.fc'
sketch # equal.cf
include markset.plus
include : difference
EqualShape O RIGHTSB
EqualHole 0
save 'equal.cf'
sketch # equal.jf
include markset.plus
include : difference
EqualShape (RIGHTSB - WIDTH + O) RIGHTSB
EqualHole 0
save 'equal.jf'
sketch # equal.cc
include markset.plus
include : difference
EqualShape O (WIDTH - O)
union
EqualHole 0
EqualHole WIDTH
save 'equal.cc'
sketch # ident.fc
include markset.plus
include : difference
IdentShape SB (WIDTH - O)
IdentHole WIDTH
save 'ident.fc'
sketch # ident.cf
include markset.plus
include : difference
IdentShape O RIGHTSB
IdentHole 0
save 'ident.cf'
sketch # ident.jf
include markset.plus
include : difference
IdentShape (RIGHTSB - WIDTH + O) RIGHTSB
IdentHole 0
save 'ident.jf'
sketch # ident.cc
include markset.plus
include : difference
IdentShape O (WIDTH - O)
union
IdentHole 0
IdentHole WIDTH
save 'ident.cc'
do "Dots and Colon-likes"
local radius1 PERIODRADIUS
local radius : Math.min PERIODRADIUS
linreg WIDTH (0.5 * [adviceBlackness 3.5] * PERIODSIZE / STROKE) UPM PERIODRADIUS FULLWIDTH3
local left : mix 0 FULLWIDTH3 (1 / 4)
local right : mix 0 FULLWIDTH3 (3 / 4)
sketch
set-width FULLWIDTH3
include : Ring (XH - O) (XH - radius * 2 + O) (FULLWIDTH3 / 2 - radius + O) (FULLWIDTH3 / 2 + radius - O) true
include : Ring (radius * 2 - O) O (left - radius + O) (left + radius - O) true
include : Ring (radius * 2 - O) O (right - radius + O) (right + radius - O) true
save 'therefore' 0x2234
sketch
set-width FULLWIDTH3
include : Ring (XH - O) (XH - radius * 2 + O) (left - radius + O) (left + radius - O) true
include : Ring (XH - O) (XH - radius * 2 + O) (right - radius + O) (right + radius - O) true
include : Ring (radius * 2 - O) O (FULLWIDTH3 / 2 - radius + O) (FULLWIDTH3 / 2 + radius - O) true
save 'because' 0x2235
sketch
set-width FULLWIDTH3
include : Ring (PERIODRADIUS * 2 - O) O (FULLWIDTH3 / 2 - PERIODRADIUS + O) (FULLWIDTH3 / 2 + PERIODRADIUS - O) true
include : Ring (XH - O) (XH - PERIODRADIUS * 2 + O) (FULLWIDTH3 / 2 - PERIODRADIUS + O) (FULLWIDTH3 / 2 + PERIODRADIUS - O) true
save 'mathcolon' 0x2236
sketch # coloncolon
set-width FULLWIDTH3
include : Ring (radius * 2 - O) O (left - radius + O) (left + radius - O) true
include : Ring (radius * 2 - O) O (right - radius + O) (right + radius - O) true
include : Ring (XH - O) (XH - radius * 2 + O) (left - radius + O) (left + radius - O) true
include : Ring (XH - O) (XH - radius * 2 + O) (right - radius + O) (right + radius - O) true
save 'coloncolon' 0x2237
sketch # mathcdot
include : Ring (symbolMid + PERIODRADIUS - O) (symbolMid - PERIODRADIUS + O) (MIDDLE - PERIODRADIUS + O) (MIDDLE + PERIODRADIUS - O) true
save 'mathcdot'
composite 'mathAsterisk' glyphs.'opAsterisk.low' [into-unicode 0x2217]
do "Circled Operators"
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerPlus] [into-unicode 0x2295]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerMinus] [into-unicode 0x2296]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerMultiply] [into-unicode 0x2297]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerMultiplyStroke1] [into-unicode 0x2298]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.mathcdot] [into-unicode 0x2299]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.'smallwhitecircle.hwid'] [into-unicode 0x229A]
composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.mathAsterisk] [into-unicode 0x229B]
composite
begin glyphs.mathO
intersection
begin glyphs.mathOOutline
HBar (SB + GEOMETRYSTROKE) (RIGHTSB - GEOMETRYSTROKE) symbolMid GEOMETRYSTROKE
into-unicode 0x229D
local eqS : Math.min GEOMETRYSTROKE ((RIGHTSB - SB) / 8)
local eqD : Math.max eqS ((RIGHTSB - SB) / 6)
composite glyphs.mathO
intersection glyphs.mathOOutline : union
HBar (SB + eqS) (RIGHTSB - eqS) (symbolMid + eqD) eqS
HBar (SB + eqS) (RIGHTSB - eqS) (symbolMid - eqD) eqS
into-unicode 0x229C
do "Boxed operators"
composite glyphs.mathBox [intersection glyphs.mathBoxOutline glyphs.innerPlus] [into-unicode 0x229E]
composite glyphs.mathBox [intersection glyphs.mathBoxOutline glyphs.innerMinus] [into-unicode 0x229F]
composite glyphs.mathBox [intersection glyphs.mathBoxOutline glyphs.innerMultiply] [into-unicode 0x22A0]
composite glyphs.mathBox [intersection glyphs.mathBoxOutline glyphs.mathcdot] [into-unicode 0x22A1]
do "Vs and Cups"
sketch # vee
include : dispiro
widths.center OPERATORSTROKE
flat SB operTop [heading DOWNWARD]
curl MIDDLE operBot [heading DOWNWARD]
include : dispiro
widths.center OPERATORSTROKE
flat RIGHTSB operTop [heading DOWNWARD]
curl MIDDLE operBot [heading DOWNWARD]
save 'vee' 0x2228
turned 'wedge' 0x2227 'vee' MIDDLE symbolMid
sketch # doubleVee
define sw : adviceBlackness 6
include : dispiro
widths.center sw
flat SB operTop [heading DOWNWARD]
curl MIDDLE operBot [heading DOWNWARD]
include : dispiro
widths.center sw
flat RIGHTSB operTop [heading DOWNWARD]
curl MIDDLE operBot [heading DOWNWARD]
define offsetRatio : 1 / 4
define bias : (RIGHTSB - SB) * offsetRatio
define a : dispiro
widths.center sw
flat (SB + bias) operTop [heading DOWNWARD]
curl (MIDDLE + bias) operBot [heading DOWNWARD]
define b : dispiro
widths.center sw
flat (RIGHTSB - bias) operTop [heading DOWNWARD]
curl (MIDDLE - bias) operBot [heading DOWNWARD]
include : union
intersection a b
difference
union a b
spiro-outline
corner 0 operBot
corner WIDTH operBot
corner WIDTH [mix operBot operTop (1 - 2 * offsetRatio)]
corner 0 [mix operBot operTop (1 - 2 * offsetRatio)]
save 'doubleVee' 0x2A54
turned 'doubleWedge' 0x2A53 'doubleVee' MIDDLE symbolMid
sketch # cup
include : UShape operTop operBot OPERATORSTROKE true
save 'cup' 0x222A
branch
include : DotAt MIDDLE (operBot + SMOOTH) [Math.min DOTRADIUS ((RIGHTSB - SB - OPERATORSTROKE * HVCONTRAST * 2) * (1 / 3))]
save 'cupDot' 0x228E
turned 'cap' 0x2229 'cup' MIDDLE symbolMid
turned 'capDot' 0x2A40 'cupDot' MIDDLE symbolMid
sketch # squareCap
include : PiShape operTop operBot (shrinkrate -- 0) (_fine -- OPERATORSTROKE) (div -- 1)
save 'squareCap' 0x2293
turned 'squareCup' 0x2294 'squareCap' MIDDLE symbolMid
### Logicals
do "Logicals"
sketch # negate
include glyphs.minus
include : VBarRight RIGHTSB (symbolMid - (RIGHTSB - SB) * 0.55) symbolMid OPERATORSTROKE
save 'negate' 0xAC
local top tackTop
local bot tackBot
sketch # vdash
include markset.tack
include : HBar SB RIGHTSB symbolMid OPERATORSTROKE
include : VBarLeft SB top bot OPERATORSTROKE
save 'vdash' 0x22A2
turned 'dashv' 0x22A3 'vdash' MIDDLE symbolMid
sketch # assert
include markset.tack
local l : mix MIDDLE SB designParameters.logic_narrow_shrink
local r : mix MIDDLE RIGHTSB designParameters.logic_narrow_shrink
include : HBar l r symbolMid OPERATORSTROKE
include : VBarLeft l top bot OPERATORSTROKE
save 'assert' 0x22A6
sketch # models
include markset.tack
local l : mix MIDDLE SB designParameters.logic_narrow_shrink
local r : mix MIDDLE RIGHTSB designParameters.logic_narrow_shrink
include : HBar l r [mix symbolMid top (1 / 3)] OPERATORSTROKE
include : HBar l r [mix symbolMid bot (1 / 3)] OPERATORSTROKE
include : VBarLeft l top bot OPERATORSTROKE
save 'models' 0x22A7
sketch # tautology
include markset.tack
local l : mix MIDDLE SB 1
local r : mix MIDDLE RIGHTSB 1
include : HBar l r [mix symbolMid top (1 / 3)] OPERATORSTROKE
include : HBar l r [mix symbolMid bot (1 / 3)] OPERATORSTROKE
include : VBarLeft l top bot OPERATORSTROKE
save 'tautology' 0x22A8
sketch # top
include markset.tack
include : HBarTop SB RIGHTSB top OPERATORSTROKE
include : VBar MIDDLE top bot OPERATORSTROKE
save 'top' 0x22A4
composite 'bot' glyphs.top [FlipAround MIDDLE symbolMid] [into-unicode 0x22A5]
sketch # topring
define mid : mix bot (top - OPERATORSTROKE / 2) 0.5
define w : (RIGHTSB - SB) * 0.4
define fine : Math.min (w / 2.5) [adviceBlackness 5]
include : HBarTop SB RIGHTSB top OPERATORSTROKE
include : VBar MIDDLE top (mid + w) OPERATORSTROKE
include : VBar MIDDLE (mid - w) bot OPERATORSTROKE
include : VBar MIDDLE (mid + w) (mid - w) fine
include : OShape (mid + w) (mid - w) (MIDDLE - w) (MIDDLE + w) fine
save 'topring' 0x2355
composite 'botring' glyphs.topring [FlipAround MIDDLE symbolMid] [into-unicode 0x234E]
sketch # perp
include markset.tack
include : HBarBottom SB RIGHTSB 0 OPERATORSTROKE
include : VBar MIDDLE (symbolMid * 2) 0 OPERATORSTROKE
save 'perpendicular' 0x27C2
sketch # endOfProof
include : Rect tackTop tackBot SB RIGHTSB
save 'endOfProof' 0x220E
do "Comparison"
# Less and Greater
define lessSlantness : (4 / 13) * (operTop - operBot) / (RIGHTSB - SB)
define dH : lessSlantness * (RIGHTSB - SB)
define lessEqDist : Math.max [adviceBlackness 4] (XH * 0.16)
define [LessShapeA top bot l r s] : begin
local exp : Math.sqrt : 1 + (top - bot) / (2 * (r - l)) * (top - bot) / (2 * (r - l))
return : dispiro
widths.center s
flat r top
curl l [mix top bot 0.5] [widths.heading (s / 2 * exp) (s / 2 * exp) LEFTWARD]
define [LessShapeB top bot l r s] : begin
local exp : Math.sqrt : 1 + (top - bot) / (2 * (r - l)) * (top - bot) / (2 * (r - l))
return : dispiro
widths.center s
flat r bot
curl l [mix top bot 0.5] [widths.heading (s / 2 * exp) (s / 2 * exp) LEFTWARD]
define [GreaterShapeA top bot l r s] : begin
local exp : Math.sqrt : 1 + (top - bot) / (2 * (r - l)) * (top - bot) / (2 * (r - l))
return : dispiro
widths.center s
flat l top
curl r [mix top bot 0.5] [widths.heading (s / 2 * exp) (s / 2 * exp) RIGHTWARD]
define [GreaterShapeB top bot l r s] : begin
local exp : Math.sqrt : 1 + (top - bot) / (2 * (r - l)) * (top - bot) / (2 * (r - l))
return : dispiro
widths.center s
flat l bot
curl r [mix top bot 0.5] [widths.heading (s / 2 * exp) (s / 2 * exp) RIGHTWARD]
define [LessShape top bot l r s] : union
LessShapeA top bot l r [fallback s OPERATORSTROKE]
LessShapeB top bot l r [fallback s OPERATORSTROKE]
define [GreaterShape top bot l r s] : union
GreaterShapeA top bot l r [fallback s OPERATORSTROKE]
GreaterShapeB top bot l r [fallback s OPERATORSTROKE]
# Sym parameters
local approxDist : equalHalfSpace * 1.75
local symMag : (operTop - symbolMid) * 0.17
define [symWave height mul] : TildeShape
ttop -- height + symMag * mul
tbot -- height - symMag * mul
leftEnd -- SB
rightEnd -- RIGHTSB
hs -- OPERATORSTROKE / 2
define [BarNegator symbolBottom dist] : begin
local swo : Math.max (OPERATORSTROKE * 1.5) (dist * 1.5)
return : dispiro
widths.center OPERATORSTROKE
flat (MIDDLE + dist) (symbolBottom - dist + swo) [heading DOWNWARD]
flat (MIDDLE - dist) (symbolBottom - dist - swo) [heading DOWNWARD]
sketch # less
include markset.plus
include : LessShape (symbolMid + dH) (symbolMid - dH) SB RIGHTSB
save 'less' '<'
sketch # greater
include glyphs.less AS_BASE
include : FlipAround MIDDLE symbolMid
save 'greater' '>'
do "<| and |>"
local trigLeft : mix SB RIGHTSB (1/6)
local trigRight : WIDTH * 1.5 - OPERATORSTROKE * 1.5 * HVCONTRAST
local dHTriangle : lessSlantness * (trigRight - trigLeft)
sketch # ligless.trig
include markset.plus
include : LessShape (symbolMid + dHTriangle) (symbolMid - dHTriangle) trigLeft trigRight
save 'ligless.trig'
sketch # ligbar.trig
include : VBar MIDDLE (symbolMid + dHTriangle + OPERATORSTROKE) (symbolMid - dHTriangle - OPERATORSTROKE) OPERATORSTROKE
save 'ligbar.trig'
sketch # liggreater.trig
include glyphs.'ligless.trig' AS_BASE
include : FlipAround MIDDLE symbolMid
save 'liggreater.trig'
sketch # lesseq
include markset.plus
include : LessShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RIGHTSB
branch
include : Upright
include : Translate 0 (-lessEqDist)
include : Italify
save 'less.narrow'
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'lesseq' 0x2264
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x2A87
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'lesssym' 0x2272
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E6
branch
include : LessShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RIGHTSB OPERATORSTROKE
save 'lesseqslant' 0x2A7D
sketch # greatereq
include markset.plus
include : GreaterShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RIGHTSB
branch
include : Upright
include : Translate 0 (-lessEqDist)
include : Italify
save 'greater.narrow'
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'greatereq' 0x2265
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x2A88
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'greatersym' 0x2273
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E7
branch
include : GreaterShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RIGHTSB OPERATORSTROKE
save 'greatereqslant' 0x2A7E
# Ligation
sketch
define l : 0.3 * WIDTH
define r : 2 * WIDTH - l
define l2 : l - WIDTH
define r2 : r - WIDTH
include markset.plus
branch
include : LessShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) l r
save 'less.lig2'
branch
include : GreaterShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) l r
save 'greater.lig2'
branch
include : HBar l2 r2 (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'eq.at-lteq.lig2.flat'
save 'eq.at-gteq.lig2.flat'
branch
include : LessShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) l2 r2 OPERATORSTROKE
save 'eq.at-lteq.lig2.slanted'
branch
include : GreaterShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) l2 r2 OPERATORSTROKE
save 'eq.at-gteq.lig2.slanted'
select-variant 'eq.at-lteq.lig2'
select-variant 'eq.at-gteq.lig2'
do
define lesslessSW : adviceBlackness 4
define lesslessSWO : Math.max lesslessSW lessEqDist
define llggHeight : dH * 2 + lessEqDist * 2
sketch
include markset.plus
branch
include : GreaterShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist * 1.75) SB RIGHTSB lesslessSW
include : HBar SB RIGHTSB (symbolMid - dH + lessEqDist * 2 / 3) lesslessSW
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) lesslessSW
save 'greatereqeq' 0x2267
include : dispiro
widths.center lesslessSW
flat (MIDDLE + lessEqDist) (symbolMid - dH + lessEqDist * 2 / 3 + lesslessSWO) [heading DOWNWARD]
flat (MIDDLE - lessEqDist) (symbolMid - dH - lessEqDist - lesslessSWO) [heading DOWNWARD]
save nothing 0x2269
branch
include : GreaterShape (symbolMid + llggHeight / 2) (symbolMid - llggHeight / 6 + lessEqDist) SB RIGHTSB lesslessSW
include : LessShape (symbolMid + llggHeight / 6 - lessEqDist) (symbolMid - llggHeight / 2) SB RIGHTSB lesslessSW
save 'greaterless' 0x2277
sketch
include markset.plus
branch
include : LessShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist * 1.75) SB RIGHTSB lesslessSW
include : HBar SB RIGHTSB (symbolMid - dH + lessEqDist * 2 / 3) lesslessSW
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) lesslessSW
save 'lesseqeq' 0x2266
include : dispiro
widths.center lesslessSW
flat (MIDDLE + lessEqDist) (symbolMid - dH + lessEqDist * 2 / 3 + lesslessSWO) [heading DOWNWARD]
flat (MIDDLE - lessEqDist) (symbolMid - dH - lessEqDist - lesslessSWO) [heading DOWNWARD]
save nothing 0x2268
branch
include : LessShape (symbolMid + llggHeight / 2) (symbolMid - llggHeight / 6 + lessEqDist) SB RIGHTSB lesslessSW
include : GreaterShape (symbolMid + llggHeight / 6 - lessEqDist) (symbolMid - llggHeight / 2) SB RIGHTSB lesslessSW
save 'lessgreater' 0x2276
sketch
include markset.plus
include : LessShape (symbolMid + dH) (symbolMid - dH) (SB - lessEqDist / 2) (RIGHTSB - lessEqDist * 2) lesslessSW
include : LessShape (symbolMid + dH) (symbolMid - dH) (SB + lessEqDist * 2) (RIGHTSB + lessEqDist / 2) lesslessSW
save 'lessless' 0x226A
sketch
include markset.plus
include : GreaterShape (symbolMid + dH) (symbolMid - dH) (SB - lessEqDist / 2) (RIGHTSB - lessEqDist * 2) lesslessSW
include : GreaterShape (symbolMid + dH) (symbolMid - dH) (SB + lessEqDist * 2) (RIGHTSB + lessEqDist / 2) lesslessSW
save 'greatergreater' 0x226B
define [PrecedesShapeA top bot l r s cth] : begin
local fine : s * cth
return : dispiro
widths.center s
g4 r top
straight.left.end l ([mix top bot 0.5] + s / 2) [widths.heading fine 0 LEFTWARD]
define [PrecedesShapeB top bot l r s cth] : begin
local fine : s * cth
return : dispiro
widths.center s
g4 r bot
straight.left.end l ([mix top bot 0.5] - s / 2) [widths.heading 0 fine LEFTWARD]
define [SucceedsShapeA top bot l r s cth] : begin
local fine : s * cth
return : dispiro
widths.center s
g4 l top
straight.right.end r ([mix top bot 0.5] + s / 2) [widths.heading 0 fine RIGHTWARD]
define [SucceedsShapeB top bot l r s cth] : begin
local fine : s * cth
return : dispiro
widths.center s
g4 l bot
straight.right.end r ([mix top bot 0.5] - s / 2) [widths.heading fine 0 RIGHTWARD]
define [PrecedesShape top bot l r s] : glyph-construction
include : PrecedesShapeA top bot l r [fallback s OPERATORSTROKE] CTHIN
include : PrecedesShapeB top bot l r [fallback s OPERATORSTROKE] CTHIN
define [SucceedsShape top bot l r s] : glyph-construction
include : SucceedsShapeA top bot l r [fallback s OPERATORSTROKE] CTHIN
include : SucceedsShapeB top bot l r [fallback s OPERATORSTROKE] CTHIN
sketch # precedes
include markset.plus
include : PrecedesShape (symbolMid + dH) (symbolMid - dH) SB RIGHTSB
save 'precedes' 0x227a
sketch # succeeds
include markset.plus
include : SucceedsShape (symbolMid + dH) (symbolMid - dH) SB RIGHTSB
save 'succeeds' 0x227b
sketch # precedeseq
include markset.plus
include : PrecedesShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RIGHTSB
branch
include : Upright
include : Translate 0 (-lessEqDist)
include : Italify
save 'precedes.narrow'
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'precedeseq' 0x2AAF
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x2AB1
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'precedessym' 0x227E
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E8
branch
include : PrecedesShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RIGHTSB OPERATORSTROKE 1
save 'precedeseqslant' 0x227C
sketch # succeedseq
include markset.plus
include : SucceedsShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) SB RIGHTSB
branch
include : Upright
include : Translate 0 (-lessEqDist)
include : Italify
save 'succeeds.narrow'
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'succeedseq' 0x2AB0
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x2AB2
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'succeedssym' 0x227F
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E9
branch
include : SucceedsShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RIGHTSB OPERATORSTROKE 1
save 'succeedseqslant' 0x227D
sketch # sym
include markset.plus
include : symWave symbolMid 1
save 'sym' 0x223C
sketch # flipsym
include markset.plus
include : symWave symbolMid (-1)
save 'flipsym' 0x223D
sketch # ident
include markset.plus
include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 1.5) OPERATORSTROKE
include : HBar SB RIGHTSB symbolMid OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 1.5) OPERATORSTROKE
save 'ident' 0x2261
sketch # iiiident
include markset.plus
include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 2.25) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 0.75) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 0.75) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 2.25) OPERATORSTROKE
save 'iiiident' 0x2263
vdual 'approx' 0x2248 'sym' approxDist
sketch # aapprox
include markset.plus
include : symWave (symbolMid + approxDist) 1
include : symWave symbolMid 1
branch
include : symWave (symbolMid - approxDist) 1
save 'aapprox' 0x224B
branch
include : HBar SB RIGHTSB (symbolMid - approxDist) OPERATORSTROKE
save 'approxBar' 0x224A
sketch # symbar
include glyphs.sym AS_BASE
include : Upright
include : Translate 0 (approxDist / 2)
include : Italify
include : HBar SB RIGHTSB (symbolMid - approxDist / 2) OPERATORSTROKE
save 'symBar' 0x2243
sketch # symBarBar
local sympShift : approxDist + equalHalfSpace * 1.5
include glyphs.sym AS_BASE
include : Upright
include : Translate 0 (sympShift / 2)
include : Italify
include : HBar SB RIGHTSB (symbolMid - sympShift / 2 + equalHalfSpace * 1.5) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - sympShift / 2) OPERATORSTROKE
save 'symBarBar' 0x2245
sketch # flipsymBarBar
local sympShift : approxDist + equalHalfSpace * 1.5
include glyphs.flipsym AS_BASE
include : Upright
include : Translate 0 (sympShift / 2)
include : Italify
include : HBar SB RIGHTSB (symbolMid - sympShift / 2 + equalHalfSpace * 1.5) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - sympShift / 2) OPERATORSTROKE
save 'flipsymBarBar' 0x224C
define [SubsetShape top bot sw] : dispiro
widths.lhs [fallback sw OPERATORSTROKE]
flat RIGHTSB top [heading LEFTWARD]
curl (SB + (top - bot) / 2) top
archv
g4 SB [mix top bot 0.5]
arcvh
flat (SB + (top - bot) / 2) bot
curl RIGHTSB bot [heading RIGHTWARD]
define [PrefixShape top bot sw] : union
VBarLeft SB bot top [fallback sw OPERATORSTROKE]
HBarTop SB RIGHTSB top [fallback sw OPERATORSTROKE]
HBarBottom SB RIGHTSB bot [fallback sw OPERATORSTROKE]
define [SupsetShape top bot sw] : glyph-construction
include : SubsetShape top bot sw
include : FlipAround MIDDLE [mix top bot 0.5]
define [SuffixShape top bot sw] : glyph-construction
include : PrefixShape top bot sw
include : FlipAround MIDDLE [mix top bot 0.5]
sketch # subst
include markset.plus
include : SubsetShape (symbolMid + dH) (symbolMid - dH)
save 'subst' 0x2282
sketch # supst
include markset.plus
include : SupsetShape (symbolMid + dH) (symbolMid - dH)
save 'supst' 0x2283
sketch # substBar
include markset.plus
include : SubsetShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist)
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'substBar' 0x2286
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x228A
branch
include : FlipAround MIDDLE (symbolMid + lessEqDist)
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'supstBar' 0x2287
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x228B
sketch # element
include markset.plus
include : SubsetShape (symbolMid + dH * 4 / 3) (symbolMid - dH * 4 / 3)
include : HBar (SB + HALFSTROKE) RIGHTSB symbolMid
save 'element' 0x2208
turned nothing 0x220B 'element' MIDDLE symbolMid
sketch # small element
include glyphs.subst AS_BASE
include : HBar (SB + HALFSTROKE) RIGHTSB symbolMid OPERATORSTROKE
save 'smallElement' 0x220A
turned nothing 0x220D 'smallElement' MIDDLE symbolMid
sketch # prefix
include markset.plus
include : PrefixShape (symbolMid + dH) (symbolMid - dH)
save 'prefix' 0x228F
sketch # suffix
include markset.plus
include : SuffixShape (symbolMid + dH) (symbolMid - dH)
save 'suffix' 0x2290
sketch # substBar
include markset.plus
include : PrefixShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist)
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'prefixBar' 0x2291
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E4
branch
include : FlipAround MIDDLE (symbolMid + lessEqDist)
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'suffixBar' 0x2292
include : BarNegator (symbolMid - dH) lessEqDist
save nothing 0x22E5
composite glyphs.element glyphs.underlineBelow [into-unicode 0x22F8]
sketch # complement
include : CShape operTop operBot OPERATORSTROKE
save 'complement' 0x2201
define [notGlyph unicode oldid top bot prop shift newid]
create-glyph [fallback newid ('not' + oldid)] : glyph-construction
if unicode : assign-unicode unicode
include glyphs.(oldid)
include : dispiro
widths.center [adviceBlackness 4]
flat ([fallback shift 0] + [mix SB RIGHTSB [fallback prop 0.25]]) [fallback bot bgopBot]
curl ([fallback shift 0] + [mix RIGHTSB SB [fallback prop 0.25]]) [fallback top bgopTop]
define [notGlyph.right unicode oldid top bot prop shift]
notGlyph unicode oldid top bot prop (-OPERATORSTROKE * 0.5)
define [notGlyph.left unicode oldid top bot prop shift]
notGlyph unicode oldid top bot prop (OPERATORSTROKE * 0.5)
do "Negations"
notGlyph 0x2260 'equal'
notGlyph 0x2262 'ident'
notGlyph 0x22AC 'vdash'
notGlyph 0x22AD 'tautology'
notGlyph.left 0x226E 'less'
notGlyph.right 0x226F 'greater'
notGlyph.left 0x2280 'precedes'
notGlyph.right 0x2281 'succeeds'
notGlyph 0x2241 'sym' [mix symbolMid bgopTop 0.75] [mix symbolMid bgopBot 0.75]
notGlyph 0x2244 'symBar' [mix symbolMid bgopTop 0.75] [mix symbolMid bgopBot 0.75]
notGlyph 0x2247 'symBarBar'
notGlyph 0x2249 'approx' [mix symbolMid bgopTop 0.75] [mix symbolMid bgopBot 0.75]
notGlyph.left 0x2284 'subst'
notGlyph.right 0x2285 'supst'
notGlyph.left 0x2288 'substBar'
notGlyph.right 0x2289 'supstBar'
notGlyph.left 0x22E2 'prefixBar'
notGlyph.right 0x22E3 'suffixBar'
notGlyph.left 0x2209 'element'
notGlyph.right 0x220C 'turnelement'
notGlyph.left 0x2270 'lesseq'
notGlyph.right 0x2271 'greatereq'
notGlyph.left 0x2274 'lesssym'
notGlyph.right 0x2275 'greatersym'
notGlyph.left 0x22E0 'precedeseqslant'
notGlyph.right 0x22E1 'succeedseqslant'
notGlyph 0x2278 'lessgreater'
notGlyph 0x2279 'greaterless'
notGlyph.right 0x2204 'exists' (CAP - DESCENDER / 2) (DESCENDER / 2) 0.4
do "Ligation glyphs"
notGlyph null 'equal.fc' nothing nothing nothing (WIDTH * 0.5) 'equal.fc.neg'
notGlyph null 'equal.fc' nothing nothing nothing (WIDTH * 1.0) 'equal.fc.neg3'
notGlyph null 'equal.fc' nothing nothing nothing (WIDTH * 1.5) 'equal.fc.neg4'
notGlyph null 'ident.fc' nothing nothing nothing (WIDTH * 0.5) 'ident.fc.neg'
notGlyph null 'ident.fc' nothing nothing nothing (WIDTH * 1.0) 'ident.fc.neg3'
notGlyph null 'ident.fc' nothing nothing nothing (WIDTH * 1.5) 'ident.fc.neg4'
do 'Large Operators'
sketch # sum
local df : DivFrame para.diversityM
set-width df.width
include : SigmaShape bgopTop bgopBot OPERATORSTROKE para.diversityM
save 'sum' 0x2211
sketch # product
local df : DivFrame para.diversityM
set-width df.width
include : PiShape bgopTop bgopBot (shrinkrate -- 0) (_fine -- OPERATORSTROKE) (div -- para.diversityM)
save 'product' 0x220F
turned 'coproduct' 0x2210 'product' (MIDDLE * para.diversityM) symbolMid
sketch # integrate
include : LongSShape bgopTop bgopBot HOOK (HOOK * 0.75) OPERATORSTROKE
save 'integrate' 0x222B
dual 'doubleintegrate' 0x222C 'integrate' (0.5 * WIDTH)
sketch
define [shape] : LongSShape bgopTop bgopBot HOOK (HOOK * 0.75) [adviceBlackness 3.75]
include [shape]
include : Translate (-WIDTH / 3) 0
include [shape]
include : Translate (-WIDTH / 3) 0
include [shape]
include : Translate (WIDTH / 3) 0
save 'tripleintegrate' 0x222D
sketch # ringintegrate
include glyphs.integrate
include : OShape (symbolMid + (RIGHTSB - SB) / 2) (symbolMid - (RIGHTSB - SB) / 2) SB RIGHTSB OPERATORSTROKE
save 'ringintegrate' 0x222E
sketch # Vee
include : dispiro
widths.center OPERATORSTROKE
flat SB bgopTop
curl MIDDLE bgopBot [heading DOWNWARD]
include : dispiro
widths.center OPERATORSTROKE
flat RIGHTSB bgopTop
curl MIDDLE bgopBot [heading DOWNWARD]
save 'Vee' 0x22C1
turned 'Wedge' 0x22C0 'Vee' MIDDLE symbolMid
sketch # Cup
include : UShape bgopTop bgopBot OPERATORSTROKE true
save 'Cup' 0x22C3
turned 'Cap' 0x22C2 'Cup' MIDDLE symbolMid
### APL
do "APL"
define aplBoxInnerTop bgopTop
define aplBoxInnerBot bgopBot
define aplBoxSW : adviceBlackness 4.5
define aplBoxTop : mix symbolMid aplBoxInnerTop 1.1
define aplBoxBot : mix symbolMid aplBoxInnerBot 1.1
define aplBoxInnerScale : Math.min ((WIDTH - aplBoxSW * 1.75) / WIDTH) ((aplBoxInnerTop - aplBoxInnerBot) / (parenTop - parenBot))
sketch # aplsquare
local l [mix 0 SB (1 / 3)]
local r [mix WIDTH RIGHTSB (1 / 3)]
include : HBarTop l r aplBoxTop aplBoxSW
include : HBarBottom l r aplBoxBot aplBoxSW
include : VBarLeft l aplBoxTop aplBoxBot aplBoxSW
include : VBarRight r aplBoxTop aplBoxBot aplBoxSW
save 'aplsquare' 0x2395
sketch # aplsquareShadow
local l [mix 0 SB (1 / 3)]
local r [mix WIDTH RIGHTSB (1 / 3)]
start-from l aplBoxTop
line-to r aplBoxTop
line-to r aplBoxBot
line-to l aplBoxBot
save 'aplsquareShadow'
sketch # aplibar
local l [mix 0 SB (1 / 3)]
local r [mix WIDTH RIGHTSB (1 / 3)]
include : HBarTop l r operTop aplBoxSW
include : HBarBottom l r operBot aplBoxSW
include : VBar MIDDLE operTop operBot aplBoxSW
save 'aplibar' 0x2336
sketch # aplsquish
local l : mix SB RIGHTSB (1 / 8)
local r : mix RIGHTSB SB (1 / 8)
include : union
HBarTop l r aplBoxTop aplBoxSW
HBarBottom l r aplBoxBot aplBoxSW
VBarLeft l aplBoxTop aplBoxBot aplBoxSW
VBarRight r aplBoxTop aplBoxBot aplBoxSW
save 'aplsquish' 0x2337
sketch # aplbar
include : VBar MIDDLE aplBoxTop aplBoxBot aplBoxSW
save 'aplbar'
sketch # aplLongBar
include : VBar MIDDLE aplBoxTop aplBoxBot aplBoxSW
save 'aplLongBar'
sketch # aplminus
include : dispiro
widths.center aplBoxSW
flat RIGHTSB [mix operTop operBot 0.5]
curl SB [mix operTop operBot 0.5]
save 'aplminus'
sketch # aplslash
include : dispiro
widths.center aplBoxSW
flat RIGHTSB operTop
curl SB operBot
save 'aplslash'
sketch # aplbackslash
include : dispiro
widths.center aplBoxSW
flat SB operTop
curl RIGHTSB operBot
save 'aplbackslash'
define [aplBoxed shape] : Overlay glyphs.aplsquare : glyph-construction
include : intersection glyphs.aplsquareShadow shape
include : ScaleAround MIDDLE symbolMid aplBoxInnerScale
composite glyphs.space [aplBoxed glyphs.equal] [into-unicode 0x2338]
composite glyphs.space [aplBoxed glyphs.divide] [into-unicode 0x2339]
composite glyphs.space [aplBoxed glyphs.'whitediamond.hwid'] [into-unicode 0x233A]
composite glyphs.space [aplBoxed glyphs.'smallwhitecircle.hwid'] [into-unicode 0x233B]
composite glyphs.space [aplBoxed glyphs.'whitecircle.hwid'] [into-unicode 0x233C]
composite glyphs.space [Overlay glyphs.aplbar glyphs.'whitecircle.hwid'] [into-unicode 0x233D]
composite glyphs.'whitecircle.hwid' glyphs.'smallwhitecircle.hwid' [into-unicode 0x233E]
composite glyphs.space [Overlay glyphs.aplminus glyphs.slash] [into-unicode 0x233F]
composite glyphs.space [Overlay glyphs.aplminus glyphs.backslash] [into-unicode 0x2340]
composite glyphs.space [aplBoxed glyphs.slash] [into-unicode 0x2341]
composite glyphs.space [aplBoxed glyphs.backslash] [into-unicode 0x2342]
composite glyphs.space [aplBoxed glyphs.less] [into-unicode 0x2343]
composite glyphs.space [aplBoxed glyphs.greater] [into-unicode 0x2344]
composite glyphs.space [Overlay glyphs."arrowleft.hwid" glyphs.aplbar] [into-unicode 0x2345]
composite glyphs.space [Overlay glyphs."arrowright.hwid" glyphs.aplbar] [into-unicode 0x2346]
composite glyphs.space [aplBoxed glyphs."arrowleft.hwid"] [into-unicode 0x2347]
composite glyphs.space [aplBoxed glyphs."arrowright.hwid"] [into-unicode 0x2348]
composite glyphs.space [Overlay glyphs.aplbackslash glyphs.'whitecircle.hwid'] [into-unicode 0x2349]
composite glyphs.bot glyphs.underlineBelow [into-unicode 0x234A]
composite glyphs.space [Overlay glyphs.increment glyphs.aplLongBar] [into-unicode 0x234B]
composite glyphs.space [aplBoxed glyphs.vee] [into-unicode 0x234C]
composite glyphs.space [aplBoxed glyphs.increment] [into-unicode 0x234D]
composite glyphs.space [Overlay glyphs."arrowup.hwid" glyphs.minus] [into-unicode 0x234F]
composite glyphs.space [aplBoxed glyphs."arrowup.hwid"] [into-unicode 0x2350]
composite glyphs.top glyphs.overlineAbove [into-unicode 0x2351]
composite glyphs.space [Overlay glyphs.nabla glyphs.aplLongBar] [into-unicode 0x2352]
composite glyphs.space [aplBoxed glyphs.wedge] [into-unicode 0x2353]
composite glyphs.space [aplBoxed glyphs.nabla] [into-unicode 0x2354]
composite glyphs.space [Overlay glyphs."arrowdown.hwid" glyphs.minus] [into-unicode 0x2356]
composite glyphs.space [aplBoxed glyphs."arrowdown.hwid"] [into-unicode 0x2357]
composite glyphs.singleQuote markset.plus glyphs.underlineBelow [into-unicode 0x2358]
composite glyphs.increment glyphs.underlineBelow [into-unicode 0x2359]
composite glyphs.'whitediamond.hwid' markset.plus glyphs.underlineBelow [into-unicode 0x235A]
composite glyphs.'smallwhitecircle.hwid' markset.plus glyphs.underlineBelow [into-unicode 0x235B]
composite glyphs.'whitecircle.hwid' markset.plus glyphs.underlineBelow [into-unicode 0x235C]
composite
begin glyphs.'smallwhitecircle.hwid'
ScaleAround MIDDLE symbolMid 0.75
Realign MIDDLE symbolMid MIDDLE (operBot + SMOOTH)
UShape operTop operBot [adviceBlackness 5] true
FlipAround MIDDLE symbolMid
into-unicode 0x235D
composite glyphs.space [aplBoxed glyphs.singleQuote] [into-unicode 0x235E]
composite glyphs.space [intersection glyphs.mathOOutline glyphs.'opAsterisk.low'] glyphs.mathO [into-unicode 0x235F]
composite glyphs.space [aplBoxed : composite glyphs.colon [Realign MIDDLE (XH/2) MIDDLE symbolMid]] [into-unicode 0x2360]
composite glyphs.top glyphs.dieresisAbove [into-unicode 0x2361]
composite glyphs.nabla glyphs.dieresisAbove [into-unicode 0x2362]
composite glyphs.'asterisk.low' glyphs.dieresisAbove [into-unicode 0x2363]
composite glyphs.'smallwhitecircle.hwid' markset.plus glyphs.dieresisAbove [into-unicode 0x2364]
composite glyphs.'whitecircle.hwid' markset.plus glyphs.dieresisAbove [into-unicode 0x2365]
composite glyphs.space [Overlay glyphs.cup glyphs.aplbar] [into-unicode 0x2366]
composite glyphs.space [Overlay glyphs.subst glyphs.aplbar] [into-unicode 0x2367]
composite glyphs.'asciitilde.low' glyphs.dieresisAbove [into-unicode 0x2368]
composite glyphs.'greater.narrow' glyphs.dieresisAbove [into-unicode 0x2369]
composite glyphs.minus glyphs.comma [into-unicode 0x236A]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.nabla] [into-unicode 0x236B]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.'zero.lnum.unslashed'] [into-unicode 0x236C]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.bar] [into-unicode 0x236D]
composite glyphs.space [Overlay glyphs.semicolon glyphs."underscore.belowBaseline"] [into-unicode 0x236E]
composite glyphs.space [aplBoxed glyphs.notequal] [into-unicode 0x236F]
composite glyphs.space [aplBoxed glyphs.question] [into-unicode 0x2370]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.vee] [into-unicode 0x2371]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.wedge] [into-unicode 0x2372]
alias 'apliota' 0x2373 'iota'
alias 'aplrho' 0x2374 'rho'
alias 'aplomega' 0x2375 'omega'
composite glyphs.alpha glyphs.underlineBelow [into-unicode 0x2376]
composite glyphs.smallElement glyphs.underlineBelow [into-unicode 0x2377]
composite glyphs.iota glyphs.underlineBelow [into-unicode 0x2378]
composite glyphs.omega glyphs.underlineBelow [into-unicode 0x2379]
alias 'aplalpha' 0x237A 'alpha'
### Others
alias 'mathbullet' 0x2219 'bullet'
alias 'mathbar' 0x2223 'bar'
notGlyph 0x2224 'mathbar' [mix symbolMid bgopTop 0.5] [mix symbolMid bgopBot 0.5] 0.1
dual 'parallel' 0x2225 'bar' (WIDTH * 0.35)
notGlyph 0x2226 'parallel' [mix symbolMid bgopTop 0.5] [mix symbolMid bgopBot 0.5] 0
alias 'mathsmallcircle' 0x2218 'smallwhitecircle.hwid'
alias 'whiteDiamondOperator' 0x22C4 'whitediamond.hwid'
alias 'mathstar' 0x22C6 'blackstar.hwid'
turned 'amalg' 0x2A3F 'Pi' MIDDLE (CAP / 2)
turned 'turnAmpersand' 0x214B 'ampersand' MIDDLE (CAP / 2)
turned nothing 0x22DC 'greatereq' MIDDLE symbolMid
turned nothing 0x22DD 'lesseq' MIDDLE symbolMid
turned nothing 0x22DE 'succeedseqslant' MIDDLE symbolMid
turned nothing 0x22DF 'precedeseqslant' MIDDLE symbolMid
sketch # sqrt
include : dispiro
widths.center OPERATORSTROKE
flat SB [mix parenBot parenTop 0.45]
curl MIDDLE parenBot [heading DOWNWARD]
include : dispiro
widths.center OPERATORSTROKE
flat WIDTH parenTop
curl MIDDLE parenBot [heading DOWNWARD]
save 'sqrt' 0x221A