Make CV feature for l effective on more derived letters (#1015).

This commit is contained in:
be5invis 2021-05-18 19:07:29 -07:00
parent 418bd46091
commit 8673826826
16 changed files with 495 additions and 250 deletions

View file

@ -1,3 +1,4 @@
* Fix misplaced descender on `U+04AD` (#1005).
* Fix inconsistent serif on italic variants of Cyrillic En (#1006).
* Fix inconsistent serifs on letters with retroflex hooks, like `U+1D99` and `U+01AE` (#1008).
* Make CV feature for `l` effective on more derived letters (#1015).

View file

@ -109,7 +109,7 @@ glyph-block Autobuild-Enclosure-Shared : begin
glyph-block AutoBuild-Enclosure : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Recursive-Build : Miniature
glyph-block-import Autobuild-Enclosure-Shared : CircNameNoCheck CircName CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations getGlyphDefaultShift
define circleWidthClasses {{'NWID' Width 0.12} {'WWID' WideWidth0 0.08}}
@ -728,7 +728,7 @@ glyph-block AutoBuild-Enclosure : begin
glyph-block Autobuild-Fractions : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Recursive-Build : Miniature Thner
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs EnsureComponentGlyphT CreateDerivedFontFromJobs applyRelations
define [createFracImpl prefix demands fine scaleFactor closing] : begin
@ -838,7 +838,7 @@ glyph-block Autobuild-Fractions : begin
glyph-block AutoBuild-Accented-Equal : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Recursive-Build : Miniature
glyph-block-import Marks : aboveMarkBot
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations
@ -1047,6 +1047,7 @@ glyph-block Autobuild-Ligatures : begin
list 0x1F3 { 'd' 'z' }
list 0x478 { 'O' 'y' }
list 0x479 { 'o' 'y' }
list 0x20A7 { 'P' 't.flatHook' }
list 0x20A8 { 'R' 's' }
list 0x20AF { 'D' 'grek/rho' }
list 0x203c { 'exclam' 'exclam' }
@ -1063,16 +1064,11 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Recursive-Build : Miniature Thinner
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations
define [glyphNameIsNotUsed name] : begin
if [query-glyph name] : throw : new Error "Glyph \(name) already exists!"
return name
define [PhoneticLigatureGlyphName a b] : glyphNameIsNotUsed "phonetic{\(a)}{\(b)}"
define [createPhoneticLigatures _shrink1 _shrink2 wadj1 wadj2 records] : begin
define CWidth : Width * para.diversityM
define pendingGlyphs1 : records.map : [record] => record.1
define pendingGlyphs2 : records.map : [record] => record.2
define [createPhoneticLigatures prefix div _shrink1 _shrink2 wadj1 wadj2 demands] : begin
define CWidth : Width * div
define jobs : CollectJobs NON-DECOMPOSABLE NOT-CENTERED prefix "" demands
local shrink1 : clamp 0 1 _shrink1
local shrink2 : clamp 0 1 _shrink2
local kern : SB * shrink1 + SB * shrink2 + 0.5 * Stroke * [mix shrink1 shrink2 0.5] - OX * 2
@ -1084,11 +1080,10 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
set shrink1 : clamp 0 1 tmp-shrink1
set shrink2 : clamp 0 1 tmp-shrink2
define df1 : Thinner pendingGlyphs1 shrink1
define df2 : Thinner pendingGlyphs2 shrink2
local df1 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink1 true
local df2 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink2 true
foreach [{unicode c1 c2 mak} : items-of records] : begin
local glyphName : PhoneticLigatureGlyphName c1 c2
foreach [{gn unicode { c1 c2 } mak} : items-of jobs.nonDecomposable] : if [not : query-glyph gn] : begin
local maskOuts {}
local s 0
@ -1102,9 +1097,9 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
include : Translate (s + dfg1.advanceWidth * wadj1 - kern) 0
set s : s + step
create-glyph glyphName unicode : glyph-proc
create-glyph gn unicode : glyph-proc
set-width CWidth
include : [DivFrame (CWidth / Width)].markSet.(mak || 'if')
if mak : include : [DivFrame (CWidth / Width)].markSet.(mak)
define dfg1 : df1.queryByNameEnsured c1
define dfg2 : df2.queryByNameEnsured c2
local sumChildrenWidth : dfg1.advanceWidth * wadj1 + dfg2.advanceWidth * wadj2
@ -1120,20 +1115,26 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
include : Translate (CWidth / 2) 0
include : Italify
define stdShrink : clamp 0.75 0.9 : linreg 72 0.75 108 0.9 Stroke
createPhoneticLigatures stdShrink stdShrink 1 1 : list
list 0x02A3 'd' 'z' 'b'
list 0x02A4 'd' 'ezh' 'if'
list 0x02A5 'd' 'zCurlyTail' 'if'
list 0x02A6 't.phoneticLeft' 's.phoneticRight' 'b'
list 0x02A7 't.phoneticLeft.extended' 'esh' 'if'
list 0x02A8 't.phoneticLeft' 'cCurlyTail' 'b'
list 0x02A9 'f.phoneticLeft' 'eng' 'if'
list 0x02AA 'l.phoneticLeft' 's.phoneticRight' 'b'
list 0x02AB 'l.phoneticLeft' 'z' 'b'
list 0xAB66 'd' 'zRTailBR' 'if'
list 0xAB67 't.phoneticLeft' 'sRTail' 'if'
list 0x20A7 'P' 't.flatHook' 'b'
applyRelations jobs.relApplications
define stdShrink : clamp 0.75 0.9 : StrokeWidthBlend 0.78 0.9
createPhoneticLigatures 'phonetic' para.diversityM stdShrink stdShrink 1 1 : list
list 0x02A3 { 'd/phoneticLeft' 'zReduced' } 'b'
list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'if'
list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail' } 'if'
list 0x02A6 { 't.phoneticLeft' 's/phoneticRight' } 'b'
list 0x02A7 { 't.phoneticLeft.extended' 'esh' } 'if'
list 0x02A8 { 't.phoneticLeft' 'cCurlyTail' } 'b'
list 0x02A9 { 'f.phoneticLeft' 'eng' } 'if'
list 0x02AA { 'l/phoneticLeft' 's/phoneticRight' } 'b'
list 0x02AB { 'l/phoneticLeft' 'zReduced' } 'b'
list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'if'
list 0xAB67 { 't.phoneticLeft' 'sRTail' } null
define compatLigShrink : clamp 0.75 1 : StrokeWidthBlend 0.78 1
createPhoneticLigatures 'compatLig' 1 compatLigShrink compatLigShrink 1 1 : list
list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } null
list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null
glyph-block Autobuild-Grouped-Digits : begin
glyph-block-import CommonShapes

View file

@ -269,7 +269,7 @@ glyph-block Autobuild-Transformed : begin
list 0x1DA7 'smcpIBarOver'
list 0x1DA8 'jCurlyTail'
list 0x1DAB 'smcpL'
list 0x1DA9 'lrtail'
list 0x1DA9 'lRTail'
list 0x1DAC 'mltail'
list 0x1DAD 'turnmleg'
list 0x1DAE 'nltail'

View file

@ -185,19 +185,24 @@ glyph-block Recursive-Build : begin
forkedPara.diversityM = 1
return : Fork glyphs forkedPara
define [Thinner glyphs p crowd] : begin
define [Thinner glyphs p fMono] : begin
local forkedPara : Object.create para
forkedPara.stroke = [AdviceStroke : fallback crowd 1]
forkedPara.unitWidthScalar = para.unitWidthScalar * p
forkedPara.width = Width * p
forkedPara.accentx = AccentX * p
forkedPara.jut = Jut * p
forkedPara.longjut = LongJut * p
forkedPara.diversityM = 1
if fMono : begin
forkedPara.diversityF = 1
forkedPara.diversityI = 1
forkedPara.diversityII = 1
#forkedPara.hookx = HookX * p
return : Fork glyphs forkedPara
define [Widen glyphs p psb] : begin
local forkedPara : Object.create para
forkedPara.unitWidthScalar = para.unitWidthScalar * p
forkedPara.width = Width * p
forkedPara.sb = SB * [fallback psb p]
forkedPara.accentx = AccentX * p

View file

@ -98,11 +98,17 @@ glyph-block Letter-Latin-Ezh : begin
include : MarkSet.p
include : RevEzhShape XH Descender
create-glyph 'lyogh' 0x26E : glyph-proc
create-glyph 'lyogh.serifless' : glyph-proc
include : MarkSet.if
include : EzhShape XH Descender 0.4
include : VBarLeft SB (XH * 0.1) CAP
create-glyph 'lyogh.hooky' : glyph-proc
include [refer-glyph 'lyogh.serifless'] AS_BASE ALSO_METRICS
include : LeftwardTopSerif SB CAP SideJut
select-variant 'lyogh' 0x26E
create-glyph 'ezhtail' 0x1BA : glyph-proc
local b : mix Descender XH 0.25
include : EzhShape XH b nothing nothing 0.5

View file

@ -5,5 +5,5 @@ glyph-module
glyph-block Letter-Cyrillic-Orthography : begin
glyph-block-import Common-Derivatives
orthographic-italic 'f_i' 0xFB01
orthographic-italic 'f_l' 0xFB02
# orthographic-italic 'f_i' 0xFB01
# orthographic-italic 'f_l' 0xFB02

View file

@ -17,6 +17,7 @@ glyph-block Letter-Latin-C : begin
glyph-block-import Letter-Shared-Shapes : ArcEndSerifL ArcEndSerifR
glyph-block-import Letter-Shared-Shapes : ArcStartInwardSerifL ArcStartInwardSerifR
glyph-block-import Letter-Shared-Shapes : ArcEndInwardSerifL ArcEndInwardSerifR
glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart_RtlLhs
glyph-block-import Letter-Blackboard : BBS BBD
define SLAB-NONE 0
@ -140,18 +141,18 @@ glyph-block Letter-Latin-C : begin
__ : glyph-proc
define [CCurlyTailShape slabType] : glyph-proc
local stroke : AdviceStroke2 2 3 XH
local sw : AdviceStroke2 2 3 XH
local fine : AdviceStroke2 3 3 XH
local rinner : ((XH * 0.45) - fine * 1.5) / 2
local m1 : SB + O + stroke * HVContrast
local x2 : SB + stroke * 0.3
local m1 : SB + O + sw * HVContrast
local x2 : SB + sw * 0.3
local y2 : -XH * 0.05
if (slabType === SLAB-CLASSICAL) : include : ArcStartSerifR RightSB XH stroke Hook
include : dispiro
match slabType
[Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle XH stroke Hook
__ : list [g4 RightSB (XH - Hook) [widths.lhs stroke]] [hookstart XH]
[Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle XH sw Hook
[Just SLAB-INWARD] : InwardSlabArcStart_RtlLhs RightSB Middle XH sw Hook
__ : list [g4 RightSB (XH - Hook) [widths.lhs sw]] [hookstart XH]
flat (SB + OX) (XH - SmallSmoothA)
curl (SB + OX) SmallSmoothB
arcvh

View file

@ -61,6 +61,7 @@ glyph-block Letter-Latin-Lower-D : begin
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
select-variant 'd' 'd'
select-variant 'd/phoneticLeft' (shapeFrom -- 'd')
derive-glyphs 'dcroat' 0x111 'd' : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE

View file

@ -68,7 +68,16 @@ glyph-block Letter-Latin-Lower-F : begin
[Just CH-DIAGONAL-HOOK] : include : SmallFDiagonalTail df barLeft
[Just CH-SERIF] : include : SmallFBottomSerif df 0
define [NarrowFShape df m bh counterHook] : glyph-proc
define [NarrowFShape clcStyle] : function [df m bh counterHook] : glyph-proc
local topHookExt : match clcStyle
[Just 1] Width
[Just 2] Jut
__ 0
local topHookHdExt : match clcStyle
[Just 1] 1
__ 0
local crossBarExt : if (clcStyle === 1) Jut 0
local barAtCenter : (counterHook === CH-HOOK) || (counterHook === CH-DIAGONAL-HOOK)
local crossLeft : mix 0 df.leftSB m
local crossRight : mix df.width df.rightSB m
@ -78,12 +87,12 @@ glyph-block Letter-Latin-Lower-F : begin
local hd : FlatHookDepth df
include : dispiro
widths.lhs
flat crossRight CAP
curl [Math.min (barLeft + hd.x) (crossRight - 0.1)] CAP
flat (crossRight + topHookExt) CAP
curl [Math.min (barLeft + hd.x * (1 + topHookHdExt)) (crossRight - 0.1)] CAP
archv.superness DesignParameters.tightHookSuperness
flat barLeft [Math.max XH (CAP - hd.y)]
curl barLeft 0 [heading Downward]
include : HCrossBar.top crossLeft crossRight bh
include : HCrossBar.top crossLeft (crossRight + crossBarExt) bh
match counterHook
[Just CH-EXTENSION] : include : SmallFDownExtension barLeft
@ -115,16 +124,28 @@ glyph-block Letter-Latin-Lower-F : begin
'extendedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-EXTENSION } { 'if' 'if' } }
'tailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-HOOK } { 'if' 'if' } }
'diagonalTailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHook' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } }
'flatHookSerifed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } }
'flatHookExtended' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } }
'flatHookTailed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHookCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } }
'flatHookSerifedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } }
'flatHookExtendedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } }
'flatHookTailedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHook' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } }
'flatHookSerifed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } }
'flatHookExtended' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } }
'flatHookTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHookCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } }
'flatHookSerifedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } }
'flatHookExtendedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } }
'flatHookTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHookCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } }
'flatHookSerifedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } }
'flatHookExtendedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } }
'flatHookTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHookCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } }
'flatHookSerifedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } }
'flatHookExtendedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } }
'flatHookTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } }
'phoneticLeft' { { StandardSmallFShape [DivFrame 1] } { 1 fbar [if SLAB CH-SERIF CH-NONE] } { 'b' 'p' } }
@ -142,6 +163,8 @@ glyph-block Letter-Latin-Lower-F : begin
select-variant 'turnf' 0x25F (follow -- 'f')
select-variant 'lenisf' 0xAB35 (shapeFrom -- 'f')
select-variant 'fltail' 0x192 (shapeFrom -- 'f')
select-variant 'f/compLigLeft1' (shapeFrom -- 'f')
select-variant 'f/compLigLeft2' (shapeFrom -- 'f')
alias 'dotlessJHookBar' 0x284 'f.dotlessJHookBar'

View file

@ -27,9 +27,12 @@ glyph-block Letter-Latin-Lower-I : begin
set-base-anchor 'topright' (xMiddle + df.rightSB - df.middle) yTop
### dotless i, i and iota
glyph-block-export TailedDotlessXMiddle
define [TailedDotlessXMiddle df addTopSerif] : df.middle - [if addTopSerif 0 : IBalance2 df]
glyph-block-export IotaShape
define [IotaShape] : params [df top [addTopSerif false]] : glyph-proc
local xMiddle : df.middle - [if addTopSerif 0 : IBalance2 df]
local xMiddle : TailedDotlessXMiddle df addTopSerif
local tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hd : FlatHookDepth df
@ -44,13 +47,18 @@ glyph-block Letter-Latin-Lower-I : begin
curl (xMiddle + [Math.max (hd.x - HalfStroke * HVContrast + 1) tailLength] + HalfStroke * TanSlope) HalfStroke
include : OverrideILMarks df xMiddle top
glyph-block-export ItalicDotlessIXMiddle
define [ItalicDotlessIShift df] : (1 - df.div) * 0.2
define [ItalicDotlessIXMiddle df] : begin
return : mix df.leftSB df.rightSB ([StrokeWidthBlend 0.42 0.46] - [ItalicDotlessIShift df])
glyph-block-export ItalicDotlessIShape
define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc
local fine : AdviceStroke 3
local shift : (1 - df.div) * 0.2
local xBarMiddle : mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift)
local shift : ItalicDotlessIShift df
local xBarMiddle : ItalicDotlessIXMiddle df
local left : xBarMiddle - HalfStroke * HVContrast
local right : mix SB df.rightSB (1.1 - shift)
local right : mix df.leftSB df.rightSB (1.1 - shift)
local rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.55 * df.div)
include : dispiro
@ -68,7 +76,7 @@ glyph-block Letter-Latin-Lower-I : begin
glyph-block-export TailedDotlessShape
define [TailedDotlessShape] : params [df top [setMarks true] [addTopSerif false]] : glyph-proc
local xMiddle : df.middle - [if addTopSerif 0 : IBalance2 df]
local xMiddle : TailedDotlessXMiddle df addTopSerif
local tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hookScaleX : mix 1 df.div 0.5
@ -256,12 +264,14 @@ glyph-block Letter-Latin-Lower-I : begin
include : DTailDotlessIShape df XH (addTopSerif -- true)
select-variant 'dotlessi' 0x131
select-variant 'dotlessi/compLigRight' (shapeFrom -- 'dotlessi')
create-glyph 'iogonek.dotless' : glyph-proc
include [refer-glyph 'dotlessi'] AS_BASE
include : refer-glyph "ogonekBelow"
CreateDottedComposition 'dotlessi' 'i' 'i'
CreateDottedComposition 'dotlessi' 'cyrl/Ukrainiani' 0x456
CreateDottedComposition 'dotlessi/compLigRight' 'i/compLigRight' null
alias 'grek/iota.flatTailed' null 'dotlessi.flatTailed'
alias 'grek/iota.serifedFlatTailed' null 'dotlessi.serifedFlatTailed'

View file

@ -13,131 +13,168 @@ glyph-block Letter-Latin-Lower-L : begin
glyph-block-import Letter-Latin-Lower-I : IotaShape TailedDotlessShape ItalicDotlessIShape
glyph-block-import Letter-Latin-Lower-I : DTailDotlessIShape
glyph-block-import Letter-Latin-Lower-I : OverrideILMarks OverrideILMarksSerifed
glyph-block-import Letter-Latin-Lower-I : ItalicDotlessIXMiddle TailedDotlessXMiddle
glyph-block-import Letter-Shared : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail
create-glyph 'l.hooky' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
local balance : IBalance2 df
local xMiddle : df.middle + balance
define [CenterXMiddle df] : return df.middle
define [HookyXMiddle df] : df.middle + [IBalance2 df]
define [HookyBottomXMiddle df] : df.middle - [IBalance2 df]
define [SerifedXMiddle df] : df.middle + [IBalance df]
define [TailedXMiddle df] : if para.isItalic
ItalicDotlessIXMiddle df
TailedDotlessXMiddle df false
define [SerifedTailedXMiddle df] : if para.isItalic
ItalicDotlessIXMiddle df
TailedDotlessXMiddle df true
define [FlatTailedXMiddle df] : TailedDotlessXMiddle df false
define [SerifedFlatTailedXMiddle df] : TailedDotlessXMiddle df true
define [PhoneticLeftXMiddle df] : df.leftSB + Stroke * HVContrast
define [HookyBody df xMiddle] : glyph-proc
include : OverrideILMarks df df.middle CAP
include : VBar xMiddle 0 (CAP - Stroke)
include : LeftwardTopSerif xMiddle CAP (LongJut * df.div)
include : tagged 'serifLT' : LeftwardTopSerif xMiddle CAP (LongJut * df.div)
create-glyph 'l.zshaped' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : VBar (df.middle) 0 (CAP - Stroke)
include : tagged 'serifLT' : LeftwardTopSerif (df.middle) CAP (LongJut * df.div)
include : tagged 'serifRB' : RightwardBottomSerif (df.middle) 0 (LongJut * df.div)
define [ZShapedBody df xMiddle] : glyph-proc
include : VBar xMiddle 0 (CAP - Stroke)
include : tagged 'serifLT' : LeftwardTopSerif xMiddle CAP (LongJut * df.div)
include : tagged 'serifRB' : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
create-glyph 'l.serifless' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
include : VBar (df.middle) 0 (CAP * 0.6)
include : VBar (df.middle) (CAP * 0.4) CAP
define [SeriflessBody df xMiddle] : glyph-proc
include : VBar xMiddle 0 CAP
set currentGlyph.autoRefPriority (-2)
create-glyph 'l.serifed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
local balance : IBalance df
include : OverrideILMarksSerifed df df.middle CAP
include : VBar (df.middle + balance) 0 CAP
define [SerifedBody df xMiddle] : glyph-proc
include : VBar xMiddle 0 CAP
include : tagged 'serifT'
LeftwardTopSerif (df.middle + balance) CAP ((LongJut * df.div) - balance)
LeftwardTopSerif xMiddle CAP ((LongJut * df.div) - (xMiddle - df.middle))
include : tagged 'serifB'
CenterBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'l.serifedAsymmetric' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
local balance : IBalance df
include : OverrideILMarksSerifed df df.middle CAP
include : VBar (df.middle + balance) 0 CAP
include : LeftwardTopSerif (df.middle + balance) CAP
mix Jut ((LongJut * df.div) - balance) 0.5
define [SerifedAsymmetricBody df xMiddle] : glyph-proc
include : VBar xMiddle 0 CAP
include : LeftwardTopSerif xMiddle CAP
mix Jut ((LongJut * df.div) - (xMiddle - df.middle)) 0.5
include : CenterBottomSerif df.middle 0 (LongJut * df.div)
set-base-anchor 'overlay' (df.middle + balance / 2) (CAP * OverlayPos)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.tailed' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
if para.isItalic
: then : begin
include : ItalicDotlessIShape df CAP (addTopSerif -- false)
: else : begin
include : TailedDotlessShape df CAP (addTopSerif -- false)
define [TailedBody df xMiddle] : if para.isItalic
ItalicDotlessIShape df CAP (addTopSerif -- false)
TailedDotlessShape df CAP (addTopSerif -- false)
create-glyph 'l.serifedTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
if para.isItalic
: then : begin
include : ItalicDotlessIShape df CAP (addTopSerif -- true)
: else : begin
include : TailedDotlessShape df CAP (addTopSerif -- true)
define [SerifedTailedBody df xMiddle] : if para.isItalic
ItalicDotlessIShape df CAP (addTopSerif -- true)
TailedDotlessShape df CAP (addTopSerif -- true)
create-glyph 'l.flatTailed' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
include : IotaShape df CAP (addTopSerif -- false)
define [FlatTailedBody df xMiddle] : IotaShape df CAP (addTopSerif -- false)
define [SerifedFlatTailedBody df xMiddle] : IotaShape df CAP (addTopSerif -- true)
define [DiagTailedBody df xMiddle] : DTailDotlessIShape df CAP (addTopSerif -- false)
define [SerifedDiagTailedBody df xMiddle] : DTailDotlessIShape df CAP (addTopSerif -- true)
create-glyph 'l.serifedFlatTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : IotaShape df CAP (addTopSerif -- true)
create-glyph 'l.diagonalTailed' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
include : DTailDotlessIShape df CAP (addTopSerif -- false)
create-glyph 'l.serifedDiagonalTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : DTailDotlessIShape df CAP (addTopSerif -- true)
create-glyph 'l.phoneticLeft' : glyph-proc
local df : DivFrame 1
set-width df.width
include : df.markSet.b
define middle : SB + Stroke * HVContrast
include : dispiro
widths.center
flat middle CAP [heading Downward]
curl middle Hook
arcvh
flat (middle + Hook - HalfStroke) HalfStroke
curl [Math.max RightSB (middle + [Math.max HookX (LongJut * 1.05 * df.div)])] HalfStroke [heading Rightward]
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.hookyBottom' : glyph-proc
local df : DivFrame para.diversityII
set-width df.width
include : df.markSet.b
local xMiddle : df.middle - [IBalance2 df]
define [HookyBottomBody df xMiddle] : glyph-proc
include : OverrideILMarks df xMiddle CAP
include : VBar xMiddle 0 CAP
include : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
define [PhoneticLeftBody fSerif] : function [df xMiddle] : glyph-proc
if fSerif : include : LeftwardTopSerif (xMiddle - HalfStroke * HVContrast) CAP SideJut
include : dispiro
widths.center
flat xMiddle CAP [heading Downward]
curl xMiddle Hook
arcvh
flat (xMiddle + Hook - HalfStroke) HalfStroke
curl [Math.max df.rightSB (xMiddle + [Math.max HookX (LongJut * 1.05 * df.div)])] HalfStroke [heading Rightward]
define [Belt middle] : begin
local fine : AdviceStroke 4.5
local r : XH * 0.05
return : dispiro
widths.rhs fine
flat middle (CapMiddle + r) [heading Leftward]
curl (middle - HalfStroke - r * 1.5) (CapMiddle + r)
archv
g4.down.mid (middle - HalfStroke - r * 2.5) CapMiddle [heading Downward]
arcvh
flat (middle - HalfStroke - r * 1.5) (CapMiddle - r)
curl (middle + HalfStroke + r * 1.5 + fine) (CapMiddle - r)
define SmallLConfig : object
'hooky' { HookyBody HookyXMiddle para.diversityII 0 }
'zshaped' { ZShapedBody CenterXMiddle para.diversityI Stroke }
'serifless' { SeriflessBody CenterXMiddle para.diversityII 0 }
'serifed' { SerifedBody SerifedXMiddle para.diversityI Stroke }
'serifedAsymmetric' { SerifedAsymmetricBody SerifedXMiddle para.diversityI Stroke }
'tailed' { TailedBody TailedXMiddle para.diversityII Stroke }
'serifedTailed' { SerifedTailedBody SerifedTailedXMiddle para.diversityI Stroke }
'flatTailed' { FlatTailedBody FlatTailedXMiddle para.diversityII Stroke }
'serifedFlatTailed' { SerifedFlatTailedBody SerifedFlatTailedXMiddle para.diversityI Stroke }
'diagonalTailed' { DiagTailedBody FlatTailedXMiddle para.diversityII Stroke }
'serifedDiagonalTailed' { SerifedDiagTailedBody SerifedFlatTailedXMiddle para.diversityI Stroke }
'hookyBottom' { HookyBottomBody HookyBottomXMiddle para.diversityII Stroke }
# Decompressed
'hookyDec' { HookyBody HookyXMiddle para.diversityI 0 }
'seriflessDec' { SeriflessBody CenterXMiddle para.diversityI 0 }
'tailedDec' { TailedBody TailedXMiddle para.diversityI Stroke }
'flatTailedDec' { FlatTailedBody FlatTailedXMiddle para.diversityI Stroke }
'diagonalTailedDec' { DiagTailedBody FlatTailedXMiddle para.diversityI Stroke }
'hookyBottomDec' { HookyBottomBody HookyBottomXMiddle para.diversityI Stroke }
# R Tail
'hookyRTail' { HookyBody CenterXMiddle para.diversityII 0 }
'seriflessRTail' { SeriflessBody HookyBottomXMiddle para.diversityII 0 }
# R Tail + Decompress
'hookyRTailDec' { HookyBody CenterXMiddle para.diversityI 0 }
'seriflessRTailDec' { SeriflessBody HookyBottomXMiddle para.diversityI 0 }
#
'hookyPL' { [PhoneticLeftBody 1] PhoneticLeftXMiddle 1 0 }
'seriflessPL' { [PhoneticLeftBody 0] PhoneticLeftXMiddle 1 0 }
foreach { suffix { Body xMiddleT div y0R} } [Object.entries SmallLConfig] : do
create-glyph "l.\(suffix)" : glyph-proc
local df : DivFrame div
set-width df.width
include : df.markSet.b
local xMiddle : xMiddleT df
include : Body df xMiddle
create-glyph "ldot.\(suffix)" : glyph-proc
local df : DivFrame div
set-width df.width
include [refer-glyph "l.\(suffix)"] AS_BASE
include : Translate (-DotRadius / 2) 0
include : RingAt [Math.max (df.middle + HalfStroke + DotRadius) (df.rightSB - DotRadius)] [mix y0R CAP 0.5] DotRadius
create-glyph "lRTail.\(suffix)" : glyph-proc
local df : DivFrame div
set-width df.width
include : refer-glyph "rtailBR"
include : Translate ([xMiddleT df] + HalfStroke * HVContrast) 0
include : refer-glyph "l.\(suffix)"
eject-contour 'serifB'
include : df.markSet.if
create-glyph "lBelt.\(suffix)" : composite-proc
refer-glyph "l.\(suffix)"
Belt [xMiddleT : DivFrame div]
create-glyph "lBeltRTail.\(suffix)" : composite-proc
refer-glyph "lRTail.\(suffix)"
Belt [xMiddleT : DivFrame div]
create-glyph "lTildeOver.\(suffix)" : composite-proc
refer-glyph "l.\(suffix)"
refer-glyph "tildeOver"
select-variant 'l' 'l'
alias 'cyrl/palochka' 0x4CF 'l'
turned 'turnl' 0xA781 'l' HalfAdvance (XH / 2) [TurnMarks 'p']
select-variant 'l/phoneticLeft' (shapeFrom -- 'l')
select-variant 'l/compLigRight' (shapeFrom -- 'l')
select-variant 'ldot' 0x140 (follow -- 'l')
select-variant 'lTildeOver' 0x26B (follow -- 'l/reduced/decompress')
select-variant 'lBelt' 0x26C (follow -- 'l/reduced/decompress')
select-variant 'lRTail' 0x26D (follow -- 'l/reduced/rtail')
select-variant 'lBeltRTail' 0xA78E (follow -- 'l/reduced/rtailDec')
glyph-block-import Letter-Blackboard : BBS BBD BBBarCenter
create-glyph 'mathbb/l' 0x1D55D : glyph-proc
@ -154,97 +191,51 @@ glyph-block Letter-Latin-Lower-L : begin
local stretch : Math.sqrt (currentGlyph.advanceWidth / UPM * 2)
include : FlatSlashShape anchor.x anchor.y (0.5 * OverlayStroke) (0.8 * stretch) (0.4 * stretch)
local LDotOptions : list
list 'hooky' Stroke
list 'zshaped' Stroke
list 'serifed' Stroke
list 'serifedTailed' Stroke
list 'serifless' 0
list 'tailed' Stroke
list 'hookyBottom' Stroke
list 'serifedAsymmetric' Stroke
list 'flatTailed' Stroke
list 'serifedFlatTailed' Stroke
list 'diagonalTailed' Stroke
list 'serifedDiagonalTailed' Stroke
foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)]
create-glyph ('ldot.' + suffix) : glyph-proc
local df : DivFrame ([query-glyph ('l.' + suffix)].advanceWidth / Width)
set-width df.width
include [refer-glyph ('l.' + suffix)] AS_BASE
include : Translate (-DotRadius / 2) 0
include : RingAt [Math.max (df.middle + HalfStroke + DotRadius) (df.rightSB - DotRadius)] [mix y0 CAP 0.5] DotRadius
select-variant 'ldot' 0x140 (follow -- 'l')
create-glyph 'lrtail' 0x26D : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : refer-glyph "rtailBR"
include : Translate (df.middle + [IBalance df] + HalfStroke * HVContrast) 0
include : refer-glyph "l.serifed"
eject-contour 'serifB'
include : df.markSet.if
create-glyph 'lcurlytail' 0x234 : glyph-proc
include : MarkSet.b
# Curly-tail shape
define [CurlyTailShape df fSerif] : glyph-proc
local fine : AdviceStroke 3.5
local rinner : LongJut / 2 - fine / 2
local m1 : Middle + HalfStroke * HVContrast
local m1 : df.middle + HalfStroke * HVContrast
local x2 : mix SB m1 0.25
local y2 : - fine
include : LeftwardTopSerif Middle CAP LongJut
if fSerif : include : LeftwardTopSerif df.middle CAP LongJut
include : dispiro
widths.rhs
flat m1 CAP [heading Downward]
curl m1 (fine + rinner * 2)
CurlyTail fine rinner m1 0 (m1 + LongJut) x2 y2
create-glyph 'ltildeover' 0x26B : glyph-proc
create-glyph 'lCurlyTail.serifless' : glyph-proc
local df : DivFrame para.diversityI
include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS
include : new-glyph : glyph-proc
include : refer-glyph "tildeAboveOverlay"
include : ApparentTranslate (df.middle - markMiddle) (CAP * 0.525 - [mix aboveMarkBot aboveMarkTop 0.5])
set-width df.width
include : df.markSet.b
include : CurlyTailShape df false
define [Belt middle] : glyph-proc
local fine : AdviceStroke 4.5
local r : XH * 0.05
include : dispiro
widths.rhs fine
flat middle (CapMiddle + r) [heading Leftward]
curl (middle - HalfStroke - r * 1.5) (CapMiddle + r)
archv
g4.down.mid (middle - HalfStroke - r * 2.5) CapMiddle [heading Downward]
arcvh
flat (middle - HalfStroke - r * 1.5) (CapMiddle - r)
curl (middle + HalfStroke + r * 1.5 + fine) (CapMiddle - r)
create-glyph 'lbelt' 0x26C : glyph-proc
create-glyph 'lCurlyTail.hooky' : glyph-proc
local df : DivFrame para.diversityI
include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS
include : Belt (df.middle + [IBalance df])
set-width df.width
include : df.markSet.b
include : CurlyTailShape df true
create-glyph 'lbeltrtail' 0xA78E : glyph-proc
local df : DivFrame para.diversityI
include [refer-glyph 'lrtail'] AS_BASE ALSO_METRICS
include : Belt (df.middle + [IBalance2 df])
select-variant 'lCurlyTail' 0x234
create-glyph 'looprevesh' 0x1AA : glyph-proc
include : MarkSet.if
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.if
local fine : AdviceStroke 4
include : dispiro
widths.center fine
g4.down.start Middle (CAP - fine * 1.5) [heading Downward]
g4.down.start df.middle (CAP - fine * 1.5) [heading Downward]
arcvh
g4 (Middle - fine * 1) (CAP - fine * 2.5) [heading Leftward]
g4 (df.middle - fine * 1) (CAP - fine * 2.5) [heading Leftward]
archv
g4 (Middle - fine * 2) (CAP - fine * 1.5) [heading Upward]
g4 (df.middle - fine * 2) (CAP - fine * 1.5) [heading Upward]
arcvh
g4 (Middle - fine * 1) (CAP - fine * 0.5) [heading Rightward]
g4 (df.middle - fine * 1) (CAP - fine * 0.5) [heading Rightward]
archv
flat Middle (CAP - fine * 1.5) [widths.heading HalfStroke HalfStroke Downward]
curl Middle 0 [heading Downward]
flat df.middle (CAP - fine * 1.5) [widths.heading HalfStroke HalfStroke Downward]
curl df.middle 0 [heading Downward]
arcvh
straight.right.end (Middle + HookX) (-Hook)
straight.right.end (df.middle + HookX) (-Hook)

View file

@ -143,18 +143,24 @@ glyph-block Letter-Latin-S : begin
hookend (O + soEnd) (sw -- fine) (swItalicAdj -- Stroke) (noAdjTerminalY -- true)
g4 (SB + SOBot + HVContrast * soEnd) (hook) [widths.rhs fine]
define [SmallSStrokePhoneticRight] : begin
define stroke : AdviceStroke2 2 3 XH
define ess : AdviceStroke2 2.2 3.2 XH
define [SmallSStrokePhoneticRight st top] : begin
define stroke : AdviceStroke2 2 3 top
define ess : AdviceStroke2 2.2 3.2 top
define strokeCoeff : StrokeWidthBlend 0 1 stroke
define smooth : adviceSSmooth XH (-1) stroke
define smooth : adviceSSmooth top (-1) stroke
return : dispiro
widths.lhs stroke
g4 (RightSB + OX) (XH - SHook)
hookstart (XH - O) (sw -- stroke) (swItalicAdj -- Stroke)
g4 (SB - OX) (XH - smooth)
match st
[Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle top stroke Hook
[Just SLAB-INWARD] : list
g4 RightSB (top - DToothlessRise) [widths.lhs stroke]
g4 (Middle - CorrectionOMidX * stroke) (top - O)
archv
__ : list
g4 RightSB (top - Hook) [widths.lhs stroke]
hookstart (top - O) (sw -- stroke) (swItalicAdj -- Stroke)
g4 SB (top - smooth)
SNeck (stroke -- ess)
g4 (RightSB + OX - SOBot) (smooth) [widths 0 stroke]
g4 (RightSB - SOBot) (smooth) [widths 0 stroke]
arcvh
flat (Middle - CorrectionOMidS) 0 [widths 0 Stroke]
curl SB 0
@ -248,6 +254,11 @@ glyph-block Letter-Latin-S : begin
include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook
include : SAutoSlabEnd doBS 0 [AdviceStroke2 2 3 XH] Hook
create-glyph "s/phoneticRight.\(suffix)" : glyph-proc
include : MarkSet.e
include : SmallSStrokePhoneticRight doTS XH
include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook
create-glyph "revS.\(suffix)" : glyph-proc
include : MarkSet.capital
include : RevSStroke doTS doBS Stroke Ess
@ -354,9 +365,7 @@ glyph-block Letter-Latin-S : begin
select-variant 'cyrl/gheDescender.italic' null (follow -- 'sSwash')
select-variant 'cyrl/gheDHook.italic' null (follow -- 'sSwash')
create-glyph 's.phoneticRight' : glyph-proc
include : MarkSet.e
include : SmallSStrokePhoneticRight
select-variant 's/phoneticRight'
create-glyph 'mathbb/S' 0x1D54A : glyph-proc
include : MarkSet.capital

View file

@ -59,7 +59,7 @@ glyph-block Letter-Latin-Z : begin
include : XStrand false SLAB SB 0 RightSB XH 0.125 0.4 0.36
include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0
define [ZCursiveShapeImpl top] : glyph-proc
define [ZCursiveShapeImpl top fRTB] : glyph-proc
define hookTerminalWidth : AdviceStroke 3.5
define xDiagWidth : 1 * Stroke
define yFootHeight : Math.max (0.15 * top) (Stroke * 0.625)
@ -97,7 +97,7 @@ glyph-block Letter-Latin-Z : begin
corner (SB + xDiagWidth) yFootHeight
corner (SB + xDiagWidth) 0
include : tagged 'strokeBottom' : intersection
if [not fRTB] : include : tagged 'strokeBottom' : intersection
spiro-outline
corner (SB + xDiagWidth) yFootHeight
corner (SB + xDiagWidth) (-top)
@ -113,8 +113,25 @@ glyph-block Letter-Latin-Z : begin
flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth)
curl SB (yTailDepth)
if fRTB : include : tagged 'strokeBottom' : intersection
spiro-outline
corner (SB + xDiagWidth) yFootHeight
corner (SB + xDiagWidth) (-top)
corner (2 * Width) (-top)
corner (2 * Width) (top)
corner RightSB top
union
VBarRight RightSB 0 yHookDepth hookTerminalWidth
dispiro
flat RightSB O [widths.rhs.heading Stroke Leftward]
g2 (RightSB - xHookDepth) O [widths.rhs.heading Stroke Leftward]
flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth)
curl SB (yTailDepth)
define [ZCursiveShape] : ZCursiveShapeImpl CAP
define [SmallZCursiveShape] : ZCursiveShapeImpl XH
define [SmallZCursiveRTB] : ZCursiveShapeImpl XH 1
define [NoBottomStrokeMask top] : glyph-proc
define [CurlyBottomStrokeMask top] : spiro-outline
@ -158,6 +175,7 @@ glyph-block Letter-Latin-Z : begin
cursive { ZCursiveShape SmallZCursiveShape ZSerifless null NoBottomStrokeMask }
cursiveWithCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless DBarOver NoBottomStrokeMask }
cursiveWithHorizontalCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless HBarOver NoBottomStrokeMask }
cursiveRTBase { ZCursiveShape SmallZCursiveRTB ZSerifless null NoBottomStrokeMask }
foreach { suffix { capital small serifs slash bsMask } } [Object.entries ZConfig] : do
create-glyph "Z.\(suffix)" : glyph-proc
@ -213,6 +231,7 @@ glyph-block Letter-Latin-Z : begin
select-variant 'smcpZ' 0x1D22 (shapeFrom -- 'z') (follow -- 'Z')
select-variant 'ZReduced' (shapeFrom -- 'Z')
select-variant 'zReduced' (shapeFrom -- 'z')
select-variant 'zReduced/rtailBase' (shapeFrom -- 'z')
if [query-glyph 'Z'] : ZReduced.set [query-glyph 'Z'] 'ZReduced'
if [query-glyph 'z'] : ZReduced.set [query-glyph 'z'] 'zReduced'
select-variant 'ZDesc' 0x2C6B
@ -296,4 +315,4 @@ glyph-block Letter-Latin-Z : begin
CreateAccentedComposition 'zBar' 0x1B6 'zReduced' 'barOver'
CreateAccentedComposition 'ZCaron' 0x17D 'ZReduced' 'caronAbove'
CreateAccentedComposition 'zCaron' 0x17E 'zReduced' 'caronAbove'
CreateAccentedComposition 'zRTailBR' 0x290 'zReduced' 'rtailBR'
CreateAccentedComposition 'zRTailBR' 0x290 'zReduced/rtailBase' 'rtailBR'

View file

@ -333,7 +333,7 @@ glyph-block Letter-Shared-Shapes : begin
glyph-block-export DiagonalTailStdDepth
define [DiagonalTailStdDepth df sw] : Math.max (0.5 * sw)
df.div * [Math.hypot HookX Hook] - 0.25 * sw
df.div * para.unitWidthScalar * [Math.hypot HookX Hook] - 0.25 * sw
glyph-block-export DiagonalTailInnerRadius
define [DiagonalTailInnerRadius] : Math.max (XH / 32) (0.5 * [AdviceStroke2 24 32 XH])

View file

@ -43,6 +43,7 @@ isItalic = false # Use italic shapes?
isOblique = false # Use oblique shapes?
spacing = 1 # Spacing indicator
unitWidthScalar = 1 # Scalar of unit width, used in derived builds
# Powerline-specific parameters
powerlineScaleY = 1 # Vertical scale

View file

@ -1571,54 +1571,63 @@ tag = "cv29"
rank = 1
description = "`d` with bottom-right tooth, and without serifs"
selector.d = "toothedSerifless"
selector."d/phoneticLeft" = "toothedSerifless"
selector.dhooktop = "toothedSerifless"
[prime.d.variants.toothless-corner-serifless]
rank = 2
description = "`d` without bottom-right tooth, with a corner transition, and without serif"
selector.d = "toothlessCornerSerifless"
selector."d/phoneticLeft" = "toothedSerifless"
selector.dhooktop = "toothlessCornerSerifless"
[prime.d.variants.toothless-rounded-serifless]
rank = 3
description = "`d` without bottom-right tooth, with a rounded transition, and without serif"
selector.d = "toothlessRoundedSerifless"
selector."d/phoneticLeft" = "toothedSerifless"
selector.dhooktop = "toothlessRoundedSerifless"
[prime.d.variants.tailed-serifless]
rank = 4
description = "`d` with a bottom-right tail, and without serif"
selector.d = "tailedSerifless"
selector."d/phoneticLeft" = "toothedSerifless"
selector.dhooktop = "tailedSerifless"
[prime.d.variants.toothed-top-serifed]
rank = 5
description = "`d` with bottom-right tooth and top serif"
selector.d = "toothedTopSerifed"
selector."d/phoneticLeft" = "toothedTopSerifed"
selector.dhooktop = "toothedSerifless"
[prime.d.variants.toothed-serifed]
rank = 6
description = "`d` with serifs"
selector.d = "toothedSerifed"
selector."d/phoneticLeft" = "toothedTopSerifed"
selector.dhooktop = "toothedBottomSerifed"
[prime.d.variants.toothless-corner-serifed]
rank = 7
description = "`d` without bottom-right tooth, with a corner transition and top serif"
selector.d = "toothlessCornerSerifed"
selector."d/phoneticLeft" = "toothedTopSerifed"
selector.dhooktop = "toothlessCornerSerifless"
[prime.d.variants.toothless-rounded-serifed]
rank = 8
description = "`d` without bottom-right tooth, with a rounded transition and top serif"
selector.d = "toothlessRoundedSerifed"
selector."d/phoneticLeft" = "toothedTopSerifed"
selector.dhooktop = "toothlessRoundedSerifless"
[prime.d.variants.tailed-serifed]
rank = 9
description = "`d` with a bottom-right tail and top serif"
selector.d = "tailedSerifed"
selector."d/phoneticLeft" = "toothedTopSerifed"
selector.dhooktop = "tailedSerifless"
@ -1653,6 +1662,8 @@ tag = "cv31"
rank = 1
description = "`f` without bottom serif, hook or exension"
selector.f = "serifless"
selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2"
selector.lenisf = "serifless"
selector.fltail = "tailed"
@ -1660,6 +1671,8 @@ selector.fltail = "tailed"
rank = 2
description = "`f` with bottom serif"
selector.f = "serifed"
selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector.lenisf = "serifless"
selector.fltail = "tailed"
@ -1667,6 +1680,8 @@ selector.fltail = "tailed"
rank = 3
description = "`f` with bottom hook"
selector.f = "tailed"
selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector.lenisf = "serifless"
selector.fltail = "tailed"
@ -1674,6 +1689,8 @@ selector.fltail = "tailed"
rank = 4
description = "`f` with bar extended to descender"
selector.f = "extended"
selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector.lenisf = "serifless"
selector.fltail = "tailed"
@ -1681,6 +1698,8 @@ selector.fltail = "tailed"
rank = 5
description = "`f` with bottom diagonal tail"
selector.f = "diagonalTailed"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector.lenisf = "serifless"
selector.fltail = "tailed"
@ -1688,6 +1707,8 @@ selector.fltail = "tailed"
rank = 6
description = "`f` without bottom serif, hook or exension; crossbar is placed right at X-height"
selector.f = "seriflessCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2"
selector.lenisf = "seriflessCrossbarAtXHeight"
selector.fltail = "tailedCrossbarAtXHeight"
@ -1695,6 +1716,8 @@ selector.fltail = "tailedCrossbarAtXHeight"
rank = 7
description = "`f` with bottom serif; crossbar is placed right at X-height"
selector.f = "serifedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector.lenisf = "seriflessCrossbarAtXHeight"
selector.fltail = "tailedCrossbarAtXHeight"
@ -1702,6 +1725,8 @@ selector.fltail = "tailedCrossbarAtXHeight"
rank = 8
description = "`f` with bottom hook; crossbar is placed right at X-height"
selector.f = "tailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector.lenisf = "seriflessCrossbarAtXHeight"
selector.fltail = "tailedCrossbarAtXHeight"
@ -1709,6 +1734,8 @@ selector.fltail = "tailedCrossbarAtXHeight"
rank = 9
description = "`f` with bar extended to descender; crossbar is placed right at X-height"
selector.f = "extendedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector.lenisf = "seriflessCrossbarAtXHeight"
selector.fltail = "tailedCrossbarAtXHeight"
@ -1716,6 +1743,8 @@ selector.fltail = "tailedCrossbarAtXHeight"
rank = 10
description = "`f` with bottom diagonal tail; crossbar is placed right at X-height"
selector.f = "diagonalTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector.lenisf = "seriflessCrossbarAtXHeight"
selector.fltail = "tailedCrossbarAtXHeight"
@ -1723,6 +1752,8 @@ selector.fltail = "tailedCrossbarAtXHeight"
rank = 11
description = "`f` with flat top hook, without bottom serif, hook or exension"
selector.f = "flatHook"
selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2"
selector.lenisf = "flatHook"
selector.fltail = "flatHookTailed"
@ -1730,6 +1761,8 @@ selector.fltail = "flatHookTailed"
rank = 12
description = "`f` with flat top hook and bottom serif"
selector.f = "flatHookSerifed"
selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector.lenisf = "flatHook"
selector.fltail = "flatHookTailed"
@ -1737,6 +1770,8 @@ selector.fltail = "flatHookTailed"
rank = 13
description = "`f` with flat top hook and bottom hook"
selector.f = "flatHookTailed"
selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector.lenisf = "flatHook"
selector.fltail = "flatHookTailed"
@ -1744,6 +1779,8 @@ selector.fltail = "flatHookTailed"
rank = 14
description = "`f` with flat top hook and bar extended to descender"
selector.f = "flatHookExtended"
selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector.lenisf = "flatHook"
selector.fltail = "flatHookTailed"
@ -1751,6 +1788,8 @@ selector.fltail = "flatHookTailed"
rank = 15
description = "`f` with falt hook and bottom diagonal tail"
selector.f = "flatHookDiagonalTailed"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector.lenisf = "flatHook"
selector.fltail = "flatHookTailed"
@ -1758,6 +1797,8 @@ selector.fltail = "flatHookTailed"
rank = 16
description = "`f` with flat top hook, without bottom serif, hook or exension; crossbar is placed right at X-height"
selector.f = "flatHookCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2"
selector.lenisf = "flatHookCrossbarAtXHeight"
selector.fltail = "flatHookTailedCrossbarAtXHeight"
@ -1765,6 +1806,8 @@ selector.fltail = "flatHookTailedCrossbarAtXHeight"
rank = 17
description = "`f` with flat top hook, bottom serif; crossbar is placed right at X-height"
selector.f = "flatHookSerifedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector.lenisf = "flatHookCrossbarAtXHeight"
selector.fltail = "flatHookTailedCrossbarAtXHeight"
@ -1772,6 +1815,8 @@ selector.fltail = "flatHookTailedCrossbarAtXHeight"
rank = 18
description = "`f` with flat top hook, bottom hook; crossbar is placed right at X-height"
selector.f = "flatHookTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector.lenisf = "flatHookCrossbarAtXHeight"
selector.fltail = "flatHookTailedCrossbarAtXHeight"
@ -1779,6 +1824,8 @@ selector.fltail = "flatHookTailedCrossbarAtXHeight"
rank = 19
description = "`f` with flat top hook, bar extended to descender; crossbar is placed right at X-height"
selector.f = "flatHookExtendedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector.lenisf = "flatHookCrossbarAtXHeight"
selector.fltail = "flatHookTailedCrossbarAtXHeight"
@ -1786,6 +1833,8 @@ selector.fltail = "flatHookTailedCrossbarAtXHeight"
rank = 20
description = "`f` with falt hook and bottom diagonal tail; crossbar is placed right at X-height"
selector.f = "flatHookDiagonalTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector.lenisf = "flatHookCrossbarAtXHeight"
selector.fltail = "flatHookTailedCrossbarAtXHeight"
@ -1901,61 +1950,73 @@ tag = "cv34"
rank = 1
description = "Serifed `i`"
selector.dotlessi = "serifed"
selector."dotlessi/compLigRight" = "serifed"
[prime.i.variants.zshaped]
rank = 2
description = "Z-shaped `i`"
selector.dotlessi = "zshaped"
selector."dotlessi/compLigRight" = "zshaped"
[prime.i.variants.serifless]
rank = 3
description = "`i` like a straight line"
selector.dotlessi = "serifless"
selector."dotlessi/compLigRight" = "hooky"
[prime.i.variants.hooky]
rank = 4
description = "Hooky `i`"
selector.dotlessi = "hooky"
selector."dotlessi/compLigRight" = "hooky"
[prime.i.variants.hooky-bottom]
rank = 5
description = "`i` with a sharp-turning horizontal tail"
selector.dotlessi = "hookyBottom"
selector."dotlessi/compLigRight" = "zshaped"
[prime.i.variants.serifed-asymmetric]
rank = 6
description = "`i` with shorter top serif and full bottom serif"
selector.dotlessi = "serifedAsymmetric"
selector."dotlessi/compLigRight" = "serifed"
[prime.i.variants.tailed]
rank = 7
description = "`i` with curly tail"
selector.dotlessi = "tailed"
selector."dotlessi/compLigRight" = "serifedTailed"
[prime.i.variants.serifed-tailed]
rank = 8
description = "`i` with top serif and curly tail"
selector.dotlessi = "serifedTailed"
selector."dotlessi/compLigRight" = "serifedTailed"
[prime.i.variants.flat-tailed]
rank = 9
description = "`i` with curly-then-flat tail"
selector.dotlessi = "flatTailed"
selector."dotlessi/compLigRight" = "serifedFlatTailed"
[prime.i.variants.serifed-flat-tailed]
rank = 10
description = "`i` with top serif and curly-then-flat tail"
selector.dotlessi = "serifedFlatTailed"
selector."dotlessi/compLigRight" = "serifedFlatTailed"
[prime.i.variants.diagonal-tailed]
rank = 11
description = "`i` with diagonal tail"
selector.dotlessi = "diagonalTailed"
selector."dotlessi/compLigRight" = "serifedDiagonalTailed"
[prime.i.variants.serifed-diagonal-tailed]
rank = 12
description = "`i` with top serif and diagonal tail"
selector.dotlessi = "serifedDiagonalTailed"
selector."dotlessi/compLigRight" = "serifedDiagonalTailed"
@ -2235,61 +2296,145 @@ tag = "cv37"
rank = 1
description = "Serifed `l`"
selector.l = "serifed"
selector."l/compLigRight" = "serifed"
selector."l/reduced/decompress" = "serifed"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.serifless]
rank = 2
description = "`l` like a straight line"
selector.l = "serifless"
selector."l/compLigRight" = "hooky"
selector."l/reduced/decompress" = "seriflessDec"
selector."l/reduced/rtail" = "seriflessRTail"
selector."l/reduced/rtailDec" = "seriflessRTailDec"
selector."l/phoneticLeft" = "seriflessPL"
selector.lCurlyTail = "serifless"
selector.lyogh = "serifless"
[prime.l.variants.hooky]
rank = 3
description = "Hooky `l`"
selector.l = "hooky"
selector."l/compLigRight" = "hooky"
selector."l/reduced/decompress" = "hookyDec"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.zshaped]
rank = 4
description = "Z-shaped `l`"
selector.l = "zshaped"
selector."l/compLigRight" = "zshaped"
selector."l/reduced/decompress" = "zshaped"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.hooky-bottom]
rank = 5
description = "`l` with a straight sharp-turning horizontal tail"
selector.l = "hookyBottom"
selector."l/compLigRight" = "zshaped"
selector."l/reduced/decompress" = "hookyBottomDec"
selector."l/reduced/rtail" = "seriflessRTail"
selector."l/reduced/rtailDec" = "seriflessRTailDec"
selector."l/phoneticLeft" = "seriflessPL"
selector.lCurlyTail = "serifless"
selector.lyogh = "serifless"
[prime.l.variants.serifed-asymmetric]
rank = 6
description = "`l` with shorter top serif and full bottom serif"
selector.l = "serifedAsymmetric"
selector."l/compLigRight" = "serifed"
selector."l/reduced/decompress" = "serifedAsymmetric"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.tailed]
rank = 7
description = "`l` with curly tail"
selector.l = "tailed"
selector."l/compLigRight" = "serifedTailed"
selector."l/reduced/decompress" = "tailedDec"
selector."l/reduced/rtail" = "seriflessRTail"
selector."l/reduced/rtailDec" = "seriflessRTailDec"
selector."l/phoneticLeft" = "seriflessPL"
selector.lCurlyTail = "serifless"
selector.lyogh = "serifless"
[prime.l.variants.serifed-tailed]
rank = 8
description = "`l` with top serif and curly tail"
selector.l = "serifedTailed"
selector."l/compLigRight" = "serifedTailed"
selector."l/reduced/decompress" = "serifedTailed"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.flat-tailed]
rank = 9
description = "`l` with curly-then-flat tail"
selector.l = "flatTailed"
selector."l/compLigRight" = "serifedFlatTailed"
selector."l/reduced/decompress" = "flatTailedDec"
selector."l/reduced/rtail" = "seriflessRTail"
selector."l/reduced/rtailDec" = "seriflessRTailDec"
selector."l/phoneticLeft" = "seriflessPL"
selector.lCurlyTail = "serifless"
selector.lyogh = "serifless"
[prime.l.variants.serifed-flat-tailed]
rank = 10
description = "`l` with top serif and curly-then-flat tail"
selector.l = "serifedFlatTailed"
selector."l/compLigRight" = "serifedFlatTailed"
selector."l/reduced/decompress" = "serifedFlatTailed"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.l.variants.diagonal-tailed]
rank = 11
description = "`l` with diagonal tail"
selector.l = "diagonalTailed"
selector."l/compLigRight" = "serifedDiagonalTailed"
selector."l/reduced/decompress" = "diagonalTailedDec"
selector."l/reduced/rtail" = "seriflessRTail"
selector."l/reduced/rtailDec" = "seriflessRTailDec"
selector."l/phoneticLeft" = "seriflessPL"
selector.lCurlyTail = "serifless"
selector.lyogh = "serifless"
[prime.l.variants.serifed-diagonal-tailed]
rank = 12
description = "`l` with top serif and diagonal tail"
selector.l = "serifedDiagonalTailed"
selector."l/compLigRight" = "serifedDiagonalTailed"
selector."l/reduced/decompress" = "serifedDiagonalTailed"
selector."l/reduced/rtail" = "hookyRTail"
selector."l/reduced/rtailDec" = "hookyRTailDec"
selector."l/phoneticLeft" = "hookyPL"
selector.lCurlyTail = "hooky"
selector.lyogh = "hooky"
[prime.m]
@ -2734,6 +2879,7 @@ description = "Serifless `s`"
selector.s = "serifless"
selector."cyrl/ge.italic" = "serifless"
selector.sSwash = "serifless"
selector."s/phoneticRight" = "serifless"
[prime.s.variants.unilateral-serifed]
rank = 2
@ -2741,6 +2887,7 @@ description = "`s` with single serif at top"
selector.s = "unilateralSerifed"
selector."cyrl/ge.italic" = "serifless"
selector.sSwash = "unilateralSerifed"
selector."s/phoneticRight" = "unilateralSerifed"
[prime.s.variants.bilateral-serifed]
rank = 3
@ -2748,6 +2895,7 @@ description = "`s` with serifs at both end"
selector.s = "bilateralSerifed"
selector."cyrl/ge.italic" = "bilateralSerifed"
selector.sSwash = "unilateralSerifed"
selector."s/phoneticRight" = "unilateralSerifed"
[prime.s.variants.unilateral-inward-serifed]
rank = 4
@ -2755,6 +2903,7 @@ description = "`s` with single inward serif at top"
selector.s = "unilateralInwardSerifed"
selector."cyrl/ge.italic" = "serifless"
selector.sSwash = "unilateralInwardSerifed"
selector."s/phoneticRight" = "unilateralInwardSerifed"
[prime.s.variants.bilateral-inward-serifed]
rank = 5
@ -2762,6 +2911,7 @@ description = "`s` with inward serifs at both end"
selector.s = "bilateralInwardSerifed"
selector."cyrl/ge.italic" = "bilateralInwardSerifed"
selector.sSwash = "unilateralInwardSerifed"
selector."s/phoneticRight" = "unilateralInwardSerifed"
@ -3241,6 +3391,7 @@ rank = 1
description = "Straight `z` without serifs"
selector.z = "straightSerifless"
selector."zReduced" = "straightSerifless"
selector."zReduced/rtailBase" = "straightSerifless"
selector.zDesc = "straightSerifless"
[prime.z.variants.straight-serifless-with-crossbar]
@ -3248,6 +3399,7 @@ rank = 2
description = "Straight `z` with a diagonal crossbar, and without serifs"
selector.z = "straightSeriflessWithCrossBar"
selector."zReduced" = "straightSerifless"
selector."zReduced/rtailBase" = "straightSerifless"
selector.zDesc = "straightSerifless"
[prime.z.variants.straight-serifless-with-horizontal-crossbar]
@ -3255,6 +3407,7 @@ rank = 3
description = "Straight `z` with a horizontal crossbar, and without serifs"
selector.z = "straightSeriflessWithHorizontalCrossBar"
selector.zReduced = "straightSerifless"
selector."zReduced/rtailBase" = "straightSerifless"
selector.zDesc = "straightSerifless"
[prime.z.variants.curly-serifless]
@ -3262,6 +3415,7 @@ rank = 4
description = "Curly `z` without serifs"
selector.z = "curlySerifless"
selector.zReduced = "curlySerifless"
selector."zReduced/rtailBase" = "curlySerifless"
selector.zDesc = "curlySerifless"
[prime.z.variants.curly-serifless-with-crossbar]
@ -3269,6 +3423,7 @@ rank = 5
description = "Curly `z` with a diagonal crossbar, and without serifs"
selector.z = "curlySeriflessWithCrossBar"
selector.zReduced = "curlySerifless"
selector."zReduced/rtailBase" = "curlySerifless"
selector.zDesc = "curlySerifless"
[prime.z.variants.curly-serifless-with-horizontal-crossbar]
@ -3276,6 +3431,7 @@ rank = 6
description = "Curly `z` with a horizontal crossbar, and without serifs"
selector.z = "curlySeriflessWithHorizontalCrossBar"
selector.zReduced = "curlySerifless"
selector."zReduced/rtailBase" = "curlySerifless"
selector.zDesc = "curlySerifless"
[prime.z.variants.straight-serifed]
@ -3283,6 +3439,7 @@ rank = 7
description = "Straight `z` with top and bottom serifs"
selector.z = "straightSerifed"
selector.zReduced = "straightSerifed"
selector."zReduced/rtailBase" = "straightSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.straight-serifed-with-crossbar]
@ -3290,6 +3447,7 @@ rank = 8
description = "Straight `z` with a diagonal crossbar and serifs"
selector.z = "straightSerifedWithCrossBar"
selector.zReduced = "straightSerifed"
selector."zReduced/rtailBase" = "straightSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.straight-serifed-with-horizontal-crossbar]
@ -3297,6 +3455,7 @@ rank = 9
description = "Straight `z` with a horizontal crossbar and serifs"
selector.z = "straightSerifedWithHorizontalCrossBar"
selector.zReduced = "straightSerifed"
selector."zReduced/rtailBase" = "straightSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.curly-serifed]
@ -3304,6 +3463,7 @@ rank = 10
description = "Curly `z` woth top and bottom serifs"
selector.z = "curlySerifed"
selector.zReduced = "curlySerifed"
selector."zReduced/rtailBase" = "curlySerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.curly-serifed-with-crossbar]
@ -3311,6 +3471,7 @@ rank = 11
description = "Curly `z` with a diagonal crossbar and serifs"
selector.z = "curlySerifedWithCrossBar"
selector.zReduced = "curlySerifed"
selector."zReduced/rtailBase" = "curlySerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.curly-serifed-with-horizontal-crossbar]
@ -3318,6 +3479,7 @@ rank = 12
description = "Curly `z` with a horizontal crossbar and serifs"
selector.z = "curlySerifedWithHorizontalCrossBar"
selector.zReduced = "curlySerifed"
selector."zReduced/rtailBase" = "curlySerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.straight-bottom-serifed]
@ -3325,6 +3487,7 @@ rank = 13
description = "Standard `z` with serif at bottom"
selector.z = "straightBottomSerifed"
selector.zReduced = "straightBottomSerifed"
selector."zReduced/rtailBase" = "straightBottomSerifed"
selector.zDesc = "straightSerifless"
[prime.z.variants.straight-bottom-serifed-with-crossbar]
@ -3332,6 +3495,7 @@ rank = 14
description = "Standard `z` with a diagonal crossbar and serif at bottom"
selector.z = "straightBottomSerifedWithCrossbar"
selector.zReduced = "straightBottomSerifed"
selector."zReduced/rtailBase" = "straightBottomSerifed"
selector.zDesc = "straightSerifless"
[prime.z.variants.straight-bottom-serifed-with-horizontal-crossbar]
@ -3339,6 +3503,7 @@ rank = 15
description = "Standard `z` with a horizontal crossbar and serif at bottom"
selector.z = "straightBottomSerifedWithHorizontalCrossBar"
selector.zReduced = "straightBottomSerifed"
selector."zReduced/rtailBase" = "straightBottomSerifed"
selector.zDesc = "straightSerifless"
[prime.z.variants.curly-bottom-serifed-with-crossbar]
@ -3346,6 +3511,7 @@ rank = 16
description = "Curly `z` with serif at bottom"
selector.z = "curlyBottomSerifed"
selector.zReduced = "curlyBottomSerifed"
selector."zReduced/rtailBase" = "curlyBottomSerifed"
selector.zDesc = "curlySerifless"
[prime.z.variants.curly-bottom-serifed-with-horizontal-crossbar]
@ -3353,6 +3519,7 @@ rank = 17
description = "Curly `z` with a diagonal crossbar and serif at bottom"
selector.z = "curlyBottomSerifedWithCrossbar"
selector.zReduced = "curlyBottomSerifed"
selector."zReduced/rtailBase" = "curlyBottomSerifed"
selector.zDesc = "curlySerifless"
[prime.z.variants.curly-bottom-serifed]
@ -3360,6 +3527,7 @@ rank = 18
description = "Curly `z` with a horizontal crossbar and serif at bottom"
selector.z = "curlyBottomSerifedWithHorizontalCrossBar"
selector.zReduced = "curlyBottomSerifed"
selector."zReduced/rtailBase" = "curlyBottomSerifed"
selector.zDesc = "curlySerifless"
[prime.z.variants.straight-top-serifed]
@ -3367,6 +3535,7 @@ rank = 19
description = "Standard `z` with serif at top"
selector.z = "straightTopSerifed"
selector.zReduced = "straightTopSerifed"
selector."zReduced/rtailBase" = "straightTopSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.straight-top-serifed-with-crossbar]
@ -3374,6 +3543,7 @@ rank = 20
description = "Standard `z` with a diagonal crossbar and serif at top"
selector.z = "straightTopSerifedWithCrossbar"
selector.zReduced = "straightTopSerifed"
selector."zReduced/rtailBase" = "straightTopSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.straight-top-serifed-with-horizontal-crossbar]
@ -3381,6 +3551,7 @@ rank = 21
description = "Standard `z` with a horizontal crossbar and serif at top"
selector.z = "straightTopSerifedWithHorizontalCrossBar"
selector.zReduced = "straightTopSerifed"
selector."zReduced/rtailBase" = "straightTopSerifed"
selector.zDesc = "straightTopSerifed"
[prime.z.variants.curly-top-serifed]
@ -3388,6 +3559,7 @@ rank = 22
description = "Curly `z` with serif at top"
selector.z = "curlyTopSerifed"
selector.zReduced = "curlyTopSerifed"
selector."zReduced/rtailBase" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.curly-top-serifed-with-crossbar]
@ -3395,6 +3567,7 @@ rank = 23
description = "Curly `z` with a diagonal crossbar and serif at top"
selector.z = "curlyTopSerifedWithCrossbar"
selector.zReduced = "curlyTopSerifed"
selector."zReduced/rtailBase" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.curly-top-serifed-with-horizontal-crossbar]
@ -3402,6 +3575,7 @@ rank = 24
description = "Curly `z` with a horizontal crossbar and serif at top"
selector.z = "curlyTopSerifedWithHorizontalCrossBar"
selector.zReduced = "curlyTopSerifed"
selector."zReduced/rtailBase" = "curlyTopSerifed"
selector.zDesc = "curlyTopSerifed"
[prime.z.variants.cursive]
@ -3409,6 +3583,7 @@ rank = 25
description = "Cursive `z`"
selector.z = "cursive"
selector.zReduced = "cursive"
selector."zReduced/rtailBase" = "cursiveRTBase"
selector.zDesc = "cursive"
[prime.z.variants.cursive-with-crossbar]
@ -3416,6 +3591,7 @@ rank = 26
description = "Cursive `z` with a diagonal cross bar"
selector.z = "cursiveWithCrossBar"
selector.zReduced = "cursive"
selector."zReduced/rtailBase" = "cursiveRTBase"
selector.zDesc = "cursive"
[prime.z.variants.cursive-with-horizontal-crossbar]
@ -3423,6 +3599,7 @@ rank = 27
description = "Cursive `z` with a horizontal cross bar"
selector.z = "cursiveWithHorizontalCrossBar"
selector.zReduced = "cursive"
selector."zReduced/rtailBase" = "cursiveRTBase"
selector.zDesc = "cursive"