
### Combining marks

local markExtend (ACCENTX * 0.5)
local markHalfStroke : 0.5 * [adviceBlackness 3.375]
local markStress : markHalfStroke * 1.1
local markFine : markHalfStroke * 0.9

local markMiddle (-MIDDLE)
local markDotsRadius : DOTRADIUS * [Math.min 1 (markStress / HALFSTROKE)]

local aboveMarkTop (XH + ACCENT * 1.38)
local aboveMarkBot (XH + ACCENT * 0.35)
local aboveMarkMid [mix aboveMarkBot aboveMarkTop 0.5]

local belowMarkBot (0 - ACCENT * 1.38)
local belowMarkTop (0 - ACCENT * 0.35)

local commaOvershoot  : O * [linreg 16 0 90 (-1) (markHalfStroke * 2)]
local commaOvershoot2 : O * [linreg 16 1 90 (-1) (markHalfStroke * 2)]
local commaAboveRadius : 0.85 * DOTRADIUS * markHalfStroke / HALFSTROKE

local asciiMarkZoom : (RIGHTSB - SB) / (markExtend * 3)

### Above marks
define {TildeShape} : symbol-block 'Above marks'
	sketch # dotAbove
		set-width 0
		currentGlyph.shortName = 'dot'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include : Ring (XH + ACCENT + DOTRADIUS) (XH + ACCENT - DOTRADIUS) (markMiddle - DOTRADIUS) (markMiddle + DOTRADIUS) true
	
		save 'dotAbove' 0x307
	
	sketch # dieresisAbove
		set-width 0
		currentGlyph.shortName = 'dieresis'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include : Ring (XH + ACCENT + markDotsRadius) (XH + ACCENT - markDotsRadius) (markMiddle - markDotsRadius - markExtend) (markMiddle + markDotsRadius - markExtend) true
		include : Ring (XH + ACCENT + markDotsRadius) (XH + ACCENT - markDotsRadius) (markMiddle - markDotsRadius + markExtend) (markMiddle + markDotsRadius + markExtend) true
	
		save 'dieresisAbove' 0x308
	
	sketch # ringAbove
		set-width 0
		currentGlyph.shortName = 'ring'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local radiusIn  : ACCENT * 0.24
		local radiusOut : radiusIn + markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)]
		include : Ring (XH + ACCENT + radiusOut) (XH + ACCENT - radiusOut) (markMiddle - radiusOut) (markMiddle + radiusOut) true
		include : Ring (XH + ACCENT + radiusIn) (XH + ACCENT - radiusIn) (markMiddle - radiusIn) (markMiddle + radiusIn) true
		reverse-last
		apply-transform : Upright
		apply-transform : Translate 0 (-markFine * 0.75)
		apply-transform : Italify
	
		save 'ringAbove' 0x30A
		
		local g [branch]
		branch
			set currentGlyph.anchors {.}
			local k : 2 * (radiusOut - (radiusOut - radiusIn) * 0.25)
			apply-transform : Translate k 0
			include g
			include : Translate (-k / 2) 0
			set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
			save 'dblRingAbove' 0x1AB2
	
	sketch # graveAbove
		set-width 0
		currentGlyph.shortName = 'grave'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
			curl (markMiddle - markExtend) aboveMarkTop [widths markStress markStress]
	
		save 'graveAbove' 0x300

	sketch # asciigrave
		include : dispiro
			flat (MIDDLE + HALFSTROKE * 1.1 * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] [widths.center : STROKE * 0.9]
			curl (MIDDLE - markExtend * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] [widths.center : STROKE * 1.1]
	
		save 'asciigrave' '`'
	
	sketch # acuteAbove
		set-width 0
		currentGlyph.shortName = 'acute'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle - markStress) aboveMarkBot [widths markFine markFine]
			curl (markMiddle + markExtend) aboveMarkTop [widths markStress markStress]
	
		save 'acuteAbove' 0x301
	
	sketch # latin1acute
		include : dispiro
			flat (MIDDLE - HALFSTROKE * 1.1 * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] [widths.center : STROKE * 0.9]
			curl (MIDDLE + markExtend * asciiMarkZoom) [mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] [widths.center : STROKE * 1.1]
	
		save 'latin1acute' 0xB4
	
	sketch # circumflexAbove
		set-width 0
		currentGlyph.shortName = 'circum'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro 
			flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
			curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
		include : dispiro
			flat (markMiddle + markExtend + markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
			curl markMiddle (aboveMarkTop + markFine * 0.7) [heading UPWARD]
	
		save 'circumflexAbove' 0x302
	
	sketch # asciicaret
		include : dispiro 
			flat (MIDDLE - markExtend * asciiMarkZoom - HALFSTROKE) ([mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] + HALFSTROKE * 0.1) [widths.center : STROKE * 1.05]
			curl MIDDLE ([mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] + HALFSTROKE * 0.5) [heading UPWARD]
		include : dispiro
			flat (MIDDLE + markExtend * asciiMarkZoom + HALFSTROKE) ([mix (XH + ACCENT) aboveMarkBot asciiMarkZoom] + HALFSTROKE * 0.1) [widths.center : STROKE * 1.05]
			curl MIDDLE ([mix (XH + ACCENT) aboveMarkTop asciiMarkZoom] + HALFSTROKE * 0.5) [heading UPWARD]
	
		save 'asciicaret' '^'
	
	sketch # caronAbove
		set-width 0
		currentGlyph.shortName = 'caron'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress]
			curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
		include : dispiro
			flat (markMiddle + markExtend + markStress) aboveMarkTop [widths markStress markStress]
			curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading DOWNWARD]
	
		save 'caronAbove' 0x30c
	
	
	define [TildeShape] : params [ttop tbot leftEnd rightEnd hs] : glyph-construction
		local fine : hs * 8 / 9
		local hsvh : hs * 2 / (ttop - tbot)
		local hvc : (rightEnd - leftEnd) / (ttop - tbot)
		local defaultHvc : markExtend * 3 / (aboveMarkTop - aboveMarkBot - markFine / 2)

		local hsvhThin 0.116
		local hsvhHeav 0.732
		local tildeWave : [linreg hsvhThin 2.925 hsvhHeav 2.375 hsvh] * [linreg defaultHvc 1 4.35 1.1 hvc]
		local tildeWaveX 0.51
		
		include : dispiro
			widths.center (hs * 2 / CONTRAST)
			g2 leftEnd tbot
			bezcontrols.absolute
				* [mix leftEnd rightEnd tildeWaveX]; * [mix tbot ttop tildeWave]
				* [mix leftEnd rightEnd (1 - tildeWaveX)]; * [mix tbot ttop (1 - tildeWave)]
				* 256; * important; * g2
			g2 rightEnd ttop

	sketch # tildeAbove
		set-width 0
		currentGlyph.shortName = 'tilde'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : TildeShape
			ttop -- aboveMarkTop
			tbot -- aboveMarkBot + markFine / 2
			leftEnd -- (markMiddle - markExtend * 1.5)
			rightEnd -- (markMiddle + markExtend * 1.5)
			hs -- markHalfStroke
			
		set currentGlyph.dense true
		save 'tildeAbove' 0x303
	
	sketch # asciitilde.high
		include : TildeShape
			ttop -- [mix (XH + ACCENT) aboveMarkTop ((RIGHTSB - SB) / (markExtend * 3))]
			tbot -- [mix (XH + ACCENT) (aboveMarkBot + markFine / 2) ((RIGHTSB - SB) / (markExtend * 3))]
			leftEnd -- SB
			rightEnd -- RIGHTSB
			hs -- (OPERATORSTROKE / 2)
			
		set currentGlyph.dense true
		save 'asciitilde.high'
	
	sketch
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local m [mix aboveMarkBot aboveMarkTop 0.4]
		local ttop [mix m aboveMarkTop 0.7]
		local tbot [mix m (aboveMarkBot + markFine / 2) 0.7]
		local fine : [adviceBlackness 4.5] / 2
		
		include : TildeShape
			ttop -- ttop
			tbot -- tbot
			leftEnd -- (markMiddle - markExtend * 1.5)
			rightEnd -- (markMiddle + markExtend * 1.5)
			hs -- fine

		branch
			include : dispiro
				widths.center (fine * 2)
				flat (markMiddle + markExtend * 0.2) [mix tbot ttop 1.5]
				curl (markMiddle - markExtend * 0.2) [mix ttop tbot 1.5]
			save 'tildeSlashAbove' 0x34A
		
		branch
			local r : 0.75 * DOTRADIUS * fine / HALFSTROKE
			include : DotAt markMiddle [mix tbot ttop 1.5] r
			include : DotAt markMiddle [mix ttop tbot 1.5] r
			save 'tildedotdotAbove' 0x34B
	
	sketch
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local m aboveMarkBot
		local ttop [mix m aboveMarkTop 0.7]
		local tbot [mix m (aboveMarkBot + markFine / 2) 0.7]
		
		include : TildeShape
			ttop -- ttop
			tbot -- tbot
			leftEnd -- (markMiddle - markExtend * 1.5)
			rightEnd -- (markMiddle + markExtend * 1.5)
			hs -- ([adviceBlackness 4.5] / 2)
		local k : branch
			
		branch
			local shift : (ttop - tbot) * 1.2
			set currentGlyph.anchors {.}
			apply-transform : Upright
			apply-transform : Translate 0 shift
			apply-transform : Italify
			include k
			apply-transform : Upright
			apply-transform : Translate 0 (-0.5 * shift)
			apply-transform : Italify
			set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
			save 'dblTildeAbove' 0x34C
	
	sketch # macronAbove
		set-width 0
		currentGlyph.shortName = 'macron'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local leftEnd (markMiddle - markExtend * 1.5)
		local rightEnd (markMiddle + markExtend * 1.5)
		
		include : dispiro
			flat leftEnd (XH + ACCENT) [widths markHalfStroke markHalfStroke]
			curl rightEnd (XH + ACCENT)
	
		save 'macronAbove' 0x304
	
	sketch # overlineAbove
		set-width 0
		currentGlyph.shortName = 'overline'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (SB - WIDTH) (XH + ACCENT) [widths markHalfStroke markHalfStroke]
			curl (RIGHTSB - WIDTH) (XH + ACCENT)
	
		save 'overlineAbove' 0x305
	
	sketch # dblOverlineAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local boxsw : Math.min (markFine * 2) ((aboveMarkTop - aboveMarkBot) / 3)
		
		include : HBarBottom (SB - WIDTH) (RIGHTSB - WIDTH) aboveMarkBot boxsw
		include : HBarTop (SB - WIDTH) (RIGHTSB - WIDTH) aboveMarkTop boxsw
	
		save 'dblOverlineAbove' 0x33F
	
	sketch # breveAbove
		set-width 0
		currentGlyph.shortName = 'breve'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local leftEnd (markMiddle - markExtend * 1.2)
		local rightEnd (markMiddle + markExtend * 1.2)
		
		include : dispiro
			g4.down.start leftEnd aboveMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
			arcvh
			g4.right.mid markMiddle (aboveMarkBot + markHalfStroke) [heading RIGHTWARD]
			archv
			g4.up.end rightEnd aboveMarkTop [heading UPWARD]
	
		save 'breveAbove' 0x306
	
	sketch # archAbove
		set-width 0
		currentGlyph.shortName = 'arch'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local leftEnd (markMiddle - markExtend * 1.2)
		local rightEnd (markMiddle + markExtend * 1.2)
		
		include : dispiro
			g4.up.start leftEnd aboveMarkBot [widths.heading markHalfStroke markHalfStroke UPWARD]
			arcvh
			g4.right.mid markMiddle (aboveMarkTop - markHalfStroke) [heading RIGHTWARD]
			archv
			g4.down.end rightEnd aboveMarkBot [heading DOWNWARD]
	
		save 'archAbove' 0x311
	
	sketch # hookAbove
		set-width 0
		currentGlyph.shortName = 'hook'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local fine : Math.min markFine ((aboveMarkTop - aboveMarkBot) * 0.2)
		
		local hookBot (aboveMarkBot - fine / 2)
		local hookTop ([mix aboveMarkBot aboveMarkTop 0.9] + fine / 2)
		include : dispiro
			widths.lhs (fine * 2)
			flat (markMiddle - fine * HVCONTRAST) hookBot [heading RIGHTWARD]
			curl (markMiddle + fine * 0.4) hookBot [heading RIGHTWARD]
			archv
			g4.up.mid (markMiddle + markExtend - O) [mix hookBot hookTop (SMOOTHB / (SMOOTHB + SMOOTHA))] [heading UPWARD]
			arcvh
			flat (markMiddle + fine * 0.4) hookTop [heading LEFTWARD]
			curl (markMiddle - markExtend + fine) hookTop [heading LEFTWARD]
	
		save 'hookAbove' 0x309
	
	sketch # doubleGraveAbove
		set-width 0
		currentGlyph.shortName = 'dblgrave'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local m1 : markMiddle - markExtend * 0.85
		local m2 : markMiddle + markExtend * 0.85
		include : dispiro
			flat (m1 + markStress) aboveMarkBot [widths markFine markFine]
			curl (m1 - markExtend) aboveMarkTop [widths markStress markStress]
		include : dispiro
			flat (m2 + markStress) aboveMarkBot [widths markFine markFine]
			curl (m2 - markExtend) aboveMarkTop [widths markStress markStress]
	
		save 'doubleGraveAbove' 0x30F
	
	sketch # doubleAcuteAbove
		set-width 0
		currentGlyph.shortName = 'dblacute'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local m1 : markMiddle - markExtend * 0.85
		local m2 : markMiddle + markExtend * 0.85
		include : dispiro
			flat (m1 - markStress) aboveMarkBot [widths markFine markFine]
			curl (m1 + markExtend) aboveMarkTop [widths markStress markStress]
		include : dispiro
			flat (m2 - markStress) aboveMarkBot [widths markFine markFine]
			curl (m2 + markExtend) aboveMarkTop [widths markStress markStress]
	
		save 'doubleAcuteAbove' 0x30B
	
	sketch # commaAbove
		set-width 0
		currentGlyph.shortName = 'comma'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local radius commaAboveRadius
		include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
		include : dispiro
			widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
			straight.down.start (markMiddle + radius) (aboveMarkTop - radius + commaOvershoot)
			quadcontrols 0 0.6
			g4   [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
		apply-transform : Upright
		apply-transform : Translate 0 (DOTRADIUS * 0.3)
		apply-transform : Italify
	
		save 'commaAbove' 0x313
	
	sketch # turnCommaAbove
		set-width 0
		currentGlyph.shortName = 'turnComma'
		include glyphs.commaAbove
		include : FlipAround markMiddle ([mix aboveMarkTop (aboveMarkBot - commaAboveRadius) 0.5] + (DOTRADIUS * 0.3) + commaOvershoot / 2)
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
	
		save 'turnCommaAbove' 0x312
	
	sketch # revCommaAbove
		set-width 0
		currentGlyph.shortName = 'revComma'
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		local radius commaAboveRadius
		include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
		include : dispiro
			widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
			straight.down.start (markMiddle - radius) (aboveMarkTop - radius + commaOvershoot)
			quadcontrols 0 0.6
			g4   [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
		apply-transform : Upright
		apply-transform : Translate 0 (DOTRADIUS * 0.3)
		apply-transform : Italify
	
		save 'revCommaAbove' 0x314
	
	sketch # barAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include : VBar markMiddle aboveMarkBot aboveMarkTop (markHalfStroke * 2)
	
		save 'barAbove' 0x30D
	
	sketch # dblBarAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include : VBar (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
		include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
	
		save 'dblBarAbove' 0x30E
	
	sketch # bridgeAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : VBar (markMiddle - markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
		include : VBar (markMiddle + markExtend) aboveMarkBot aboveMarkTop (markFine * 2)
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) aboveMarkTop (markFine * 2)
	
		save 'bridgeAbove' 0x346
	
	sketch # yerikAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include : dispiro
			widths.center (markFine * 2)
			g2 (markMiddle - markFine * 0.5) aboveMarkBot [heading UPWARD]
			alsothruthem {{0.9 0.36} {0.1 0.64}} [heading UPWARD]
			g2 (markMiddle + markFine * 0.5) aboveMarkTop  [heading UPWARD]
	
		save 'yerikAbove' 0x33E
	
	sketch # candrabinduAbove
		set-width 0
		local fine : adviceBlackness 6.5
		local yc : XH + ACCENT
		local radius : Math.max (markExtend - DOTRADIUS) (fine * 1.35)
		include : dispiro
			widths.rhs : Math.min (markHalfStroke * 2) (fine * 1.25)
			g4.down.start (markMiddle - radius) yc [heading DOWNWARD]
			arcvh
			g4.right.mid markMiddle (yc - radius)
			archv
			g4.up.end (markMiddle + radius) yc [heading UPWARD]
		include : DotAt markMiddle (XH + ACCENT) fine
		apply-transform : Upright
		apply-transform : Translate 0 (fine * 0.5)
		apply-transform : Italify
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		save 'candrabinduAbove' 0x310
		
		include : FlipAround markMiddle (XH + ACCENT)
		save 'turncandrabinduAbove' 0x352
	
	sketch # variaAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle + markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
			curl (markMiddle - markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
	
		save 'variaAbove' 0x340
	
	sketch # oxiaAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle - markStress) (aboveMarkBot - markFine * 0.5) [widths markFine markFine]
			curl (markMiddle + markExtend * 0.5) (aboveMarkTop + markStress * 0.25) [widths markStress markStress]
	
		save 'oxiaAbove' 0x341
	
	sketch # perispomeniAbove
		set-width 0
		currentGlyph.shortName = 'perisp'
		include glyphs.archAbove
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
	
		save 'perispomeniAbove' 0x342
	alias 'koronisAbove' 0x343 'commaAbove'
	
	sketch # crossAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		
		include : dispiro
			flat (markMiddle - markExtend) aboveMarkTop [widths markFine markFine]
			curl (markMiddle + markExtend) aboveMarkBot
		include : dispiro
			flat (markMiddle - markExtend) aboveMarkBot [widths markFine markFine]
			curl (markMiddle + markExtend) aboveMarkTop
		save 'crossAbove' 0x33D
		
	sketch # greaterAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		local top aboveMarkTop
		local bot aboveMarkBot
		local exp : Math.sqrt : 1 + (top - bot) / (markExtend) * (top - bot) / (markExtend)
		include : dispiro
			widths.center : markFine * 2
			flat (markMiddle + markExtend) top
			curl (markMiddle - markExtend) [mix top bot 0.5] [widths.heading (markFine / 2 * exp) (markFine / 2 * exp) LEFTWARD]
		
		include : dispiro
			widths.center : markFine * 2
			flat (markMiddle + markExtend) bot
			curl (markMiddle - markExtend) [mix top bot 0.5] [widths.heading (markFine / 2 * exp) (markFine / 2 * exp) LEFTWARD]
		
		save 'lessAbove' 0x1DFE
		
		include : FlipAround markMiddle [mix top bot 0.5]
		save 'greaterAbove' 0x350
	
	list
		* TildeShape

### Below marks
symbol-block 'Below marks'
	sketch # cedillaBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		local fine : Math.min markHalfStroke ((belowMarkTop - belowMarkBot) * 0.25)
		
		local cedillaTop (belowMarkTop + fine * 0.85)
		local cedillaBot belowMarkBot
		include : dispiro
			flat (markMiddle - fine * HVCONTRAST) cedillaTop [widths.heading 0 (fine * 2) RIGHTWARD]
			curl markMiddle cedillaTop [heading RIGHTWARD]
			archv
			g4   (markMiddle + markExtend - O) [mix cedillaTop cedillaBot 0.5] [heading DOWNWARD]
			arcvh
			flat markMiddle cedillaBot [heading LEFTWARD]
			curl (markMiddle - markExtend) cedillaBot [heading LEFTWARD]
		include : VBar markMiddle 0 (cedillaTop - fine) (fine * 2)
	
		save 'cedillaBelow' 0x327
	
	sketch # ogonekBelow
		set-width 0
		
		local fine : markHalfStroke * [linreg 16 1 90 0.25 (markHalfStroke * 2)]
		local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
		local ogonekLeft : markMiddle + ogonekBot * 0.5
		local ogonekRight : markMiddle + markExtend * 0.85
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : dispiro
			g4.left.start markMiddle O [widths 0 (fine * 2)]
			#archv
			g4   ogonekLeft [mix O ogonekBot 0.5] [widths 0 ([mix fine markStress 0.75] * 2)]
			#arcvh
			flat          (markMiddle + markExtend * 0.25) ogonekBot [widths 0 (markStress * 2)]
			curl          ogonekRight ogonekBot [heading RIGHTWARD]
	
		save 'ogonekBelow' 0x328
	
	sketch # ogonekTR
		set-width 0
		include glyphs.ogonekBelow
		local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
		local ogonekRight : markMiddle + markExtend * 0.85
		set-anchor 'trailing' MARK markMiddle 0 ogonekRight ogonekBot
	
		save 'ogonekTR'

	sketch # iotaBelow
		set-width 0
		set currentGlyph.shortName 'iota'
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
	
		save 'iotaBelow' 0x345
	
	sketch # iotaLF
		set-width 0
		set-anchor 'lf' MARK markMiddle 0 markMiddle belowMarkBot
		include : VBar markMiddle belowMarkBot belowMarkTop (markHalfStroke * 2)
	
		save 'iotaLF'

	sketch # uptackBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
		include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot (markFine * 2)
	
		save 'uptackBelow' 0x31D
	
	sketch # downtackBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
	
		save 'downtackBelow' 0x31E
	
	sketch # lefttackBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
	
		save 'lefttackBelow' 0x318
	
	sketch # righttackBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
	
		save 'righttackBelow' 0x319
	
	sketch # leftAngleBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
	
		save 'leftAngleBelow' 0x349
	
	sketch # plusBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar markMiddle belowMarkBot belowMarkTop (markFine * 2)
		include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
	
		save 'plusBelow' 0x31F
	
	sketch # minusBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBar (markMiddle - markExtend) (markMiddle + markExtend) [mix belowMarkTop belowMarkBot 0.5] (markFine * 2)
	
		save 'minusBelow' 0x320
	
	sketch # bridgeBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop (markFine * 2)
	
		save 'bridgeBelow' 0x32A
	
	sketch # boxBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		local boxsw : Math.min (markFine * 2) ((belowMarkTop - belowMarkBot) / 3)
		
		include : VBar (markMiddle - markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : VBar (markMiddle + markExtend) belowMarkBot belowMarkTop (markFine * 2)
		include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot boxsw
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop boxsw
	
		save 'boxBelow' 0x33B
	
	sketch # equalBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		local boxsw : Math.min (markFine * 2) ((belowMarkTop - belowMarkBot) / 3)
		
		include : HBarBottom (markMiddle - markExtend) (markMiddle + markExtend) belowMarkBot boxsw
		include : HBarTop (markMiddle - markExtend) (markMiddle + markExtend) belowMarkTop boxsw
	
		save 'equalBelow' 0x347
	
	sketch # dblBreveBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		local extend : (belowMarkTop - belowMarkBot - markHalfStroke) * 1.25
		
		include : dispiro
			g4.down.start (markMiddle - extend) belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
			arcvh
			g4.right.mid  [mix markMiddle (markMiddle - extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
			archv
			g4.up.end     markMiddle belowMarkTop [heading UPWARD]
		include : dispiro
			g4.down.start markMiddle belowMarkTop [widths.heading markHalfStroke markHalfStroke DOWNWARD]
			arcvh
			g4.right.mid  [mix markMiddle (markMiddle + extend) 0.5] (belowMarkBot + markHalfStroke) [heading RIGHTWARD]
			archv
			g4.up.end     (markMiddle + extend) belowMarkTop [heading UPWARD]
	
		save 'dblBreveBelow' 0x32B
	
	sketch # dblArchBelow
		set-width 0
		include glyphs.dblBreveBelow
		include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
	
		save 'dblArchBelow' 0x33C
	
	sketch # leftHalfCircleBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include : dispiro
			g4.left.start markMiddle belowMarkTop [widths.heading markFine markFine LEFTWARD]
			archv
			g4.down.mid   (markMiddle - (belowMarkTop - belowMarkBot) / 2) [mix belowMarkTop belowMarkBot 0.5] [heading DOWNWARD]
			arcvh
			g4.right.end  markMiddle belowMarkBot [heading RIGHTWARD]
		apply-transform : Translate ((belowMarkTop - belowMarkBot) / 4) 0
	
		save 'leftHalfCircleBelow' 0x31C
	
	sketch # rightHalfCircleBelow
		set-width 0
		include glyphs.leftHalfCircleBelow
		include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
	
		save 'rightHalfCircleBelow' 0x339
	
	sketch # leftHalfCircleAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include glyphs.rightHalfCircleBelow
		include : FlipAround markMiddle (XH / 2)
	
		save 'leftHalfCircleAbove' 0x351
	
	sketch # rightHalfCircleAbove
		set-width 0
		set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
		include glyphs.leftHalfCircleBelow
		include : FlipAround markMiddle (XH / 2)
	
		save 'rightHalfCircleAbove' 0x357
	# Turned below marks
	sketch # graveBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.graveAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'graveBelow' 0x316
	
	sketch # acuteBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.acuteAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'acuteBelow' 0x317
	
	sketch # dotBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.dotAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'dotBelow' 0x323
	
	sketch # dieresisBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.dieresisAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'dieresisBelow' 0x324
	
	sketch # tildeBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.tildeAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'tildeBelow' 0x330
	
	sketch # ringBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.ringAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'ringBelow' 0x325
	
	sketch # macronBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.macronAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'macronBelow' 0x331
	
	sketch # invBridgeBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.bridgeAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'invBridgeBelow' 0x33A
	
	sketch # underlineBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.overlineAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'underlineBelow' 0x332
	
	sketch # dblUnderlineBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.dblOverlineAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'dblUnderlineBelow' 0x333
	
	sketch # circumflexBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.caronAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'circumflexBelow' 0x32D
	
	sketch # caronBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.circumflexAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'caronBelow' 0x32C
	
	sketch # breveBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.archAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'breveBelow' 0x32E
	
	sketch # archBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.breveAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'archBelow' 0x32F
	
	sketch # commaBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.turnCommaAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'commaBelow' 0x326
	
	sketch # barBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.barAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'barBelow' 0x329
	
	sketch # dblBarBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		include glyphs.dblBarAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'dblBarBelow' 0x348
	
	sketch # crossBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.crossAbove
		include : FlipAround markMiddle (XH / 2)
		save 'crossBelow' 0x353
	
	sketch # lessBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.greaterAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'lessBelow' 0x354
	
	sketch # greaterBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.lessAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'greaterBelow' 0x355
	
	sketch # greaterBelow
		set-width 0
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		
		include glyphs.dblRingAbove
		include : FlipAround markMiddle (XH / 2)
	
		save 'dblRingBelow' 0x35a
		
	sketch # lrArrowBelow
		set-width 0
		local fine : [adviceBlackness 5.75] / 2
		local h : branch
			local top belowMarkTop
			local bot belowMarkBot
			local left : markMiddle - markExtend * 1.5
			local right : markMiddle - markExtend * 0.5
			local exp : Math.sqrt : 1 + (top - bot) / (2 * (right - left)) * (top - bot) / (2 * (right - left))
			include : dispiro
				widths.center : fine * 2
				flat right top
				curl left [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) DOWNWARD]
				
			include : dispiro
				widths.center : fine * 2
				flat right bot
				curl left [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) UPWARD]
		
		include h
		include : FlipAround markMiddle [mix belowMarkTop belowMarkBot 0.5]
		include h
		include : HBar (markMiddle - markExtend * 1.5) (markMiddle + markExtend * 1.5) [mix belowMarkTop belowMarkBot 0.5] (fine * 2)
		
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		save 'lrArrowBelow' 0x34D
	
	sketch # upArrowBelow
		set-width 0
		local fine : [adviceBlackness 6] / 2
		
		local top belowMarkTop
		local bot [mix belowMarkBot belowMarkTop 0.5]
		local left : markMiddle - markExtend * 0.75
		local right : markMiddle + markExtend * 0.75
		local exp : Math.sqrt : 1 + (2 * (top - bot)) / (right - left) * (2 * (top - bot)) / (right - left)
		include : dispiro
			widths.center : fine * 2
			flat left bot
			curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) RIGHTWARD]
			
		include : dispiro
			widths.center : fine * 2
			flat right bot
			curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) LEFTWARD]
		include : VBar markMiddle belowMarkBot top (fine * 2)
		set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
		save 'lrArrowBelow' 0x34E

# horn and angle marks
symbol-block 'Corner marks'
	sketch # horn
		set-width 0
		local radius : markHalfStroke * 1.5
		include : Ring (XH + ACCENT + radius) (XH + ACCENT - radius) (markMiddle - radius) (markMiddle + radius)
		include : dispiro
			g4 (markMiddle + radius) (XH + ACCENT) [widths 0 (markFine * 1.75)]
			quadcontrols   0 0.75 5 important
			g4 (markMiddle - radius - markHalfStroke) (aboveMarkBot - radius)
		apply-transform : Upright
		apply-transform : Translate (-markMiddle + radius * 0.35) 0
		apply-transform : Italify
		set-anchor 'topright' MARK 0 (aboveMarkBot + markFine * 0.75) 0 aboveMarkTop
	
		save 'horn' 0x31B
	
	sketch # leftangleTR
		set-width 0
		include : VBarLeft 0 aboveMarkBot aboveMarkTop (markFine * 2)
		include : HBarTop (-markExtend * 1.5) 0 aboveMarkTop (markFine * 2)
		set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
	
		save 'leftangleTR' 0x31A
	
	sketch # dotTR
		set-width 0
		include : Ring (XH + ACCENT + DOTRADIUS) (XH + ACCENT - DOTRADIUS) (0 - DOTRADIUS) (0 + DOTRADIUS) true
		set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
	
		save 'dotTR' 0x358
	
	sketch # commaTR
		set-width 0
		include glyphs.commaAbove
		apply-transform : Upright
		apply-transform : Translate (RIGHTSB - MIDDLE - OX) (XH - aboveMarkTop - commaOvershoot)
		apply-transform : Italify
		set-anchor 'topright' MARK 0 XH 0 aboveMarkTop
	
		save 'commaTR' 0x315
	
	sketch # rtailBR
		set-width 0
		
		set-anchor 'bottomright' MARK 0 0 0 belowMarkBot
		include : dispiro
			widths.rhs
			flat 0 (-O) [heading DOWNWARD]
			curl 0 0 [heading DOWNWARD]
			straight.right.end (HOOKX - HALFSTROKE * HVCONTRAST) (-HOOK + HALFSTROKE)
	
		save 'rtailBR' 0x322
	
	sketch # ltailBR
		set-width 0
		
		set-anchor 'bottomright' MARK 0 0 0 belowMarkBot
		include : dispiro
			widths.rhs
			flat 0 (-O) [heading DOWNWARD]
			curl 0 0 [heading DOWNWARD]
			straight.left.end (-HOOKX - HALFSTROKE * HVCONTRAST) (-HOOK - HALFSTROKE)
		save 'ltailBR' 0x321

# Overlay Marks
symbol-block 'Overlay Marks'
	sketch # tildeOver
		set-width 0
		set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include glyphs.tildeAbove
		apply-transform : Upright
		apply-transform : Translate 0 (XH / 2 - [mix aboveMarkTop aboveMarkBot 0.5])
		apply-transform : Italify
	
		save 'tildeOver' 0x334
	
	sketch # barOver
		set-width 0
		set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include : HOverlayBar (markMiddle - LONGJUT * 0.75) (markMiddle + LONGJUT * 0.75) (XH / 2)
	
		save 'barOver' 0x335
	
	sketch # longBarOver
		set-width 0
		set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include : HOverlayBar ([mix 0 SB 0.5] - WIDTH) ([mix WIDTH RIGHTSB 0.5] - WIDTH) (XH / 2)
	
		save 'longBarOver' 0x336
	
	sketch # shortSlashOver
		set-width 0
		set-anchor 'overlay' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include : FlatSlashShape markMiddle (XH / 2) (0.5 * OVERLAYSTROKE)
	
		save 'shortSlashOver' 0xE090
	
	sketch # slashOver
		set-width 0
		local fine : 0.375 * OVERLAYSTROKE
		set-anchor 'slash' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include : dispiro
			flat (SB - O * 3 + fine - WIDTH) (XH * (-0.1)) [widths fine fine]
			curl (RIGHTSB + O * 3 - fine - WIDTH) (XH * 1.1)
	
		save 'slashOver' 0x337
	
	sketch # longSlashOver
		set-width 0
		local fine : 0.375 * OVERLAYSTROKE
		set-anchor 'slash' MARK markMiddle (XH / 2) markMiddle (XH / 2)
		include : dispiro
			flat (SB - O * 3 + fine - WIDTH) (XH * 0.5 - CAP * 0.6) [widths fine fine]
			curl (RIGHTSB + O * 3 - fine - WIDTH) (XH * 0.5 + CAP * 0.6)
		save 'longSlashOver' 0x338

# Double-character arcs
symbol-block 'Tie marks'
	local tieLeft [mix 0 markMiddle 1.25]
	local tieRight (-tieLeft)
	sketch # tieAbove
		set-width 0
		include : dispiro
			widths.rhs (markHalfStroke * 2)
			g4 tieLeft aboveMarkBot
			quadcontrols  0.5 1
			g4.right.mid  0 aboveMarkTop [heading RIGHTWARD]
			quadcontrols  0.5 0
			g4 tieRight aboveMarkBot
		apply-transform : Upright
		apply-transform : Translate 0 (CAP - XH)
		apply-transform : Italify
		save 'tieAbove' 0x361
	
	sketch # turnTieAbove
		set-width 0
		include : dispiro
			widths.lhs (markHalfStroke * 2)
			g4 tieLeft aboveMarkTop
			quadcontrols  0.5 1
			g4.right.mid  0 aboveMarkBot [heading RIGHTWARD]
			quadcontrols  0.5 0
			g4 tieRight aboveMarkTop
		apply-transform : Upright
		apply-transform : Translate 0 (CAP - XH)
		apply-transform : Italify
		save 'turnTieAbove' 0x35D
	turned 'tieBelow' 0x35C 'tieAbove' 0 (XH / 2)
	
	sketch # overlineTieAbove
		set-width 0
		include : dispiro
			widths.center (markHalfStroke * 2)
			flat tieLeft (XH + ACCENT)
			curl tieRight (XH + ACCENT)
		apply-transform : Upright
		apply-transform : Translate 0 (CAP - XH)
		apply-transform : Italify
		save 'overlineTieAbove' 0x35E
	composite 'underlineTieBelow' glyphs.overlineTieAbove [FlipAround 0 (XH / 2)] [into-unicode 0x35F]

	sketch # arrowTieBelow
		set-width 0
		local fine markFine
		local h : branch
			local top (DESCENDER - ACCENT + (belowMarkTop - belowMarkBot) / 2 * 1.5)
			local bot (DESCENDER - ACCENT - (belowMarkTop - belowMarkBot) / 2 * 1.5)
			local left : tieRight - markExtend * 1.5
			local right tieRight
			local exp : Math.sqrt : 1 + (top - bot) / (2 * (right - left)) * (top - bot) / (2 * (right - left))
			include : dispiro
				widths.center : fine * 2
				flat left top
				curl right [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) DOWNWARD]
			include : dispiro
				widths.center : fine * 2
				flat left bot
				curl right [mix top bot 0.5] [widths.heading (fine * exp) (fine * exp) UPWARD]
		
		include h
		include : HBar tieLeft tieRight (DESCENDER - ACCENT) (fine * 2)
		save 'arrowTieBelow' 0x362
	
	sketch # tildeTieAbove
		set-width 0
		include : TildeShape
			ttop -- aboveMarkTop + (CAP - XH)
			tbot -- aboveMarkBot + (CAP - XH)
			leftEnd -- tieLeft
			rightEnd -- tieRight
			hs -- markHalfStroke
			
		set currentGlyph.dense true
		save 'tildeTieAbove' 0x360

symbol-block 'Greek Polytonic Marks'
	define [GreekLRDoubleMark id unicode leftGlyph rightGlyph] : begin
		sketch # Combining double mark
			set-width 0
			local k : -WIDTH * 0.15
			
			include leftGlyph
			apply-transform : Translate (2 * k) 0
			include rightGlyph
			apply-transform : Translate (0 - k) 0
			
			set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
			
			save id

		sketch # Spaced double mark
			include glyphs.space AS_BASE
			include glyphs.(id)
			
			save ('spaced' + id) unicode
	
	GreekLRDoubleMark 'psilivaria' 0x1FCD glyphs.commaAbove glyphs.variaAbove
	GreekLRDoubleMark 'psilioxia'  0x1FCE glyphs.commaAbove glyphs.oxiaAbove
	GreekLRDoubleMark 'dasiavaria' 0x1FDD glyphs.revCommaAbove glyphs.variaAbove
	GreekLRDoubleMark 'dasiaoxia'  0x1FDE glyphs.revCommaAbove glyphs.oxiaAbove
	
	local yc : aboveMarkTop - commaAboveRadius + DOTRADIUS * 0.3 + commaOvershoot
	
	sketch # psiliperispomeni
		set-width 0
		include glyphs.commaAbove
		local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
		include : dispiro
			widths.lhs : Math.min (markHalfStroke * 2) ([adviceBlackness 6.5] * 1.25)
			g4.up.start (markMiddle - radius) yc [heading UPWARD]
			arcvh
			g4.right.mid markMiddle (yc + radius)
			archv
			g4.down.end (markMiddle + radius) yc [heading DOWNWARD]
		set-anchor 'above' MARK markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
	
		save 'psiliperispomeni'

	sketch # spaced_psiliperispomeni
		include glyphs.space AS_BASE
		include glyphs.psiliperispomeni
	
		save 'spaced_psiliperispomeni' 0x1FCF
	
	sketch # dasiaperispomeni
		set-width 0
		include glyphs.revCommaAbove
		local radius : Math.max (markExtend - commaAboveRadius) (commaAboveRadius * 1.25)
		include : dispiro
			widths.lhs : Math.min (markHalfStroke * 2) ([adviceBlackness 6.5] * 1.25)
			g4.up.start (markMiddle - radius) yc [heading UPWARD]
			arcvh
			g4.right.mid markMiddle (yc + radius)
			archv
			g4.down.end (markMiddle + radius) yc [heading DOWNWARD]
		set-anchor 'above' MARK markMiddle XH markMiddle (aboveMarkTop + markHalfStroke * 2)
	
		save 'dasiaperispomeni'

	sketch # spaced_dasiaperispomeni
		include glyphs.space AS_BASE
		include glyphs.dasiaperispomeni
		save 'spaced_dasiaperispomeni' 0x1FDF