468 lines
No EOL
16 KiB
Text
468 lines
No EOL
16 KiB
Text
|
|
### Combining marks
|
|
|
|
local markExtend [ACCENTX * 0.5]
|
|
local markStress : 0.5 * [adviceBlackness 3.25]
|
|
local markFine : markStress * 0.8
|
|
local markHalfStroke : mix markFine markStress 0.5
|
|
local markMiddle [-MIDDLE]
|
|
local markDotsRadius : DOTRADIUS * markStress / HALFSTROKE
|
|
|
|
local aboveMarkTop [XH + ACCENT * 1.375]
|
|
local aboveMarkBot [XH + ACCENT * 0.325]
|
|
|
|
local belowMarkBot [0 - ACCENT * 1.375]
|
|
local belowMarkTop [0 - ACCENT * 0.325]
|
|
|
|
|
|
### Above marks
|
|
|
|
create-glyph 'dotAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x307
|
|
this.shortName = 'dot'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : list {
|
|
Ring [XH + ACCENT + DOTRADIUS] [XH + ACCENT - DOTRADIUS] [markMiddle - DOTRADIUS] [markMiddle + DOTRADIUS]
|
|
}
|
|
}
|
|
create-glyph 'dieresisAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x308
|
|
this.shortName = 'dieresis'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
include : list {
|
|
Ring [XH + ACCENT + markDotsRadius] [XH + ACCENT - markDotsRadius] [markMiddle - markDotsRadius - markExtend] [markMiddle + markDotsRadius - markExtend]
|
|
Ring [XH + ACCENT + markDotsRadius] [XH + ACCENT - markDotsRadius] [markMiddle - markDotsRadius + markExtend] [markMiddle + markDotsRadius + markExtend]
|
|
}
|
|
}
|
|
create-glyph 'ringAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x30A
|
|
this.shortName = 'ring'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local radiusIn : ACCENT * 0.24
|
|
local radiusOut : radiusIn + markFine * 1.75
|
|
include : list {
|
|
Ring [XH + ACCENT + radiusOut] [XH + ACCENT - radiusOut] [markMiddle - radiusOut] [markMiddle + radiusOut]
|
|
Ring [XH + ACCENT + radiusIn] [XH + ACCENT - radiusIn] [markMiddle - radiusIn] [markMiddle + radiusIn]
|
|
}
|
|
reverse-last
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 [-markFine]
|
|
apply-transform : Italify
|
|
}
|
|
create-glyph 'graveAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x300
|
|
this.shortName = 'grave'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle + markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [markMiddle - markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'acuteAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x301
|
|
this.shortName = 'acute'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle - markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [markMiddle + markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'circumflexAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x302
|
|
this.shortName = 'circum'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle - markExtend - markStress] [aboveMarkBot + markStress - markFine]
|
|
:.set-width markStress markStress
|
|
:.line-to markMiddle [aboveMarkTop + markFine * 0.7]
|
|
:.heads-to UPWARD
|
|
:.set-samples 1
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle + markExtend + markStress] [aboveMarkBot + markStress - markFine]
|
|
:.set-width markStress markStress
|
|
:.line-to markMiddle [aboveMarkTop + markFine * 0.7]
|
|
:.heads-to UPWARD
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'caronAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x30c
|
|
this.shortName = 'caron'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle - markExtend - markStress] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.line-to markMiddle [aboveMarkBot - markFine * 1.7 + markStress]
|
|
:.heads-to DOWNWARD
|
|
:.set-samples 1
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle + markExtend + markStress] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.line-to markMiddle [aboveMarkBot - markFine * 1.7 + markStress]
|
|
:.heads-to DOWNWARD
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'tildeAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x303
|
|
this.shortName = 'tilde'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd [markMiddle - markExtend * 1.5]
|
|
local rightEnd [markMiddle + markExtend * 1.5]
|
|
|
|
local ttop aboveMarkTop
|
|
local tbot : aboveMarkBot + markFine / 2
|
|
local top : ttop + [markFine * 2]
|
|
local bot : tbot - [markFine * 2]
|
|
|
|
local tildeWave [linreg 40 1.52 52 1.33 markStress]
|
|
local tildeWaveX 0.52
|
|
local tildeWaveEnd 0
|
|
|
|
include : create-stroke
|
|
:.start-from leftEnd [mix tbot ttop tildeWaveEnd]
|
|
:.set-width markHalfStroke markHalfStroke
|
|
:.cubic-to [mix leftEnd rightEnd tildeWaveX] [mix bot top tildeWave] [mix leftEnd rightEnd [1 - tildeWaveX]] [mix bot top [1 - tildeWave]] rightEnd [mix tbot ttop [1 - tildeWaveEnd]]
|
|
:.set-samples 11
|
|
}
|
|
create-glyph 'macronAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x304
|
|
this.shortName = 'macron'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd [markMiddle - markExtend * 1.5]
|
|
local rightEnd [markMiddle + markExtend * 1.5]
|
|
|
|
include : create-stroke
|
|
:.start-from leftEnd [XH + ACCENT]
|
|
:.set-width markHalfStroke markHalfStroke
|
|
:.heads-to RIGHTWARD
|
|
:.line-to rightEnd [XH + ACCENT]
|
|
:.heads-to RIGHTWARD
|
|
}
|
|
create-glyph 'breveAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x306
|
|
this.shortName = 'breve'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd [markMiddle - markExtend * 1.2]
|
|
local rightEnd [markMiddle + markExtend * 1.2]
|
|
|
|
include : create-stroke
|
|
:.start-from leftEnd aboveMarkTop
|
|
:.set-width markHalfStroke markHalfStroke
|
|
:.heads-to DOWNWARD
|
|
:.arc-vh-to markMiddle [aboveMarkBot + markHalfStroke]
|
|
:.arc-hv-to rightEnd aboveMarkTop
|
|
:.heads-to UPWARD
|
|
}
|
|
create-glyph 'archAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x311
|
|
this.shortName = 'arch'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local leftEnd [markMiddle - markExtend * 1.2]
|
|
local rightEnd [markMiddle + markExtend * 1.2]
|
|
|
|
include : create-stroke
|
|
:.start-from leftEnd aboveMarkBot
|
|
:.set-width markHalfStroke markHalfStroke
|
|
:.heads-to UPWARD
|
|
:.arc-vh-to markMiddle [aboveMarkTop - markHalfStroke]
|
|
:.arc-hv-to rightEnd aboveMarkBot
|
|
:.heads-to DOWNWARD
|
|
}
|
|
create-glyph 'hookAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x309
|
|
this.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 : create-stroke
|
|
:.start-from [markMiddle - fine * ITALICCOR] hookBot
|
|
:.heads-to RIGHTWARD
|
|
:.set-width [fine * 2] 0
|
|
:.line-to [markMiddle + fine * 0.5] hookBot
|
|
:.arc-hv-to [markMiddle + markExtend - O] [mix hookBot hookTop [SMOOTHB / [SMOOTHB + SMOOTHA]]]
|
|
:.arc-vh-to markMiddle hookTop
|
|
:.line-to [markMiddle - markExtend + fine] hookTop
|
|
:.heads-to LEFTWARD
|
|
}
|
|
create-glyph 'doubleGraveAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x30F
|
|
this.shortName = 'dblgrave'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m1 : markMiddle - markExtend * 0.85
|
|
local m2 : markMiddle + markExtend * 0.85
|
|
include : create-stroke
|
|
:.start-from [m1 + markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [m1 - markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
include : create-stroke
|
|
:.start-from [m2 + markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [m2 - markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'doubleAcuteAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x30B
|
|
this.shortName = 'dblacute'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local m1 : markMiddle - markExtend * 0.85
|
|
local m2 : markMiddle + markExtend * 0.85
|
|
include : create-stroke
|
|
:.start-from [m1 - markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [m1 + markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
include : create-stroke
|
|
:.start-from [m2 - markStress] aboveMarkBot
|
|
:.set-width markFine markFine
|
|
:.line-to [m2 + markExtend] aboveMarkTop
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'commaAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x313
|
|
this.shortName = 'comma'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
local radius : markHalfStroke * 1.5
|
|
include : list {
|
|
Ring [XH + ACCENT + radius] [XH + ACCENT - radius] [markMiddle - radius] [markMiddle + radius]
|
|
}
|
|
include : create-stroke
|
|
:.start-from [markMiddle + radius] [XH + ACCENT]
|
|
:.set-width 0 [markFine * 1.75]
|
|
:.curve-to [markMiddle + radius] [mix [XH + ACCENT] [aboveMarkBot - radius] 0.75] [mix markMiddle [markMiddle - radius] 0.2] [aboveMarkBot - radius]
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 [DOTRADIUS * 0.25]
|
|
apply-transform : Italify
|
|
}
|
|
create-glyph 'turnCommaAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x312
|
|
this.shortName = 'turnComma'
|
|
include glyphs.commaAbove
|
|
include : FlipAround markMiddle [XH + ACCENT - DOTRADIUS * 0.25]
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
}
|
|
create-glyph 'revCommaAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x314
|
|
this.shortName = 'revComma'
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
local radius : markHalfStroke * 1.5
|
|
include : list {
|
|
Ring [XH + ACCENT + radius] [XH + ACCENT - radius] [markMiddle - radius] [markMiddle + radius]
|
|
}
|
|
include : create-stroke
|
|
:.start-from [markMiddle - radius] [XH + ACCENT]
|
|
:.set-width [markFine * 1.75] 0
|
|
:.curve-to [markMiddle - radius] [mix [XH + ACCENT] [aboveMarkBot - radius] 0.75] [mix markMiddle [markMiddle + radius] 0.2] [aboveMarkBot - radius]
|
|
apply-transform : Upright
|
|
apply-transform : Translate 0 [DOTRADIUS * 0.25]
|
|
apply-transform : Italify
|
|
}
|
|
create-glyph 'perispomeniAbove' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x342
|
|
this.shortName = 'perisp'
|
|
include glyphs.archAbove
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
}
|
|
|
|
# Variant above marks
|
|
create-glyph 'variaAbove' : glyph-construction {
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle + markStress] [aboveMarkBot - markFine * 0.5]
|
|
:.set-width markFine markFine
|
|
:.line-to [markMiddle - markExtend * 0.5] [aboveMarkTop + markStress * 0.25]
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
create-glyph 'oxiaAbove' : glyph-construction {
|
|
set-width 0
|
|
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
|
|
|
|
include : create-stroke
|
|
:.start-from [markMiddle - markStress] [aboveMarkBot - markFine * 0.5]
|
|
:.set-width markFine markFine
|
|
:.line-to [markMiddle + markExtend * 0.5] [aboveMarkTop + markStress * 0.25]
|
|
:.set-width markStress markStress
|
|
:.set-samples 1
|
|
}
|
|
|
|
### Below marks
|
|
create-glyph 'cedillaBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x327
|
|
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 : create-stroke
|
|
:.start-from [markMiddle - fine * ITALICCOR] cedillaTop
|
|
:.heads-to RIGHTWARD
|
|
:.set-width 0 [fine * 2]
|
|
:.line-to [markMiddle + fine * 0.5] cedillaTop
|
|
:.arc-hv-to [markMiddle + markExtend - O] [mix cedillaTop cedillaBot 0.5]
|
|
:.arc-vh-to markMiddle cedillaBot
|
|
:.line-to [markMiddle - markExtend] cedillaBot
|
|
:.heads-to LEFTWARD
|
|
include : create-stroke
|
|
:.start-from markMiddle 0
|
|
:.heads-to DOWNWARD
|
|
:.set-width fine fine
|
|
:.line-to markMiddle [cedillaTop - fine]
|
|
:.heads-to DOWNWARD
|
|
}
|
|
create-glyph 'ogonekBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x328
|
|
|
|
local fine : markHalfStroke * 0.2
|
|
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress * 2
|
|
local ogonekLeft : markMiddle - markExtend * 0.2
|
|
local ogonekRight : markMiddle + markExtend * 0.85
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : create-stroke
|
|
:.start-from markMiddle 0
|
|
:.set-width 0 [fine * 2]
|
|
:.arc-hv-to ogonekLeft [mix 0 ogonekBot 0.5]
|
|
:.set-width 0 [[mix fine markStress 0.75] * 2]
|
|
:.arc-vh-to [markMiddle + markExtend * 0.25] ogonekBot
|
|
:.set-width 0 [markStress * 2]
|
|
:.line-to ogonekRight ogonekBot
|
|
:.heads-to RIGHTWARD
|
|
}
|
|
create-glyph 'ogonekTR' : glyph-construction {
|
|
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
|
|
}
|
|
create-glyph 'iotaBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x345
|
|
set this.shortName 'iota'
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include : VBar markMiddle belowMarkBot belowMarkTop [markHalfStroke * 2]
|
|
}
|
|
create-glyph 'iotaLF' : glyph-construction {
|
|
# iotabelow glyph for /eta
|
|
set-width 0
|
|
set-anchor 'lf' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include : VBar markMiddle belowMarkBot belowMarkTop [markHalfStroke * 2]
|
|
}
|
|
# Flipped below marks
|
|
create-glyph 'dotBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x323
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.dotAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'dieresisBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x324
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.dieresisAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'tildeBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x330
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.tildeAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'ringBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x325
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
include glyphs.ringAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'macronBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x331
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.macronAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'circumflexBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x32D
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.caronAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'breveBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x32E
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.archAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'archBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x32F
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.breveAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
}
|
|
create-glyph 'commaBelow' : glyph-construction {
|
|
set-width 0
|
|
assign-unicode 0x326
|
|
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
|
|
|
|
include glyphs.turnCommaAbove
|
|
include : FlipAround markMiddle [XH / 2]
|
|
} |