Files
Iosevka/glyphs/symbol-math.ptl
T
2019-08-05 04:27:07 -07:00

1026 lines
40 KiB
Plaintext

###### 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 para.straightBar
eject-contour 'serif'
include : intersection
DeltaMaskShape CAP OPERATORSTROKE para.straightBar
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 para.straightBar
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 this
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 this
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.hwwhitecircle
save 'mathO'
sketch # mathO-outline
include glyphs.hwblackcircleO
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
sketch # minus.preTurnstile
include markset.plus
include : HBar (-SB) RIGHTSB symbolMid OPERATORSTROKE
save 'ligminus.preTurnstile'
save 'lighyphen.preTurnstile'
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) *1.25 * designParameters.equal_wideness
do "Equality"
sketch # equal
include markset.plus
include : HBar SB RIGHTSB (symbolMid + equalHalfSpace) OPERATORSTROKE
include : HBar SB RIGHTSB (symbolMid - equalHalfSpace) OPERATORSTROKE
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
define [equalHole x] : VBar x (symbolMid - equalHalfSpace) (symbolMid + equalHalfSpace) [adviceBlackness 6]
# Ligation glyphs
sketch # equal.fc
include markset.plus
include : difference
union
HBar SB (WIDTH - O) (symbolMid + equalHalfSpace) OPERATORSTROKE
HBar SB (WIDTH - O) (symbolMid - equalHalfSpace) OPERATORSTROKE
equalHole WIDTH
save 'equal.fc'
sketch # equal.cf
include markset.plus
include : difference
union
HBar O RIGHTSB (symbolMid + equalHalfSpace) OPERATORSTROKE
HBar O RIGHTSB (symbolMid - equalHalfSpace) OPERATORSTROKE
equalHole 0
save 'equal.cf'
sketch # equal.jf
include markset.plus
include : difference
union
HBar (RIGHTSB - WIDTH + O) RIGHTSB (symbolMid + equalHalfSpace) OPERATORSTROKE
HBar (RIGHTSB - WIDTH + O) RIGHTSB (symbolMid - equalHalfSpace) OPERATORSTROKE
equalHole 0
save 'equal.jf'
sketch # equal.cc
include markset.plus
include : difference
union
HBar O (WIDTH - O) (symbolMid + equalHalfSpace) OPERATORSTROKE
HBar O (WIDTH - O) (symbolMid - equalHalfSpace) OPERATORSTROKE
union
equalHole 0
equalHole WIDTH
save 'equal.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.hwsmallwhitecircle] [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
curl MIDDLE operBot [heading DOWNWARD]
include : dispiro
widths.center OPERATORSTROKE
flat RIGHTSB operTop
curl MIDDLE operBot [heading DOWNWARD]
save 'vee' 0x2228
turned 'wedge' 0x2227 'vee' MIDDLE symbolMid
sketch # cup
include : UShape operTop operBot OPERATORSTROKE true
save 'cup' 0x222A
turned 'cap' 0x2229 'cup' 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
do "Comparison"
# Less and Greater
define lessSlantness : (1 / 4) * (operTop - operBot) / (RIGHTSB - SB)
define dH : lessSlantness * (RIGHTSB - SB)
define lessEqDist : Math.max [adviceBlackness 4] (XH * 0.1)
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] : glyph-construction
include : LessShapeA top bot l r [fallback s OPERATORSTROKE]
include : LessShapeB top bot l r [fallback s OPERATORSTROKE]
define [GreaterShape top bot l r s] : glyph-construction
include : GreaterShapeA top bot l r [fallback s OPERATORSTROKE]
include : 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
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
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'lesssym' 0x2272
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
branch
include : symWave (symbolMid - dH - lessEqDist) 1
save 'greatersym' 0x2273
branch
include : GreaterShapeB (symbolMid + dH - lessEqDist) (symbolMid - dH - lessEqDist) SB RIGHTSB OPERATORSTROKE
save 'greatereqslant' 0x2A7E
# Ligation
sketch
local l : 0.3 * WIDTH
local r : 2 * WIDTH - l
include markset.plus
branch
include : LessShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) l r
save 'less.lig2'
branch
include : HBar (l - WIDTH) (r - WIDTH) (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'eq.at-ltgteq.lig2'
branch
include : GreaterShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist) l r
save 'greater.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
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 [SupsetShape top bot] : glyph-construction
include : SubsetShape top bot
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
local swo : Math.max (OPERATORSTROKE * 1.5) (lessEqDist * 1.5)
include markset.plus
include : SubsetShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist)
branch
save 'smallSubst'
branch
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'substBar' 0x2286
include : dispiro
widths.center OPERATORSTROKE
flat (MIDDLE + lessEqDist) (symbolMid - dH - lessEqDist + swo) [heading DOWNWARD]
flat (MIDDLE - lessEqDist) (symbolMid - dH - lessEqDist - swo) [heading DOWNWARD]
save nothing 0x228A
branch
include : FlipAround MIDDLE (symbolMid + lessEqDist)
include : HBar SB RIGHTSB (symbolMid - dH - lessEqDist) OPERATORSTROKE
save 'supstBar' 0x2287
include : dispiro
widths.center OPERATORSTROKE
flat (MIDDLE + lessEqDist) (symbolMid - dH - lessEqDist + swo) [heading DOWNWARD]
flat (MIDDLE - lessEqDist) (symbolMid - dH - lessEqDist - swo) [heading DOWNWARD]
save nothing 0x228B
sketch # element
include glyphs.subst AS_BASE
include : HBar (SB + HALFSTROKE) RIGHTSB symbolMid OPERATORSTROKE
save 'element' 0x2208
turned nothing 0x220B 'element' MIDDLE symbolMid
sketch # small element
include markset.plus
define sw : Math.min (dH * 4 / (3 * 5)) OPERATORSTROKE
include : SubsetShape (symbolMid + dH * 2 / 3) (symbolMid - dH * 2 / 3) sw
include : HBar (SB + HALFSTROKE) RIGHTSB symbolMid sw
save 'smallElement' 0x220A
sketch # element-with bar
include markset.plus
include : SubsetShape (symbolMid + dH + lessEqDist) (symbolMid - dH + lessEqDist)
include : HBar (SB + HALFSTROKE) RIGHTSB (symbolMid + lessEqDist) OPERATORSTROKE
save 'elementBar' 0x22F8
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 operBot]
curl ([fallback shift 0] + [mix RIGHTSB SB [fallback prop 0.25]]) [fallback top operTop]
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 0x2241 'sym' [mix symbolMid operTop 0.75] [mix symbolMid operBot 0.75]
notGlyph 0x2244 'symBar' [mix symbolMid operTop 0.75] [mix symbolMid operBot 0.75]
notGlyph 0x2247 'symBarBar'
notGlyph 0x2249 'approx' [mix symbolMid operTop 0.75] [mix symbolMid operBot 0.75]
notGlyph.left 0x2284 'subst'
notGlyph.right 0x2285 'supst'
notGlyph.left 0x2288 'substBar'
notGlyph.right 0x2289 'supstBar'
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 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'
do 'Large Operators'
define largeOperTop : mix symbolMid operTop 1.25
define largeOperBot : mix symbolMid operBot 1.25
sketch # sum
local df : DivFrame para.diversityM
set-width df.width
include : SigmaShape largeOperTop largeOperBot OPERATORSTROKE para.diversityM
save 'sum' 0x2211
sketch # product
local df : DivFrame para.diversityM
set-width df.width
include : PiShape largeOperTop largeOperBot (shrinkrate -- 0) (_fine -- OPERATORSTROKE) (div -- para.diversityM)
save 'product' 0x220F
turned 'coproduct' 0x2210 'product' (MIDDLE * para.diversityM) symbolMid
sketch # integrate
include : LongSShape largeOperTop largeOperBot HOOK (HOOK * 0.75) OPERATORSTROKE
save 'integrate' 0x222B
dual 'doubleintegrate' 0x222C 'integrate' (0.5 * WIDTH)
sketch
define [shape] : LongSShape largeOperTop largeOperBot 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 largeOperTop
curl MIDDLE largeOperBot [heading DOWNWARD]
include : dispiro
widths.center OPERATORSTROKE
flat RIGHTSB largeOperTop
curl MIDDLE largeOperBot [heading DOWNWARD]
save 'Vee' 0x22C1
turned 'Wedge' 0x22C0 'Vee' MIDDLE symbolMid
sketch # Cup
include : UShape largeOperTop largeOperBot OPERATORSTROKE true
save 'Cup' 0x22C3
turned 'Cap' 0x22C2 'Cup' MIDDLE symbolMid
### APL
do "APL"
local aplBoxSW : adviceBlackness 4.5
local aplBoxTop : mix symbolMid operTop 1.1
local aplBoxBot : mix symbolMid operBot 1.1
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 SB
local r RIGHTSB
include : HBarTop l r operTop aplBoxSW
include : HBarBottom l r operBot aplBoxSW
include : VBarLeft l operTop operBot aplBoxSW
include : VBarRight r operTop operBot aplBoxSW
save 'aplsquish' 0x2337
sketch # aplbar
include : VBar MIDDLE parenTop parenBot aplBoxSW
save 'aplbar'
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 [Math.min ((WIDTH - aplBoxSW * 1.75) / WIDTH) ((operTop - operBot) / (parenTop - parenBot))]
composite glyphs.space [aplBoxed glyphs.equal] [into-unicode 0x2338]
composite glyphs.space [aplBoxed glyphs.divide] [into-unicode 0x2339]
composite glyphs.space [aplBoxed glyphs.hwwhitediamond] [into-unicode 0x233A]
composite glyphs.space [aplBoxed glyphs.hwsmallwhitecircle] [into-unicode 0x233B]
composite glyphs.space [aplBoxed glyphs.hwwhitecircle] [into-unicode 0x233C]
composite glyphs.space [Overlay glyphs.aplbar glyphs.hwwhitecircle] [into-unicode 0x233D]
composite glyphs.hwwhitecircle glyphs.hwsmallwhitecircle [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.hwarrowleft glyphs.aplbar] [into-unicode 0x2345]
composite glyphs.space [Overlay glyphs.hwarrowright glyphs.aplbar] [into-unicode 0x2346]
composite glyphs.space [aplBoxed glyphs.hwarrowleft] [into-unicode 0x2347]
composite glyphs.space [aplBoxed glyphs.hwarrowright] [into-unicode 0x2348]
composite glyphs.space [Overlay glyphs.aplbackslash glyphs.hwwhitecircle] [into-unicode 0x2349]
composite glyphs.bot glyphs.underlineBelow [into-unicode 0x234A]
composite glyphs.space [Overlay glyphs.increment glyphs.aplbar] [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.hwarrowup glyphs.minus] [into-unicode 0x234F]
composite glyphs.space [aplBoxed glyphs.hwarrowup] [into-unicode 0x2350]
composite glyphs.top glyphs.overlineAbove [into-unicode 0x2351]
composite glyphs.space [Overlay glyphs.nabla glyphs.aplbar] [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.hwarrowdown glyphs.minus] [into-unicode 0x2356]
composite glyphs.space [aplBoxed glyphs.hwarrowdown] [into-unicode 0x2357]
composite glyphs.singleQuote markset.plus glyphs.underlineBelow [into-unicode 0x2358]
composite glyphs.increment glyphs.underlineBelow [into-unicode 0x2359]
composite glyphs.hwwhitediamond markset.plus glyphs.underlineBelow [into-unicode 0x235A]
composite glyphs.hwsmallwhitecircle markset.plus glyphs.underlineBelow [into-unicode 0x235B]
composite glyphs.hwwhitecircle markset.plus glyphs.underlineBelow [into-unicode 0x235C]
composite
begin glyphs.hwsmallwhitecircle
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.hwsmallwhitecircle markset.plus glyphs.dieresisAbove [into-unicode 0x2364]
composite glyphs.hwwhitecircle 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.unslashed'] [into-unicode 0x236C]
composite glyphs.space [Overlay glyphs.overlaytilde glyphs.bar] [into-unicode 0x236D]
composite [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.epsilon 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 operTop 0.5] [mix symbolMid operBot 0.5] 0.1
dual 'parallel' 0x2225 'bar' (WIDTH * 0.35)
notGlyph 0x2226 'parallel' [mix symbolMid operTop 0.5] [mix symbolMid operBot 0.5] 0
alias 'mathsmallcircle' 0x2218 'hwsmallwhitecircle'
alias 'mathstar' 0x22C6 'hwblackstar'
turned 'amalg' 0x2A3F 'Pi' MIDDLE (CAP / 2)
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