mirror of
https://github.com/be5invis/Iosevka.git
synced 2026-10-28 08:28:01 +00:00
1310 lines
45 KiB
Plaintext
1310 lines
45 KiB
Plaintext
$$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
|
|
|
|
### Combining marks
|
|
local markExtend (ACCENTX * 0.5)
|
|
local markHalfStroke : 0.5 * [adviceBlackness 3.375]
|
|
local markStress : markHalfStroke * 1.1
|
|
local markFine : markHalfStroke * 0.9
|
|
|
|
local markMiddle (-MIDDLE)
|
|
local markDotsRadius : DOTRADIUS * [Math.min 1 (markStress / HALFSTROKE)]
|
|
|
|
local aboveMarkTop (XH + ACCENT * 1.38)
|
|
local aboveMarkBot (XH + ACCENT * 0.35)
|
|
local aboveMarkMid [mix aboveMarkBot aboveMarkTop 0.5]
|
|
|
|
local belowMarkBot (0 - ACCENT * 1.38)
|
|
local belowMarkTop (0 - ACCENT * 0.35)
|
|
|
|
local commaOvershoot : O * [linreg 16 0 90 (-1) (markHalfStroke * 2)]
|
|
local commaOvershoot2 : O * [linreg 16 1 90 (-1) (markHalfStroke * 2)]
|
|
local commaAboveRadius : 0.85 * DOTRADIUS * markHalfStroke / HALFSTROKE
|
|
|
|
local asciiMarkZoom : (RIGHTSB - SB) / (markExtend * 3)
|
|
|
|
### Above marks
|
|
sketch # dotAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'dot'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : Ring (XH + ACCENT + DOTRADIUS) (XH + ACCENT - DOTRADIUS) (markMiddle - DOTRADIUS) (markMiddle + DOTRADIUS) true
|
|
|
|
save 'dotAbove' 0x307
|
|
|
|
sketch # dieresisAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'dieresis'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : Ring (XH + ACCENT + markDotsRadius) (XH + ACCENT - markDotsRadius) (markMiddle - markDotsRadius - markExtend) (markMiddle + markDotsRadius - markExtend) true
|
|
include : Ring (XH + ACCENT + markDotsRadius) (XH + ACCENT - markDotsRadius) (markMiddle - markDotsRadius + markExtend) (markMiddle + markDotsRadius + markExtend) true
|
|
|
|
save 'dieresisAbove' 0x308
|
|
|
|
sketch # ringAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'ring'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local radiusIn : ACCENT * 0.24
|
|
local radiusOut : radiusIn + markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)]
|
|
include : Ring (XH + ACCENT + radiusOut) (XH + ACCENT - radiusOut) (markMiddle - radiusOut) (markMiddle + radiusOut) true
|
|
include : Ring (XH + ACCENT + radiusIn) (XH + ACCENT - radiusIn) (markMiddle - radiusIn) (markMiddle + radiusIn) true
|
|
reverse-last
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (-markFine * 0.75)
|
|
apply-transform : Italify
|
|
|
|
save 'ringAbove' 0x30A
|
|
|
|
local g [branch]
|
|
branch
|
|
set currentGlyph.anchors {.}
|
|
local k : 2 * (radiusOut - (radiusOut - radiusIn) * 0.25)
|
|
apply-transform : Translate k 0
|
|
include g
|
|
include : Translate (-k / 2) 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
save 'dblRingAbove' 0x1AB2
|
|
|
|
sketch # graveAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'grave'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (markMiddle - markExtend) aboveMarkTop [widths markStress markStress]
|
|
|
|
save 'graveAbove' 0x300
|
|
|
|
sketch # asciigrave
|
|
include : dispiro
|
|
flat (MIDDLE + HALFSTROKE * 1.1 * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] [widths.center : STROKE * 0.9]
|
|
curl (MIDDLE - markExtend * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] [widths.center : STROKE * 1.1]
|
|
|
|
save 'asciigrave' '`'
|
|
|
|
sketch # acuteAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'acute'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (markMiddle + markExtend) aboveMarkTop [widths markStress markStress]
|
|
|
|
save 'acuteAbove' 0x301
|
|
|
|
sketch # latin1acute
|
|
include : dispiro
|
|
flat (MIDDLE - HALFSTROKE * 1.1 * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] [widths.center : STROKE * 0.9]
|
|
curl (MIDDLE + markExtend * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] [widths.center : STROKE * 1.1]
|
|
|
|
save 'latin1acute' 0xB4
|
|
|
|
sketch # circumflexAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'circum'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
|
|
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
|
|
include : dispiro
|
|
flat (markMiddle + markExtend + markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
|
|
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
|
|
save 'circumflexAbove' 0x302
|
|
sketch # bardownAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : dispiro
|
|
widths.rhs (markHalfStroke * 2)
|
|
flat (markMiddle - markExtend * 1.5) (aboveMarkTop + markFine * 0.7)
|
|
curl (markMiddle + markStress * HVCONTRAST) (aboveMarkTop + markFine * 0.7)
|
|
include : dispiro
|
|
flat (markMiddle + markExtend + markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
|
|
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
|
|
save 'bardownAbove' 0x1DC6
|
|
sketch # upbarAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
|
|
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
|
|
include : dispiro
|
|
widths.rhs (markHalfStroke * 2)
|
|
flat (markMiddle - markStress * HVCONTRAST) (aboveMarkTop + markFine * 0.7)
|
|
curl (markMiddle + markExtend * 1.5) (aboveMarkTop + markFine * 0.7)
|
|
save 'upbarAbove' 0x1DC7
|
|
|
|
sketch # asciicaret
|
|
include : dispiro
|
|
flat (MIDDLE - markExtend * asciiMarkZoom - HALFSTROKE) ([mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] + HALFSTROKE * 0.1) [widths.center : STROKE * 1.05]
|
|
curl MIDDLE ([mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] + HALFSTROKE * 0.5) [heading UPWARD]
|
|
include : dispiro
|
|
flat (MIDDLE + markExtend * asciiMarkZoom + HALFSTROKE) ([mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] + HALFSTROKE * 0.1) [widths.center : STROKE * 1.05]
|
|
curl MIDDLE ([mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] + HALFSTROKE * 0.5) [heading UPWARD]
|
|
save 'asciicaret.high'
|
|
|
|
sketch # caronAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'caron'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress]
|
|
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
|
|
include : dispiro
|
|
flat (markMiddle + markExtend + markStress) aboveMarkTop [widths markStress markStress]
|
|
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
|
|
save 'caronAbove' 0x30c
|
|
sketch # barupAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : dispiro
|
|
widths.lhs (markHalfStroke * 2)
|
|
flat (markMiddle - markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress)
|
|
curl (markMiddle + markStress * HVCONTRAST) (aboveMarkBot - markFine * 1.7 + markStress)
|
|
include : dispiro
|
|
flat (markMiddle + markExtend + markStress) aboveMarkTop [widths markStress markStress]
|
|
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
|
|
save 'barupAbove' 0x1DC4
|
|
sketch # downbarAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : dispiro
|
|
flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress]
|
|
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
|
|
include : dispiro
|
|
widths.lhs (markHalfStroke * 2)
|
|
flat (markMiddle - markStress * HVCONTRAST) (aboveMarkBot - markFine * 1.7 + markStress)
|
|
curl (markMiddle + markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress)
|
|
save 'downbarAbove' 0x1DC5
|
|
|
|
define [TildeShape] : params [ttop tbot leftEnd rightEnd hs] : glyph-construction
|
|
local fine : hs * 8 / 9
|
|
local hsvh : hs * 2 / [Math.abs (ttop - tbot)]
|
|
local hvc : (rightEnd - leftEnd) / [Math.abs (ttop - tbot)]
|
|
local defaultHvc : markExtend * 3 / (aboveMarkTop - aboveMarkBot - markFine / 2)
|
|
|
|
local hsvhThin 0.116
|
|
local hsvhHeav 0.732
|
|
local tildeWave : [linreg hsvhThin 2.925 hsvhHeav 2.375 hsvh] * [linreg defaultHvc 1 4.35 1.1 hvc]
|
|
local tildeWaveX 0.51
|
|
|
|
include : dispiro
|
|
widths.center (hs * 2 / CONTRAST)
|
|
g2 leftEnd tbot
|
|
bezcontrols.absolute
|
|
* [mix leftEnd rightEnd tildeWaveX]; * [mix tbot ttop tildeWave]
|
|
* [mix leftEnd rightEnd (1 - tildeWaveX)]; * [mix tbot ttop (1 - tildeWave)]
|
|
* 256; * important; * g2
|
|
g2 rightEnd ttop
|
|
|
|
sketch # tildeAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'tilde'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : TildeShape
|
|
ttop -- aboveMarkTop
|
|
tbot -- aboveMarkBot + markFine / 2
|
|
leftEnd -- (markMiddle - markExtend * 1.5)
|
|
rightEnd -- (markMiddle + markExtend * 1.5)
|
|
hs -- markHalfStroke
|
|
save 'tildeAbove' 0x303
|
|
|
|
sketch # asciitilde.high
|
|
include : TildeShape
|
|
ttop -- [mix (XH + ACCENT) aboveMarkTop ((RIGHTSB - SB) / (markExtend * 3))]
|
|
tbot -- [mix (XH + ACCENT) (aboveMarkBot + markFine / 2) ((RIGHTSB - SB) / (markExtend * 3))]
|
|
leftEnd -- SB
|
|
rightEnd -- RIGHTSB
|
|
hs -- (OPERATORSTROKE / 2)
|
|
save 'asciitilde.high'
|
|
|
|
sketch # asciitilde.high
|
|
local t [mix (XH + ACCENT) aboveMarkTop ((RIGHTSB - SB) / (markExtend * 3))]
|
|
local b [mix (XH + ACCENT) (aboveMarkBot + markFine / 2) ((RIGHTSB - SB) / (markExtend * 3))]
|
|
include : TildeShape
|
|
ttop -- t
|
|
tbot -- b
|
|
leftEnd -- [mix 0 SB (1/3)]
|
|
rightEnd -- [mix WIDTH RIGHTSB (1/3)]
|
|
hs -- ([adviceBlackness 4.5] / 2)
|
|
include : Realign MIDDLE [mix t b (1/2)] MIDDLE parenMid
|
|
save 'overlaytilde'
|
|
|
|
sketch
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m [mix aboveMarkBot aboveMarkTop 0.4]
|
|
local ttop [mix m aboveMarkTop 0.7]
|
|
local tbot [mix m (aboveMarkBot + markFine / 2) 0.7]
|
|
local fine : [adviceBlackness 4.5] / 2
|
|
|
|
include : TildeShape
|
|
ttop -- ttop
|
|
tbot -- tbot
|
|
leftEnd -- (markMiddle - markExtend * 1.5)
|
|
rightEnd -- (markMiddle + markExtend * 1.5)
|
|
hs -- fine
|
|
|
|
branch
|
|
include : dispiro
|
|
widths.center (fine * 2)
|
|
flat (markMiddle + markExtend * 0.2) [mix tbot ttop 1.5]
|
|
curl (markMiddle - markExtend * 0.2) [mix ttop tbot 1.5]
|
|
save 'tildeSlashAbove' 0x34A
|
|
|
|
branch
|
|
local r : 0.75 * DOTRADIUS * fine / HALFSTROKE
|
|
include : DotAt markMiddle [mix tbot ttop 1.5] r
|
|
include : DotAt markMiddle [mix ttop tbot 1.5] r
|
|
save 'tildedotdotAbove' 0x34B
|
|
|
|
sketch
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m aboveMarkBot
|
|
local ttop [mix m aboveMarkTop 0.7]
|
|
local tbot [mix m (aboveMarkBot + markFine / 2) 0.7]
|
|
|
|
include : TildeShape
|
|
ttop -- ttop
|
|
tbot -- tbot
|
|
leftEnd -- (markMiddle - markExtend * 1.5)
|
|
rightEnd -- (markMiddle + markExtend * 1.5)
|
|
hs -- ([adviceBlackness 4.5] / 2)
|
|
local k : branch
|
|
|
|
branch
|
|
local shift : (ttop - tbot) * 1.2
|
|
set currentGlyph.anchors {.}
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 shift
|
|
apply-transform : Italify
|
|
include k
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (-0.5 * shift)
|
|
apply-transform : Italify
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
save 'dblTildeAbove' 0x34C
|
|
|
|
sketch # macronAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'macron'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd (markMiddle - markExtend * 1.5)
|
|
local rightEnd (markMiddle + markExtend * 1.5)
|
|
|
|
include : dispiro
|
|
flat leftEnd (XH + ACCENT) [widths markHalfStroke markHalfStroke]
|
|
curl rightEnd (XH + ACCENT)
|
|
|
|
save 'macronAbove' 0x304
|
|
|
|
sketch # overlineAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'overline'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (SB - WIDTH) (XH + ACCENT) [widths markHalfStroke markHalfStroke]
|
|
curl (RIGHTSB - WIDTH) (XH + ACCENT)
|
|
|
|
save 'overlineAbove' 0x305
|
|
|
|
sketch # dblOverlineAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local boxsw : Math.min (markFine * 2) ((aboveMarkTop - aboveMarkBot) / 3)
|
|
|
|
include : HBarBottom (SB - WIDTH) (RIGHTSB - WIDTH) aboveMarkBot boxsw
|
|
include : HBarTop (SB - WIDTH) (RIGHTSB - WIDTH) aboveMarkTop boxsw
|
|
|
|
save 'dblOverlineAbove' 0x33F
|
|
|
|
sketch # breveAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'breve'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd (markMiddle - markExtend * 1.2)
|
|
local rightEnd (markMiddle + markExtend * 1.2)
|
|
|
|
include : dispiro
|
|
g4.down.start leftEnd aboveMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
|
|
arcvh
|
|
g4.right.mid markMiddle (aboveMarkBot + markHalfStroke) [heading RIGHTWARD]
|
|
archv
|
|
g4.up.end rightEnd aboveMarkTop [heading UPWARD]
|
|
|
|
save 'breveAbove' 0x306
|
|
|
|
sketch # archAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'arch'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd (markMiddle - markExtend * 1.2)
|
|
local rightEnd (markMiddle + markExtend * 1.2)
|
|
|
|
include : dispiro
|
|
g4.up.start leftEnd aboveMarkBot [widths.heading markHalfStroke markHalfStroke UPWARD]
|
|
arcvh
|
|
g4.right.mid markMiddle (aboveMarkTop - markHalfStroke) [heading RIGHTWARD]
|
|
archv
|
|
g4.down.end rightEnd aboveMarkBot [heading DOWNWARD]
|
|
|
|
save 'archAbove' 0x311
|
|
|
|
sketch # hookAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'hook'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local fine : Math.min markFine ((aboveMarkTop - aboveMarkBot) * 0.2)
|
|
|
|
local hookBot (aboveMarkBot - fine / 2)
|
|
local hookTop ([mix aboveMarkBot aboveMarkTop 0.9] + fine / 2)
|
|
include : dispiro
|
|
widths.lhs (fine * 2)
|
|
flat (markMiddle - fine * HVCONTRAST) hookBot [heading RIGHTWARD]
|
|
curl (markMiddle + fine * 0.4) hookBot [heading RIGHTWARD]
|
|
archv
|
|
g4.up.mid (markMiddle + markExtend - O) [mix hookBot hookTop (SMOOTHB / (SMOOTHB + SMOOTHA))] [heading UPWARD]
|
|
arcvh
|
|
flat (markMiddle + fine * 0.4) hookTop [heading LEFTWARD]
|
|
curl (markMiddle - markExtend + fine) hookTop [heading LEFTWARD]
|
|
|
|
save 'hookAbove' 0x309
|
|
|
|
sketch # doubleGraveAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'dblgrave'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m1 : markMiddle - markExtend * 0.85
|
|
local m2 : markMiddle + markExtend * 0.85
|
|
include : dispiro
|
|
flat (m1 + markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (m1 - markExtend) aboveMarkTop [widths markStress markStress]
|
|
include : dispiro
|
|
flat (m2 + markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (m2 - markExtend) aboveMarkTop [widths markStress markStress]
|
|
|
|
save 'doubleGraveAbove' 0x30F
|
|
|
|
sketch # doubleAcuteAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'dblacute'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m1 : markMiddle - markExtend * 0.85
|
|
local m2 : markMiddle + markExtend * 0.85
|
|
include : dispiro
|
|
flat (m1 - markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (m1 + markExtend) aboveMarkTop [widths markStress markStress]
|
|
include : dispiro
|
|
flat (m2 - markStress) aboveMarkBot [widths markFine markFine]
|
|
curl (m2 + markExtend) aboveMarkTop [widths markStress markStress]
|
|
|
|
save 'doubleAcuteAbove' 0x30B
|
|
|
|
sketch # commaAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'comma'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local radius commaAboveRadius
|
|
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
|
|
include : dispiro
|
|
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
|
|
straight.down.start (markMiddle + radius) (aboveMarkTop - radius + commaOvershoot)
|
|
quadcontrols 0 0.6
|
|
g4 [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (DOTRADIUS * 0.3)
|
|
apply-transform : Italify
|
|
|
|
save 'commaAbove' 0x313
|
|
|
|
sketch # turnCommaAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'turnComma'
|
|
include glyphs.commaAbove
|
|
include : FlipAround markMiddle ([mix aboveMarkTop (aboveMarkBot - commaAboveRadius) 0.5] + (DOTRADIUS * 0.3) + commaOvershoot / 2)
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
save 'turnCommaAbove' 0x312
|
|
|
|
sketch # revCommaAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'revComma'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local radius commaAboveRadius
|
|
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
|
|
include : dispiro
|
|
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
|
|
straight.down.start (markMiddle - radius) (aboveMarkTop - radius + commaOvershoot)
|
|
quadcontrols 0 0.6
|
|
g4 [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (DOTRADIUS * 0.3)
|
|
apply-transform : Italify
|
|
|
|
save 'revCommaAbove' 0x314
|
|
|
|
sketch # barAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : VBar markMiddle aboveMarkBot aboveMarkTop (markHalfStroke * 2)
|
|
|
|
save 'barAbove' 0x30D
|
|
|
|
sketch # dblBarAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : VBar (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
|
|
include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
|
|
|
|
save 'dblBarAbove' 0x30E
|
|
|
|
sketch # bridgeAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : VBar (markMiddle - markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
|
|
include : VBar (markMiddle + markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkTop (markFine * 2)
|
|
|
|
save 'bridgeAbove' 0x346
|
|
|
|
sketch # yerikAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : dispiro
|
|
widths.center (markFine * 2)
|
|
g2 (markMiddle - markFine * 0.5) aboveMarkBot [heading UPWARD]
|
|
alsothruthem {{0.9 0.36} {0.1 0.64}} [heading UPWARD]
|
|
g2 (markMiddle + markFine * 0.5) aboveMarkTop [heading UPWARD]
|
|
|
|
save 'yerikAbove' 0x33E
|
|
|
|
sketch # candrabinduAbove
|
|
set-width 0
|
|
local fine : adviceBlackness 6.5
|
|
local yc : XH + ACCENT
|
|
local radius : Math.max (markExtend - DOTRADIUS) (fine * 1.35)
|
|
include : dispiro
|
|
widths.rhs : Math.min (markHalfStroke * 2) (fine * 1.25)
|
|
g4.down.start (markMiddle - radius) yc [heading DOWNWARD]
|
|
arcvh
|
|
g4.right.mid markMiddle (yc - radius)
|
|
archv
|
|
g4.up.end (markMiddle + radius) yc [heading UPWARD]
|
|
include : DotAt markMiddle (XH + ACCENT) fine
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (fine * 0.5)
|
|
apply-transform : Italify
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
save 'candrabinduAbove' 0x310
|
|
|
|
include : FlipAround markMiddle (XH + ACCENT)
|
|
save 'turncandrabinduAbove' 0x352
|
|
|
|
sketch # variaAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle + markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
|
|
curl (markMiddle - markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
|
|
|
|
save 'variaAbove' 0x340
|
|
|
|
sketch # oxiaAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
|
|
curl (markMiddle + markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
|
|
|
|
save 'oxiaAbove' 0x341
|
|
|
|
sketch # perispomeniAbove
|
|
set-width 0
|
|
currentGlyph.shortName = 'perisp'
|
|
include glyphs.archAbove
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
save 'perispomeniAbove' 0x342
|
|
alias 'koronisAbove' 0x343 'commaAbove'
|
|
|
|
sketch # crossAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : dispiro
|
|
flat (markMiddle - markExtend) aboveMarkTop [widths markFine markFine]
|
|
curl (markMiddle + markExtend) aboveMarkBot
|
|
include : dispiro
|
|
flat (markMiddle - markExtend) aboveMarkBot [widths markFine markFine]
|
|
curl (markMiddle + markExtend) aboveMarkTop
|
|
save 'crossAbove' 0x33D
|
|
|
|
sketch # greaterAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
local top aboveMarkTop
|
|
local bot aboveMarkBot
|
|
local exp : Math.sqrt : 1 + (top - bot) / (markExtend) * (top - bot) / (markExtend)
|
|
include : dispiro
|
|
widths.center : markFine * 2
|
|
flat (markMiddle + markExtend) top
|
|
curl (markMiddle - markExtend) [mix top bot 0.5] [widths.heading (markFine / 2 * exp) (markFine / 2 * exp) LEFTWARD]
|
|
|
|
include : dispiro
|
|
widths.center : markFine * 2
|
|
flat (markMiddle + markExtend) bot
|
|
curl (markMiddle - markExtend) [mix top bot 0.5] [widths.heading (markFine / 2 * exp) (markFine / 2 * exp) LEFTWARD]
|
|
|
|
save 'lessAbove' 0x1DFE
|
|
|
|
include : FlipAround markMiddle [mix top bot 0.5]
|
|
save 'greaterAbove' 0x350
|
|
|
|
### Below marks
|
|
sketch # cedillaBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
local fine : Math.min markHalfStroke ((belowMarkTop - belowMarkBot) * 0.25)
|
|
|
|
local cedillaTop (belowMarkTop + fine * 0.85)
|
|
local cedillaBot belowMarkBot
|
|
include : dispiro
|
|
flat (markMiddle - fine * HVCONTRAST) cedillaTop [widths.heading 0 (fine * 2) RIGHTWARD]
|
|
curl markMiddle cedillaTop [heading RIGHTWARD]
|
|
archv
|
|
g4 (markMiddle + markExtend - O) [mix cedillaTop cedillaBot 0.5] [heading DOWNWARD]
|
|
arcvh
|
|
flat markMiddle cedillaBot [heading LEFTWARD]
|
|
curl (markMiddle - markExtend) cedillaBot [heading LEFTWARD]
|
|
include : VBar markMiddle 0 (cedillaTop - fine) (fine * 2)
|
|
|
|
save 'cedillaBelow' 0x327
|
|
|
|
sketch # ogonekBelow
|
|
set-width 0
|
|
|
|
local fine : markHalfStroke * [linreg 16 1 90 0.25 (markHalfStroke * 2)]
|
|
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
|
|
local ogonekLeft : markMiddle + ogonekBot * 0.5
|
|
local ogonekRight : markMiddle + markExtend * 0.85
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : dispiro
|
|
g4.left.start markMiddle O [widths 0 (fine * 2)]
|
|
#archv
|
|
g4 ogonekLeft [mix O ogonekBot 0.5] [widths 0 ([mix fine markStress 0.75] * 2)]
|
|
#arcvh
|
|
flat (markMiddle + markExtend * 0.25) ogonekBot [widths 0 (markStress * 2)]
|
|
curl ogonekRight ogonekBot [heading RIGHTWARD]
|
|
|
|
save 'ogonekBelow' 0x328
|
|
|
|
sketch # ogonekTR
|
|
set-width 0
|
|
include glyphs.ogonekBelow
|
|
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
|
|
local ogonekRight : markMiddle + markExtend * 0.85
|
|
set-anchor 'trailing' MARK markMiddle 0 ogonekRight ogonekBot
|
|
|
|
save 'ogonekTR'
|
|
|
|
sketch # iotaBelow
|
|
set-width 0
|
|
set currentGlyph.shortName 'iota'
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
|
|
|
|
save 'iotaBelow' 0x345
|
|
|
|
sketch # iotaLF
|
|
set-width 0
|
|
set-anchor 'lf' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
|
|
|
|
save 'iotaLF'
|
|
|
|
sketch # uptackBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot (markFine * 2)
|
|
|
|
save 'uptackBelow' 0x31D
|
|
|
|
sketch # downtackBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
|
|
|
|
save 'downtackBelow' 0x31E
|
|
|
|
sketch # lefttackBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
|
|
|
|
save 'lefttackBelow' 0x318
|
|
|
|
sketch # righttackBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
|
|
|
|
save 'righttackBelow' 0x319
|
|
|
|
sketch # leftAngleBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
|
|
|
|
save 'leftAngleBelow' 0x349
|
|
|
|
sketch # plusBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
|
|
|
|
save 'plusBelow' 0x31F
|
|
|
|
sketch # minusBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
|
|
|
|
save 'minusBelow' 0x320
|
|
|
|
sketch # bridgeBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
|
|
|
|
save 'bridgeBelow' 0x32A
|
|
|
|
sketch # boxBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
local boxsw : Math.min (markFine * 2) ((belowMarkTop - belowMarkBot) / 3)
|
|
|
|
include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
|
|
include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot boxsw
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop boxsw
|
|
|
|
save 'boxBelow' 0x33B
|
|
|
|
sketch # equalBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
local boxsw : Math.min (markFine * 2) ((belowMarkTop - belowMarkBot) / 3)
|
|
|
|
include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot boxsw
|
|
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop boxsw
|
|
|
|
save 'equalBelow' 0x347
|
|
|
|
sketch # dblBreveBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
local extend : (belowMarkTop - belowMarkBot - markHalfStroke) * 1.25
|
|
|
|
include : dispiro
|
|
g4.down.start (markMiddle - extend) belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
|
|
arcvh
|
|
g4.right.mid [mix markMiddle (markMiddle - extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
|
|
archv
|
|
g4.up.end markMiddle belowMarkTop [heading UPWARD]
|
|
include : dispiro
|
|
g4.down.start markMiddle belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
|
|
arcvh
|
|
g4.right.mid [mix markMiddle (markMiddle + extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
|
|
archv
|
|
g4.up.end (markMiddle + extend) belowMarkTop [heading UPWARD]
|
|
|
|
save 'dblBreveBelow' 0x32B
|
|
|
|
sketch # dblArchBelow
|
|
set-width 0
|
|
include glyphs.dblBreveBelow
|
|
include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
save 'dblArchBelow' 0x33C
|
|
|
|
sketch # leftHalfCircleBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include : dispiro
|
|
g4.left.start markMiddle belowMarkTop [widths.heading markFine markFine LEFTWARD]
|
|
archv
|
|
g4.down.mid (markMiddle - (belowMarkTop - belowMarkBot) / 2) [mix belowMarkTop belowMarkBot 0.5] [heading DOWNWARD]
|
|
arcvh
|
|
g4.right.end markMiddle belowMarkBot [heading RIGHTWARD]
|
|
apply-transform : Translate ((belowMarkTop - belowMarkBot) / 4) 0
|
|
|
|
save 'leftHalfCircleBelow' 0x31C
|
|
|
|
sketch # rightHalfCircleBelow
|
|
set-width 0
|
|
include glyphs.leftHalfCircleBelow
|
|
include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
save 'rightHalfCircleBelow' 0x339
|
|
|
|
sketch # leftHalfCircleAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include glyphs.rightHalfCircleBelow
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'leftHalfCircleAbove' 0x351
|
|
|
|
sketch # rightHalfCircleAbove
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include glyphs.leftHalfCircleBelow
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'rightHalfCircleAbove' 0x357
|
|
# Turned below marks
|
|
sketch # graveBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.graveAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'graveBelow' 0x316
|
|
|
|
sketch # acuteBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.acuteAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'acuteBelow' 0x317
|
|
|
|
sketch # dotBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.dotAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'dotBelow' 0x323
|
|
|
|
sketch # dieresisBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.dieresisAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'dieresisBelow' 0x324
|
|
|
|
sketch # tildeBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.tildeAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'tildeBelow' 0x330
|
|
|
|
sketch # ringBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.ringAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'ringBelow' 0x325
|
|
|
|
sketch # macronBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.macronAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'macronBelow' 0x331
|
|
|
|
sketch # invBridgeBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.bridgeAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'invBridgeBelow' 0x33A
|
|
|
|
sketch # underlineBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.overlineAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'underlineBelow' 0x332
|
|
|
|
sketch # dblUnderlineBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.dblOverlineAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'dblUnderlineBelow' 0x333
|
|
|
|
sketch # circumflexBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.caronAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'circumflexBelow' 0x32D
|
|
|
|
sketch # caronBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.circumflexAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'caronBelow' 0x32C
|
|
|
|
sketch # breveBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.archAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'breveBelow' 0x32E
|
|
|
|
sketch # archBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.breveAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'archBelow' 0x32F
|
|
|
|
sketch # commaBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.turnCommaAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'commaBelow' 0x326
|
|
|
|
sketch # barBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.barAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'barBelow' 0x329
|
|
|
|
sketch # dblBarBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.dblBarAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'dblBarBelow' 0x348
|
|
|
|
sketch # crossBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.crossAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
save 'crossBelow' 0x353
|
|
|
|
sketch # lessBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.greaterAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'lessBelow' 0x354
|
|
|
|
sketch # greaterBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.lessAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'greaterBelow' 0x355
|
|
|
|
sketch # greaterBelow
|
|
set-width 0
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.dblRingAbove
|
|
include : FlipAround markMiddle (XH / 2)
|
|
|
|
save 'dblRingBelow' 0x35a
|
|
|
|
sketch # lrArrowBelow
|
|
set-width 0
|
|
local fine : [adviceBlackness 5.75] / 2
|
|
local h : branch
|
|
local top belowMarkTop
|
|
local bot belowMarkBot
|
|
local left : markMiddle - markExtend * 1.5
|
|
local right : markMiddle - markExtend * 0.5
|
|
local exp : Math.sqrt : 1 + (top - bot) / (2 * (right - left)) * (top - bot) / (2 * (right - left))
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat right top
|
|
curl left [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) DOWNWARD]
|
|
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat right bot
|
|
curl left [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) UPWARD]
|
|
|
|
include h
|
|
include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
|
|
include h
|
|
include : HBar (markMiddle - markExtend * 1.5) (markMiddle + markExtend * 1.5) [mix belowMarkTop belowMarkBot 0.5] (fine * 2)
|
|
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
save 'lrArrowBelow' 0x34D
|
|
|
|
sketch # upArrowBelow
|
|
set-width 0
|
|
local fine : [adviceBlackness 6] / 2
|
|
|
|
local top belowMarkTop
|
|
local bot [mix belowMarkBot belowMarkTop 0.5]
|
|
local left : markMiddle - markExtend * 0.75
|
|
local right : markMiddle + markExtend * 0.75
|
|
local exp : Math.sqrt : 1 + (2 * (top - bot)) / (right - left) * (2 * (top - bot)) / (right - left)
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat left bot
|
|
curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) RIGHTWARD]
|
|
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat right bot
|
|
curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) LEFTWARD]
|
|
include : VBar markMiddle belowMarkBot top (fine * 2)
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
save 'lrArrowBelow' 0x34E
|
|
|
|
# horn and angle marks
|
|
sketch # horn
|
|
set-width 0
|
|
local radius : markHalfStroke * 1.5
|
|
include : Ring (XH + ACCENT + radius) (XH + ACCENT - radius) (markMiddle - radius) (markMiddle + radius)
|
|
include : dispiro
|
|
g4 (markMiddle + radius) (XH + ACCENT) [widths 0 (markFine * 1.75)]
|
|
quadcontrols 0 0.75 5 important
|
|
g4 (markMiddle - radius - markHalfStroke) (aboveMarkBot - radius)
|
|
apply-transform : Upright
|
|
apply-transform : Translate (-markMiddle + radius * 0.35) 0
|
|
apply-transform : Italify
|
|
set-anchor 'topright' MARK 0 (aboveMarkBot + markFine * 0.75) 0 aboveMarkTop
|
|
|
|
save 'horn' 0x31B
|
|
|
|
sketch # leftangleTR
|
|
set-width 0
|
|
include : VBarLeft 0 aboveMarkBot aboveMarkTop (markFine * 2)
|
|
include : HBarTop (-markExtend * 1.5) 0 aboveMarkTop (markFine * 2)
|
|
set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
|
|
|
|
save 'leftangleTR' 0x31A
|
|
|
|
sketch # dotTR
|
|
set-width 0
|
|
include : Ring (XH + ACCENT + DOTRADIUS) (XH + ACCENT - DOTRADIUS) (0 - DOTRADIUS) (0 + DOTRADIUS) true
|
|
set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
|
|
|
|
save 'dotTR' 0x358
|
|
|
|
sketch # commaTR
|
|
set-width 0
|
|
include glyphs.commaAbove
|
|
apply-transform : Upright
|
|
apply-transform : Translate (RIGHTSB - MIDDLE - OX) (XH - aboveMarkTop - commaOvershoot)
|
|
apply-transform : Italify
|
|
set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
|
|
|
|
save 'commaTR' 0x315
|
|
|
|
sketch # rtailBR
|
|
set-width 0
|
|
|
|
set-anchor 'bottomright' MARK 0 0 0 belowMarkBot
|
|
include : dispiro
|
|
widths.rhs
|
|
flat 0 (-O) [heading DOWNWARD]
|
|
curl 0 0 [heading DOWNWARD]
|
|
straight.right.end (HOOKX - HALFSTROKE * HVCONTRAST) (-HOOK + HALFSTROKE)
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'rtailBR' 0x322
|
|
|
|
sketch # ltailBR
|
|
set-width 0
|
|
|
|
set-anchor 'bottomright' MARK 0 0 0 belowMarkBot
|
|
include : dispiro
|
|
widths.rhs
|
|
flat 0 (-O) [heading DOWNWARD]
|
|
curl 0 0 [heading DOWNWARD]
|
|
straight.left.end (-HOOKX - HALFSTROKE * HVCONTRAST) (-HOOK - HALFSTROKE)
|
|
set currentGlyph.cmpPriority (-2)
|
|
save 'ltailBR' 0x321
|
|
|
|
# Overlay Marks
|
|
sketch # tildeOver
|
|
set-width 0
|
|
set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include glyphs.tildeAbove
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (XH / 2 - [mix aboveMarkTop aboveMarkBot 0.5])
|
|
apply-transform : Italify
|
|
|
|
save 'tildeOver' 0x334
|
|
|
|
sketch # barOver
|
|
set-width 0
|
|
set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include : HOverlayBar (markMiddle - LONGJUT * 0.75) (markMiddle + LONGJUT * 0.75) (XH / 2)
|
|
|
|
save 'barOver' 0x335
|
|
|
|
sketch # longBarOver
|
|
set-width 0
|
|
set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include : HOverlayBar ([mix 0 SB 0.5] - WIDTH) ([mix WIDTH RIGHTSB 0.5] - WIDTH) (XH / 2)
|
|
|
|
save 'longBarOver' 0x336
|
|
|
|
sketch # shortSlashOver
|
|
set-width 0
|
|
set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include : FlatSlashShape markMiddle (XH / 2) (0.5 * OVERLAYSTROKE)
|
|
|
|
save 'shortSlashOver' 0xE090
|
|
|
|
sketch # slashOver
|
|
set-width 0
|
|
local fine : 0.375 * OVERLAYSTROKE
|
|
set-anchor 'slash' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include : dispiro
|
|
flat (SB - O * 3 + fine - WIDTH) (XH * (-0.1)) [widths fine fine]
|
|
curl (RIGHTSB + O * 3 - fine - WIDTH) (XH * 1.1)
|
|
|
|
save 'slashOver' 0x337
|
|
|
|
sketch # longSlashOver
|
|
set-width 0
|
|
local fine : 0.375 * OVERLAYSTROKE
|
|
set-anchor 'slash' MARK markMiddle (XH / 2) markMiddle (XH / 2)
|
|
include : dispiro
|
|
flat (SB - O * 3 + fine - WIDTH) (XH * 0.5 - CAP * 0.6) [widths fine fine]
|
|
curl (RIGHTSB + O * 3 - fine - WIDTH) (XH * 0.5 + CAP * 0.6)
|
|
save 'longSlashOver' 0x338
|
|
|
|
local tieLeft [mix 0 markMiddle 1.25]
|
|
local tieRight (-tieLeft)
|
|
sketch # tieAbove
|
|
set-width 0
|
|
include : dispiro
|
|
widths.rhs (markHalfStroke * 2)
|
|
g4 tieLeft aboveMarkBot
|
|
quadcontrols 0.5 1
|
|
g4.right.mid 0 aboveMarkTop [heading RIGHTWARD]
|
|
quadcontrols 0.5 0
|
|
g4 tieRight aboveMarkBot
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (CAP - XH)
|
|
apply-transform : Italify
|
|
save 'tieAbove' 0x361
|
|
|
|
sketch # turnTieAbove
|
|
set-width 0
|
|
include : dispiro
|
|
widths.lhs (markHalfStroke * 2)
|
|
g4 tieLeft aboveMarkTop
|
|
quadcontrols 0.5 1
|
|
g4.right.mid 0 aboveMarkBot [heading RIGHTWARD]
|
|
quadcontrols 0.5 0
|
|
g4 tieRight aboveMarkTop
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (CAP - XH)
|
|
apply-transform : Italify
|
|
save 'turnTieAbove' 0x35D
|
|
turned 'tieBelow' 0x35C 'tieAbove' 0 (XH / 2)
|
|
|
|
sketch # overlineTieAbove
|
|
set-width 0
|
|
include : dispiro
|
|
widths.center (markHalfStroke * 2)
|
|
flat tieLeft (XH + ACCENT)
|
|
curl tieRight (XH + ACCENT)
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 (CAP - XH)
|
|
apply-transform : Italify
|
|
save 'overlineTieAbove' 0x35E
|
|
composite 'underlineTieBelow' glyphs.overlineTieAbove [FlipAround 0 (XH / 2)] [into-unicode 0x35F]
|
|
|
|
sketch # arrowTieBelow
|
|
set-width 0
|
|
local fine markFine
|
|
local h : branch
|
|
local top (DESCENDER - ACCENT + (belowMarkTop - belowMarkBot) / 2 * 1.5)
|
|
local bot (DESCENDER - ACCENT - (belowMarkTop - belowMarkBot) / 2 * 1.5)
|
|
local left : tieRight - markExtend * 1.5
|
|
local right tieRight
|
|
local exp : Math.sqrt : 1 + (top - bot) / (2 * (right - left)) * (top - bot) / (2 * (right - left))
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat left top
|
|
curl right [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) DOWNWARD]
|
|
include : dispiro
|
|
widths.center : fine * 2
|
|
flat left bot
|
|
curl right [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) UPWARD]
|
|
|
|
include h
|
|
include : HBar tieLeft tieRight (DESCENDER - ACCENT) (fine * 2)
|
|
save 'arrowTieBelow' 0x362
|
|
|
|
sketch # tildeTieAbove
|
|
set-width 0
|
|
include : TildeShape
|
|
ttop -- aboveMarkTop + (CAP - XH)
|
|
tbot -- aboveMarkBot + (CAP - XH)
|
|
leftEnd -- tieLeft
|
|
rightEnd -- tieRight
|
|
hs -- markHalfStroke
|
|
|
|
save 'tildeTieAbove' 0x360
|
|
|
|
define [GreekLRDoubleMark id unicode leftGlyph rightGlyph] : begin
|
|
sketch # Combining double mark
|
|
set-width 0
|
|
local k : -WIDTH * 0.15
|
|
|
|
include leftGlyph
|
|
apply-transform : Translate (2 * k) 0
|
|
include rightGlyph
|
|
apply-transform : Translate (0 - k) 0
|
|
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
set currentGlyph.cmpPriority 50
|
|
save id
|
|
|
|
sketch # Spaced double mark
|
|
include glyphs.space AS_BASE
|
|
include glyphs.(id)
|
|
save ('spaced' + id) unicode
|
|
|
|
GreekLRDoubleMark 'psilivaria' 0x1FCD glyphs.commaAbove glyphs.variaAbove
|
|
GreekLRDoubleMark 'psilioxia' 0x1FCE glyphs.commaAbove glyphs.oxiaAbove
|
|
GreekLRDoubleMark 'dasiavaria' 0x1FDD glyphs.revCommaAbove glyphs.variaAbove
|
|
GreekLRDoubleMark 'dasiaoxia' 0x1FDE glyphs.revCommaAbove glyphs.oxiaAbove
|
|
|
|
local yc : aboveMarkTop - commaAboveRadius + DOTRADIUS * 0.3 + commaOvershoot
|
|
|
|
sketch # psiliperispomeni
|
|
set-width 0
|
|
include glyphs.commaAbove
|
|
local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
|
|
include : dispiro
|
|
widths.lhs : Math.min (markHalfStroke * 2) ([adviceBlackness 6.5] * 1.25)
|
|
g4.up.start (markMiddle - radius) yc [heading UPWARD]
|
|
arcvh
|
|
g4.right.mid markMiddle (yc + radius)
|
|
archv
|
|
g4.down.end (markMiddle + radius) yc [heading DOWNWARD]
|
|
set-anchor 'above' MARK markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
|
|
set currentGlyph.cmpPriority 50
|
|
save 'psiliperispomeni'
|
|
|
|
sketch # spaced_psiliperispomeni
|
|
include glyphs.space AS_BASE
|
|
include glyphs.psiliperispomeni
|
|
|
|
save 'spaced_psiliperispomeni' 0x1FCF
|
|
|
|
sketch # dasiaperispomeni
|
|
set-width 0
|
|
include glyphs.revCommaAbove
|
|
local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
|
|
include : dispiro
|
|
widths.lhs : Math.min (markHalfStroke * 2) ([adviceBlackness 6.5] * 1.25)
|
|
g4.up.start (markMiddle - radius) yc [heading UPWARD]
|
|
arcvh
|
|
g4.right.mid markMiddle (yc + radius)
|
|
archv
|
|
g4.down.end (markMiddle + radius) yc [heading DOWNWARD]
|
|
set-anchor 'above' MARK markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
|
|
set currentGlyph.cmpPriority 50
|
|
save 'dasiaperispomeni'
|
|
|
|
sketch # spaced_dasiaperispomeni
|
|
include glyphs.space AS_BASE
|
|
include glyphs.dasiaperispomeni
|
|
save 'spaced_dasiaperispomeni' 0x1FDF
|
|
|
|
return [object markExtend markHalfStroke markStress markFine
|
|
markMiddle markDotsRadius aboveMarkTop aboveMarkBot
|
|
aboveMarkMid belowMarkBot belowMarkTop commaOvershoot
|
|
commaOvershoot2 commaAboveRadius TildeShape] |