Add motion-serifed variants for H, K, M, N, X, x, Y (#818).

This commit is contained in:
be5invis 2021-01-23 23:12:51 -08:00
parent c02aa741e8
commit 721f39a53e
13 changed files with 461 additions and 243 deletions

View file

@ -3,7 +3,7 @@
* **Breaking** Reorder `cv##` features and variant assignments for better organization.
* **Breaking** Spilt out variant selector for `A`, `V`, `W`, `Z` (#806).
* Add diagonal-tailed variants of `f`, `i`, `j`, `k`, `l`, `q`, `t` (#795).
* Add motion-serifed variants of `A`, `B`, `D`, `E`, `F`, `P`, `R`, `T`, `V`, `W`, `Z`, `v`, `w`, `y`, `z` (#806, #815).
* Add motion-serifed variants of `A`, `B`, `D`, `E`, `F`, `H`, `K`, `M`, `N`, `P`, `R`, `T`, `V`, `W`, `X`, `Y`, `Z`, `v`, `w`, `x`, `y`, `z` (#806, #815, #818).
* Add symmetric-legged variants of `K` and `k` (#807).
* Add horizontal-tailed and detach-tailed variants of `Q` (#808).
* Add hookless and capped variants of `G` (#809).

View file

@ -372,16 +372,6 @@ glyph-block CommonShapes : begin
CenterBottomSerifAsymmetric (left + Stroke * sideSerifK * HVContrast) 0 Jut jutIn
include : tagged 'serifRB'
CenterBottomSerifAsymmetric (right - Stroke * sideSerifK * HVContrast) 0 jutIn Jut
define [AINSerifs top _left _right sw xn] : glyph-proc
local left : fallback _left SB
local right : fallback _right RightSB
local jut : Jut * [fallback xn 1]
if SLAB : begin
include : LeftwardTopSerif (left + sw * (sideSerifK - 0.5) * HVContrast) top (jut - sw / 2 * HVContrast)
include : tagged 'serifRB'
CenterTopSerif (right - sw * sideSerifK * HVContrast) top jut
include : tagged 'serifLB'
CenterBottomSerif (left + sw * sideSerifK * HVContrast) 0 jut
define [AICyrISerifs top _left _right] : glyph-proc
local left : fallback _left SB
local right : fallback _right RightSB
@ -686,4 +676,4 @@ glyph-block CommonShapes : begin
corner [mix x1 x2 (-k)] [mix y1 y2 (-k)]
corner [mix x1 x2 (1+k)] [mix y1 y2 (1+k)]
glyph-block-export Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar FlatSlashShape hookstart hookend CyrDescender CyrLeftDescender FlipAround ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo WithAIHSerifsMask WithTransform clear-anchors OBarLeftToothlessShape OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical ExtLineCenter DiagCorDs HCrossBar VERY-FAR MaskAbove MaskBelow MaskLeft MaskRight
glyph-block-export Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AICyrISerifs AIMSerifs HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar FlatSlashShape hookstart hookend CyrDescender CyrLeftDescender FlipAround ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo WithAIHSerifsMask WithTransform clear-anchors OBarLeftToothlessShape OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical ExtLineCenter DiagCorDs HCrossBar VERY-FAR MaskAbove MaskBelow MaskLeft MaskRight

View file

@ -184,7 +184,7 @@ glyph-block Letter-Latin-K : begin
curl (xDTEnd + 0.125 * [DiagonalTailInnerRadius]) (0.9 * swDiagTail + 0.5 *[DiagonalTailInnerRadius])
DiagonalTailF 1 [DivFrame 1] xDTEnd 0 (Hook - swDiagTail * 0.375) swDiagTail
else : intersection
Rect XH 0 0 [if SLAB (dim.slabStartX + SideJut) (Width * 2)]
Rect XH 0 0 [if slab (dim.slabStartX + SideJut) (Width * 2)]
dispiro
flat dim.arcTerminalX dim.arcTerminalY [widths.lhs]
curl dim.kshRight 0 [widths.rhs]
@ -220,57 +220,67 @@ glyph-block Letter-Latin-K : begin
VerticalHook (SB + [KBalance slab straightBar] + HalfStroke * HVContrast) (CAP - Hook - HalfStroke) HookX (-Hook)
define UpperKConfig : object
straight { KNormalLegs KStraightLegShapeImpl }
curly { KCurlyLegs KCurlyLegShapeImpl }
symmetricDisconnected { KSymmetricDisconnectedLegs [KSymmetricLegsImpl false] }
symmetricConnected { KSymmetricConnectedLegs [KSymmetricLegsImpl true] }
straight { KNormalLegs KStraightLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] }
curly { KCurlyLegs KCurlyLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] }
symmetricDisconnected { KSymmetricDisconnectedLegs [KSymmetricLegsImpl false] [if SLAB 1 0] [if SLAB 1 0] }
symmetricConnected { KSymmetricConnectedLegs [KSymmetricLegsImpl true] [if SLAB 1 0] [if SLAB 1 0] }
straightMotionSerifed { KNormalLegs KStraightLegShapeImpl 2 0 }
curlyMotionSerifed { KCurlyLegs KCurlyLegShapeImpl 2 0 }
symmetricDisconnectedMotionSerifed { KSymmetricDisconnectedLegs [KSymmetricLegsImpl false] 2 0 }
symmetricConnectedMotionSerifed { KSymmetricConnectedLegs [KSymmetricLegsImpl true] 2 0 }
foreach { suffix { Legs BashkirKaLegs } } [Object.entries UpperKConfig] : do
define [UpperKLTSerif slabTop top straightBar] : match slabTop
2 : LeftwardTopSerif (SB + [KBalance slabTop straightBar]) top SideJut
1 : CenterTopSerif (SB + [KBalance slabTop straightBar] + HalfStroke * HVContrast) top Jut
_ : glyph-proc
define [UpperKLBSerif slabTop top straightBar] : match slabTop
2 : LeftwardBottomSerif (SB + [KBalance slabTop straightBar]) 0 SideJut
1 : CenterBottomSerif (SB + [KBalance slabTop straightBar] + HalfStroke * HVContrast) 0 Jut
_ : glyph-proc
foreach { suffix { Legs BashkirKaLegs slabTop slabBot } } [Object.entries UpperKConfig] : do
local straightBar : Legs !== KCurlyLegs
create-glyph "K.\(suffix)" : glyph-proc
include : MarkSet.capital
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 CAP
include : Legs CAP SLAB SLAB
if SLAB : begin
include : CenterTopSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) CAP Jut
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut
create-derived "KDescender.\(suffix)" : KCyrlNormalDescender CAP straightBar SLAB SLAB
include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 CAP
include : Legs CAP slabTop slabBot
if slabTop : include : UpperKLTSerif slabTop CAP straightBar
if slabBot : include : UpperKLBSerif slabTop CAP straightBar
create-derived "KDescender.\(suffix)" : KCyrlNormalDescender CAP straightBar slabTop slabBot
create-glyph "grek/kappa.\(suffix)" : glyph-proc
include : MarkSet.e
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 XH
include : Legs XH SLAB false
if SLAB : include : LeftwardTopSerif (SB + [KBalance SLAB straightBar]) XH SideJut
include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 XH
include : Legs XH slabTop false
if slabTop : include : LeftwardTopSerif (SB + [KBalance slabTop straightBar]) XH SideJut
create-glyph "cyrl/ka.\(suffix)" : glyph-proc
include : MarkSet.e
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 XH
include : Legs XH SLAB SLAB
if SLAB : begin
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut
include : CenterTopSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) XH Jut
create-derived "cyrl/kaDescender.\(suffix)" : KCyrlNormalDescender XH straightBar SLAB SLAB
include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 XH
include : Legs XH slabTop slabBot
if slabTop : include : UpperKLTSerif slabTop XH straightBar
if slabBot : include : UpperKLBSerif slabTop XH straightBar
create-derived "cyrl/kaDescender.\(suffix)" : KCyrlNormalDescender XH straightBar slabTop slabBot
create-glyph "Khooktop.\(suffix)" : glyph-proc
include : MarkSet.e
include : Legs CAP SLAB SLAB
include : KHookTopBar SLAB straightBar
if SLAB : begin
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut
include : Legs CAP slabTop slabBot
include : KHookTopBar slabTop straightBar
if slabBot : include : UpperKLBSerif slabTop CAP straightBar
define [BashkirKaShape top] : glyph-proc
local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
local leftNB : left - [KBalance SLAB straightBar]
local barLeft : mix 0 SB [if SLAB 0.25 0.375]
local left : if slabTop ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
local leftNB : left - [KBalance slabTop straightBar]
local barLeft : mix 0 SB [if slabTop 0.25 0.375]
local sw : AdviceStroke 3
include : HBarTop barLeft (Stroke * 0.1 + left) top
include : VBarLeft left 0 top sw
include : BashkirKaLegs leftNB RightSB Stroke top SLAB SLAB
if SLAB : begin
include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut
include : DownwardLeftSerif barLeft top VJut (MVertStroke / HVContrast)
include : BashkirKaLegs leftNB RightSB Stroke top slabTop slabBot
if slabBot : include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut
if slabTop : include : DownwardLeftSerif barLeft top VJut (MVertStroke / HVContrast)
create-glyph "cyrl/BashkirUpperKa.\(suffix)" : glyph-proc
include : MarkSet.capital
@ -330,8 +340,8 @@ glyph-block Letter-Latin-K : begin
alias 'latinkappa' 0x138 'cyrl/ka'
select-variant 'cyrl/kaDescender' 0x49B (follow -- 'K')
select-variant 'Khooktop' 0x198 (follow -- 'K')
select-variant 'khooktop' 0x199 (follow -- 'k')
select-variant 'Khooktop' 0x198
select-variant 'khooktop' 0x199
turned 'turnK' 0xA7B0 'K' Middle (CAP / 2)
turned 'turnk' 0x29E 'k' Middle (CAP / 2)

View file

@ -11,19 +11,47 @@ glyph-block Letter-Latin-Upper-H : begin
glyph-block-import Common-Derivatives
glyph-block-import Letter-Blackboard : BBS BBD
define [HShape top] : glyph-proc
define SLAB-AUTO 1
define SLAB-MOTION 2
define [HShape top slabType] : glyph-proc
include : tagged 'strokeL' : VBarLeft SB 0 top
include : tagged 'strokeR' : VBarRight RightSB 0 top
include : HBar (SB - O) (RightSB + O) (top * HBarPos)
include : AIHSerifs top
include : match slabType
[Just SLAB-AUTO] : AIHSerifs top
[Just SLAB-MOTION] : tagged 'serifLT' : LeftwardTopSerif SB top SideJut
create-glyph 'H' 'H' : glyph-proc
create-glyph 'H.standard' : glyph-proc
include : MarkSet.capital
include : HShape CAP
include : HShape CAP SLAB-AUTO
create-glyph 'H.motionSerifed' : glyph-proc
include : MarkSet.capital
include : HShape CAP SLAB-MOTION
select-variant 'H' 'H'
create-glyph 'smcpH.standard' : glyph-proc
include : MarkSet.e
include : HShape XH SLAB-AUTO
create-glyph 'smcpH.motionSerifed' : glyph-proc
include : MarkSet.e
include : HShape XH SLAB-AUTO
select-variant 'smcpH' 0x29C (follow -- 'H')
create-glyph 'halfH' 0x2C75 : glyph-proc
include : MarkSet.capital
include : HShape CAP
include : HShape CAP SLAB-AUTO
eject-contour 'strokeR'
eject-contour 'serifRT'
eject-contour 'serifRB'
create-glyph 'halfSmcpH' 0x2C76 : glyph-proc
include : MarkSet.e
include : HShape XH SLAB-AUTO
eject-contour 'strokeR'
eject-contour 'serifRT'
eject-contour 'serifRB'
@ -31,6 +59,11 @@ glyph-block Letter-Latin-Upper-H : begin
alias 'grek/Eta' 0x397 'H'
alias 'cyrl/En' 0x41D 'H'
alias 'cyrl/en' 0x43D 'smcpH'
create-glyph 0x4A2 : composite-proc [refer-glyph 'cyrl/En'] [CyrDescender RightSB]
create-glyph 0x4A3 : composite-proc [refer-glyph 'cyrl/en'] [CyrDescender RightSB]
create-glyph 'mathbb/H' 0x210D : glyph-proc
include : MarkSet.capital
include : VBarLeft SB 0 CAP BBS
@ -43,21 +76,6 @@ glyph-block Letter-Latin-Upper-H : begin
include : HBarBottom SB (SB + BBD) 0 BBS
include : HBarBottom (RightSB - BBD) RightSB 0 BBS
create-glyph 'smcpH' 0x29C : glyph-proc
include : MarkSet.e
include : HShape XH
create-glyph 'halfSmcpH' 0x2C76 : glyph-proc
include : MarkSet.e
include : HShape XH
eject-contour 'strokeR'
eject-contour 'serifRT'
eject-contour 'serifRB'
alias 'cyrl/en' 0x43D 'smcpH'
create-glyph 0x4A2 : composite-proc [refer-glyph 'cyrl/En'] [CyrDescender RightSB]
create-glyph 0x4A3 : composite-proc [refer-glyph 'cyrl/en'] [CyrDescender RightSB]
define [EnGheShape top] : glyph-proc
local right : if SLAB ([mix RightSB SB 0.35] + MVertStroke / 2 * HVContrast) [mix RightSB SB 0.2]

View file

@ -10,7 +10,13 @@ glyph-block Letter-Latin-Upper-M : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
define [MShape top df fHanging] : glyph-proc
define FORM-FLAT 0
define FORM-HANGING 1
define SLAB-AUTO 1
define SLAB-MOTION 2
define [MShape top df fHanging slabType] : glyph-proc
local swSideBot : if fHanging Stroke : AdviceStroke 3.5 df.div
local swSideTop : AdviceStroke [if fHanging 5 4] df.div
local halfSwMiddle : swSideTop / 2
@ -32,23 +38,28 @@ glyph-block Letter-Latin-Upper-M : begin
include : dispiro
flat (df.rightSB - halfSwMiddle) top [widths.heading 0 swSideTop Downward]
curl df.middle middleY [widths.heading (swSideTop / 2) (swSideTop / 2) Downward]
include : AIMSerifs top df.leftSB df.rightSB
create-glyph : glyph-proc
local df : DivFrame para.diversityM 3
include : df.markSet.capital
set-width df.width
include : match slabType
[Just SLAB-AUTO] : AIMSerifs top df.leftSB df.rightSB
[Just SLAB-MOTION] : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
create-derived 'M.hanging' : MShape CAP df true
create-derived 'M.flatBottom' : MShape CAP df false
define MConfig : object
hanging { FORM-HANGING SLAB-AUTO }
flatBottom { FORM-FLAT SLAB-AUTO }
hangingMotionSerifed { FORM-HANGING SLAB-MOTION }
flatBottomMotionSerifed { FORM-FLAT SLAB-MOTION }
create-glyph : glyph-proc
local df : DivFrame para.diversityM 3
include : df.markSet.e
set-width df.width
create-derived 'smcpM.hanging' : MShape XH df true
create-derived 'smcpM.flatBottom' : MShape XH df false
foreach { suffix { form slab } } [Object.entries MConfig] : do
create-glyph "M.\(suffix)" : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : MShape CAP df form slab
create-glyph "smcpM.\(suffix)" : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : MShape XH df form slab
select-variant 'M' 'M'
select-variant 'smcpM' 0x1D0D (follow -- 'M')

View file

@ -10,50 +10,72 @@ glyph-block Letter-Latin-Upper-N : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Marks : markHalfStroke
glyph-block-export NShape
define [NShape top left right crowd diagcrowd xn] : glyph-proc
local topstroke : AdviceStroke [fallback diagcrowd 4]
local stroke : AdviceStroke [fallback crowd 1]
local halftopstroke : topstroke / 2
define SLAB-AUTO 1
define SLAB-MOTION 2
define [StdNSerifs top left right sw xn] : glyph-proc
include : tagged 'serifLT'
LeftwardTopSerif left top (xn * Jut - 0.5 * sw * HVContrast)
include : tagged 'serifRB'
CenterTopSerif (right - 0.5 * sw * HVContrast) top (xn * Jut)
include : tagged 'serifLB'
CenterBottomSerif (left + 0.5 * sw * HVContrast) 0 (xn * Jut)
define [NShape] : params [slabType top left right [crowd 2] [crDiag 4] [xn 1]] : glyph-proc
local swDiag : AdviceStroke crDiag
local stroke : AdviceStroke crowd
include : union
AINSerifs top left right stroke xn
dispiro
flat left 0 [widths.heading 0 stroke Upward]
curl left (top * 0.4) [heading Upward]
straight.up.end left top [widths.heading 0 topstroke Upward]
straight.up.end left top [widths.heading 0 swDiag Upward]
dispiro
flat right top [widths.heading 0 stroke Downward]
curl right (top * 0.6) [heading Downward]
straight.down.end right 0 [widths.heading 0 topstroke Downward]
straight.down.end right 0 [widths.heading 0 swDiag Downward]
dispiro
flat (left + halftopstroke) top [widths.heading topstroke 0 Downward]
curl (right - halftopstroke) 0 [widths.heading 0 topstroke Downward]
flat (left + swDiag / 2) top [widths.heading swDiag 0 Downward]
curl (right - swDiag / 2) 0 [widths.heading 0 swDiag Downward]
create-glyph 'N' 'N' : glyph-proc
include : MarkSet.capital
include : NShape CAP SB RightSB
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
include : match slabType
[Just SLAB-AUTO] : if SLAB [StdNSerifs top left right stroke xn] [glyph-proc]
[Just SLAB-MOTION] : tagged 'serifLT' : LeftwardTopSerif left top SideJut
define NConfig : object
standard { SLAB-AUTO }
motionSerifed { SLAB-MOTION }
do : foreach { suffix { slabType } } [Object.entries NConfig] : do
create-glyph "N.\(suffix)" : glyph-proc
include : MarkSet.capital
include : NShape slabType CAP SB RightSB
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
create-glyph "Nltail.\(suffix)" : glyph-proc
include [refer-glyph "N.\(suffix)"] AS_BASE ALSO_METRICS
eject-contour 'serifLB'
include : VerticalHook (SB + HalfStroke * HVContrast) 0 (-HookX) Hook
create-glyph "smcpN.\(suffix)" : glyph-proc
include : MarkSet.e
include : NShape slabType XH SB RightSB
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
select-variant 'N' 'N'
alias 'grek/Nu' 0x39D 'N'
create-glyph 'smcpN' 0x274 : glyph-proc
include : MarkSet.e
include : NShape XH SB RightSB 3 3.5
select-variant 'smcpN' 0x274 (follow -- 'N')
select-variant 'Nltail' 0x19D (follow -- 'N')
create-glyph 'currency/nairaSign' 0x20A6 : glyph-proc
include : NShape CAP (SB * 1.25) (Width - SB * 1.25) 3.5 4
include : NShape SLAB-AUTO CAP (SB * 1.25) (Width - SB * 1.25) 3.5 4
define sw : AdviceStroke2 2 4 CAP
define gap : Math.max (CAP / 6) sw
include : HBarBottom [mix 0 SB 0.5] [mix Width RightSB 0.5] (CAP / 2 + gap / 2) sw
include : HBarTop [mix 0 SB 0.5] [mix Width RightSB 0.5] (CAP / 2 - gap / 2) sw
create-glyph 'Nltail' 0x19D : glyph-proc
include [refer-glyph 'N'] AS_BASE
eject-contour 'serifLB'
include : VerticalHook (SB + HalfStroke * HVContrast) 0 (-HookX) Hook
glyph-block-import Letter-Blackboard : BBS BBD
create-glyph 'mathbb/N' 0x2115 : glyph-proc
include : MarkSet.capital
@ -69,4 +91,10 @@ glyph-block Letter-Latin-Upper-N : begin
dispiro
widths.center BBS
corner (SB + BBS * HVContrast / 2) (CAP - (CAP / 5))
corner (RightSB - BBS * HVContrast) 0
corner (RightSB - BBS * HVContrast) 0
create-glyph 'numero' 0x2116 : glyph-proc
local fine : AdviceStroke 4.5
include : OShape XH [Math.max (fine * 2) (CAP * 0.1)] (Middle + [Math.max (fine / 2) ((RightSB - SB) * 0.1)]) [mix RightSB Width 0.5] fine (SmoothA * fine / Stroke) (SmoothB * fine / Stroke)
include : NShape SLAB-AUTO CAP (SB / 2) Middle (crowd -- 4.5) (crDiag -- 5.5) (xn -- 0.7)
include : HBarBottom (Middle + fine / 2) [mix RightSB Width 0.5] 0 fine

View file

@ -253,13 +253,14 @@ glyph-block Letter-Latin-Upper-R : begin
include : PShape top (mul -- 1) (bp -- bp) (slab -- [if SLAB PShape.SlabSymmetric])
include : VBarLeft SB (top - 1) CAP
local legTop : RLegTop top Stroke bp
local right (RightSB - O - [if SLAB (Jut / 8) 0])
create-derived 'Yr.straight'
RLegShape-Straight ((top - Stroke) * bp + Stroke / 2) Descender Middle right (top - Descender) SLAB Stroke 0
RLegShape-Straight legTop Descender Middle right (top - Descender) SLAB Stroke 0
create-derived 'Yr.curly'
RLegShape-Curly ((top - Stroke) * bp + Stroke / 2) Descender Middle right (top - Descender) SLAB Stroke 0
RLegShape-Curly legTop Descender Middle right (top - Descender) SLAB Stroke 0
create-derived 'Yr.standing'
RLegShape-Standing ((top - Stroke) * bp + Stroke / 2) Descender Middle right (top - Descender) SLAB Stroke 0
RLegShape-Standing legTop Descender Middle right (top - Descender) SLAB Stroke 0
select-variant 'Yr' 0x1A6 (follow -- 'Rrotunda')

View file

@ -11,29 +11,33 @@ glyph-block Letter-Latin-Upper-Y : begin
glyph-block-import Common-Derivatives
glyph-block-import Letter-Latin-X : HalfXStrand
define [YShape straightBar top bot] : glyph-proc
define BODY-CURLY 0
define BODY-STRAIGHT 1
define SLAB-AUTO 1
define SLAB-MOTION 2
define [YShape bodyType slabType top bot] : glyph-proc
local cross : mix [fallback bot 0] top 0.4
include : WithAIHSerifsMask CAP 0 SB RightSB
HalfXStrand straightBar SLAB SB top Middle cross 0.1 0.4 0.28
HalfXStrand bodyType SLAB SB top Middle cross 0.1 0.4 0.28
include : tagged 'strokeRT' : WithAIHSerifsMask CAP 0 SB RightSB
HalfXStrand straightBar SLAB RightSB top Middle cross 0.1 0.4 0.28
HalfXStrand bodyType SLAB RightSB top Middle cross 0.1 0.4 0.28
include : VBar Middle [fallback bot 0] (cross + HalfStroke)
set-base-anchor 'overlay' Middle cross
if SLAB : begin
include : AIVSerifs top
include : CenterBottomSerif Middle [fallback bot 0] MidJutSide
match slabType
[Just SLAB-AUTO] : if SLAB : begin
include : AIVSerifs top
include : CenterBottomSerif Middle [fallback bot 0] MidJutSide
[Just SLAB-MOTION] : include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut
define [YOverlayShape] : glyph-proc
include : HOverlayBar SB RightSB (CAP * 0.45)
include : HOverlayBar SB RightSB (CAP * 0.25)
create-glyph : glyph-proc
include : MarkSet.capital
create-derived 'Y.straight' : YShape true CAP
create-derived 'Y.curly' : YShape false CAP
define [YHookTopShape straightBar] : glyph-proc
include : YShape straightBar CAP
define [YHookTopShape bodyType slabType] : glyph-proc
include : YShape bodyType slabType CAP
eject-contour 'strokeRT'
eject-contour 'serifRT'
@ -45,20 +49,29 @@ glyph-block Letter-Latin-Upper-Y : begin
quadcontrols 0.55 0.7 32 unimportant
g4 (Middle + Stroke / 2 * HVContrast) cross
create-glyph : glyph-proc
include : MarkSet.capital
create-derived 'Yhooktop.straight' : YHookTopShape true
create-derived 'Yhooktop.curly' : YHookTopShape false
create-glyph : glyph-proc
include : MarkSet.p
create-derived 'cyrl/ue.straight' : YShape true XH Descender
create-derived 'cyrl/ue.curly' : YShape false XH Descender
define YConfig : object
straight { BODY-STRAIGHT SLAB-AUTO }
curly { BODY-CURLY SLAB-AUTO }
straightMotionSerifed { BODY-STRAIGHT SLAB-MOTION }
curlyMotionSerifed { BODY-CURLY SLAB-MOTION }
create-glyph : glyph-proc
include : MarkSet.e
create-derived 'smcpY.straight' : YShape true XH
create-derived 'smcpY.curly' : YShape true XH
foreach { suffix { bodyType slabType } } [Object.entries YConfig] : do
create-glyph "Y.\(suffix)" : glyph-proc
include : MarkSet.capital
include : YShape bodyType slabType CAP
create-glyph "smcpY.\(suffix)" : glyph-proc
include : MarkSet.e
include : YShape bodyType slabType XH
create-glyph "Yhooktop.\(suffix)" : glyph-proc
include : MarkSet.capital
include : YHookTopShape bodyType slabType
create-glyph "cyrl/ue.\(suffix)" : glyph-proc
include : MarkSet.p
include : YShape bodyType slabType XH Descender
select-variant 'Y' 'Y'
select-variant 'Yhooktop' 0x1B3 (follow -- 'Y')

View file

@ -150,14 +150,14 @@ glyph-block Letter-Latin-W : begin
include : match slabType
[Just SERIFS-AUTO] : AIVSerifs top df.leftSB df.rightSB
[Just SERIFS-MOTION] : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
[Just SERIFS-MOTION] : tagged 'serifLT' : LeftwardTopSerif (df.leftSB + O * 2) top SideJut
[Just SERIFS-DOUBLE-V] : glyph-proc
if SLAB : include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
if SLAB : include : tagged 'serifRT' : RightwardTopSerif df.rightSB top SideJut
if SLAB : include : tagged 'serifLT' : LeftwardTopSerif (df.leftSB + O * 2) top SideJut
if SLAB : include : tagged 'serifRT' : RightwardTopSerif (df.rightSB - O * 2) top SideJut
[Just SERIFS-ASYMMETRIC] : glyph-proc
include : AIVSerifs top df.leftSB df.rightSB
eject-contour 'serifLT'
if SLAB : include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
if SLAB : include : tagged 'serifLT' : LeftwardTopSerif (df.leftSB + O * 2) top SideJut
define [WonOverlay df] : glyph-proc
include : HOverlayBar [mix SB 0 0.7] [mix df.rightSB df.width 0.7] (CAP * 0.6)

View file

@ -45,45 +45,64 @@ glyph-block Letter-Latin-X : begin
include : HalfXStrand stb slab _leftx lefty middlex middley turn pStraight tension
include : HalfXStrand stb slab _rightx righty middlex middley turn pStraight tension
define [UpperXBase] : union
XStrand true SLAB SB 0 RightSB CAP 0.1 0.4 0.28
XStrand true SLAB SB CAP RightSB 0 0.1 0.4 0.28
define [XMotionSerifs top] : glyph-proc
include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut
create-glyph 'X.straight' : glyph-proc
include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : union
XStrand true SLAB SB 0 RightSB CAP 0.1 0.4 0.28
XStrand true SLAB SB CAP RightSB 0 0.1 0.4 0.28
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase
include : AIHSerifs CAP
create-glyph 'X.curly' : glyph-proc
include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : union
XStrand false SLAB SB 0 RightSB CAP 0.1 0.4 0.28
XStrand false SLAB SB CAP RightSB 0 0.1 0.4 0.28
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase
include : AIHSerifs CAP
create-glyph 'X.straightMotionSerifed' : glyph-proc
include : MarkSet.capital
include : UpperXBase
include : XMotionSerifs CAP
create-glyph 'X.curlyMotionSerifed' : glyph-proc
include : MarkSet.capital
include : UpperXBase
include : XMotionSerifs CAP
define [LowerXBase] : begin
local turn : if SLAB 0.1 0.1
local tension : if SLAB 0.24 0.24
union
XStrand true SLAB SB 0 RightSB XH turn 0.4 tension
XStrand true SLAB SB XH RightSB 0 turn 0.4 tension
local LowerXTurn : if SLAB 0.1 0.1
local LowerXTension : if SLAB 0.24 0.24
create-glyph 'x.straight' : glyph-proc
include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : union
XStrand true SLAB SB 0 RightSB XH LowerXTurn 0.4 LowerXTension
XStrand true SLAB SB XH RightSB 0 LowerXTurn 0.4 LowerXTension
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase
include : AIHSerifs XH
create-glyph 'x.curly' : glyph-proc
include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : union
XStrand false SLAB SB 0 RightSB XH LowerXTurn 0.4 LowerXTension
XStrand false SLAB SB XH RightSB 0 LowerXTurn 0.4 LowerXTension
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase
include : AIHSerifs XH
create-glyph 'x.straightMotionSerifed' : glyph-proc
include : MarkSet.e
include : LowerXBase
include : XMotionSerifs XH
create-glyph 'x.curlyMotionSerifed' : glyph-proc
include : MarkSet.e
include : LowerXBase
include : XMotionSerifs XH
create-glyph 'grek/chi.straight' : composite-proc [MarkSet.p] : union
define [ChiBase] : union
XStrand true false SB Descender RightSB XH 0.05 0.4 0.11
XStrand true false SB XH RightSB Descender 0.05 0.4 0.11
create-glyph 'grek/chi.curly' : composite-proc [MarkSet.p] : union
XStrand false false SB Descender RightSB XH 0.05 0.4 0.11
XStrand false false SB XH RightSB Descender 0.05 0.4 0.11
create-glyph 'grek/chi.straight' : composite-proc [MarkSet.p] [ChiBase]
create-glyph 'grek/chi.curly' : composite-proc [MarkSet.p] [ChiBase]
select-variant 'X' 'X'
select-variant 'x' 'x'
select-variant 'grek/chi' 0x3C7 (follow -- 'x')
select-variant 'grek/chi' 0x3C7
alias 'grek/Chi' 0x3A7 'X'
alias 'cyrl/Ha' 0x425 'X'

View file

@ -50,15 +50,8 @@ glyph-block Symbol-Letter : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Latin-Upper-N : NShape
glyph-block-import Letter-Latin-X : XStrand
create-glyph 'numero' 0x2116 : glyph-proc
local fine : AdviceStroke 4.5
include : OShape XH [Math.max (fine * 2) (CAP * 0.1)] (Middle + [Math.max (fine / 2) ((RightSB - SB) * 0.1)]) [mix RightSB Width 0.5] fine (SmoothA * fine / Stroke) (SmoothB * fine / Stroke)
include : NShape CAP (SB / 2) Middle 4.5 5.5 0.7
include : HBarBottom (Middle + fine / 2) [mix RightSB Width 0.5] 0 fine
alias 'Ohm' 0x2126 'grek/Omega'
turned 'Mho' 0x2127 'Ohm' Middle (CAP / 2)

View file

@ -135,7 +135,7 @@ define-macro glyph-block-import : syntax-rules
CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape
LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif
CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif
UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs HBar
UpwardLeftSerif AIVSerifs AIHSerifs AICyrISerifs AIMSerifs HBar
HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook
HooktopLeftBar FlatSlashShape hookstart hookend CyrDescender CyrLeftDescender FlipAround
ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo

View file

@ -186,9 +186,25 @@ selector.G = "toothlessRoundedCapped"
[prime.capital-h]
sampler = 'H'
tag = 'cv07'
[prime.capital-h.variants.standard]
rank = 1
description = "Standard H"
selector.H = "standard"
[prime.capital-h.variants.motion-serifed]
rank = 2
description = "Motion-Serifed H"
selector.H = "motionSerifed"
[prime.capital-i]
sampler = 'I'
tag = 'cv07'
tag = 'cv08'
[prime.capital-i.variants.serifed]
rank = 1
@ -209,7 +225,7 @@ selector.I = "shortSerifed"
[prime.capital-j]
sampler = 'J'
tag = 'cv08'
tag = 'cv09'
[prime.capital-j.variants.serifless]
rank = 1
@ -235,33 +251,61 @@ selector.J = 'serifedSymmetric'
[prime.capital-k]
sampler = 'K'
tag = 'cv09'
tag = 'cv10'
[prime.capital-k.variants.straight]
rank = 1
description = '`K` with standard shape'
selector.K = 'straight'
selector.Khooktop = 'straight'
[prime.capital-k.variants.curly]
rank = 2
description = 'Slightly curly `K`, like Iosevka 2.x'
selector.K = 'curly'
selector.Khooktop = 'curly'
[prime.capital-k.variants.symmetric-disconnected]
rank = 3
description = '`K` with symmetric legs disconnected with the vertical bar'
description = '`K` with symmetric legs disconnected to the vertical bar'
selector.K = 'symmetricDisconnected'
selector.Khooktop = 'symmetricDisconnected'
[prime.capital-k.variants.symmetric-connected]
rank = 4
description = '`K` with symmetric legs connected with the vertical bar'
description = '`K` with symmetric legs connected to the vertical bar'
selector.K = 'symmetricConnected'
selector.Khooktop = 'symmetricConnected'
[prime.capital-k.variants.straight-motion-serifed]
rank = 5
description = '`K` with standard shape and motion serifs'
selector.K = 'straightMotionSerifed'
selector.Khooktop = 'straight'
[prime.capital-k.variants.curly-motion-serifed]
rank = 6
description = 'Slightly curly `K`, like Iosevka 2.x, with motion serifs'
selector.K = 'curlyMotionSerifed'
selector.Khooktop = 'curly'
[prime.capital-k.variants.symmetric-disconnected-motion-serifed]
rank = 7
description = '`K` with symmetric legs disconnected to the vertical bar, and motion serifs'
selector.K = 'symmetricDisconnectedMotionSerifed'
selector.Khooktop = 'symmetricDisconnected'
[prime.capital-k.variants.symmetric-connected-motion-serifed]
rank = 8
description = '`K` with symmetric legs connected to the vertical bar, and motion serifs'
selector.K = 'symmetricConnectedMotionSerifed'
selector.Khooktop = 'symmetricConnected'
[prime.capital-l]
sampler = 'L'
tag = 'cv10'
tag = 'cv11'
[prime.capital-l.variants.standard]
rank = 1
@ -278,7 +322,7 @@ selector.L = 'motionSerifed'
[prime.capital-m]
sampler = 'M'
tag = 'cv11'
tag = 'cv12'
[prime.capital-m.variants.hanging]
rank = 1
@ -290,11 +334,37 @@ rank = 2
description = '`M` with middle aligned to baseline'
selector.M = 'flatBottom'
[prime.capital-m.variants.hanging-motion-serifed]
rank = 3
description = '`M` with middle being hanging off baseline and motion serifs'
selector.M = 'hangingMotionSerifed'
[prime.capital-m.variants.flat-bottom-motion-serifed]
rank = 4
description = '`M` with middle aligned to baseline and motion serifs'
selector.M = 'flatBottomMotionSerifed'
[prime.capital-n]
sampler = 'N'
tag = 'cv13'
[prime.capital-n.variants.standard]
rank = 1
description = "Standard N"
selector.N = "standard"
[prime.capital-n.variants.motion-serifed]
rank = 2
description = "Motion-Serifed N"
selector.N = "motionSerifed"
[prime.capital-p]
sampler = 'P'
tag = 'cv12'
tag = 'cv14'
[prime.capital-p.variants.closed]
rank = 1
@ -320,7 +390,7 @@ selector.P = "openMotionSerifed"
[prime.capital-q]
sampler = 'Q'
tag = 'cv13'
tag = 'cv15'
[prime.capital-q.variants.curly-tailed]
rank = 1
@ -361,7 +431,7 @@ selector.Q = 'detachedObliqueTailed'
[prime.capital-r]
sampler = 'R'
tag = 'cv14'
tag = 'cv16'
[prime.capital-r.variants.straight]
rank = 1
@ -451,7 +521,7 @@ selector.Rrotunda = "standing"
[prime.capital-t]
sampler = 'T'
tag = 'cv15'
tag = 'cv17'
[prime.capital-t.variants.standard]
rank = 1
@ -467,7 +537,7 @@ selector.T = "motionSerifed"
[prime.capital-u]
sampler = 'u'
tag = 'cv16'
tag = 'cv18'
[prime.capital-u.variants.toothed]
rank = 1
@ -523,7 +593,7 @@ selector.U = "toothlessRoundedBilateralMotionSerifed"
[prime.capital-v]
sampler = 'V'
tag = 'cv17'
tag = 'cv19'
[prime.capital-v.variants.straight]
rank = 1
@ -553,7 +623,7 @@ selector.Vhooktop = "curly"
[prime.capital-w]
sampler = 'W'
tag = 'cv18'
tag = 'cv20'
[prime.capital-w.variants.straight]
rank = 1
@ -617,9 +687,35 @@ selector.Whooktop = "straightFlatTop"
[prime.capital-x]
sampler = 'X'
tag = 'cv21'
[prime.capital-x.variants.straight]
rank = 1
description = 'Standard, straight `X`'
selector.X = "straight"
[prime.capital-x.variants.curly]
rank = 2
description = 'Slightly curly `X`, like Iosevka 2.x'
selector.X = "curly"
[prime.capital-x.variants.straight-motion-serifed]
rank = 3
description = 'Standard, straight `X` with motion serifs'
selector.X = "straightMotionSerifed"
[prime.capital-x.variants.curly-motion-serifed]
rank = 4
description = 'Slightly curly `X`, like Iosevka 2.x, with motion serifs'
selector.X = "curlyMotionSerifed"
[prime.capital-y]
sampler = 'Y'
tag = 'cv19'
tag = 'cv22'
[prime.capital-y.variants.straight]
rank = 1
@ -631,11 +727,21 @@ rank = 2
description = 'Slightly curly `Y`, like Iosevka 2.x'
selector.Y = "curly"
[prime.capital-y.variants.straight-motion-serifed]
rank = 3
description = 'Standard, straight `Y`, with motion serifs'
selector.Y = "straightMotionSerifed"
[prime.capital-y.variants.curly-motion-serifed]
rank = 4
description = 'Slightly curly `Y`, like Iosevka 2.x, with motion serifs'
selector.Y = "curlyMotionSerifed"
[prime.capital-z]
sampler = 'Z'
tag = 'cv20'
tag = 'cv23'
[prime.capital-z.variants.standard]
rank = 1
@ -695,7 +801,7 @@ selector.Z = 'curlyTopMotionSerifed'
[prime.a]
sampler = 'a'
tag = 'cv21'
tag = 'cv24'
[prime.a.variants.double-storey]
rank = 1
@ -770,7 +876,7 @@ selector.a = 'singleStoreyEarlessRoundedMotionSerifed'
[prime.b]
sampler = 'b'
tag = 'cv22'
tag = 'cv25'
[prime.b.variants.toothed]
rank = 1
@ -812,7 +918,7 @@ selector.bhooktop = "toothlessRounded"
[prime.d]
sampler = 'd'
tag = 'cv23'
tag = 'cv26'
[prime.d.variants.toothed]
rank = 1
@ -866,7 +972,7 @@ selector.dhooktop = "tailed"
[prime.e]
sampler = 'e'
tag = 'cv24'
tag = 'cv27'
[prime.e.variants.flat-crossbar]
rank = 1
@ -882,7 +988,7 @@ selector.e = 'rounded'
[prime.f]
sampler = 'f'
tag = 'cv25'
tag = 'cv28'
[prime.f.variants.serifless]
rank = 1
@ -986,7 +1092,7 @@ selector.f = "flatHookDiagonalTailedCrossbarAtXHeight"
[prime.g]
sampler = 'g'
tag = 'cv26'
tag = 'cv29'
[prime.g.variants.double-storey]
rank = 1
@ -1042,7 +1148,7 @@ selector.g = 'singleStoreyMotionSerifedFlatHook'
[prime.h]
sampler = 'h'
tag = 'cv27'
tag = 'cv30'
[prime.h.variants.straight]
rank = 1
@ -1076,7 +1182,7 @@ selector.heng = 'straightMotionSerifed'
[prime.i]
sampler = 'i'
tag = 'cv28'
tag = 'cv31'
[prime.i.variants.serifed]
rank = 1
@ -1142,7 +1248,7 @@ selector.dotlessi = 'serifedDiagonalTailed'
[prime.j]
sampler = 'j'
tag = 'cv29'
tag = 'cv32'
[prime.j.variants.serifed]
rank = 1
@ -1183,84 +1289,96 @@ selector.dotlessj = 'diagonalTailedSerifed'
[prime.k]
sampler = 'k'
tag = 'cv30'
tag = 'cv33'
[prime.k.variants.straight]
rank = 1
description = '`k` with standard shape'
selector.k = 'straight'
selector.khooktop = 'straight'
selector.kDescender = 'straight'
[prime.k.variants.curly]
rank = 2
description = 'Slightly curly `k`, like Iosevka 2.x'
selector.k = 'curly'
selector.khooktop = 'curly'
selector.kDescender = 'curly'
[prime.k.variants.cursive]
rank = 3
description = '`k` with a cursive loop'
selector.k = 'cursive'
selector.khooktop = 'cursive'
selector.kDescender = 'cursive'
[prime.k.variants.diagonal-tailed-cursive]
rank = 4
description = '`k` with a cursive loop and diagonal tail'
selector.k = 'diagonalTailedSerifedCursive'
selector.khooktop = 'diagonalTailedSerifedCursive'
selector.kDescender = 'cursive'
[prime.k.variants.symmetric-disconnected]
rank = 5
description = '`k` with symmetric legs disconnected with the vertical bar'
description = '`k` with symmetric legs disconnected to the vertical bar'
selector.k = 'symmetricDisconnected'
selector.khooktop = 'symmetricDisconnected'
selector.kDescender = 'symmetricDisconnected'
[prime.k.variants.symmetric-connected]
rank = 6
description = '`k` with symmetric legs connected with the vertical bar'
description = '`k` with symmetric legs connected to the vertical bar'
selector.k = 'symmetricConnected'
selector.khooktop = 'symmetricConnected'
selector.kDescender = 'symmetricConnected'
[prime.k.variants.straight-motion-serifed]
rank = 7
description = '`k` with motion serifs'
selector.k = 'straightMotionSerifed'
selector.khooktop = 'straight'
selector.kDescender = 'straightMotionSerifed'
[prime.k.variants.curly-motion-serifed]
rank = 8
description = 'Slightly curly `k`, like Iosevka 2.x, with motion serifs'
selector.k = 'curlyMotionSerifed'
selector.khooktop = 'curly'
selector.kDescender = 'curlyMotionSerifed'
[prime.k.variants.cursive-motion-serifed]
rank = 9
description = '`k` with a cursive loop and motion serifs'
selector.k = 'cursiveMotionSerifed'
selector.khooktop = 'cursive'
selector.kDescender = 'cursiveMotionSerifed'
[prime.k.variants.diagonal-tailed-cursive-motion-serifed]
rank = 10
description = '`k` with a cursive loop, motion serifs and diagonal tail'
selector.k = 'diagonalTailedSerifedCursiveMotionSerifed'
selector.khooktop = 'diagonalTailedSerifedCursive'
selector.kDescender = 'cursiveMotionSerifed'
[prime.k.variants.symmetric-disconnected-motion-serifed]
rank = 11
description = '`k` with symmetric legs disconnected with the vertical bar and motion serifs'
description = '`k` with symmetric legs disconnected to the vertical bar and motion serifs'
selector.k = 'symmetricDisconnectedMotionSerifed'
selector.khooktop = 'symmetricDisconnected'
selector.kDescender = 'symmetricDisconnectedMotionSerifed'
[prime.k.variants.symmetric-connected-motion-serifed]
rank = 12
description = '`k` with symmetric legs connected with the vertical bar and motion serifs'
description = '`k` with symmetric legs connected to the vertical bar and motion serifs'
selector.k = 'symmetricConnectedMotionSerifed'
selector.khooktop = 'symmetricConnected'
selector.kDescender = 'symmetricConnectedMotionSerifed'
[prime.l]
sampler = 'l'
tag = 'cv31'
tag = 'cv34'
[prime.l.variants.serifed]
rank = 1
@ -1325,7 +1443,7 @@ selector.l = 'serifedDiagonalTailed'
[prime.m]
sampler = 'm'
tag = 'cv32'
tag = 'cv35'
[prime.m.variants.normal]
rank = 1
@ -1451,7 +1569,7 @@ selector."cyrl/te.italic" = "motionSerifedTailed"
[prime.n]
sampler = 'n'
tag = 'cv33'
tag = 'cv36'
[prime.n.variants.straight]
rank = 1
@ -1513,7 +1631,7 @@ selector."cyrl/pe.italic" = "motionSerifedTailed"
[prime.p]
sampler = 'p'
tag = 'cv34'
tag = 'cv37'
[prime.p.variants.eared]
rank = 1
@ -1542,7 +1660,7 @@ selector."cyrl/er" = "motionSerifed"
[prime.q]
sampler = 'q'
tag = 'cv35'
tag = 'cv38'
[prime.q.variants.straight]
rank = 1
@ -1607,7 +1725,7 @@ selector.q = 'motionSerifedDiagonalTailed'
[prime.r]
sampler = 'r'
tag = 'cv36'
tag = 'cv39'
[prime.r.variants.serifless]
rank = 1
@ -1677,7 +1795,7 @@ selector."rflap" = "compact"
[prime.t]
sampler = 't'
tag = 'cv37'
tag = 'cv40'
[prime.t.variants.standard]
rank = 1
@ -1718,7 +1836,7 @@ selector.t = 'diagonalTailed'
[prime.u]
sampler = 'u'
tag = 'cv38'
tag = 'cv41'
[prime.u.variants.toothed]
rank = 1
@ -1796,7 +1914,7 @@ selector."cyrl/tse.italic" = "motionSerifed"
[prime.v]
sampler = 'v'
tag = 'cv39'
tag = 'cv42'
[prime.v.variants.straight]
rank = 1
@ -1826,7 +1944,7 @@ selector.vhooktop = "curly"
[prime.w]
sampler = 'w'
tag = 'cv40'
tag = 'cv43'
[prime.w.variants.straight]
rank = 1
@ -1891,26 +2009,38 @@ selector.whooktop = "straightFlatTop"
[prime.x]
sampler = 'xX'
tag = 'cv41'
sampler = 'x'
tag = 'cv44'
[prime.x.variants.straight]
rank = 1
description = 'Standard, straight `X` and `x`'
selector.X = "straight"
description = 'Standard, straight `X`'
selector.x = "straight"
selector."grek/chi" = "straight"
[prime.x.variants.curly]
rank = 2
description = 'Slightly curly `X` and `x`, like Iosevka 2.x'
selector.X = "curly"
description = 'Slightly curly `X`, like Iosevka 2.x'
selector.x = "curly"
selector."grek/chi" = "curly"
[prime.x.variants.straight-motion-serifed]
rank = 3
description = 'Standard, straight `X` with motion serifs'
selector.x = "straightMotionSerifed"
selector."grek/chi" = "straight"
[prime.x.variants.curly-motion-serifed]
rank = 4
description = 'Slightly curly `X`, like Iosevka 2.x, with motion serifs'
selector.x = "curlyMotionSerifed"
selector."grek/chi" = "curly"
[prime.y]
sampler = 'y'
tag = 'cv42'
tag = 'cv45'
[prime.y.variants.straight]
rank = 1
@ -1986,7 +2116,7 @@ selector.yhooktop = "cursiveFlatHook"
[prime.z]
sampler = 'z'
tag = 'cv43'
tag = 'cv46'
[prime.z.variants.standard]
rank = 1
@ -2047,7 +2177,7 @@ selector.z = 'curlyTopMotionSerifed'
[prime.eszet]
sampler = 'ß'
samplerExplain = 'Eszet'
tag = 'cv44'
tag = 'cv47'
[prime.eszet.variants.traditional]
rank = 1
@ -2068,7 +2198,7 @@ selector.eszet = 'longsslig'
[prime.turn-v]
sampler = 'ΛΔ'
tag = 'cv45'
tag = 'cv48'
[prime.turn-v.variants.straight]
rank = 1
@ -2087,7 +2217,7 @@ selector."grek/Delta" = "curly"
[prime.lambda]
sampler = 'λ'
samplerExplain = 'Greek small Lambda'
tag = 'cv46'
tag = 'cv49'
[prime.lambda.variants.straight]
rank = 1
@ -2104,7 +2234,7 @@ selector."grek/lambda" = "curly"
[prime.cyrl-capital-u]
sampler = 'У'
samplerExplain = 'Cyrillic Capital U'
tag = 'cv47'
tag = 'cv50'
[prime.cyrl-capital-u.variants.straight]
rank = 1
@ -2140,7 +2270,7 @@ selector."cyrl/U" = "cursiveFlatHook"
[prime.zero]
sampler = '0'
tag = 'cv48'
tag = 'cv51'
[prime.zero.variants.slashed]
rank = 1
@ -2171,7 +2301,7 @@ selector.zero = 'longDotted'
[prime.one]
sampler = '1'
tag = 'cv49'
tag = 'cv52'
[prime.one.variants.nobase]
rank = 1
@ -2202,7 +2332,7 @@ selector.one = "baseLongTopSerif"
[prime.two]
sampler = '2'
tag = 'cv50'
tag = 'cv53'
[prime.two.variants.straight-neck]
rank = 1
@ -2218,7 +2348,7 @@ selector.two = "curlyNeck"
[prime.three]
sampler = '3'
tag = 'cv51'
tag = 'cv54'
[prime.three.variants.flattop]
rank = 1
@ -2234,7 +2364,7 @@ selector.three = 'twoarcs'
[prime.four]
sampler = '4'
tag = 'cv52'
tag = 'cv55'
[prime.four.variants.closed]
rank = 1
@ -2270,7 +2400,7 @@ selector.four = 'openNonCrossing'
[prime.six]
sampler = '6'
tag = 'cv53'
tag = 'cv56'
[prime.six.variants.closed-contour]
rank = 1
@ -2291,7 +2421,7 @@ selector.six = "straightBar"
[prime.seven]
sampler = '7'
tag = 'cv54'
tag = 'cv57'
[prime.seven.variants.noserif]
rank = 1
@ -2317,7 +2447,7 @@ selector.seven = "crossbarSerifed"
[prime.eight]
sampler = '8'
tag = 'cv55'
tag = 'cv58'
[prime.eight.variants.crossing]
rank = 1
@ -2333,7 +2463,7 @@ selector.eight = 'twoCircles'
[prime.nine]
sampler = '9'
tag = 'cv56'
tag = 'cv59'
[prime.nine.variants.closed-contour]
rank = 1
@ -2354,7 +2484,7 @@ selector.nine = "straightBar"
[prime.tilde]
sampler = '~'
tag = 'cv57'
tag = 'cv60'
[prime.tilde.variants.high]
rank = 1
@ -2370,7 +2500,7 @@ selector.asciiTilde = 'low'
[prime.asterisk]
sampler = '*'
tag = 'cv58'
tag = 'cv61'
[prime.asterisk.variants.high]
rank = 1
@ -2412,7 +2542,7 @@ selector."asterisk/lowered" = 'turnPentaLow'
[prime.underscore]
sampler = '_'
tag = 'cv59'
tag = 'cv62'
[prime.underscore.variants.high]
rank = 1
@ -2433,7 +2563,7 @@ selector.underscore = 'aboveBaseline'
[prime.paragraph-sign]
sampler = '¶'
tag = 'cv60'
tag = 'cv63'
[prime.paragraph-sign.variants.high]
rank = 1
@ -2451,7 +2581,7 @@ selector.revertParagraph = 'low'
[prime.caret]
sampler = '^'
tag = 'cv61'
tag = 'cv64'
[prime.caret.variants.high]
rank = 1
@ -2467,7 +2597,7 @@ selector.asciiCaret = 'low'
[prime.paren]
sampler = '( )'
tag = 'cv62'
tag = 'cv65'
[prime.paren.variants.normal]
rank = 1
@ -2485,7 +2615,7 @@ selector.parenRight = 'largeContour'
[prime.brace]
sampler = '{ }'
tag = 'cv63'
tag = 'cv66'
[prime.brace.variants.straight]
rank = 1
@ -2503,7 +2633,7 @@ selector.braceRight = 'curly'
[prime.number-sign]
sampler = '#'
tag = 'cv64'
tag = 'cv67'
[prime.number-sign.variants.upright]
rank = 1
@ -2529,7 +2659,7 @@ selector.numberSign = 'slantedOpen'
[prime.ampersand]
sampler = '&'
tag = 'cv65'
tag = 'cv68'
[prime.ampersand.variants.closed]
rank = 1
@ -2570,7 +2700,7 @@ selector.ampersand = 'flatTop'
[prime.at]
sampler = '@'
tag = 'cv66'
tag = 'cv69'
[prime.at.variants.threefold]
rank = 1
@ -2591,7 +2721,7 @@ selector.at = 'short'
[prime.dollar]
sampler = '$'
tag = 'cv67'
tag = 'cv70'
[prime.dollar.variants.open]
rank = 1
@ -2617,7 +2747,7 @@ selector.dollar = "throughcap"
[prime.percent]
sampler = '%'
tag = 'cv68'
tag = 'cv71'
[prime.percent.variants.dots]
rank = 1
@ -2638,7 +2768,7 @@ selector.percent = "ringsConnected"
[prime.bar]
sampler = '|'
tag = 'cv69'
tag = 'cv72'
slopeDependent = true
[prime.bar.variants.natural-slope]
@ -2655,7 +2785,7 @@ selector."bar.italic" = "forceUpright"
[prime.lig-ltgteq]
sampler = '<= >='
tag = 'cv70'
tag = 'cv73'
[prime.lig-ltgteq.variants.flat]
rank = 1
@ -2673,7 +2803,7 @@ selector."eq.at-gteq.lig2" = "slanted"
[prime.ascii-single-quote]
sampler = "'"
tag = 'cv71'
tag = 'cv74'
[prime.ascii-single-quote.variants.straight]
rank = 1
@ -2689,7 +2819,7 @@ selector.asciiSingleQuote = 'raisedComma'
[prime.ascii-grave]
sampler = '`'
tag = 'cv72'
tag = 'cv75'
[prime.ascii-grave.variants.straight]
rank = 1
@ -2725,11 +2855,13 @@ capital-d = 'standard'
capital-e = 'standard'
capital-f = 'standard'
capital-g = 'toothed-hooked'
capital-h = 'standard'
capital-i = 'serifed'
capital-j = 'serifed'
capital-k = 'straight'
capital-l = 'standard'
capital-m = 'hanging'
capital-n = 'standard'
capital-p = 'closed'
capital-q = 'curly-tailed'
capital-r = 'straight'
@ -2737,6 +2869,7 @@ capital-t = 'standard'
capital-u = 'toothless-rounded'
capital-v = 'straight'
capital-w = 'straight'
capital-x = 'straight'
capital-y = 'straight'
capital-z = 'standard'
# Lowers
@ -3040,6 +3173,7 @@ v = 'curly'
turn-v = 'curly'
capital-w = 'curly'
w = 'curly'
capital-x = 'curly'
x = 'curly'
capital-a = 'curly'
capital-y = 'curly'
@ -3291,6 +3425,7 @@ v = 'curly'
turn-v = 'curly'
capital-w = 'curly'
w = 'curly'
capital-x = 'curly'
x = 'curly'
z = 'curly'
capital-y = 'curly'