Iosevka/font-src/glyphs/overmarks.ptl

1383 lines
54 KiB
Text

$$include '../meta/macros.ptl'
import [OffsetCurve BezToContoursSink GEOMETRY_PRECISION] from '../support/curve-util'
import [mix linreg clamp fallback] from '../support/utils'
import [designParameters] from '../meta/aesthetics'
import [Arcs Quadify transferGenericShapeAsBezier] from "typo-geom"
import [TieMark TieGlyph] from "../support/gr"
glyph-module
glyph-block Overmarks : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
### Combining marks
local markExtend (AccentX * 0.5)
local markHalfStroke : 0.5 * [adviceBlackness2 3.5 3.375 XH]
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 belowMarkMid [mix belowMarkBot belowMarkTop 0.5]
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
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 : Upright
include : Translate 0 (-markFine * 0.75)
include : Italify
create-glyph 'dblRingAbove' 0x1AB2 : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set-base-anchor 'aboveBrace' markMiddle (XH + Accent)
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'
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' '`' : glyph-proc
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]
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
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]
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)
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
transferGenericShapeAsBezier {{inner outer}} cs GEOMETRY_PRECISION
currentGlyph.includeGeometry cs 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 -- ([adviceBlackness 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 -- ([adviceBlackness 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 : [adviceBlackness 4.5] / 2
include : TildeShape
ttop -- ttop
tbot -- tbot
leftEnd -- (markMiddle - markExtend * 1.5)
rightEnd -- (markMiddle + markExtend * 1.5)
hs -- fine
create-derived '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-derived '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 -- ([adviceBlackness 4.5] / 2)
local shift : (ttop - tbot) * 1.2
include : addTilde
include : Upright
include : Translate 0 shift
include : Italify
include : addTilde
include : Upright
include : Translate 0 (-0.5 * shift)
include : Italify
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 '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 : Upright
include : Translate 0 (DotRadius * 0.3)
include : Italify
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 : Upright
include : Translate 0 (DotRadius * 0.3)
include : Italify
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 '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 : 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
include : Upright
include : Translate 0 (fine * 0.5)
include : Italify
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 '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 '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' 0xE092 : 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' 0xE093 'upArrowHeadAbove' markMiddle aboveMarkMid
define [ArrowheadForArrowMarkAbove-Up] : new-glyph : glyph-proc
local fine : [adviceBlackness 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 : [adviceBlackness 6] / 2
include : VBar markMiddle aboveMarkTop aboveMarkBot (fine * 2)
define [ArrowheadForArrowMarkAbove-Left] : new-glyph : glyph-proc
local fine : [adviceBlackness 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 : [adviceBlackness 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 : SB - Width
local right : RightSB - Width
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) aboveMarkTop
g4 (left + OX) aboveMarkMid
g4 (left + braceDepth) aboveMarkBot
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) aboveMarkTop
g4 (right - OX) aboveMarkMid
g4 (right - braceDepth) aboveMarkBot
### Below marks
create-glyph 'cedillaBelow' 0x327 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
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)
define [OgonekBelowShape] : glyph-proc
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
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]
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 : [adviceBlackness 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)
# 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 'dblBarBelow' 0x348 'dblBarAbove'
TurnAboveMarkToBelow 'crossBelow' 0x353 'crossAbove'
TurnAboveMarkToBelow 'lessBelow' 0x354 'greaterAbove'
TurnAboveMarkToBelow 'greaterBelow' 0x355 'lessAbove'
TurnAboveMarkToBelow 'upArrowHeadBelow' 0xE094 'downArrowHeadAbove'
TurnAboveMarkToBelow 'downArrowHeadBelow' 0xE095 'upArrowHeadAbove'
TurnAboveMarkToBelow 'dblRingBelow' 0x35a 'dblRingAbove'
TurnAboveMarkToBelow 'lrArrowBelow' 0x34D 'lrArrowAbove'
TurnAboveMarkToBelow 'upArrowBelow' 0x34E 'downArrowAbove'
create-glyph 'greaterAndUpArrowheadBelow' 0x0356 : glyph-proc
set-width 0
set-mark-anchor 'below' markMiddle 0 markMiddle belowMarkBot
set-base-anchor 'belowBrace' markMiddle belowMarkMid
include : WithTransform [Translate (-markExtend) 0] : refer-glyph 'greaterBelow'
include : WithTransform [Translate (+markExtend) 0] : refer-glyph 'upArrowHeadBelow'
create-glyph 'braceBelow' 0x1ABD : glyph-proc
set-width 0
set-mark-anchor 'belowBrace' markMiddle belowMarkMid markMiddle belowMarkMid
local braceDepth : markExtend * 0.25
local left : SB - Width
local right : RightSB - Width
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) belowMarkTop
g4 (left + OX) belowMarkMid
g4 (left + braceDepth) belowMarkBot
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) belowMarkTop
g4 (right - OX) belowMarkMid
g4 (right - braceDepth) belowMarkBot
# horn and angle marks
define [HornDim attX attY overshootX overshootY yrP] : begin
local radius commaAboveRadius
local hornFine : Math.min (radius * 0.8) (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
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 + OX / 2)
dispiro
g4.down.start (startX + OX) (startY) [widths.rhs.heading [Math.min (radius / 2) ShoulderFine] Downward]
arcvh
g4.left.mid (startX - radius) (startY - radius) [heading Leftward]
archv
g4.up.mid (startX - 2 * radius) (startY) [heading Upward]
arcvh
g4.right.mid (startX - radius) (startY + radius) [heading Rightward]
archv
g4.down.mid startX startY [widths.rhs.heading hornFine Downward]
quadcontrols.g4 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 : Upright
include : Translate (RightSB - Middle + DotRadius) 0
include : Italify
set-mark-anchor 'topright' 0 XH 0 aboveMarkTop
create-glyph 'commaTR' 0x315 : glyph-proc
set-width 0
include : refer-glyph "commaAbove"
include : Upright
include : Translate (RightSB - Middle + DotRadius) 0
include : Italify
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)
set currentGlyph.autoRefPriority (-2)
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)
set currentGlyph.autoRefPriority (-2)
# 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 : Upright
include : Translate 0 (XH / 2 - [mix aboveMarkTop aboveMarkBot 0.5])
include : Italify
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' 0xE091 : 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' 0xE090 : 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
include : ForceUpright
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
include : ForceUpright
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
include : ForceUpright
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
include : ForceUpright
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
create-glyph id : glyph-proc
set-width 0
local k : -Width * 0.15
include leftGlyph
include : Translate (2 * k) 0
include rightGlyph
include : Translate (0 - k) 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkTop
set currentGlyph.autoRefPriority 50
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) ([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-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
set currentGlyph.autoRefPriority 50
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) ([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-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
set currentGlyph.autoRefPriority 50
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
glyph-block-export markExtend markHalfStroke markStress markFine markMiddle markDotsRadius aboveMarkTop aboveMarkBot aboveMarkMid belowMarkBot belowMarkTop commaOvershoot commaOvershoot2 commaAboveRadius TildeShape HornShape HornMarkAnchor HornBaseAnchor