From ce80ec0407b5128c45e211e9ee4503a71c58f7e1 Mon Sep 17 00:00:00 2001 From: John McWilliams <37010132+jmcwilliams403@users.noreply.github.com> Date: Sun, 15 Dec 2024 15:43:42 -0500 Subject: [PATCH] Add dezh and tesh with retroflex hook. (#2263) (#2616) --- changes/32.3.0.md | 6 ++- .../font-glyphs/src/auto-build/composite.ptl | 32 +++++++------ .../font-glyphs/src/letter/latin-ext/ezh.ptl | 17 +++++++ .../src/letter/latin-ext/long-s.ptl | 42 ++++++++++------ .../font-glyphs/src/letter/latin/lower-t.ptl | 12 ++--- packages/font-glyphs/src/letter/latin/s.ptl | 26 +++++----- params/variants.toml | 48 +++++++++---------- 7 files changed, 109 insertions(+), 74 deletions(-) diff --git a/changes/32.3.0.md b/changes/32.3.0.md index 43b4c3821..8c6f2de62 100644 --- a/changes/32.3.0.md +++ b/changes/32.3.0.md @@ -45,8 +45,8 @@ - MODIFIER LETTER CAPITAL W (`U+1D42`). - MODIFIER LETTER SMALL TURNED AE (`U+1D46`). - MODIFIER LETTER SMALL M (`U+1D50`). - - MODIFIER LETTER SMALL TURNED M (`U+015A`). - - LATIN SMALL LETTER UE (`U+016B`). + - MODIFIER LETTER SMALL TURNED M (`U+1D5A`). + - LATIN SMALL LETTER UE (`U+1D6B`). - LATIN SMALL LETTER M WITH MIDDLE TILDE (`U+1D6F`). - LATIN SMALL LETTER M WITH PALATAL HOOK (`U+1D86`). - MODIFIER LETTER SMALL M WITH HOOK (`U+1DAC`) ... MODIFIER LETTER SMALL TURNED M WITH LONG LEG (`U+1DAD`). @@ -112,3 +112,5 @@ - CLOSED SUBSET (`U+2ACF`) ... CLOSED SUPERSET OR EQUAL TO (`U+2AD2`). - ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW (`U+2B8C`) ... FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE (`U+2B94`). - DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS (`U+2BA0`) ... RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS (`U+2BA7`). + - LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK (`U+1DF19`). + - LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK (`U+1DF1C`). diff --git a/packages/font-glyphs/src/auto-build/composite.ptl b/packages/font-glyphs/src/auto-build/composite.ptl index a9e555bd4..bf0076f71 100644 --- a/packages/font-glyphs/src/auto-build/composite.ptl +++ b/packages/font-glyphs/src/auto-build/composite.ptl @@ -1624,21 +1624,23 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null createPhoneticLigatures ToLetter 'phonetic2' para.diversityMM 2 stdShrink 1 : list - list 0x02A3 { 'd/phoneticLeft' 'z/phoneticRight' } 'b' - list 0x02A4 { 'd/phoneticLeft' 'ezh/phoneticRight' } 'bp' - list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail/phoneticRight' } 'b' - list 0x02A6 { 't/phoneticLeft2' 's/phoneticRight' } 'b' - list 0x02A7 { 't/teshLeft' 'esh' } 'bp' - list 0x02A8 { 't/phoneticLeft1' 'cCurlyTail' } 'b' - list 0x02A9 { 'f/phoneticLeft' 'eng/phoneticRight' } 'bp' - list 0x02AA { 'l/phoneticLeft' 's/phoneticRight' } 'b' - list 0x02AB { 'l/phoneticLeft' 'z' } 'b' - list 0xAB66 { 'd/phoneticLeft' 'zRTail/phoneticRight' } 'bp' - list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'bp' - list 0x1DF12 { 'd/phoneticLeft' 'ezhPalatalHook/phoneticRight' } 'bp' - list 0x1DF17 { 't/teshLeft' 'eshPalatalHook' } 'bp' - list 0xFB05 { 'longs/flatExt' 't/phoneticRight' } null - list 0xFB06 { 's/compLigLeft' 't/phoneticRight' } null + list 0x02A3 { 'd/phoneticLeft' 'z/phoneticRight' } 'b' + list 0x02A4 { 'd/phoneticLeft' 'ezh/phoneticRight' } 'bp' + list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail/phoneticRight' } 'b' + list 0x02A6 { 't/phoneticLeft2' 's/phoneticRight' } 'b' + list 0x02A7 { 't/teshLeft' 'esh' } 'bp' + list 0x02A8 { 't/phoneticLeft1' 'cCurlyTail' } 'b' + list 0x02A9 { 'f/phoneticLeft' 'eng/phoneticRight' } 'bp' + list 0x02AA { 'l/phoneticLeft' 's/phoneticRight' } 'b' + list 0x02AB { 'l/phoneticLeft' 'z' } 'b' + list 0xAB66 { 'd/phoneticLeft' 'zRTail/phoneticRight' } 'bp' + list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'bp' + list 0x1DF12 { 'd/phoneticLeft' 'ezhPalatalHook/phoneticRight' } 'bp' + list 0x1DF17 { 't/teshLeft' 'eshPalatalHook' } 'bp' + list 0x1DF19 { 'd/phoneticLeft' 'ezhRetroflexHook/phoneticRight' } 'bp' + list 0x1DF1C { 't/teshLeft' 'eshRetroflexHook/teshRight' } 'bp' + list 0xFB05 { 'longs/compLigLeft' 't/compLigRight' } null + list 0xFB06 { 's/compLigLeft' 't/compLigRight' } null createPhoneticLigatures ToLetter 'phonetic3' para.diversityMM 3 stdShrink 1 : list list 0xFB03 { 'f/compLigLeft1' 'f/compLigLeft1' 'dotlessi/compLigRight' } null diff --git a/packages/font-glyphs/src/letter/latin-ext/ezh.ptl b/packages/font-glyphs/src/letter/latin-ext/ezh.ptl index 3cfae45fe..e3a592394 100644 --- a/packages/font-glyphs/src/letter/latin-ext/ezh.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/ezh.ptl @@ -216,6 +216,22 @@ glyph-block Letter-Latin-Ezh : begin ada -- SmallArchDepthA adb -- SmallArchDepthB + create-glyph "ezhRetroflexHook/phoneticRight.\(suffix)" : glyph-proc + include : MarkSet.p + local b : Math.min (O - SHook) ((-LongVJut) + 0.25 * Stroke) + include : EzhShape [DivFrame 1] XH b + pLeft -- (4/15) + isCursive -- isCursive + isSerifed -- isSerifed + hook -- SHook + ada -- SmallArchDepthA + adb -- SmallArchDepthB + terminalShape -- RetroflexConnectionTerminal + include : RetroflexHook.l + x -- SB + y -- b + yAttach -- (b + SHook) + create-glyph "ezhPalatalHook/phoneticRight.\(suffix)" : glyph-proc include : MarkSet.p local [object yMidBar] : include : EzhShape [DivFrame 1] XH Descender @@ -241,6 +257,7 @@ glyph-block Letter-Latin-Ezh : begin select-variant 'ezhRetroflexHook' 0x1D9A (follow -- 'ezh') select-variant 'ezhPalatalHook' 0x1DF18 (follow -- 'ezh') select-variant 'ezh/phoneticRight' + select-variant 'ezhRetroflexHook/phoneticRight' (follow -- 'ezh/phoneticRight') select-variant 'ezhPalatalHook/phoneticRight' (follow -- 'ezh/phoneticRight') alias 'cyrl/abk/Dze' 0x4E0 'Ezh' diff --git a/packages/font-glyphs/src/letter/latin-ext/long-s.ptl b/packages/font-glyphs/src/letter/latin-ext/long-s.ptl index 0d4affe28..7689a87cd 100644 --- a/packages/font-glyphs/src/letter/latin-ext/long-s.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/long-s.ptl @@ -174,7 +174,8 @@ glyph-block Letter-Latin-Long-S : begin include : MarkSet.bp currentGlyph.copyBaseAnchorIfAbsent 'leaningAbove' 'above' include : union - intersection [MaskAbove 0] [LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook] + intersection [MaskAbove 0] + LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook SmallFDiagonalTail [DivFrame 1] (Middle - [HSwToV HalfStroke]) StandardSerifs (Middle - [HSwToV HalfStroke]) serifStyle create-forked-glyph "longsBar.flatHookDiagonalTailed\(suffix)" : LongSSymmetricOverlayBar Middle @@ -212,37 +213,50 @@ glyph-block Letter-Latin-Long-S : begin include : LongSShape Ascender 0 (HookX + 0.25 * Stroke) Hook select-variant "longs" 0x17F - select-variant "longs/flatExt" (shapeFrom -- "longs") + select-variant "longs/compLigLeft" (shapeFrom -- "longs") select-variant "longsBar" 0x1E9D alias "esh" 0x283 "longs.flatHookTailedSerifless" - derive-composites "eshPalatalHook" 0x1D8B "esh" - PalatalHook.r (x -- RightSB) (y -- 0) (xLink -- Middle) (refSw -- [AdviceStroke 3]) - maskOut -- [intersection [MaskBelow 0] [MaskLeft (Middle + [HSwToV HalfStroke])]] + derive-composites "eshPalatalHook" 0x1D8B "esh" : PalatalHook.r + x -- RightSB + y -- 0 + xLink -- Middle + refSw -- [AdviceStroke 3] + maskOut -- [intersection [MaskBelow 0] [MaskLeft : Middle + [HSwToV HalfStroke]]] + create-glyph "eshRetroflexHook" 0x1D98 : glyph-proc include : MarkSet.bp include : LongSShape Ascender 0 (HookX + 0.25 * Stroke) Hook include : RetroflexHook.l - x -- Middle - (HookX + 0.25 * Stroke) + x -- (Middle - (HookX + 0.25 * Stroke)) y -- 0 yOverflow -- Stroke + create-glyph "eshRetroflexHook/teshRight" : glyph-proc + include : MarkSet.bp + local b : Math.min (2 * O - Stroke) ((-LongVJut) + 0.25 * Stroke) + include : LongSShape Ascender b (HookX + 0.25 * Stroke) Hook + include : RetroflexHook.l + x -- (Middle - (HookX + 0.25 * Stroke)) + y -- b + yOverflow -- Stroke + create-glyph "eshCurlyTail" 0x286 : glyph-proc include : MarkSet.bp local fine : AdviceStroke 3.5 - local rinner : LongJut / 2 - fine / 2 - local m1 : Middle + [HSwToV HalfStroke] - FBalance - # local x2 : mix RightSB m1 0.25 + # local rinner : LongJut / 2 - fine / 2 + local m : Middle + [HSwToV HalfStroke] - FBalance + # local x2 : mix RightSB m 0.25 # local y2 : Descender + O include : union LongSUpperHalf 1 (Middle - FBalance) Ascender 0 (HookX + 0.25 * Stroke) Hook dispiro widths.rhs - flat m1 (-O) [heading Downward] - curl m1 (Descender + fine + rinner * 2) - CurlyTail.n fine Descender (m1 - LongJut - [HSwToV Stroke]) - x2 -- RightSB + [HSwToV : 0.5 * fine] - y2 -- Descender + 0.5 * fine + flat m (-O) [heading Downward] + curl m (Descender + LongJut) + CurlyTail.n fine Descender (m - LongJut - [HSwToV Stroke]) + x2 -- (RightSB + [HSwToV : 0.5 * fine]) + y2 -- (Descender + 0.5 * fine) create-glyph "iFishHook" 0x27F : glyph-proc include : MarkSet.p diff --git a/packages/font-glyphs/src/letter/latin/lower-t.ptl b/packages/font-glyphs/src/letter/latin/lower-t.ptl index 2c4bd9362..e513d13f9 100644 --- a/packages/font-glyphs/src/letter/latin/lower-t.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-t.ptl @@ -107,8 +107,8 @@ glyph-block Letter-Latin-Lower-T : begin define Flat : namespace export : define [xCrossBarPos df sym] : match sym - ([Just SYM-LEFT] || [Just SYM-PR-LEFT]) {([BarLeftPos df sym] + TanSlope * Stroke) [mix df.width df.rightSB [mix 1 df.div 2]]} - __ {[mix 0 df.leftSB [mix 1 df.div 2]] [mix df.width df.rightSB [mix 1 df.div 2]]} + ([Just SYM-LEFT] || [Just SYM-PR-LEFT]) {([BarLeftPos df sym] + TanSlope * Stroke) [mix df.width df.rightSB : mix 1 df.div 2]} + __ {[mix 0 df.leftSB [mix 1 df.div 2]] [mix df.width df.rightSB : mix 1 df.div 2]} define [CrossLeft df] : mix 0 df.leftSB [mix 1 df.div 2] @@ -230,7 +230,7 @@ glyph-block Letter-Latin-Lower-T : begin include : df.markSet.b include : (Style.PLBody || Style.Body) df sym top 0 - create-glyph "t/phoneticRight.\(suffix)" : glyph-proc + create-glyph "t/compLigRight.\(suffix)" : glyph-proc set-width df.width include : df.markSet.b include : difference @@ -280,7 +280,7 @@ glyph-block Letter-Latin-Lower-T : begin local df : DivFrame 1 local fine : AdviceStroke 3.5 - local rinner : LongJut / 2 - fine / 2 + # local rinner : LongJut / 2 - fine / 2 local xLeft : Style.BarLeftPos df sym @@ -291,14 +291,14 @@ glyph-block Letter-Latin-Lower-T : begin include : dispiro widths.lhs flat xLeft (yCrossBar - Stroke) [heading Downward] - curl xLeft (fine + rinner * 2) + curl xLeft LongJut CurlyTail.n fine 0 (xLeft + [HSwToV Stroke] + LongJut) 0 0 select-variant 't' 't' select-variant 't/teshLeft' (follow -- 't') select-variant 't/phoneticLeft1' (shapeFrom -- 't') select-variant 't/phoneticLeft2' - select-variant 't/phoneticRight' + select-variant 't/compLigRight' CreateCommaCaronComposition 'tcaron' 0x165 't' derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla CreateAccentedComposition 'tComma' 0x21B 't' 'commaBelow' diff --git a/packages/font-glyphs/src/letter/latin/s.ptl b/packages/font-glyphs/src/letter/latin/s.ptl index ad18c0852..78ceab8e3 100644 --- a/packages/font-glyphs/src/letter/latin/s.ptl +++ b/packages/font-glyphs/src/letter/latin/s.ptl @@ -394,13 +394,13 @@ glyph-block Letter-Latin-S : begin derive-composites 'sPalatalHook' 0x1D8A 's' : PalatalHook.r x -- [mix [arch.adjust-x.bot Middle] DfLower.rightSB 0.75] 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] select-variant 's/ascBase' (shapeFrom -- 's') derive-composites "s/compLigLeft" null "s/ascBase" : glyph-proc eject-contour 'arcStartSerifR' - local sw : ArcStartSerifWidth [AdviceStroke2 2 3 XH] + local sw : ArcStartSerifWidth : AdviceStroke2 2 3 XH local fine : sw * [mix CThinB 1 0.6] local hd : FlatHookDepth DfCapital local yStart : XH - [ArcStartSerifDepth SHook] @@ -410,8 +410,8 @@ glyph-block Letter-Latin-S : begin widths.rhs fine flat (RightSB - [HSwToV fine]) yStart [heading Upward] curl (RightSB - [HSwToV fine]) (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] + alsoThru.g2 0.5 0.5 [widths.center : mix fine sw 0.35] + g4 (RightSB - leftExt) [Math.min (Ascender - 1.375 * sw) : mix XH Ascender 0.5] [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] @@ -437,8 +437,8 @@ glyph-block Letter-Latin-S : begin df -- df top -- CAP hook -- Hook - swStart -- BBS * [if (sign > 0) CThin 1] - swEnd -- BBS * [if (sign < 0) CThin 1] + swStart -- (BBS * [if (sign > 0) CThin 1]) + swEnd -- (BBS * [if (sign < 0) CThin 1]) oXLeftTop -- O ess -- BBD offsetC -- { @@ -463,8 +463,8 @@ glyph-block Letter-Latin-S : begin df -- df top -- XH hook -- SHook - swStart -- BBS * [if (sign > 0) CThin 1] - swEnd -- BBS * [if (sign < 0) CThin 1] + swStart -- (BBS * [if (sign > 0) CThin 1]) + swEnd -- (BBS * [if (sign < 0) CThin 1]) oXLeftTop -- (OX / 8) ess -- BBD offsetC -- { @@ -499,10 +499,10 @@ glyph-block Letter-Latin-S : begin define top : CAP * kTop define swBarThick : AdviceStroke 3 - define swBarFine : AdviceStroke [StrokeWidthBlend 3 5.5] + define swBarFine : AdviceStroke : StrokeWidthBlend 3 5.5 define [FullBar df sw] : dispiro - flat [xBot df] (0 + overflow) [widths.center.heading sw Downward] + flat [xBot df] (0 + overflow) [widths.center.heading sw Downward] curl [xTop df] (CAP - overflow) [widths.center.heading sw Downward] define [InterruptBar df] : begin @@ -527,9 +527,9 @@ glyph-block Letter-Latin-S : begin flat @x1 (@y5 + archDepthB) define [InterruptMask df] : begin - local gap : (swBarThick / Stroke * EssUpper) + [Math.max ((top - bot) / 6) [AdviceStroke2 3 3 (top - bot)]] + local gap : (swBarThick / Stroke * EssUpper) + [Math.max ((top - bot) / 6) : AdviceStroke2 3 3 (top - bot)] local yMid : mix bot top 0.5 - local yTermLeft : mix yMid (top - [AdviceSArchDepth (top - bot) (-1) swBarThick]) 0.5 + local yTermLeft : mix yMid (top - [AdviceSArchDepth (top - bot) (-1) swBarThick]) 0.5 local yTermRight : mix yMid (bot + [AdviceSArchDepth (top - bot) (-1) swBarThick]) 0.5 return : dispiro [corner 0 yTermLeft : widths.center gap] [corner Width yTermRight] @@ -539,7 +539,7 @@ glyph-block Letter-Latin-S : begin set-base-anchor 'cvDecompose' df.middle (CAP / 2) DependentSelector.set currentGlyph selector - local [outlineMask] : DollarMask df [AdviceStroke2 2 3 CAP] + local [outlineMask] : DollarMask df : AdviceStroke2 2 3 CAP include : difference [FullBar df swBarThick] [outlineMask] if (fillType === 1) : include : intersection [FullBar df swBarFine] [outlineMask] diff --git a/params/variants.toml b/params/variants.toml index 6d88095a9..670ce191d 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -4243,7 +4243,7 @@ descriptionAffix = "bent hook" selectorAffix.t = "bentHook" selectorAffix."t/phoneticLeft1" = "flatHook" selectorAffix."t/phoneticLeft2" = "flatHook" -selectorAffix."t/phoneticRight" = "bentHook" +selectorAffix."t/compLigRight" = "bentHook" selectorAffix.tHookTop = "bentHook" selectorAffix.tHookTopRTail = "hookless" selectorAffix.tRTail = "hookless" @@ -4257,7 +4257,7 @@ descriptionAffix = "flat hook" selectorAffix.t = "flatHook" selectorAffix."t/phoneticLeft1" = "flatHook" selectorAffix."t/phoneticLeft2" = "flatHook" -selectorAffix."t/phoneticRight" = "flatHook" +selectorAffix."t/compLigRight" = "flatHook" selectorAffix.tHookTop = "flatHook" selectorAffix.tHookTopRTail = "hookless" selectorAffix.tRTail = "hookless" @@ -4271,7 +4271,7 @@ descriptionAffix = "diagonal tail" selectorAffix.t = "diagonalTailed" selectorAffix."t/phoneticLeft1" = "flatHook" selectorAffix."t/phoneticLeft2" = "flatHook" -selectorAffix."t/phoneticRight" = "diagonalTailed" +selectorAffix."t/compLigRight" = "diagonalTailed" selectorAffix.tHookTop = "diagonalTailed" selectorAffix.tHookTopRTail = "hookless" selectorAffix.tRTail = "hookless" @@ -4286,7 +4286,7 @@ descriptionJoiner = "without" selectorAffix.t = "hookless" selectorAffix."t/phoneticLeft1" = "hookless" selectorAffix."t/phoneticLeft2" = "hookless" -selectorAffix."t/phoneticRight" = "hookless" +selectorAffix."t/compLigRight" = "hookless" selectorAffix.tHookTop = "hookless" selectorAffix.tHookTopRTail = "hookless" selectorAffix.tRTail = "hookless" @@ -4304,7 +4304,7 @@ descriptionAffix = "crossbar at both sides of the vertical stem" selectorAffix.t = "" selectorAffix."t/phoneticLeft1" = "" selectorAffix."t/phoneticLeft2" = "" -selectorAffix."t/phoneticRight" = "" +selectorAffix."t/compLigRight" = "" selectorAffix.tHookTop = "" selectorAffix.tHookTopRTail = "" selectorAffix.tRTail = "" @@ -4319,7 +4319,7 @@ descriptionAffix = "crossbar at only right side of the vertical stem" selectorAffix.t = "asymmetric" selectorAffix."t/phoneticLeft1" = "asymmetric" selectorAffix."t/phoneticLeft2" = "asymmetric" -selectorAffix."t/phoneticRight" = "asymmetric" +selectorAffix."t/compLigRight" = "asymmetric" selectorAffix.tHookTop = "asymmetric" selectorAffix.tHookTopRTail = "asymmetric" selectorAffix.tRTail = "asymmetric" @@ -4335,7 +4335,7 @@ keyAffix = "" selectorAffix.t = "" selectorAffix."t/phoneticLeft1" = "" selectorAffix."t/phoneticLeft2" = "" -selectorAffix."t/phoneticRight" = "" +selectorAffix."t/compLigRight" = "" selectorAffix.tHookTop = "" selectorAffix.tHookTopRTail = "" selectorAffix.tRTail = "" @@ -4349,7 +4349,7 @@ descriptionAffix = "a shorter neck" selectorAffix.t = "shortNeck" selectorAffix."t/phoneticLeft1" = "shortNeck" selectorAffix."t/phoneticLeft2" = "shortNeck" -selectorAffix."t/phoneticRight" = "" +selectorAffix."t/compLigRight" = "" selectorAffix.tHookTop = "" selectorAffix.tHookTopRTail = "" selectorAffix.tRTail = "shortNeck" @@ -4363,7 +4363,7 @@ descriptionAffix = "a more shorter neck" selectorAffix.t = "shortNeck2" selectorAffix."t/phoneticLeft1" = "shortNeck2" selectorAffix."t/phoneticLeft2" = "shortNeck2" -selectorAffix."t/phoneticRight" = "" +selectorAffix."t/compLigRight" = "" selectorAffix.tHookTop = "" selectorAffix.tHookTopRTail = "" selectorAffix.tRTail = "shortNeck2" @@ -5197,7 +5197,7 @@ rank = 1 groupRank = 10 descriptionAffix = "bending top hook" selectorAffix."longs" = "bentHook" -selectorAffix."longs/flatExt" = "flatHookExt" +selectorAffix."longs/compLigLeft" = "flatHookExt" selectorAffix."longsBar" = "bentHook" [prime.long-s.variants-buildup.stages.top.flat-hook] @@ -5205,7 +5205,7 @@ rank = 2 groupRank = 20 descriptionAffix = "flat top hook" selectorAffix."longs" = "flatHook" -selectorAffix."longs/flatExt" = "flatHookExt" +selectorAffix."longs/compLigLeft" = "flatHookExt" selectorAffix."longsBar" = "flatHook" [prime.long-s.variants-buildup.stages.bottom."*"] @@ -5216,7 +5216,7 @@ rank = 1 groupRank = 1 keyAffix = "" selectorAffix."longs" = "" -selectorAffix."longs/flatExt" = "" +selectorAffix."longs/compLigLeft" = "" selectorAffix."longsBar" = "" [prime.long-s.variants-buildup.stages.bottom.descending] @@ -5224,7 +5224,7 @@ rank = 2 groupRank = 2 descriptionAffix = "terminal descends baseline" selectorAffix."longs" = "descending" -selectorAffix."longs/flatExt" = "descending" +selectorAffix."longs/compLigLeft" = "descending" selectorAffix."longsBar" = "descending" [prime.long-s.variants-buildup.stages.bottom.tailed] @@ -5232,7 +5232,7 @@ rank = 3 groupRank = 3 descriptionAffix = "terminal has a tail" selectorAffix."longs" = "tailed" -selectorAffix."longs/flatExt" = "tailed" +selectorAffix."longs/compLigLeft" = "tailed" selectorAffix."longsBar" = "tailed" [prime.long-s.variants-buildup.stages.bottom.diagonal-tailed] @@ -5240,7 +5240,7 @@ rank = 4 groupRank = 4 descriptionAffix = "terminal has a diagonal tail" selectorAffix."longs" = "diagonalTailed" -selectorAffix."longs/flatExt" = "diagonalTailed" +selectorAffix."longs/compLigLeft" = "diagonalTailed" selectorAffix."longsBar" = "diagonalTailed" [prime.long-s.variants-buildup.stages.serifs.serifless__non-descending] @@ -5250,7 +5250,7 @@ keyAffix = "serifless" descriptionJoiner = "without" descriptionAffix = "serifs" selectorAffix."longs" = "serifless" -selectorAffix."longs/flatExt" = "serifless" +selectorAffix."longs/compLigLeft" = "serifless" selectorAffix."longsBar" = "serifless" [prime.long-s.variants-buildup.stages.serifs.serifless__descending] @@ -5260,21 +5260,21 @@ keyAffix = "" descriptionJoiner = "without" descriptionAffix = "serifs" selectorAffix."longs" = "serifless" -selectorAffix."longs/flatExt" = "serifless" +selectorAffix."longs/compLigLeft" = "serifless" selectorAffix."longsBar" = "serifless" [prime.long-s.variants-buildup.stages.serifs.middle-serifed] rank = 2 descriptionAffix = "middle serif" selectorAffix."longs" = "middleSerifed" -selectorAffix."longs/flatExt" = "middleSerifed" +selectorAffix."longs/compLigLeft" = "middleSerifed" selectorAffix."longsBar" = "serifless" [prime.long-s.variants-buildup.stages.serifs.middle-serifed-xh] rank = 3 descriptionAffix = "middle serif at x-height" selectorAffix."longs" = "middleSerifedXH" -selectorAffix."longs/flatExt" = "middleSerifedXH" +selectorAffix."longs/compLigLeft" = "middleSerifedXH" selectorAffix."longsBar" = "serifless" [prime.long-s.variants-buildup.stages.serifs.bottom-serifed] @@ -5282,7 +5282,7 @@ rank = 4 enableIf = [{ bottom = "non-descending" }] descriptionAffix = "bottom serif" selectorAffix."longs" = "bottomSerifed" -selectorAffix."longs/flatExt" = "bottomSerifed" +selectorAffix."longs/compLigLeft" = "bottomSerifed" selectorAffix."longsBar" = "bottomSerifed" [prime.long-s.variants-buildup.stages.serifs.double-serifed] @@ -5290,7 +5290,7 @@ rank = 5 enableIf = [{ bottom = "non-descending" }] descriptionAffix = "bottom and middle serifs" selectorAffix."longs" = "doubleSerifed" -selectorAffix."longs/flatExt" = "doubleSerifed" +selectorAffix."longs/compLigLeft" = "doubleSerifed" selectorAffix."longsBar" = "bottomSerifed" [prime.long-s.variants-buildup.stages.serifs.double-serifed-xh] @@ -5298,7 +5298,7 @@ rank = 6 enableIf = [{ bottom = "non-descending" }] descriptionAffix = "bottom and middle serifs at x-height" selectorAffix."longs" = "doubleSerifedXH" -selectorAffix."longs/flatExt" = "doubleSerifedXH" +selectorAffix."longs/compLigLeft" = "doubleSerifedXH" selectorAffix."longsBar" = "bottomSerifed" @@ -5362,7 +5362,7 @@ selectorAffix.eszet = "serifless" [prime.eszet.variants-buildup.stages.serifs.middle-serifed] rank = 2 descriptionAffix = "serif at middle" -selectorAffix.eszet = "middleSerifed" +selectorAffix.eszet = { if = [{ body = "traditional" }, { body = "traditional-flat-hook" }], then = "middleSerifedXH", else = "middleSerifed" } [prime.eszet.variants-buildup.stages.serifs.middle-serifed-xh] rank = 3 @@ -5380,7 +5380,7 @@ selectorAffix.eszet = "bottomSerifed" enableIf = [{terminal = "non-descending"}] rank = 5 descriptionAffix = "serif at middle and bottom" -selectorAffix.eszet = "dualSerifed" +selectorAffix.eszet = { if = [{ body = "traditional" }, { body = "traditional-flat-hook" }], then = "dualSerifedXH", else = "dualSerifed" } [prime.eszet.variants-buildup.stages.serifs.dual-serifed-xh] enableIf = [