* Add Characters

- LATIN SMALL LIGATURE FI (`U+FB01`) (#1497).
  - LATIN SMALL LIGATURE FFI (`U+FB03`) (#1497).
  - LATIN SMALL LIGATURE FFL (`U+FB04`) (#1497).
  - LATIN SMALL LIGATURE LONG S T (`U+FB05`) (#1497).
  - LATIN SMALL LIGATURE ST (`U+FB06`) (#1497).
This commit is contained in:
be5invis 2023-04-25 23:36:17 -07:00
parent 8311194896
commit da10f30b65
11 changed files with 253 additions and 94 deletions

View file

@ -996,8 +996,8 @@ from = ["iosevka-etoile"]
# Shape weight : affects the shape of the glyphs # Shape weight : affects the shape of the glyphs
# Menu weight : affects the font menu name # Menu weight : affects the font menu name
# CSS weight : affects the webfont CSS "font-weight" property # CSS weight : affects the webfont CSS "font-weight" property
# IMPORTANT : Currently "menu" property only support 100, 200, 300, 400, 500, 600, 700, 800, 900. # IMPORTANT : Currently "menu" property only support 100, 200, 300, 350, 400, 450, 500, 600, 700,
# and "shape" properly only supports number between 100 and 900 (inclusive). # 800, 900, and "shape" properly only supports number between 100 and 900 (inclusive).
[weights.thin] [weights.thin]
shape = 100 shape = 100

6
changes/22.1.1.md Normal file
View file

@ -0,0 +1,6 @@
* Add Characters
- LATIN SMALL LIGATURE FI (`U+FB01`) (#1497).
- LATIN SMALL LIGATURE FFI (`U+FB03`) (#1497).
- LATIN SMALL LIGATURE FFL (`U+FB04`) (#1497).
- LATIN SMALL LIGATURE LONG S T (`U+FB05`) (#1497).
- LATIN SMALL LIGATURE ST (`U+FB06`) (#1497).

View file

@ -159,10 +159,6 @@ function nameFontImpl(records, platformID, encodingID, languageID, nameID, value
records.push({ platformID, encodingID, languageID, nameID, value }); records.push({ platformID, encodingID, languageID, nameID, value });
} }
function isRBIZ(weight, slope) {
return (weight === 400 || weight === 700) && (slope === "normal" || slope === "italic");
}
function getStyle(weight, width, slope) { function getStyle(weight, width, slope) {
const weightPart = weightToMenuStyleMap[weight] ?? "W" + weight; const weightPart = weightToMenuStyleMap[weight] ?? "W" + weight;
const widthPart = widthToMenuStyleMap[width] ?? "Wd" + width; const widthPart = widthToMenuStyleMap[width] ?? "Wd" + width;
@ -182,6 +178,7 @@ const weightToMenuStyleMap = {
100: "Thin", 100: "Thin",
200: "Extralight", 200: "Extralight",
300: "Light", 300: "Light",
350: "SemiLight",
400: "", 400: "",
450: "Book", 450: "Book",
500: "Medium", 500: "Medium",
@ -210,6 +207,7 @@ const weightToMenuStyleMapShort = {
100: "Th", 100: "Th",
200: "XLt", 200: "XLt",
300: "Lt", 300: "Lt",
350: "SmLt",
400: "", 400: "",
450: "Bk", 450: "Bk",
500: "Md", 500: "Md",

View file

@ -1242,72 +1242,96 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations
glyph-block-import Autobuild-Transformed-Shared : ToSuperscript ToSubscript glyph-block-import Autobuild-Transformed-Shared : ToSuperscript ToSubscript
define [createPhoneticLigatures tfm prefix div _shrink1 _shrink2 wadj1 wadj2 kKern demands] : begin define [createPhoneticLigatures tfm prefix div mockNParts _shrink kKern demands] : begin
define CWidth : Width * div local ww0 : Width * div
define MockWidth : CWidth / [fallback tfm.crowdAdjScale 1] local wwM : ww0 / [fallback tfm.crowdAdjScale 1]
define jobs : CollectJobs NON-DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL prefix "" demands local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL prefix "" demands
local shrink1 : clamp 0 1 _shrink1 local shrink : clamp 0 1 _shrink
local shrink2 : clamp 0 1 _shrink2
local kern 0 local kern 0
foreach [cycle : range 0 4] : begin foreach [cycle : range 0 8] : begin
set kern : kKern * (SB * shrink1 + SB * shrink2 + 0.5 * Stroke * [mix shrink1 shrink2 0.5] - OX * 2) set kern : kKern * (2 * SB * shrink + (0.5 * Stroke * shrink * HVContrast - OX * 2))
local tmp-shrink1 : (shrink1 * MockWidth + kern * shrink1 / (shrink1 + shrink2)) / MockWidth local tmpShrink : (wwM + kern * (mockNParts - 1)) / (mockNParts * Width)
local tmp-shrink2 : (shrink2 * MockWidth + kern * shrink2 / (shrink1 + shrink2)) / MockWidth set shrink : Math.max _shrink : clamp 0 1 tmpShrink
set shrink1 : clamp 0 1 tmp-shrink1
set shrink2 : clamp 0 1 tmp-shrink2
local df1 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink1 true tfm.crowd tfm.crowdAdjScale local thinFont : CreateDerivedFontFromJobs jobs {} : function [gs]
local df2 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink2 true tfm.crowd tfm.crowdAdjScale Thinner gs shrink true tfm.crowd tfm.crowdAdjScale
# TODO: we need a better geometry to do such minkovski sums define [LigaturePlaceholderImpl aw markPlacement mak] : begin
define [createMaskout c1 c2 s] : begin define gni : '.phonetic-ligature-placeholder@' + [{aw markPlacement}.join '/']
define dfg1 : df1.queryByNameEnsured c1 if [query-glyph gni] : return gni
define dfg2 : df2.queryByNameEnsured c2 create-glyph gni : glyph-proc
return : WithTransform [Translate (s + dfg1.advanceWidth * wadj1 - kern) 0] dfg2 set-width aw
if mak : include : [DivFrame div].markSet.(mak)
set-base-anchor 'enclosureInner' markPlacement 0
set-base-anchor 'slash' (aw / 2) (Ascender / 2)
include : tfm div
return gni
foreach [{gn unicode { c1 c2 } mak} : items-of jobs.nonDecomposable] : if [not : query-glyph gn] : begin define [LigaturePartImpl thinFont compress markDist maskPos] : lambda [gidPart] : begin
define gni : '.phonetic-ligature-part.' + gidPart + '@' + [{ prefix compress markDist maskPos }.join '/']
if [query-glyph gni] : return gni
create-glyph gni : glyph-proc
set-width 0
include : difference
thinFont.queryByNameEnsured gidPart
MaskRight maskPos
include : Ungizmo
include : Scale compress 1
include : Regizmo
set-mark-anchor 'enclosureInner' 0 0 markDist 0
include : tfm div
return gni
local step (-OX) define [LigatureImpl job decomposable] : if [not : query-glyph gn] : begin
local s step local { gn unicode components mak } job
local dist (Stroke * 2)
local maskOuts : list local sumChildrenWidth 0
createMaskout c1 c2 0.01 local effectiveGlyphCount 0
createMaskout c1 c2 (dist - 0.01) local originals {}
while (s < dist) : begin local dfgs {}
maskOuts.push : createMaskout c1 c2 s foreach { i component } [components.entries] : begin
set s : s + step set originals.(i) : query-glyph component
set dfgs.(i) : thinFont.queryByNameEnsured component
if (originals.(i).advanceWidth > 0) : inc effectiveGlyphCount
set sumChildrenWidth : sumChildrenWidth + dfgs.(i).advanceWidth
local refW : sumChildrenWidth - kern * (effectiveGlyphCount - 1)
local compRefWw wwM
local compress : clamp 0 1 (compRefWw / refW)
create-glyph gn unicode : glyph-proc create-glyph gn unicode : glyph-proc
set-width CWidth local decomposition { }
if mak : include : [DivFrame (MockWidth / Width)].markSet.(mak) local baseOffset : ww0 / 2 - refW * compress / 2
define dfg1 : df1.queryByNameEnsured c1 foreach { i component } [components.entries] : do
define dfg2 : df2.queryByNameEnsured c2 local currentIsMark : 0 == originals.(i).advanceWidth
local sumChildrenWidth : dfg1.advanceWidth * wadj1 + dfg2.advanceWidth * wadj2
local refW : sumChildrenWidth - kern
include dfg2
include : Translate (dfg1.advanceWidth * wadj1 - kern) 0
local leftHalf : intersection dfg1
Rect (CAP * 2) (Descender * 2) (-MockWidth) (dfg1.advanceWidth * wadj1 - kern + dfg2.advanceWidth * wadj2 / 2)
include leftHalf
# include : difference.apply null { leftHalf :: maskOuts }
include : Ungizmo
include : Translate (-refW / 2) 0
include : Scale [clamp 0 1 ((MockWidth - SB * 1.25) / (MockWidth - SB * 2) * MockWidth / refW)] 1
include : Translate (CWidth / 2) 0
include : Regizmo
include : tfm div local componentAdvance : if currentIsMark 0 : compress * (dfgs.(i).advanceWidth - kern)
local maskPos : dfgs.(i).advanceWidth - kern + [if ((i + 1) < effectiveGlyphCount) (dfgs.(i + 1).advanceWidth / 2) ww0]
if (i === 0) : begin
local placeholder : LigaturePlaceholderImpl ww0 baseOffset
decomposition.push placeholder
include [refer-glyph placeholder] AS_BASE ALSO_METRICS
if currentIsMark : then : begin
include [refer-glyph component]
: else : begin
local part : EnsureComponentGlyphT component
LigaturePartImpl thinFont compress componentAdvance maskPos
decomposition.push part
include [refer-glyph part]
if decomposable : CvDecompose.set currentGlyph decomposition
foreach job [items-of jobs.nonDecomposable] : LigatureImpl job false
foreach job [items-of jobs.decomposableJobs] : LigatureImpl job true
applyRelations jobs.relApplications applyRelations jobs.relApplications
define [ToLetter] : glyph-proc define [ToLetter] : glyph-proc
define [AddSlash] : glyph-proc define stdShrink : clamp 0.625 0.9 : StrokeWidthBlend 0.625 0.9
include [refer-glyph 'wideSlashOver'] createPhoneticLigatures ToLetter 'phonetic' para.diversityM 2 stdShrink 1 : list
define stdShrink : clamp 0.75 0.9 : StrokeWidthBlend 0.75 0.9
createPhoneticLigatures ToLetter 'phonetic' para.diversityM stdShrink stdShrink 1 1 1 : list
list 0x02A3 { 'd/phoneticLeft' 'z' } 'b' list 0x02A3 { 'd/phoneticLeft' 'z' } 'b'
list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'if' list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'if'
list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail' } 'if' list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail' } 'if'
@ -1319,10 +1343,17 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
list 0x02AB { 'l/phoneticLeft' 'z' } 'b' list 0x02AB { 'l/phoneticLeft' 'z' } 'b'
list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'if' list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'if'
list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'p' list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'p'
list 0xFB00 { 'f' 'f' } null
list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } null list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } null
list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null
list 0xFB05 { 'longs/flatExt' 't/phoneticLeft2' } null
list 0xFB06 { 's/compLigLeft' 't/phoneticLeft3' } null
createPhoneticLigatures ToSuperscript 'phoneticSuperscript' 1 stdShrink stdShrink 1 1 1 : list createPhoneticLigatures ToLetter 'phonetic2' para.diversityM 3 stdShrink 1 : list
list 0xFB03 { 'f/compLigLeft1' 'f/compLigLeft1' 'dotlessi/compLigRight' } null
list 0xFB04 { 'f/compLigLeft3' 'f/compLigLeft2' 'l/compLigRight' } null
createPhoneticLigatures ToSuperscript 'phoneticSuperscript' 1 2 stdShrink 1 : list
list 0x10787 { 'd/phoneticLeft' 'z' } 'b' list 0x10787 { 'd/phoneticLeft' 'z' } 'b'
list 0x1078A { 'd/phoneticLeft' 'ezh' } 'if' list 0x1078A { 'd/phoneticLeft' 'ezh' } 'if'
list 0x10789 { 'd/phoneticLeft' 'zCurlyTail' } 'if' list 0x10789 { 'd/phoneticLeft' 'zCurlyTail' } 'if'
@ -1335,11 +1366,11 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
list 0x10788 { 'd/phoneticLeft' 'zRTailBR' } 'if' list 0x10788 { 'd/phoneticLeft' 'zRTailBR' } 'if'
list 0x107AD { 't/phoneticLeft1' 'sRTail' } 'p' list 0x107AD { 't/phoneticLeft1' 'sRTail' } 'p'
createPhoneticLigatures ToSubscript 'tenSubscript' 1 1 1 1 1 0.5 : list createPhoneticLigatures ToSubscript 'tenSubscript' 1 2 1 0.5 : list
list 0x23E8 { 'one.lnum' 'zero.lnum' } 'capital' list 0x23E8 { 'one.lnum' 'zero.lnum' } 'capital'
createPhoneticLigatures AddSlash 'thSlash' 1 stdShrink stdShrink 1 1 1 : list createPhoneticLigatures ToLetter 'thSlash' 1 2 stdShrink 1 : list
list 0x1D7A { 't/phoneticLeft1' 'h' } 'b' list 0x1D7A { 't/phoneticLeft1' 'h' 'wideSlashOver' } 'b'
glyph-block Autobuild-Double-Emotions : begin glyph-block Autobuild-Double-Emotions : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes

View file

@ -124,7 +124,25 @@ glyph-block Letter-Latin-Long-S : begin
create-forked-glyph 'longsbar.flatHookTailed' : LongSSymmetricOverlayBar Middle create-forked-glyph 'longsbar.flatHookTailed' : LongSSymmetricOverlayBar Middle
create-glyph 'longs.flatHookExt' : glyph-proc
include : MarkSet.b
local m : Middle - JBalance - HalfStroke * HVContrast
include : LongSFlatHookNoTailShape m 0 SLAB
include : HBar.t RightSB (2 * Width) Ascender
create-glyph 'longs.flatHookDescendingExt' : glyph-proc
include : MarkSet.if
local m : Middle - JBalance - HalfStroke * HVContrast
include : LongSFlatHookNoTailShape m Descender false
include : HBar.t RightSB (2 * Width) Ascender
create-glyph 'longs.flatHookTailedExt' : glyph-proc
include : MarkSet.if
include : LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook
include : HBar.t (Middle + HookX + (0.25 - TanSlope) * Stroke) (2 * Width) Ascender
select-variant 'longs' 0x17F select-variant 'longs' 0x17F
select-variant 'longs/flatExt' (shapeFrom -- 'longs')
select-variant 'longsbar' 0x1E9D (follow -- 'longs') select-variant 'longsbar' 0x1E9D (follow -- 'longs')
alias 'esh' 0x283 'longs.flatHookTailed' alias 'esh' 0x283 'longs.flatHookTailed'

View file

@ -84,11 +84,15 @@ glyph-block Letter-Latin-Lower-F : begin
local topHookExt : match clcStyle local topHookExt : match clcStyle
[Just 1] Width [Just 1] Width
[Just 2] Jut [Just 2] Jut
[Just 3] Jut
__ 0 __ 0
local topHookHdExt : match clcStyle local topHookHdExt : match clcStyle
[Just 1] 1 [Just 1] 1
__ 0 __ 0
local crossBarExt : if (clcStyle === 1) Jut 0 local crossBarExt : match clcStyle
[Just 1] Jut
[Just 3] 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
@ -163,6 +167,12 @@ glyph-block Letter-Latin-Lower-F : begin
'flatHookTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-HOOK } 'if' } 'flatHookTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-HOOK } 'if' }
'flatHookDiagonalTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } 'if' } 'flatHookDiagonalTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } 'if' }
'flatHookCLC3' { { [NarrowFShape 3] dfNarrowF } { pNarrowSide fbar CH-NONE } 'b' }
'flatHookSerifedCLC3' { { [NarrowFShape 3] dfNarrowF } { pNarrowSide fbar CH-SERIF } 'b' }
'flatHookExtendedCLC3' { { [NarrowFShape 3] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } 'if' }
'flatHookTailedCLC3' { { [NarrowFShape 3] dfNarrowF } { pNarrowSide fbar CH-HOOK } 'if' }
'flatHookDiagonalTailedCLC3' { { [NarrowFShape 3] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } 'if' }
foreach { suffix {{Body df} {pBar yBar ch} mk}} [Object.entries SmallFConfig] : do foreach { suffix {{Body df} {pBar yBar ch} mk}} [Object.entries SmallFConfig] : do
create-glyph "f.\(suffix)" : glyph-proc create-glyph "f.\(suffix)" : glyph-proc
set-width df.width set-width df.width
@ -186,6 +196,7 @@ glyph-block Letter-Latin-Lower-F : begin
select-variant 'fLTail' 0x192 (shapeFrom -- 'f') select-variant 'fLTail' 0x192 (shapeFrom -- 'f')
select-variant 'f/compLigLeft1' (shapeFrom -- 'f') select-variant 'f/compLigLeft1' (shapeFrom -- 'f')
select-variant 'f/compLigLeft2' (shapeFrom -- 'f') select-variant 'f/compLigLeft2' (shapeFrom -- 'f')
select-variant 'f/compLigLeft3' (shapeFrom -- 'f')
select-variant 'f/phoneticLeft' (shapeFrom -- 'f') select-variant 'f/phoneticLeft' (shapeFrom -- 'f')
select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless') select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless')

View file

@ -26,8 +26,8 @@ glyph-block Letter-Latin-Lower-T : begin
define Standard : namespace define Standard : namespace
export : define [BarLeftPos df] : xSmallTBarLeftT df export : define [BarLeftPos df] : xSmallTBarLeftT df
export : define [HookShapeT sink df offset top bot sw] : begin export : define [HookShapeT sink df fCross offset top bot sw] : begin
local xLeft : xSmallTBarLeftT df local xLeft : if fCross (df.middle - HalfStroke * HVContrast) [xSmallTBarLeftT df]
local hookx : xLeft + [Math.max ((df.width - df.leftSB * 2) * 0.75 + Stroke * 0.25 * HVContrast) (Stroke * HVContrast * 2.25)] local hookx : xLeft + [Math.max ((df.width - df.leftSB * 2) * 0.75 + Stroke * 0.25 * HVContrast) (Stroke * HVContrast * 2.25)]
local turn : [mix xLeft hookx 0.5] + CorrectionOMidS local turn : [mix xLeft hookx 0.5] + CorrectionOMidS
local adb : Math.max Hook ((turn - xLeft) * 1.2) local adb : Math.max Hook ((turn - xLeft) * 1.2)
@ -50,7 +50,7 @@ glyph-block Letter-Latin-Lower-T : begin
export : define [Body df top bot] : glyph-proc export : define [Body df top bot] : glyph-proc
include : CrossBar df include : CrossBar df
local g : include : HookShapeT dispiro df 0 top bot Stroke local g : include : HookShapeT dispiro df false 0 top bot Stroke
local gEnd g.knots.(g.knots.length - 1) local gEnd g.knots.(g.knots.length - 1)
set-base-anchor 'bottomright' gEnd.x gEnd.y set-base-anchor 'bottomright' gEnd.x gEnd.y
@ -61,9 +61,13 @@ glyph-block Letter-Latin-Lower-T : begin
export : define [Retroflex df top bot] : Flat.Retroflex df top bot export : define [Retroflex df top bot] : Flat.Retroflex df top bot
export : define [PRBody df top bot] : glyph-proc
include : CrossBar df
include : HookShapeT dispiro df true 0 top bot Stroke
define DiagTail : namespace define DiagTail : namespace
define [HookShape df top bot sw] : begin define [HookShape df fCross top bot sw] : begin
local xMid : [xSmallTBarLeftT df] + HalfStroke * HVContrast local xMid : if fCross df.middle ([xSmallTBarLeftT df] + HalfStroke * HVContrast)
return : dispiro return : dispiro
flat xMid top [widths.center.heading sw Downward] flat xMid top [widths.center.heading sw Downward]
DiagonalTailR df xMid bot [DiagonalTailStdDepth [DivFrame : Math.sqrt df.div] sw] sw DiagonalTailR df xMid bot [DiagonalTailStdDepth [DivFrame : Math.sqrt df.div] sw] sw
@ -75,7 +79,7 @@ glyph-block Letter-Latin-Lower-T : begin
export : define [Body df top] : glyph-proc export : define [Body df top] : glyph-proc
include : Standard.CrossBar df include : Standard.CrossBar df
local g : include : HookShape df top 0 Stroke local g : include : HookShape df false top 0 Stroke
local gEnd g.rhsKnots.(g.rhsKnots.length - 1) local gEnd g.rhsKnots.(g.rhsKnots.length - 1)
set-base-anchor 'bottomright' gEnd.x gEnd.y set-base-anchor 'bottomright' gEnd.x gEnd.y
@ -85,39 +89,51 @@ glyph-block Letter-Latin-Lower-T : begin
export : define [Retroflex df top bot] : Flat.Retroflex df top bot export : define [Retroflex df top bot] : Flat.Retroflex df top bot
export : define [PRBody df top] : glyph-proc
include : Standard.CrossBar df
include : HookShape df true top 0 Stroke
define Flat : namespace define Flat : namespace
define [CrossLeft df] : mix 0 df.leftSB [mix 1 df.div 2] define [CrossLeft df] : mix 0 df.leftSB [mix 1 df.div 2]
define [CrossRight df] : mix df.width df.rightSB [mix 1 df.div 2] define [CrossRight df] : mix df.width df.rightSB [mix 1 df.div 2]
define NORMAL 0
define CROSS 1
define RETROFLEX 2
define PR 3
export : define [BarLeftPos df] : [mix [CrossLeft df] [CrossRight df] 0.42] - 0.375 * HVContrast * Stroke export : define [BarLeftPos df] : [mix [CrossLeft df] [CrossRight df] 0.42] - 0.375 * HVContrast * Stroke
export : define [Body df top bot] : Impl false false df top bot 0 export : define [Body df top bot] : Impl NORMAL df top bot 0
export : define [Retroflex df top bot] : Impl false true df top bot 0 export : define [Retroflex df top bot] : Impl CROSS df top bot 0
export : define [CrossRTBody df top bot] : Impl true true df top bot 0 export : define [CrossRTBody df top bot] : Impl RETROFLEX df top bot 0
export : define [PRBody df top bot] : Impl PR df top bot 0
define [Impl fCross fRetroflex df top bot ext] : glyph-proc
define [Impl shape df top bot ext] : glyph-proc
local xCrossLeft : CrossLeft df local xCrossLeft : CrossLeft df
local xCrossRight : CrossRight df local xCrossRight : CrossRight df
local xBarLeft : if fCross [df.middle - 0.5 * HVContrast * Stroke] [BarLeftPos df] local xBarLeft : match shape
([Just CROSS] || [Just PR]) : df.middle - 0.5 * HVContrast * Stroke
__ : BarLeftPos df
local hd : FlatHookDepth df local hd : FlatHookDepth df
define xTailEnd : piecewise define xTailEnd : match shape
fRetroflex : xBarLeft + HookX + HalfStroke * HVContrast [Just RETROFLEX] : xBarLeft + HookX + HalfStroke * HVContrast
fCross : xBarLeft + hd.x __ xCrossRight
true xCrossRight
include : union include : union
HCrossBar.top xCrossLeft (xCrossRight + ext) yCrossBar HCrossBar.top xCrossLeft (xCrossRight + ext) yCrossBar
dispiro dispiro
widths.rhs widths.rhs
if (fRetroflex || fCross) if (shape === RETROFLEX || shape === CROSS)
straight.left.start xTailEnd bot then : straight.left.start xTailEnd bot
list else : list
flat xCrossRight bot flat xCrossRight bot
curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] bot curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] bot
archv.superness DesignParameters.tightHookSuperness archv.superness DesignParameters.tightHookSuperness
flat xBarLeft [if fRetroflex (bot + Hook + HalfStroke) hd.y] flat xBarLeft [if (shape === RETROFLEX) (bot + Hook + HalfStroke) hd.y]
curl xBarLeft top [heading Upward] curl xBarLeft top [heading Upward]
set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top
@ -187,6 +203,10 @@ glyph-block Letter-Latin-Lower-T : begin
define xBarLeft : xSmallTBarLeftT df define xBarLeft : xSmallTBarLeftT df
include : HBar.b xBarLeft RightSB 0 include : HBar.b xBarLeft RightSB 0
export : define [PRBody df top bot] : glyph-proc
include : VBar.m df.middle 0 top
include : HCrossBar.top df.middle (df.middle + df.div * LongJut) yCrossBar
define SmallTConfig : object define SmallTConfig : object
standard { [DivFrame 1] Standard Ascender } standard { [DivFrame 1] Standard Ascender }
diagonalTailed { dfNarrowT DiagTail Ascender } diagonalTailed { dfNarrowT DiagTail Ascender }
@ -217,6 +237,13 @@ glyph-block Letter-Latin-Lower-T : begin
include : df.markSet.b include : df.markSet.b
include : (Style.PLBody || Style.Body) df top 0 include : (Style.PLBody || Style.Body) df top 0
create-glyph "t/phoneticLeft3.\(suffix)" : glyph-proc
set-width df.width
include : df.markSet.b
include : difference
(Style.PRBody || Style.Body) df top 0
MaskLeft [mix df.leftSB (df.middle - HVContrast * HalfStroke) 0.5]
create-glyph "t/teshLeft.\(suffix)" : glyph-proc create-glyph "t/teshLeft.\(suffix)" : glyph-proc
define df1 : DivFrame 1 define df1 : DivFrame 1
set-width df1.width set-width df1.width
@ -276,6 +303,7 @@ glyph-block Letter-Latin-Lower-T : begin
select-variant 't/teshLeft' (follow -- 't') select-variant 't/teshLeft' (follow -- 't')
select-variant 't/phoneticLeft1' (shapeFrom -- 't') select-variant 't/phoneticLeft1' (shapeFrom -- 't')
select-variant 't/phoneticLeft2' select-variant 't/phoneticLeft2'
select-variant 't/phoneticLeft3'
select-variant 'turnt' 0x287 (follow -- 't') select-variant 'turnt' 0x287 (follow -- 't')
CreateCommaCaronComposition 'tcaron' 0x165 't' CreateCommaCaronComposition 'tcaron' 0x165 't'
derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla
@ -350,10 +378,10 @@ glyph-block Letter-Latin-Lower-T : begin
define df : DivFrame 1 define df : DivFrame 1
define xLeft : xSmallTBarLeftT df define xLeft : xSmallTBarLeftT df
include : HBar.t xLeft (xLeft + BBD) Ascender BBS include : HBar.t xLeft (xLeft + BBD) Ascender BBS
include : Standard.HookShapeT dispiro df 0 Ascender 0 BBS include : Standard.HookShapeT dispiro df false 0 Ascender 0 BBS
include : intersection include : intersection
VBar.l (xLeft + BBD) 0 Ascender BBS VBar.l (xLeft + BBD) 0 Ascender BBS
Standard.HookShapeT spiro-outline df 1 Ascender 0 BBS Standard.HookShapeT spiro-outline df false 1 Ascender 0 BBS
include : difference include : difference
HCrossBar.top HCrossBar.top
xLeft + (BBD / 2) - LongJut + TBalance2 xLeft + (BBD / 2) - LongJut + TBalance2

View file

@ -11,7 +11,8 @@ glyph-block Letter-Latin-S : begin
glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors
glyph-block-import Letter-Shared : CreateAccentedComposition CreateDependentComposite glyph-block-import Letter-Shared : CreateAccentedComposition CreateDependentComposite
glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Blackboard : BBS BBD
glyph-block-import Letter-Shared-Shapes : DToothlessRise FlatHookDepth ArcStartSerifWidth glyph-block-import Letter-Shared-Shapes : DToothlessRise FlatHookDepth
glyph-block-import Letter-Shared-Shapes : ArcStartSerifWidth ArcStartSerifDepth
glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd glyph-block-import Letter-Shared-Shapes : SerifedArcStart SerifedArcEnd
glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif glyph-block-import Letter-Shared-Shapes : ArcStartSerif ArcEndSerif
glyph-block-import Letter-Shared-Shapes : PalatalHook RetroflexHook CyrDescender glyph-block-import Letter-Shared-Shapes : PalatalHook RetroflexHook CyrDescender
@ -337,6 +338,7 @@ glyph-block Letter-Latin-S : begin
select-variant 'sSwash' 0x23F select-variant 'sSwash' 0x23F
select-variant 'S/descBase' (shapeFrom -- 'S') (follow -- 'SRTail') select-variant 'S/descBase' (shapeFrom -- 'S') (follow -- 'SRTail')
select-variant 's/ascBase' (shapeFrom -- 's')
select-variant 's/descBase' (shapeFrom -- 's') (follow -- 'sRTail') select-variant 's/descBase' (shapeFrom -- 's') (follow -- 'sRTail')
select-variant 'revs/descBase' (shapeFrom -- 'revs') (follow -- 'sRTail') select-variant 'revs/descBase' (shapeFrom -- 'revs') (follow -- 'sRTail')
@ -361,6 +363,24 @@ glyph-block Letter-Latin-S : begin
y -- 0 y -- 0
yAttach -- [mix O [AdviceSArchDepth XH (-1) [AdviceStroke2 2 3 XH]] : archv.yFromX 0.75] yAttach -- [mix O [AdviceSArchDepth XH (-1) [AdviceStroke2 2 3 XH]] : archv.yFromX 0.75]
derive-composites "s/compLigLeft" null "s/ascBase" : glyph-proc
eject-contour 'arcStartSerifR'
local sw : ArcStartSerifWidth [AdviceStroke2 2 3 XH]
local fine : sw * [mix CThinB 1 0.6]
local hd : FlatHookDepth [DivFrame 1]
local yStart : XH - [ArcStartSerifDepth SHook]
local neckLength : 0.5 * Stroke
local leftExt : 0.3 * (RightSB - SB) - 0.25 * HVContrast * sw
include : dispiro
widths.rhs fine
flat (RightSB - fine * HVContrast) yStart [heading Upward]
curl (RightSB - fine * HVContrast) (yStart + neckLength) [heading Upward]
alsoThru.g2 0.5 0.5 [widths.center [mix fine sw 0.35]]
g4 (RightSB - leftExt) [Math.min ([mix XH Ascender 0.5]) (Ascender - 1.375 * sw)] [widths.lhs : mix fine sw 0.7]
arcvh
flat RightSB Ascender [widths.rhs.heading sw Rightward]
curl (4 * Width) Ascender [widths.rhs.heading sw Rightward]
CreateAccentedComposition 'sTildeOver' 0x1D74 's' 'tildeOverWide' CreateAccentedComposition 'sTildeOver' 0x1D74 's' 'tildeOverWide'
derive-composites 'SCedilla' 0x15E 'S' 'cedillaExtShapeBelowOArc' derive-composites 'SCedilla' 0x15E 'S' 'cedillaExtShapeBelowOArc'

View file

@ -475,26 +475,26 @@ glyph-block Letter-Shared-Shapes : begin
glyph-block-export : ArcStartSerif glyph-block-export : ArcStartSerif
define ArcStartSerif : namespace define ArcStartSerif : namespace
export : define [L cx cy stroke hook overflow] : begin export : define [L cx cy stroke hook overflow] : begin
return : VBar.l cx (cy - hook + O * 2) (cy + [fallback overflow 0]) [ArcStartSerifWidth stroke] return : tagged 'arcStartSerifL' : VBar.l cx (cy - hook + O * 2) (cy + [fallback overflow 0]) [ArcStartSerifWidth stroke]
export : define [R cx cy stroke hook overflow] : begin export : define [R cx cy stroke hook overflow] : begin
return : VBar.r cx (cy - hook + O * 2) (cy + [fallback overflow 0]) [ArcStartSerifWidth stroke] return : tagged 'arcStartSerifR' : VBar.r cx (cy - hook + O * 2) (cy + [fallback overflow 0]) [ArcStartSerifWidth stroke]
export : define [InwardL cx cy stroke hook] : begin export : define [InwardL cx cy stroke hook] : begin
return : VBar.l cx (cy - hook - DToothlessRise / 3) (cy - DToothlessRise) [ArcStartSerifWidth stroke] return : tagged 'arcStartSerifL' : VBar.l cx (cy - hook - DToothlessRise / 3) (cy - DToothlessRise) [ArcStartSerifWidth stroke]
export : define [InwardR cx cy stroke hook] : begin export : define [InwardR cx cy stroke hook] : begin
return : VBar.r cx (cy - hook - DToothlessRise / 3) (cy - DToothlessRise) [ArcStartSerifWidth stroke] return : tagged 'arcStartSerifR' : VBar.r cx (cy - hook - DToothlessRise / 3) (cy - DToothlessRise) [ArcStartSerifWidth stroke]
glyph-block-export : ArcEndSerif glyph-block-export : ArcEndSerif
define ArcEndSerif : namespace define ArcEndSerif : namespace
export : define [L cx cy stroke hook overflow] : begin export : define [L cx cy stroke hook overflow] : begin
return : VBar.l cx (cy + hook - O * 2) (cy - [fallback overflow 0]) [ArcStartSerifWidth stroke] return : tagged 'arcEndSerifL' : VBar.l cx (cy + hook - O * 2) (cy - [fallback overflow 0]) [ArcStartSerifWidth stroke]
export : define [R cx cy stroke hook overflow] : begin export : define [R cx cy stroke hook overflow] : begin
return : VBar.r cx (cy + hook - O * 2) (cy - [fallback overflow 0]) [ArcStartSerifWidth stroke] return : tagged 'arcEndSerifR' : VBar.r cx (cy + hook - O * 2) (cy - [fallback overflow 0]) [ArcStartSerifWidth stroke]
export : define [InwardL cx cy stroke hook] : begin export : define [InwardL cx cy stroke hook] : begin
return : VBar.l cx (cy + hook + DToothlessRise / 2) (cy + DToothlessRise) [ArcStartSerifWidth stroke] return : tagged 'arcEndSerifL' : VBar.l cx (cy + hook + DToothlessRise / 2) (cy + DToothlessRise) [ArcStartSerifWidth stroke]
export : define [InwardR cx cy stroke hook] : begin export : define [InwardR cx cy stroke hook] : begin
return : VBar.r cx (cy + hook + DToothlessRise / 2) (cy + DToothlessRise) [ArcStartSerifWidth stroke] return : tagged 'arcEndSerifR' : VBar.r cx (cy + hook + DToothlessRise / 2) (cy + DToothlessRise) [ArcStartSerifWidth stroke]
glyph-block-export ArcStartHookTop glyph-block-export ArcStartHookTop
define [ArcStartHookTop cx cy stroke hookX hookY] : begin define [ArcStartHookTop cx cy stroke hookX hookY] : begin

View file

@ -2169,6 +2169,7 @@ selector.f = "serifless"
selector."f/sansSerif" = "serifless" selector."f/sansSerif" = "serifless"
selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2" selector."f/compLigLeft2" = "flatHookCLC2"
selector."f/compLigLeft3" = "flatHookCLC3"
selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight" selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight"
selector."f/tailless" = "serifless" selector."f/tailless" = "serifless"
selector.fLenis = "serifless" selector.fLenis = "serifless"
@ -2182,6 +2183,7 @@ selector.f = "serifed"
selector."f/sansSerif" = "serifless" selector."f/sansSerif" = "serifless"
selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2" selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector."f/compLigLeft3" = "flatHookSerifedCLC3"
selector."f/phoneticLeft" = "serifedCrossbarAtXHeight" selector."f/phoneticLeft" = "serifedCrossbarAtXHeight"
selector."f/tailless" = "serifed" selector."f/tailless" = "serifed"
selector.fLenis = "serifless" selector.fLenis = "serifless"
@ -2195,6 +2197,7 @@ selector.f = "tailed"
selector."f/sansSerif" = "tailed" selector."f/sansSerif" = "tailed"
selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2" selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector."f/compLigLeft3" = "flatHookTailedCLC3"
selector."f/phoneticLeft" = "tailedCrossbarAtXHeight" selector."f/phoneticLeft" = "tailedCrossbarAtXHeight"
selector."f/tailless" = "serifless" selector."f/tailless" = "serifless"
selector.fLenis = "serifless" selector.fLenis = "serifless"
@ -2208,6 +2211,7 @@ selector.f = "extended"
selector."f/sansSerif" = "extended" selector."f/sansSerif" = "extended"
selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2" selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector."f/compLigLeft3" = "flatHookExtendedCLC3"
selector."f/phoneticLeft" = "extendedCrossbarAtXHeight" selector."f/phoneticLeft" = "extendedCrossbarAtXHeight"
selector."f/tailless" = "serifless" selector."f/tailless" = "serifless"
selector.fLenis = "serifless" selector.fLenis = "serifless"
@ -2221,6 +2225,7 @@ selector.f = "diagonalTailed"
selector."f/sansSerif" = "diagonalTailed" selector."f/sansSerif" = "diagonalTailed"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3"
selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight"
selector."f/tailless" = "serifless" selector."f/tailless" = "serifless"
selector.fLenis = "serifless" selector.fLenis = "serifless"
@ -2234,6 +2239,7 @@ selector.f = "seriflessCrossbarAtXHeight"
selector."f/sansSerif" = "seriflessCrossbarAtXHeight" selector."f/sansSerif" = "seriflessCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2" selector."f/compLigLeft2" = "flatHookCLC2"
selector."f/compLigLeft3" = "flatHookCLC3"
selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight" selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight"
selector."f/tailless" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight"
selector.fLenis = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight"
@ -2247,6 +2253,7 @@ selector.f = "serifedCrossbarAtXHeight"
selector."f/sansSerif" = "seriflessCrossbarAtXHeight" selector."f/sansSerif" = "seriflessCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2" selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector."f/compLigLeft3" = "flatHookSerifedCLC3"
selector."f/phoneticLeft" = "serifedCrossbarAtXHeight" selector."f/phoneticLeft" = "serifedCrossbarAtXHeight"
selector."f/tailless" = "serifedCrossbarAtXHeight" selector."f/tailless" = "serifedCrossbarAtXHeight"
selector.fLenis = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight"
@ -2260,6 +2267,7 @@ selector.f = "tailedCrossbarAtXHeight"
selector."f/sansSerif" = "tailedCrossbarAtXHeight" selector."f/sansSerif" = "tailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2" selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector."f/compLigLeft3" = "flatHookTailedCLC3"
selector."f/phoneticLeft" = "tailedCrossbarAtXHeight" selector."f/phoneticLeft" = "tailedCrossbarAtXHeight"
selector."f/tailless" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight"
selector.fLenis = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight"
@ -2273,6 +2281,7 @@ selector.f = "extendedCrossbarAtXHeight"
selector."f/sansSerif" = "extendedCrossbarAtXHeight" selector."f/sansSerif" = "extendedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2" selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector."f/compLigLeft3" = "flatHookExtendedCLC3"
selector."f/phoneticLeft" = "extendedCrossbarAtXHeight" selector."f/phoneticLeft" = "extendedCrossbarAtXHeight"
selector."f/tailless" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight"
selector.fLenis = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight"
@ -2286,6 +2295,7 @@ selector.f = "diagonalTailedCrossbarAtXHeight"
selector."f/sansSerif" = "diagonalTailedCrossbarAtXHeight" selector."f/sansSerif" = "diagonalTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3"
selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight"
selector."f/tailless" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight"
selector.fLenis = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight"
@ -2299,6 +2309,7 @@ selector.f = "flatHook"
selector."f/sansSerif" = "flatHook" selector."f/sansSerif" = "flatHook"
selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2" selector."f/compLigLeft2" = "flatHookCLC2"
selector."f/compLigLeft3" = "flatHookCLC3"
selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight"
selector."f/tailless" = "flatHook" selector."f/tailless" = "flatHook"
selector.fLenis = "flatHook" selector.fLenis = "flatHook"
@ -2312,6 +2323,7 @@ selector.f = "flatHookSerifed"
selector."f/sansSerif" = "flatHook" selector."f/sansSerif" = "flatHook"
selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2" selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector."f/compLigLeft3" = "flatHookSerifedCLC3"
selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight"
selector."f/tailless" = "flatHookSerifed" selector."f/tailless" = "flatHookSerifed"
selector.fLenis = "flatHook" selector.fLenis = "flatHook"
@ -2325,6 +2337,7 @@ selector.f = "flatHookTailed"
selector."f/sansSerif" = "flatHookTailed" selector."f/sansSerif" = "flatHookTailed"
selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2" selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector."f/compLigLeft3" = "flatHookTailedCLC3"
selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight"
selector."f/tailless" = "flatHook" selector."f/tailless" = "flatHook"
selector.fLenis = "flatHook" selector.fLenis = "flatHook"
@ -2338,6 +2351,7 @@ selector.f = "flatHookExtended"
selector."f/sansSerif" = "flatHookExtended" selector."f/sansSerif" = "flatHookExtended"
selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2" selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector."f/compLigLeft3" = "flatHookExtendedCLC3"
selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight"
selector."f/tailless" = "flatHook" selector."f/tailless" = "flatHook"
selector.fLenis = "flatHook" selector.fLenis = "flatHook"
@ -2351,6 +2365,7 @@ selector.f = "flatHookDiagonalTailed"
selector."f/sansSerif" = "flatHookDiagonalTailed" selector."f/sansSerif" = "flatHookDiagonalTailed"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3"
selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight"
selector."f/tailless" = "flatHook" selector."f/tailless" = "flatHook"
selector.fLenis = "flatHook" selector.fLenis = "flatHook"
@ -2364,6 +2379,7 @@ selector.f = "flatHookCrossbarAtXHeight"
selector."f/sansSerif" = "flatHookCrossbarAtXHeight" selector."f/sansSerif" = "flatHookCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft1" = "flatHookCLC1"
selector."f/compLigLeft2" = "flatHookCLC2" selector."f/compLigLeft2" = "flatHookCLC2"
selector."f/compLigLeft3" = "flatHookCLC3"
selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight"
selector."f/tailless" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight"
selector.fLenis = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight"
@ -2377,6 +2393,7 @@ selector.f = "flatHookSerifedCrossbarAtXHeight"
selector."f/sansSerif" = "flatHookCrossbarAtXHeight" selector."f/sansSerif" = "flatHookCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft1" = "flatHookSerifedCLC1"
selector."f/compLigLeft2" = "flatHookSerifedCLC2" selector."f/compLigLeft2" = "flatHookSerifedCLC2"
selector."f/compLigLeft3" = "flatHookSerifedCLC3"
selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight"
selector."f/tailless" = "flatHookSerifedCrossbarAtXHeight" selector."f/tailless" = "flatHookSerifedCrossbarAtXHeight"
selector.fLenis = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight"
@ -2390,6 +2407,7 @@ selector.f = "flatHookTailedCrossbarAtXHeight"
selector."f/sansSerif" = "flatHookTailedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft1" = "flatHookTailedCLC1"
selector."f/compLigLeft2" = "flatHookTailedCLC2" selector."f/compLigLeft2" = "flatHookTailedCLC2"
selector."f/compLigLeft3" = "flatHookTailedCLC3"
selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight"
selector."f/tailless" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight"
selector.fLenis = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight"
@ -2403,6 +2421,7 @@ selector.f = "flatHookExtendedCrossbarAtXHeight"
selector."f/sansSerif" = "flatHookExtendedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookExtendedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft1" = "flatHookExtendedCLC1"
selector."f/compLigLeft2" = "flatHookExtendedCLC2" selector."f/compLigLeft2" = "flatHookExtendedCLC2"
selector."f/compLigLeft3" = "flatHookExtendedCLC3"
selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight"
selector."f/tailless" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight"
selector.fLenis = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight"
@ -2416,6 +2435,7 @@ selector.f = "flatHookDiagonalTailedCrossbarAtXHeight"
selector."f/sansSerif" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookDiagonalTailedCrossbarAtXHeight"
selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1"
selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2"
selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3"
selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight"
selector."f/tailless" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight"
selector.fLenis = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight"
@ -3769,6 +3789,7 @@ selector.s = "serifless"
selector."s/sansSerif" = "serifless" selector."s/sansSerif" = "serifless"
selector."s/phoneticRight" = "serifless" selector."s/phoneticRight" = "serifless"
selector."tsLig/lowerHalf" = "serifless" selector."tsLig/lowerHalf" = "serifless"
selector."s/ascBase" = "unilateralSerifed"
selector.sSwash = "serifless" selector.sSwash = "serifless"
selector.sRTail = "bottomSerifed" selector.sRTail = "bottomSerifed"
@ -3779,6 +3800,7 @@ selector.s = "unilateralSerifed"
selector."s/sansSerif" = "serifless" selector."s/sansSerif" = "serifless"
selector."s/phoneticRight" = "unilateralSerifed" selector."s/phoneticRight" = "unilateralSerifed"
selector."tsLig/lowerHalf" = "serifless" selector."tsLig/lowerHalf" = "serifless"
selector."s/ascBase" = "unilateralSerifed"
selector.sSwash = "unilateralSerifed" selector.sSwash = "unilateralSerifed"
selector.sRTail = "bilateralSerifed" selector.sRTail = "bilateralSerifed"
@ -3789,6 +3811,7 @@ selector.s = "bilateralSerifed"
selector."s/sansSerif" = "serifless" selector."s/sansSerif" = "serifless"
selector."s/phoneticRight" = "unilateralSerifed" selector."s/phoneticRight" = "unilateralSerifed"
selector."tsLig/lowerHalf" = "bilateralSerifed" selector."tsLig/lowerHalf" = "bilateralSerifed"
selector."s/ascBase" = "bilateralSerifed"
selector.sSwash = "unilateralSerifed" selector.sSwash = "unilateralSerifed"
selector.sRTail = "bilateralSerifed" selector.sRTail = "bilateralSerifed"
@ -3799,6 +3822,7 @@ selector.s = "unilateralInwardSerifed"
selector."s/sansSerif" = "serifless" selector."s/sansSerif" = "serifless"
selector."s/phoneticRight" = "unilateralInwardSerifed" selector."s/phoneticRight" = "unilateralInwardSerifed"
selector."tsLig/lowerHalf" = "serifless" selector."tsLig/lowerHalf" = "serifless"
selector."s/ascBase" = "unilateralInwardSerifed"
selector.sSwash = "unilateralInwardSerifed" selector.sSwash = "unilateralInwardSerifed"
selector.sRTail = "hybridSerifed1" selector.sRTail = "hybridSerifed1"
@ -3809,6 +3833,7 @@ selector.s = "bilateralInwardSerifed"
selector."s/sansSerif" = "serifless" selector."s/sansSerif" = "serifless"
selector."s/phoneticRight" = "unilateralInwardSerifed" selector."s/phoneticRight" = "unilateralInwardSerifed"
selector."tsLig/lowerHalf" = "bilateralInwardSerifed" selector."tsLig/lowerHalf" = "bilateralInwardSerifed"
selector."s/ascBase" = "bilateralInwardSerifed"
selector.sSwash = "unilateralInwardSerifed" selector.sSwash = "unilateralInwardSerifed"
selector.sRTail = "bilateralInwardSerifed" selector.sRTail = "bilateralInwardSerifed"
@ -3824,6 +3849,7 @@ description = "Standard `t` shape"
selector.t = "standard" selector.t = "standard"
selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "flatHook" selector."t/phoneticLeft2" = "flatHook"
selector."t/phoneticLeft3" = "standard"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "flatHook" selector.tRTail = "flatHook"
selector.tLTail = "standard" selector.tLTail = "standard"
@ -3836,6 +3862,7 @@ description = "`t` with flat hook"
selector.t = "flatHook" selector.t = "flatHook"
selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "flatHook" selector."t/phoneticLeft2" = "flatHook"
selector."t/phoneticLeft3" = "flatHook"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "flatHook" selector.tRTail = "flatHook"
selector.tLTail = "flatHook" selector.tLTail = "flatHook"
@ -3848,6 +3875,7 @@ description = "`t` with diagonal tail"
selector.t = "diagonalTailed" selector.t = "diagonalTailed"
selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "flatHook" selector."t/phoneticLeft2" = "flatHook"
selector."t/phoneticLeft3" = "diagonalTailed"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "flatHook" selector.tRTail = "flatHook"
selector.tLTail = "diagonalTailed" selector.tLTail = "diagonalTailed"
@ -3860,6 +3888,7 @@ description = "Futura-like `t` shape"
selector.t = "cross" selector.t = "cross"
selector."t/phoneticLeft1" = "cross" selector."t/phoneticLeft1" = "cross"
selector."t/phoneticLeft2" = "cross" selector."t/phoneticLeft2" = "cross"
selector."t/phoneticLeft3" = "cross"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "cross" selector.tRTail = "cross"
selector.tLTail = "cross" selector.tLTail = "cross"
@ -3872,6 +3901,7 @@ description = "`t` without hook and with ony half the cross bar"
selector.t = "hooklessAsymmetric" selector.t = "hooklessAsymmetric"
selector."t/phoneticLeft1" = "hooklessAsymmetric" selector."t/phoneticLeft1" = "hooklessAsymmetric"
selector."t/phoneticLeft2" = "hooklessAsymmetric" selector."t/phoneticLeft2" = "hooklessAsymmetric"
selector."t/phoneticLeft3" = "hooklessAsymmetric"
selector.tHookTop = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric"
selector.tRTail = "hooklessAsymmetric" selector.tRTail = "hooklessAsymmetric"
selector.tLTail = "hooklessAsymmetric" selector.tLTail = "hooklessAsymmetric"
@ -3884,6 +3914,7 @@ description = "Standard `t` shape with a shorter neck"
selector.t = "standardShortNeck" selector.t = "standardShortNeck"
selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector."t/phoneticLeft3" = "standard"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "flatHookShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "standardShortNeck"
@ -3896,6 +3927,7 @@ description = "`t` with flat hook and a slightly shorter neck"
selector.t = "flatHookShortNeck" selector.t = "flatHookShortNeck"
selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector."t/phoneticLeft3" = "flatHook"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "flatHookShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "flatHookShortNeck" selector.tLTail = "flatHookShortNeck"
@ -3908,6 +3940,7 @@ description = "`t` with diagonal tail and a shorter neck"
selector.t = "diagonalTailedShortNeck" selector.t = "diagonalTailedShortNeck"
selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector."t/phoneticLeft3" = "diagonalTailed"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "flatHookShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "diagonalTailedShortNeck" selector.tLTail = "diagonalTailedShortNeck"
@ -3920,6 +3953,7 @@ description = "Futura-like `t` shape with a shorter neck"
selector.t = "crossShortNeck" selector.t = "crossShortNeck"
selector."t/phoneticLeft1" = "crossShortNeck" selector."t/phoneticLeft1" = "crossShortNeck"
selector."t/phoneticLeft2" = "crossShortNeck" selector."t/phoneticLeft2" = "crossShortNeck"
selector."t/phoneticLeft3" = "cross"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "crossShortNeck" selector.tRTail = "crossShortNeck"
selector.tLTail = "crossShortNeck" selector.tLTail = "crossShortNeck"
@ -3932,7 +3966,8 @@ description = "`t` without hook, with ony half the cross bar and a shorter neck"
selector.t = "hooklessAsymmetricShortNeck" selector.t = "hooklessAsymmetricShortNeck"
selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck" selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck"
selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck"
selector.tHookTop = "hooklessAsymmetric" selector."t/phoneticLeft3" = "hooklessAsymmetric"
selector.tHookTop = "cross"
selector.tRTail = "hooklessAsymmetricShortNeck" selector.tRTail = "hooklessAsymmetricShortNeck"
selector.tLTail = "hooklessAsymmetricShortNeck" selector.tLTail = "hooklessAsymmetricShortNeck"
selector.tCurlyTail = "hooklessAsymmetricShortNeck" selector.tCurlyTail = "hooklessAsymmetricShortNeck"
@ -3944,6 +3979,7 @@ description = "Standard `t` shape with a more shorter neck"
selector.t = "standardShortNeck2" selector.t = "standardShortNeck2"
selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector."t/phoneticLeft3" = "standard"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "flatHookShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "standardShortNeck2"
@ -3956,6 +3992,7 @@ description = "`t` with flat hook and a more shorter neck"
selector.t = "flatHookShortNeck2" selector.t = "flatHookShortNeck2"
selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector."t/phoneticLeft3" = "flatHook"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "flatHookShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "flatHookShortNeck2" selector.tLTail = "flatHookShortNeck2"
@ -3968,6 +4005,7 @@ description = "`t` with diagonal tail and a more shorter neck"
selector.t = "diagonalTailedShortNeck2" selector.t = "diagonalTailedShortNeck2"
selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector."t/phoneticLeft3" = "diagonalTailed"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "flatHookShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "diagonalTailedShortNeck2" selector.tLTail = "diagonalTailedShortNeck2"
@ -3980,6 +4018,7 @@ description = "Futura-like `t` shape with a more shorter neck"
selector.t = "crossShortNeck2" selector.t = "crossShortNeck2"
selector."t/phoneticLeft1" = "crossShortNeck2" selector."t/phoneticLeft1" = "crossShortNeck2"
selector."t/phoneticLeft2" = "crossShortNeck2" selector."t/phoneticLeft2" = "crossShortNeck2"
selector."t/phoneticLeft3" = "cross"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "crossShortNeck2" selector.tRTail = "crossShortNeck2"
selector.tLTail = "crossShortNeck2" selector.tLTail = "crossShortNeck2"
@ -3992,6 +4031,7 @@ description = "`t` without hook, with ony half the cross bar and a more shorter
selector.t = "hooklessAsymmetricShortNeck2" selector.t = "hooklessAsymmetricShortNeck2"
selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck2" selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck2"
selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck2" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck2"
selector."t/phoneticLeft3" = "hooklessAsymmetric"
selector.tHookTop = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric"
selector.tRTail = "hooklessAsymmetricShortNeck2" selector.tRTail = "hooklessAsymmetricShortNeck2"
selector.tLTail = "hooklessAsymmetricShortNeck2" selector.tLTail = "hooklessAsymmetricShortNeck2"
@ -4679,31 +4719,37 @@ tag = "cv51"
rank = 1 rank = 1
description = "Long-S with standard bending hook" description = "Long-S with standard bending hook"
selector."longs" = "bentHook" selector."longs" = "bentHook"
selector."longs/flatExt" = "flatHookExt"
[prime.long-s.variants.flat-hook] [prime.long-s.variants.flat-hook]
rank = 2 rank = 2
description = "Long-S with flat hook" description = "Long-S with flat hook"
selector."longs" = "flatHook" selector."longs" = "flatHook"
selector."longs/flatExt" = "flatHookExt"
[prime.long-s.variants.bent-hook-descending] [prime.long-s.variants.bent-hook-descending]
rank = 3 rank = 3
description = "Long-S with standard bending hook and descends baseline" description = "Long-S with standard bending hook and descends baseline"
selector."longs" = "bentHookDescending" selector."longs" = "bentHookDescending"
selector."longs/flatExt" = "flatHookDescendingExt"
[prime.long-s.variants.flat-hook-descending] [prime.long-s.variants.flat-hook-descending]
rank = 4 rank = 4
description = "Long-S with flat hook and descends baseline" description = "Long-S with flat hook and descends baseline"
selector."longs" = "flatHookDescending" selector."longs" = "flatHookDescending"
selector."longs/flatExt" = "flatHookDescendingExt"
[prime.long-s.variants.bent-hook-tailed] [prime.long-s.variants.bent-hook-tailed]
rank = 5 rank = 5
description = "Long-S with standard bending hook and tail" description = "Long-S with standard bending hook and tail"
selector."longs" = "bentHookTailed" selector."longs" = "bentHookTailed"
selector."longs/flatExt" = "flatHookTailedExt"
[prime.long-s.variants.flat-hook-tailed] [prime.long-s.variants.flat-hook-tailed]
rank = 6 rank = 6
description = "Long-S with flat hook and tail" description = "Long-S with flat hook and tail"
selector."longs" = "flatHookTailed" selector."longs" = "flatHookTailed"
selector."longs/flatExt" = "flatHookTailedExt"

View file

@ -1165,6 +1165,7 @@ function validateRecommendedWeight(w, value, label) {
thin: 100, thin: 100,
extralight: 200, extralight: 200,
light: 300, light: 300,
semilight: 350,
regular: 400, regular: 400,
book: 450, book: 450,
medium: 500, medium: 500,