From 721f39a53e828253fa0f8220c70b078b10fd7fe2 Mon Sep 17 00:00:00 2001 From: be5invis Date: Sat, 23 Jan 2021 23:12:51 -0800 Subject: [PATCH] Add motion-serifed variants for H, K, M, N, X, x, Y (#818). --- changes/5.0.0-beta.1.md | 2 +- font-src/glyphs/common/shapes.ptl | 12 +- font-src/glyphs/letter/latin/k.ptl | 78 +++--- font-src/glyphs/letter/latin/upper-h.ptl | 58 +++-- font-src/glyphs/letter/latin/upper-m.ptl | 41 ++-- font-src/glyphs/letter/latin/upper-n.ptl | 78 ++++-- font-src/glyphs/letter/latin/upper-r.ptl | 7 +- font-src/glyphs/letter/latin/upper-y.ptl | 63 +++-- font-src/glyphs/letter/latin/w.ptl | 8 +- font-src/glyphs/letter/latin/x.ptl | 59 +++-- font-src/glyphs/symbol/letter.ptl | 7 - font-src/meta/macros.ptl | 2 +- params/variants.toml | 289 +++++++++++++++++------ 13 files changed, 461 insertions(+), 243 deletions(-) diff --git a/changes/5.0.0-beta.1.md b/changes/5.0.0-beta.1.md index 733c21cf6..e2c2f9809 100644 --- a/changes/5.0.0-beta.1.md +++ b/changes/5.0.0-beta.1.md @@ -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). diff --git a/font-src/glyphs/common/shapes.ptl b/font-src/glyphs/common/shapes.ptl index d1fd648f0..3174a6201 100644 --- a/font-src/glyphs/common/shapes.ptl +++ b/font-src/glyphs/common/shapes.ptl @@ -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 diff --git a/font-src/glyphs/letter/latin/k.ptl b/font-src/glyphs/letter/latin/k.ptl index a30034f53..6f75f639f 100644 --- a/font-src/glyphs/letter/latin/k.ptl +++ b/font-src/glyphs/letter/latin/k.ptl @@ -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) diff --git a/font-src/glyphs/letter/latin/upper-h.ptl b/font-src/glyphs/letter/latin/upper-h.ptl index 59e6337c2..b6007a006 100644 --- a/font-src/glyphs/letter/latin/upper-h.ptl +++ b/font-src/glyphs/letter/latin/upper-h.ptl @@ -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] diff --git a/font-src/glyphs/letter/latin/upper-m.ptl b/font-src/glyphs/letter/latin/upper-m.ptl index cda714052..f08ba6729 100644 --- a/font-src/glyphs/letter/latin/upper-m.ptl +++ b/font-src/glyphs/letter/latin/upper-m.ptl @@ -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') diff --git a/font-src/glyphs/letter/latin/upper-n.ptl b/font-src/glyphs/letter/latin/upper-n.ptl index 7982fc44c..8073d3cb0 100644 --- a/font-src/glyphs/letter/latin/upper-n.ptl +++ b/font-src/glyphs/letter/latin/upper-n.ptl @@ -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 \ No newline at end of file + 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 diff --git a/font-src/glyphs/letter/latin/upper-r.ptl b/font-src/glyphs/letter/latin/upper-r.ptl index ca10fa8b7..cb69f6d74 100644 --- a/font-src/glyphs/letter/latin/upper-r.ptl +++ b/font-src/glyphs/letter/latin/upper-r.ptl @@ -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') diff --git a/font-src/glyphs/letter/latin/upper-y.ptl b/font-src/glyphs/letter/latin/upper-y.ptl index 443a443c5..848d4fc50 100644 --- a/font-src/glyphs/letter/latin/upper-y.ptl +++ b/font-src/glyphs/letter/latin/upper-y.ptl @@ -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') diff --git a/font-src/glyphs/letter/latin/w.ptl b/font-src/glyphs/letter/latin/w.ptl index 3ffa2e00d..ac75cf750 100644 --- a/font-src/glyphs/letter/latin/w.ptl +++ b/font-src/glyphs/letter/latin/w.ptl @@ -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) diff --git a/font-src/glyphs/letter/latin/x.ptl b/font-src/glyphs/letter/latin/x.ptl index 103ea6fb8..eed9c1d20 100644 --- a/font-src/glyphs/letter/latin/x.ptl +++ b/font-src/glyphs/letter/latin/x.ptl @@ -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' diff --git a/font-src/glyphs/symbol/letter.ptl b/font-src/glyphs/symbol/letter.ptl index cab963d88..8ea7c2c37 100644 --- a/font-src/glyphs/symbol/letter.ptl +++ b/font-src/glyphs/symbol/letter.ptl @@ -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) diff --git a/font-src/meta/macros.ptl b/font-src/meta/macros.ptl index 54307a87c..47d2f3e09 100644 --- a/font-src/meta/macros.ptl +++ b/font-src/meta/macros.ptl @@ -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 diff --git a/params/variants.toml b/params/variants.toml index 232c1b756..0e9a726c9 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -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'