diff --git a/changes/26.1.0.md b/changes/26.1.0.md index c48e7eba1..8d943c579 100644 --- a/changes/26.1.0.md +++ b/changes/26.1.0.md @@ -1 +1,2 @@ +* 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). diff --git a/font-src/glyphs/letter/latin/lower-e.ptl b/font-src/glyphs/letter/latin/lower-e.ptl index d760c2e31..d3fb9109a 100644 --- a/font-src/glyphs/letter/latin/lower-e.ptl +++ b/font-src/glyphs/letter/latin/lower-e.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Latin-Lower-E : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Shared : CreateDependentComposite + glyph-block-import Letter-Shared : CreateSelectorVariants DefineSelectorGlyph glyph-block-import Letter-Shared-Shapes : FlatHookDepth RetroflexHook glyph-block-import Letter-Shared-Shapes : SerifedArcEnd ArcEndSerif DToothlessRise glyph-block-import Mark-Shared-Metrics : markExtend markStroke markStress markFine @@ -131,15 +131,11 @@ glyph-block Letter-Latin-Lower-E : begin hookend O (sw -- stroke) g4 (df.width - [xTerminalR df]) [HookHeight top stroke] - define SmallEConfig : object - flatCrossbar { SmallEShape RevSmallEShape } - rounded { SmallERoundedShape RevSmallERoundedShape } - - define [AbkCheShape Body df top fDesc] : glyph-proc + define [AbkCheShape] : with-params [fDesc Body df top tailSlab] : glyph-proc local gap : (df.width - 2 * df.leftSB - 2.5 * df.mvs) * 0.375 - [HSwToV : 0.25 * df.mvs] define divSub : (df.width - gap - df.mvs) / Width define dfSub : DivFrame divSub 2 - include : Body dfSub top df.mvs + include : Body dfSub top df.mvs (tailSlab -- tailSlab) if fDesc : begin include : ExtendBelowBaseAnchors (-LongJut + 0.5 * Stroke) include : difference @@ -156,6 +152,10 @@ glyph-block Letter-Latin-Lower-E : begin flat [Math.min (df.leftSB + hd.x - [HSwToV : 0.5 * df.mvs]) (dfSub.leftSB + Width * (df.div - divSub))] yBar curl (dfSub.middle + Width * (df.div - divSub)) yBar + define SmallEConfig : object + flatCrossbar { SmallEShape RevSmallEShape } + rounded { SmallERoundedShape RevSmallERoundedShape } + foreach { suffix { Body RevBody } } [Object.entries SmallEConfig] : do create-glyph "e.\(suffix)" : glyph-proc include : MarkSet.e @@ -215,27 +215,6 @@ glyph-block Letter-Latin-Lower-E : begin y -- 0 yAttach -- lastKnot.y - create-glyph "Schwa/selector.\(suffix)" : glyph-proc - include : MarkSet.capital - set-base-anchor 'cvDecompose' 0 0 - DependentSelector.set currentGlyph suffix - create-glyph "schwa/selector.\(suffix)" : glyph-proc - include : MarkSet.e - set-base-anchor 'cvDecompose' 0 0 - DependentSelector.set currentGlyph suffix - - foreach { suffixSerif { styTop styBot } } [Object.entries CConfig] : do - create-glyph "Schwa.\(suffix).\(suffixSerif)" : glyph-proc - set-mark-anchor 'cvDecompose' 0 0 - include : Body [DivFrame 1] CAP [AdviceStroke2 2 3 CAP] (tailSlab -- styTop) - include : FlipAround Middle (CAP / 2) - create-glyph "schwa.\(suffix).\(suffixSerif)" : glyph-proc - set-mark-anchor 'cvDecompose' 0 0 - include : Body [DivFrame 1] XH [AdviceStroke2 2 3 XH] (tailSlab -- styTop) - include : FlipAround Middle (XH / 2) - select-variant "Schwa.\(suffix)" (follow -- "CTopSerifOnly") - select-variant "schwa.\(suffix)" (follow -- "cTopSerifOnly") - create-glyph "eRev.\(suffix)" : glyph-proc include : MarkSet.e include : RevBody [DivFrame 1] XH [AdviceStroke2 2 3 XH] @@ -245,29 +224,51 @@ glyph-block Letter-Latin-Lower-E : begin include : HBar.m [mix SB 0 0.7] [mix RightSB Width 0.7] (XH * 0.25 + Stroke * 0.25) Math.min [AdviceStroke 5] (0.25 * (XH - 3 * Stroke)) - create-glyph "cyrl/abk/Che.\(suffix)" : glyph-proc - local df : DivFrame para.diversityM 2.5 - set-width df.width - include : df.markSet.capital - include : AbkCheShape Body df CAP 0 + DefineSelectorGlyph "Schwa" suffix [MarkSet.capital] + DefineSelectorGlyph "schwa" suffix [MarkSet.e] - create-glyph "cyrl/abk/che.\(suffix)" : glyph-proc - local df : DivFrame para.diversityM 2.5 - set-width df.width - include : df.markSet.e - include : AbkCheShape Body df XH 0 + define abkCheDf : DivFrame para.diversityM 3 - create-glyph "cyrl/abk/CheDescender.\(suffix)" : glyph-proc - local df : DivFrame para.diversityM 2.5 - set-width df.width - include : df.markSet.capital - include : AbkCheShape Body df CAP 1 + DefineSelectorGlyph "cyrl/abk/Che" suffix [abkCheDf.markSet.capital] + DefineSelectorGlyph "cyrl/abk/che" suffix [abkCheDf.markSet.e] + DefineSelectorGlyph "cyrl/abk/CheDescender" suffix [abkCheDf.markSet.capDesc] + DefineSelectorGlyph "cyrl/abk/cheDescender" suffix [abkCheDf.markSet.p] - create-glyph "cyrl/abk/cheDescender.\(suffix)" : glyph-proc - local df : DivFrame para.diversityM 2.5 - set-width df.width - include : df.markSet.e - include : AbkCheShape Body df XH 1 + foreach { suffixSerif { styTop styBot } } [Object.entries CConfig] : do + create-glyph "Schwa.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : Body [DivFrame 1] CAP [AdviceStroke2 2 3 CAP] (tailSlab -- styTop) + include : FlipAround Middle (CAP / 2) + create-glyph "schwa.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : Body [DivFrame 1] XH [AdviceStroke2 2 3 XH] (tailSlab -- styTop) + include : FlipAround Middle (XH / 2) + + create-glyph "cyrl/abk/Che.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : AbkCheShape 0 Body abkCheDf CAP (tailSlab -- styBot) + create-glyph "cyrl/abk/che.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : AbkCheShape 0 Body abkCheDf XH (tailSlab -- styBot) + create-glyph "cyrl/abk/CheDescender.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : AbkCheShape 1 Body abkCheDf CAP (tailSlab -- styBot) + create-glyph "cyrl/abk/cheDescender.\(suffix).\(suffixSerif)" : glyph-proc + set-width 0 + set-mark-anchor 'cvDecompose' 0 0 + include : AbkCheShape 1 Body abkCheDf XH (tailSlab -- styBot) + + select-variant "Schwa.\(suffix)" (follow -- "CTopSerifOnly") + select-variant "schwa.\(suffix)" (follow -- "cTopSerifOnly") + select-variant "cyrl/abk/Che.\(suffix)" (follow -- 'CBottomSerifOnly') + select-variant "cyrl/abk/che.\(suffix)" (follow -- 'cBottomSerifOnly') + select-variant "cyrl/abk/CheDescender.\(suffix)" (follow -- 'CBottomSerifOnly') + select-variant "cyrl/abk/cheDescender.\(suffix)" (follow -- 'cBottomSerifOnly') select-variant 'e' 'e' alias 'cyrl/ie' 0x435 'e' @@ -277,26 +278,20 @@ glyph-block Letter-Latin-Lower-E : begin select-variant 'eRetroflexHook' 0x1D92 (follow -- 'e') select-variant 'eWithNotch' 0x2C78 (follow -- 'e') - select-variant "Schwa/selector" (follow -- "Schwa") - CreateDependentComposite 'Schwa' 0x18F "Schwa/selector" : object - flatCrossbar "Schwa.flatCrossbar" - rounded "Schwa.rounded" - alias 'cyrl/Schwa' 0x4D8 'Schwa' - - select-variant "schwa/selector" (follow -- "schwa") - CreateDependentComposite 'schwa' 0x259 "schwa/selector" : object - flatCrossbar "schwa.flatCrossbar" - rounded "schwa.rounded" - alias 'cyrl/schwa' 0x4D9 'schwa' - select-variant 'eRev' 0x258 (follow -- 'e') select-variant 'eBar' 0xAB33 (follow -- 'e') - select-variant 'cyrl/abk/Che' 0x4BC (follow -- 'e') - select-variant 'cyrl/abk/che' 0x4BD (follow -- 'e') - select-variant 'cyrl/abk/CheDescender' 0x4BE (follow -- 'e') - select-variant 'cyrl/abk/cheDescender' 0x4BF (follow -- 'e') + CreateSelectorVariants "Schwa" 0x18F [Object.keys SmallEConfig] + alias 'cyrl/Schwa' 0x4D8 'Schwa' + + CreateSelectorVariants "schwa" 0x259 [Object.keys SmallEConfig] + alias 'cyrl/schwa' 0x4D9 'schwa' + + CreateSelectorVariants 'cyrl/abk/Che' 0x4BC [Object.keys SmallEConfig] (follow -- 'e') + CreateSelectorVariants 'cyrl/abk/che' 0x4BD [Object.keys SmallEConfig] (follow -- 'e') + CreateSelectorVariants 'cyrl/abk/CheDescender' 0x4BE [Object.keys SmallEConfig] (follow -- 'e') + CreateSelectorVariants 'cyrl/abk/cheDescender' 0x4BF [Object.keys SmallEConfig] (follow -- 'e') glyph-block-import Letter-Blackboard : BBS BBD create-glyph 'mathbb/e' 0x1D556 : glyph-proc diff --git a/font-src/glyphs/letter/shared.ptl b/font-src/glyphs/letter/shared.ptl index 22c1df20a..d8351654c 100644 --- a/font-src/glyphs/letter/shared.ptl +++ b/font-src/glyphs/letter/shared.ptl @@ -60,6 +60,20 @@ glyph-block Letter-Shared : begin include [refer-glyph a] AS_BASE ALSO_METRICS include [refer-glyph b] + glyph-block-export CreateSelectorVariants + define [CreateSelectorVariants] : with-params [name code selectors [follow name]] : begin + select-variant "\(name)/selector" (follow -- follow) + local obj {.} + foreach item [items-of selectors] : set obj.(item) "\(name).\(item)" + CreateDependentComposite name code "\(name)/selector" obj + + glyph-block-export DefineSelectorGlyph + define [DefineSelectorGlyph name selector marks] : begin + create-glyph "\(name)/selector.\(selector)" : glyph-proc + include marks + set-base-anchor 'cvDecompose' 0 0 + DependentSelector.set currentGlyph selector + glyph-block-export SetGrekUpperTonos define [SetGrekUpperTonos kern] : glyph-proc set-base-anchor 'grekUpperTonos' kern (CAP - 0.75 * AccentStackOffset) diff --git a/params/variants.toml b/params/variants.toml index 0932e62ca..59eca6625 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -133,6 +133,7 @@ selector."C/descBase" = "serifless" selector."C/sansSerif" = "serifless" selector.CHookTop = "unilateralSerifed" selector.CTopSerifOnly = "serifless" +selector.CBottomSerifOnly = "serifless" [prime.capital-c.variants.unilateral-serifed] rank = 2 @@ -142,6 +143,7 @@ selector."C/descBase" = "bilateralSerifed" selector."C/sansSerif" = "serifless" selector.CHookTop = "unilateralSerifed" selector.CTopSerifOnly = "unilateralSerifed" +selector.CBottomSerifOnly = "serifless" [prime.capital-c.variants.bilateral-serifed] rank = 3 @@ -151,6 +153,7 @@ selector."C/descBase" = "bilateralSerifed" selector."C/sansSerif" = "serifless" selector.CHookTop = "bilateralSerifed" selector.CTopSerifOnly = "unilateralSerifed" +selector.CBottomSerifOnly = "bilateralSerifed" [prime.capital-c.variants.unilateral-inward-serifed] rank = 4 @@ -160,6 +163,7 @@ selector."C/descBase" = "hybridSerifed1" selector."C/sansSerif" = "serifless" selector.CHookTop = "unilateralInwardSerifed" selector.CTopSerifOnly = "unilateralInwardSerifed" +selector.CBottomSerifOnly = "serifless" [prime.capital-c.variants.bilateral-inward-serifed] rank = 5 @@ -169,6 +173,7 @@ selector."C/descBase" = "bilateralInwardSerifed" selector."C/sansSerif" = "serifless" selector.CHookTop = "bilateralInwardSerifed" selector.CTopSerifOnly = "unilateralInwardSerifed" +selector.CBottomSerifOnly = "bilateralInwardSerifed" [prime.capital-d]