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

View file

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

View file

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

View file

@ -98,11 +98,17 @@ glyph-block Letter-Latin-Ezh : begin
include : MarkSet.p include : MarkSet.p
include : RevEzhShape XH Descender include : RevEzhShape XH Descender
create-glyph 'lyogh' 0x26E : glyph-proc create-glyph 'lyogh.serifless' : glyph-proc
include : MarkSet.if include : MarkSet.if
include : EzhShape XH Descender 0.4 include : EzhShape XH Descender 0.4
include : VBarLeft SB (XH * 0.1) CAP 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 create-glyph 'ezhtail' 0x1BA : glyph-proc
local b : mix Descender XH 0.25 local b : mix Descender XH 0.25
include : EzhShape XH b nothing nothing 0.5 include : EzhShape XH b nothing nothing 0.5

View file

@ -5,5 +5,5 @@ glyph-module
glyph-block Letter-Cyrillic-Orthography : begin glyph-block Letter-Cyrillic-Orthography : begin
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
orthographic-italic 'f_i' 0xFB01 # orthographic-italic 'f_i' 0xFB01
orthographic-italic 'f_l' 0xFB02 # 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 : ArcEndSerifL ArcEndSerifR
glyph-block-import Letter-Shared-Shapes : ArcStartInwardSerifL ArcStartInwardSerifR glyph-block-import Letter-Shared-Shapes : ArcStartInwardSerifL ArcStartInwardSerifR
glyph-block-import Letter-Shared-Shapes : ArcEndInwardSerifL ArcEndInwardSerifR glyph-block-import Letter-Shared-Shapes : ArcEndInwardSerifL ArcEndInwardSerifR
glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart_RtlLhs
glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Blackboard : BBS BBD
define SLAB-NONE 0 define SLAB-NONE 0
@ -140,18 +141,18 @@ glyph-block Letter-Latin-C : begin
__ : glyph-proc __ : glyph-proc
define [CCurlyTailShape slabType] : 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 fine : AdviceStroke2 3 3 XH
local rinner : ((XH * 0.45) - fine * 1.5) / 2 local rinner : ((XH * 0.45) - fine * 1.5) / 2
local m1 : SB + O + stroke * HVContrast local m1 : SB + O + sw * HVContrast
local x2 : SB + stroke * 0.3 local x2 : SB + sw * 0.3
local y2 : -XH * 0.05 local y2 : -XH * 0.05
if (slabType === SLAB-CLASSICAL) : include : ArcStartSerifR RightSB XH stroke Hook
include : dispiro include : dispiro
match slabType match slabType
[Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle XH stroke Hook [Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle XH sw Hook
__ : list [g4 RightSB (XH - Hook) [widths.lhs stroke]] [hookstart XH] [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) flat (SB + OX) (XH - SmallSmoothA)
curl (SB + OX) SmallSmoothB curl (SB + OX) SmallSmoothB
arcvh arcvh

View file

@ -61,6 +61,7 @@ glyph-block Letter-Latin-Lower-D : begin
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
select-variant 'd' 'd' select-variant 'd' 'd'
select-variant 'd/phoneticLeft' (shapeFrom -- 'd')
derive-glyphs 'dcroat' 0x111 'd' : lambda [src sel] : glyph-proc derive-glyphs 'dcroat' 0x111 'd' : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE 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-DIAGONAL-HOOK] : include : SmallFDiagonalTail df barLeft
[Just CH-SERIF] : include : SmallFBottomSerif df 0 [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 barAtCenter : (counterHook === CH-HOOK) || (counterHook === CH-DIAGONAL-HOOK)
local crossLeft : mix 0 df.leftSB m local crossLeft : mix 0 df.leftSB m
local crossRight : mix df.width df.rightSB m local crossRight : mix df.width df.rightSB m
@ -78,12 +87,12 @@ glyph-block Letter-Latin-Lower-F : begin
local hd : FlatHookDepth df local hd : FlatHookDepth df
include : dispiro include : dispiro
widths.lhs widths.lhs
flat crossRight CAP flat (crossRight + topHookExt) CAP
curl [Math.min (barLeft + hd.x) (crossRight - 0.1)] CAP curl [Math.min (barLeft + hd.x * (1 + topHookHdExt)) (crossRight - 0.1)] CAP
archv.superness DesignParameters.tightHookSuperness archv.superness DesignParameters.tightHookSuperness
flat barLeft [Math.max XH (CAP - hd.y)] flat barLeft [Math.max XH (CAP - hd.y)]
curl barLeft 0 [heading Downward] curl barLeft 0 [heading Downward]
include : HCrossBar.top crossLeft crossRight bh include : HCrossBar.top crossLeft (crossRight + crossBarExt) bh
match counterHook match counterHook
[Just CH-EXTENSION] : include : SmallFDownExtension barLeft [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' } } 'extendedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-EXTENSION } { 'if' 'if' } }
'tailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-HOOK } { 'if' 'if' } } 'tailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-HOOK } { 'if' 'if' } }
'diagonalTailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-DIAGONAL-HOOK } { 'if' 'if' } } 'diagonalTailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHook' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } } 'flatHook' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } }
'flatHookSerifed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } } 'flatHookSerifed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } }
'flatHookExtended' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } } 'flatHookExtended' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } }
'flatHookTailed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } } 'flatHookTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailed' { { NarrowFShape dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } } 'flatHookDiagonalTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } }
'flatHookCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } } 'flatHookCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } }
'flatHookSerifedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } } 'flatHookSerifedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } }
'flatHookExtendedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } } 'flatHookExtendedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } }
'flatHookTailedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } } 'flatHookTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } }
'flatHookDiagonalTailedCrossbarAtXHeight' { { NarrowFShape dfNarrowF } { pNarrowSide XH CH-DIAGONAL-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' } } '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 'turnf' 0x25F (follow -- 'f')
select-variant 'lenisf' 0xAB35 (shapeFrom -- 'f') select-variant 'lenisf' 0xAB35 (shapeFrom -- 'f')
select-variant 'fltail' 0x192 (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' 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 set-base-anchor 'topright' (xMiddle + df.rightSB - df.middle) yTop
### dotless i, i and iota ### dotless i, i and iota
glyph-block-export TailedDotlessXMiddle
define [TailedDotlessXMiddle df addTopSerif] : df.middle - [if addTopSerif 0 : IBalance2 df]
glyph-block-export IotaShape glyph-block-export IotaShape
define [IotaShape] : params [df top [addTopSerif false]] : glyph-proc 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 tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hd : FlatHookDepth df 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 curl (xMiddle + [Math.max (hd.x - HalfStroke * HVContrast + 1) tailLength] + HalfStroke * TanSlope) HalfStroke
include : OverrideILMarks df xMiddle top 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 glyph-block-export ItalicDotlessIShape
define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc
local fine : AdviceStroke 3 local fine : AdviceStroke 3
local shift : (1 - df.div) * 0.2 local shift : ItalicDotlessIShift df
local xBarMiddle : mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift) local xBarMiddle : ItalicDotlessIXMiddle df
local left : xBarMiddle - HalfStroke * HVContrast 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 rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.55 * df.div) local middle : mix left right (0.55 * df.div)
include : dispiro include : dispiro
@ -68,7 +76,7 @@ glyph-block Letter-Latin-Lower-I : begin
glyph-block-export TailedDotlessShape glyph-block-export TailedDotlessShape
define [TailedDotlessShape] : params [df top [setMarks true] [addTopSerif false]] : glyph-proc 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 tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hookScaleX : mix 1 df.div 0.5 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) include : DTailDotlessIShape df XH (addTopSerif -- true)
select-variant 'dotlessi' 0x131 select-variant 'dotlessi' 0x131
select-variant 'dotlessi/compLigRight' (shapeFrom -- 'dotlessi')
create-glyph 'iogonek.dotless' : glyph-proc create-glyph 'iogonek.dotless' : glyph-proc
include [refer-glyph 'dotlessi'] AS_BASE include [refer-glyph 'dotlessi'] AS_BASE
include : refer-glyph "ogonekBelow" include : refer-glyph "ogonekBelow"
CreateDottedComposition 'dotlessi' 'i' 'i' CreateDottedComposition 'dotlessi' 'i' 'i'
CreateDottedComposition 'dotlessi' 'cyrl/Ukrainiani' 0x456 CreateDottedComposition 'dotlessi' 'cyrl/Ukrainiani' 0x456
CreateDottedComposition 'dotlessi/compLigRight' 'i/compLigRight' null
alias 'grek/iota.flatTailed' null 'dotlessi.flatTailed' alias 'grek/iota.flatTailed' null 'dotlessi.flatTailed'
alias 'grek/iota.serifedFlatTailed' null 'dotlessi.serifedFlatTailed' 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 : IotaShape TailedDotlessShape ItalicDotlessIShape
glyph-block-import Letter-Latin-Lower-I : DTailDotlessIShape glyph-block-import Letter-Latin-Lower-I : DTailDotlessIShape
glyph-block-import Letter-Latin-Lower-I : OverrideILMarks OverrideILMarksSerifed 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 : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail glyph-block-import Letter-Shared-Shapes : CurlyTail
create-glyph 'l.hooky' : glyph-proc define [CenterXMiddle df] : return df.middle
local df : DivFrame para.diversityII define [HookyXMiddle df] : df.middle + [IBalance2 df]
set-width df.width define [HookyBottomXMiddle df] : df.middle - [IBalance2 df]
include : df.markSet.b define [SerifedXMiddle df] : df.middle + [IBalance df]
local balance : IBalance2 df define [TailedXMiddle df] : if para.isItalic
local xMiddle : df.middle + balance 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 : OverrideILMarks df df.middle CAP
include : VBar xMiddle 0 (CAP - Stroke) 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 define [ZShapedBody df xMiddle] : glyph-proc
local df : DivFrame para.diversityI include : VBar xMiddle 0 (CAP - Stroke)
set-width df.width include : tagged 'serifLT' : LeftwardTopSerif xMiddle CAP (LongJut * df.div)
include : df.markSet.b include : tagged 'serifRB' : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
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)
create-glyph 'l.serifless' : glyph-proc define [SeriflessBody df xMiddle] : glyph-proc
local df : DivFrame para.diversityII include : VBar xMiddle 0 CAP
set-width df.width
include : df.markSet.b
include : VBar (df.middle) 0 (CAP * 0.6)
include : VBar (df.middle) (CAP * 0.4) CAP
set currentGlyph.autoRefPriority (-2) set currentGlyph.autoRefPriority (-2)
create-glyph 'l.serifed' : glyph-proc define [SerifedBody df xMiddle] : glyph-proc
local df : DivFrame para.diversityI include : VBar xMiddle 0 CAP
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 : tagged 'serifT' include : tagged 'serifT'
LeftwardTopSerif (df.middle + balance) CAP ((LongJut * df.div) - balance) LeftwardTopSerif xMiddle CAP ((LongJut * df.div) - (xMiddle - df.middle))
include : tagged 'serifB' include : tagged 'serifB'
CenterBottomSerif df.middle 0 (LongJut * df.div) CenterBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'l.serifedAsymmetric' : glyph-proc define [SerifedAsymmetricBody df xMiddle] : glyph-proc
local df : DivFrame para.diversityI include : VBar xMiddle 0 CAP
set-width df.width include : LeftwardTopSerif xMiddle CAP
include : df.markSet.b mix Jut ((LongJut * df.div) - (xMiddle - df.middle)) 0.5
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
include : CenterBottomSerif df.middle 0 (LongJut * df.div) 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 define [TailedBody df xMiddle] : if para.isItalic
local df : DivFrame para.diversityII ItalicDotlessIShape df CAP (addTopSerif -- false)
set-width df.width TailedDotlessShape df CAP (addTopSerif -- false)
include : df.markSet.b
if para.isItalic
: then : begin
include : ItalicDotlessIShape df CAP (addTopSerif -- false)
: else : begin
include : TailedDotlessShape df CAP (addTopSerif -- false)
create-glyph 'l.serifedTailed' : glyph-proc define [SerifedTailedBody df xMiddle] : if para.isItalic
local df : DivFrame para.diversityI ItalicDotlessIShape df CAP (addTopSerif -- true)
set-width df.width TailedDotlessShape df CAP (addTopSerif -- true)
include : df.markSet.b
if para.isItalic
: then : begin
include : ItalicDotlessIShape df CAP (addTopSerif -- true)
: else : begin
include : TailedDotlessShape df CAP (addTopSerif -- true)
create-glyph 'l.flatTailed' : glyph-proc define [FlatTailedBody df xMiddle] : IotaShape df CAP (addTopSerif -- false)
local df : DivFrame para.diversityII define [SerifedFlatTailedBody df xMiddle] : IotaShape df CAP (addTopSerif -- true)
set-width df.width define [DiagTailedBody df xMiddle] : DTailDotlessIShape df CAP (addTopSerif -- false)
include : df.markSet.b define [SerifedDiagTailedBody df xMiddle] : DTailDotlessIShape df CAP (addTopSerif -- true)
include : IotaShape df CAP (addTopSerif -- false)
create-glyph 'l.serifedFlatTailed' : glyph-proc define [HookyBottomBody df xMiddle] : 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]
include : OverrideILMarks df xMiddle CAP include : OverrideILMarks df xMiddle CAP
include : VBar xMiddle 0 CAP include : VBar xMiddle 0 CAP
include : RightwardBottomSerif xMiddle 0 (LongJut * df.div) 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' select-variant 'l' 'l'
alias 'cyrl/palochka' 0x4CF 'l' alias 'cyrl/palochka' 0x4CF 'l'
turned 'turnl' 0xA781 'l' HalfAdvance (XH / 2) [TurnMarks 'p'] 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 glyph-block-import Letter-Blackboard : BBS BBD BBBarCenter
create-glyph 'mathbb/l' 0x1D55D : glyph-proc 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) local stretch : Math.sqrt (currentGlyph.advanceWidth / UPM * 2)
include : FlatSlashShape anchor.x anchor.y (0.5 * OverlayStroke) (0.8 * stretch) (0.4 * stretch) 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)] # Curly-tail shape
create-glyph ('ldot.' + suffix) : glyph-proc define [CurlyTailShape df fSerif] : 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
local fine : AdviceStroke 3.5 local fine : AdviceStroke 3.5
local rinner : LongJut / 2 - fine / 2 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 x2 : mix SB m1 0.25
local y2 : - fine local y2 : - fine
include : LeftwardTopSerif Middle CAP LongJut if fSerif : include : LeftwardTopSerif df.middle CAP LongJut
include : dispiro include : dispiro
widths.rhs widths.rhs
flat m1 CAP [heading Downward] flat m1 CAP [heading Downward]
curl m1 (fine + rinner * 2) curl m1 (fine + rinner * 2)
CurlyTail fine rinner m1 0 (m1 + LongJut) x2 y2 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 local df : DivFrame para.diversityI
include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS set-width df.width
include : new-glyph : glyph-proc include : df.markSet.b
include : refer-glyph "tildeAboveOverlay" include : CurlyTailShape df false
include : ApparentTranslate (df.middle - markMiddle) (CAP * 0.525 - [mix aboveMarkBot aboveMarkTop 0.5])
define [Belt middle] : glyph-proc create-glyph 'lCurlyTail.hooky' : 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
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS set-width df.width
include : Belt (df.middle + [IBalance df]) include : df.markSet.b
include : CurlyTailShape df true
create-glyph 'lbeltrtail' 0xA78E : glyph-proc select-variant 'lCurlyTail' 0x234
local df : DivFrame para.diversityI
include [refer-glyph 'lrtail'] AS_BASE ALSO_METRICS
include : Belt (df.middle + [IBalance2 df])
create-glyph 'looprevesh' 0x1AA : glyph-proc 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 local fine : AdviceStroke 4
include : dispiro include : dispiro
widths.center fine 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 arcvh
g4 (Middle - fine * 1) (CAP - fine * 2.5) [heading Leftward] g4 (df.middle - fine * 1) (CAP - fine * 2.5) [heading Leftward]
archv archv
g4 (Middle - fine * 2) (CAP - fine * 1.5) [heading Upward] g4 (df.middle - fine * 2) (CAP - fine * 1.5) [heading Upward]
arcvh arcvh
g4 (Middle - fine * 1) (CAP - fine * 0.5) [heading Rightward] g4 (df.middle - fine * 1) (CAP - fine * 0.5) [heading Rightward]
archv archv
flat Middle (CAP - fine * 1.5) [widths.heading HalfStroke HalfStroke Downward] flat df.middle (CAP - fine * 1.5) [widths.heading HalfStroke HalfStroke Downward]
curl Middle 0 [heading Downward] curl df.middle 0 [heading Downward]
arcvh 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) hookend (O + soEnd) (sw -- fine) (swItalicAdj -- Stroke) (noAdjTerminalY -- true)
g4 (SB + SOBot + HVContrast * soEnd) (hook) [widths.rhs fine] g4 (SB + SOBot + HVContrast * soEnd) (hook) [widths.rhs fine]
define [SmallSStrokePhoneticRight] : begin define [SmallSStrokePhoneticRight st top] : begin
define stroke : AdviceStroke2 2 3 XH define stroke : AdviceStroke2 2 3 top
define ess : AdviceStroke2 2.2 3.2 XH define ess : AdviceStroke2 2.2 3.2 top
define strokeCoeff : StrokeWidthBlend 0 1 stroke define strokeCoeff : StrokeWidthBlend 0 1 stroke
define smooth : adviceSSmooth XH (-1) stroke define smooth : adviceSSmooth top (-1) stroke
return : dispiro return : dispiro
widths.lhs stroke match st
g4 (RightSB + OX) (XH - SHook) [Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle top stroke Hook
hookstart (XH - O) (sw -- stroke) (swItalicAdj -- Stroke) [Just SLAB-INWARD] : list
g4 (SB - OX) (XH - smooth) 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) SNeck (stroke -- ess)
g4 (RightSB + OX - SOBot) (smooth) [widths 0 stroke] g4 (RightSB - SOBot) (smooth) [widths 0 stroke]
arcvh arcvh
flat (Middle - CorrectionOMidS) 0 [widths 0 Stroke] flat (Middle - CorrectionOMidS) 0 [widths 0 Stroke]
curl SB 0 curl SB 0
@ -248,6 +254,11 @@ glyph-block Letter-Latin-S : begin
include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook
include : SAutoSlabEnd doBS 0 [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 create-glyph "revS.\(suffix)" : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : RevSStroke doTS doBS Stroke Ess 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/gheDescender.italic' null (follow -- 'sSwash')
select-variant 'cyrl/gheDHook.italic' null (follow -- 'sSwash') select-variant 'cyrl/gheDHook.italic' null (follow -- 'sSwash')
create-glyph 's.phoneticRight' : glyph-proc select-variant 's/phoneticRight'
include : MarkSet.e
include : SmallSStrokePhoneticRight
create-glyph 'mathbb/S' 0x1D54A : glyph-proc create-glyph 'mathbb/S' 0x1D54A : glyph-proc
include : MarkSet.capital 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 : XStrand false SLAB SB 0 RightSB XH 0.125 0.4 0.36
include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0 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 hookTerminalWidth : AdviceStroke 3.5
define xDiagWidth : 1 * Stroke define xDiagWidth : 1 * Stroke
define yFootHeight : Math.max (0.15 * top) (Stroke * 0.625) 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) yFootHeight
corner (SB + xDiagWidth) 0 corner (SB + xDiagWidth) 0
include : tagged 'strokeBottom' : intersection if [not fRTB] : include : tagged 'strokeBottom' : intersection
spiro-outline spiro-outline
corner (SB + xDiagWidth) yFootHeight corner (SB + xDiagWidth) yFootHeight
corner (SB + xDiagWidth) (-top) corner (SB + xDiagWidth) (-top)
@ -113,8 +113,25 @@ glyph-block Letter-Latin-Z : begin
flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth) flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth)
curl SB (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 [ZCursiveShape] : ZCursiveShapeImpl CAP
define [SmallZCursiveShape] : ZCursiveShapeImpl XH define [SmallZCursiveShape] : ZCursiveShapeImpl XH
define [SmallZCursiveRTB] : ZCursiveShapeImpl XH 1
define [NoBottomStrokeMask top] : glyph-proc define [NoBottomStrokeMask top] : glyph-proc
define [CurlyBottomStrokeMask top] : spiro-outline define [CurlyBottomStrokeMask top] : spiro-outline
@ -158,6 +175,7 @@ glyph-block Letter-Latin-Z : begin
cursive { ZCursiveShape SmallZCursiveShape ZSerifless null NoBottomStrokeMask } cursive { ZCursiveShape SmallZCursiveShape ZSerifless null NoBottomStrokeMask }
cursiveWithCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless DBarOver NoBottomStrokeMask } cursiveWithCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless DBarOver NoBottomStrokeMask }
cursiveWithHorizontalCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless HBarOver NoBottomStrokeMask } cursiveWithHorizontalCrossBar { ZCursiveShape SmallZCursiveShape ZSerifless HBarOver NoBottomStrokeMask }
cursiveRTBase { ZCursiveShape SmallZCursiveRTB ZSerifless null NoBottomStrokeMask }
foreach { suffix { capital small serifs slash bsMask } } [Object.entries ZConfig] : do foreach { suffix { capital small serifs slash bsMask } } [Object.entries ZConfig] : do
create-glyph "Z.\(suffix)" : glyph-proc 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 'smcpZ' 0x1D22 (shapeFrom -- 'z') (follow -- 'Z')
select-variant 'ZReduced' (shapeFrom -- 'Z') select-variant 'ZReduced' (shapeFrom -- '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'
if [query-glyph 'z'] : ZReduced.set [query-glyph 'z'] 'zReduced' if [query-glyph 'z'] : ZReduced.set [query-glyph 'z'] 'zReduced'
select-variant 'ZDesc' 0x2C6B select-variant 'ZDesc' 0x2C6B
@ -296,4 +315,4 @@ glyph-block Letter-Latin-Z : begin
CreateAccentedComposition 'zBar' 0x1B6 'zReduced' 'barOver' CreateAccentedComposition 'zBar' 0x1B6 'zReduced' 'barOver'
CreateAccentedComposition 'ZCaron' 0x17D 'ZReduced' 'caronAbove' CreateAccentedComposition 'ZCaron' 0x17D 'ZReduced' 'caronAbove'
CreateAccentedComposition 'zCaron' 0x17E '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 glyph-block-export DiagonalTailStdDepth
define [DiagonalTailStdDepth df sw] : Math.max (0.5 * sw) 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 glyph-block-export DiagonalTailInnerRadius
define [DiagonalTailInnerRadius] : Math.max (XH / 32) (0.5 * [AdviceStroke2 24 32 XH]) define [DiagonalTailInnerRadius] : Math.max (XH / 32) (0.5 * [AdviceStroke2 24 32 XH])

View file

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

View file

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