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** Reorder `cv##` features and variant assignments for better organization.
* **Breaking** Spilt out variant selector for `A`, `V`, `W`, `Z` (#806). * **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 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 symmetric-legged variants of `K` and `k` (#807).
* Add horizontal-tailed and detach-tailed variants of `Q` (#808). * Add horizontal-tailed and detach-tailed variants of `Q` (#808).
* Add hookless and capped variants of `G` (#809). * 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 CenterBottomSerifAsymmetric (left + Stroke * sideSerifK * HVContrast) 0 Jut jutIn
include : tagged 'serifRB' include : tagged 'serifRB'
CenterBottomSerifAsymmetric (right - Stroke * sideSerifK * HVContrast) 0 jutIn Jut 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 define [AICyrISerifs top _left _right] : glyph-proc
local left : fallback _left SB local left : fallback _left SB
local right : fallback _right RightSB 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 (-k)] [mix y1 y2 (-k)]
corner [mix x1 x2 (1+k)] [mix y1 y2 (1+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]) curl (xDTEnd + 0.125 * [DiagonalTailInnerRadius]) (0.9 * swDiagTail + 0.5 *[DiagonalTailInnerRadius])
DiagonalTailF 1 [DivFrame 1] xDTEnd 0 (Hook - swDiagTail * 0.375) swDiagTail DiagonalTailF 1 [DivFrame 1] xDTEnd 0 (Hook - swDiagTail * 0.375) swDiagTail
else : intersection 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 dispiro
flat dim.arcTerminalX dim.arcTerminalY [widths.lhs] flat dim.arcTerminalX dim.arcTerminalY [widths.lhs]
curl dim.kshRight 0 [widths.rhs] 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) VerticalHook (SB + [KBalance slab straightBar] + HalfStroke * HVContrast) (CAP - Hook - HalfStroke) HookX (-Hook)
define UpperKConfig : object define UpperKConfig : object
straight { KNormalLegs KStraightLegShapeImpl } straight { KNormalLegs KStraightLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] }
curly { KCurlyLegs KCurlyLegShapeImpl } curly { KCurlyLegs KCurlyLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] }
symmetricDisconnected { KSymmetricDisconnectedLegs [KSymmetricLegsImpl false] } symmetricDisconnected { KSymmetricDisconnectedLegs [KSymmetricLegsImpl false] [if SLAB 1 0] [if SLAB 1 0] }
symmetricConnected { KSymmetricConnectedLegs [KSymmetricLegsImpl true] } 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 local straightBar : Legs !== KCurlyLegs
create-glyph "K.\(suffix)" : glyph-proc create-glyph "K.\(suffix)" : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 CAP include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 CAP
include : Legs CAP SLAB SLAB include : Legs CAP slabTop slabBot
if SLAB : begin if slabTop : include : UpperKLTSerif slabTop CAP straightBar
include : CenterTopSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) CAP Jut if slabBot : include : UpperKLBSerif slabTop CAP straightBar
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut create-derived "KDescender.\(suffix)" : KCyrlNormalDescender CAP straightBar slabTop slabBot
create-derived "KDescender.\(suffix)" : KCyrlNormalDescender CAP straightBar SLAB SLAB
create-glyph "grek/kappa.\(suffix)" : glyph-proc create-glyph "grek/kappa.\(suffix)" : glyph-proc
include : MarkSet.e include : MarkSet.e
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 XH include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 XH
include : Legs XH SLAB false include : Legs XH slabTop false
if SLAB : include : LeftwardTopSerif (SB + [KBalance SLAB straightBar]) XH SideJut if slabTop : include : LeftwardTopSerif (SB + [KBalance slabTop straightBar]) XH SideJut
create-glyph "cyrl/ka.\(suffix)" : glyph-proc create-glyph "cyrl/ka.\(suffix)" : glyph-proc
include : MarkSet.e include : MarkSet.e
include : VBarLeft (SB + [KBalance SLAB straightBar]) 0 XH include : VBarLeft (SB + [KBalance slabTop straightBar]) 0 XH
include : Legs XH SLAB SLAB include : Legs XH slabTop slabBot
if SLAB : begin if slabTop : include : UpperKLTSerif slabTop XH straightBar
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut if slabBot : include : UpperKLBSerif slabTop XH straightBar
include : CenterTopSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) XH Jut create-derived "cyrl/kaDescender.\(suffix)" : KCyrlNormalDescender XH straightBar slabTop slabBot
create-derived "cyrl/kaDescender.\(suffix)" : KCyrlNormalDescender XH straightBar SLAB SLAB
create-glyph "Khooktop.\(suffix)" : glyph-proc create-glyph "Khooktop.\(suffix)" : glyph-proc
include : MarkSet.e include : MarkSet.e
include : Legs CAP SLAB SLAB include : Legs CAP slabTop slabBot
include : KHookTopBar SLAB straightBar include : KHookTopBar slabTop straightBar
if SLAB : begin if slabBot : include : UpperKLBSerif slabTop CAP straightBar
include : CenterBottomSerif (SB + [KBalance SLAB straightBar] + HalfStroke * HVContrast) 0 Jut
define [BashkirKaShape top] : glyph-proc define [BashkirKaShape top] : glyph-proc
local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2] local left : if slabTop ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
local leftNB : left - [KBalance SLAB straightBar] local leftNB : left - [KBalance slabTop straightBar]
local barLeft : mix 0 SB [if SLAB 0.25 0.375] local barLeft : mix 0 SB [if slabTop 0.25 0.375]
local sw : AdviceStroke 3 local sw : AdviceStroke 3
include : HBarTop barLeft (Stroke * 0.1 + left) top include : HBarTop barLeft (Stroke * 0.1 + left) top
include : VBarLeft left 0 top sw include : VBarLeft left 0 top sw
include : BashkirKaLegs leftNB RightSB Stroke top SLAB SLAB include : BashkirKaLegs leftNB RightSB Stroke top slabTop slabBot
if SLAB : begin if slabBot : include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut
include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut if slabTop : include : DownwardLeftSerif barLeft top VJut (MVertStroke / HVContrast)
include : DownwardLeftSerif barLeft top VJut (MVertStroke / HVContrast)
create-glyph "cyrl/BashkirUpperKa.\(suffix)" : glyph-proc create-glyph "cyrl/BashkirUpperKa.\(suffix)" : glyph-proc
include : MarkSet.capital include : MarkSet.capital
@ -330,8 +340,8 @@ glyph-block Letter-Latin-K : begin
alias 'latinkappa' 0x138 'cyrl/ka' alias 'latinkappa' 0x138 'cyrl/ka'
select-variant 'cyrl/kaDescender' 0x49B (follow -- 'K') select-variant 'cyrl/kaDescender' 0x49B (follow -- 'K')
select-variant 'Khooktop' 0x198 (follow -- 'K') select-variant 'Khooktop' 0x198
select-variant 'khooktop' 0x199 (follow -- 'k') select-variant 'khooktop' 0x199
turned 'turnK' 0xA7B0 'K' Middle (CAP / 2) turned 'turnK' 0xA7B0 'K' Middle (CAP / 2)
turned 'turnk' 0x29E '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 Common-Derivatives
glyph-block-import Letter-Blackboard : BBS BBD 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 'strokeL' : VBarLeft SB 0 top
include : tagged 'strokeR' : VBarRight RightSB 0 top include : tagged 'strokeR' : VBarRight RightSB 0 top
include : HBar (SB - O) (RightSB + O) (top * HBarPos) 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 : 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 create-glyph 'halfH' 0x2C75 : glyph-proc
include : MarkSet.capital 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 'strokeR'
eject-contour 'serifRT' eject-contour 'serifRT'
eject-contour 'serifRB' eject-contour 'serifRB'
@ -31,6 +59,11 @@ glyph-block Letter-Latin-Upper-H : begin
alias 'grek/Eta' 0x397 'H' alias 'grek/Eta' 0x397 'H'
alias 'cyrl/En' 0x41D '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 create-glyph 'mathbb/H' 0x210D : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : VBarLeft SB 0 CAP BBS 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 SB (SB + BBD) 0 BBS
include : HBarBottom (RightSB - BBD) RightSB 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 define [EnGheShape top] : glyph-proc
local right : if SLAB ([mix RightSB SB 0.35] + MVertStroke / 2 * HVContrast) [mix RightSB SB 0.2] 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 CommonShapes
glyph-block-import Common-Derivatives 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 swSideBot : if fHanging Stroke : AdviceStroke 3.5 df.div
local swSideTop : AdviceStroke [if fHanging 5 4] df.div local swSideTop : AdviceStroke [if fHanging 5 4] df.div
local halfSwMiddle : swSideTop / 2 local halfSwMiddle : swSideTop / 2
@ -32,23 +38,28 @@ glyph-block Letter-Latin-Upper-M : begin
include : dispiro include : dispiro
flat (df.rightSB - halfSwMiddle) top [widths.heading 0 swSideTop Downward] flat (df.rightSB - halfSwMiddle) top [widths.heading 0 swSideTop Downward]
curl df.middle middleY [widths.heading (swSideTop / 2) (swSideTop / 2) Downward] curl df.middle middleY [widths.heading (swSideTop / 2) (swSideTop / 2) Downward]
include : AIMSerifs top df.leftSB df.rightSB
create-glyph : glyph-proc include : match slabType
local df : DivFrame para.diversityM 3 [Just SLAB-AUTO] : AIMSerifs top df.leftSB df.rightSB
include : df.markSet.capital [Just SLAB-MOTION] : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut
set-width df.width
create-derived 'M.hanging' : MShape CAP df true define MConfig : object
create-derived 'M.flatBottom' : MShape CAP df false hanging { FORM-HANGING SLAB-AUTO }
flatBottom { FORM-FLAT SLAB-AUTO }
hangingMotionSerifed { FORM-HANGING SLAB-MOTION }
flatBottomMotionSerifed { FORM-FLAT SLAB-MOTION }
create-glyph : glyph-proc foreach { suffix { form slab } } [Object.entries MConfig] : do
local df : DivFrame para.diversityM 3 create-glyph "M.\(suffix)" : glyph-proc
include : df.markSet.e local df : DivFrame para.diversityM 3
set-width df.width set-width df.width
include : df.markSet.capital
create-derived 'smcpM.hanging' : MShape XH df true include : MShape CAP df form slab
create-derived 'smcpM.flatBottom' : MShape XH df false 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 'M' 'M'
select-variant 'smcpM' 0x1D0D (follow -- '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 CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Marks : markHalfStroke glyph-block-import Marks : markHalfStroke
glyph-block-export NShape
define [NShape top left right crowd diagcrowd xn] : glyph-proc define SLAB-AUTO 1
local topstroke : AdviceStroke [fallback diagcrowd 4] define SLAB-MOTION 2
local stroke : AdviceStroke [fallback crowd 1]
local halftopstroke : topstroke / 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 include : union
AINSerifs top left right stroke xn
dispiro dispiro
flat left 0 [widths.heading 0 stroke Upward] flat left 0 [widths.heading 0 stroke Upward]
curl left (top * 0.4) [heading 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 dispiro
flat right top [widths.heading 0 stroke Downward] flat right top [widths.heading 0 stroke Downward]
curl right (top * 0.6) [heading 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 dispiro
flat (left + halftopstroke) top [widths.heading topstroke 0 Downward] flat (left + swDiag / 2) top [widths.heading swDiag 0 Downward]
curl (right - halftopstroke) 0 [widths.heading 0 topstroke Downward] curl (right - swDiag / 2) 0 [widths.heading 0 swDiag Downward]
create-glyph 'N' 'N' : glyph-proc include : match slabType
include : MarkSet.capital [Just SLAB-AUTO] : if SLAB [StdNSerifs top left right stroke xn] [glyph-proc]
include : NShape CAP SB RightSB [Just SLAB-MOTION] : tagged 'serifLT' : LeftwardTopSerif left top SideJut
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
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' alias 'grek/Nu' 0x39D 'N'
select-variant 'smcpN' 0x274 (follow -- 'N')
create-glyph 'smcpN' 0x274 : glyph-proc select-variant 'Nltail' 0x19D (follow -- 'N')
include : MarkSet.e
include : NShape XH SB RightSB 3 3.5
create-glyph 'currency/nairaSign' 0x20A6 : glyph-proc 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 sw : AdviceStroke2 2 4 CAP
define gap : Math.max (CAP / 6) sw 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 : 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 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 glyph-block-import Letter-Blackboard : BBS BBD
create-glyph 'mathbb/N' 0x2115 : glyph-proc create-glyph 'mathbb/N' 0x2115 : glyph-proc
include : MarkSet.capital include : MarkSet.capital
@ -69,4 +91,10 @@ glyph-block Letter-Latin-Upper-N : begin
dispiro dispiro
widths.center BBS widths.center BBS
corner (SB + BBS * HVContrast / 2) (CAP - (CAP / 5)) 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 : PShape top (mul -- 1) (bp -- bp) (slab -- [if SLAB PShape.SlabSymmetric])
include : VBarLeft SB (top - 1) CAP include : VBarLeft SB (top - 1) CAP
local legTop : RLegTop top Stroke bp
local right (RightSB - O - [if SLAB (Jut / 8) 0]) local right (RightSB - O - [if SLAB (Jut / 8) 0])
create-derived 'Yr.straight' 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' 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' 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') 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 Common-Derivatives
glyph-block-import Letter-Latin-X : HalfXStrand 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 local cross : mix [fallback bot 0] top 0.4
include : WithAIHSerifsMask CAP 0 SB RightSB 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 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) include : VBar Middle [fallback bot 0] (cross + HalfStroke)
set-base-anchor 'overlay' Middle cross set-base-anchor 'overlay' Middle cross
if SLAB : begin
include : AIVSerifs top match slabType
include : CenterBottomSerif Middle [fallback bot 0] MidJutSide [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 define [YOverlayShape] : glyph-proc
include : HOverlayBar SB RightSB (CAP * 0.45) include : HOverlayBar SB RightSB (CAP * 0.45)
include : HOverlayBar SB RightSB (CAP * 0.25) include : HOverlayBar SB RightSB (CAP * 0.25)
create-glyph : glyph-proc define [YHookTopShape bodyType slabType] : glyph-proc
include : MarkSet.capital include : YShape bodyType slabType CAP
create-derived 'Y.straight' : YShape true CAP
create-derived 'Y.curly' : YShape false CAP
define [YHookTopShape straightBar] : glyph-proc
include : YShape straightBar CAP
eject-contour 'strokeRT' eject-contour 'strokeRT'
eject-contour 'serifRT' eject-contour 'serifRT'
@ -45,20 +49,29 @@ glyph-block Letter-Latin-Upper-Y : begin
quadcontrols 0.55 0.7 32 unimportant quadcontrols 0.55 0.7 32 unimportant
g4 (Middle + Stroke / 2 * HVContrast) cross 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 define YConfig : object
include : MarkSet.p straight { BODY-STRAIGHT SLAB-AUTO }
create-derived 'cyrl/ue.straight' : YShape true XH Descender curly { BODY-CURLY SLAB-AUTO }
create-derived 'cyrl/ue.curly' : YShape false XH Descender straightMotionSerifed { BODY-STRAIGHT SLAB-MOTION }
curlyMotionSerifed { BODY-CURLY SLAB-MOTION }
create-glyph : glyph-proc foreach { suffix { bodyType slabType } } [Object.entries YConfig] : do
include : MarkSet.e create-glyph "Y.\(suffix)" : glyph-proc
create-derived 'smcpY.straight' : YShape true XH include : MarkSet.capital
create-derived 'smcpY.curly' : YShape true XH 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 'Y' 'Y'
select-variant 'Yhooktop' 0x1B3 (follow -- 'Y') select-variant 'Yhooktop' 0x1B3 (follow -- 'Y')

View file

@ -150,14 +150,14 @@ glyph-block Letter-Latin-W : begin
include : match slabType include : match slabType
[Just SERIFS-AUTO] : AIVSerifs top df.leftSB df.rightSB [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 [Just SERIFS-DOUBLE-V] : glyph-proc
if SLAB : include : tagged 'serifLT' : LeftwardTopSerif df.leftSB top SideJut if SLAB : include : tagged 'serifLT' : LeftwardTopSerif (df.leftSB + O * 2) top SideJut
if SLAB : include : tagged 'serifRT' : RightwardTopSerif df.rightSB top SideJut if SLAB : include : tagged 'serifRT' : RightwardTopSerif (df.rightSB - O * 2) top SideJut
[Just SERIFS-ASYMMETRIC] : glyph-proc [Just SERIFS-ASYMMETRIC] : glyph-proc
include : AIVSerifs top df.leftSB df.rightSB include : AIVSerifs top df.leftSB df.rightSB
eject-contour 'serifLT' 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 define [WonOverlay df] : glyph-proc
include : HOverlayBar [mix SB 0 0.7] [mix df.rightSB df.width 0.7] (CAP * 0.6) 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 _leftx lefty middlex middley turn pStraight tension
include : HalfXStrand stb slab _rightx righty 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 create-glyph 'X.straight' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : union include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase
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 : AIHSerifs CAP include : AIHSerifs CAP
create-glyph 'X.curly' : glyph-proc create-glyph 'X.curly' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : union include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase
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 : AIHSerifs CAP 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 create-glyph 'x.straight' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : union include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase
XStrand true SLAB SB 0 RightSB XH LowerXTurn 0.4 LowerXTension
XStrand true SLAB SB XH RightSB 0 LowerXTurn 0.4 LowerXTension
include : AIHSerifs XH include : AIHSerifs XH
create-glyph 'x.curly' : glyph-proc create-glyph 'x.curly' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : union include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase
XStrand false SLAB SB 0 RightSB XH LowerXTurn 0.4 LowerXTension
XStrand false SLAB SB XH RightSB 0 LowerXTurn 0.4 LowerXTension
include : AIHSerifs XH 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 Descender RightSB XH 0.05 0.4 0.11
XStrand true false SB XH RightSB Descender 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 create-glyph 'grek/chi.straight' : composite-proc [MarkSet.p] [ChiBase]
XStrand false false SB XH RightSB Descender 0.05 0.4 0.11 create-glyph 'grek/chi.curly' : composite-proc [MarkSet.p] [ChiBase]
select-variant 'X' 'X' select-variant 'X' 'X'
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 'grek/Chi' 0x3A7 'X'
alias 'cyrl/Ha' 0x425 'X' alias 'cyrl/Ha' 0x425 'X'

View file

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