Merge pull request #2709 from jmcwilliams403/composites-cleanup

Optimize metrics of sub-glyphs for a handful of composite characters.
This commit is contained in:
Belleve 2025-03-16 16:23:02 -10:00 committed by GitHub
commit e442ce3405
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 73 additions and 45 deletions

4
changes/33.1.1.md Normal file
View file

@ -0,0 +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`).

View file

@ -1621,7 +1621,7 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
createPhoneticLigatures ToLetter 'phonetic1' [Math.max 1 : para.advanceScaleF * para.advanceScaleMM] 2 stdShrink 1 : list createPhoneticLigatures ToLetter 'phonetic1' [Math.max 1 : para.advanceScaleF * para.advanceScaleMM] 2 stdShrink 1 : list
list 0xFB00 { 'f' 'f' } null list 0xFB00 { 'f' 'f' } null
list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } 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 createPhoneticLigatures ToLetter 'phonetic2' para.advanceScaleMM 2 stdShrink 1 : list
list 0x02A3 { 'd/phoneticLeft' 'z/phoneticRight' } 'b' list 0x02A3 { 'd/phoneticLeft' 'z/phoneticRight' } 'b'
@ -1643,8 +1643,8 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
list 0xFB06 { 's/compLigLeft' 't/compLigRight' } null 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 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 0xFB03 { 'f/compLigLeft2' 'f/compLigLeft1' 'dotlessi/compLigRight' } null
list 0xFB04 { 'f/compLigLeft3' 'f/compLigLeft2' 'l/compLigRight' } null list 0xFB04 { 'f/compLigLeft4' 'f/compLigLeft3' 'l/compLigRight' } null
createPhoneticLigatures ToLetter 'phoneticSmcp' (para.advanceScaleM * para.advanceScaleMM) 3 1 0.5 : list createPhoneticLigatures ToLetter 'phoneticSmcp' (para.advanceScaleM * para.advanceScaleMM) 3 1 0.5 : list
list 0x2121 { 'smcpT' 'smcpE' 'smcpL' } 'e' list 0x2121 { 'smcpT' 'smcpE' 'smcpL' } 'e'

View file

@ -423,9 +423,11 @@ glyph-block Letter-Armenian-Lower-U-Group : begin
do "Ew" do "Ew"
create-glyph 'armn/ew' 0x587 : glyph-proc 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 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 include : uBowl.shape
top -- Ascender top -- Ascender
bottom -- 0 bottom -- 0

View file

@ -23,23 +23,23 @@ glyph-block Letter-Greek-Phi : begin
define [CyrlEfSplitRing fFlatTB df y2 y3 ada adb] : glyph-proc define [CyrlEfSplitRing fFlatTB df y2 y3 ada adb] : glyph-proc
include : VBar.m df.middle y2 y3 df.mvs include : VBar.m df.middle y2 y3 df.mvs
include : let [subDf : df.slice 3 2 OX] : union local subDf : df.slice 3 2 OX
OBarRight.shape include : OBarRight.shape
top -- y3 top -- y3
bot -- y2 bot -- y2
left -- df.leftSB left -- df.leftSB
right -- (df.middle + [HSwToV : 0.5 * df.mvs]) right -- (df.middle + [HSwToV : 0.5 * df.mvs])
sw -- df.mvs sw -- df.mvs
ada -- subDf.smallArchDepthA ada -- subDf.smallArchDepthA
adb -- subDf.smallArchDepthB adb -- subDf.smallArchDepthB
OBarLeft.shape include : OBarLeft.shape
top -- y3 top -- y3
bot -- y2 bot -- y2
left -- (df.middle - [HSwToV : 0.5 * df.mvs]) left -- (df.middle - [HSwToV : 0.5 * df.mvs])
right -- df.rightSB right -- df.rightSB
sw -- df.mvs sw -- df.mvs
ada -- subDf.smallArchDepthA ada -- subDf.smallArchDepthA
adb -- subDf.smallArchDepthB adb -- subDf.smallArchDepthB
define [GrekLowerPhiCursiveRing fFlatTB df y2 y3 ada adb] : glyph-proc define [GrekLowerPhiCursiveRing fFlatTB df y2 y3 ada adb] : glyph-proc
local l : df.leftSB + OX * 2 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 include : VBar.m df.middle (y3 - HalfStroke) y4 sw
define [CursiveBar df y1 y2 y3 y4 sw] : glyph-proc 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 m : mix 1 para.advanceScaleF 1.5
local xCrossRight : mix df.width df.rightSB : mix 1 df.adws 2
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 xBarLeft : df.middle - [HSwToV : 0.5 * sw]
local xBarRight : 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) curl xBarRight (y2 - O)
define [DiagonalTailCursiveBar df y1 y2 y3 y4 sw] : glyph-proc 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] local xBarLeft : df.middle - [HSwToV : 0.5 * sw]
include : dispiro include : dispiro
@ -98,7 +104,7 @@ glyph-block Letter-Greek-Phi : begin
include : dispiro include : dispiro
flat df.middle (y2 - O) [widths.center.heading sw Downward] 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 [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 define [MbSerif df y sw] : tagged 'serifMB' : HSerif.mb df.middle y Jut sw

View file

@ -107,11 +107,14 @@ glyph-block Letter-Latin-Upper-AA-AO : begin
include : difference [refer-glyph right] [refer-glyph leftMask] include : difference [refer-glyph right] [refer-glyph leftMask]
do "U subglyphs" do "U subglyphs"
glyph-block-import Letter-Latin-U : CapitalUConfig glyph-block-import Letter-Latin-U : UShapeGroup CapitalUConfigT
foreach { suffix { Base {Slabs fLTSlab} } } [Object.entries CapitalUConfig] : do
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 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] include : with-transform [ApparentTranslate shift 0]
union [Base subDf CAP df.mvs] [Slabs subDf CAP df.mvs] union [Base subDf CAP df.mvs] [Slabs subDf CAP df.mvs]

View file

@ -13,7 +13,7 @@ glyph-block Letter-Latin-Lower-F : begin
glyph-block-import Letter-Shared-Shapes : LetterBarOverlay PalatalHook glyph-block-import Letter-Shared-Shapes : LetterBarOverlay PalatalHook
define [SetPalatalHookPos barLeft] : glyph-proc 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 glyph-block-export fbar
define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj
@ -88,13 +88,15 @@ glyph-block Letter-Latin-Lower-F : begin
[Just 1] Width [Just 1] Width
[Just 2] Jut [Just 2] Jut
[Just 3] Jut [Just 3] Jut
[Just 4] Jut
__ 0 __ 0
local topHookHdExt : match clcStyle local topHookHdExt : match clcStyle
[Just 1] 1 [Just 1] 1
__ 0 __ 0
local crossBarExt : match clcStyle local crossBarExt : match clcStyle
[Just 1] Jut [Just 1] Jut
[Just 3] Jut [Just 2] Jut
[Just 4] Jut
__ 0 __ 0
local barAtCenter : (counterHook === CH-HOOK) || (counterHook === CH-DIAGONAL-HOOK) local barAtCenter : (counterHook === CH-HOOK) || (counterHook === CH-DIAGONAL-HOOK)
@ -144,6 +146,7 @@ glyph-block Letter-Latin-Lower-F : begin
flatHookCLC1 { [NarrowFShape 1] dfNarrowF } flatHookCLC1 { [NarrowFShape 1] dfNarrowF }
flatHookCLC2 { [NarrowFShape 2] dfNarrowF } flatHookCLC2 { [NarrowFShape 2] dfNarrowF }
flatHookCLC3 { [NarrowFShape 3] dfNarrowF } flatHookCLC3 { [NarrowFShape 3] dfNarrowF }
flatHookCLC4 { [NarrowFShape 4] dfNarrowF }
function [body] : object # hooks function [body] : object # hooks
serifless { [if body pNarrowSide 0.95] CH-NONE 'b' } serifless { [if body pNarrowSide 0.95] CH-NONE 'b' }
serifed { [if body pNarrowSide 0.95] CH-SERIF '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/compLigLeft1' (shapeFrom -- 'f')
select-variant 'f/compLigLeft2' (shapeFrom -- 'f') select-variant 'f/compLigLeft2' (shapeFrom -- 'f')
select-variant 'f/compLigLeft3' (shapeFrom -- 'f') select-variant 'f/compLigLeft3' (shapeFrom -- 'f')
select-variant 'f/compLigLeft4' (shapeFrom -- 'f')
select-variant 'f/phoneticLeft' (shapeFrom -- 'f') select-variant 'f/phoneticLeft' (shapeFrom -- 'f')
select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless') select-variant 'fPalatalHook' 0x1D82 (follow -- 'f/tailless')

View file

@ -149,13 +149,13 @@ glyph-block Letter-Latin-U : begin
local sf : SerifFrame.fromDf df top 0 (swSerif -- _sw) local sf : SerifFrame.fromDf df top 0 (swSerif -- _sw)
return : composite-proc sf.lt.full sf.rt.full return : composite-proc sf.lt.full sf.rt.full
glyph-block-export CapitalUConfig glyph-block-export CapitalUConfigT
define CapitalUConfig : SuffixCfg.weave define [CapitalUConfigT shapeGroup] : SuffixCfg.weave
object # body object # body
toothed UUpper.Toothed toothed shapeGroup.Toothed
tailed UUpper.Tailed tailed shapeGroup.Tailed
toothlessCorner UUpper.ToothlessCorner toothlessCorner shapeGroup.ToothlessCorner
toothlessRounded UUpper.ToothlessRounded toothlessRounded shapeGroup.ToothlessRounded
function [body] : object # serifs function [body] : object # serifs
serifless { no-shape false } serifless { no-shape false }
bottomRightSerifed { USerifs.BottomRight false } bottomRightSerifed { USerifs.BottomRight false }
@ -168,7 +168,7 @@ glyph-block Letter-Latin-U : begin
[Just 'tailed'] { USerifs.Tailed true } [Just 'tailed'] { USerifs.Tailed true }
__ { USerifs.Toothless 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 create-glyph "U.\(suffix)" : glyph-proc
local df : DivFrame 1 local df : DivFrame 1
include : MarkSet.capital include : MarkSet.capital

View file

@ -12,7 +12,7 @@ glyph-block Symbol-Counting-Rod : begin
define rodDiv : Math.min 2 : mix 1 para.advanceScaleMM 3 define rodDiv : Math.min 2 : mix 1 para.advanceScaleMM 3
define rodDf : DivFrame rodDiv 5 define rodDf : DivFrame rodDiv 5
define rodSw rodDf.mvs define rodSw rodDf.mvs
define hRodSw : AdviceStroke 3 rodDiv define hRodSw : AdviceStroke 3
define rodSpace : rodDf.width / 5 define rodSpace : rodDf.width / 5
# Ones # Ones

View file

@ -2726,6 +2726,7 @@ selectorAffix."f/sansSerif" = ""
selectorAffix."f/compLigLeft1" = "flatHookCLC1" selectorAffix."f/compLigLeft1" = "flatHookCLC1"
selectorAffix."f/compLigLeft2" = "flatHookCLC2" selectorAffix."f/compLigLeft2" = "flatHookCLC2"
selectorAffix."f/compLigLeft3" = "flatHookCLC3" selectorAffix."f/compLigLeft3" = "flatHookCLC3"
selectorAffix."f/compLigLeft4" = "flatHookCLC4"
selectorAffix."f/phoneticLeft" = "" selectorAffix."f/phoneticLeft" = ""
selectorAffix."f/tailless" = "" selectorAffix."f/tailless" = ""
selectorAffix.fLenis = "" selectorAffix.fLenis = ""
@ -2739,6 +2740,7 @@ selectorAffix."f/sansSerif" = "flatHook"
selectorAffix."f/compLigLeft1" = "flatHookCLC1" selectorAffix."f/compLigLeft1" = "flatHookCLC1"
selectorAffix."f/compLigLeft2" = "flatHookCLC2" selectorAffix."f/compLigLeft2" = "flatHookCLC2"
selectorAffix."f/compLigLeft3" = "flatHookCLC3" selectorAffix."f/compLigLeft3" = "flatHookCLC3"
selectorAffix."f/compLigLeft4" = "flatHookCLC4"
selectorAffix."f/phoneticLeft" = "flatHook" selectorAffix."f/phoneticLeft" = "flatHook"
selectorAffix."f/tailless" = "flatHook" selectorAffix."f/tailless" = "flatHook"
selectorAffix.fLenis = "flatHook" selectorAffix.fLenis = "flatHook"
@ -2756,6 +2758,7 @@ selectorAffix."f/sansSerif" = "serifless"
selectorAffix."f/compLigLeft1" = "serifless" selectorAffix."f/compLigLeft1" = "serifless"
selectorAffix."f/compLigLeft2" = "serifless" selectorAffix."f/compLigLeft2" = "serifless"
selectorAffix."f/compLigLeft3" = "serifless" selectorAffix."f/compLigLeft3" = "serifless"
selectorAffix."f/compLigLeft4" = "serifless"
selectorAffix."f/phoneticLeft" = "serifless" selectorAffix."f/phoneticLeft" = "serifless"
selectorAffix."f/tailless" = "serifless" selectorAffix."f/tailless" = "serifless"
selectorAffix.fLenis = "serifless" selectorAffix.fLenis = "serifless"
@ -2769,6 +2772,7 @@ selectorAffix."f/sansSerif" = "serifless"
selectorAffix."f/compLigLeft1" = "serifed" selectorAffix."f/compLigLeft1" = "serifed"
selectorAffix."f/compLigLeft2" = "serifed" selectorAffix."f/compLigLeft2" = "serifed"
selectorAffix."f/compLigLeft3" = "serifed" selectorAffix."f/compLigLeft3" = "serifed"
selectorAffix."f/compLigLeft4" = "serifed"
selectorAffix."f/phoneticLeft" = "serifed" selectorAffix."f/phoneticLeft" = "serifed"
selectorAffix."f/tailless" = "serifed" selectorAffix."f/tailless" = "serifed"
selectorAffix.fLenis = "serifless" selectorAffix.fLenis = "serifless"
@ -2782,6 +2786,7 @@ selectorAffix."f/sansSerif" = "extended"
selectorAffix."f/compLigLeft1" = "extended" selectorAffix."f/compLigLeft1" = "extended"
selectorAffix."f/compLigLeft2" = "extended" selectorAffix."f/compLigLeft2" = "extended"
selectorAffix."f/compLigLeft3" = "extended" selectorAffix."f/compLigLeft3" = "extended"
selectorAffix."f/compLigLeft4" = "extended"
selectorAffix."f/phoneticLeft" = "extended" selectorAffix."f/phoneticLeft" = "extended"
selectorAffix."f/tailless" = "serifless" selectorAffix."f/tailless" = "serifless"
selectorAffix.fLenis = "serifless" selectorAffix.fLenis = "serifless"
@ -2795,6 +2800,7 @@ selectorAffix."f/sansSerif" = "tailed"
selectorAffix."f/compLigLeft1" = "tailed" selectorAffix."f/compLigLeft1" = "tailed"
selectorAffix."f/compLigLeft2" = "tailed" selectorAffix."f/compLigLeft2" = "tailed"
selectorAffix."f/compLigLeft3" = "tailed" selectorAffix."f/compLigLeft3" = "tailed"
selectorAffix."f/compLigLeft4" = "tailed"
selectorAffix."f/phoneticLeft" = "tailed" selectorAffix."f/phoneticLeft" = "tailed"
selectorAffix."f/tailless" = "serifless" selectorAffix."f/tailless" = "serifless"
selectorAffix.fLenis = "serifless" selectorAffix.fLenis = "serifless"
@ -2808,6 +2814,7 @@ selectorAffix."f/sansSerif" = "diagonalTailed"
selectorAffix."f/compLigLeft1" = "diagonalTailed" selectorAffix."f/compLigLeft1" = "diagonalTailed"
selectorAffix."f/compLigLeft2" = "diagonalTailed" selectorAffix."f/compLigLeft2" = "diagonalTailed"
selectorAffix."f/compLigLeft3" = "diagonalTailed" selectorAffix."f/compLigLeft3" = "diagonalTailed"
selectorAffix."f/compLigLeft4" = "diagonalTailed"
selectorAffix."f/phoneticLeft" = "diagonalTailed" selectorAffix."f/phoneticLeft" = "diagonalTailed"
selectorAffix."f/tailless" = "serifless" selectorAffix."f/tailless" = "serifless"
selectorAffix.fLenis = "serifless" selectorAffix.fLenis = "serifless"
@ -2819,8 +2826,9 @@ keyAffix = ""
selectorAffix.f = "" selectorAffix.f = ""
selectorAffix."f/sansSerif" = "" selectorAffix."f/sansSerif" = ""
selectorAffix."f/compLigLeft1" = "crossbarAtXHeight" selectorAffix."f/compLigLeft1" = "crossbarAtXHeight"
selectorAffix."f/compLigLeft2" = "" selectorAffix."f/compLigLeft2" = "crossbarAtXHeight"
selectorAffix."f/compLigLeft3" = "" selectorAffix."f/compLigLeft3" = ""
selectorAffix."f/compLigLeft4" = ""
selectorAffix."f/phoneticLeft" = "crossbarAtXHeight" selectorAffix."f/phoneticLeft" = "crossbarAtXHeight"
selectorAffix."f/tailless" = "" selectorAffix."f/tailless" = ""
selectorAffix.fLenis = "" selectorAffix.fLenis = ""
@ -2832,8 +2840,9 @@ descriptionAffix = "crossbar at X-height"
selectorAffix.f = "crossbarAtXHeight" selectorAffix.f = "crossbarAtXHeight"
selectorAffix."f/sansSerif" = "crossbarAtXHeight" selectorAffix."f/sansSerif" = "crossbarAtXHeight"
selectorAffix."f/compLigLeft1" = "crossbarAtXHeight" selectorAffix."f/compLigLeft1" = "crossbarAtXHeight"
selectorAffix."f/compLigLeft2" = "" selectorAffix."f/compLigLeft2" = "crossbarAtXHeight"
selectorAffix."f/compLigLeft3" = "" selectorAffix."f/compLigLeft3" = ""
selectorAffix."f/compLigLeft4" = ""
selectorAffix."f/phoneticLeft" = "crossbarAtXHeight" selectorAffix."f/phoneticLeft" = "crossbarAtXHeight"
selectorAffix."f/tailless" = "crossbarAtXHeight" selectorAffix."f/tailless" = "crossbarAtXHeight"
selectorAffix.fLenis = "crossbarAtXHeight" selectorAffix.fLenis = "crossbarAtXHeight"
@ -4892,7 +4901,7 @@ rank = 3
descriptionAffix = "serifs" descriptionAffix = "serifs"
selectorAffix.w = "serifed" selectorAffix.w = "serifed"
selectorAffix."w/sansSerif" = "serifless" selectorAffix."w/sansSerif" = "serifless"
selectorAffix.wHookTop = "serifed" selectorAffix.wHookTop = { if = [{ body = "straight-double-v" }, { body = "straight-asymmetric" }], then = "motionSerifed", else = "serifed" }