From 28282c56b878c14d50aaede57e62e2ae5ade87fe Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sun, 16 Mar 2025 09:59:08 -0400 Subject: [PATCH 1/5] Refine shape of Latin Upper AU under monospace. --- changes/33.1.1.md | 2 ++ .../src/letter/latin-ext/upper-aa-ao.ptl | 11 +++++++---- packages/font-glyphs/src/letter/latin/u.ptl | 14 +++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 changes/33.1.1.md diff --git a/changes/33.1.1.md b/changes/33.1.1.md new file mode 100644 index 000000000..ae12113b8 --- /dev/null +++ b/changes/33.1.1.md @@ -0,0 +1,2 @@ +* Refine shape of the following characters: + - LATIN CAPITAL LETTER AU (`U+A736`). diff --git a/packages/font-glyphs/src/letter/latin-ext/upper-aa-ao.ptl b/packages/font-glyphs/src/letter/latin-ext/upper-aa-ao.ptl index a8040f023..1fc5214b5 100644 --- a/packages/font-glyphs/src/letter/latin-ext/upper-aa-ao.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/upper-aa-ao.ptl @@ -107,11 +107,14 @@ glyph-block Letter-Latin-Upper-AA-AO : begin include : difference [refer-glyph right] [refer-glyph leftMask] do "U subglyphs" - glyph-block-import Letter-Latin-U : CapitalUConfig - foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries CapitalUConfig] : do + glyph-block-import Letter-Latin-U : UShapeGroup CapitalUConfigT + + define df : DivFrame para.advanceScaleMM 3.5 + define { subDf shift } : SubDfAndShift 1 df + define sg : UShapeGroup subDf.archDepthA subDf.archDepthB + + foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries : CapitalUConfigT sg] : do create-glyph "AU/Right.\(suffix)" : glyph-proc - define df : DivFrame para.advanceScaleMM 3.5 - local { subDf shift } : SubDfAndShift 1 df include : with-transform [ApparentTranslate shift 0] union [Base subDf CAP df.mvs] [Slabs subDf CAP df.mvs] diff --git a/packages/font-glyphs/src/letter/latin/u.ptl b/packages/font-glyphs/src/letter/latin/u.ptl index b89ddc556..7078f1913 100644 --- a/packages/font-glyphs/src/letter/latin/u.ptl +++ b/packages/font-glyphs/src/letter/latin/u.ptl @@ -149,13 +149,13 @@ glyph-block Letter-Latin-U : begin local sf : SerifFrame.fromDf df top 0 (swSerif -- _sw) return : composite-proc sf.lt.full sf.rt.full - glyph-block-export CapitalUConfig - define CapitalUConfig : SuffixCfg.weave + glyph-block-export CapitalUConfigT + define [CapitalUConfigT shapeGroup] : SuffixCfg.weave object # body - toothed UUpper.Toothed - tailed UUpper.Tailed - toothlessCorner UUpper.ToothlessCorner - toothlessRounded UUpper.ToothlessRounded + toothed shapeGroup.Toothed + tailed shapeGroup.Tailed + toothlessCorner shapeGroup.ToothlessCorner + toothlessRounded shapeGroup.ToothlessRounded function [body] : object # serifs serifless { no-shape false } bottomRightSerifed { USerifs.BottomRight false } @@ -168,7 +168,7 @@ glyph-block Letter-Latin-U : begin [Just 'tailed'] { USerifs.Tailed true } __ { USerifs.Toothless true } - foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries CapitalUConfig] : do + foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries : CapitalUConfigT UUpper] : do create-glyph "U.\(suffix)" : glyph-proc local df : DivFrame 1 include : MarkSet.capital From 551eddfc292929cdead0367eff3437d9e3c065d5 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sun, 16 Mar 2025 10:01:50 -0400 Subject: [PATCH 2/5] Refine shape of Armenian Lower Ech Yiwn. --- changes/33.1.1.md | 1 + packages/font-glyphs/src/letter/armenian/lower-u-group.ptl | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/changes/33.1.1.md b/changes/33.1.1.md index ae12113b8..a2eaccd0c 100644 --- a/changes/33.1.1.md +++ b/changes/33.1.1.md @@ -1,2 +1,3 @@ * Refine shape of the following characters: + - ARMENIAN SMALL LIGATURE ECH YIWN (`U+0587`). - LATIN CAPITAL LETTER AU (`U+A736`). diff --git a/packages/font-glyphs/src/letter/armenian/lower-u-group.ptl b/packages/font-glyphs/src/letter/armenian/lower-u-group.ptl index 1ee77839c..a55557bdb 100644 --- a/packages/font-glyphs/src/letter/armenian/lower-u-group.ptl +++ b/packages/font-glyphs/src/letter/armenian/lower-u-group.ptl @@ -423,9 +423,11 @@ glyph-block Letter-Armenian-Lower-U-Group : begin do "Ew" create-glyph 'armn/ew' 0x587 : glyph-proc - local df : include : DivFrame para.advanceScaleM + local adws : Math.max para.advanceScaleM + [mix 1 para.advanceScaleF 0.5] * para.advanceScaleMM + local df : include : DivFrame adws include : df.markSet.b - local subDf : DivFrame (0.75 * para.advanceScaleM) 2 + local subDf : DivFrame [Math.min 1 : (8/11) * adws] 2 include : uBowl.shape top -- Ascender bottom -- 0 From 848089960cd4f2c5f7a52a5b30155fd65636796d Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sun, 16 Mar 2025 10:04:27 -0400 Subject: [PATCH 3/5] Refine shape of Latin Lower FFI. --- changes/33.1.1.md | 1 + packages/font-glyphs/src/auto-build/composite.ptl | 6 +++--- packages/font-glyphs/src/letter/latin/lower-f.ptl | 8 ++++++-- params/variants.toml | 15 ++++++++++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/changes/33.1.1.md b/changes/33.1.1.md index a2eaccd0c..1ce92d307 100644 --- a/changes/33.1.1.md +++ b/changes/33.1.1.md @@ -1,3 +1,4 @@ * Refine shape of the following characters: - ARMENIAN SMALL LIGATURE ECH YIWN (`U+0587`). - LATIN CAPITAL LETTER AU (`U+A736`). + - LATIN SMALL LIGATURE FFI (`U+FB03`). diff --git a/packages/font-glyphs/src/auto-build/composite.ptl b/packages/font-glyphs/src/auto-build/composite.ptl index dea4cc34a..2dae0c644 100644 --- a/packages/font-glyphs/src/auto-build/composite.ptl +++ b/packages/font-glyphs/src/auto-build/composite.ptl @@ -1621,7 +1621,7 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin createPhoneticLigatures ToLetter 'phonetic1' [Math.max 1 : para.advanceScaleF * para.advanceScaleMM] 2 stdShrink 1 : list list 0xFB00 { 'f' 'f' } null list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } null - list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null + list 0xFB02 { 'f/compLigLeft3' 'l/compLigRight' } null createPhoneticLigatures ToLetter 'phonetic2' para.advanceScaleMM 2 stdShrink 1 : list list 0x02A3 { 'd/phoneticLeft' 'z/phoneticRight' } 'b' @@ -1643,8 +1643,8 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin list 0xFB06 { 's/compLigLeft' 't/compLigRight' } null createPhoneticLigatures ToLetter 'phonetic3' [Math.max para.advanceScaleMM : para.advanceScaleF * [mix 1 para.advanceScaleMM 2]] 3 stdShrink 1 : list - list 0xFB03 { 'f/compLigLeft1' 'f/compLigLeft1' 'dotlessi/compLigRight' } null - list 0xFB04 { 'f/compLigLeft3' 'f/compLigLeft2' 'l/compLigRight' } null + list 0xFB03 { 'f/compLigLeft2' 'f/compLigLeft1' 'dotlessi/compLigRight' } null + list 0xFB04 { 'f/compLigLeft4' 'f/compLigLeft3' 'l/compLigRight' } null createPhoneticLigatures ToLetter 'phoneticSmcp' (para.advanceScaleM * para.advanceScaleMM) 3 1 0.5 : list list 0x2121 { 'smcpT' 'smcpE' 'smcpL' } 'e' diff --git a/packages/font-glyphs/src/letter/latin/lower-f.ptl b/packages/font-glyphs/src/letter/latin/lower-f.ptl index 02a9dd472..d6b3bd7a4 100644 --- a/packages/font-glyphs/src/letter/latin/lower-f.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-f.ptl @@ -13,7 +13,7 @@ glyph-block Letter-Latin-Lower-F : begin glyph-block-import Letter-Shared-Shapes : LetterBarOverlay PalatalHook define [SetPalatalHookPos barLeft] : glyph-proc - set-base-anchor 'palatalHookPos' (barLeft + [HSwToV : Stroke + [Math.max VJutStroke (Width / 12)]]) 0 + set-base-anchor 'palatalHookPos' (barLeft + [HSwToV : Stroke + [Math.max VJutStroke : Width / 12]]) 0 glyph-block-export fbar define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj @@ -88,13 +88,15 @@ glyph-block Letter-Latin-Lower-F : begin [Just 1] Width [Just 2] Jut [Just 3] Jut + [Just 4] Jut __ 0 local topHookHdExt : match clcStyle [Just 1] 1 __ 0 local crossBarExt : match clcStyle [Just 1] Jut - [Just 3] Jut + [Just 2] Jut + [Just 4] Jut __ 0 local barAtCenter : (counterHook === CH-HOOK) || (counterHook === CH-DIAGONAL-HOOK) @@ -144,6 +146,7 @@ glyph-block Letter-Latin-Lower-F : begin flatHookCLC1 { [NarrowFShape 1] dfNarrowF } flatHookCLC2 { [NarrowFShape 2] dfNarrowF } flatHookCLC3 { [NarrowFShape 3] dfNarrowF } + flatHookCLC4 { [NarrowFShape 4] dfNarrowF } function [body] : object # hooks serifless { [if body pNarrowSide 0.95] CH-NONE 'b' } serifed { [if body pNarrowSide 0.95] CH-SERIF 'b' } @@ -179,6 +182,7 @@ glyph-block Letter-Latin-Lower-F : begin select-variant 'f/compLigLeft1' (shapeFrom -- 'f') select-variant 'f/compLigLeft2' (shapeFrom -- 'f') select-variant 'f/compLigLeft3' (shapeFrom -- 'f') + select-variant 'f/compLigLeft4' (shapeFrom -- 'f') select-variant 'f/phoneticLeft' (shapeFrom -- 'f') select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless') diff --git a/params/variants.toml b/params/variants.toml index 51d47c78f..129047801 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -2726,6 +2726,7 @@ selectorAffix."f/sansSerif" = "" selectorAffix."f/compLigLeft1" = "flatHookCLC1" selectorAffix."f/compLigLeft2" = "flatHookCLC2" selectorAffix."f/compLigLeft3" = "flatHookCLC3" +selectorAffix."f/compLigLeft4" = "flatHookCLC4" selectorAffix."f/phoneticLeft" = "" selectorAffix."f/tailless" = "" selectorAffix.fLenis = "" @@ -2739,6 +2740,7 @@ selectorAffix."f/sansSerif" = "flatHook" selectorAffix."f/compLigLeft1" = "flatHookCLC1" selectorAffix."f/compLigLeft2" = "flatHookCLC2" selectorAffix."f/compLigLeft3" = "flatHookCLC3" +selectorAffix."f/compLigLeft4" = "flatHookCLC4" selectorAffix."f/phoneticLeft" = "flatHook" selectorAffix."f/tailless" = "flatHook" selectorAffix.fLenis = "flatHook" @@ -2756,6 +2758,7 @@ selectorAffix."f/sansSerif" = "serifless" selectorAffix."f/compLigLeft1" = "serifless" selectorAffix."f/compLigLeft2" = "serifless" selectorAffix."f/compLigLeft3" = "serifless" +selectorAffix."f/compLigLeft4" = "serifless" selectorAffix."f/phoneticLeft" = "serifless" selectorAffix."f/tailless" = "serifless" selectorAffix.fLenis = "serifless" @@ -2769,6 +2772,7 @@ selectorAffix."f/sansSerif" = "serifless" selectorAffix."f/compLigLeft1" = "serifed" selectorAffix."f/compLigLeft2" = "serifed" selectorAffix."f/compLigLeft3" = "serifed" +selectorAffix."f/compLigLeft4" = "serifed" selectorAffix."f/phoneticLeft" = "serifed" selectorAffix."f/tailless" = "serifed" selectorAffix.fLenis = "serifless" @@ -2782,6 +2786,7 @@ selectorAffix."f/sansSerif" = "extended" selectorAffix."f/compLigLeft1" = "extended" selectorAffix."f/compLigLeft2" = "extended" selectorAffix."f/compLigLeft3" = "extended" +selectorAffix."f/compLigLeft4" = "extended" selectorAffix."f/phoneticLeft" = "extended" selectorAffix."f/tailless" = "serifless" selectorAffix.fLenis = "serifless" @@ -2795,6 +2800,7 @@ selectorAffix."f/sansSerif" = "tailed" selectorAffix."f/compLigLeft1" = "tailed" selectorAffix."f/compLigLeft2" = "tailed" selectorAffix."f/compLigLeft3" = "tailed" +selectorAffix."f/compLigLeft4" = "tailed" selectorAffix."f/phoneticLeft" = "tailed" selectorAffix."f/tailless" = "serifless" selectorAffix.fLenis = "serifless" @@ -2808,6 +2814,7 @@ selectorAffix."f/sansSerif" = "diagonalTailed" selectorAffix."f/compLigLeft1" = "diagonalTailed" selectorAffix."f/compLigLeft2" = "diagonalTailed" selectorAffix."f/compLigLeft3" = "diagonalTailed" +selectorAffix."f/compLigLeft4" = "diagonalTailed" selectorAffix."f/phoneticLeft" = "diagonalTailed" selectorAffix."f/tailless" = "serifless" selectorAffix.fLenis = "serifless" @@ -2819,8 +2826,9 @@ keyAffix = "" selectorAffix.f = "" selectorAffix."f/sansSerif" = "" selectorAffix."f/compLigLeft1" = "crossbarAtXHeight" -selectorAffix."f/compLigLeft2" = "" +selectorAffix."f/compLigLeft2" = "crossbarAtXHeight" selectorAffix."f/compLigLeft3" = "" +selectorAffix."f/compLigLeft4" = "" selectorAffix."f/phoneticLeft" = "crossbarAtXHeight" selectorAffix."f/tailless" = "" selectorAffix.fLenis = "" @@ -2832,8 +2840,9 @@ descriptionAffix = "crossbar at X-height" selectorAffix.f = "crossbarAtXHeight" selectorAffix."f/sansSerif" = "crossbarAtXHeight" selectorAffix."f/compLigLeft1" = "crossbarAtXHeight" -selectorAffix."f/compLigLeft2" = "" +selectorAffix."f/compLigLeft2" = "crossbarAtXHeight" selectorAffix."f/compLigLeft3" = "" +selectorAffix."f/compLigLeft4" = "" selectorAffix."f/phoneticLeft" = "crossbarAtXHeight" selectorAffix."f/tailless" = "crossbarAtXHeight" selectorAffix.fLenis = "crossbarAtXHeight" @@ -4892,7 +4901,7 @@ rank = 3 descriptionAffix = "serifs" selectorAffix.w = "serifed" selectorAffix."w/sansSerif" = "serifless" -selectorAffix.wHookTop = "serifed" +selectorAffix.wHookTop = { if = [{ body = "straight-double-v" }, { body = "straight-asymmetric" }], then = "motionSerifed", else = "serifed" } From 1a7e794177259268f7d671dac918c18f338fd308 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sun, 16 Mar 2025 10:05:58 -0400 Subject: [PATCH 4/5] Optimize horizontal stroke width of counting rods under QP. --- packages/font-glyphs/src/symbol/counting-rod.ptl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/font-glyphs/src/symbol/counting-rod.ptl b/packages/font-glyphs/src/symbol/counting-rod.ptl index 02c934a6a..28b438f97 100644 --- a/packages/font-glyphs/src/symbol/counting-rod.ptl +++ b/packages/font-glyphs/src/symbol/counting-rod.ptl @@ -12,7 +12,7 @@ glyph-block Symbol-Counting-Rod : begin define rodDiv : Math.min 2 : mix 1 para.advanceScaleMM 3 define rodDf : DivFrame rodDiv 5 define rodSw rodDf.mvs - define hRodSw : AdviceStroke 3 rodDiv + define hRodSw : AdviceStroke 3 define rodSpace : rodDf.width / 5 # Ones From eb7325b96e4c69cd3342987467a32682b87a18e2 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Sun, 16 Mar 2025 10:53:04 -0400 Subject: [PATCH 5/5] Optimize hook depth of Cyrillic Lower Ef under QP. --- packages/font-glyphs/src/letter/greek/phi.ptl | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/packages/font-glyphs/src/letter/greek/phi.ptl b/packages/font-glyphs/src/letter/greek/phi.ptl index 35fff756d..95bb7de2e 100644 --- a/packages/font-glyphs/src/letter/greek/phi.ptl +++ b/packages/font-glyphs/src/letter/greek/phi.ptl @@ -23,23 +23,23 @@ glyph-block Letter-Greek-Phi : begin define [CyrlEfSplitRing fFlatTB df y2 y3 ada adb] : glyph-proc include : VBar.m df.middle y2 y3 df.mvs - include : let [subDf : df.slice 3 2 OX] : union - OBarRight.shape - top -- y3 - bot -- y2 - left -- df.leftSB - right -- (df.middle + [HSwToV : 0.5 * df.mvs]) - sw -- df.mvs - ada -- subDf.smallArchDepthA - adb -- subDf.smallArchDepthB - OBarLeft.shape - top -- y3 - bot -- y2 - left -- (df.middle - [HSwToV : 0.5 * df.mvs]) - right -- df.rightSB - sw -- df.mvs - ada -- subDf.smallArchDepthA - adb -- subDf.smallArchDepthB + local subDf : df.slice 3 2 OX + include : OBarRight.shape + top -- y3 + bot -- y2 + left -- df.leftSB + right -- (df.middle + [HSwToV : 0.5 * df.mvs]) + sw -- df.mvs + ada -- subDf.smallArchDepthA + adb -- subDf.smallArchDepthB + include : OBarLeft.shape + top -- y3 + bot -- y2 + left -- (df.middle - [HSwToV : 0.5 * df.mvs]) + right -- df.rightSB + sw -- df.mvs + ada -- subDf.smallArchDepthA + adb -- subDf.smallArchDepthB define [GrekLowerPhiCursiveRing fFlatTB df y2 y3 ada adb] : glyph-proc local l : df.leftSB + OX * 2 @@ -61,10 +61,13 @@ glyph-block Letter-Greek-Phi : begin include : VBar.m df.middle (y3 - HalfStroke) y4 sw define [CursiveBar df y1 y2 y3 y4 sw] : glyph-proc - local hd : FlatHookDepth df + local dfHook : DivFrame para.advanceScaleF + local hd : FlatHookDepth dfHook - local xCrossLeft : mix 0 df.leftSB : mix 1 df.adws 2 - local xCrossRight : mix df.width df.rightSB : mix 1 df.adws 2 + local m : mix 1 para.advanceScaleF 1.5 + + local xCrossLeft : df.middle - dfHook.middle + dfHook.leftSB * m + local xCrossRight : df.middle + dfHook.middle - dfHook.leftSB * m local xBarLeft : df.middle - [HSwToV : 0.5 * sw] local xBarRight : df.middle + [HSwToV : 0.5 * sw] @@ -84,9 +87,12 @@ glyph-block Letter-Greek-Phi : begin curl xBarRight (y2 - O) define [DiagonalTailCursiveBar df y1 y2 y3 y4 sw] : glyph-proc - local hd : FlatHookDepth df + local dfHook : DivFrame para.advanceScaleF + local hd : FlatHookDepth dfHook - local xCrossRight : mix df.width df.rightSB : mix 1 df.adws 2 + local m : mix 1 para.advanceScaleF 1.5 + + local xCrossRight : df.middle + dfHook.middle - dfHook.leftSB * m local xBarLeft : df.middle - [HSwToV : 0.5 * sw] include : dispiro @@ -98,7 +104,7 @@ glyph-block Letter-Greek-Phi : begin include : dispiro flat df.middle (y2 - O) [widths.center.heading sw Downward] - DiagTail.L df.middle y1 [DiagTail.StdDepth [DivFrame para.advanceScaleF] sw] sw + DiagTail.L df.middle y1 [DiagTail.StdDepth dfHook sw] sw define [MtSerif df y sw] : tagged 'serifMT' : HSerif.lt df.middle y Jut sw define [MbSerif df y sw] : tagged 'serifMB' : HSerif.mb df.middle y Jut sw