Iosevka/font-src/glyphs/marks/above.ptl
2023-07-29 13:52:25 -07:00

1178 lines
46 KiB
Text

$$include '../../meta/macros.ptl'
import [Arcs Quadify ShapeConv] from "typo-geom"
import [OffsetCurve BezToContoursSink GEOMETRY_PRECISION] from"../../support/geometry/curve-util.mjs"
import [mix linreg clamp fallback] from"../../support/utils.mjs"
import [DesignParameters] from"../../meta/aesthetics.mjs"
import [TieMark TieGlyph] from"../../support/gr.mjs"
import [Box] from"../../support/geometry/box.mjs"
import [Point] from"../../support/geometry/point.mjs"
glyph-module
glyph-block Mark-Above : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markExtend markStroke markHalfStroke markStress markFine
glyph-block-import Mark-Shared-Metrics : asciiMarkZoomX asciiMarkZoomY
glyph-block-import Mark-Shared-Metrics : markMiddle markDotsRadius dialytikaRadius
glyph-block-export aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
define aboveMarkTop (XH + AccentClearance + AccentHeight)
define aboveMarkBot (XH + AccentClearance)
define aboveMarkMid [mix aboveMarkBot aboveMarkTop 0.5]
define aboveMarkStack (XH + AccentStackOffset)
glyph-block-export commaOvershoot commaOvershoot2 commaAboveRadius
define commaOvershoot : O * [linreg 16 0 90 (-1) markStroke]
define commaOvershoot2 : O * [linreg 16 1 90 (-1) markStroke]
define commaAboveRadius : 0.85 * DotRadius * markHalfStroke / HalfStroke
define StdAnchors : namespace
export : define [impl mk padding k] : glyph-proc
if (mk === 'above')
: then : set-mark-anchor mk markMiddle (XH - padding * AccentHeight) markMiddle (aboveMarkStack + padding * AccentHeight)
: else : set-mark-anchor mk markMiddle (XH - padding * AccentHeight)
set-base-anchor 'aboveBraceL' (markMiddle - k * markExtend) aboveMarkMid
set-base-anchor 'aboveBraceR' (markMiddle + k * markExtend) aboveMarkMid
export : define [narrow] : impl 'above' 0 0
export : define [mediumNarrow] : impl 'above' 0 0.25
export : define [medium] : impl 'above' 0 0.5
export : define [mediumWide] : impl 'above' 0 0.75
export : define [wide] : impl 'above' 0 1
export : define [extraWide] : impl 'above' 0 1.5
### Above marks
foreach { suffix { DrawAt kdr } } [Object.entries DotVariants] : do
create-glyph "dotAbove.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.narrow
include : DrawAt markMiddle aboveMarkMid (DotRadius * kdr)
create-glyph "dieresisAbove.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.wide
include : DrawAt (markMiddle - markExtend) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend) aboveMarkMid (markDotsRadius * kdr)
create-glyph "dieresisAboveAlwaysUpright.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.wide
include : ForceUpright
include : DrawAt (markMiddle - markExtend) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend) aboveMarkMid (markDotsRadius * kdr)
create-glyph "dialytikaAbove.\(suffix)" : glyph-proc
set-width 0
include : DrawAt (markMiddle - markExtend * 1.25) aboveMarkMid (dialytikaRadius * kdr)
include : DrawAt (markMiddle + markExtend * 1.25) aboveMarkMid (dialytikaRadius * kdr)
create-glyph "tripleDotAbove.\(suffix)" : glyph-proc
set-width 0
local height : markExtend * [Math.sqrt 3]
set-mark-anchor 'above' markMiddle XH markMiddle (aboveMarkStack + height)
set-base-anchor 'aboveBraceL' (markMiddle - markExtend) (aboveMarkMid + height / 2)
set-base-anchor 'aboveBraceR' (markMiddle + markExtend) (aboveMarkMid + height / 2)
include : DrawAt (markMiddle - markExtend) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt markMiddle (aboveMarkMid + height) (markDotsRadius * kdr)
create-glyph "elipsisAbove.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 1.5
include : DrawAt (markMiddle - markExtend * 1.5) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt markMiddle aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend * 1.5) aboveMarkMid (markDotsRadius * kdr)
create-glyph "fourDotsAbove.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 2
include : DrawAt (markMiddle - markExtend * 2) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle - markExtend * 2 / 3) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend * 2 / 3) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle + markExtend * 2) aboveMarkMid (markDotsRadius * kdr)
select-variant 'dotAbove' 0x307 (follow -- 'diacriticDot')
select-variant 'dieresisAbove' 0x308 (follow -- 'diacriticDot')
select-variant 'dieresisAboveAlwaysUpright' (follow -- 'diacriticDot')
select-variant 'dialytikaAbove' (follow -- 'diacriticDot')
select-variant 'tripleDotAbove' 0x1AB4 (follow -- 'diacriticDot')
select-variant 'elipsisAbove' 0x20DB (follow -- 'diacriticDot')
select-variant 'fourDotsAbove' 0x20DC (follow -- 'diacriticDot')
glyph-block-export RingDims RingShape
define [RingDims _radiusOut] : begin
local radiusOut : fallback _radiusOut : AccentHeight * [linreg 16 0.5 90 0.75 markStroke]
local radiusIn : radiusOut - markFine * [linreg 16 2 90 1.75 markStroke]
return [object radiusIn radiusOut]
define [RingShape cx cy _radiusOut] : glyph-proc
local [object radiusIn radiusOut] : RingDims _radiusOut
include : difference
DotAt cx cy radiusOut
DotAt cx cy radiusIn
create-glyph 'ringAbove' 0x30A : glyph-proc
set-width 0
include : StdAnchors.medium
include : RingShape markMiddle aboveMarkMid
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'
include : StdAnchors.wide
foreach { suffix { DrawAt kdr } } [Object.entries DotVariants] : do
create-glyph "dieresisRingAbove.\(suffix)" : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 1.5
include : RingShape markMiddle aboveMarkMid
include : DrawAt (markMiddle + markExtend * 1.7) aboveMarkMid (markDotsRadius * kdr)
include : DrawAt (markMiddle - markExtend * 1.7) aboveMarkMid (markDotsRadius * kdr)
select-variant 'dieresisRingAbove' 0x1AB1 (follow -- 'diacriticDot')
create-glyph 'graveAbove' 0x300 : glyph-proc
set-width 0
include : StdAnchors.medium
include : dispiro
flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
curl (markMiddle - 0.875 * markExtend) aboveMarkTop [widths markStress markStress]
create-glyph 'asciiGrave/body/straight' : glyph-proc
local df : DivFrame para.diversityF
set-width df.width
include : dispiro
flat (df.middle + HalfStroke * 1.1 * asciiMarkZoomX * [Math.sqrt df.div]) [mix aboveMarkMid aboveMarkBot asciiMarkZoomY] [widths.center : Stroke * 0.9]
curl (df.middle - markExtend * asciiMarkZoomX * [Math.sqrt df.div]) [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] [widths.center : Stroke * 1.1]
create-glyph 'acuteAbove' 0x301 : glyph-proc
set-width 0
include : StdAnchors.medium
include : dispiro
flat (markMiddle - markStress) aboveMarkBot [widths markFine markFine]
curl (markMiddle + 0.875 * 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 * asciiMarkZoomX * [Math.sqrt df.div]) [mix aboveMarkMid aboveMarkBot asciiMarkZoomY] [widths.center : Stroke * 0.9]
curl (df.middle + markExtend * asciiMarkZoomX * [Math.sqrt df.div]) [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] [widths.center : Stroke * 1.1]
define CaretCaronWidth : 2 * markExtend + markStress
define CaretCaronMidSw : [StrokeWidthBlend 1.375 1.25] * markStroke
define CaretCaronTerminalSw : AdviceStroke 5
define [CaretLeftShape] : with-params [top bottom xMiddle width swEnd swMid] : dispiro
flat (xMiddle - 0.5 * width) bottom [widths.center swEnd]
curl xMiddle top [widths.center.heading swMid Upward]
define [CaretRightShape] : with-params [top bottom xMiddle width swEnd swMid] : dispiro
flat (xMiddle + 0.5 * width) bottom [widths.center swEnd]
curl xMiddle top [widths.center.heading swMid Upward]
define [CaretTopBarShape] : with-params [top xMiddle width pL pR swMid swBar] : dispiro
widths.rhs swBar
flat [Math.min (xMiddle + 0.5 * width * pL) (xMiddle - 0.5 * swMid * HVContrast)] top
curl [Math.max (xMiddle + 0.5 * width * pR) (xMiddle + 0.5 * swMid * HVContrast)] top
define [CaretShape] : with-params [top bottom xMiddle width swEnd swMid] : union
CaretLeftShape top bottom xMiddle width swEnd swMid
CaretRightShape top bottom xMiddle width swEnd swMid
create-glyph 'asciiCaret.high' : glyph-proc
include : CaretShape
xMiddle -- Middle
width -- 3 * markExtend * asciiMarkZoomX - 0.25 * Stroke
top -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] + 0.5 * Stroke
bottom -- [mix aboveMarkMid aboveMarkBot asciiMarkZoomY]
swEnd -- Stroke * 1.05
swMid -- [StrokeWidthBlend 1.25 1] * Stroke
create-glyph 'circumflexAbove' 0x302 : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaretShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop + markFine * 0.7
bottom -- aboveMarkBot + markStress - markFine
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
create-glyph 'bardownAbove' 0x1DC6 : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaretRightShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop + markFine * 0.7
bottom -- aboveMarkBot + markStress - markFine
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
include : CaretTopBarShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop + markFine * 0.7
pL -- (-1)
pR -- 0
swMid -- CaretCaronMidSw
swBar -- 2 * markFine
create-glyph 'upbarAbove' 0x1DC7 : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaretLeftShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop + markFine * 0.7
bottom -- aboveMarkBot + markStress - markFine
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
include : CaretTopBarShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop + markFine * 0.7
pL -- 0
pR -- 1
swMid -- CaretCaronMidSw
swBar -- 2 * markFine
define [CaronLeftShape] : with-params [top bottom xMiddle width swEnd swMid] : dispiro
flat (xMiddle - 0.5 * width) top [widths.center swEnd]
curl xMiddle bottom [widths.center.heading swMid Downward]
define [CaronRightShape] : with-params [top bottom xMiddle width swEnd swMid] : dispiro
flat (xMiddle + 0.5 * width) top [widths.center swEnd]
curl xMiddle bottom [widths.center.heading swMid Downward]
define [CaronBottomBarShape] : with-params [bottom xMiddle width pL pR swMid swBar] : dispiro
widths.lhs swBar
flat [Math.min (xMiddle + 0.5 * width * pL) (xMiddle - 0.5 * swMid * HVContrast)] bottom
curl [Math.max (xMiddle + 0.5 * width * pR) (xMiddle + 0.5 * swMid * HVContrast)] bottom
define [CaronShape] : with-params [top bottom xMiddle width swEnd swMid] : union
CaronLeftShape top bottom xMiddle width swEnd swMid
CaronRightShape top bottom xMiddle width swEnd swMid
create-glyph 'caronAbove' 0x30c : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaronShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop - markStress + 1.7 * markFine
bottom -- aboveMarkBot
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
create-glyph 'barupAbove' 0x1DC4 : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaronRightShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop - markStress + 1.7 * markFine
bottom -- aboveMarkBot
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
include : CaronBottomBarShape
xMiddle -- markMiddle
width -- CaretCaronWidth
bottom -- aboveMarkBot
pL -- (-1)
pR -- 0
swMid -- CaretCaronMidSw
swBar -- 2 * markFine
create-glyph 'downbarAbove' 0x1DC5 : glyph-proc
set-width 0
include : StdAnchors.wide
include : CaronLeftShape
xMiddle -- markMiddle
width -- CaretCaronWidth
top -- aboveMarkTop - markStress + 1.7 * markFine
bottom -- aboveMarkBot
swEnd -- CaretCaronTerminalSw
swMid -- CaretCaronMidSw
include : CaronBottomBarShape
xMiddle -- markMiddle
width -- CaretCaronWidth
bottom -- aboveMarkBot
pL -- 0
pR -- 1
swMid -- CaretCaronMidSw
swBar -- 2 * markFine
create-glyph 'dblCircumflexAbove' 0x1AB0 : glyph-proc
set-width 0
include : intersection [MaskRight markMiddle]
WithTransform [Translate (+markExtend) 0] : refer-glyph 'circumflexAbove'
include : intersection [MaskLeft markMiddle]
WithTransform [Translate (-markExtend) 0] : refer-glyph 'circumflexAbove'
include : StdAnchors.extraWide
define [TildeKnots] : with-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]
return { z1 z2 z3 z4 }
glyph-block-export TildeShape
define [TildeShape] : with-params [ttop tbot leftEnd rightEnd hs] : glyph-proc
define { z1 z2 z3 z4 } : include : TildeKnots ttop tbot leftEnd rightEnd hs
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
include : StdAnchors.wide
include : TildeShape
ttop -- aboveMarkTop
tbot -- aboveMarkBot + markFine / 2
leftEnd -- (markMiddle - markExtend * 1.5)
rightEnd -- (markMiddle + markExtend * 1.5)
hs -- markHalfStroke
create-glyph 'asciiTilde.high' : glyph-proc
include : TildeShape
ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY]
tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY]
leftEnd -- SB
rightEnd -- RightSB
hs -- (OperatorStroke / 2)
for-width-kinds WideWidth1
define emDashWidth : if (para.isQuasiProportional && MosaicWidthScalar > 1) UPM MosaicWidth
create-glyph [MangleName 'swungDash.high'] : glyph-proc
set-width emDashWidth
include : TildeShape
ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY]
tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY]
leftEnd -- SB
rightEnd -- (emDashWidth - SB)
hs -- (OperatorStroke / 2)
define [OverlayTildeT sink] : begin
local t : mix aboveMarkMid aboveMarkTop asciiMarkZoomY
local b : mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY
local offset : SymbolMid - [mix t b (1 / 2)]
return : sink
ttop -- (t + offset)
tbot -- (b + offset)
leftEnd -- [mix 0 SB (1/3)]
rightEnd -- [mix Width RightSB (1/3)]
hs -- ([AdviceStroke 4] / 2)
create-glyph 'overlayTildeOperator' : glyph-proc
include : OverlayTildeT TildeShape
create-glyph 'overlayTildeOperatorAboveMask' : glyph-proc
define FarRight : Width * 4
define FarLeft : -Width * 3
define FarAbove : CAP * 4
define { z1 z2 z3 z4 } : include : OverlayTildeT TildeKnots
define arcs : list : list
new Arcs.Bez3 z1 z2 z3 z4
new Arcs.StraightSegment z4 [Point.withX z4 FarRight]
new Arcs.StraightSegment [Point.withX z4 FarRight] [Point.corner FarRight FarAbove]
new Arcs.StraightSegment [Point.corner FarRight FarAbove] [Point.corner FarLeft FarAbove]
new Arcs.StraightSegment [Point.corner FarLeft FarAbove] [Point.withX z1 FarLeft]
new Arcs.StraightSegment [Point.withX z1 FarLeft] z1
define cs : new BezToContoursSink
ShapeConv.transferGenericShapeAsBezier arcs cs GEOMETRY_PRECISION
currentGlyph.includeContours cs.contours 0 0
create-glyph : glyph-proc
set-width 0
include : StdAnchors.wide
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]
foreach { suffix { DrawAt kdr } } [Object.entries DotVariants] : do
create-forked-glyph "tildedotdotAbove.\(suffix)" : glyph-proc
include : StdAnchors.impl 'above' (1 / 4) 1
local r : 0.75 * DotRadius * fine / HalfStroke
include : DrawAt markMiddle [mix tbot ttop 1.5] (r * kdr)
include : DrawAt markMiddle [mix ttop tbot 1.5] (r * kdr)
select-variant 'tildedotdotAbove' 0x34B (follow -- 'diacriticDot')
create-glyph 'dblTildeAbove' 0x34C : glyph-proc
set-width 0
include : StdAnchors.impl 'above' (1 / 4) 1
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
include : StdAnchors.wide
local leftEnd (markMiddle - markExtend * 1.5)
local rightEnd (markMiddle + markExtend * 1.5)
include : dispiro
flat leftEnd aboveMarkMid [widths markHalfStroke markHalfStroke]
curl rightEnd aboveMarkMid
create-glyph 'overlineAbove' 0x305 : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 2
include : dispiro
flat (0 - Width) aboveMarkMid [widths markHalfStroke markHalfStroke]
curl 0 aboveMarkMid
create-glyph 'sbRsbOverlineAbove' : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 1.5
include : dispiro
flat (SB - Width) aboveMarkMid [widths markHalfStroke markHalfStroke]
curl (RightSB - Width) aboveMarkMid
create-glyph 'dblOverlineAbove' 0x33F : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 2
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
include : StdAnchors.wide
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
include : StdAnchors.wide
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
include : StdAnchors.medium
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 (ArchDepthB / (ArchDepthB + ArchDepthA))] [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
include : StdAnchors.wide
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
include : StdAnchors.wide
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 'tripleAcuteAbove' 0x1ACB : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 1.5
local fine : 0.5 * [AdviceStroke 6]
local stress : 1.2 * fine
local m1 : markMiddle - markExtend * 1.275
local m2 markMiddle
local m3 : markMiddle + markExtend * 1.275
include : dispiro
flat (m1 - markStress) aboveMarkBot [widths fine fine]
curl (m1 + markExtend) aboveMarkTop [widths stress stress]
include : dispiro
flat (m2 - markStress) aboveMarkBot [widths fine fine]
curl (m2 + markExtend) aboveMarkTop [widths stress stress]
include : dispiro
flat (m3 - markStress) aboveMarkBot [widths fine fine]
curl (m3 + markExtend) aboveMarkTop [widths stress stress]
create-glyph 'commaAbove.round' : glyph-proc
set-width 0
include : StdAnchors.narrow
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 markStroke])
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 'commaAbove.square' : glyph-proc
set-width 0
include : StdAnchors.narrow
local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect aboveMarkTop (aboveMarkTop - radius * 2) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
flat (markMiddle + radius) aboveMarkTop [heading Downward]
curl (markMiddle + radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6
g4 [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
include : ApparentTranslate 0 (DotRadius * 0.3)
select-variant 'commaAbove' 0x313 (follow -- 'diacriticDot')
select-variant 'commaAbove/asPunctuation' (shapeFrom -- 'commaAbove') (follow -- 'punctuationDot')
derive-glyphs 'commaGrekUpperTonos' null 'commaAbove' : function [src gr] : glyph-proc
set-width 0
include : refer-glyph src
include : StdAnchors.impl 'grekUpperTonos' 0 0
derive-glyphs 'turnCommaAbove' 0x312 'commaAbove' : function [src gr] : glyph-proc
set-width 0
include : refer-glyph src
include : FlipAround markMiddle ([mix aboveMarkTop (aboveMarkBot - commaAboveRadius) 0.5] + (DotRadius * 0.3) + commaOvershoot / 2)
include : StdAnchors.narrow
create-glyph 'revCommaAbove.round' : glyph-proc
set-width 0
include : StdAnchors.narrow
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 markStroke])
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 'revCommaAbove.square' : glyph-proc
set-width 0
include : StdAnchors.narrow
local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
flat (markMiddle - radius) aboveMarkTop [heading Downward]
curl (markMiddle - radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6
g4 [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
include : ApparentTranslate 0 (DotRadius * 0.3)
select-variant 'revCommaAbove' 0x314 (follow -- 'diacriticDot')
derive-glyphs 'revCommaGrekUpperTonos' null 'revCommaAbove' : function [src gr] : glyph-proc
set-width 0
include : refer-glyph src
include : StdAnchors.impl 'grekUpperTonos' 0 0
create-glyph 'barAbove' 0x30D : glyph-proc
set-width 0
include : StdAnchors.narrow
include : VBar.m markMiddle aboveMarkBot aboveMarkTop markStroke
create-glyph 'ascenderBarAbove' : glyph-proc
set-width 0
include : StdAnchors.narrow
include : VBar.m markMiddle [mix XH aboveMarkBot 0.5] CAP markStroke
create-glyph 'dblBarAbove' 0x30E : glyph-proc
set-width 0
include : StdAnchors.mediumWide
include : VBar.m (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop markStroke
include : VBar.m (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop markStroke
create-glyph 'bridgeAbove' 0x346 : glyph-proc
set-width 0
include : StdAnchors.wide
include : VBar.m (markMiddle - markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
include : VBar.m (markMiddle + markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.t (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkTop (markFine * 2)
create-glyph 'wideBridgeAbove' 0x20E9 : glyph-proc
set-width 0
include : StdAnchors.impl 'above' 0 1.5
include : VBar.m (SB - Width) aboveMarkBot aboveMarkTop (markFine * 2)
include : VBar.m (RightSB - Width) aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.t (SB - Width) (RightSB - Width) aboveMarkTop (markFine * 2)
create-glyph 'yerikAbove' 0x33E : glyph-proc
set-width 0
include : StdAnchors.narrow
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]
foreach { suffix { DrawAt kdr } } [Object.entries DotVariants] : do
create-glyph "candrabinduAbove.\(suffix)" : glyph-proc
set-width 0
local fine : AdviceStroke 6.5
local arcSw : Math.min markStroke (fine * 1.25)
local radius : Math.max (markExtend - DotRadius) (fine * 1.35)
local yDot : mix aboveMarkBot aboveMarkTop 0.625
include : dispiro
widths.rhs arcSw
g4.down.start (markMiddle - radius) yDot [heading Downward]
arcvh
g4.right.mid markMiddle (yDot - radius)
archv
g4.up.end (markMiddle + radius) yDot [heading Upward]
include : DrawAt markMiddle yDot (fine * kdr)
include : ApparentTranslate 0 (fine * 0.5)
include : StdAnchors.mediumWide
select-variant 'candrabinduAbove' 0x310 (follow -- 'diacriticDot')
turned 'turncandrabinduAbove' 0x352 'candrabinduAbove' markMiddle aboveMarkMid
alias 'graveToneAbove' 0x340 'graveAbove'
alias 'acuteToneAbove' 0x341 'acuteAbove'
create-glyph 'tonosAbove' : glyph-proc
set-width 0
include : StdAnchors.narrow
local shift : 0.05 * markExtend + (markStress - markFine) * HVContrast
include : dispiro
flat (markMiddle + shift) (aboveMarkTop + 0.4 * markStress) [widths.center.heading (markStress * 2) Downward]
curl (markMiddle - 0.5 * shift) aboveMarkBot [widths.center.heading (markFine * 2) Downward]
create-glyph 'tonosGrekUpperTonos' : glyph-proc
set-width 0
include : refer-glyph 'tonosAbove'
include : StdAnchors.impl 'grekUpperTonos' 0 0
create-glyph 'variaAbove' : glyph-proc
set-width 0
include : StdAnchors.medium
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'
include : StdAnchors.impl 'grekUpperTonos' 0 0
create-glyph 'oxiaAbove' : glyph-proc
set-width 0
include : StdAnchors.medium
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'
include : StdAnchors.impl 'grekUpperTonos' 0 0
create-glyph 'perispomeniAbove' 0x342 : glyph-proc
set-width 0
include : refer-glyph "archAbove"
include : StdAnchors.wide
alias 'koronisAbove' 0x343 'commaAbove'
foreach { suffix { DrawAt kdr } } [Object.entries DotVariants] : do
create-glyph "dialytikaTonosAbove.\(suffix)" : glyph-proc
set-width 0
include : WithTransform [ApparentTranslate 0 (-1/8 * AccentHeight)] : refer-glyph "dialytikaAbove.\(suffix)"
include : WithTransform [ApparentTranslate 0 0] : refer-glyph 'tonosAbove'
include : StdAnchors.wide
create-glyph "dialytikaVariaAbove.\(suffix)" : glyph-proc
set-width 0
local shift : 0.125 * (markExtend * 0.875 - markStress)
include : WithTransform [ApparentTranslate 0 (-1/8 * AccentHeight)] : refer-glyph "dialytikaAbove.\(suffix)"
include : WithTransform [ApparentTranslate shift 0] : refer-glyph 'variaAbove'
include : StdAnchors.wide
create-glyph "dialytikaOxiaAbove.\(suffix)" : glyph-proc
set-width 0
local shift : 0.125 * (markExtend * 0.875 - markStress)
include : WithTransform [ApparentTranslate 0 (-1/8 * AccentHeight)] : refer-glyph "dialytikaAbove.\(suffix)"
include : WithTransform [ApparentTranslate (-shift) 0] : refer-glyph 'oxiaAbove'
include : StdAnchors.wide
select-variant 'dialytikaTonosAbove' 0x344 (follow -- 'diacriticDot')
select-variant 'dialytikaVariaAbove' (follow -- 'diacriticDot')
select-variant 'dialytikaOxiaAbove' (follow -- 'diacriticDot')
create-glyph 'crossAbove' 0x33D : glyph-proc
set-width 0
include : StdAnchors.mediumWide
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
include : StdAnchors.mediumWide
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
include : StdAnchors.medium
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 [VBar.mForArrowMarkAbove] : glyph-proc
local fine : [AdviceStroke 6] / 2
include : VBar.m 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 [HBar.mForArrowMarkAbove] : glyph-proc
local fine : [AdviceStroke 5.75] / 2
include : HBar.m (markMiddle - markExtend * 1.5) (markMiddle + markExtend * 1.5) aboveMarkMid (fine * 2)
create-glyph 'upArrowAbove' : glyph-proc
set-width 0
include : StdAnchors.medium
include : ArrowheadForArrowMarkAbove-Up
include : VBar.mForArrowMarkAbove
create-glyph 'downArrowAbove' 0x1AB3 : glyph-proc
set-width 0
include : StdAnchors.medium
include : ArrowheadForArrowMarkAbove-Down
include : VBar.mForArrowMarkAbove
create-glyph 'leftArrowAbove' 0x20D6 : glyph-proc
set-width 0
include : StdAnchors.wide
include : ArrowheadForArrowMarkAbove-Left
include : HBar.mForArrowMarkAbove
create-glyph 'rightArrowAbove' 0x20D7 : glyph-proc
set-width 0
include : StdAnchors.wide
include : ArrowheadForArrowMarkAbove-Right
include : HBar.mForArrowMarkAbove
create-glyph 'lrArrowAbove' 0x20E1 : glyph-proc
set-width 0
include : StdAnchors.wide
include : ArrowheadForArrowMarkAbove-Left
include : ArrowheadForArrowMarkAbove-Right
include : HBar.mForArrowMarkAbove
alias 'cyrlDasiaAbove' 0x485 'revCommaAbove'
alias 'cyrlPsiliAbove' 0x486 'commaAbove'
create-glyph 'cyrlPalatilizationAbove' 0x484 : glyph-proc
set-width 0
include : StdAnchors.wide
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
include : StdAnchors.wide
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
include : StdAnchors.wide
include : VBar.m (markMiddle - markExtend) aboveMarkBot (aboveMarkMid + markFine) (markFine * 2)
include : VBar.m (markMiddle + markExtend) (aboveMarkMid - markFine) aboveMarkTop (markFine * 2)
include : HBar.m (markMiddle - markExtend) (markMiddle + markExtend)aboveMarkMid (markFine * 2)
create-glyph 'zigzagAbove' 0x35B : glyph-proc
set-width 0
include : StdAnchors.mediumWide
local ext : 0.625 * markExtend + markFine
local coSlope 0.2
local fr : new Box aboveMarkTop aboveMarkBot (markMiddle - ext) (markMiddle + ext)
include : HBar.m 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)
create-glyph 'ogonekAbove' 0x1DCE : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBraceL' (markMiddle - 0.25 * markExtend) aboveMarkMid
set-base-anchor 'aboveBraceR' (markMiddle + 0.25 * markExtend + 0.25 * HVContrast * markStroke) aboveMarkMid
local fine : AdviceStroke 8
local depth : 0 - Descender - markStroke
local fullExt : (7 / 16) * depth + 0.125 * markStress
local extR : 0.25 * fullExt
local extL : 0.5 * fullExt + 0.375 * markStroke + [Math.max (0.125 * markExtend) (1.5 * TanSlope * markStroke)]
local turnSlope : 0.5 * ((markStroke - fine) / markStroke - (ArchDepthB - ArchDepth) / ArchDepth)
include : intersection
MaskAbove (XH + O)
dispiro
g4 (markMiddle + [mix extR (-extL) 0.75]) XH [widths.rhs.heading fine Rightward]
alsoThru 0.5 (0.375 - 0.2 * markStroke / depth) [widths.rhs : mix fine markStroke 0.25]
g4.up.mid (markMiddle + extR) (XH + 0.75 * depth) [widths.rhs.heading markStroke {.x (-HVContrast) .y (-turnSlope)}]
arcvh [widths.rhs markStroke]
g4 (markMiddle + [mix extR (-extL) 0.625]) (XH + depth - O) [heading Leftward]
g4 (markMiddle - extL) (XH + depth - 0.5 * O) [heading Leftward]
create-glyph 'leftHalfCircleAbove' 0x351 : glyph-proc
set-width 0
include : StdAnchors.narrow
local [object radiusIn radiusOut] : RingDims
include : dispiro
g4.left.start markMiddle aboveMarkTop [widths.center.heading (radiusOut - radiusIn) Leftward]
archv
g4.down.mid (markMiddle - (aboveMarkTop - aboveMarkBot) / 2) [mix aboveMarkTop aboveMarkBot 0.5] [heading Downward]
arcvh
g4.right.end markMiddle aboveMarkBot [heading Rightward]
include : Translate ((aboveMarkTop - aboveMarkBot) / 4) 0
create-glyph 'rightHalfCircleAbove' 0x357 : glyph-proc
set-width 0
include : StdAnchors.narrow
local [object radiusIn radiusOut] : RingDims
include : dispiro
g4.right.start markMiddle aboveMarkTop [widths.center.heading (radiusOut - radiusIn) Rightward]
archv
g4.down.mid (markMiddle + (aboveMarkTop - aboveMarkBot) / 2) [mix aboveMarkTop aboveMarkBot 0.5] [heading Downward]
arcvh
g4.left.end markMiddle aboveMarkBot [heading Leftward]
include : Translate (-(aboveMarkTop - aboveMarkBot) / 4) 0
create-glyph 'dblBreveAbove' 0x1AC7 : glyph-proc
set-width 0
include : StdAnchors.wide
local sw : [AdviceStroke 3.5] / Stroke * markStroke
local extend : (aboveMarkTop - aboveMarkBot - 0.5 * markStroke) * 1.25
include : dispiro
g4.down.start (markMiddle - extend) aboveMarkTop [widths.center.heading sw Downward]
arcvh
g4.right.mid [mix markMiddle (markMiddle - extend) 0.5] (aboveMarkBot + 0.5 * sw) [heading Rightward]
archv
g4.up.end markMiddle aboveMarkTop [heading Upward]
include : dispiro
g4.down.start markMiddle aboveMarkTop [widths.center.heading sw Downward]
arcvh
g4.right.mid [mix markMiddle (markMiddle + extend) 0.5] (aboveMarkBot + 0.5 * sw) [heading Rightward]
archv
g4.up.end (markMiddle + extend) aboveMarkTop [heading Upward]
create-glyph 'dblArchAbove' : glyph-proc
set-width 0
include : refer-glyph "dblBreveAbove"
include : FlipAround markMiddle [mix aboveMarkTop aboveMarkBot 0.5]
include : StdAnchors.wide
create-glyph 'plusAbove' 0x1AC8 : glyph-proc
set-width 0
include : StdAnchors.mediumWide
include : VBar.m markMiddle aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.m (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkMid (markFine * 2)
create-glyph 'dblPlusAbove' 0x1AC9 : glyph-proc
set-width 0
include : WithTransform [Translate (+markExtend) 0] : refer-glyph 'plusAbove'
include : WithTransform [Translate (-markExtend) 0] : refer-glyph 'plusAbove'
include : StdAnchors.extraWide
create-glyph 'upTackAbove' 0x1DF5 : glyph-proc
set-width 0
include : StdAnchors.medium
include : VBar.m markMiddle aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.b (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkBot (markFine * 2)
create-glyph 'downTackAbove' : glyph-proc
set-width 0
include : StdAnchors.medium
include : VBar.m markMiddle aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.t (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkTop (markFine * 2)
create-glyph 'leftParenAbove' 0x1AC1 : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceL' markMiddle aboveMarkMid (markMiddle - markExtend) aboveMarkMid
local braceDepth : markExtend * 0.25
local left : markMiddle - 1.5 * markExtend
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) (aboveMarkTop + markFine)
g4 (left + OX) aboveMarkMid
g4 (left + braceDepth) (aboveMarkBot - markFine)
create-glyph 'rightParenAbove' 0x1AC2 : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceR' markMiddle aboveMarkMid (markMiddle + markExtend) aboveMarkMid
local braceDepth : markExtend * 0.25
local right : markMiddle + 1.5 * markExtend
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) (aboveMarkTop + markFine)
g4 (right - OX) aboveMarkMid
g4 (right - braceDepth) (aboveMarkBot - markFine)
create-glyph 'parenAbove' 0x1ABB : glyph-proc
set-width 0
include : refer-glyph 'leftParenAbove'
include : refer-glyph 'rightParenAbove'
# No need to setup anchors -- ccmp will help us
create-glyph 'leftDoubleParenAbove' : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceL' markMiddle aboveMarkMid (markMiddle - 1.5 * markExtend) aboveMarkMid
local braceDepth : markExtend * 0.25
local left : markMiddle - 1.5 * markExtend
local gap : markFine * HVContrast + [Math.max markFine (markExtend * 0.5)]
include : dispiro
widths.lhs markFine
g4 (left + braceDepth) (aboveMarkTop + markFine)
g4 (left + OX) aboveMarkMid
g4 (left + braceDepth) (aboveMarkBot - markFine)
include : dispiro
widths.lhs markFine
g4 (left - gap + braceDepth) (aboveMarkTop + markFine)
g4 (left - gap + OX) aboveMarkMid
g4 (left - gap + braceDepth) (aboveMarkBot - markFine)
create-glyph 'rightDoubleParenAbove' : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceR' markMiddle aboveMarkMid (markMiddle + 1.5 * markExtend) aboveMarkMid
local braceDepth : markExtend * 0.25
local right : markMiddle + 1.5 * markExtend
local gap : markFine * HVContrast + [Math.max markFine (markExtend * 0.5)]
include : dispiro
widths.rhs markFine
g4 (right - braceDepth) (aboveMarkTop + markFine)
g4 (right - OX) aboveMarkMid
g4 (right - braceDepth) (aboveMarkBot - markFine)
include : dispiro
widths.rhs markFine
g4 (right + gap - braceDepth) (aboveMarkTop + markFine)
g4 (right + gap - OX) aboveMarkMid
g4 (right + gap - braceDepth) (aboveMarkBot - markFine)
create-glyph 'doubleParenAbove' 0x1ABC : glyph-proc
set-width 0
include : refer-glyph 'leftDoubleParenAbove'
include : refer-glyph 'rightDoubleParenAbove'
# No need to setup anchors -- ccmp will help us
create-glyph 'leftBrackAbove' : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceL' markMiddle aboveMarkMid (markMiddle - markExtend) aboveMarkMid
local braceDepth : markExtend * 0.75
local left : markMiddle - 1.75 * markExtend
include : VBar.l left aboveMarkBot aboveMarkTop markFine
include : HBar.t left (left + braceDepth) aboveMarkTop markFine
include : HBar.b left (left + braceDepth) aboveMarkBot markFine
create-glyph 'rightBrackAbove' : glyph-proc
set-width 0
set-mark-anchor 'aboveBraceR' markMiddle aboveMarkMid (markMiddle + markExtend) aboveMarkMid
local braceDepth : markExtend * 0.75
local right : markMiddle + 1.75 * markExtend
include : VBar.r right aboveMarkBot aboveMarkTop markFine
include : HBar.t (right - braceDepth) right aboveMarkTop markFine
include : HBar.b (right - braceDepth) right aboveMarkBot markFine
create-glyph 'brackAbove' 0x1AC5 : glyph-proc
set-width 0
include : refer-glyph 'leftBrackAbove'
include : refer-glyph 'rightBrackAbove'
# No need to setup anchors -- ccmp will help us