Iosevka/font-src/glyphs/marks/index.ptl
2021-07-07 20:08:06 -07:00

1533 lines
61 KiB
Text

$$include '../../meta/macros.ptl'
import [Arcs Quadify ShapeConv] from "typo-geom"
import [OffsetCurve BezToContoursSink GEOMETRY_PRECISION] from '../../support/curve-util'
import [mix linreg clamp fallback] from '../../support/utils'
import [DesignParameters] from '../../meta/aesthetics'
import [TieMark TieGlyph] from "../../support/gr"
import [Box] from '../../support/box'
glyph-module
glyph-block Marks : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
### Combining marks
glyph-block-export markExtend markHalfStroke markFine
define markExtend (AccentX * 0.5)
define markHalfStroke : 0.5 * [AdviceStroke2 3.375 3.5 XH]
define markStress : markHalfStroke * 1.1
define markFine : Math.min (markHalfStroke * 0.9) (0.5 * [AdviceStroke2 3.875 4.25 XH])
glyph-block-export markMiddle
define markMiddle (-Middle)
define markDotsRadius : DotRadius * [Math.min 1 (markStress / HalfStroke)]
glyph-block-export aboveMarkTop aboveMarkBot aboveMarkMid
define aboveMarkTop (XH + AccentBaseOffset + AccentStackOffset)
define aboveMarkBot (XH + AccentBaseOffset)
define aboveMarkMid [mix aboveMarkBot aboveMarkTop 0.5]
glyph-block-export belowMarkBot belowMarkTop belowMarkMid
define belowMarkBot (0 - AccentBaseOffset - AccentStackOffset)
define belowMarkTop (0 - AccentBaseOffset)
define belowMarkMid [mix belowMarkBot belowMarkTop 0.5]
define commaOvershoot : O * [linreg 16 0 90 (-1) (markHalfStroke * 2)]
define commaOvershoot2 : O * [linreg 16 1 90 (-1) (markHalfStroke * 2)]
define commaAboveRadius : 0.85 * DotRadius * markHalfStroke / HalfStroke
define asciiMarkZoom : (RightSB - SB) / (markExtend * 3)
### Above marks
create-glyph 'dotAbove' 0x307 : glyph-proc
set-width 0
currentGlyph.shortName = 'dot'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : DotAt markMiddle (XH + Accent) DotRadius
create-glyph 'dieresisAbove' 0x308 : glyph-proc
set-width 0
currentGlyph.shortName = 'dieresis'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : DotAt (markMiddle - markExtend) (XH + Accent) markDotsRadius
include : DotAt (markMiddle + markExtend) (XH + Accent) markDotsRadius
define [RingDims] : begin
local radiusIn : Accent * 0.24
local radiusOut : radiusIn + markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)]
return [object radiusIn radiusOut]
create-glyph 'ringAbove' 0x30A : glyph-proc
set-width 0
currentGlyph.shortName = 'ring'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
local [object radiusIn radiusOut] : RingDims
include : difference
DotAt markMiddle (XH + Accent) radiusOut
DotAt markMiddle (XH + Accent) radiusIn
include : ApparentTranslate 0 (-markFine * 0.75)
create-glyph 'dblRingAbove' 0x1AB2 : glyph-proc
set-width 0
local [object radiusIn radiusOut] : RingDims
local k : 2 * (radiusOut - (radiusOut - radiusIn) * 0.25)
include : WithTransform [Translate (+k / 2) 0] : refer-glyph 'ringAbove'
include : WithTransform [Translate (-k / 2) 0] : refer-glyph 'ringAbove'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
create-glyph 'graveAbove' 0x300 : glyph-proc
set-width 0
currentGlyph.shortName = 'grave'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
curl (markMiddle - markExtend) aboveMarkTop [widths markStress markStress]
create-glyph 'asciiGrave.straight' : glyph-proc
local df : DivFrame para.diversityF
set-width df.width
include : dispiro
flat (df.middle + HalfStroke * 1.1 * asciiMarkZoom * [Math.sqrt df.div]) [mix (XH + Accent) aboveMarkBot asciiMarkZoom] [widths.center : Stroke * 0.9]
curl (df.middle - markExtend * asciiMarkZoom * [Math.sqrt df.div]) [mix (XH + Accent) aboveMarkTop asciiMarkZoom] [widths.center : Stroke * 1.1]
create-glyph 'acuteAbove' 0x301 : glyph-proc
set-width 0
currentGlyph.shortName = 'acute'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (markMiddle - markStress) aboveMarkBot [widths markFine markFine]
curl (markMiddle + markExtend) aboveMarkTop [widths markStress markStress]
create-glyph 'latin1acute' 0xB4 : glyph-proc
local df : DivFrame para.diversityF
set-width df.width
include : dispiro
flat (df.middle - HalfStroke * 1.1 * asciiMarkZoom * [Math.sqrt df.div]) [mix (XH + Accent) aboveMarkBot asciiMarkZoom] [widths.center : Stroke * 0.9]
curl (df.middle + markExtend * asciiMarkZoom * [Math.sqrt df.div]) [mix (XH + Accent) aboveMarkTop asciiMarkZoom] [widths.center : Stroke * 1.1]
create-glyph 'circumflexAbove' 0x302 : glyph-proc
set-width 0
currentGlyph.shortName = 'circum'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'bardownAbove' 0x1DC6 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'upbarAbove' 0x1DC7 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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)
create-glyph 'asciiCaret.high' : glyph-proc
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]
create-glyph 'caronAbove' 0x30c : glyph-proc
set-width 0
currentGlyph.shortName = 'caron'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'barupAbove' 0x1DC4 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'downbarAbove' 0x1DC5 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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)
glyph-block-export TildeShape
define [TildeShape] : params [ttop tbot leftEnd rightEnd hs] : glyph-proc
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
define z1 : currentGlyph.gizmo.apply : object [x leftEnd] [y tbot]
define z2 : currentGlyph.gizmo.apply : object [x : mix leftEnd rightEnd tildeWaveX] [y : mix tbot ttop tildeWave]
define z3 : currentGlyph.gizmo.apply : object [x : mix leftEnd rightEnd (1 - tildeWaveX)] [y : mix tbot ttop (1 - tildeWave)]
define z4 : currentGlyph.gizmo.apply : object [x rightEnd] [y ttop]
define bone : new Arcs.Bez3 z1 z2 z3 z4
define inner : new OffsetCurve bone (+hs) HVContrast
define outer : new Arcs.Reverted : new OffsetCurve bone (-hs) HVContrast
define cs : new BezToContoursSink
ShapeConv.transferGenericShapeAsBezier {{inner outer}} cs GEOMETRY_PRECISION
currentGlyph.includeContours cs.contours 0 0
create-glyph 'tildeAbove' 0x303 : glyph-proc
set-width 0
currentGlyph.shortName = 'tilde'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : TildeShape
ttop -- aboveMarkTop
tbot -- aboveMarkBot + markFine / 2
leftEnd -- (markMiddle - markExtend * 1.5)
rightEnd -- (markMiddle + markExtend * 1.5)
hs -- markHalfStroke
create-glyph 'tildeAboveOverlay' : glyph-proc
set-width 0
currentGlyph.shortName = 'tilde'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : TildeShape
ttop -- aboveMarkTop
tbot -- aboveMarkBot + markFine / 2
leftEnd -- (markMiddle - markExtend * 1.75)
rightEnd -- (markMiddle + markExtend * 1.75)
hs -- ([AdviceStroke 4.5] / 2)
create-glyph 'asciiTilde.high' : glyph-proc
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)
create-glyph 'overlayTildeOperator' : glyph-proc
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 -- ([AdviceStroke 4] / 2)
include : Realign Middle [mix t b (1/2)] Middle SymbolMid
create-glyph : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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 : [AdviceStroke 4.5] / 2
include : TildeShape
ttop -- ttop
tbot -- tbot
leftEnd -- (markMiddle - markExtend * 1.5)
rightEnd -- (markMiddle + markExtend * 1.5)
hs -- fine
create-forked-glyph 'tildeSlashAbove' 0x34A : glyph-proc
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]
create-forked-glyph 'tildedotdotAbove' 0x34B : glyph-proc
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
create-glyph 'dblTildeAbove' 0x34C : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local m aboveMarkBot
local ttop [mix m aboveMarkTop 0.7]
local tbot [mix m (aboveMarkBot + markFine / 2) 0.7]
define [addTilde] : TildeShape
ttop -- ttop
tbot -- tbot
leftEnd -- (markMiddle - markExtend * 1.5)
rightEnd -- (markMiddle + markExtend * 1.5)
hs -- ([AdviceStroke 4.5] / 2)
local shift : (ttop - tbot) * 1.2
include : addTilde
include : ApparentTranslate 0 shift
include : addTilde
include : ApparentTranslate 0 (-0.5 * shift)
create-glyph 'macronAbove' 0x304 : glyph-proc
set-width 0
currentGlyph.shortName = 'macron'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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)
create-glyph 'sbOverlineAbove' : glyph-proc
set-width 0
currentGlyph.shortName = 'overline'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (SB - Width) (XH + Accent) [widths markHalfStroke markHalfStroke]
curl (RightSB - Width) (XH + Accent)
create-glyph 'overlineAbove' 0x305 : glyph-proc
set-width 0
currentGlyph.shortName = 'overline'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (0 - Width) (XH + Accent) [widths markHalfStroke markHalfStroke]
curl 0 (XH + Accent)
create-glyph 'sbRsbOverlineAbove' : glyph-proc
set-width 0
currentGlyph.shortName = 'overline'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (SB - Width) (XH + Accent) [widths markHalfStroke markHalfStroke]
curl (RightSB - Width) (XH + Accent)
create-glyph 'dblOverlineAbove' 0x33F : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local boxsw : Math.min (markFine * 2) ((aboveMarkTop - aboveMarkBot) / 3)
include : dispiro
widths.lhs boxsw
flat (0 - Width) aboveMarkBot
curl 0 aboveMarkBot
include : dispiro
widths.rhs boxsw
flat (0 - Width) aboveMarkTop
curl 0 aboveMarkTop
create-glyph 'breveAbove' 0x306 : glyph-proc
set-width 0
currentGlyph.shortName = 'breve'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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]
create-glyph 'archAbove' 0x311 : glyph-proc
set-width 0
currentGlyph.shortName = 'arch'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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]
create-glyph 'hookAbove' 0x309 : glyph-proc
set-width 0
currentGlyph.shortName = 'hook'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'doubleGraveAbove' 0x30F : glyph-proc
set-width 0
currentGlyph.shortName = 'dblgrave'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'doubleAcuteAbove' 0x30B : glyph-proc
set-width 0
currentGlyph.shortName = 'dblacute'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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]
create-glyph 'commaAbove' 0x313 : glyph-proc
set-width 0
currentGlyph.shortName = 'comma'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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)
include : ApparentTranslate 0 (DotRadius * 0.3)
create-glyph 'commaGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'commaAbove'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'turnCommaAbove' 0x312 : glyph-proc
set-width 0
currentGlyph.shortName = 'turnComma'
include : refer-glyph "commaAbove"
include : FlipAround markMiddle ([mix aboveMarkTop (aboveMarkBot - commaAboveRadius) 0.5] + (DotRadius * 0.3) + commaOvershoot / 2)
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
create-glyph 'revCommaAbove' 0x314 : glyph-proc
set-width 0
currentGlyph.shortName = 'revComma'
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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)
include : ApparentTranslate 0 (DotRadius * 0.3)
create-glyph 'revCommaGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'revCommaAbove'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'barAbove' 0x30D : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar markMiddle aboveMarkBot aboveMarkTop (markHalfStroke * 2)
create-glyph 'ascenderBarAbove' : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar markMiddle [mix XH aboveMarkBot 0.5] CAP (markHalfStroke * 2)
create-glyph 'dblBarAbove' 0x30E : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
create-glyph 'bridgeAbove' 0x346 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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)
create-glyph 'yerikAbove' 0x33E : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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]
create-glyph 'candrabinduAbove' 0x310 : glyph-proc
set-width 0
local fine : AdviceStroke 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
include : ApparentTranslate 0 (fine * 0.5)
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
turned 'turncandrabinduAbove' 0x352 'candrabinduAbove' markMiddle (XH + Accent)
create-glyph 'variaAbove' 0x340 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (markMiddle + markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
curl (markMiddle - markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
create-glyph 'variaGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'variaAbove'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'oxiaAbove' 0x341 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
include : dispiro
flat (markMiddle - markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
curl (markMiddle + markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
create-glyph 'oxiaGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'oxiaAbove'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'perispomeniAbove' 0x342 : glyph-proc
set-width 0
currentGlyph.shortName = 'perisp'
include : refer-glyph "archAbove"
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
alias 'koronisAbove' 0x343 'commaAbove'
create-glyph 'crossAbove' 0x33D : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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
create-glyph 'lessAbove' 0x1DFE : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local top aboveMarkTop
local bot aboveMarkBot
local exp : Math.sqrt : 1 + [Math.pow ((top - bot) / markExtend) 2]
include : dispiro
widths.center : markFine * 2
flat (markMiddle + markExtend) top
curl (markMiddle - markExtend) [mix top bot 0.5] [widths.center.heading (markFine * exp) Leftward]
include : dispiro
widths.center : markFine * 2
flat (markMiddle + markExtend) bot
curl (markMiddle - markExtend) [mix top bot 0.5] [widths.center.heading (markFine * exp) Leftward]
turned 'greaterAbove' 0x350 'lessAbove' markMiddle aboveMarkMid
create-glyph 'upArrowHeadAbove' 0xE002 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local top aboveMarkTop
local bot aboveMarkBot
local exp : Math.sqrt : 1 + [Math.pow (3 * markExtend / (top - bot)) 2]
include : dispiro
widths.center : markFine * 2
flat (markMiddle - markExtend) bot
curl markMiddle top [widths.center.heading (markFine * exp) Upward]
include : dispiro
widths.center : markFine * 2
flat (markMiddle + markExtend) bot
curl markMiddle top [widths.center.heading (markFine * exp) Upward]
turned 'downArrowHeadAbove' 0xE003 'upArrowHeadAbove' markMiddle aboveMarkMid
define [ArrowheadForArrowMarkAbove-Up] : new-glyph : glyph-proc
local fine : [AdviceStroke 6] / 2
local top aboveMarkTop
local bot aboveMarkMid
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]
define [ArrowheadForArrowMarkAbove-Down] : new-glyph : glyph-proc
include : ArrowheadForArrowMarkAbove-Up
include : FlipAround markMiddle aboveMarkMid
define [VBarForArrowMarkAbove] : glyph-proc
local fine : [AdviceStroke 6] / 2
include : VBar markMiddle aboveMarkTop aboveMarkBot (fine * 2)
define [ArrowheadForArrowMarkAbove-Left] : new-glyph : glyph-proc
local fine : [AdviceStroke 5.75] / 2
local top aboveMarkTop
local bot aboveMarkBot
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]
define [ArrowheadForArrowMarkAbove-Right] : new-glyph : glyph-proc
include : ArrowheadForArrowMarkAbove-Left
include : FlipAround markMiddle aboveMarkMid
define [HBarForArrowMarkAbove] : glyph-proc
local fine : [AdviceStroke 5.75] / 2
include : HBar (markMiddle - markExtend * 1.5) (markMiddle + markExtend * 1.5) aboveMarkMid (fine * 2)
create-glyph 'upArrowAbove' : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : ArrowheadForArrowMarkAbove-Up
include : VBarForArrowMarkAbove
create-glyph 'downArrowAbove' : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : ArrowheadForArrowMarkAbove-Down
include : VBarForArrowMarkAbove
create-glyph 'leftArrowAbove' 0x20D6 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : ArrowheadForArrowMarkAbove-Left
include : HBarForArrowMarkAbove
create-glyph 'rightArrowAbove' 0x20D7 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : ArrowheadForArrowMarkAbove-Right
include : HBarForArrowMarkAbove
create-glyph 'lrArrowAbove' 0x20E1 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : ArrowheadForArrowMarkAbove-Left
include : ArrowheadForArrowMarkAbove-Right
include : HBarForArrowMarkAbove
create-glyph 'braceAbove' 0x1ABB : glyph-proc
set-width 0
set-mark-anchor 'aboveBrace' markMiddle aboveMarkMid markMiddle aboveMarkMid
local braceDepth : markExtend * 0.25
local left : [mix 0 SB 0.25] - Width
local right : [mix Width RightSB 0.25] - Width
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) (aboveMarkTop + markFine)
g4 (left + OX) aboveMarkMid
g4 (left + braceDepth) (aboveMarkBot - markFine)
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) (aboveMarkTop + markFine)
g4 (right - OX) aboveMarkMid
g4 (right - braceDepth) (aboveMarkBot - markFine)
alias 'cyrlDasiaAbove' 0x485 'revCommaAbove'
alias 'cyrlPsiliAbove' 0x486 'commaAbove'
create-glyph 'cyrlPalatilizationAbove' 0x484 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local leftEnd : markMiddle - markExtend * 2.0
local rightEnd : markMiddle + markExtend * 1.2
include : dispiro
g4.up.start rightEnd aboveMarkBot [widths.heading markHalfStroke markHalfStroke Upward]
arcvh
g2.left.mid markMiddle (aboveMarkTop - markHalfStroke) [heading Leftward]
alsoThru.g2 0.5 0.5
g2.left.end leftEnd ([mix aboveMarkBot aboveMarkTop 0.5] - markHalfStroke) [heading Leftward]
create-glyph 'cyrlPokrytieAbove' 0x487 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local leftEnd : markMiddle - markExtend * 1.2
local rightEnd : markMiddle + markExtend * 2.0
include : dispiro
g4.up.start leftEnd aboveMarkBot [widths.heading markHalfStroke markHalfStroke Upward]
arcvh
g2.right.mid markMiddle (aboveMarkTop - markHalfStroke) [heading Rightward]
alsoThru.g2 0.5 0.5
g2.right.end rightEnd ([mix aboveMarkBot aboveMarkTop 0.5] - markHalfStroke) [heading Rightward]
create-glyph 'cyrlTitloAbove' 0x483 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar (markMiddle - markExtend) aboveMarkBot (aboveMarkMid + markFine) (markFine * 2)
include : VBar (markMiddle + markExtend) (aboveMarkMid - markFine) aboveMarkTop (markFine * 2)
include : HBar (markMiddle - markExtend) (markMiddle + markExtend)aboveMarkMid (markFine * 2)
create-glyph 'zigzagAbove' 0x35B : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local ext : 0.625 * markExtend + markFine
local coSlope 0.2
local fr : new Box aboveMarkTop aboveMarkBot (markMiddle - ext) (markMiddle + ext)
include : HBar fr.left fr.right fr.yMid (markFine * 2)
include : intersection [MaskBelow fr.top] [MaskAbove (fr.yMid - markFine)]
ExtLineLhs 4 (markFine * 2) (fr.left + coSlope * (fr.top - fr.yMid - markFine)) fr.top (fr.left - 2 * markFine * coSlope) (fr.yMid - markFine)
include : intersection [MaskAbove fr.bot] [MaskBelow (fr.yMid + markFine)]
ExtLineLhs 4 (markFine * 2) (fr.right - coSlope * (fr.yMid - fr.bot - markFine)) fr.bot (fr.right + 2 * markFine * coSlope) (fr.yMid + markFine)
### Below marks
create-glyph 'blankBelow' : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
define [CedillaShape ext] : begin
local fine : Math.min markHalfStroke ((belowMarkTop - belowMarkBot) * 0.25)
local cedillaTop (belowMarkTop + fine * 0.85)
local cedillaBot belowMarkBot
return : union
VBar markMiddle ext (cedillaTop - fine) (fine * 2)
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]
create-glyph 'cedillaExtShapeBelow' : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : CedillaShape Stroke
create-glyph 'cedillaBelow' 0x327 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : CedillaShape 0
define [OgonekBelowShape] : begin
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
return : spiro-outline
corner (markMiddle + 0.1) 0
curl markMiddle 0
archv
g4 ogonekLeft [mix 0 ogonekBot 0.5]
arcvh
flat (markMiddle + markExtend * 0.25) ogonekBot
corner ogonekRight ogonekBot
corner ogonekRight (ogonekBot - markStress * 2)
curl (markMiddle + markExtend * 0.25) (ogonekBot - markStress * 2)
archv
g4 (ogonekLeft - [mix fine markStress 0.75] * 2 * HVContrast) [mix (fine * 2) (ogonekBot - markStress * 2) 0.5]
arcvh
flat markMiddle (fine * 2)
corner (markMiddle + 0.1) (fine * 2)
# include : dispiro
# g4.left.start markMiddle O [widths 0 (fine * 2)]
# archv 24
# g4.down.mid ogonekLeft [mix O ogonekBot 0.5] [widths 0 ([mix fine markStress 0.75] * 2)]
# arcvh 24
# flat (markMiddle + markExtend * 0.25) ogonekBot [widths 0 (markStress * 2)]
# curl ogonekRight ogonekBot [heading Rightward]
create-glyph 'ogonekBelow' 0x328 : glyph-proc
set-width 0
include : OgonekBelowShape
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
create-glyph 'ogonekAbove' 0x1DCE : glyph-proc
set-width 0
include : OgonekBelowShape
include : FlipAround markMiddle (XH / 2)
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
create-glyph 'ogonekTR' : glyph-proc
set-width 0
include : refer-glyph "ogonekBelow"
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
local ogonekRight : markMiddle + markExtend * 0.85
set-mark-anchor 'trailing' markMiddle 0 ogonekRight ogonekBot
create-glyph 'iotaBelow' 0x345 : glyph-proc
set-width 0
set currentGlyph.shortName 'iota'
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
create-glyph 'iotaLF' : glyph-proc
set-width 0
set-mark-anchor 'lf' markMiddle 0 markMiddle belowMarkBot
include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
create-glyph 'uptackBelow' 0x31D : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot (markFine * 2)
create-glyph 'downtackBelow' 0x31E : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
create-glyph 'lefttackBelow' 0x318 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
create-glyph 'righttackBelow' 0x319 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
create-glyph 'leftAngleBelow' 0x349 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
create-glyph 'plusBelow' 0x31F : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
create-glyph 'minusBelow' 0x320 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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)
create-glyph 'bridgeBelow' 0x32A : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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)
create-glyph 'boxBelow' 0x33B : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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
create-glyph 'equalBelow' 0x347 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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
create-glyph 'dblBreveBelow' 0x32B : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
local hsw : [AdviceStroke 3.5] / Stroke * markHalfStroke
local extend : (belowMarkTop - belowMarkBot - markHalfStroke) * 1.25
include : dispiro
g4.down.start (markMiddle - extend) belowMarkTop [widths.heading hsw hsw Downward]
arcvh
g4.right.mid [mix markMiddle (markMiddle - extend) 0.5] (belowMarkBot + hsw) [heading Rightward]
archv
g4.up.end markMiddle belowMarkTop [heading Upward]
include : dispiro
g4.down.start markMiddle belowMarkTop [widths.heading hsw hsw Downward]
arcvh
g4.right.mid [mix markMiddle (markMiddle + extend) 0.5] (belowMarkBot + hsw) [heading Rightward]
archv
g4.up.end (markMiddle + extend) belowMarkTop [heading Upward]
create-glyph 'dblArchBelow' 0x33C : glyph-proc
set-width 0
include : refer-glyph "dblBreveBelow"
include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
create-glyph 'leftHalfCircleBelow' 0x31C : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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]
include : Translate ((belowMarkTop - belowMarkBot) / 4) 0
create-glyph 'rightHalfCircleBelow' 0x339 : glyph-proc
set-width 0
include : refer-glyph "leftHalfCircleBelow"
include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
create-glyph 'leftHalfCircleAbove' 0x351 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : refer-glyph "rightHalfCircleBelow"
include : FlipAround markMiddle (XH / 2)
create-glyph 'rightHalfCircleAbove' 0x357 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : refer-glyph "leftHalfCircleBelow"
include : FlipAround markMiddle (XH / 2)
create-glyph 'rightHalfCircleTR' : glyph-proc
set-width 0
set-mark-anchor 'topright' markMiddle XH markMiddle aboveMarkTop
include : refer-glyph "leftHalfCircleBelow"
include : FlipAround markMiddle (XH / 2)
# Turned below marks
define [TurnAboveMarkToBelow gnBelowMark unicodeBelowMark gnAboveMark] : begin
create-glyph gnBelowMark unicodeBelowMark : glyph-proc
set-width 0
include : refer-glyph gnAboveMark
include : FlipAround markMiddle (XH / 2)
local aboveGlyph : query-glyph gnAboveMark
if aboveGlyph : begin
if aboveGlyph.markAnchors.above : set-mark-anchor 'below'
mix markMiddle aboveGlyph.markAnchors.above.x (-1)
mix (XH / 2) aboveGlyph.markAnchors.above.y (-1)
if aboveGlyph.baseAnchors.above : set-base-anchor 'below'
mix markMiddle aboveGlyph.baseAnchors.above.x (-1)
mix (XH / 2) aboveGlyph.baseAnchors.above.y (-1)
if aboveGlyph.baseAnchors.aboveBrace : set-base-anchor 'belowBrace'
mix markMiddle aboveGlyph.baseAnchors.aboveBrace.x (-1)
mix (XH / 2) aboveGlyph.baseAnchors.aboveBrace.y (-1)
TurnAboveMarkToBelow 'graveBelow' 0x316 'graveAbove'
TurnAboveMarkToBelow 'acuteBelow' 0x317 'acuteAbove'
TurnAboveMarkToBelow 'dotBelow' 0x323 'dotAbove'
TurnAboveMarkToBelow 'dieresisBelow' 0x324 'dieresisAbove'
TurnAboveMarkToBelow 'tildeBelow' 0x330 'tildeAbove'
TurnAboveMarkToBelow 'ringBelow' 0x325 'ringAbove'
TurnAboveMarkToBelow 'macronBelow' 0x331 'macronAbove'
TurnAboveMarkToBelow 'invBridgeBelow' 0x33A 'bridgeAbove'
TurnAboveMarkToBelow 'underlineBelow' 0x332 'overlineAbove'
TurnAboveMarkToBelow 'dblUnderlineBelow' 0x333 'dblOverlineAbove'
TurnAboveMarkToBelow 'circumflexBelow' 0x32D 'caronAbove'
TurnAboveMarkToBelow 'caronBelow' 0x32C 'circumflexAbove'
TurnAboveMarkToBelow 'breveBelow' 0x32E 'archAbove'
TurnAboveMarkToBelow 'archBelow' 0x32F 'breveAbove'
TurnAboveMarkToBelow 'commaBelow' 0x326 'turnCommaAbove'
TurnAboveMarkToBelow 'barBelow' 0x329 'barAbove'
TurnAboveMarkToBelow 'descenderBarBelow' null 'ascenderBarAbove'
TurnAboveMarkToBelow 'dblBarBelow' 0x348 'dblBarAbove'
TurnAboveMarkToBelow 'crossBelow' 0x353 'crossAbove'
TurnAboveMarkToBelow 'lessBelow' 0x354 'greaterAbove'
TurnAboveMarkToBelow 'greaterBelow' 0x355 'lessAbove'
TurnAboveMarkToBelow 'upArrowHeadBelow' 0xE004 'downArrowHeadAbove'
TurnAboveMarkToBelow 'downArrowHeadBelow' 0xE005 'upArrowHeadAbove'
TurnAboveMarkToBelow 'dblRingBelow' 0x35a 'dblRingAbove'
TurnAboveMarkToBelow 'lrArrowBelow' 0x34D 'lrArrowAbove'
TurnAboveMarkToBelow 'upArrowBelow' 0x34E 'downArrowAbove'
TurnAboveMarkToBelow 'sbRsbUnderlineBelow' 0x332 'sbRsbOverlineAbove'
create-glyph 'greaterAndUpArrowheadBelow' 0x0356 : glyph-proc
set-width 0
include : WithTransform [Translate (-markExtend) 0] : refer-glyph 'greaterBelow'
include : WithTransform [Translate (+markExtend) 0] : refer-glyph 'upArrowHeadBelow'
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
create-glyph 'braceBelow' 0x1ABD : glyph-proc
set-width 0
set-mark-anchor 'belowBrace' markMiddle belowMarkMid markMiddle belowMarkMid
local braceDepth : markExtend * 0.25
local left : [mix 0 SB 0.25] - Width
local right : [mix Width RightSB 0.25] - Width
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) (belowMarkTop + markFine)
g4 (left + OX) belowMarkMid
g4 (left + braceDepth) (belowMarkBot - markFine)
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) (belowMarkTop + markFine)
g4 (right - OX) belowMarkMid
g4 (right - braceDepth) (belowMarkBot - markFine)
# horn and angle marks
define [HornDim attX attY overshootX overshootY yrP] : begin
local radius commaAboveRadius
local hornFine : Math.min (radius * 0.75) (markFine * 1.75)
local hornStroke : Math.min (radius * 1) (markFine * 1.75)
local startX : attX + 2 * radius
local startY : attY + yrP * radius + (aboveMarkTop - aboveMarkBot) / 2
return : object radius hornFine hornStroke startX startY
define [HornMarkAnchor attX attY overshootX overshootY yrP] : glyph-proc
local [object radius hornFine startX startY] : HornDim attX attY overshootX overshootY yrP
set-mark-anchor 'topright' attX attY startX startY
glyph-block-export HornBaseAnchor
define [HornBaseAnchor attX attY overshootX overshootY yrP] : glyph-proc
local [object radius hornFine startX startY] : HornDim attX attY overshootX overshootY yrP
set-base-anchor 'topright' startX startY
define [HornShape attX attY overshootX overshootY yrP] : glyph-proc
local [object radius hornFine hornStroke startX startY] : HornDim attX attY overshootX overshootY yrP
include : union
RingAt (startX - radius) startY (radius - hornFine / 8)
dispiro
g4 (startX + OX) (startY) [widths.rhs (hornFine / 4)]
arcvh
g4 (startX - radius) (startY - radius)
archv
g4 (startX - 2 * radius) (startY)
arcvh
g4 (startX - radius) (startY + radius) [widths.rhs (hornFine / 2)]
archv
g4 startX startY [widths.rhs hornFine]
quadControls 0 0.75 16 : object : blend : lambda [t]
widths.rhs [mix hornFine hornStroke t]
g4 (attX - overshootX - HalfStroke * HVContrast) (attY - overshootY - Stroke) [widths.rhs hornStroke]
create-glyph 'horn' 0x31B : glyph-proc
set-width 0
include : HornShape 0 XH 0 0 0.5
include : HornMarkAnchor 0 XH 0 0 0.5
create-glyph 'longHorn' : glyph-proc
set-width 0
include : HornShape 0 XH (Width / 2) (SmoothB) 0.5
include : HornMarkAnchor 0 XH (Width / 2) (SmoothB) 0.5
create-glyph 'leftangleTR' 0x31A : glyph-proc
set-width 0
include : VBarLeft 0 aboveMarkBot aboveMarkTop (markFine * 2)
include : HBarTop (-markExtend * 1.5) 0 aboveMarkTop (markFine * 2)
set-mark-anchor 'topright' 0 XH 0 aboveMarkTop
create-glyph 'dotTR' 0x358 : glyph-proc
set-width 0
include : refer-glyph "dotAbove"
include : ApparentTranslate (RightSB - Middle + DotRadius) 0
set-mark-anchor 'topright' 0 XH 0 aboveMarkTop
create-glyph 'commaTR' 0x315 : glyph-proc
set-width 0
include : refer-glyph "commaAbove"
include : ApparentTranslate (RightSB - Middle + DotRadius) 0
set-mark-anchor 'topright' 0 XH 0 aboveMarkTop
create-glyph 'rtailBR' 0x322 : glyph-proc
set-width 0
set-mark-anchor 'bottomright' 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)
create-glyph 'rRetroflexTailBR' : glyph-proc
set-width 0
set-mark-anchor 'bottomright' 0 0 0 belowMarkBot
include : HBarBottom (-Stroke * HVContrast) (SideJut - HalfStroke * HVContrast) 0
include : dispiro
widths.rhs
flat (SideJut) Stroke [heading Downward]
curl (SideJut) 0 [heading Downward]
straight.right.end (HookX - HalfStroke * HVContrast) (-Hook + HalfStroke)
create-glyph 'ltailBR' 0x321 : glyph-proc
set-width 0
set-mark-anchor 'bottomright' 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)
# Overlay Marks
create-glyph 'tildeOver' 0x334 : glyph-proc
set-width 0
set-mark-anchor 'overlay' markMiddle (XH / 2) markMiddle (XH / 2)
include : refer-glyph "tildeAbove"
include : ApparentTranslate 0 (XH / 2 - [mix aboveMarkTop aboveMarkBot 0.5])
create-glyph 'barOver' 0x335 : glyph-proc
set-width 0
set-mark-anchor 'overlay' markMiddle (XH / 2) markMiddle (XH / 2)
include : HOverlayBar (markMiddle - LongJut * 0.75) (markMiddle + LongJut * 0.75) (XH / 2)
create-glyph 'longBarOver' 0xE001 : glyph-proc
set-width 0
set-mark-anchor 'overlay' markMiddle (XH / 2) markMiddle (XH / 2)
include : HOverlayBar ([mix 0 SB 0.5] - Width) ([mix Width RightSB 0.5] - Width) (XH / 2)
create-glyph 'strikeThrough' 0x0336 : glyph-proc
set-width 0
set-mark-anchor 'strike' markMiddle (XH / 2) markMiddle (XH / 2)
include : HOverlayBar (0 - Width) (0) (XH / 2)
create-glyph 'shortSlashOver' 0xE000 : glyph-proc
set-width 0
set-mark-anchor 'overlay' markMiddle (XH / 2) markMiddle (XH / 2)
include : FlatSlashShape markMiddle (XH / 2) (0.5 * OverlayStroke)
create-glyph 'antiSlashOver' : glyph-proc
set-width 0
set-mark-anchor 'overlay' markMiddle (XH / 2) markMiddle (XH / 2)
include : FlatSlashShape markMiddle (XH / 2) (0.5 * OverlayStroke) (0.75) (-0.3)
create-glyph 'arrSlashOver' : glyph-proc
set-width 0
local fine : 0.375 * OverlayStroke
local dx : Width * 0.1
local dy : Width * 0.4
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2)
include : dispiro
flat (Middle - dx - Width) (XH / 2 - dy) [widths fine fine]
curl (Middle + dx - Width) (XH / 2 + dy)
create-glyph 'arrVStrokeOver' : glyph-proc
set-width 0
local fine : 0.375 * OverlayStroke
local dx : Width * 0
local dy : Width * 0.3
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2)
include : dispiro
flat (Middle - dx - Width) (XH / 2 - dy) [widths fine fine]
curl (Middle + dx - Width) (XH / 2 + dy)
create-glyph 'arrDblVStrokeOver' : glyph-proc
set-width 0
local fine : 0.3 * OverlayStroke
local dx : Width * 0
local dy : Width * 0.3
local gap : Math.max (fine * 2) (Width / 10)
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2)
include : dispiro
flat (Middle - dx - Width - gap) (XH / 2 - dy) [widths fine fine]
curl (Middle + dx - Width - gap) (XH / 2 + dy)
include : dispiro
flat (Middle - dx - Width + gap) (XH / 2 - dy) [widths fine fine]
curl (Middle + dx - Width + gap) (XH / 2 + dy)
create-glyph 'arrHStrokeOver' : glyph-proc
set-width 0
local fine : 0.375 * OverlayStroke
local dx : Width * 0.3
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2)
include : dispiro
flat (Middle - Width - dx) (XH / 2) [widths fine fine]
curl (Middle - Width + dx) (XH / 2)
create-glyph 'arrDblHStrokeOver' : glyph-proc
set-width 0
local fine : 0.3 * OverlayStroke
local dx : Width * 0.3
local gap : Math.max (fine * 2) (Width / 10)
set-mark-anchor 'slash' markMiddle (XH / 2) markMiddle (XH / 2)
include : dispiro
flat (Middle - Width - dx) (XH / 2 - gap) [widths fine fine]
curl (Middle - Width + dx) (XH / 2 - gap)
include : dispiro
flat (Middle - Width - dx) (XH / 2 + gap) [widths fine fine]
curl (Middle - Width + dx) (XH / 2 + gap)
create-glyph 'slashOver' 0x337 : glyph-proc
set-width 0
local fine : 0.375 * OverlayStroke
set-mark-anchor 'slash' 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)
create-glyph 'longSlashOver' 0x338 : glyph-proc
set-width 0
local fine : 0.375 * OverlayStroke
set-mark-anchor 'slash' 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)
define aboveTieBase aboveMarkTop
define aboveTieTop : mix XH aboveMarkTop 2
define aboveTieBottom : aboveTieTop - (aboveMarkTop - aboveMarkBot) * 0.875
define belowTieBase Descender
define belowTieBottom : Descender - (0 - belowMarkBot)
local tieLeft [mix 0 markMiddle 1.5]
local tieRight (-tieLeft)
create-glyph 'tieAbove' 0x361 : glyph-proc
set-width 0
set-mark-anchor 'tieAbove' 0 aboveTieBase 0 aboveTieTop
TieGlyph.set currentGlyph
include : dispiro
widths.center (markHalfStroke * 2)
g4 tieLeft aboveTieBottom
quadControls 0.5 1
g4.right.mid 0 aboveTieTop [heading Rightward]
quadControls 0.5 0
g4 tieRight aboveTieBottom
create-glyph 'turnTieAbove' 0x35D : glyph-proc
set-width 0
set-mark-anchor 'tieAbove' 0 aboveTieBase 0 aboveTieTop
TieGlyph.set currentGlyph
include : dispiro
widths.center (markHalfStroke * 2)
g4 tieLeft aboveTieTop
quadControls 0.5 1
g4.right.mid 0 aboveTieBottom [heading Rightward]
quadControls 0.5 0
g4 tieRight aboveTieTop
create-glyph 'tieBelow' 0x35C : glyph-proc
set-width 0
set-mark-anchor 'tieBelow' 0 belowTieBase 0 belowTieBottom
TieGlyph.set currentGlyph
include [refer-glyph 'tieAbove']
include : FlipAround 0 (XH / 2)
create-glyph 'overlineTieAbove' 0x35E : glyph-proc
set-width 0
set-mark-anchor 'tieAbove' 0 aboveTieBase 0 aboveTieTop
TieGlyph.set currentGlyph
include : dispiro
widths.center (markHalfStroke * 2)
flat tieLeft (aboveTieBase + Accent)
curl tieRight (aboveTieBase + Accent)
create-glyph 'underlineTieBelow' 0x35F : glyph-proc
set-width 0
set-mark-anchor 'tieBelow' 0 belowTieBase 0 belowTieBottom
TieGlyph.set currentGlyph
include [refer-glyph 'overlineTieAbove']
include : FlipAround 0 (XH / 2)
create-glyph 'arrowTieBelow' 0x362 : glyph-proc
set-width 0
set-mark-anchor 'tieBelow' 0 belowTieBase 0 belowTieBottom
TieGlyph.set currentGlyph
include : HBar tieLeft tieRight (Descender - Accent) (markFine * 2)
include : new-glyph : glyph-proc
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 : markFine * 2
flat left top
curl right [mix top bot 0.5] [widths.heading (markFine * exp) (markFine * exp) Downward]
include : dispiro
widths.center : markFine * 2
flat left bot
curl right [mix top bot 0.5] [widths.heading (markFine * exp) (markFine * exp) Upward]
create-glyph 'tildeTieAbove' 0x360 : glyph-proc
set-width 0
set-mark-anchor 'tieAbove' 0 aboveTieBase 0 aboveTieTop
TieGlyph.set currentGlyph
include : TildeShape
ttop -- aboveTieTop
tbot -- aboveTieBottom
leftEnd -- tieLeft
rightEnd -- tieRight
hs -- markHalfStroke
define [GreekLRDoubleMark id unicode leftGlyph rightGlyph] : begin
local k : -Width * 0.15
create-glyph id : glyph-proc
set-width 0
include leftGlyph
include : Translate (2 * k) 0
include rightGlyph
include : Translate (0 - k) 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
create-glyph "\(id)GrekUpperTonos" : glyph-proc
set-width 0
include [refer-glyph id]
set-mark-anchor 'grekUpperTonos' (markMiddle - k) XH
if unicode : create-glyph ('spaced' + id) unicode : glyph-proc
include [refer-glyph 'markBaseSpace'] AS_BASE
set-width [query-glyph 'markBaseSpace'].advanceWidth
include [refer-glyph id]
GreekLRDoubleMark 'psiliVaria' 0x1FCD [refer-glyph 'commaAbove'] [refer-glyph 'variaAbove']
GreekLRDoubleMark 'psiliOxia' 0x1FCE [refer-glyph 'commaAbove'] [refer-glyph 'oxiaAbove']
GreekLRDoubleMark 'dasiaVaria' 0x1FDD [refer-glyph 'revCommaAbove'] [refer-glyph 'variaAbove']
GreekLRDoubleMark 'dasiaOxia' 0x1FDE [refer-glyph 'revCommaAbove'] [refer-glyph 'oxiaAbove']
local yc : aboveMarkTop - commaAboveRadius + DotRadius * 0.3 + commaOvershoot
create-glyph 'psiliPerispomeni' : glyph-proc
set-width 0
include : refer-glyph "commaAbove"
local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
include : dispiro
widths.lhs : Math.min (markHalfStroke * 2) ([AdviceStroke 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-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
create-glyph 'psiliPerispomeniGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'psiliPerispomeni'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'spaced_psiliPerispomeni' 0x1FCF : glyph-proc
include [refer-glyph 'markBaseSpace'] AS_BASE
set-width [query-glyph 'markBaseSpace'].advanceWidth
include : refer-glyph "psiliPerispomeni"
create-glyph 'dasiaPerispomeni' : glyph-proc
set-width 0
include : refer-glyph "revCommaAbove"
local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
include : dispiro
widths.lhs : Math.min (markHalfStroke * 2) ([AdviceStroke 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-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
create-glyph 'dasiaPerispomeniGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'dasiaPerispomeni'
set-mark-anchor 'grekUpperTonos' markMiddle XH
create-glyph 'cyrlPsiliPokrytieAbove' : glyph-proc
set-width 0
include : refer-glyph "commaAbove"
local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
local sw : Math.min (markHalfStroke * 2) ([AdviceStroke 6.5] * 1.25)
include : dispiro
widths.lhs sw
g4.up.start (markMiddle - radius) yc [heading Upward]
arcvh
g2.right.mid markMiddle (yc + radius)
alsoThru.g2 0.5 0.5
g2.right.end (markMiddle + [Math.max radius (markExtend * 2)]) yc [heading Rightward]
set-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
create-glyph 'spaced_dasiaPerispomeni' 0x1FDF : glyph-proc
include [refer-glyph 'markBaseSpace'] AS_BASE
set-width [query-glyph 'markBaseSpace'].advanceWidth
include : refer-glyph "dasiaPerispomeni"
if [not recursive] : begin
define AnchorMap : list
list 'above' 'tieAbove' 'aboveBrace'
list 'below' 'tieBelow' 'belowBrace'
foreach { gn g } [glyphStore.namedEntries] : begin
local handled false
foreach { akFrom akTo akBrace } [items-of AnchorMap] : begin
if (!handled && g.markAnchors && g.markAnchors.(akFrom)) : begin
set handled true
local toGN : TieMark.amendName gn
create-glyph toGN : glyph-proc
include g AS_BASE ALSO_METRICS
set currentGlyph.markAnchors.(akTo) currentGlyph.markAnchors.(akFrom)
currentGlyph.deleteMarkAnchor akFrom
set currentGlyph.baseAnchors.(akTo) currentGlyph.baseAnchors.(akFrom)
currentGlyph.deleteBaseAnchor akFrom
currentGlyph.deleteBaseAnchor akBrace
TieMark.set g toGN