436 lines
No EOL
12 KiB
Text
436 lines
No EOL
12 KiB
Text
|
|
###### ASCII SYMBOLS
|
|
|
|
### Symbols with many strokes: $ & @
|
|
|
|
create-glyph 'dollar' : glyph-construction {
|
|
set-width WIDTH; assign-unicode '$'
|
|
include glyphs.S
|
|
include : create-stroke
|
|
:.start-from MIDDLE [CAP - HALFSTROKE]
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.line-to MIDDLE [CAP - DESCENDER / 2]
|
|
include : create-stroke
|
|
:.start-from MIDDLE [DESCENDER / 2]
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.line-to MIDDLE HALFSTROKE
|
|
}
|
|
|
|
create-glyph 'ampersand' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '&'
|
|
|
|
local fine : adviceBlackness 3.5
|
|
local p 0.85
|
|
local l 0.05
|
|
local pr 0.9
|
|
local q 0.45
|
|
local r 1.1
|
|
local s 0
|
|
|
|
include : create-stroke
|
|
:.start-from [RIGHTSB - O] CAPMIDDLE
|
|
:.set-width 0 STROKE
|
|
:.heads-to DOWNWARD
|
|
:.line-to [RIGHTSB - O] SMOOTHA
|
|
:.arc-vh-to MIDDLE O
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to [SB + O] SMOOTHB
|
|
|
|
include : xsStrand [SB + O] SMOOTHB [mix SB RIGHTSB p] [CAP - SMOOTHB * pr] HALFSTROKE [fine / 2]
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB p] [CAP - SMOOTHB * pr]
|
|
:.set-width fine 0
|
|
:.arc-vh-to [mix SB RIGHTSB [mix p l 0.5]] CAPO
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to [mix SB RIGHTSB l] [CAP - SMOOTHA * pr]
|
|
|
|
include : xsStrand [mix SB RIGHTSB l] [CAP - SMOOTHA * pr] [mix SB RIGHTSB r] [SMOOTHA * s] [fine / 2] [fine / 2] null null [SMOOTHA * pr * 0.6]
|
|
|
|
}
|
|
|
|
create-glyph 'at' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '@'
|
|
|
|
local top [CAP + HALFSTROKE]
|
|
local bot [DESCENDER + HALFSTROKE]
|
|
local otop : mix bot top 0.75
|
|
local obot : mix top bot 0.8
|
|
|
|
local sw : adviceBlackness 3.5
|
|
local m1 : [mix [SB + sw] [RIGHTSB - sw] 0.47] - sw / 2
|
|
local m2 : mix m1 RIGHTSB 0.5
|
|
|
|
local sma : SMOOTHA * [[RIGHTSB - m1] / [RIGHTSB - SB]]
|
|
local smb : SMOOTHB * [[RIGHTSB - m1] / [RIGHTSB - SB]]
|
|
|
|
include : create-stroke
|
|
:.start-from RIGHTSB [otop - O]
|
|
:.heads-to LEFTWARD
|
|
:.set-width sw 0
|
|
:.line-to m2 [otop - O]
|
|
:.arc-hv-to m1 [otop - sma]
|
|
:.line-to m1 [obot + smb]
|
|
:.arc-vh-to [m2 + STROKE * globalTransform.yx] [obot + O]
|
|
:.arc-hv-to RIGHTSB [obot + sma]
|
|
:.line-to RIGHTSB [top - SMOOTHB]
|
|
:.arc-vh-to MIDDLE [top - O]
|
|
:.set-width STROKE 0
|
|
:.arc-hv-to SB [top - SMOOTHA]
|
|
:.set-width sw 0
|
|
:.line-to SB [bot + SMOOTHB]
|
|
:.arc-vh-to MIDDLE [bot + O]
|
|
:.set-width STROKE 0
|
|
:.heads-to RIGHTWARD
|
|
:.line-to [RIGHTSB - HALFSTROKE] [bot + O]
|
|
:.heads-to RIGHTWARD
|
|
:.set-samples 4
|
|
}
|
|
|
|
### Brackets
|
|
|
|
local parenTop [[XH * 0.625] + [CAP - XH] * 2.5]
|
|
local parenBot [[XH * 0.625] - [CAP - XH] * 2.5]
|
|
local parenMid [mix parenTop parenBot 0.5]
|
|
|
|
local parenOutside 0.15
|
|
local parenInside 0.65
|
|
local bracketOutside 0.15
|
|
local bracketInside 0.9
|
|
local braceOutside 0.1
|
|
local braceInside 0.9
|
|
|
|
create-glyph 'parenLeft' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '('
|
|
|
|
local p 0.6
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB parenInside] parenTop
|
|
:.set-width STROKE 0
|
|
:.curve-to [mix SB RIGHTSB parenOutside] [mix parenMid parenTop p] [mix SB RIGHTSB parenOutside] parenMid
|
|
:.curve-to [mix SB RIGHTSB parenOutside] [mix parenMid parenBot p] [mix SB RIGHTSB parenInside] parenBot
|
|
}
|
|
|
|
create-glyph 'parenRight' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode ')'
|
|
|
|
include glyphs.parenLeft
|
|
include : FlipAround MIDDLE parenMid
|
|
}
|
|
|
|
create-glyph 'bracketLeft' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '['
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB bracketOutside] parenBot
|
|
:.set-width STROKE 0
|
|
:.heads-to RIGHTWARD
|
|
:.line-to [mix SB RIGHTSB bracketInside] parenBot
|
|
:.heads-to RIGHTWARD
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB bracketOutside] parenTop
|
|
:.set-width 0 STROKE
|
|
:.heads-to RIGHTWARD
|
|
:.line-to [mix SB RIGHTSB bracketInside] parenTop
|
|
:.heads-to RIGHTWARD
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB bracketOutside] parenBot
|
|
:.set-width 0 STROKE
|
|
:.heads-to UPWARD
|
|
:.line-to [mix SB RIGHTSB bracketOutside] parenTop
|
|
:.heads-to UPWARD
|
|
}
|
|
|
|
create-glyph 'bracketRight' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode ']'
|
|
|
|
include glyphs.bracketLeft
|
|
include : FlipAround MIDDLE parenMid
|
|
}
|
|
|
|
create-glyph 'braceLeft' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '{'
|
|
|
|
local parenCenter [mix SB RIGHTSB [mix braceInside braceOutside 0.5]]
|
|
local radius : [mix SB RIGHTSB braceInside] - parenCenter
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB braceInside] [parenTop - HALFSTROKE]
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to parenCenter [parenTop - radius]
|
|
:.line-to parenCenter [parenMid + radius]
|
|
:.arc-vh-to [mix SB RIGHTSB braceOutside] parenMid
|
|
:.heads-to LEFTWARD
|
|
|
|
include : create-stroke
|
|
:.start-from [mix SB RIGHTSB braceInside] [parenBot + HALFSTROKE]
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.heads-to LEFTWARD
|
|
:.arc-hv-to parenCenter [parenBot + radius]
|
|
:.line-to parenCenter [parenMid - radius]
|
|
:.arc-vh-to [mix SB RIGHTSB braceOutside] parenMid
|
|
:.heads-to LEFTWARD
|
|
}
|
|
|
|
create-glyph 'braceRight' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '}'
|
|
|
|
include glyphs.braceLeft
|
|
include : FlipAround MIDDLE parenMid
|
|
}
|
|
|
|
### Symbols with dots: period, comma, colon, semicolon
|
|
|
|
create-glyph 'period' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '.'
|
|
|
|
include : list : Ring [PERIODSIZE - O] O [MIDDLE - PERIODRADIUS + O] [MIDDLE + PERIODRADIUS - O]
|
|
}
|
|
|
|
create-glyph 'xhdot' : glyph-construction {
|
|
set-width WIDTH
|
|
include : list : Ring [XH - O] [XH - PERIODSIZE + O] [MIDDLE - PERIODRADIUS + O] [MIDDLE + PERIODRADIUS - O]
|
|
}
|
|
|
|
create-glyph 'comma' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode ','
|
|
include glyphs.period
|
|
|
|
local sw : PERIODSIZE * 0.5
|
|
include : create-stroke
|
|
:.start-from [MIDDLE + PERIODRADIUS - O] [mix O [PERIODSIZE - O] 0.5]
|
|
:.set-width 0 sw
|
|
:.curve-to [MIDDLE + PERIODRADIUS - O] [mix [mix O [PERIODSIZE - O] 0.5] DESCENDER 0.5] [mix MIDDLE [MIDDLE - PERIODRADIUS] 0.3] DESCENDER
|
|
}
|
|
create-glyph 'invertComma' : glyph-construction {
|
|
set-width WIDTH
|
|
include glyphs.period
|
|
|
|
local sw : PERIODSIZE * 0.5
|
|
include : create-stroke
|
|
:.start-from [MIDDLE - PERIODRADIUS + O] [mix O [PERIODSIZE - O] 0.5]
|
|
:.set-width sw 0
|
|
:.curve-to [MIDDLE - PERIODRADIUS + O] [mix [mix O [PERIODSIZE - O] 0.5] DESCENDER 0.5] [mix MIDDLE [MIDDLE + PERIODRADIUS] 0.3] DESCENDER
|
|
}
|
|
|
|
|
|
create-glyph 'colon' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode ':'
|
|
include glyphs.period
|
|
include glyphs.xhdot
|
|
}
|
|
create-glyph 'semicolon' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode ';'
|
|
include glyphs.comma
|
|
include glyphs.xhdot
|
|
}
|
|
|
|
create-glyph 'question' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '?'
|
|
include : xsStrand [MIDDLE - HALFSTROKE] [mix [DOTSIZE + STROKE] [XH / 2] 0.5] RIGHTSB [CAP - SMOOTHB]
|
|
include : twoHookUpper CAP SMOOTHB HOOK
|
|
include : list : Ring [DOTSIZE - O] O [MIDDLE - DOTRADIUS + O] [MIDDLE + DOTRADIUS - O]
|
|
}
|
|
create-glyph 'exclam' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '!'
|
|
include : create-stroke
|
|
:.start-from MIDDLE CAP
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.heads-to DOWNWARD
|
|
:.line-to MIDDLE [mix [DOTSIZE + STROKE] [XH / 2] 0.5]
|
|
:.heads-to DOWNWARD
|
|
include : list : Ring [DOTSIZE - O] O [MIDDLE - DOTRADIUS + O] [MIDDLE + DOTRADIUS - O]
|
|
}
|
|
|
|
### Symbols with bars
|
|
|
|
create-glyph 'underscore' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '_'
|
|
|
|
include : create-stroke
|
|
:.start-from SB 0
|
|
:.heads-to RIGHTWARD
|
|
:.set-width STROKE 0
|
|
:.line-to RIGHTSB 0
|
|
:.heads-to RIGHTWARD
|
|
}
|
|
|
|
create-glyph 'hyphen' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '-'
|
|
|
|
include : HBar SB RIGHTSB parenMid
|
|
}
|
|
create-glyph 'plus' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '+'
|
|
|
|
include : HBar SB RIGHTSB parenMid OPERATORSTROKE
|
|
include : VBar MIDDLE [parenMid - [RIGHTSB - SB] * 0.55] [parenMid + [RIGHTSB - SB] * 0.55] OPERATORSTROKE
|
|
}
|
|
local equalHalfSpace : [parenTop - parenBot] * 0.11
|
|
create-glyph 'equal' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '='
|
|
|
|
include : HBar SB RIGHTSB [parenMid + equalHalfSpace] OPERATORSTROKE
|
|
include : HBar SB RIGHTSB [parenMid - equalHalfSpace] OPERATORSTROKE
|
|
}
|
|
create-glyph 'bar' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '|'
|
|
include : create-stroke
|
|
:.start-from MIDDLE parenTop
|
|
:.heads-to DOWNWARD
|
|
:.set-width [STROKE / 2] [STROKE / 2]
|
|
:.line-to MIDDLE parenBot
|
|
:.heads-to DOWNWARD
|
|
}
|
|
create-glyph 'slash' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '/'
|
|
|
|
local cor : 1 / [Math.sqrt [1 - [Math.pow [[RIGHTSB - SB - STROKE] / [parenTop - parenBot]] 2]]]
|
|
|
|
start-from SB parenBot
|
|
line-to [SB + STROKE * cor] parenBot
|
|
line-to RIGHTSB parenTop
|
|
line-to [RIGHTSB - STROKE * cor] parenTop
|
|
reverse-last
|
|
}
|
|
create-glyph 'backslash' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode "\\"
|
|
|
|
local cor : 1 / [Math.sqrt [1 - [Math.pow [[RIGHTSB - SB - STROKE] / [parenTop - parenBot]] 2]]]
|
|
|
|
start-from SB parenTop
|
|
line-to [SB + STROKE * cor] parenTop
|
|
line-to RIGHTSB parenBot
|
|
line-to [RIGHTSB - STROKE * cor] parenBot
|
|
reverse-last
|
|
}
|
|
create-glyph 'numbersign' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '#'
|
|
|
|
local fine : adviceBlackness 4
|
|
|
|
include : HBar SB RIGHTSB [mix parenTop parenBot 0.33]
|
|
include : HBar SB RIGHTSB [mix parenTop parenBot 0.67]
|
|
include : VBar [mix SB RIGHTSB 0.3] [parenBot + fine] [parenTop - fine] fine
|
|
include : VBar [mix SB RIGHTSB 0.7] [parenBot + fine] [parenTop - fine] fine
|
|
}
|
|
|
|
create-glyph 'less' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '<'
|
|
|
|
local top : mix parenMid parenTop 0.5
|
|
local bot : mix parenMid parenBot 0.5
|
|
|
|
include : create-stroke
|
|
:.start-from RIGHTSB top
|
|
:.set-width [OPERATORSTROKE / 2] [OPERATORSTROKE / 2]
|
|
:.line-to SB [mix top bot 0.5]
|
|
:.heads-to LEFTWARD
|
|
:.set-samples 1
|
|
|
|
include : create-stroke
|
|
:.start-from SB [mix top bot 0.5]
|
|
:.set-width [OPERATORSTROKE / 2] [OPERATORSTROKE / 2]
|
|
:.heads-to RIGHTWARD
|
|
:.line-to RIGHTSB bot
|
|
:.set-samples 1
|
|
}
|
|
|
|
create-glyph 'greater' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '>'
|
|
|
|
local top : mix 0 CAP 0.75
|
|
local bot : mix 0 CAP 0.1
|
|
|
|
include glyphs.less
|
|
include : FlipAround MIDDLE parenMid
|
|
}
|
|
|
|
### Overmarks
|
|
local quoteTop [CAP * 1.05]
|
|
local quoteBottom [XH * 0.85]
|
|
create-glyph 'singleQuote' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode 0x27
|
|
|
|
include : create-stroke
|
|
:.start-from MIDDLE quoteTop
|
|
:.heads-to DOWNWARD
|
|
:.set-width [HALFSTROKE * 1.2] [HALFSTROKE * 1.2]
|
|
:.line-to MIDDLE quoteBottom
|
|
:.set-width HALFSTROKE HALFSTROKE
|
|
:.heads-to DOWNWARD
|
|
}
|
|
create-glyph 'doubleQuote' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode 0x22
|
|
|
|
local dist : 0.2 * WIDTH
|
|
include glyphs.singleQuote
|
|
apply-transform : Translate [-dist * 2] 0
|
|
include glyphs.singleQuote
|
|
apply-transform : Translate dist 0
|
|
}
|
|
|
|
### Asterisk
|
|
create-glyph 'asterisk' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '*'
|
|
|
|
local radius : LONGJUT * 1.2
|
|
local centery : parenTop - LONGJUT * 1.5
|
|
local fine : STROKE * 0.4
|
|
local final : 0.5 * [Math.min STROKE [radius * Math.PI * 2 / 10]]
|
|
|
|
foreach j [range 0 5] : begin {
|
|
include : create-stroke
|
|
:.start-from MIDDLE centery
|
|
:.set-width fine fine
|
|
:.line-to [MIDDLE + radius * [Math.sin [j / 5 * Math.PI * 2]]] [centery + radius * [Math.cos [j / 5 * Math.PI * 2]]]
|
|
:.set-width final final
|
|
:.set-samples 1
|
|
}
|
|
}
|
|
|
|
create-glyph 'percent' : glyph-construction {
|
|
set-width WIDTH
|
|
assign-unicode '%'
|
|
local dotwidth [[adviceBlackness 4] * 1.5]
|
|
local cor : 1 / [Math.sqrt [1 - [Math.pow [[RIGHTSB - SB - STROKE] / [CAP - 0]] 2]]]
|
|
|
|
start-from SB 0
|
|
line-to [SB + STROKE * cor] 0
|
|
line-to RIGHTSB CAP
|
|
line-to [RIGHTSB - STROKE * cor] CAP
|
|
|
|
include : VBarLeft SB [mix CAP 0 0.3] CAP dotwidth
|
|
include : VBarRight RIGHTSB 0 [mix 0 CAP 0.3] dotwidth
|
|
} |