Iosevka/font-src/glyphs/letter/cyrillic.ptl
be5invis 4998206c50 * Fix broken serif shapes in Italic Cyrillic Small I (#717).
* Make variant selectors for `m` and `u` have more effect on Cyrillic letters.
2020-11-08 09:17:09 -08:00

901 lines
31 KiB
Text

$$include '../../meta/macros.ptl'
import [mix barmixL linreg clamp fallback] from '../../support/utils'
import [designParameters] from '../../meta/aesthetics'
import '../../support/point' as Point
glyph-module
glyph-block Letter-Cyrillic-Yeri : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Metrics : BowlXDepth
glyph-block-export CyrYeriShape
define [CyrYeriShape top _left _right _fine _jut] : glyph-proc
local fine : fallback _fine Stroke
local left : fallback _left SB
local right : fallback _right RightSB
local jut : fallback _jut Jut
local bowl : top * 0.55 + HalfStroke
local turnRadius : BowlXDepth bowl 0 left right fine
local sma : SmoothAOf Smooth (right - left + SB * 2)
local smb : SmoothBOf Smooth (right - left + SB * 2)
local turnbottom : YSmoothMidR bowl 0 sma smb
include : dispiro
widths.lhs fine
flat (left + Stroke * 0.2) 0 [heading Rightward]
curl ([Math.max (left + fine * HVContrast) (right - turnRadius)] + CorrectionOMidX * fine) 0
archv 8
g4 (right - OX) turnbottom
arcvh 8
flat ([Math.max (left + fine * HVContrast) (right - turnRadius)] - CorrectionOMidX * fine) bowl
curl (left + Stroke * 0.2) bowl [heading Leftward]
include : VBarLeft left 0 top fine
if SLAB : begin
include : tagged 'serifYeriLB' : LeftwardBottomSerif left 0 (jut - fine / 2 * HVContrast)
include : tagged 'serifYeriLT' : CenterTopSerif (left + fine / 2 * HVContrast) top jut
define [RevCyrYeriShape top _left _right _fine _jut] : glyph-proc
local fine : fallback _fine Stroke
local left : fallback _left SB
local right : fallback _right RightSB
local jut : fallback _jut Jut
local bowl : top * 0.55 + HalfStroke
local turnRadius : bowl * 0.45
local turnbottom : mix 0 bowl (SmoothB / (SmoothA + SmoothB))
local trShrink [Math.pow ((right - left) / (RightSB - SB)) 0.5]
include : dispiro
widths.rhs
flat (right - Stroke * 0.2) 0 [heading Leftward]
curl (left + turnRadius * trShrink + CorrectionOMidX * fine) 0
archv
g4 (left + O) turnbottom [widths.rhs fine]
arcvh
flat (left + turnRadius * trShrink - CorrectionOMidX * fine) bowl [widths.rhs]
curl (right - Stroke * 0.2) bowl [heading Rightward]
include : VBarRight right 0 top fine
if SLAB : begin
include : tagged 'serifYeriRB' : RightwardBottomSerif right 0 (jut - fine / 2 * HVContrast)
include : tagged 'serifYeriRT' : CenterTopSerif (right - fine / 2 * HVContrast) top jut
create-glyph 'cyrl/Yeri' 0x42C : glyph-proc
include : MarkSet.capital
include : CyrYeriShape CAP SB RightSB
create-glyph 'cyrl/yeri' 0x44C : glyph-proc
include : MarkSet.e
include : CyrYeriShape XH SB RightSB
create-glyph 'cyrl/Be' 0x411 : glyph-proc
include [refer-glyph 'cyrl/Yeri'] AS_BASE
include : HBar SB [mix SB RightSB 0.9] (CAP - HalfStroke)
if SLAB : begin
include : DownwardRightSerif [mix SB RightSB 0.9] CAP VJut
alias 'latinBe' 0x182 'cyrl/Be'
create-glyph 'ZhuangToneSix' 0x184 : glyph-proc
include [refer-glyph 'cyrl/Yeri'] AS_BASE
eject-contour 'serifYeriLT'
local s : Math.max Stroke (XH * 0.1)
include : ReverseContours : spiro-outline
corner (SB - O) CAP
corner SB CAP
corner (SB - s) (CAP - s)
corner SB (CAP - s * 2)
corner (SB - O) (CAP - s * 2)
create-glyph 'latinDe' 0x18B : glyph-proc
include : MarkSet.capital
include : RevCyrYeriShape CAP
include : HBarTop [mix RightSB SB 0.9] (RightSB + O) CAP
if SLAB : begin
include : DownwardLeftSerif [mix RightSB SB 0.9] CAP VJut
define [CyrYerShape top] : glyph-proc
local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
local barleft : mix 0 SB [if SLAB 0.25 0.375]
include : CyrYeriShape top left (RightSB - O * 2)
include : HBarTop barleft (Stroke * 0.1 + left) top
if SLAB : begin
include : DownwardLeftSerif barleft top VJut (MVertStroke / HVContrast)
create-glyph 'cyrl/Yer' 0x42A : glyph-proc
include : MarkSet.capital
include : CyrYerShape CAP
create-glyph 'cyrl/yer' 0x44A : glyph-proc
include : MarkSet.e
include : CyrYerShape XH
define [CyrYeryShape top df] : glyph-proc
local overshoot : O * 2
include : CyrYeriShape top (df.leftSB + overshoot) [mix (df.rightSB - df.mvs * HVContrast) (Middle + df.mvs / 2 * HVContrast) (0.75 / df.div)] df.mvs (Jut * 0.75)
include : VBarRight (df.rightSB - overshoot) 0 top df.mvs
if SLAB : begin
include : CenterTopSerif (df.rightSB - overshoot - df.mvs / 2 * HVContrast) top (Jut * 0.75)
include : CenterBottomSerif (df.rightSB - overshoot - df.mvs / 2 * HVContrast) 0 (Jut * 0.75)
create-glyph 'cyrl/Yery' 0x42B : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrYeryShape CAP df
create-glyph 'cyrl/yery' 0x44B : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrYeryShape XH df
glyph-block Letter-Cyrillic-I : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrIShape top] : glyph-proc
local topstroke : adviceBlackness 4
local halftopstroke : topstroke / 2
include : dispiro
widths.lhs
flat RightSB 0 [heading Upward]
curl RightSB (top * 0.4) [heading Upward]
straight.up.end RightSB top [widths.heading topstroke 0 Upward]
include : dispiro
widths.lhs
flat SB top [heading Downward]
curl SB (top * 0.6) [heading Downward]
straight.down.end SB 0 [widths.heading topstroke 0 Downward]
include : dispiro
flat (RightSB - halftopstroke) top [widths.heading 0 topstroke Downward]
curl (SB + halftopstroke) 0 [widths.heading topstroke 0 Downward]
include : AICyrISerifs top
create-glyph 'cyrl/I' 0x418 : glyph-proc
include : MarkSet.capital
include : CyrIShape CAP
create-glyph 'cyrl/i.upright' : glyph-proc
include : MarkSet.e
include : CyrIShape XH
alias 'cyrl/i.italicToothed' null 'u.toothed'
alias 'cyrl/i.italicMotionSerifed' null 'u.motionSerifed'
alias 'cyrl/i.italicMotionSerifedTailed' null 'u.motionSerifedTailed'
alias 'cyrl/i.italicTailed' null 'u.tailed'
select-variant 'cyrl/i' 0x438
alias 'cyrl/i.BGR.toothed' null 'u.toothed'
alias 'cyrl/i.BGR.motionSerifed' null 'u.motionSerifed'
alias 'cyrl/i.BGR.motionSerifedTailed' null 'u.motionSerifedTailed'
alias 'cyrl/i.BGR.tailed' null 'u.tailed'
select-variant 'cyrl/i.BGR'
with-related-glyphs 'cyrl/i.BGR' 'cyrl/ibreve.BGR' null : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS
include [refer-glyph 'breveAbove']
with-related-glyphs 'cyrl/i.BGR' 'cyrl/igrave.BGR' null : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS
include [refer-glyph 'graveAbove']
glyph-block Letter-Cyrillic-Tse : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrTseShape top] : glyph-proc
include : VBarLeft SB 0 top
include : HBarBottom SB RightSB 0
include : VBarRight RightSB 0 top
include : CyrDescender RightSB (shift -- 0.05)
if SLAB : begin
include : AIVSerifs top
include : LeftwardBottomSerif SB 0 SideJut
include : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'cyrl/Tse' 0x426 : glyph-proc
include : MarkSet.capital
include : CyrTseShape CAP
create-glyph 'cyrl/tse.upright' : glyph-proc
include : MarkSet.e
include : CyrTseShape XH
create-glyph 'cyrl/tse.italicToothed' : glyph-proc
include [refer-glyph "u.toothed"] AS_BASE
eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.toothed'
create-glyph 'cyrl/tse.italicMotionSerifed' : glyph-proc
include [refer-glyph "u.motionSerifed"] AS_BASE
eject-contour 'serifRB'
include : CyrDescender RightSB (shift -- 0.05)
create-aliased-glyph 'cyrl/tse.BGR.motionSerifed'
select-variant 'cyrl/tse' 0x446
select-variant 'cyrl/tse.BGR'
glyph-block Letter-Cyrillic-Dzhe : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrDzheShape top] : glyph-proc
include : VBarLeft SB 0 top
include : HBarBottom SB RightSB 0
include : VBarRight RightSB 0 top
include : VBar Middle Descender Stroke
if SLAB : begin
include : AIVSerifs top
include : LeftwardBottomSerif SB 0 SideJut
include : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'cyrl/Dzhe' 0x40F : glyph-proc
include : MarkSet.if
include : CyrDzheShape CAP
create-glyph 'cyrl/dzhe.upright' : glyph-proc
include : MarkSet.p
include : CyrDzheShape XH
create-glyph 'cyrl/dzhe.italicToothed' : glyph-proc
include [refer-glyph 'u.toothed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicTailed' : glyph-proc
include [refer-glyph 'u.tailed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicMotionSerifed' : glyph-proc
include [refer-glyph 'u.motionSerifed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow']
create-glyph 'cyrl/dzhe.italicMotionSerifedTailed' : glyph-proc
include [refer-glyph 'u.motionSerifedTailed'] AS_BASE ALSO_METRICS
include [refer-glyph 'descenderBarBelow']
select-variant 'cyrl/dzhe' 0x45F
glyph-block Letter-Cyrillic-De : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Latin-X : HalfXStrand
define [CyrDeShape top] : glyph-proc
local descenderOverflow : if SLAB SideJut ((RightSB - SB) * 0.075)
local cutleft SB
local cutright RightSB
local topleft : mix cutleft cutright 0.15
include : HBarBottom (cutleft - descenderOverflow) (cutright + descenderOverflow) 0
include : VBarRight cutright 0 top
include : HalfXStrand false false (topleft + Stroke * HVContrast) top (cutleft + HalfStroke * HVContrast * 0.8) HalfStroke 0.1 0.75 0.5
include : VBarLeft (cutleft - descenderOverflow) (-LongJut + HalfStroke) 0
include : VBarRight (cutright + descenderOverflow) (-LongJut + HalfStroke) 0
if SLAB : then
include : dispiro
widths.rhs
flat (topleft - descenderOverflow) top
curl (cutright + descenderOverflow) top
: else
include : HBarTop topleft cutright top
create-glyph 'cyrl/De' 0x414 : glyph-proc
include : MarkSet.if
include : CyrDeShape CAP
create-glyph 'cyrl/de.upright' : glyph-proc
include : MarkSet.e
include : CyrDeShape XH
create-glyph 'cyrl/de.italic' : glyph-proc
include : MarkSet.b
include : dispiro
widths.lhs (Stroke * CThinB)
flat (RightSB - OX - Stroke * HVContrast * (1 - CThinB)) SmallSmoothA
curl (RightSB - OX - Stroke * HVContrast * (1 - CThinB)) (XH - SmallSmoothB)
arcvh
g4 (Middle - CorrectionOMidS) (CAP * 0.7 - O) [widths.lhs]
archv
flat (SB + OX) (XH - SmallSmoothA)
curl (SB + OX) SmallSmoothB
arcvh
g4 (Middle + CorrectionOMidS) O
archv
flat (RightSB - OX) SmallSmoothA
curl (RightSB - OX) (XH - SmallSmoothB)
quadcontrols 0 0.8
g4 (SB + Stroke * 1.1) CAP
italic-variant 'cyrl/de' 0x434
alias 'cyrl/de.BGR' null 'g.singleStorey'
glyph-block Letter-Cyrillic-El : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrElShape top] : glyph-proc
local cutleft : mix SB RightSB 0.135
local cutleft2 : mix SB RightSB 0.075
local cutright : mix SB RightSB 1
include : VBarRight cutright 0 top
include : HBar cutleft cutright (top - HalfStroke)
include : LegShape
ztop -- [Point.cornerFromXY cutleft top]
zbot -- [Point.cornerFromXY [mix SB 0 [if SLAB 1 0.75]] 0]
xb -- cutleft2
if SLAB : begin
include : RightwardTopSerif cutright top SideJut
include : LeftwardTopSerif cutleft top SideJut
include : CenterBottomSerif (cutright - HalfStroke * HVContrast) 0 Jut
create-glyph 'cyrl/El' 0x41B : glyph-proc
include : MarkSet.capital
include : CyrElShape CAP
create-glyph 'cyrl/el' 0x43B : glyph-proc
include : MarkSet.e
include : CyrElShape XH
alias 'cyrl/El.BGR' null 'grek/Lambda'
alias 'cyrl/el.BGR' null 'turnv'
glyph-block Letter-Cyrillic-Zhe : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrZheShape top midtop df] : glyph-proc
local fine : adviceBlackness 3.3 df.div
local midx : mix df.leftSB df.middle 0.3
define [CyrAngleShape] : glyph-proc
local cor HVContrast
local overshoot : O * 3 * df.div
include : ReverseContours : spiro-outline
corner (df.leftSB + overshoot) 0
corner (df.leftSB + fine * cor + overshoot) 0
corner (midx + fine * cor) (top / 2)
corner (df.leftSB + fine * cor + overshoot) top
corner (df.leftSB + overshoot) top
corner midx (top / 2)
include : CyrAngleShape
include : FlipAround df.middle (top / 2)
include : CyrAngleShape
include : VBar df.middle 0 midtop fine
include : HBar midx (df.width - midx) (top / 2) fine
if SLAB : begin
define fineK 0.1
include : LeftwardTopSerif (df.leftSB + fine * fineK) top SideJut
include : LeftwardBottomSerif (df.leftSB + fine * fineK) 0 SideJut
include : RightwardTopSerif (df.rightSB - fine * fineK) top SideJut
include : RightwardBottomSerif (df.rightSB - fine * fineK) 0 SideJut
create-glyph 'cyrl/Zhe' 0x416 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrZheShape CAP CAP df
create-glyph 0x496 : composite-proc
refer-glyph 'cyrl/Zhe'
CyrDescender ([DivFrame para.diversityM 3].rightSB - O * 2) (connex -- 0.5)
create-glyph 'cyrl/zhe' 0x436 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrZheShape XH XH df
create-glyph 0x497 : composite-proc
refer-glyph 'cyrl/zhe'
CyrDescender ([DivFrame para.diversityM 3].rightSB - O * 2) (connex -- 0.5)
create-glyph 'cyrl/zhe.BGR' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrZheShape XH CAP df
glyph-block Letter-Cyrillic-BigYus : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrBigYusShape df top yp _fine] : glyph-proc
local fine : fallback _fine : adviceBlackness 3.3 df.div
local cor HVContrast
local midx : mix df.leftSB df.middle 0.3
local midx2 : Math.min (df.middle - fine * cor) [mix df.leftSB df.middle 0.75]
local yb : top * yp
local tovershoot 2
include : union
spiro-outline
corner (df.leftSB + O * 2) 0
corner (df.leftSB + fine * cor + O * 2) 0
corner (midx + fine * cor) yb
corner midx yb
spiro-outline
corner (midx2 + fine * cor) yb
corner (df.leftSB + fine * cor + O * tovershoot) top
corner (df.leftSB + O * tovershoot) top
corner midx2 yb
spiro-outline
corner (df.width - df.leftSB - O * 2) 0
corner (df.width - df.leftSB - fine * cor - O * 2) 0
corner (df.width - midx - fine * cor) yb
corner (df.width - midx) yb
spiro-outline
corner (df.width - midx2 - fine * cor) yb
corner (df.width - df.leftSB - fine * cor - O * tovershoot) top
corner (df.width - df.leftSB - O * tovershoot) top
corner (df.width - midx2) yb
VBar df.middle 0 yb fine
HBarTop midx (df.width - midx) yb fine
HBarTop
df.leftSB + O * tovershoot + HVContrast * fine * 0.99
df.rightSB - O * tovershoot - HVContrast * fine * 0.99
begin top
begin fine
if SLAB : begin
include : tagged 'serifLB' : LeftwardBottomSerif df.leftSB 0 SideJut
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB 0 SideJut
create-glyph 'cyrl/bigYus' 0x46A : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrBigYusShape df CAP 0.575
create-glyph 'cyrl/bigyus' 0x46B : glyph-proc
local df : DivFrame 1 3
set-width df.width
include : df.markSet.e
include : CyrBigYusShape df XH 0.55
define [CyrIotifiedBigYusShape df top yp] : glyph-proc
local gap : (df.width - 2 * df.leftSB - 4 * df.mvs) / 3
define divSub : (df.width - gap - df.mvs) / Width
define dfSub : DivFrame divSub 3
include : CyrBigYusShape dfSub top yp df.mvs
eject-contour 'serifLB'
eject-contour 'serifRB'
include : Translate (Width * (df.div - divSub)) 0
include : VBarLeft df.leftSB 0 top df.mvs
include : HBarTop (df.leftSB - O) [mix df.leftSB df.rightSB (2 / 3)] (top * yp) df.mvs
if SLAB : begin
include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut df.mvs
include : tagged 'serifLB' : LeftwardBottomSerif df.leftSB 0 SideJut df.mvs
include : tagged 'serifRB' : LeftwardBottomSerif df.rightSB 0 SideJut df.mvs
create-glyph 'cyrl/iotifiedBigYus' 0x46C : glyph-proc
local df : DivFrame para.diversityM 4
set-width df.width
include : df.markSet.capital
include : CyrIotifiedBigYusShape df CAP 0.575
create-glyph 'cyrl/iotifiedBigyus' 0x46D : glyph-proc
local df : DivFrame para.diversityM 4
set-width df.width
include : df.markSet.e
include : CyrIotifiedBigYusShape df XH 0.55
glyph-block Letter-Cyrillic-SmallYus : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Latin-V : VShape
glyph-block-import Letter-Latin-Upper-A : LambdaShape AMaskShape
define [CyrSmallYusShape df top straightBar _fine] : glyph-proc
local fine : fallback _fine : adviceBlackness 3.3 df.div
include : LambdaShape df top fine straightBar (slab -- false)
include : intersection
HBarTop df.leftSB df.rightSB (top / 2) fine
AMaskShape df top fine straightBar
include : VBar df.middle (top / 2) 0 fine
if SLAB : begin
include : tagged 'serifLB' : LeftwardBottomSerif df.leftSB 0 SideJut
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB 0 SideJut
create-glyph : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
create-derived 'cyrl/smallYus.straight' : CyrSmallYusShape df CAP true
create-derived 'cyrl/smallYus.curly' : CyrSmallYusShape df CAP false
create-glyph : glyph-proc
local df : DivFrame 1 3
set-width df.width
include : df.markSet.e
create-derived 'cyrl/smallyus.straight' : CyrSmallYusShape df XH true
create-derived 'cyrl/smallyus.curly' : CyrSmallYusShape df XH false
select-variant 'cyrl/smallYus' 0x466 (follow -- 'grek/Lambda')
select-variant 'cyrl/smallyus' 0x467 (follow -- 'grek/Lambda')
define [CyrIotifiedSmallYusShape df top straightBar] : glyph-proc
local gap : (df.width - 2 * df.leftSB - 4 * df.mvs) / 3
define divSub : (df.width - gap - df.mvs) / Width
define dfSub : DivFrame divSub 3
include : CyrSmallYusShape dfSub top straightBar df.mvs
eject-contour 'serifLB'
eject-contour 'serifRB'
include : Translate (Width * (df.div - divSub)) 0
include : VBarLeft df.leftSB 0 top df.mvs
include : HBarTop (df.leftSB - O) [mix df.leftSB df.rightSB (2 / 3)] (top / 2) df.mvs
if SLAB : begin
include : tagged 'serifLT'
CenterTopSerif (df.leftSB + 0.5 * df.mvs * HVContrast) top Jut df.mvs
include : tagged 'serifLB' : LeftwardBottomSerif df.leftSB 0 SideJut df.mvs
include : tagged 'serifRB' : LeftwardBottomSerif df.rightSB 0 SideJut df.mvs
create-glyph : glyph-proc
local df : DivFrame para.diversityM 4
set-width df.width
include : df.markSet.capital
create-derived 'cyrl/iotifiedSmallYus.straight' : CyrIotifiedSmallYusShape df CAP true
create-derived 'cyrl/iotifiedSmallYus.curly' : CyrIotifiedSmallYusShape df CAP false
create-glyph : glyph-proc
local df : DivFrame para.diversityM 4
set-width df.width
include : df.markSet.e
create-derived 'cyrl/iotifiedSmallyus.straight' : CyrIotifiedSmallYusShape df XH true
create-derived 'cyrl/iotifiedSmallyus.curly' : CyrIotifiedSmallYusShape df XH false
select-variant 'cyrl/iotifiedSmallYus' 0x468 (follow -- 'grek/Lambda')
select-variant 'cyrl/iotifiedSmallyus' 0x469 (follow -- 'grek/Lambda')
glyph-block Letter-Cyrillic-Sha : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar
define [CyrShaShape top df] : glyph-proc
include : union
HBarBottom df.leftSB df.rightSB 0
VBarLeft df.leftSB 0 top df.mvs
VBarRight df.rightSB 0 top df.mvs
VBar df.middle 0 top df.mvs
if SLAB : begin
include : tagged 'serifLB' : LeftwardBottomSerif df.leftSB 0 SideJut
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB 0 SideJut
local jut : Jut * df.mvs / Stroke + O
if (df.width > jut * 7) : begin
include : tagged 'serifLT'
CenterTopSerif (df.leftSB + 0.5 * df.mvs * HVContrast) top jut df.mvs
include : tagged 'serifMT'
CenterTopSerif df.middle top jut df.mvs
include : tagged 'serifRT'
CenterTopSerif (df.rightSB - 0.5 * df.mvs * HVContrast) top jut df.mvs
: else : begin
include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
include : tagged 'serifRT' : RightwardTopSerif df.rightSB top SideJut
create-glyph 'cyrl/Sha' 0x428 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrShaShape CAP df
create-glyph 'cyrl/sha.upright' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrShaShape XH df
turned 'cyrl/sha.italicToothed' null 'm.normal' [DivFrame para.diversityM 3].middle (XH / 2)
create-glyph 'cyrl/sha.italicTailed' : glyph-proc
local df : DivFrame para.diversityM 3
include [refer-glyph 'm.normal'] AS_BASE
eject-contour 'barL'
eject-contour 'serifLT'
include : FlipAround df.middle (XH / 2)
include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs)
turned 'cyrl/sha.italicMotionSerifed' null 'm.motionSerifed' [DivFrame para.diversityM 3].middle (XH / 2)
create-glyph 'cyrl/sha.italicMotionSerifedTailed' : glyph-proc
local df : DivFrame para.diversityM 3
include [refer-glyph 'm.motionSerifed'] AS_BASE
eject-contour 'barL'
eject-contour 'serifLT'
include : FlipAround df.middle (XH / 2)
include : RightwardTailedBar df.rightSB 0 XH (sw -- df.mvs)
select-variant 'cyrl/sha' 0x448
alias 'cyrl/sha.BGR.toothed' null 'cyrl/sha.italicToothed'
alias 'cyrl/sha.BGR.tailed' null 'cyrl/sha.italicTailed'
alias 'cyrl/sha.BGR.motionSerifed' null 'cyrl/sha.italicMotionSerifed'
alias 'cyrl/sha.BGR.motionSerifedTailed' null 'cyrl/sha.italicMotionSerifedTailed'
select-variant 'cyrl/sha.BGR'
define [CyrShchaShape top df] : glyph-proc
include : CyrShaShape top df
#eject-contour 'serifRB'
include : CyrDescender df.rightSB (shift -- 0.05)
create-glyph 'cyrl/Shcha' 0x429 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrShchaShape CAP df
create-glyph 'cyrl/shcha.upright' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrShchaShape XH df
create-glyph 'cyrl/shcha.italic' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE
include : CyrDescender df.rightSB (shift -- 0.05)
italic-variant 'cyrl/shcha' 0x449
alias 'cyrl/shcha.BGR' null 'cyrl/shcha.italic'
create-glyph 'cyrl/te.SRB' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include [refer-glyph 'cyrl/sha.italicToothed'] AS_BASE
include : refer-glyph "macronAbove"
select-variant 'cyrl/te' 0x442
glyph-block Letter-Cyrillic-Che : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrCheShape top _barp] : glyph-proc
local bar : top * [fallback _barp 0.5]
include : VBarRight RightSB 0 top
include : dispiro
widths.lhs
flat SB top [heading Downward]
curl SB (bar + SmoothB - HalfStroke)
arcvh
flat Middle (bar - HalfStroke)
curl (RightSB - 1) (bar - HalfStroke) [heading Rightward]
if SLAB : begin
include : CenterTopSerif (RightSB - HalfStroke * HVContrast) top Jut
include : CenterTopSerif (SB + HalfStroke * HVContrast) top Jut
include : CenterBottomSerif (RightSB - HalfStroke * HVContrast) 0 Jut
create-glyph 'cyrl/Che' 0x427 : glyph-proc
include : MarkSet.capital
include : CyrCheShape CAP [if SLAB 0.45 0.35]
create-glyph 0x4B6 : composite-proc [refer-glyph 'cyrl/Che'] [CyrDescender RightSB]
create-glyph 0x4CB : composite-proc [refer-glyph 'cyrl/Che'] [CyrLeftDescender (RightSB - HVContrast * Stroke)]
create-glyph 'cyrl/che' 0x447 : glyph-proc
include : MarkSet.e
include : CyrCheShape XH [if SLAB 0.45 0.4]
create-glyph 0x4B7 : composite-proc [refer-glyph 'cyrl/che'] [CyrDescender RightSB]
create-glyph 0x4CC : composite-proc [refer-glyph 'cyrl/che'] [CyrLeftDescender (RightSB - HVContrast * Stroke)]
turned 'cyrl/Shha' 0x4BA 'cyrl/Che' Middle (CAP / 2)
create-glyph 'cyrl/Chevbar' 0x4B8 : glyph-proc
include [refer-glyph 'cyrl/Che'] AS_BASE
local yc (CAP * [if SLAB 0.45 0.35] + Stroke * 0.1)
include : VBar Middle (yc + LongJut * 0.8) (yc - LongJut * 0.8) OverlayStroke
create-glyph 'cyrl/chevbar' 0x4B9 : glyph-proc
include [refer-glyph 'cyrl/che'] AS_BASE
local yc (XH * [if SLAB 0.45 0.35] + Stroke * 0.1)
include : VBar Middle (yc + LongJut * 0.8) (yc - LongJut * 0.8) OverlayStroke
glyph-block Letter-Cyrillic-Yu : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [CyrYuShape top xtop sma smb div] : glyph-proc
local df : DivFrame div 3
local xm : barmixL df.leftSB df.rightSB (df.mvs * HVContrast) [StrokeWidthBlend 0.4 0.45]
include : VBarLeft df.leftSB 0 xtop df.mvs
include : OShape top 0 xm df.rightSB df.mvs (sma * 0.7 * df.div) (smb * 0.7 * df.div)
include : HBar (df.leftSB + 1) xm (top / 2)
if SLAB : begin
include : CenterTopSerif (df.leftSB + df.mvs / 2 * HVContrast) xtop (Jut * 0.75)
include : CenterBottomSerif (df.leftSB + df.mvs / 2 * HVContrast) 0 (Jut * 0.75)
create-glyph 'cyrl/Yu' 0x42E : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrYuShape CAP CAP SmoothA SmoothB df.div
create-glyph 'cyrl/yu' 0x44E : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrYuShape XH XH SmallSmoothA SmallSmoothB df.div
create-glyph 'cyrl/yu.BGR' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.b
include : CyrYuShape XH CAP SmallSmoothA SmallSmoothB df.div
glyph-block Letter-Cyrillic-Lje : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Cyrillic-Yeri : CyrYeriShape
define [CyrLjeShape top df] : glyph-proc
local rightSB : df.width - df.leftSB
local l : df.leftSB + O
local r : rightSB - O
local middle : df.width / 2
local xlefttop : mix l r 0.075
local jut : Jut * 0.72
set-width df.width
include : LegShape
ztop -- [Point.cornerFromXY xlefttop top]
zbot -- [Point.cornerFromXY [mix l 0 [if SLAB 1 0.75]] 0]
xb -- [mix l r 0.025]
fine -- MVertStroke
include : CyrYeriShape top (middle - MVertStroke / 2 * HVContrast) (r - O) MVertStroke jut
include : HBarTop xlefttop middle top
if SLAB : begin
include : LeftwardTopSerif xlefttop top (jut - MVertStroke / 2 * HVContrast)
create-glyph 'cyrl/Lje' 0x409 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrLjeShape CAP df
create-glyph 'cyrl/lje' 0x459 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrLjeShape XH df
glyph-block Letter-Cyrillic-Nje : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Cyrillic-Yeri : CyrYeriShape
define [CyrNjeShape top df] : glyph-proc
local rightSB : df.width - df.leftSB
local xlefttop : mix df.leftSB df.rightSB 0.075
local jut : Jut * 0.72
local l : df.leftSB + O
local r : rightSB - O
local middle : df.width / 2
set-width df.width
include : VBarLeft l 0 top MVertStroke
include : CyrYeriShape top (middle - MVertStroke / 2 * HVContrast) (r - O) MVertStroke jut
include : HBar (df.leftSB + MVertStroke * 0.1) middle (top / 2)
if SLAB : begin
include : CenterTopSerif (l + MVertStroke / 2 * HVContrast) top jut
include : CenterBottomSerif (l + MVertStroke / 2 * HVContrast) 0 jut
create-glyph 'cyrl/Nje' 0x40A : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : CyrNjeShape CAP df
create-glyph 'cyrl/nje' 0x45A : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : CyrNjeShape XH df
glyph-block Letter-Cyrillic-Tshe : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : nShoulder
create-glyph 'cyrl/Tshe' 0x40B : glyph-proc
include : MarkSet.capital
local left : [mix SB RightSB 0.15] + OX
local right : RightSB - OX
include : nShoulder
left -- (left + Stroke * HVContrast)
right -- right
include : VBarLeft left 0 CAP
include : dispiro
widths.rhs
flat (SB + OX) CAP
curl [mix left RightSB 0.475] CAP
if SLAB : begin
include : CenterBottomSerif (left + HVContrast * HalfStroke) 0 Jut
include : CenterBottomSerif (right - HVContrast * HalfStroke) 0 Jut
glyph-block Letter-Cyrillic-Dje : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : nShoulder
create-glyph 'cyrl/Dje' 0x402 : glyph-proc
include : MarkSet.capital
local left : [mix SB RightSB 0.15] + OX
local right: RightSB - OX * 1.5
include : nShoulder
left -- (left + Stroke * HVContrast)
right -- right
top -- XH
bottom -- (Hook + HalfStroke + O)
sma -- SmoothA
smb -- SmoothB
include : VBarLeft left 0 CAP
include : dispiro
widths.rhs
flat (SB + OX) CAP
curl [mix left RightSB 0.475] CAP
include : VerticalHook (right - HalfStroke * HVContrast) (Hook + HalfStroke + O) [Math.max ((left - right) / 2 + HalfStroke) (-Hook * 1.2)] Hook
if SLAB : begin
include : LeftwardBottomSerif left 0 SideJut
create-glyph 'cyrl/dje' 0x452 : glyph-proc
include : MarkSet.if
include : refer-glyph 'cyrl/tshe'
eject-contour 'serifRB'
include : VerticalHook (RightSB - HalfStroke * HVContrast) 0 (-Hook * 1.2) Hook
glyph-block Letter-Cyrillic-Fita : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define FitaWave : XH / 16
define [FitaLeft sw] : SB + sw / 2 * HVContrast
define [FitaRight sw] : RightSB - sw / 2 * HVContrast
define [FitaCrossbar y sw swc] : dispiro
widths.center swc
g4.right.mid [mix [FitaLeft sw] Middle (-1)] y
g4.right.mid [mix [FitaLeft sw] Middle (-0.5)] (y - FitaWave)
g4 [FitaLeft sw] y
g4.right.mid [mix [FitaLeft sw] Middle 0.5] (y + FitaWave)
g4 Middle y
g4.right.mid [mix [FitaRight sw] Middle 0.5] (y - FitaWave)
g4 [FitaRight sw] y
g4.right.mid [mix [FitaRight sw] Middle (-0.5)] (y + FitaWave)
g4.right.mid [mix [FitaRight sw] Middle (-1)] y
create-glyph 'cyrl/Fita' 0x472 : glyph-proc
define sw : adviceBlackness2 2 3 CAP
define swc : adviceBlackness2 2 4 CAP
include : MarkSet.capital
include : union
OShape CAP 0 SB RightSB sw SmoothA SmoothB
intersection
OShapeOutline.NoOvershoot CAP 0 SB RightSB sw SmoothA SmoothB
FitaCrossbar (CAP / 2) sw swc
create-glyph 'cyrl/fita' 0x473 : glyph-proc
define sw : adviceBlackness2 2 3 XH
define swc : adviceBlackness2 2 4 XH
include : MarkSet.e
include : union
OShape XH 0 SB RightSB sw SmallSmoothA SmallSmoothA
intersection
OShapeOutline.NoOvershoot XH 0 SB RightSB sw SmallSmoothA SmallSmoothA
FitaCrossbar (XH / 2) sw swc