From da10f30b65291906cd30e5f4300c13407735a628 Mon Sep 17 00:00:00 2001 From: be5invis Date: Tue, 25 Apr 2023 23:36:17 -0700 Subject: [PATCH] * 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). --- build-plans.toml | 4 +- changes/22.1.1.md | 6 + font-src/gen/meta/naming.mjs | 6 +- font-src/glyphs/auto-build/composite.ptl | 143 ++++++++++++-------- font-src/glyphs/letter/latin-ext/long-s.ptl | 18 +++ font-src/glyphs/letter/latin/lower-f.ptl | 13 +- font-src/glyphs/letter/latin/lower-t.ptl | 70 +++++++--- font-src/glyphs/letter/latin/s.ptl | 22 ++- font-src/glyphs/letter/shared.ptl | 16 +-- params/variants.toml | 48 ++++++- verdafile.mjs | 1 + 11 files changed, 253 insertions(+), 94 deletions(-) create mode 100644 changes/22.1.1.md diff --git a/build-plans.toml b/build-plans.toml index 59c35170d..582dc4bbe 100644 --- a/build-plans.toml +++ b/build-plans.toml @@ -996,8 +996,8 @@ from = ["iosevka-etoile"] # Shape weight : affects the shape of the glyphs # Menu weight : affects the font menu name # CSS weight : affects the webfont CSS "font-weight" property -# IMPORTANT : Currently "menu" property only support 100, 200, 300, 400, 500, 600, 700, 800, 900. -# and "shape" properly only supports number between 100 and 900 (inclusive). +# IMPORTANT : Currently "menu" property only support 100, 200, 300, 350, 400, 450, 500, 600, 700, +# 800, 900, and "shape" properly only supports number between 100 and 900 (inclusive). [weights.thin] shape = 100 diff --git a/changes/22.1.1.md b/changes/22.1.1.md new file mode 100644 index 000000000..9946765a4 --- /dev/null +++ b/changes/22.1.1.md @@ -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). diff --git a/font-src/gen/meta/naming.mjs b/font-src/gen/meta/naming.mjs index 51662555b..d259e4c8b 100644 --- a/font-src/gen/meta/naming.mjs +++ b/font-src/gen/meta/naming.mjs @@ -159,10 +159,6 @@ function nameFontImpl(records, 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) { const weightPart = weightToMenuStyleMap[weight] ?? "W" + weight; const widthPart = widthToMenuStyleMap[width] ?? "Wd" + width; @@ -182,6 +178,7 @@ const weightToMenuStyleMap = { 100: "Thin", 200: "Extralight", 300: "Light", + 350: "SemiLight", 400: "", 450: "Book", 500: "Medium", @@ -210,6 +207,7 @@ const weightToMenuStyleMapShort = { 100: "Th", 200: "XLt", 300: "Lt", + 350: "SmLt", 400: "", 450: "Bk", 500: "Md", diff --git a/font-src/glyphs/auto-build/composite.ptl b/font-src/glyphs/auto-build/composite.ptl index 4c364a39d..712e2141b 100644 --- a/font-src/glyphs/auto-build/composite.ptl +++ b/font-src/glyphs/auto-build/composite.ptl @@ -1242,72 +1242,96 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin glyph-block-import Autobuild-Enclosure-Shared : CollectJobs CreateDerivedFontFromJobs EnsureComponentGlyphT applyRelations glyph-block-import Autobuild-Transformed-Shared : ToSuperscript ToSubscript - define [createPhoneticLigatures tfm prefix div _shrink1 _shrink2 wadj1 wadj2 kKern demands] : begin - define CWidth : Width * div - define MockWidth : CWidth / [fallback tfm.crowdAdjScale 1] - define jobs : CollectJobs NON-DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL prefix "" demands - local shrink1 : clamp 0 1 _shrink1 - local shrink2 : clamp 0 1 _shrink2 + define [createPhoneticLigatures tfm prefix div mockNParts _shrink kKern demands] : begin + local ww0 : Width * div + local wwM : ww0 / [fallback tfm.crowdAdjScale 1] + local jobs : CollectJobs DECOMPOSABLE NOT-CENTERED ALLOW-PROPORTIONAL prefix "" demands + local shrink : clamp 0 1 _shrink local kern 0 - foreach [cycle : range 0 4] : begin - set kern : kKern * (SB * shrink1 + SB * shrink2 + 0.5 * Stroke * [mix shrink1 shrink2 0.5] - OX * 2) - local tmp-shrink1 : (shrink1 * MockWidth + kern * shrink1 / (shrink1 + shrink2)) / MockWidth - local tmp-shrink2 : (shrink2 * MockWidth + kern * shrink2 / (shrink1 + shrink2)) / MockWidth - set shrink1 : clamp 0 1 tmp-shrink1 - set shrink2 : clamp 0 1 tmp-shrink2 + foreach [cycle : range 0 8] : begin + set kern : kKern * (2 * SB * shrink + (0.5 * Stroke * shrink * HVContrast - OX * 2)) + local tmpShrink : (wwM + kern * (mockNParts - 1)) / (mockNParts * Width) + set shrink : Math.max _shrink : clamp 0 1 tmpShrink - local df1 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink1 true tfm.crowd tfm.crowdAdjScale - local df2 : CreateDerivedFontFromJobs jobs {} : lambda [gs] : Thinner gs shrink2 true tfm.crowd tfm.crowdAdjScale + local thinFont : CreateDerivedFontFromJobs jobs {} : function [gs] + Thinner gs shrink true tfm.crowd tfm.crowdAdjScale - # TODO: we need a better geometry to do such minkovski sums - define [createMaskout c1 c2 s] : begin - define dfg1 : df1.queryByNameEnsured c1 - define dfg2 : df2.queryByNameEnsured c2 - return : WithTransform [Translate (s + dfg1.advanceWidth * wadj1 - kern) 0] dfg2 + define [LigaturePlaceholderImpl aw markPlacement mak] : begin + define gni : '.phonetic-ligature-placeholder@' + [{aw markPlacement}.join '/'] + if [query-glyph gni] : return gni + create-glyph gni : glyph-proc + 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) - local s step - local dist (Stroke * 2) + define [LigatureImpl job decomposable] : if [not : query-glyph gn] : begin + local { gn unicode components mak } job - local maskOuts : list - createMaskout c1 c2 0.01 - createMaskout c1 c2 (dist - 0.01) - while (s < dist) : begin - maskOuts.push : createMaskout c1 c2 s - set s : s + step + local sumChildrenWidth 0 + local effectiveGlyphCount 0 + local originals {} + local dfgs {} + foreach { i component } [components.entries] : begin + 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 - set-width CWidth - if mak : include : [DivFrame (MockWidth / Width)].markSet.(mak) - define dfg1 : df1.queryByNameEnsured c1 - define dfg2 : df2.queryByNameEnsured c2 - 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 + local decomposition { } + local baseOffset : ww0 / 2 - refW * compress / 2 + foreach { i component } [components.entries] : do + local currentIsMark : 0 == originals.(i).advanceWidth - 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 define [ToLetter] : glyph-proc - define [AddSlash] : glyph-proc - include [refer-glyph 'wideSlashOver'] - - define stdShrink : clamp 0.75 0.9 : StrokeWidthBlend 0.75 0.9 - createPhoneticLigatures ToLetter 'phonetic' para.diversityM stdShrink stdShrink 1 1 1 : list + define stdShrink : clamp 0.625 0.9 : StrokeWidthBlend 0.625 0.9 + createPhoneticLigatures ToLetter 'phonetic' para.diversityM 2 stdShrink 1 : list list 0x02A3 { 'd/phoneticLeft' 'z' } 'b' list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'if' list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail' } 'if' @@ -1319,10 +1343,17 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin list 0x02AB { 'l/phoneticLeft' 'z' } 'b' list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'if' list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'p' + list 0xFB00 { 'f' 'f' } null list 0xFB01 { 'f/compLigLeft1' 'dotlessi/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 0x1078A { 'd/phoneticLeft' 'ezh' } 'if' list 0x10789 { 'd/phoneticLeft' 'zCurlyTail' } 'if' @@ -1335,11 +1366,11 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin list 0x10788 { 'd/phoneticLeft' 'zRTailBR' } 'if' 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' - createPhoneticLigatures AddSlash 'thSlash' 1 stdShrink stdShrink 1 1 1 : list - list 0x1D7A { 't/phoneticLeft1' 'h' } 'b' + createPhoneticLigatures ToLetter 'thSlash' 1 2 stdShrink 1 : list + list 0x1D7A { 't/phoneticLeft1' 'h' 'wideSlashOver' } 'b' glyph-block Autobuild-Double-Emotions : begin glyph-block-import CommonShapes diff --git a/font-src/glyphs/letter/latin-ext/long-s.ptl b/font-src/glyphs/letter/latin-ext/long-s.ptl index 285f3bbc3..c9b776dac 100644 --- a/font-src/glyphs/letter/latin-ext/long-s.ptl +++ b/font-src/glyphs/letter/latin-ext/long-s.ptl @@ -124,7 +124,25 @@ glyph-block Letter-Latin-Long-S : begin 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/flatExt' (shapeFrom -- 'longs') select-variant 'longsbar' 0x1E9D (follow -- 'longs') alias 'esh' 0x283 'longs.flatHookTailed' diff --git a/font-src/glyphs/letter/latin/lower-f.ptl b/font-src/glyphs/letter/latin/lower-f.ptl index 033261730..7b210f4ad 100644 --- a/font-src/glyphs/letter/latin/lower-f.ptl +++ b/font-src/glyphs/letter/latin/lower-f.ptl @@ -84,11 +84,15 @@ glyph-block Letter-Latin-Lower-F : begin local topHookExt : match clcStyle [Just 1] Width [Just 2] Jut + [Just 3] Jut __ 0 local topHookHdExt : match clcStyle [Just 1] 1 __ 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 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' } '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 create-glyph "f.\(suffix)" : glyph-proc set-width df.width @@ -186,6 +196,7 @@ glyph-block Letter-Latin-Lower-F : begin select-variant 'fLTail' 0x192 (shapeFrom -- 'f') select-variant 'f/compLigLeft1' (shapeFrom -- 'f') select-variant 'f/compLigLeft2' (shapeFrom -- 'f') + select-variant 'f/compLigLeft3' (shapeFrom -- 'f') select-variant 'f/phoneticLeft' (shapeFrom -- 'f') select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless') diff --git a/font-src/glyphs/letter/latin/lower-t.ptl b/font-src/glyphs/letter/latin/lower-t.ptl index 711485a66..e68af1b39 100644 --- a/font-src/glyphs/letter/latin/lower-t.ptl +++ b/font-src/glyphs/letter/latin/lower-t.ptl @@ -26,8 +26,8 @@ glyph-block Letter-Latin-Lower-T : begin define Standard : namespace export : define [BarLeftPos df] : xSmallTBarLeftT df - export : define [HookShapeT sink df offset top bot sw] : begin - local xLeft : xSmallTBarLeftT df + export : define [HookShapeT sink df fCross offset top bot sw] : begin + 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 turn : [mix xLeft hookx 0.5] + CorrectionOMidS 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 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) 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 [PRBody df top bot] : glyph-proc + include : CrossBar df + include : HookShapeT dispiro df true 0 top bot Stroke + define DiagTail : namespace - define [HookShape df top bot sw] : begin - local xMid : [xSmallTBarLeftT df] + HalfStroke * HVContrast + define [HookShape df fCross top bot sw] : begin + local xMid : if fCross df.middle ([xSmallTBarLeftT df] + HalfStroke * HVContrast) return : dispiro flat xMid top [widths.center.heading sw Downward] 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 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) 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 [PRBody df top] : glyph-proc + include : Standard.CrossBar df + include : HookShape df true top 0 Stroke + define Flat : namespace 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 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 [Body df top bot] : Impl false false df top bot 0 - export : define [Retroflex df top bot] : Impl false true df top bot 0 - export : define [CrossRTBody df top bot] : Impl true true df top bot 0 + export : define [Body df top bot] : Impl NORMAL df top bot 0 + export : define [Retroflex df top bot] : Impl CROSS 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 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 - define xTailEnd : piecewise - fRetroflex : xBarLeft + HookX + HalfStroke * HVContrast - fCross : xBarLeft + hd.x - true xCrossRight + define xTailEnd : match shape + [Just RETROFLEX] : xBarLeft + HookX + HalfStroke * HVContrast + __ xCrossRight include : union HCrossBar.top xCrossLeft (xCrossRight + ext) yCrossBar dispiro widths.rhs - if (fRetroflex || fCross) - straight.left.start xTailEnd bot - list + if (shape === RETROFLEX || shape === CROSS) + then : straight.left.start xTailEnd bot + else : list flat xCrossRight bot curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] bot 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] 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 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 standard { [DivFrame 1] Standard Ascender } diagonalTailed { dfNarrowT DiagTail Ascender } @@ -217,6 +237,13 @@ glyph-block Letter-Latin-Lower-T : begin include : df.markSet.b 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 define df1 : DivFrame 1 set-width df1.width @@ -276,6 +303,7 @@ glyph-block Letter-Latin-Lower-T : begin select-variant 't/teshLeft' (follow -- 't') select-variant 't/phoneticLeft1' (shapeFrom -- 't') select-variant 't/phoneticLeft2' + select-variant 't/phoneticLeft3' select-variant 'turnt' 0x287 (follow -- 't') CreateCommaCaronComposition 'tcaron' 0x165 't' derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla @@ -350,10 +378,10 @@ glyph-block Letter-Latin-Lower-T : begin define df : DivFrame 1 define xLeft : xSmallTBarLeftT df 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 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 HCrossBar.top xLeft + (BBD / 2) - LongJut + TBalance2 diff --git a/font-src/glyphs/letter/latin/s.ptl b/font-src/glyphs/letter/latin/s.ptl index 08d3182e7..073fa93f9 100644 --- a/font-src/glyphs/letter/latin/s.ptl +++ b/font-src/glyphs/letter/latin/s.ptl @@ -11,7 +11,8 @@ glyph-block Letter-Latin-S : begin glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors glyph-block-import Letter-Shared : CreateAccentedComposition CreateDependentComposite 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 : ArcStartSerif ArcEndSerif 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 'S/descBase' (shapeFrom -- 'S') (follow -- 'SRTail') + select-variant 's/ascBase' (shapeFrom -- 's') select-variant 's/descBase' (shapeFrom -- 's') (follow -- 'sRTail') select-variant 'revs/descBase' (shapeFrom -- 'revs') (follow -- 'sRTail') @@ -361,6 +363,24 @@ glyph-block Letter-Latin-S : begin y -- 0 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' derive-composites 'SCedilla' 0x15E 'S' 'cedillaExtShapeBelowOArc' diff --git a/font-src/glyphs/letter/shared.ptl b/font-src/glyphs/letter/shared.ptl index 6652b4012..21213247f 100644 --- a/font-src/glyphs/letter/shared.ptl +++ b/font-src/glyphs/letter/shared.ptl @@ -475,26 +475,26 @@ glyph-block Letter-Shared-Shapes : begin glyph-block-export : ArcStartSerif define ArcStartSerif : namespace 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 - 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 - 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 - 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 define ArcEndSerif : namespace 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 - 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 - 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 - 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 define [ArcStartHookTop cx cy stroke hookX hookY] : begin diff --git a/params/variants.toml b/params/variants.toml index 3d3dc032f..cd8434cd7 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -2169,6 +2169,7 @@ selector.f = "serifless" selector."f/sansSerif" = "serifless" selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft2" = "flatHookCLC2" +selector."f/compLigLeft3" = "flatHookCLC3" selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "serifless" selector.fLenis = "serifless" @@ -2182,6 +2183,7 @@ selector.f = "serifed" selector."f/sansSerif" = "serifless" selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft2" = "flatHookSerifedCLC2" +selector."f/compLigLeft3" = "flatHookSerifedCLC3" selector."f/phoneticLeft" = "serifedCrossbarAtXHeight" selector."f/tailless" = "serifed" selector.fLenis = "serifless" @@ -2195,6 +2197,7 @@ selector.f = "tailed" selector."f/sansSerif" = "tailed" selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft2" = "flatHookTailedCLC2" +selector."f/compLigLeft3" = "flatHookTailedCLC3" selector."f/phoneticLeft" = "tailedCrossbarAtXHeight" selector."f/tailless" = "serifless" selector.fLenis = "serifless" @@ -2208,6 +2211,7 @@ selector.f = "extended" selector."f/sansSerif" = "extended" selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft2" = "flatHookExtendedCLC2" +selector."f/compLigLeft3" = "flatHookExtendedCLC3" selector."f/phoneticLeft" = "extendedCrossbarAtXHeight" selector."f/tailless" = "serifless" selector.fLenis = "serifless" @@ -2221,6 +2225,7 @@ selector.f = "diagonalTailed" selector."f/sansSerif" = "diagonalTailed" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" +selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3" selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight" selector."f/tailless" = "serifless" selector.fLenis = "serifless" @@ -2234,6 +2239,7 @@ selector.f = "seriflessCrossbarAtXHeight" selector."f/sansSerif" = "seriflessCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft2" = "flatHookCLC2" +selector."f/compLigLeft3" = "flatHookCLC3" selector."f/phoneticLeft" = "seriflessCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight" @@ -2247,6 +2253,7 @@ selector.f = "serifedCrossbarAtXHeight" selector."f/sansSerif" = "seriflessCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft2" = "flatHookSerifedCLC2" +selector."f/compLigLeft3" = "flatHookSerifedCLC3" selector."f/phoneticLeft" = "serifedCrossbarAtXHeight" selector."f/tailless" = "serifedCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight" @@ -2260,6 +2267,7 @@ selector.f = "tailedCrossbarAtXHeight" selector."f/sansSerif" = "tailedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft2" = "flatHookTailedCLC2" +selector."f/compLigLeft3" = "flatHookTailedCLC3" selector."f/phoneticLeft" = "tailedCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight" @@ -2273,6 +2281,7 @@ selector.f = "extendedCrossbarAtXHeight" selector."f/sansSerif" = "extendedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft2" = "flatHookExtendedCLC2" +selector."f/compLigLeft3" = "flatHookExtendedCLC3" selector."f/phoneticLeft" = "extendedCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight" @@ -2286,6 +2295,7 @@ selector.f = "diagonalTailedCrossbarAtXHeight" selector."f/sansSerif" = "diagonalTailedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" +selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3" selector."f/phoneticLeft" = "diagonalTailedCrossbarAtXHeight" selector."f/tailless" = "seriflessCrossbarAtXHeight" selector.fLenis = "seriflessCrossbarAtXHeight" @@ -2299,6 +2309,7 @@ selector.f = "flatHook" selector."f/sansSerif" = "flatHook" selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft2" = "flatHookCLC2" +selector."f/compLigLeft3" = "flatHookCLC3" selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHook" selector.fLenis = "flatHook" @@ -2312,6 +2323,7 @@ selector.f = "flatHookSerifed" selector."f/sansSerif" = "flatHook" selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft2" = "flatHookSerifedCLC2" +selector."f/compLigLeft3" = "flatHookSerifedCLC3" selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight" selector."f/tailless" = "flatHookSerifed" selector.fLenis = "flatHook" @@ -2325,6 +2337,7 @@ selector.f = "flatHookTailed" selector."f/sansSerif" = "flatHookTailed" selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft2" = "flatHookTailedCLC2" +selector."f/compLigLeft3" = "flatHookTailedCLC3" selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight" selector."f/tailless" = "flatHook" selector.fLenis = "flatHook" @@ -2338,6 +2351,7 @@ selector.f = "flatHookExtended" selector."f/sansSerif" = "flatHookExtended" selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft2" = "flatHookExtendedCLC2" +selector."f/compLigLeft3" = "flatHookExtendedCLC3" selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight" selector."f/tailless" = "flatHook" selector.fLenis = "flatHook" @@ -2351,6 +2365,7 @@ selector.f = "flatHookDiagonalTailed" selector."f/sansSerif" = "flatHookDiagonalTailed" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" +selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3" selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/tailless" = "flatHook" selector.fLenis = "flatHook" @@ -2364,6 +2379,7 @@ selector.f = "flatHookCrossbarAtXHeight" selector."f/sansSerif" = "flatHookCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookCLC1" selector."f/compLigLeft2" = "flatHookCLC2" +selector."f/compLigLeft3" = "flatHookCLC3" selector."f/phoneticLeft" = "flatHookCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight" @@ -2377,6 +2393,7 @@ selector.f = "flatHookSerifedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookSerifedCLC1" selector."f/compLigLeft2" = "flatHookSerifedCLC2" +selector."f/compLigLeft3" = "flatHookSerifedCLC3" selector."f/phoneticLeft" = "flatHookSerifedCrossbarAtXHeight" selector."f/tailless" = "flatHookSerifedCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight" @@ -2390,6 +2407,7 @@ selector.f = "flatHookTailedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookTailedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookTailedCLC1" selector."f/compLigLeft2" = "flatHookTailedCLC2" +selector."f/compLigLeft3" = "flatHookTailedCLC3" selector."f/phoneticLeft" = "flatHookTailedCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight" @@ -2403,6 +2421,7 @@ selector.f = "flatHookExtendedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookExtendedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookExtendedCLC1" selector."f/compLigLeft2" = "flatHookExtendedCLC2" +selector."f/compLigLeft3" = "flatHookExtendedCLC3" selector."f/phoneticLeft" = "flatHookExtendedCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight" @@ -2416,6 +2435,7 @@ selector.f = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/sansSerif" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/compLigLeft1" = "flatHookDiagonalTailedCLC1" selector."f/compLigLeft2" = "flatHookDiagonalTailedCLC2" +selector."f/compLigLeft3" = "flatHookDiagonalTailedCLC3" selector."f/phoneticLeft" = "flatHookDiagonalTailedCrossbarAtXHeight" selector."f/tailless" = "flatHookCrossbarAtXHeight" selector.fLenis = "flatHookCrossbarAtXHeight" @@ -3769,6 +3789,7 @@ selector.s = "serifless" selector."s/sansSerif" = "serifless" selector."s/phoneticRight" = "serifless" selector."tsLig/lowerHalf" = "serifless" +selector."s/ascBase" = "unilateralSerifed" selector.sSwash = "serifless" selector.sRTail = "bottomSerifed" @@ -3779,6 +3800,7 @@ selector.s = "unilateralSerifed" selector."s/sansSerif" = "serifless" selector."s/phoneticRight" = "unilateralSerifed" selector."tsLig/lowerHalf" = "serifless" +selector."s/ascBase" = "unilateralSerifed" selector.sSwash = "unilateralSerifed" selector.sRTail = "bilateralSerifed" @@ -3789,6 +3811,7 @@ selector.s = "bilateralSerifed" selector."s/sansSerif" = "serifless" selector."s/phoneticRight" = "unilateralSerifed" selector."tsLig/lowerHalf" = "bilateralSerifed" +selector."s/ascBase" = "bilateralSerifed" selector.sSwash = "unilateralSerifed" selector.sRTail = "bilateralSerifed" @@ -3799,6 +3822,7 @@ selector.s = "unilateralInwardSerifed" selector."s/sansSerif" = "serifless" selector."s/phoneticRight" = "unilateralInwardSerifed" selector."tsLig/lowerHalf" = "serifless" +selector."s/ascBase" = "unilateralInwardSerifed" selector.sSwash = "unilateralInwardSerifed" selector.sRTail = "hybridSerifed1" @@ -3809,6 +3833,7 @@ selector.s = "bilateralInwardSerifed" selector."s/sansSerif" = "serifless" selector."s/phoneticRight" = "unilateralInwardSerifed" selector."tsLig/lowerHalf" = "bilateralInwardSerifed" +selector."s/ascBase" = "bilateralInwardSerifed" selector.sSwash = "unilateralInwardSerifed" selector.sRTail = "bilateralInwardSerifed" @@ -3824,6 +3849,7 @@ description = "Standard `t` shape" selector.t = "standard" selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft2" = "flatHook" +selector."t/phoneticLeft3" = "standard" selector.tHookTop = "standard" selector.tRTail = "flatHook" selector.tLTail = "standard" @@ -3836,6 +3862,7 @@ description = "`t` with flat hook" selector.t = "flatHook" selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft2" = "flatHook" +selector."t/phoneticLeft3" = "flatHook" selector.tHookTop = "flatHook" selector.tRTail = "flatHook" selector.tLTail = "flatHook" @@ -3848,6 +3875,7 @@ description = "`t` with diagonal tail" selector.t = "diagonalTailed" selector."t/phoneticLeft1" = "flatHook" selector."t/phoneticLeft2" = "flatHook" +selector."t/phoneticLeft3" = "diagonalTailed" selector.tHookTop = "diagonalTailed" selector.tRTail = "flatHook" selector.tLTail = "diagonalTailed" @@ -3860,6 +3888,7 @@ description = "Futura-like `t` shape" selector.t = "cross" selector."t/phoneticLeft1" = "cross" selector."t/phoneticLeft2" = "cross" +selector."t/phoneticLeft3" = "cross" selector.tHookTop = "cross" selector.tRTail = "cross" selector.tLTail = "cross" @@ -3872,6 +3901,7 @@ description = "`t` without hook and with ony half the cross bar" selector.t = "hooklessAsymmetric" selector."t/phoneticLeft1" = "hooklessAsymmetric" selector."t/phoneticLeft2" = "hooklessAsymmetric" +selector."t/phoneticLeft3" = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric" selector.tRTail = "hooklessAsymmetric" selector.tLTail = "hooklessAsymmetric" @@ -3884,6 +3914,7 @@ description = "Standard `t` shape with a shorter neck" selector.t = "standardShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck" +selector."t/phoneticLeft3" = "standard" selector.tHookTop = "standard" selector.tRTail = "flatHookShortNeck" selector.tLTail = "standardShortNeck" @@ -3896,6 +3927,7 @@ description = "`t` with flat hook and a slightly shorter neck" selector.t = "flatHookShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck" +selector."t/phoneticLeft3" = "flatHook" selector.tHookTop = "flatHook" selector.tRTail = "flatHookShortNeck" selector.tLTail = "flatHookShortNeck" @@ -3908,6 +3940,7 @@ description = "`t` with diagonal tail and a shorter neck" selector.t = "diagonalTailedShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck" +selector."t/phoneticLeft3" = "diagonalTailed" selector.tHookTop = "diagonalTailed" selector.tRTail = "flatHookShortNeck" selector.tLTail = "diagonalTailedShortNeck" @@ -3920,6 +3953,7 @@ description = "Futura-like `t` shape with a shorter neck" selector.t = "crossShortNeck" selector."t/phoneticLeft1" = "crossShortNeck" selector."t/phoneticLeft2" = "crossShortNeck" +selector."t/phoneticLeft3" = "cross" selector.tHookTop = "cross" selector.tRTail = "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/phoneticLeft1" = "hooklessAsymmetricShortNeck" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck" -selector.tHookTop = "hooklessAsymmetric" +selector."t/phoneticLeft3" = "hooklessAsymmetric" +selector.tHookTop = "cross" selector.tRTail = "hooklessAsymmetricShortNeck" selector.tLTail = "hooklessAsymmetricShortNeck" selector.tCurlyTail = "hooklessAsymmetricShortNeck" @@ -3944,6 +3979,7 @@ description = "Standard `t` shape with a more shorter neck" selector.t = "standardShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2" +selector."t/phoneticLeft3" = "standard" selector.tHookTop = "standard" selector.tRTail = "flatHookShortNeck2" selector.tLTail = "standardShortNeck2" @@ -3956,6 +3992,7 @@ description = "`t` with flat hook and a more shorter neck" selector.t = "flatHookShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2" +selector."t/phoneticLeft3" = "flatHook" selector.tHookTop = "flatHook" selector.tRTail = "flatHookShortNeck2" selector.tLTail = "flatHookShortNeck2" @@ -3968,6 +4005,7 @@ description = "`t` with diagonal tail and a more shorter neck" selector.t = "diagonalTailedShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2" +selector."t/phoneticLeft3" = "diagonalTailed" selector.tHookTop = "diagonalTailed" selector.tRTail = "flatHookShortNeck2" selector.tLTail = "diagonalTailedShortNeck2" @@ -3980,6 +4018,7 @@ description = "Futura-like `t` shape with a more shorter neck" selector.t = "crossShortNeck2" selector."t/phoneticLeft1" = "crossShortNeck2" selector."t/phoneticLeft2" = "crossShortNeck2" +selector."t/phoneticLeft3" = "cross" selector.tHookTop = "cross" selector.tRTail = "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/phoneticLeft1" = "hooklessAsymmetricShortNeck2" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck2" +selector."t/phoneticLeft3" = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric" selector.tRTail = "hooklessAsymmetricShortNeck2" selector.tLTail = "hooklessAsymmetricShortNeck2" @@ -4679,31 +4719,37 @@ tag = "cv51" rank = 1 description = "Long-S with standard bending hook" selector."longs" = "bentHook" +selector."longs/flatExt" = "flatHookExt" [prime.long-s.variants.flat-hook] rank = 2 description = "Long-S with flat hook" selector."longs" = "flatHook" +selector."longs/flatExt" = "flatHookExt" [prime.long-s.variants.bent-hook-descending] rank = 3 description = "Long-S with standard bending hook and descends baseline" selector."longs" = "bentHookDescending" +selector."longs/flatExt" = "flatHookDescendingExt" [prime.long-s.variants.flat-hook-descending] rank = 4 description = "Long-S with flat hook and descends baseline" selector."longs" = "flatHookDescending" +selector."longs/flatExt" = "flatHookDescendingExt" [prime.long-s.variants.bent-hook-tailed] rank = 5 description = "Long-S with standard bending hook and tail" selector."longs" = "bentHookTailed" +selector."longs/flatExt" = "flatHookTailedExt" [prime.long-s.variants.flat-hook-tailed] rank = 6 description = "Long-S with flat hook and tail" selector."longs" = "flatHookTailed" +selector."longs/flatExt" = "flatHookTailedExt" diff --git a/verdafile.mjs b/verdafile.mjs index b3f0be380..f6affd2e9 100644 --- a/verdafile.mjs +++ b/verdafile.mjs @@ -1165,6 +1165,7 @@ function validateRecommendedWeight(w, value, label) { thin: 100, extralight: 200, light: 300, + semilight: 350, regular: 400, book: 450, medium: 500,