1275 lines
47 KiB
Text
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
|