Make scriptCut variants for a/b/g/q selectable via CV. (#2634)

* Make `scriptCut` variants for `a`/`b`/`g`/`q` selectable via CV.

* Bump.
This commit is contained in:
John McWilliams 2025-01-04 20:50:17 -05:00 committed by GitHub
parent d12b856b37
commit 52c5e55053
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 217 additions and 99 deletions

View file

@ -1,3 +0,0 @@
* Add `curved` variant for `¶` (#2045).
* Add characters:
- CURVED STEM PARAGRAPH SIGN ORNAMENT (`U+2761`).

5
changes/32.4.0.md Normal file
View file

@ -0,0 +1,5 @@
* Add `curved` variant for `¶` (#2045).
* Add `top-cut` variants for `a`/`g`/`q`.
* Add `bottom-cut` variants for `b`.
* Add characters:
- CURVED STEM PARAGRAPH SIGN ORNAMENT (`U+2761`).

View file

@ -389,6 +389,21 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
include : eps.Shape include : eps.Shape
include : bar df top stroke include : bar df top stroke
define [TopCutBody df top bar hook ada adb] : glyph-proc
local eps : SmallEpsilon CLOSED-STEM CLOSED-STEM top 0
blend -- VolBlend
hook -- hook
overflow -- 0
ada2 -- ada
adb2 -- adb
define [object stroke] : eps.Dim
include : eps.Shape
include : bar df (top - stroke / 2) stroke
include : spiro-outline
corner df.rightSB top
corner df.rightSB (top - stroke / 2)
corner (df.rightSB - [HSwToV stroke]) (top - stroke / 2)
define [EarlessCornerBody df top bar hook ada adb] : glyph-proc define [EarlessCornerBody df top bar hook ada adb] : glyph-proc
local eps : SmallEpsilon SLAB-INWARD CLOSED-STEM top 0 local eps : SmallEpsilon SLAB-INWARD CLOSED-STEM top 0
blend -- VolBlend blend -- VolBlend
@ -415,16 +430,19 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
singleStoreySerifless { FullBarBody SingleStorey.SeriflessBar } singleStoreySerifless { FullBarBody SingleStorey.SeriflessBar }
singleStoreyEarlessCornerSerifless { EarlessCornerBody SingleStorey.SeriflessBar } singleStoreyEarlessCornerSerifless { EarlessCornerBody SingleStorey.SeriflessBar }
singleStoreyEarlessRoundedSerifless { EarlessRoundedBody SingleStorey.SeriflessBar } singleStoreyEarlessRoundedSerifless { EarlessRoundedBody SingleStorey.SeriflessBar }
singleStoreyTopCutSerifless { TopCutBody SingleStorey.SeriflessBar }
singleStoreySerifed { FullBarBody SingleStorey.BottomSerifedBar } singleStoreySerifed { FullBarBody SingleStorey.BottomSerifedBar }
singleStoreyEarlessCornerSerifed { EarlessCornerBody SingleStorey.BottomSerifedBar } singleStoreyEarlessCornerSerifed { EarlessCornerBody SingleStorey.BottomSerifedBar }
singleStoreyEarlessRoundedSerifed { EarlessRoundedBody SingleStorey.BottomSerifedBar } singleStoreyEarlessRoundedSerifed { EarlessRoundedBody SingleStorey.BottomSerifedBar }
singleStoreyTopCutSerifed { TopCutBody SingleStorey.BottomSerifedBar }
singleStoreyDoubleSerifed { FullBarBody SingleStorey.DoubleSerifedBar } singleStoreyDoubleSerifed { FullBarBody SingleStorey.DoubleSerifedBar }
singleStoreyTailed { FullBarBody SingleStorey.TailedBar } singleStoreyTailed { FullBarBody SingleStorey.TailedBar }
singleStoreyEarlessCornerTailed { EarlessCornerBody SingleStorey.TailedBar } singleStoreyEarlessCornerTailed { EarlessCornerBody SingleStorey.TailedBar }
singleStoreyEarlessRoundedTailed { EarlessRoundedBody SingleStorey.TailedBar } singleStoreyEarlessRoundedTailed { EarlessRoundedBody SingleStorey.TailedBar }
singleStoreyTopCutTailed { TopCutBody SingleStorey.TailedBar }
singleStoreyTailedSerifed { FullBarBody SingleStorey.TailedSerifedBar } singleStoreyTailedSerifed { FullBarBody SingleStorey.TailedSerifedBar }
@ -525,21 +543,26 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
select-variant 'UeVolapuk' 0xA79E (follow -- 'u') select-variant 'UeVolapuk' 0xA79E (follow -- 'u')
select-variant 'ueVolapuk' 0xA79F (follow -- 'u') select-variant 'ueVolapuk' 0xA79F (follow -- 'u')
alias 'grek/epsilon' 0x3B5 'latn/epsilon.serifless'
select-variant 'latn/Epsilon' 0x190 select-variant 'latn/Epsilon' 0x190
select-variant 'latn/epsilon' 0x25B select-variant 'latn/epsilon' 0x25B
CreateTurnedLetter 'turnepsilon' 0x1D08 'latn/epsilon' HalfAdvance (XH / 2) CreateTurnedLetter 'turnepsilon' 0x1D08 'latn/epsilon' HalfAdvance (XH / 2)
alias 'grek/epsilon' 0x3B5 'latn/epsilon.serifless'
alias 'cyrl/ZeRev' 0x510 'latn/Epsilon' alias 'cyrl/ZeRev' 0x510 'latn/Epsilon'
alias 'cyrl/zeRev' 0x511 'latn/epsilon' alias 'cyrl/zeRev' 0x511 'latn/epsilon'
select-variant 'cyrl/Ze' 0x417 select-variant 'cyrl/Ze' 0x417
select-variant 'cyrl/ze' 0x437 select-variant 'cyrl/ze' 0x437
select-variant 'cyrl/KsiBase' (follow -- 'cyrl/ZeTopSerifOnly') select-variant 'cyrl/ze.BGR' (follow -- 'cyrl/ze')
select-variant 'cyrl/ksiBase' (follow -- 'cyrl/zeTopSerifOnly')
select-variant 'cyrl/ze.BGR' (follow -- 'cyrl/ze')
alias 'latn/EpsilonRev' 0xA7AB 'cyrl/Ze' alias 'latn/EpsilonRev' 0xA7AB 'cyrl/Ze'
alias 'latn/epsilonRev' 0x25C 'cyrl/ze' alias 'latn/epsilonRev' 0x25C 'cyrl/ze'
select-variant 'cyrl/KsiBase' (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'cyrl/ksiBase' (follow -- 'cyrl/zeTopSerifOnly')
select-variant 'cyrl/ZjeKomi' 0x504 (follow -- 'cyrl/ZeTopSerifOnly') select-variant 'cyrl/ZjeKomi' 0x504 (follow -- 'cyrl/ZeTopSerifOnly')
select-variant 'cyrl/zjeKomi' 0x505 (follow -- 'cyrl/zeTopSerifOnly') select-variant 'cyrl/zjeKomi' 0x505 (follow -- 'cyrl/zeTopSerifOnly')
select-variant 'cyrl/DzjeKomi' 0x506 (follow -- 'cyrl/ZeTopSerifOnly') select-variant 'cyrl/DzjeKomi' 0x506 (follow -- 'cyrl/ZeTopSerifOnly')
@ -563,13 +586,12 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
include : ExtendBelowBaseAnchors (-AccentHeight) include : ExtendBelowBaseAnchors (-AccentHeight)
select-variant 'latn/epsilon/descBase' (shapeFrom -- 'latn/epsilon') select-variant 'latn/epsilon/descBase' (shapeFrom -- 'latn/epsilon')
select-variant 'latn/epsilonRev/descBase' (shapeFrom -- 'cyrl/ze') (follow -- 'cyrl/ze/descBase')
derive-composites 'latn/epsilonRetroflexHook' 0x1D93 'latn/epsilon/descBase' derive-composites 'latn/epsilonRetroflexHook' 0x1D93 'latn/epsilon/descBase'
RetroflexHook.r RightSB 0 (refSw -- [AdviceStroke2 2 3 XH]) RetroflexHook.r RightSB 0 (refSw -- [AdviceStroke2 2 3 XH])
select-variant 'latn/epsilonRev/descBase' (shapeFrom -- 'cyrl/ze') (follow -- 'cyrl/ze/descBase')
derive-composites 'latn/epsilonRevRetroflexHook' 0x1D94 'latn/epsilonRev/descBase' derive-composites 'latn/epsilonRevRetroflexHook' 0x1D94 'latn/epsilonRev/descBase'
RetroflexHook.l SB 0 (refSw -- [AdviceStroke2 2 3 XH]) RetroflexHook.l SB 0 (refSw -- [AdviceStroke2 2 3 XH])
ExtendBelowBaseAnchors Descender
create-glyph 'voicedLaryngealSpirant' 0x1D24 : glyph-proc create-glyph 'voicedLaryngealSpirant' 0x1D24 : glyph-proc
include : MarkSet.b include : MarkSet.b

View file

@ -81,13 +81,13 @@ glyph-block Letter-Latin-Lower-A : begin
export : define [Serifless df hookStyle sw] : union export : define [Serifless df hookStyle sw] : union
HookAndBar df hookStyle 0 sw HookAndBar df hookStyle 0 sw
Arc df 0 nothing nothing sw Arc df 0 nothing sw
export : define [Serifed df hookStyle sw] : union export : define [Serifed df hookStyle sw] : union
Serifless df hookStyle sw Serifless df hookStyle sw
begin [SerifFrame.fromDf df XH 0].rb.outer begin [SerifFrame.fromDf df XH 0].rb.outer
export : define [Tailed df hookStyle sw] : union export : define [Tailed df hookStyle sw] : union
HookAndBar df hookStyle (XH - [ADoubleStoreySmoothB df] + O) sw HookAndBar df hookStyle (XH - [ADoubleStoreySmoothB df] + O) sw
Arc df 0 nothing nothing sw Arc df 0 nothing sw
RightwardTailedBar df.rightSB 0 (XH - [ADoubleStoreySmoothB df]) (sw -- [fallback sw : ADoubleStoreyStroke df]) RightwardTailedBar df.rightSB 0 (XH - [ADoubleStoreySmoothB df]) (sw -- [fallback sw : ADoubleStoreyStroke df])
export : define [ToothlessCorner df hookStyle sw] : union export : define [ToothlessCorner df hookStyle sw] : union
HookAndBar df hookStyle DToothlessRise sw HookAndBar df hookStyle DToothlessRise sw
@ -99,7 +99,7 @@ glyph-block Letter-Latin-Lower-A : begin
export : define [GetMask shapeFn df sw] : match shapeFn export : define [GetMask shapeFn df sw] : match shapeFn
[Just ToothlessCorner] : ArcMask df 1 DToothlessRise sw [Just ToothlessCorner] : ArcMask df 1 DToothlessRise sw
[Just ToothlessRounded] : ArcMask df 2 [ADoubleStoreySmoothA df] sw [Just ToothlessRounded] : ArcMask df 2 [ADoubleStoreySmoothA df] sw
__ : ArcMask df 0 nothing nothing sw __ : ArcMask df 0 nothing sw
glyph-block-export DoubleStoreyConfig glyph-block-export DoubleStoreyConfig
define DoubleStoreyConfig : object define DoubleStoreyConfig : object
@ -154,7 +154,7 @@ glyph-block Letter-Latin-Lower-A : begin
local sw : fallback _sw df.mvs local sw : fallback _sw df.mvs
include : EaredBodyImpl df top sw include : EaredBodyImpl df top sw
include : bar df top sw include : bar df top sw
export : define [ScriptCutBody df top bar _sw] : glyph-proc export : define [TopCutBody df top bar _sw] : glyph-proc
local sw : fallback _sw df.mvs local sw : fallback _sw df.mvs
include : EaredBodyImpl df top sw include : EaredBodyImpl df top sw
include : bar df (top - sw / 2) sw include : bar df (top - sw / 2) sw
@ -220,21 +220,21 @@ glyph-block Letter-Latin-Lower-A : begin
singleStoreySerifless { SingleStorey.FullBarBody SingleStorey.SeriflessBar } singleStoreySerifless { SingleStorey.FullBarBody SingleStorey.SeriflessBar }
singleStoreyEarlessCornerSerifless { SingleStorey.EarlessCornerBody SingleStorey.SeriflessBar } singleStoreyEarlessCornerSerifless { SingleStorey.EarlessCornerBody SingleStorey.SeriflessBar }
singleStoreyEarlessRoundedSerifless { SingleStorey.EarlessRoundedBody SingleStorey.SeriflessBar } singleStoreyEarlessRoundedSerifless { SingleStorey.EarlessRoundedBody SingleStorey.SeriflessBar }
singleStoreyScriptCutSerifless { SingleStorey.ScriptCutBody SingleStorey.SeriflessBar } singleStoreyTopCutSerifless { SingleStorey.TopCutBody SingleStorey.SeriflessBar }
singleStoreyTopSerifed { SingleStorey.FullBarBody SingleStorey.TopSerifedBar } singleStoreyTopSerifed { SingleStorey.FullBarBody SingleStorey.TopSerifedBar }
singleStoreySerifed { SingleStorey.FullBarBody SingleStorey.BottomSerifedBar } singleStoreySerifed { SingleStorey.FullBarBody SingleStorey.BottomSerifedBar }
singleStoreyEarlessCornerSerifed { SingleStorey.EarlessCornerBody SingleStorey.BottomSerifedBar } singleStoreyEarlessCornerSerifed { SingleStorey.EarlessCornerBody SingleStorey.BottomSerifedBar }
singleStoreyEarlessRoundedSerifed { SingleStorey.EarlessRoundedBody SingleStorey.BottomSerifedBar } singleStoreyEarlessRoundedSerifed { SingleStorey.EarlessRoundedBody SingleStorey.BottomSerifedBar }
singleStoreyScriptCutSerifed { SingleStorey.ScriptCutBody SingleStorey.BottomSerifedBar } singleStoreyTopCutSerifed { SingleStorey.TopCutBody SingleStorey.BottomSerifedBar }
singleStoreyDoubleSerifed { SingleStorey.FullBarBody SingleStorey.DoubleSerifedBar } singleStoreyDoubleSerifed { SingleStorey.FullBarBody SingleStorey.DoubleSerifedBar }
singleStoreyTailed { SingleStorey.FullBarBody SingleStorey.TailedBar } singleStoreyTailed { SingleStorey.FullBarBody SingleStorey.TailedBar }
singleStoreyEarlessCornerTailed { SingleStorey.EarlessCornerBody SingleStorey.TailedBar } singleStoreyEarlessCornerTailed { SingleStorey.EarlessCornerBody SingleStorey.TailedBar }
singleStoreyEarlessRoundedTailed { SingleStorey.EarlessRoundedBody SingleStorey.TailedBar } singleStoreyEarlessRoundedTailed { SingleStorey.EarlessRoundedBody SingleStorey.TailedBar }
singleStoreyScriptCutTailed { SingleStorey.ScriptCutBody SingleStorey.TailedBar } singleStoreyTopCutTailed { SingleStorey.TopCutBody SingleStorey.TailedBar }
singleStoreyTailedSerifed { SingleStorey.FullBarBody SingleStorey.TailedSerifedBar } singleStoreyTailedSerifed { SingleStorey.FullBarBody SingleStorey.TailedSerifedBar }
@ -262,7 +262,7 @@ glyph-block Letter-Latin-Lower-A : begin
select-variant 'aScript' 0x251 (follow -- [conditional-follow SLAB 'aScript/autoSerifed/slab' 'aScript/autoSerifed/sans']) (shapeFrom -- 'a') select-variant 'aScript' 0x251 (follow -- [conditional-follow SLAB 'aScript/autoSerifed/slab' 'aScript/autoSerifed/sans']) (shapeFrom -- 'a')
select-variant 'AScript' 0x2C6D (follow -- [conditional-follow SLAB 'aScript/autoSerifed/slab' 'aScript/autoSerifed/sans']) select-variant 'AScript' 0x2C6D (follow -- [conditional-follow SLAB 'aScript/autoSerifed/slab' 'aScript/autoSerifed/sans'])
derive-composites 'aScriptRetroflexHook' 0x1D90 'a.singleStoreyScriptCutSerifless' derive-composites 'aScriptRetroflexHook' 0x1D90 'a.singleStoreyTopCutSerifless'
RetroflexHook.rSideJut RightSB 0 (yOverflow -- Stroke) RetroflexHook.rSideJut RightSB 0 (yOverflow -- Stroke)
CreateTurnedLetter 'turnaScript' 0x252 'aScript' HalfAdvance (XH / 2) CreateTurnedLetter 'turnaScript' 0x252 'aScript' HalfAdvance (XH / 2)

View file

@ -16,6 +16,14 @@ glyph-block Letter-Latin-Lower-B : begin
OBarLeft.shape OBarLeft.shape
VBar.l SB 0 yTop VBar.l SB 0 yTop
define [BottomCutBody yTop] : union
OBarLeft.shape
VBar.l SB HalfStroke yTop
spiro-outline
corner SB 0
corner SB HalfStroke
corner (SB + [HSwToV Stroke]) HalfStroke
define [ToothlessCornerBody yTop] : union define [ToothlessCornerBody yTop] : union
OBarLeft.toothless (rise -- DToothlessRise) (mBlend -- DMBlend) OBarLeft.toothless (rise -- DToothlessRise) (mBlend -- DMBlend)
VBar.l SB DToothlessRise yTop VBar.l SB DToothlessRise yTop
@ -31,6 +39,7 @@ glyph-block Letter-Latin-Lower-B : begin
toothed ToothedBody toothed ToothedBody
toothlessCorner ToothlessCornerBody toothlessCorner ToothlessCornerBody
toothlessRounded ToothlessRoundedBody toothlessRounded ToothlessRoundedBody
bottomCut BottomCutBody
object # serifs object # serifs
serifless { no-shape false } serifless { no-shape false }
motionSerifed { LTSerifs true } motionSerifed { LTSerifs true }
@ -65,7 +74,7 @@ glyph-block Letter-Latin-Lower-B : begin
local xRight : mix SB RightSB 0.9 local xRight : mix SB RightSB 0.9
include : HBar.t xLeft xRight Ascender include : HBar.t xLeft xRight Ascender
include : Serifs include : Serifs
if doTS : include : VSerif.dr [mix SB RightSB 0.9] Ascender VJut if doTS : include : VSerif.dr xRight Ascender VJut
include : LeaningAnchor.Above.VBar.m [mix xLeft xRight 0.5] include : LeaningAnchor.Above.VBar.m [mix xLeft xRight 0.5]
if [not doTS] : create-glyph "bHookTop.\(suffix)" : glyph-proc if [not doTS] : create-glyph "bHookTop.\(suffix)" : glyph-proc
@ -103,5 +112,5 @@ glyph-block Letter-Latin-Lower-B : begin
OShapeOutline.NoOvershoot XH 0 (SB + BBD + [HSwToV BBS]) RightSB OShapeOutline.NoOvershoot XH 0 (SB + BBD + [HSwToV BBS]) RightSB
VBar.r (RightSB - BBD - OX) 0 XH BBS VBar.r (RightSB - BBD - OX) 0 XH BBS
include : OBarLeft.shape include : OBarLeft.shape
left -- SB + BBD left -- (SB + BBD)
sw -- BBS sw -- BBS

View file

@ -95,7 +95,7 @@ glyph-block Letter-Latin-Lower-D : begin
if topSerif : include : topSerif df Ascender if topSerif : include : topSerif df Ascender
if bottomSerif : include : bottomSerif df Ascender if bottomSerif : include : bottomSerif df Ascender
include : LeaningAnchor.Above.VBar.r df.rightSB include : LeaningAnchor.Above.VBar.r df.rightSB
set-base-anchor 'overlayOnExtension' (df.rightSB - [HSwToV : 0.5 * Stroke]) yOverlay set-base-anchor 'overlayOnExtension' (df.rightSB - [HSwToV HalfStroke]) yOverlay
create-glyph "dStroke.\(suffix)" : glyph-proc create-glyph "dStroke.\(suffix)" : glyph-proc
local df : DivFrame 1 local df : DivFrame 1
@ -110,7 +110,7 @@ glyph-block Letter-Latin-Lower-D : begin
local xRight : df.rightSB + O local xRight : df.rightSB + O
include : HBar.t xLeft xRight Ascender include : HBar.t xLeft xRight Ascender
if topSerif : begin if topSerif : begin
include : VSerif.dl xLeft Ascender : Math.min VJut (0.8 * (Ascender - XH)) include : VSerif.dl xLeft Ascender [Math.min VJut : 0.8 * (Ascender - XH)]
if [not para.isItalic] : include : HSerif.rt df.rightSB Ascender SideJut if [not para.isItalic] : include : HSerif.rt df.rightSB Ascender SideJut
if bottomSerif : include : bottomSerif df Ascender if bottomSerif : include : bottomSerif df Ascender
include : LeaningAnchor.Above.VBar.m [mix xLeft xRight 0.5] include : LeaningAnchor.Above.VBar.m [mix xLeft xRight 0.5]
@ -198,20 +198,20 @@ glyph-block Letter-Latin-Lower-D : begin
local fine : AdviceStroke 4 local fine : AdviceStroke 4
local rinner : clamp (Width * 0.065) (XH * 0.05) (fine * 0.35) local rinner : clamp (Width * 0.065) (XH * 0.05) (fine * 0.35)
local sw : AdviceStroke 2.75 local sw : AdviceStroke 2.75
local m1 : Math.min RightSB (Width - rinner * 2 - fine - OX) local m : Math.min RightSB (Width - rinner * 2 - fine - OX)
include : LeaningAnchor.Above.VBar.r m1 include : LeaningAnchor.Above.VBar.r m
include : OBarRight.shape (left -- SB) (right -- m1) (sw -- sw) include : OBarRight.shape (left -- SB) (right -- m) (sw -- sw)
include : dispiro include : dispiro
widths.lhs sw widths.lhs sw
flat (m1 - [HSwToV sw]) Ascender [heading Downward] flat (m - [HSwToV sw]) Ascender [heading Downward]
curl (m1 - [HSwToV sw]) (rinner * 2 + fine) curl (m - [HSwToV sw]) (rinner * 2 + fine)
CurlyTail.n fine 0 (m1 + rinner * 2 + fine) CurlyTail.n fine 0 (m + rinner * 2 + fine)
x2 -- ([mix SB m1 0.5] - [HSwToV : 0.75 * fine]) x2 -- ([mix SB m 0.5] - [HSwToV : 0.75 * fine])
y2 -- 0.37 * Descender y2 -- (0.37 * Descender)
swBefore -- sw swBefore -- sw
terminalSlopeAdj -- 0.25 terminalSlopeAdj -- 0.25
if fSerif : include : HSerif.lt (m1 - [HSwToV sw]) Ascender SideJut if fSerif : include : HSerif.lt (m - [HSwToV sw]) Ascender SideJut
select-variant 'dCurlyTail' 0x221 select-variant 'dCurlyTail' 0x221
@ -224,5 +224,5 @@ glyph-block Letter-Latin-Lower-D : begin
OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS]) OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS])
VBar.l (SB + BBD + OX) 0 XH BBS VBar.l (SB + BBD + OX) 0 XH BBS
include : OBarRight.shape include : OBarRight.shape
right -- RightSB - BBD right -- (RightSB - BBD)
sw -- BBS sw -- BBS

View file

@ -19,20 +19,20 @@ glyph-block Letter-Latin-Lower-G : begin
include : HBar.m l r currentGlyph.baseAnchors.overlay.y bw include : HBar.m l r currentGlyph.baseAnchors.overlay.y bw
# overlay bar width for double-storey g # overlay bar width for double-storey g
define obwDoubleStorey : Math.min [AdviceStroke 5] (0.5 / 3 * (CAP - Stroke * 4)) define obwDoubleStorey : Math.min (0.5 / 3 * (CAP - Stroke * 4)) : AdviceStroke 5
create-glyph 'g.doubleStoreyClosed' : glyph-proc create-glyph 'g.doubleStoreyClosed' : glyph-proc
include : MarkSet.p include : MarkSet.p
local obot : XH * DesignParameters.gBarPos - O - Stroke * 0.4 local obot : XH * DesignParameters.gBarPos - O - Stroke * 0.4
include : OShape XH obot SB (RightSB - 0.3 * SB) include : OShape XH obot SB (RightSB - 0.3 * SB)
local gleftx ([mix 0 SB 0.85] + OX) local gleftx : [mix 0 SB 0.85] + OX
local grightx ([mix Width RightSB 0.825] - OX) local grightx : [mix Width RightSB 0.825] - OX
local groundy : Math.round : [mix Descender (XH * DesignParameters.gBarPos) 0.64] + HalfStroke local groundy : Math.round : [mix Descender (XH * DesignParameters.gBarPos) 0.64] + HalfStroke
local gtipy : [mix groundy (obot + Stroke + O) 1.005] - Stroke * CThin local gtipy : [mix groundy (obot + Stroke + O) 1.005] - Stroke * CThin
include : dispiro include : dispiro
g4.left.start [mix SB RightSB 0.4] gtipy [widths 0 (Stroke * CThin)] g4.left.start [mix SB RightSB 0.4] gtipy [widths 0 (Stroke * CThin)]
g4 ([mix SB RightSB 0.0575] + Stroke * 0.85) [mix groundy gtipy 0.5] [widths.rhs (Stroke * [mix CThin 1 0.5])] g4 ([mix SB RightSB 0.0575] + Stroke * 0.85) [mix groundy gtipy 0.5] [widths.rhs : Stroke * [mix CThin 1 0.5]]
flat [mix SB RightSB 0.435] groundy [widths.rhs Stroke] flat [mix SB RightSB 0.435] groundy [widths.rhs Stroke]
curl [mix RightSB SB 0.435] groundy curl [mix RightSB SB 0.435] groundy
archv 4 archv 4
@ -58,13 +58,13 @@ glyph-block Letter-Latin-Lower-G : begin
local obot : XH * DesignParameters.gBarPos - O - Stroke * 0.4 local obot : XH * DesignParameters.gBarPos - O - Stroke * 0.4
include : OShape XH obot SB (RightSB - 0.3 * SB) include : OShape XH obot SB (RightSB - 0.3 * SB)
local gleftx ([mix 0 SB 0.85] + OX) local gleftx : [mix 0 SB 0.85] + OX
local grightx ([mix Width RightSB 0.825] - OX) local grightx : [mix Width RightSB 0.825] - OX
local groundy : Math.round : [mix Descender (XH * DesignParameters.gBarPos) 0.64] + HalfStroke local groundy : Math.round : [mix Descender (XH * DesignParameters.gBarPos) 0.64] + HalfStroke
local gtipy : [mix groundy (obot + Stroke + O) 1.005] - Stroke * CThin local gtipy : [mix groundy (obot + Stroke + O) 1.005] - Stroke * CThin
include : dispiro include : dispiro
g4.left.start [mix SB RightSB 0.4] gtipy [widths 0 (Stroke * CThin)] g4.left.start [mix SB RightSB 0.4] gtipy [widths 0 (Stroke * CThin)]
g4 ([mix SB RightSB 0.0575] + Stroke * 0.85) [mix groundy gtipy 0.5] [widths.rhs (Stroke * [mix CThin 1 0.5])] g4 ([mix SB RightSB 0.0575] + Stroke * 0.85) [mix groundy gtipy 0.5] [widths.rhs : Stroke * [mix CThin 1 0.5]]
flat [mix SB RightSB 0.435] groundy [widths.rhs Stroke] flat [mix SB RightSB 0.435] groundy [widths.rhs Stroke]
curl [mix RightSB SB 0.435] groundy curl [mix RightSB SB 0.435] groundy
archv 4 archv 4
@ -112,15 +112,19 @@ glyph-block Letter-Latin-Lower-G : begin
CurlyTail.n fine Descender df.leftSB df.width (Descender + 0.5 * fine) CurlyTail.n fine Descender df.leftSB df.width (Descender + 0.5 * fine)
yLoopTop -- (0.15 * Descender + 0.25 * fine) yLoopTop -- (0.15 * Descender + 0.25 * fine)
export : define [ScriptCutBody df top] : glyph-proc export : define [TopCutBody df top] : glyph-proc
include : SeriflessBody df top include : SeriflessBody df top
include : spiro-outline include : spiro-outline
corner df.rightSB top corner df.rightSB top
corner df.rightSB (top - HalfStroke) corner df.rightSB (top - HalfStroke)
corner (df.rightSB - [HSwToV Stroke]) (top - HalfStroke) corner (df.rightSB - [HSwToV Stroke]) (top - HalfStroke)
export : define [SeriflessBody df top] : glyph-proc export : define [SeriflessBody df top] : glyph-proc
include : OBarRight.shape (top -- top) (left -- df.leftSB) (right -- df.rightSB) (sw -- df.mvs) include : OBarRight.shape
top -- top
left -- df.leftSB
right -- df.rightSB
sw -- df.mvs
export : define [SerifedBody df top] : glyph-proc export : define [SerifedBody df top] : glyph-proc
include : SeriflessBody df top include : SeriflessBody df top
@ -128,21 +132,21 @@ glyph-block Letter-Latin-Lower-G : begin
export : define [EarlessCornerBody df top] : glyph-proc export : define [EarlessCornerBody df top] : glyph-proc
include : OBarLeft.toothless include : OBarLeft.toothless
top -- top top -- top
left -- df.leftSB left -- df.leftSB
right -- df.rightSB right -- df.rightSB
rise -- DToothlessRise rise -- DToothlessRise
mBlend -- DMBlend mBlend -- DMBlend
sw -- df.mvs sw -- df.mvs
include : FlipAround df.middle (top / 2) include : FlipAround df.middle (top / 2)
export : define [EarlessRoundedBody df top] : glyph-proc export : define [EarlessRoundedBody df top] : glyph-proc
include : OBarLeft.rounded include : OBarLeft.rounded
top -- top top -- top
left -- df.leftSB left -- df.leftSB
right -- df.rightSB right -- df.rightSB
yTerminal -- (XH - SmallArchDepthA) yTerminal -- (XH - SmallArchDepthA)
sw -- df.mvs sw -- df.mvs
include : FlipAround df.middle (top / 2) include : FlipAround df.middle (top / 2)
define SingleStoreyConfig : SuffixCfg.weave define SingleStoreyConfig : SuffixCfg.weave
@ -155,7 +159,7 @@ glyph-block Letter-Latin-Lower-G : begin
earlessCorner { SingleStorey.EarlessCornerBody DToothlessRise } earlessCorner { SingleStorey.EarlessCornerBody DToothlessRise }
earlessCornerHTB { SingleStorey.EarlessCornerBody 0 } earlessCornerHTB { SingleStorey.EarlessCornerBody 0 }
earlessRounded { SingleStorey.EarlessRoundedBody (XH - SmallArchDepthA) } earlessRounded { SingleStorey.EarlessRoundedBody (XH - SmallArchDepthA) }
scriptCut { SingleStorey.ScriptCutBody HalfStroke } topCut { SingleStorey.TopCutBody HalfStroke }
foreach { suffix { hookShape {bodyShape hookStart} } } [Object.entries SingleStoreyConfig] : do foreach { suffix { hookShape {bodyShape hookStart} } } [Object.entries SingleStoreyConfig] : do
create-glyph "g.\(suffix)" : glyph-proc create-glyph "g.\(suffix)" : glyph-proc
@ -181,10 +185,10 @@ glyph-block Letter-Latin-Lower-G : begin
include : bodyShape dfSub XH include : bodyShape dfSub XH
include : hookShape dfSub (XH - hookStart) include : hookShape dfSub (XH - hookStart)
include : PalatalHook.r include : PalatalHook.r
x -- df.rightSB x -- df.rightSB
y -- 0 y -- 0
xLink -- dfSub.rightSB xLink -- dfSub.rightSB
refSw -- dfSub.mvs refSw -- dfSub.mvs
maskOut -- [intersection [MaskBelow 0] [MaskLeft dfSub.rightSB]] maskOut -- [intersection [MaskBelow 0] [MaskLeft dfSub.rightSB]]
create-glyph "gBar.\(suffix)" : glyph-proc create-glyph "gBar.\(suffix)" : glyph-proc
@ -213,8 +217,8 @@ glyph-block Letter-Latin-Lower-G : begin
include : MarkSet.p include : MarkSet.p
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
define df : DivFrame 1 define df : DivFrame 1
include : SingleStorey.ScriptCutBody df XH include : SingleStorey.TopCutBody df XH
include : SingleStorey.CrossedHook df (XH - HalfStroke) include : SingleStorey.CrossedHook df (XH - HalfStroke)
glyph-block-import Letter-Blackboard : BBS BBD BBBarRight glyph-block-import Letter-Blackboard : BBS BBD BBBarRight
create-glyph 'mathbb/g' 0x1D558 : glyph-proc create-glyph 'mathbb/g' 0x1D558 : glyph-proc
@ -223,9 +227,9 @@ glyph-block Letter-Latin-Lower-G : begin
OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS]) OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS])
VBar.l (SB + BBD + OX) 0 XH BBS VBar.l (SB + BBD + OX) 0 XH BBS
include : OBarRight.shape include : OBarRight.shape
left -- SB left -- SB
right -- RightSB - BBD right -- (RightSB - BBD)
sw -- BBS sw -- BBS
include : SingleStorey.BentHookT dispiro [DivFrame 1] XH 0 BBS include : SingleStorey.BentHookT dispiro [DivFrame 1] XH 0 BBS
include : HBar.t (RightSB - BBD) RightSB XH BBS include : HBar.t (RightSB - BBD) RightSB XH BBS
include : intersection include : intersection

View file

@ -34,6 +34,18 @@ glyph-block Letter-Latin-Lower-Q : begin
[Just TERMINAL-TAILED] : RightwardTailedBar RightSB bottom top [Just TERMINAL-TAILED] : RightwardTailedBar RightSB bottom top
[Just TERMINAL-DIAG] : RDiagTailedBar RightSB bottom top [Just TERMINAL-DIAG] : RDiagTailedBar RightSB bottom top
define [TopCutBody terminal top bottom] : glyph-proc
set-base-anchor 'trailing' (RightSB - markHalfStroke) Descender
include : OBarRight.shape (top -- top)
include : match terminal
[Just TERMINAL-NORMAL] : VBar.r RightSB bottom (top - HalfStroke)
[Just TERMINAL-TAILED] : RightwardTailedBar RightSB bottom (top - HalfStroke)
[Just TERMINAL-DIAG] : RDiagTailedBar RightSB bottom (top - HalfStroke)
include : spiro-outline
corner RightSB top
corner RightSB (top - HalfStroke)
corner (RightSB - [HSwToV Stroke]) (top - HalfStroke)
define [EarlessCornerBody terminal top bottom] : glyph-proc define [EarlessCornerBody terminal top bottom] : glyph-proc
set-base-anchor 'trailing' (RightSB - markHalfStroke) Descender set-base-anchor 'trailing' (RightSB - markHalfStroke) Descender
include : OBarLeft.toothless (top -- top) (rise -- DToothlessRise) (mBlend -- DMBlend) include : OBarLeft.toothless (top -- top) (rise -- DToothlessRise) (mBlend -- DMBlend)
@ -64,6 +76,7 @@ glyph-block Letter-Latin-Lower-Q : begin
"" EaredBody "" EaredBody
earlessCorner EarlessCornerBody earlessCorner EarlessCornerBody
earlessRounded EarlessRoundedBody earlessRounded EarlessRoundedBody
topCut TopCutBody
object # tail object # tail
straight { TERMINAL-NORMAL false } straight { TERMINAL-NORMAL false }
tailed { TERMINAL-TAILED true } tailed { TERMINAL-TAILED true }
@ -118,6 +131,6 @@ glyph-block Letter-Latin-Lower-Q : begin
OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS]) OShapeOutline.NoOvershoot XH 0 SB (RightSB - BBD - [HSwToV BBS])
VBar.l (SB + BBD + OX) 0 XH BBS VBar.l (SB + BBD + OX) 0 XH BBS
include : OBarRight.shape include : OBarRight.shape
left -- SB left -- SB
right -- RightSB - BBD right -- (RightSB - BBD)
sw -- BBS sw -- BBS

View file

@ -2139,8 +2139,8 @@ selectorAffix."a/rtailBase" = "doubleStorey"
selectorAffix."a/doubleStorey" = "doubleStorey" selectorAffix."a/doubleStorey" = "doubleStorey"
selectorAffix."a/singleStorey/autoSerifed/slab" = "singleStorey" selectorAffix."a/singleStorey/autoSerifed/slab" = "singleStorey"
selectorAffix."a/singleStorey/autoSerifed/sans" = "singleStorey" selectorAffix."a/singleStorey/autoSerifed/sans" = "singleStorey"
selectorAffix."aScript/autoSerifed/slab" = "singleStoreyScriptCut" selectorAffix."aScript/autoSerifed/slab" = "singleStoreyTopCut"
selectorAffix."aScript/autoSerifed/sans" = "singleStoreyScriptCut" selectorAffix."aScript/autoSerifed/sans" = "singleStoreyTopCut"
[prime.a.variants-buildup.stages.storey.single-storey] [prime.a.variants-buildup.stages.storey.single-storey]
rank = 2 rank = 2
@ -2200,11 +2200,25 @@ selectorAffix."a/rtailBase" = ""
selectorAffix."a/doubleStorey" = "" selectorAffix."a/doubleStorey" = ""
selectorAffix."a/singleStorey/autoSerifed/slab" = "" selectorAffix."a/singleStorey/autoSerifed/slab" = ""
selectorAffix."a/singleStorey/autoSerifed/sans" = "" selectorAffix."a/singleStorey/autoSerifed/sans" = ""
selectorAffix."aScript/autoSerifed/slab" = "scriptCut" selectorAffix."aScript/autoSerifed/slab" = "topCut"
selectorAffix."aScript/autoSerifed/sans" = "scriptCut" selectorAffix."aScript/autoSerifed/sans" = "topCut"
[prime.a.variants-buildup.stages.ear.top-cut]
rank = 2
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at top"
selectorAffix.a = "topCut"
selectorAffix."ae/a" = ""
selectorAffix."a/sansSerif" = "topCut"
selectorAffix."a/rtailBase" = "topCut"
selectorAffix."a/doubleStorey" = ""
selectorAffix."a/singleStorey/autoSerifed/slab" = "topCut"
selectorAffix."a/singleStorey/autoSerifed/sans" = "topCut"
selectorAffix."aScript/autoSerifed/slab" = "topCut"
selectorAffix."aScript/autoSerifed/sans" = "topCut"
[prime.a.variants-buildup.stages.ear.earless-corner] [prime.a.variants-buildup.stages.ear.earless-corner]
rank = 2 rank = 3
descriptionAffix = "earless (cornered top-right)" descriptionAffix = "earless (cornered top-right)"
selectorAffix.a = "earlessCorner" selectorAffix.a = "earlessCorner"
selectorAffix."ae/a" = "" selectorAffix."ae/a" = ""
@ -2213,11 +2227,11 @@ selectorAffix."a/rtailBase" = "earlessCorner"
selectorAffix."a/doubleStorey" = "" selectorAffix."a/doubleStorey" = ""
selectorAffix."a/singleStorey/autoSerifed/slab" = "earlessCorner" selectorAffix."a/singleStorey/autoSerifed/slab" = "earlessCorner"
selectorAffix."a/singleStorey/autoSerifed/sans" = "earlessCorner" selectorAffix."a/singleStorey/autoSerifed/sans" = "earlessCorner"
selectorAffix."aScript/autoSerifed/slab" = "scriptCut" selectorAffix."aScript/autoSerifed/slab" = "topCut"
selectorAffix."aScript/autoSerifed/sans" = "scriptCut" selectorAffix."aScript/autoSerifed/sans" = "topCut"
[prime.a.variants-buildup.stages.ear.earless-rounded] [prime.a.variants-buildup.stages.ear.earless-rounded]
rank = 3 rank = 4
descriptionAffix = "earless (rounded top-right)" descriptionAffix = "earless (rounded top-right)"
selectorAffix.a = "earlessRounded" selectorAffix.a = "earlessRounded"
selectorAffix."ae/a" = "" selectorAffix."ae/a" = ""
@ -2226,8 +2240,8 @@ selectorAffix."a/rtailBase" = "earlessRounded"
selectorAffix."a/doubleStorey" = "" selectorAffix."a/doubleStorey" = ""
selectorAffix."a/singleStorey/autoSerifed/slab" = "earlessRounded" selectorAffix."a/singleStorey/autoSerifed/slab" = "earlessRounded"
selectorAffix."a/singleStorey/autoSerifed/sans" = "earlessRounded" selectorAffix."a/singleStorey/autoSerifed/sans" = "earlessRounded"
selectorAffix."aScript/autoSerifed/slab" = "scriptCut" selectorAffix."aScript/autoSerifed/slab" = "topCut"
selectorAffix."aScript/autoSerifed/sans" = "scriptCut" selectorAffix."aScript/autoSerifed/sans" = "topCut"
[prime.a.variants-buildup.stages.bar.serifless] [prime.a.variants-buildup.stages.bar.serifless]
rank = 1 rank = 1
@ -2345,15 +2359,23 @@ selectorAffix.b = "toothed"
selectorAffix."b/sansSerif" = "toothed" selectorAffix."b/sansSerif" = "toothed"
selectorAffix.bHookTop = "toothed" selectorAffix.bHookTop = "toothed"
[prime.b.variants-buildup.stages.body.toothless-corner] [prime.b.variants-buildup.stages.body.bottom-cut]
rank = 2 rank = 2
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at bottom"
selectorAffix.b = "bottomCut"
selectorAffix."b/sansSerif" = "bottomCut"
selectorAffix.bHookTop = "bottomCut"
[prime.b.variants-buildup.stages.body.toothless-corner]
rank = 3
descriptionAffix = "toothless (cornered) shape" descriptionAffix = "toothless (cornered) shape"
selectorAffix.b = "toothlessCorner" selectorAffix.b = "toothlessCorner"
selectorAffix."b/sansSerif" = "toothlessCorner" selectorAffix."b/sansSerif" = "toothlessCorner"
selectorAffix.bHookTop = "toothlessCorner" selectorAffix.bHookTop = "toothlessCorner"
[prime.b.variants-buildup.stages.body.toothless-rounded] [prime.b.variants-buildup.stages.body.toothless-rounded]
rank = 3 rank = 4
descriptionAffix = "toothless (rounded) shape" descriptionAffix = "toothless (rounded) shape"
selectorAffix.b = "toothlessRounded" selectorAffix.b = "toothlessRounded"
selectorAffix."b/sansSerif" = "toothlessRounded" selectorAffix."b/sansSerif" = "toothlessRounded"
@ -2768,7 +2790,7 @@ selectorAffix."g/sansSerif" = "doubleStorey"
selectorAffix."g/hookTopBase" = "singleStoreyBentHookSerifless" selectorAffix."g/hookTopBase" = "singleStoreyBentHookSerifless"
selectorAffix."g/singleStorey/autoSerifed/slab" = "singleStoreyBentHookSerifed" selectorAffix."g/singleStorey/autoSerifed/slab" = "singleStoreyBentHookSerifed"
selectorAffix."g/singleStorey/autoSerifed/sans" = "singleStoreyBentHookSerifless" selectorAffix."g/singleStorey/autoSerifed/sans" = "singleStoreyBentHookSerifless"
selectorAffix.gScript = "singleStoreyBentHookScriptCut" selectorAffix.gScript = "singleStoreyBentHookTopCut"
[prime.g.variants-buildup.stages.openness."*"] [prime.g.variants-buildup.stages.openness."*"]
next = "END" next = "END"
@ -2834,7 +2856,7 @@ selectorAffix."g/sansSerif" = "serifless"
selectorAffix."g/hookTopBase" = "serifless" selectorAffix."g/hookTopBase" = "serifless"
selectorAffix."g/singleStorey/autoSerifed/slab" = "serifless" selectorAffix."g/singleStorey/autoSerifed/slab" = "serifless"
selectorAffix."g/singleStorey/autoSerifed/sans" = "serifless" selectorAffix."g/singleStorey/autoSerifed/sans" = "serifless"
selectorAffix.gScript = "scriptCut" selectorAffix.gScript = "topCut"
[prime.g.variants-buildup.stages.ear.serifed] [prime.g.variants-buildup.stages.ear.serifed]
rank = 2 rank = 2
@ -2844,27 +2866,38 @@ selectorAffix."g/sansSerif" = "serifless"
selectorAffix."g/hookTopBase" = "serifless" selectorAffix."g/hookTopBase" = "serifless"
selectorAffix."g/singleStorey/autoSerifed/slab" = "serifed" selectorAffix."g/singleStorey/autoSerifed/slab" = "serifed"
selectorAffix."g/singleStorey/autoSerifed/sans" = "serifed" selectorAffix."g/singleStorey/autoSerifed/sans" = "serifed"
selectorAffix.gScript = "scriptCut" selectorAffix.gScript = "topCut"
[prime.g.variants-buildup.stages.ear.top-cut]
rank = 3
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at top"
selectorAffix.g = "topCut"
selectorAffix."g/sansSerif" = "topCut"
selectorAffix."g/hookTopBase" = "serifless"
selectorAffix."g/singleStorey/autoSerifed/slab" = "topCut"
selectorAffix."g/singleStorey/autoSerifed/sans" = "topCut"
selectorAffix.gScript = "topCut"
[prime.g.variants-buildup.stages.ear.earless-corner] [prime.g.variants-buildup.stages.ear.earless-corner]
rank = 3 rank = 4
descriptionAffix = "earless (cornered top-right)" descriptionAffix = "earless (cornered top-right)"
selectorAffix.g = "earlessCorner" selectorAffix.g = "earlessCorner"
selectorAffix."g/sansSerif" = "earlessCorner" selectorAffix."g/sansSerif" = "earlessCorner"
selectorAffix."g/hookTopBase" = "earlessCornerHTB" selectorAffix."g/hookTopBase" = "earlessCornerHTB"
selectorAffix."g/singleStorey/autoSerifed/slab" = "earlessCorner" selectorAffix."g/singleStorey/autoSerifed/slab" = "earlessCorner"
selectorAffix."g/singleStorey/autoSerifed/sans" = "earlessCorner" selectorAffix."g/singleStorey/autoSerifed/sans" = "earlessCorner"
selectorAffix.gScript = "scriptCut" selectorAffix.gScript = "topCut"
[prime.g.variants-buildup.stages.ear.earless-rounded] [prime.g.variants-buildup.stages.ear.earless-rounded]
rank = 4 rank = 5
descriptionAffix = "earless (rounded top-right)" descriptionAffix = "earless (rounded top-right)"
selectorAffix.g = "earlessRounded" selectorAffix.g = "earlessRounded"
selectorAffix."g/sansSerif" = "earlessRounded" selectorAffix."g/sansSerif" = "earlessRounded"
selectorAffix."g/hookTopBase" = "serifless" selectorAffix."g/hookTopBase" = "serifless"
selectorAffix."g/singleStorey/autoSerifed/slab" = "earlessRounded" selectorAffix."g/singleStorey/autoSerifed/slab" = "earlessRounded"
selectorAffix."g/singleStorey/autoSerifed/sans" = "earlessRounded" selectorAffix."g/singleStorey/autoSerifed/sans" = "earlessRounded"
selectorAffix.gScript = "scriptCut" selectorAffix.gScript = "topCut"
@ -3954,8 +3987,18 @@ selectorAffix."q/hookTopBase" = ""
selectorAffix.qRTail = "" selectorAffix.qRTail = ""
selectorAffix.gha = "" selectorAffix.gha = ""
[prime.q.variants-buildup.stages.body.earless-corner] [prime.q.variants-buildup.stages.body.top-cut]
rank = 2 rank = 2
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at top"
selectorAffix.q = "topCut"
selectorAffix."q/sansSerif" = "topCut"
selectorAffix."q/hookTopBase" = ""
selectorAffix.qRTail = "topCut"
selectorAffix.gha = ""
[prime.q.variants-buildup.stages.body.earless-corner]
rank = 3
descriptionAffix = "earless (cornered) shape" descriptionAffix = "earless (cornered) shape"
selectorAffix.q = "earlessCorner" selectorAffix.q = "earlessCorner"
selectorAffix."q/sansSerif" = "earlessCorner" selectorAffix."q/sansSerif" = "earlessCorner"
@ -3964,7 +4007,7 @@ selectorAffix.qRTail = "earlessCorner"
selectorAffix.gha = "" selectorAffix.gha = ""
[prime.q.variants-buildup.stages.body.earless-rounded] [prime.q.variants-buildup.stages.body.earless-rounded]
rank = 3 rank = 4
descriptionAffix = "earless (rounded) shape" descriptionAffix = "earless (rounded) shape"
selectorAffix.q = "earlessRounded" selectorAffix.q = "earlessRounded"
selectorAffix."q/sansSerif" = "earlessRounded" selectorAffix."q/sansSerif" = "earlessRounded"
@ -5492,14 +5535,21 @@ keyAffix = ""
selectorAffix."grek/alpha" = "" selectorAffix."grek/alpha" = ""
selectorAffix."grek/alpha/sansSerif" = "" selectorAffix."grek/alpha/sansSerif" = ""
[prime.lower-alpha.variants-buildup.stages.ear.earless-corner] [prime.lower-alpha.variants-buildup.stages.ear.top-cut]
rank = 2 rank = 2
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at top"
selectorAffix."grek/alpha" = "topCut"
selectorAffix."grek/alpha/sansSerif" = "topCut"
[prime.lower-alpha.variants-buildup.stages.ear.earless-corner]
rank = 3
descriptionAffix = "earless (cornered top-right)" descriptionAffix = "earless (cornered top-right)"
selectorAffix."grek/alpha" = "earlessCorner" selectorAffix."grek/alpha" = "earlessCorner"
selectorAffix."grek/alpha/sansSerif" = "earlessCorner" selectorAffix."grek/alpha/sansSerif" = "earlessCorner"
[prime.lower-alpha.variants-buildup.stages.ear.earless-rounded] [prime.lower-alpha.variants-buildup.stages.ear.earless-rounded]
rank = 3 rank = 4
descriptionAffix = "earless (rounded top-right)" descriptionAffix = "earless (rounded top-right)"
selectorAffix."grek/alpha" = "earlessRounded" selectorAffix."grek/alpha" = "earlessRounded"
selectorAffix."grek/alpha/sansSerif" = "earlessRounded" selectorAffix."grek/alpha/sansSerif" = "earlessRounded"
@ -6266,14 +6316,21 @@ keyAffix = ""
selectorAffix."cyrl/a" = "" selectorAffix."cyrl/a" = ""
selectorAffix."cyrl/ae/a" = "" selectorAffix."cyrl/ae/a" = ""
[prime.cyrl-a.variants-buildup.stages.ear.earless-corner] [prime.cyrl-a.variants-buildup.stages.ear.top-cut]
rank = 2 rank = 2
nonBreakingVariantAdditionPriority = 100
descriptionAffix = "a diagonal cut at top"
selectorAffix."cyrl/a" = "topCut"
selectorAffix."cyrl/ae/a" = ""
[prime.cyrl-a.variants-buildup.stages.ear.earless-corner]
rank = 3
descriptionAffix = "earless (cornered top-right)" descriptionAffix = "earless (cornered top-right)"
selectorAffix."cyrl/a" = "earlessCorner" selectorAffix."cyrl/a" = "earlessCorner"
selectorAffix."cyrl/ae/a" = "" selectorAffix."cyrl/ae/a" = ""
[prime.cyrl-a.variants-buildup.stages.ear.earless-rounded] [prime.cyrl-a.variants-buildup.stages.ear.earless-rounded]
rank = 3 rank = 4
descriptionAffix = "earless (rounded top-right)" descriptionAffix = "earless (rounded top-right)"
selectorAffix."cyrl/a" = "earlessRounded" selectorAffix."cyrl/a" = "earlessRounded"
selectorAffix."cyrl/ae/a" = "" selectorAffix."cyrl/ae/a" = ""
@ -9202,6 +9259,7 @@ i = "serifed"
j = "serifed" j = "serifed"
k = "symmetric-touching-serifless" k = "symmetric-touching-serifless"
l = "serifed" l = "serifed"
q = "top-cut-straight-serifless"
t = "bent-hook-short-neck" t = "bent-hook-short-neck"
u = "toothed-serifless" u = "toothed-serifless"
y = "straight-turn-serifless" y = "straight-turn-serifless"
@ -9243,9 +9301,9 @@ question = "corner-flat-hooked"
micro-sign = "tailed-serifless" micro-sign = "tailed-serifless"
[composite.ss03.italic] [composite.ss03.italic]
a = "single-storey-serifless" a = "single-storey-top-cut-serifless"
f = "flat-hook-tailed" f = "flat-hook-tailed"
g = "single-storey-serifless" g = "single-storey-top-cut"
i = "tailed-serifed" i = "tailed-serifed"
k = "cursive-serifless" k = "cursive-serifless"
l = "tailed" l = "tailed"
@ -9253,7 +9311,7 @@ long-s = "flat-hook-descending"
eszet = "longs-s-lig-descending-serifless" eszet = "longs-s-lig-descending-serifless"
lower-beta = "cursive" lower-beta = "cursive"
lower-phi = "cursive" lower-phi = "cursive"
cyrl-a = "single-storey-serifless" cyrl-a = "single-storey-top-cut-serifless"
cyrl-ve = "cursive-tall" cyrl-ve = "cursive-tall"
cyrl-zhe = "symmetric-connected" cyrl-zhe = "symmetric-connected"
cyrl-ka = "symmetric-connected-serifless" cyrl-ka = "symmetric-connected-serifless"
@ -9270,6 +9328,7 @@ b = "toothless-corner-serifed"
d = "toothed-serifed" d = "toothed-serifed"
f = "flat-hook-serifed" f = "flat-hook-serifed"
k = "symmetric-touching-serifed" k = "symmetric-touching-serifed"
q = "top-cut-straight-serifed"
u = "toothed-serifed" u = "toothed-serifed"
x = "straight-serifed" x = "straight-serifed"
y = "straight-turn-serifed" y = "straight-turn-serifed"
@ -9291,7 +9350,7 @@ seven = "straight-serifed"
micro-sign = "tailed-serifed" micro-sign = "tailed-serifed"
[composite.ss03.slab-override.italic] [composite.ss03.slab-override.italic]
a = "single-storey-serifed" a = "single-storey-top-cut-serifed"
f = "flat-hook-tailed" f = "flat-hook-tailed"
k = "cursive-top-left-and-bottom-right-serifed" k = "cursive-top-left-and-bottom-right-serifed"
l = "tailed-serifed" l = "tailed-serifed"
@ -9300,7 +9359,7 @@ x = "straight-bilateral-motion-serifed"
y = "straight-turn-motion-serifed" y = "straight-turn-motion-serifed"
long-s = "flat-hook-descending" long-s = "flat-hook-descending"
eszet = "longs-s-lig-descending-serifless" eszet = "longs-s-lig-descending-serifless"
cyrl-a = "single-storey-serifed" cyrl-a = "single-storey-top-cut-serifed"
cyrl-ve = "cursive-tall" cyrl-ve = "cursive-tall"
cyrl-ka = "symmetric-connected-top-left-and-bottom-right-serifed" cyrl-ka = "symmetric-connected-top-left-and-bottom-right-serifed"
cyrl-u = "straight-turn-motion-serifed" cyrl-u = "straight-turn-motion-serifed"
@ -9976,12 +10035,14 @@ capital-k = "symmetric-touching-serifless"
capital-q = "crossing" capital-q = "crossing"
capital-w = "straight-vertical-sides-serifless" capital-w = "straight-vertical-sides-serifless"
a = "double-storey-toothless-corner" a = "double-storey-toothless-corner"
b = "toothed-serifless"
f = "flat-hook-serifless" f = "flat-hook-serifless"
g = "single-storey-flat-hook-serifless" g = "single-storey-flat-hook-serifless"
i = "hooky" i = "hooky"
j = "flat-hook-serifed" j = "flat-hook-serifed"
k = "symmetric-connected-serifless" k = "symmetric-connected-serifless"
l = "hooky" l = "hooky"
q = "straight-serifless"
t = "flat-hook" t = "flat-hook"
w = "rounded-vertical-sides-serifless" w = "rounded-vertical-sides-serifless"
y = "cursive-flat-hook-serifless" y = "cursive-flat-hook-serifless"
@ -10012,11 +10073,14 @@ micro-sign = "toothless-rounded-serifless"
[composite.ss10.italic] [composite.ss10.italic]
capital-a = "straight-serifless" capital-a = "straight-serifless"
a = "single-storey-tailed" a = "single-storey-top-cut-tailed"
b = "bottom-cut-serifless"
g = "single-storey-flat-hook-top-cut"
i = "serifed-flat-tailed" i = "serifed-flat-tailed"
j = "serifed" j = "serifed"
l = "serifed-flat-tailed" l = "serifed-flat-tailed"
cyrl-a = "single-storey-tailed" q = "top-cut-straight-serifless"
cyrl-a = "single-storey-top-cut-tailed"
cyrl-u = "cursive-flat-hook-serifless" cyrl-u = "cursive-flat-hook-serifless"
[composite.ss10.slab-override.design] [composite.ss10.slab-override.design]
@ -10024,11 +10088,13 @@ capital-a = "round-top-base-serifed"
capital-j = "serifed" capital-j = "serifed"
capital-k = "symmetric-touching-serifed" capital-k = "symmetric-touching-serifed"
capital-w = "straight-vertical-sides-serifed" capital-w = "straight-vertical-sides-serifed"
b = "toothed-serifed"
f = "flat-hook-serifed" f = "flat-hook-serifed"
g = "single-storey-flat-hook-serifed" g = "single-storey-flat-hook-serifed"
i = "serifed" i = "serifed"
k = "symmetric-connected-serifed" k = "symmetric-connected-serifed"
l = "serifed" l = "serifed"
q = "straight-serifed"
w = "rounded-vertical-sides-serifed" w = "rounded-vertical-sides-serifed"
x = "straight-serifed" x = "straight-serifed"
y = "cursive-flat-hook-serifed" y = "cursive-flat-hook-serifed"
@ -10044,10 +10110,12 @@ micro-sign = "toothless-rounded-serifed"
[composite.ss10.slab-override.italic] [composite.ss10.slab-override.italic]
capital-a = "straight-base-serifed" capital-a = "straight-base-serifed"
g = "single-storey-flat-hook-serifless" b = "bottom-cut-serifed"
g = "single-storey-flat-hook-top-cut"
i = "serifed-flat-tailed" i = "serifed-flat-tailed"
k = "symmetric-connected-top-left-and-bottom-right-serifed" k = "symmetric-connected-top-left-and-bottom-right-serifed"
l = "serifed-flat-tailed" l = "serifed-flat-tailed"
q = "top-cut-straight-serifed"
w = "rounded-vertical-sides-motion-serifed" w = "rounded-vertical-sides-motion-serifed"
x = "straight-bilateral-motion-serifed" x = "straight-bilateral-motion-serifed"
y = "cursive-flat-hook-motion-serifed" y = "cursive-flat-hook-motion-serifed"