diff --git a/changes/7.0.0.md b/changes/7.0.0.md index 84780db66..1296f06ce 100644 --- a/changes/7.0.0.md +++ b/changes/7.0.0.md @@ -15,6 +15,8 @@ - `n`. - `q`. - `u`. + - Long-S (`ſ`). + - Eszet (`ß`). - Greek Small Iota (`ι`). - Upper Gamma (`Γ`). - Cyrillic Ze (`З` and `з`). @@ -72,6 +74,7 @@ - Add tailed variants for Cyrillic El, En, Che, Yery and Ya (#972). - Add more serifed variants for `K`, `k`, `n`, Cyrillic Ka (`К` and `к`) and Cyrillic Ef (`ф`) to better reproduce PT Mono (#986). - Add top-left serifed variant for `m` (#1052). + - Add descending variants for Long-S and Eszet (#1070). - Add SS18 to represent Input Mono (#990). * Fixes of variant selector application on derived letters or letter forms, including: - Cyrillic En (#1006). diff --git a/font-src/glyphs/letter/latin-ext/eszet.ptl b/font-src/glyphs/letter/latin-ext/eszet.ptl index ca01c94eb..74d4802c1 100644 --- a/font-src/glyphs/letter/latin-ext/eszet.ptl +++ b/font-src/glyphs/letter/latin-ext/eszet.ptl @@ -11,6 +11,10 @@ glyph-block Letter-Latin-Eszet : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : FlatHookDepth + define NO-TAIL 0 + define DESCENDING 1 + define TAILED 2 + local ymiddle : [mix 0 CAP 0.5] - HalfStroke local ymiddleCap : [mix 0 CAP 0.54] - HalfStroke local xmiddle : Math.max (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75) @@ -53,8 +57,12 @@ glyph-block Letter-Latin-Eszet : begin widths.center (Stroke * 1.1) corner tl (tm - Stroke) [heading Upward] corner (RightSB - HalfStroke * 1.2 - OX) t [heading Upward] - if tail : include : VerticalHook (l + HalfStroke * HVContrast) 0 (-Hook * 1.2) Hook + if slab : include : LeftwardBottomSerif SB 0 SideJut + include : match tail + [Just DESCENDING] : VBarLeft l Descender 0 + [Just TAILED] : VerticalHook (l + HalfStroke * HVContrast) 0 (-Hook * 1.2) Hook + __ : glyph-proc define [SulzbacherBody slab tail] : glyph-proc @@ -76,8 +84,12 @@ glyph-block Letter-Latin-Eszet : begin arcvh flat xmiddleBot 0 curl xfinal 0 [heading Leftward] - if tail : include : VerticalHook (SB + HalfStroke * HVContrast) 0 (-Hook * 1.2) Hook + if slab : include : LeftwardBottomSerif SB 0 SideJut + include : match tail + [Just DESCENDING] : VBarLeft SB Descender 0 + [Just TAILED] : VerticalHook (SB + HalfStroke * HVContrast) 0 (-Hook * 1.2) Hook + __ : glyph-proc define [LongSSLigBody slab tail] : glyph-proc @@ -113,20 +125,28 @@ glyph-block Letter-Latin-Eszet : begin alsoThru.g2 0.5 0.50 [widths.center swInner] g4 (RightSB - OX) (innerSmoothB - 2 * TanSlope * swInner) [widths.rhs.heading swInner Downward] arcvh - flat ([Math.max (sEndX + 1) : Math.min (RightSB - innerSmoothB) [mix sEndX RightSB 0.375]] + CorrectionOMidX * swInner / 2 ) 0 + flat ([Math.max (sEndX + 1) : Math.min (RightSB - innerSmoothB) [mix sEndX RightSB 0.375]] + CorrectionOMidX * swInner / 2 + TanSlope * swInner ) 0 curl sEndX 0 [heading Leftward] - if tail : include : VerticalHook (SB + 0.5 * swOuter * HVContrast) 0 (-Hook * 1.2) Hook swOuter if slab : include : LeftwardBottomSerif SB 0 SideJut + include : match tail + [Just DESCENDING] : VBarLeft SB Descender 0 + [Just TAILED] : VerticalHook (SB + 0.5 * swOuter * HVContrast) 0 (-Hook * 1.2) Hook + __ : glyph-proc - create-glyph 'eszet.traditional' : TraditionalBody false SLAB false - create-glyph 'eszet.traditionalTailed' : TraditionalBody false false true - create-glyph 'eszet.traditionalFlatHook' : TraditionalBody true SLAB false - create-glyph 'eszet.traditionalFlatHookTailed' : TraditionalBody true false true - create-glyph 'eszet.sulzbacher' : SulzbacherBody SLAB false - create-glyph 'eszet.sulzbacherTailed' : SulzbacherBody false true - create-glyph 'eszet.longSSLig' : LongSSLigBody SLAB false - create-glyph 'eszet.longSSLigTailed' : LongSSLigBody false true + + create-glyph 'eszet.traditional' : TraditionalBody false SLAB NO-TAIL + create-glyph 'eszet.traditionalDescending' : TraditionalBody false false DESCENDING + create-glyph 'eszet.traditionalTailed' : TraditionalBody false false TAILED + create-glyph 'eszet.traditionalFlatHook' : TraditionalBody true SLAB NO-TAIL + create-glyph 'eszet.traditionalFlatHookDescending' : TraditionalBody true false DESCENDING + create-glyph 'eszet.traditionalFlatHookTailed' : TraditionalBody true false TAILED + create-glyph 'eszet.sulzbacher' : SulzbacherBody SLAB NO-TAIL + create-glyph 'eszet.sulzbacherDescending' : SulzbacherBody false DESCENDING + create-glyph 'eszet.sulzbacherTailed' : SulzbacherBody false TAILED + create-glyph 'eszet.longSSLig' : LongSSLigBody SLAB NO-TAIL + create-glyph 'eszet.longSSLigDescending' : LongSSLigBody false DESCENDING + create-glyph 'eszet.longSSLigTailed' : LongSSLigBody false TAILED select-variant 'eszet' 0xDF diff --git a/font-src/glyphs/letter/latin-ext/long-s.ptl b/font-src/glyphs/letter/latin-ext/long-s.ptl index c4753e4b1..5bbe6b685 100644 --- a/font-src/glyphs/letter/latin-ext/long-s.ptl +++ b/font-src/glyphs/letter/latin-ext/long-s.ptl @@ -80,23 +80,42 @@ glyph-block Letter-Latin-Long-S : begin create-forked-glyph 'longsbar.bentHookTailed' : LongSBentHookOverlayBar m - create-glyph 'longs.flatHook' : glyph-proc - include : MarkSet.b + create-glyph 'longs.bentHookDescending' : glyph-proc + include : MarkSet.if + local m : StdSmallFBarLeftPos true + include : LongSBentHookBase (XH / 2) m false + include : VBarLeft m Descender 0 + + create-forked-glyph 'longsbar.bentHookDescending' : LongSBentHookOverlayBar m + + define [LongSFlatHookNoTailShape m yBot fSlab] : glyph-proc local hd : FlatHookDepth [DivFrame 1] - local m : Middle - JBalance - HalfStroke * HVContrast include : dispiro widths.lhs flat RightSB CAP curl (m + hd.x) CAP archv flat m (CAP - hd.y) - curl m 0 [heading Downward] + curl m yBot [heading Downward] set-base-anchor 'overlay' (m + Stroke * 0.65 * HVContrast) (CAP * OverlayPos) - if SLAB : begin - include : tagged 'serifLB' : CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) 0 (Jut + RBalance * 0.65) + if fSlab : begin + include : tagged 'serifLB' : CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) yBot (Jut + RBalance * 0.65) + + + create-glyph 'longs.flatHook' : glyph-proc + include : MarkSet.b + local m : Middle - JBalance - HalfStroke * HVContrast + include : LongSFlatHookNoTailShape m 0 SLAB create-forked-glyph 'longsbar.flatHook' : LongSBentHookOverlayBar m + create-glyph 'longs.flatHookDescending' : glyph-proc + include : MarkSet.if + local m : Middle - JBalance - HalfStroke * HVContrast + include : LongSFlatHookNoTailShape m Descender false + + create-forked-glyph 'longsbar.flatHookDescending' : LongSBentHookOverlayBar m + create-glyph 'longs.flatHookTailed' : glyph-proc include : MarkSet.if include : LongSShape CAP Descender (HookX + 0.25 * Stroke) Hook diff --git a/params/variants.toml b/params/variants.toml index ad164aa9f..ec38eeac7 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -4372,13 +4372,23 @@ rank = 2 description = "Long-S with flat hook" selector."longs" = "flatHook" -[prime.long-s.variants.bent-hook-tailed] +[prime.long-s.variants.bent-hook-descending] rank = 3 +description = "Long-S with standard bending hook and descends baseline" +selector."longs" = "bentHookDescending" + +[prime.long-s.variants.flat-hook-descending] +rank = 4 +description = "Long-S with flat hook and descends baseline" +selector."longs" = "flatHookDescending" + +[prime.long-s.variants.bent-hook-tailed] +rank = 5 description = "Long-S with standard bending hook and tail" selector."longs" = "bentHookTailed" [prime.long-s.variants.flat-hook-tailed] -rank = 4 +rank = 6 description = "Long-S with flat hook and tail" selector."longs" = "flatHookTailed" @@ -4394,38 +4404,58 @@ rank = 1 description = "Traditional, Fraktur-like Eszet (`ß`)" selector.eszet = "traditional" -[prime.eszet.variants.traditional-tailed] +[prime.eszet.variants.traditional-descending] rank = 2 +description = "Traditional, Fraktur-like Eszet (`ß`) with descending bar" +selector.eszet = "traditionalDescending" + +[prime.eszet.variants.traditional-tailed] +rank = 3 description = "Traditional, Fraktur-like Eszet (`ß`) with descending tail" selector.eszet = "traditionalTailed" [prime.eszet.variants.traditional-flat-hook] -rank = 3 +rank = 4 description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook" selector.eszet = "traditionalFlatHook" +[prime.eszet.variants.traditional-flat-hook-descending] +rank = 5 +description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook and descending bar" +selector.eszet = "traditionalFlatHookDescending" + [prime.eszet.variants.traditional-flat-hook-tailed] -rank = 4 +rank = 6 description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook and descending tail" selector.eszet = "traditionalFlatHookTailed" [prime.eszet.variants.sulzbacher] -rank = 5 +rank = 7 description = "More modern, beta-like Eszet (`ß`)" selector.eszet = "sulzbacher" +[prime.eszet.variants.sulzbacher-descending] +rank = 8 +description = "More modern, beta-like Eszet (`ß`) with descending bar" +selector.eszet = "sulzbacherDescending" + [prime.eszet.variants.sulzbacher-tailed] -rank = 6 +rank = 9 description = "More modern, beta-like Eszet (`ß`) with descending tail" selector.eszet = "sulzbacherTailed" [prime.eszet.variants.longs-s-lig] -rank = 7 +rank = 10 description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`" selector.eszet = "longSSLig" +[prime.eszet.variants.longs-s-lig-descending] +rank = 11 +description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`, with descending bar" +selector.eszet = "longSSLigDescending" + [prime.eszet.variants.longs-s-lig-tailed] -rank = 8 +rank = 12 description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`, with descending tail" selector.eszet = "longSSLigTailed" @@ -6402,6 +6432,8 @@ f = "flat-hook-tailed" i = "tailed-serifed" k = "cursive-serifless" l = "tailed" +eszet = "longs-s-lig-descending" +long-s = "flat-hook-descending" lower-iota = "tailed-serifed" [composite.ss03.slab-override.design]