From 30a050e307912bd235acfc9ec180782b69e06be1 Mon Sep 17 00:00:00 2001 From: be5invis Date: Wed, 9 Aug 2023 15:36:24 -0700 Subject: [PATCH] Add XH-height middle-serifed and dual-serifed variants for Eszet. As a result, current variants are reordered (#1904). --- changes/{26.1.0.md => 27.0.0.md} | 1 + changes/{ => archives/26.x}/26.0.0.md | 0 changes/{ => archives/26.x}/26.0.1.md | 0 changes/{ => archives/26.x}/26.0.2.md | 0 font-src/glyphs/letter/latin-ext/eszet.ptl | 37 ++++++++++++-------- font-src/glyphs/letter/latin-ext/long-s.ptl | 2 +- params/variants.toml | 38 ++++++++++++++++----- 7 files changed, 54 insertions(+), 24 deletions(-) rename changes/{26.1.0.md => 27.0.0.md} (62%) rename changes/{ => archives/26.x}/26.0.0.md (100%) rename changes/{ => archives/26.x}/26.0.1.md (100%) rename changes/{ => archives/26.x}/26.0.2.md (100%) diff --git a/changes/26.1.0.md b/changes/27.0.0.md similarity index 62% rename from changes/26.1.0.md rename to changes/27.0.0.md index 3003d33e5..ab6955680 100644 --- a/changes/26.1.0.md +++ b/changes/27.0.0.md @@ -1,3 +1,4 @@ +* \[**Breaking**\] Add XH-height middle-serifed and dual-serifed variants for Eszet. As a result, current variants are reordered (#1904). * Make Cyrillic Abkhasian Che respond to C's serifs (#1898). * Drop APL form for `U+220D` as it is not used by any APL languages (#1901). * Fix `cv36`, `cv46`, `cv47`, `cv48`, `cv49`, `cv50`, `cv61`, and `cv74` under Curly Slab. diff --git a/changes/26.0.0.md b/changes/archives/26.x/26.0.0.md similarity index 100% rename from changes/26.0.0.md rename to changes/archives/26.x/26.0.0.md diff --git a/changes/26.0.1.md b/changes/archives/26.x/26.0.1.md similarity index 100% rename from changes/26.0.1.md rename to changes/archives/26.x/26.0.1.md diff --git a/changes/26.0.2.md b/changes/archives/26.x/26.0.2.md similarity index 100% rename from changes/26.0.2.md rename to changes/archives/26.x/26.0.2.md diff --git a/font-src/glyphs/letter/latin-ext/eszet.ptl b/font-src/glyphs/letter/latin-ext/eszet.ptl index a6f08b87d..7cb89f6d2 100644 --- a/font-src/glyphs/letter/latin-ext/eszet.ptl +++ b/font-src/glyphs/letter/latin-ext/eszet.ptl @@ -2,6 +2,7 @@ $$include '../../../meta/macros.ptl' import [mix fallback SuffixCfg] from"../../../support/utils.mjs" import [Dotless CvDecompose] from"../../../support/gr.mjs" +import [maskBits] from"../../../support/util/mask-bit.mjs" glyph-module @@ -10,24 +11,28 @@ glyph-block Letter-Latin-Lower-Eszet : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : FlatHookDepth PalatalHook CyrDescender SerifFrame glyph-block-import Letter-Latin-S : AdviceSArchDepth + glyph-block-import Letter-Latin-Lower-F : fbar define NO-TAIL 0 define DESCENDING 1 define TAILED 2 - define SERIF-NONE 0 - define SERIF-BOT 1 - define SERIF-MID 2 - define SERIF-DUAL 3 + define SERIF-NONE 0 + define SERIF-BOT 1 + define SERIF-MID 2 + define SERIF-MID-XH 4 - define [EszetSerifs df fTraditional slab] : begin - local sf : SerifFrame.fromDf [DivFrame 1] XH 0 + define SERIF-DUAL : SERIF-BOT + SERIF-MID + define SERIF-DUAL-XH : SERIF-BOT + SERIF-MID-XH + + define [EszetSerifs df fTraditional slab] : glyph-proc + local sf : SerifFrame.fromDf [DivFrame 1] fbar 0 local lb : if fTraditional sf.lb.full sf.lb.outer - return : match slab - [Just SERIF-BOT] : composite-proc lb - [Just SERIF-MID] : composite-proc sf.lt.outer - [Just SERIF-DUAL] : composite-proc lb sf.lt.outer - __ : no-shape + if [maskBits slab SERIF-BOT] : include lb + if [maskBits slab SERIF-MID] : include sf.lt.outer + + local sfXH : SerifFrame.fromDf [DivFrame 1] XH 0 + if [maskBits slab SERIF-MID-XH] : include sfXH.lt.outer define [Traditional fFlathook] : function [slab tail] : glyph-proc include : MarkSet.bp @@ -158,10 +163,12 @@ glyph-block Letter-Latin-Lower-Eszet : begin 'descending' DESCENDING 'tailed' TAILED object # serifs - serifless 0 - bottomSerifed 1 - middleSerifed 2 - dualSerifed 3 + serifless SERIF-NONE + bottomSerifed SERIF-BOT + middleSerifed SERIF-MID + dualSerifed SERIF-DUAL + middleSerifedXH SERIF-MID-XH + dualSerifedXH SERIF-DUAL-XH foreach { suffix { Base tail serif } } [pairs-of EszetConfig] : do create-glyph "eszet.\(suffix)" : Base serif tail diff --git a/font-src/glyphs/letter/latin-ext/long-s.ptl b/font-src/glyphs/letter/latin-ext/long-s.ptl index 04876cada..7bf33f467 100644 --- a/font-src/glyphs/letter/latin-ext/long-s.ptl +++ b/font-src/glyphs/letter/latin-ext/long-s.ptl @@ -2,7 +2,7 @@ $$include "../../../meta/macros.ptl" import [mix linreg clamp fallback] from"../../../support/utils.mjs" import [Dotless CvDecompose] from"../../../support/gr.mjs" -import [maskBit maskBits popCountByte] from"../../../support/util/mask-bit.mjs" +import [maskBit maskBits] from"../../../support/util/mask-bit.mjs" glyph-module diff --git a/params/variants.toml b/params/variants.toml index a9ea52c82..e789d7dbc 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -4093,21 +4093,25 @@ next = "terminal" [prime.eszet.variants-buildup.stages.body.traditional] rank = 1 +groupRank = 10 descriptionAffix = "traditional, Fraktur-like shape" selectorAffix.eszet = "traditional" [prime.eszet.variants-buildup.stages.body.traditional-flat-hook] rank = 2 +groupRank = 20 descriptionAffix = "traditional Fraktur-like shape (containing a flat top hook)" selectorAffix.eszet = "traditionalFlatHook" [prime.eszet.variants-buildup.stages.body.sulzbacher] rank = 3 +groupRank = 30 descriptionAffix = "more modern, beta-like shape" selectorAffix.eszet = "sulzbacher" [prime.eszet.variants-buildup.stages.body.longs-s-lig] rank = 4 +groupRank = 40 descriptionAffix = "ligature of long-S (`ſ`) and `s`" selectorAffix.eszet = "longSSLig" @@ -4116,16 +4120,19 @@ next = "serifs" [prime.eszet.variants-buildup.stages.terminal.non-descending] rank = 1 +groupRank = 1 keyAffix = "" selectorAffix.eszet = "" [prime.eszet.variants-buildup.stages.terminal.descending] rank = 2 +groupRank = 2 descriptionAffix = "terminal descends baseline" selectorAffix.eszet = "descending" [prime.eszet.variants-buildup.stages.terminal.tailed] rank = 3 +groupRank = 2 descriptionAffix = "terminal containing tail" selectorAffix.eszet = "tailed" @@ -4135,23 +4142,38 @@ desceiptioAffix = "serifs" descriptionJoiner = "without" selectorAffix.eszet = "serifless" -[prime.eszet.variants-buildup.stages.serifs.bottom-serifed] -enableIf = [{terminal = "non-descending"}] -rank = 2 -descriptionAffix = "serif at bottom" -selectorAffix.eszet = "bottomSerifed" - [prime.eszet.variants-buildup.stages.serifs.middle-serifed] -rank = 3 +rank = 2 descriptionAffix = "serif at middle" selectorAffix.eszet = "middleSerifed" -[prime.eszet.variants-buildup.stages.serifs.dual-serifed] +[prime.eszet.variants-buildup.stages.serifs.middle-serifed-xh] +rank = 3 +enableIf = [{body = "sulzbacher"}, {body = "longs-s-lig"}] +descriptionAffix = "serif at middle at x-height" +selectorAffix.eszet = "middleSerifedXH" + +[prime.eszet.variants-buildup.stages.serifs.bottom-serifed] enableIf = [{terminal = "non-descending"}] rank = 4 +descriptionAffix = "serif at bottom" +selectorAffix.eszet = "bottomSerifed" + +[prime.eszet.variants-buildup.stages.serifs.dual-serifed] +enableIf = [{terminal = "non-descending"}] +rank = 5 descriptionAffix = "serif at middle and bottom" selectorAffix.eszet = "dualSerifed" +[prime.eszet.variants-buildup.stages.serifs.dual-serifed-xh] +enableIf = [ + {terminal = "non-descending", body = "sulzbacher"}, + {terminal = "non-descending", body = "longs-s-lig"} +] +rank = 6 +descriptionAffix = "serif at middle (x-height) and bottom" +selectorAffix.eszet = "dualSerifedXH" + [prime.lower-eth]