diff --git a/changes/16.6.1.md b/changes/16.6.1.md index 0502b1db1..54ad78062 100644 --- a/changes/16.6.1.md +++ b/changes/16.6.1.md @@ -10,3 +10,4 @@ - LATIN SMALL LETTER TURNED OPEN E (`U+1D08`); - LATIN LETTER SMALL CAPITAL OU (`U+1D15`); - LATIN LETTER AIN (`U+1D25`); + * Fix shape and variant assignment for LATIN SMALL LETTER DOTLESS J WITH STROKE (`U+025F`) (#1458). diff --git a/font-src/glyphs/auto-build/transformed.ptl b/font-src/glyphs/auto-build/transformed.ptl index 3eb86ad31..58ecc8cba 100644 --- a/font-src/glyphs/auto-build/transformed.ptl +++ b/font-src/glyphs/auto-build/transformed.ptl @@ -265,7 +265,7 @@ glyph-block Autobuild-Transformed : begin list 0x1D9E 'eth' list 0x1D9F 'latn/epsilonRev' list 0x1DA0 'f' - list 0x1DA1 'turnf' + list 0x1DA1 'dotlessjBar' list 0x1DA2 'gScript' list 0x1DA3 'turnh' list 0x1DA4 'iBarOver' diff --git a/font-src/glyphs/letter/cyrillic/yat.ptl b/font-src/glyphs/letter/cyrillic/yat.ptl index 8264ef7e1..9530cb243 100644 --- a/font-src/glyphs/letter/cyrillic/yat.ptl +++ b/font-src/glyphs/letter/cyrillic/yat.ptl @@ -8,6 +8,7 @@ glyph-block Letter-Cyrillic-Yat : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Metrics : BowlXDepth + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay glyph-block-import Letter-Cyrillic-Yeri : CyrlYeriUprightShape create-glyph 'cyrl/Yat' 0x462 : glyph-proc @@ -15,14 +16,22 @@ glyph-block Letter-Cyrillic-Yat : begin local pBar 0.5 include : CyrlYeriUprightShape CAP (pBar -- pBar) local cTop : if SLAB (CAP - Stroke / 2) CAP - include : HOverlayBar [mix SB 0 0.7] [mix SB RightSB 0.5] [mix (CAP * pBar) cTop 0.5] + include : LetterBarOverlay.l.in + x -- SB + bot -- (CAP * pBar + HalfStroke) + top -- (CAP - [if SLAB Stroke 0]) + py -- 0.5 create-glyph 'cyrl/yat.upright' : glyph-proc include : MarkSet.b local pBar 0.4 include : CyrlYeriUprightShape Ascender (pBar -- pBar) local cTop : if SLAB (Ascender - Stroke / 2) Ascender - include : HOverlayBar [mix SB 0 0.7] [mix SB RightSB 0.5] [mix (Ascender * pBar) cTop 0.5] + include : LetterBarOverlay.l.in + x -- SB + bot -- (Ascender * pBar + HalfStroke) + top -- (Ascender - [if SLAB Stroke 0]) + py -- 0.5 if SLAB : begin eject-contour 'serifYeriLT' diff --git a/font-src/glyphs/letter/cyrillic/yeri.ptl b/font-src/glyphs/letter/cyrillic/yeri.ptl index 6782f31b7..f80fe228b 100644 --- a/font-src/glyphs/letter/cyrillic/yeri.ptl +++ b/font-src/glyphs/letter/cyrillic/yeri.ptl @@ -9,9 +9,12 @@ glyph-block Letter-Cyrillic-Yeri : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Metrics : BowlXDepth glyph-block-import Letter-Shared-Shapes : ShoulderMidKnotLhsRev RightwardTailedBar + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay + + define DefaultBarPos 0.55 glyph-block-export CyrlYeriUprightShape - define [CyrlYeriUprightShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar 0.55]] : glyph-proc + define [CyrlYeriUprightShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar DefaultBarPos]] : glyph-proc local bowl : top * pBar + HalfStroke local turnRadius : BowlXDepth bowl 0 left right stroke local ada : ArchDepthAOf ArchDepth (right - left + SB * 2) @@ -38,7 +41,7 @@ glyph-block Letter-Cyrillic-Yeri : begin include : tagged 'serifYeriLT' : CenterTopSerif (left + stroke / 2 * HVContrast) top jut glyph-block-export CyrlYeriRoundShape - define [CyrlYeriRoundShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar 0.55]] : glyph-proc + define [CyrlYeriRoundShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar DefaultBarPos]] : glyph-proc local bowl : top * pBar + HalfStroke local turnRadius : BowlXDepth bowl 0 left right stroke local ada : ArchDepthAOf ArchDepth (right - left + SB * 2) @@ -63,7 +66,7 @@ glyph-block Letter-Cyrillic-Yeri : begin include : tagged 'serifYeriLT' : LeftwardTopSerif left top (jut - stroke / 2 * HVContrast) glyph-block-export CyrlYeriCursiveShape - define [CyrlYeriCursiveShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar 0.55]] : glyph-proc + define [CyrlYeriCursiveShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar DefaultBarPos]] : glyph-proc local bowl : top * pBar + HalfStroke local turnRadius : BowlXDepth bowl 0 left right stroke local ada : ArchDepthAOf ArchDepth (right - left + SB * 2) @@ -88,7 +91,7 @@ glyph-block Letter-Cyrillic-Yeri : begin if SLAB : begin include : tagged 'serifYeriLT' : LeftwardTopSerif left top (jut - stroke / 2 * HVContrast) - define [RevCyrYeriShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar 0.55]] : glyph-proc + define [RevCyrYeriShape] : params [top [left SB] [right RightSB] [stroke Stroke] [jut Jut] [pBar DefaultBarPos]] : glyph-proc local bowl : top * pBar + HalfStroke local turnRadius : bowl * 0.45 local turnbottom : mix 0 bowl (ArchDepthB / (ArchDepthA + ArchDepthB)) @@ -162,11 +165,11 @@ glyph-block Letter-Cyrillic-Yeri : begin define [YeriOverlayBar df top] : begin local stroke : AdviceStroke2 2 3 top - return : HOverlayBar - mix df.leftSB 0 0.7 - mix df.leftSB df.rightSB 0.5 - mix (top * 0.52 + stroke / 2) top 0.5 - Math.min ((top - Stroke * 3) / 3) OverlayStroke + return : LetterBarOverlay.l.in + x -- df.leftSB + bot -- top * DefaultBarPos + stroke / 2 + top -- top - [if SLAB Stroke 0] + py -- 0.5 foreach { suffix { Yeri fTail } } [Object.entries YerConfig] : do create-glyph "cyrl/Yeri.\(suffix)" : glyph-proc diff --git a/font-src/glyphs/letter/greek/lower-rho.ptl b/font-src/glyphs/letter/greek/lower-rho.ptl index cd6cd9038..4a2be6ae7 100644 --- a/font-src/glyphs/letter/greek/lower-rho.ptl +++ b/font-src/glyphs/letter/greek/lower-rho.ptl @@ -8,6 +8,7 @@ glyph-module glyph-block Letter-Greek-Lower-Rho : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay create-glyph 'grek/rho' 0x3C1 : glyph-proc include : MarkSet.p @@ -29,4 +30,4 @@ glyph-block Letter-Greek-Lower-Rho : begin create-glyph 'grek/rhoBar' 0x3FC : glyph-proc include [refer-glyph 'grek/rho'] AS_BASE ALSO_METRICS - include : HOverlayBar [mix SB 0 0.7] [mix SB RightSB 0.5] [mix 0 Descender 0.45] + include : LetterBarOverlay.l.in SB Descender 0 (1 - OverlayPos) diff --git a/font-src/glyphs/letter/greek/upper-gamma.ptl b/font-src/glyphs/letter/greek/upper-gamma.ptl index 9fa6f342a..35472e3e2 100644 --- a/font-src/glyphs/letter/greek/upper-gamma.ptl +++ b/font-src/glyphs/letter/greek/upper-gamma.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Greek-Upper-Gamma: begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : nShoulder CyrDescender CyrHookDescender + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay glyph-block-import Letter-Blackboard : BBS BBD BBBarLeft glyph-block-import Letter-Latin-Upper-F : xMidBarShrink @@ -133,10 +134,7 @@ glyph-block Letter-Greek-Upper-Gamma: begin adb -- ArchDepthB * [Math.pow HBarPos 0.3] include : VerticalHook (RightSB - HalfStroke * HVContrast) 0 (-HookX) Hook - define [GhaynOverlayBar top] : HOverlayBar - GammaBarLeft - GammaBarLeft * 0.75 - GammaBarLeft + Stroke * HVContrast + SB * 0.625 + 0.125 * (RightSB - SB) - top * (1 - OverlayPos) + define [GhaynOverlayBar top] : LetterBarOverlay.l GammaBarLeft (top * (1 - OverlayPos)) derive-composites 'cyrl/Ghayn' 0x492 'cyrl/Ghe' [GhaynOverlayBar CAP] derive-composites 'cyrl/ghayn.upright' null 'cyrl/ghe.upright' [GhaynOverlayBar XH] diff --git a/font-src/glyphs/letter/latin-ext/glottal-stop.ptl b/font-src/glyphs/letter/latin-ext/glottal-stop.ptl index bb0f7b4d9..25ceee4f9 100644 --- a/font-src/glyphs/letter/latin-ext/glottal-stop.ptl +++ b/font-src/glyphs/letter/latin-ext/glottal-stop.ptl @@ -9,6 +9,7 @@ glyph-block Letter-Latin-Glottal-Stop : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Shared-Metrics : markHalfStroke + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay create-glyph 'glottalstop' 0x294 : glyph-proc include : MarkSet.b @@ -83,8 +84,8 @@ glyph-block Letter-Latin-Glottal-Stop : begin create-glyph 'glottalstopbar' 0x2A1 : glyph-proc include [refer-glyph 'glottalstop'] AS_BASE - include : HOverlayBar (Middle - LongJut * 0.6) (Middle + LongJut * 0.6) (Ascender * 0.25) + include : LetterBarOverlay.m.in Middle [if SLAB Stroke 0] (Ascender * 0.5) create-glyph 'revglottalstopbar' 0x2A2 : glyph-proc include [refer-glyph 'revglottalstop'] AS_BASE - include : HOverlayBar (Middle - LongJut * 0.6) (Middle + LongJut * 0.6) (Ascender * 0.25) + include : LetterBarOverlay.m.in Middle [if SLAB Stroke 0] (Ascender * 0.5) diff --git a/font-src/glyphs/letter/latin-ext/long-s.ptl b/font-src/glyphs/letter/latin-ext/long-s.ptl index 869e1b517..b82809cd5 100644 --- a/font-src/glyphs/letter/latin-ext/long-s.ptl +++ b/font-src/glyphs/letter/latin-ext/long-s.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Latin-Long-S : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth + glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth LetterBarOverlay glyph-block-import Letter-Latin-Lower-F : StdSmallFBarLeftPos StdSmallFBarLeftPos0 define [LongSUpperHalf sign x top bottom hookX hookY _sw] : begin @@ -54,15 +54,15 @@ glyph-block Letter-Latin-Long-S : begin if fSlab : include : tagged 'serifLB' CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) 0 (Jut + RBalance * 0.65) - define [LongSBentHookOverlayBar m] : HOverlayBar - m + HalfStroke * HVContrast - LongJut * 0.75 - m + HalfStroke * HVContrast + LongJut * 0.75 - [mix (XH - Stroke) Ascender 0.5] - HalfStroke + define [LongSBentHookOverlayBar m] : LetterBarOverlay.m.in + x -- (m + HalfStroke * HVContrast) + bot -- (0.75 * XH - Stroke) + top -- (Ascender - Stroke) - define [LongSSymmetricOverlayBar m] : HOverlayBar - m - LongJut * 0.75 - m + LongJut * 0.75 - [mix (XH - Stroke) Ascender 0.5] - HalfStroke + define [LongSSymmetricOverlayBar m] : LetterBarOverlay.m.in + x -- m + bot -- (0.75 * XH - Stroke) + top -- (Ascender - Stroke) create-glyph 'longs.bentHook' : glyph-proc include : MarkSet.b diff --git a/font-src/glyphs/letter/latin/c.ptl b/font-src/glyphs/letter/latin/c.ptl index e9119f11c..38e4ebc83 100644 --- a/font-src/glyphs/letter/latin/c.ptl +++ b/font-src/glyphs/letter/latin/c.ptl @@ -17,6 +17,7 @@ glyph-block Letter-Latin-C : begin glyph-block-import Letter-Shared-Shapes : ArcStartInwardSerifL ArcStartInwardSerifR glyph-block-import Letter-Shared-Shapes : ArcEndInwardSerifL ArcEndInwardSerifR glyph-block-import Letter-Shared-Shapes : InwardSlabArcStart_RtlLhs + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay glyph-block-import Letter-Blackboard : BBS BBD define SLAB-NONE 0 @@ -399,11 +400,11 @@ glyph-block Letter-Latin-C : begin derive-glyphs 'Cbar' 0xA792 'C' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS - include : HOverlayBar (SB * 0.3) [mix (SB + Stroke) (RightSB - Stroke) 0.55] (CAP * OverlayPos) + include : LetterBarOverlay.l.in SB 0 CAP 0.5 derive-glyphs 'cbar' 0xA793 'c' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS - include : HOverlayBar (SB * 0.3) [mix (SB + Stroke) (RightSB - Stroke) 0.55] (XH * OverlayPos) + include : LetterBarOverlay.l.in SB 0 XH 0.5 derive-glyphs 'cyrl/E' 0x42D 'revC' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS diff --git a/font-src/glyphs/letter/latin/k.ptl b/font-src/glyphs/letter/latin/k.ptl index c5fd1403b..ed224b280 100644 --- a/font-src/glyphs/letter/latin/k.ptl +++ b/font-src/glyphs/letter/latin/k.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Latin-K : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : DiagonalTailInnerRadius DiagonalTailF CyrDescender + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay local [KBalance slab straightBar] : if slab (Width / 16) : if straightBar (Width / 32) 0 local [KBalanceRight slab straightBar] : if slab 0 : if straightBar (Width / 32) 0 @@ -397,7 +398,12 @@ glyph-block Letter-Latin-K : begin create-glyph "KBar.\(suffix)" : glyph-proc include [refer-glyph "K.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar [mix (SB + [KBalance slabTop straightBar]) 0 0.7] [mix (SB + [KBalance slabTop straightBar]) RightSB 0.5] [mix XH (CAP - [if slabTop Stroke 0]) 0.45] + include : LetterBarOverlay.l.in + x -- (SB + [KBalance slabTop straightBar]) + bot -- XH + top -- (CAP - [if slabTop Stroke 0]) + py -- (1 - OverlayPos) + space -- { 0 [mix SB RightSB 0.75] } create-glyph "KVBar.\(suffix)" : glyph-proc include : MarkSet.capital @@ -505,7 +511,11 @@ glyph-block Letter-Latin-K : begin create-glyph "kBar.\(suffix)" : glyph-proc include [refer-glyph "k.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar [mix (SB + [KBalance slabTop straightBar]) 0 0.7] [mix (SB + [KBalance slabTop straightBar]) RightSB 0.5] [mix XH (Ascender - [if slabTop Stroke 0]) 0.45] + include : LetterBarOverlay.l.in + x -- (SB + [KBalance slabTop straightBar]) + bot -- XH + top -- (Ascender - [if slabTop Stroke 0]) + py -- (1 - OverlayPos) create-glyph "kHookTop.\(suffix)" : glyph-proc include : MarkSet.b diff --git a/font-src/glyphs/letter/latin/lower-b.ptl b/font-src/glyphs/letter/latin/lower-b.ptl index 958d58d1d..2668bdeb8 100644 --- a/font-src/glyphs/letter/latin/lower-b.ptl +++ b/font-src/glyphs/letter/latin/lower-b.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-B : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared : CreateAccentedComposition - glyph-block-import Letter-Shared-Shapes : DToothlessRise DMBlend HooktopLeftBar + glyph-block-import Letter-Shared-Shapes : DToothlessRise DMBlend HooktopLeftBar LetterBarOverlay define [ToothedBody] : union OBarLeftShape @@ -41,7 +41,7 @@ glyph-block Letter-Latin-Lower-B : begin toothlessRoundedMotionSerifed { ToothlessRoundedBody MotionSerifs true } foreach { suffix { Body Serifs doTS }} [Object.entries BConfig] : do - local yOverlay : mix XH (Ascender - [if doTS Stroke 0]) 0.45 + local yOverlay : mix XH (Ascender - [if doTS Stroke 0]) (1 - OverlayPos) create-glyph "b.\(suffix)" : glyph-proc include : MarkSet.b include : Body @@ -49,7 +49,7 @@ glyph-block Letter-Latin-Lower-B : begin set-base-anchor 'overlayOnBar' (SB + 0.5 * Stroke * HVContrast) yOverlay create-glyph "bBar.\(suffix)" : glyph-proc include [refer-glyph "b.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar [mix SB 0 0.7] [mix SB RightSB 0.625] yOverlay + include : LetterBarOverlay.l.in SB XH (Ascender - [if doTS Stroke 0]) (1 - OverlayPos) create-glyph "bSlash.\(suffix)" : glyph-proc include [refer-glyph "b.\(suffix)"] AS_BASE ALSO_METRICS include : dispiro diff --git a/font-src/glyphs/letter/latin/lower-d.ptl b/font-src/glyphs/letter/latin/lower-d.ptl index 34d0dc6c1..043dd09fc 100644 --- a/font-src/glyphs/letter/latin/lower-d.ptl +++ b/font-src/glyphs/letter/latin/lower-d.ptl @@ -10,6 +10,7 @@ glyph-block Letter-Latin-Lower-D : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared : CreateAccentedComposition glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend CurlyTail + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay define [ToothedBody] : union OBarRightShape @@ -65,7 +66,7 @@ glyph-block Letter-Latin-Lower-D : begin create-glyph "dcroat.\(suffix)" : glyph-proc include [refer-glyph "d.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar [mix SB RightSB 0.5] [mix RightSB Width 0.7] [mix XH (Ascender - [if topSerif Stroke 0]) 0.45] + include : LetterBarOverlay.r.in RightSB XH (Ascender - [if topSerif Stroke 0]) (1 - OverlayPos) create-glyph "latn/de.\(suffix)" : glyph-proc include [refer-glyph "d.\(suffix)"] AS_BASE ALSO_METRICS diff --git a/font-src/glyphs/letter/latin/lower-f.ptl b/font-src/glyphs/letter/latin/lower-f.ptl index 227ff0601..adacf5629 100644 --- a/font-src/glyphs/letter/latin/lower-f.ptl +++ b/font-src/glyphs/letter/latin/lower-f.ptl @@ -119,52 +119,49 @@ glyph-block Letter-Latin-Lower-F : begin define pNarrowSide : mix 1 para.diversityF 1.5 define SmallFConfig : object - 'serifless' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-NONE } { 'b' 'p' } } - 'serifed' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-SERIF } { 'b' 'p' } } - 'extended' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-EXTENSION } { 'if' 'if' } } - 'tailed' { { StandardSmallFShape [DivFrame 1] } { 1 fbar CH-HOOK } { 'if' 'if' } } - 'diagonalTailed' { { StandardSmallFShape [DivFrame 1] } { 1 fbar CH-DIAGONAL-HOOK } { 'if' 'if' } } - 'seriflessCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-NONE } { 'b' 'p' } } - 'serifedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-SERIF } { 'b' 'p' } } - 'extendedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-EXTENSION } { 'if' 'if' } } - 'tailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-HOOK } { 'if' 'if' } } - 'diagonalTailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-DIAGONAL-HOOK } { 'if' 'if' } } - 'flatHook' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } } - 'flatHookSerifed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } } - 'flatHookExtended' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } } - 'flatHookTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } } - 'flatHookDiagonalTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } } - 'flatHookCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } } - 'flatHookSerifedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } } - 'flatHookExtendedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } } - 'flatHookTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } } - 'flatHookDiagonalTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } { 'if' 'if' } } + 'serifless' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-NONE } 'b' } + 'serifed' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-SERIF } 'b' } + 'extended' { { StandardSmallFShape [DivFrame 1] } { 0.95 fbar CH-EXTENSION } 'if' } + 'tailed' { { StandardSmallFShape [DivFrame 1] } { 1 fbar CH-HOOK } 'if' } + 'diagonalTailed' { { StandardSmallFShape [DivFrame 1] } { 1 fbar CH-DIAGONAL-HOOK } 'if' } + 'seriflessCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-NONE } 'b' } + 'serifedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-SERIF } 'b' } + 'extendedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 0.95 XH CH-EXTENSION } 'if' } + 'tailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-HOOK } 'if' } + 'diagonalTailedCrossbarAtXHeight' { { StandardSmallFShape [DivFrame 1] } { 1 XH CH-DIAGONAL-HOOK } 'if' } + 'flatHook' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-NONE } 'b' } + 'flatHookSerifed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-SERIF } 'b' } + 'flatHookExtended' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } 'if' } + 'flatHookTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-HOOK } 'if' } + 'flatHookDiagonalTailed' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } 'if' } + 'flatHookCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-NONE } 'b' } + 'flatHookSerifedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-SERIF } 'b' } + 'flatHookExtendedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-EXTENSION } 'if' } + 'flatHookTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-HOOK } 'if' } + 'flatHookDiagonalTailedCrossbarAtXHeight' { { [NarrowFShape 0] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } 'if' } - 'flatHookCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-NONE } { 'b' 'p' } } - 'flatHookSerifedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-SERIF } { 'b' 'p' } } - 'flatHookExtendedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-EXTENSION } { 'if' 'if' } } - 'flatHookTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-HOOK } { 'if' 'if' } } - 'flatHookDiagonalTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } { 'if' 'if' } } + 'flatHookCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-NONE } 'b' } + 'flatHookSerifedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-SERIF } 'b' } + 'flatHookExtendedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-EXTENSION } 'if' } + 'flatHookTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-HOOK } 'if' } + 'flatHookDiagonalTailedCLC1' { { [NarrowFShape 1] dfNarrowF } { pNarrowSide XH CH-DIAGONAL-HOOK } 'if' } - 'flatHookCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-NONE } { 'b' 'p' } } - 'flatHookSerifedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-SERIF } { 'b' 'p' } } - 'flatHookExtendedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } { 'if' 'if' } } - 'flatHookTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-HOOK } { 'if' 'if' } } - 'flatHookDiagonalTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } { 'if' 'if' } } + 'flatHookCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-NONE } 'b' } + 'flatHookSerifedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-SERIF } 'b' } + 'flatHookExtendedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-EXTENSION } 'if' } + 'flatHookTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-HOOK } 'if' } + 'flatHookDiagonalTailedCLC2' { { [NarrowFShape 2] dfNarrowF } { pNarrowSide fbar CH-DIAGONAL-HOOK } 'if' } - foreach { suffix {{Body df} {pBar yBar ch} {mk mkTurn}}} [Object.entries SmallFConfig] : do + foreach { suffix {{Body df} {pBar yBar ch} mk}} [Object.entries SmallFConfig] : do create-glyph "f.\(suffix)" : glyph-proc set-width df.width include : df.markSet.(mk) include : Body df pBar yBar ch - turned "turnf.\(suffix)" nothing "f.\(suffix)" df.middle (XH / 2) [df.markSet.(mkTurn)] select-variant 'f' 'f' link-reduced-variant 'f/sansSerif' 'f' MathSansSerif - select-variant 'turnf' 0x25F (follow -- 'f') select-variant 'fLenis' 0xAB35 (shapeFrom -- 'f') select-variant 'fLTail' 0x192 (shapeFrom -- 'f') - select-variant 'dotlessjWithStrokeAndHook' 0x284 (shapeFrom -- 'turnf') select-variant 'f/compLigLeft1' (shapeFrom -- 'f') select-variant 'f/compLigLeft2' (shapeFrom -- 'f') select-variant 'f/phoneticLeft' (shapeFrom -- 'f') diff --git a/font-src/glyphs/letter/latin/lower-j.ptl b/font-src/glyphs/letter/latin/lower-j.ptl index aa3bffa61..2d0016baa 100644 --- a/font-src/glyphs/letter/latin/lower-j.ptl +++ b/font-src/glyphs/letter/latin/lower-j.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-J : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared : CreateAccentedComposition - glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth + glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth HooktopLeftBar LetterBarOverlay glyph-block-import Letter-Shared-Shapes : DiagonalTailL DiagonalTailStdDepth glyph-block-import Letter-Blackboard : BBS BBD @@ -88,26 +88,39 @@ glyph-block Letter-Latin-Lower-J : begin set-base-anchor 'overlay' xMiddle (top / 2) define JConfig : object - 'serifless' { Body.Regular null XMiddle.Regular Marks.FullHook 1 } - 'serifed' { Body.Regular Serifs.Long XMiddle.Regular Marks.FullHook 1 } - 'straightLine' { Body.Straight null XMiddle.Straight Marks.Straight para.diversityII } - 'hooky' { Body.Straight Serifs.Long XMiddle.Hooky Marks.Straight para.diversityII } - 'flatHookSerifless' { Body.FlatHook null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } - 'flatHookSerifed' { Body.FlatHook Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } - 'diagonalTailedSerifless' { Body.DiagonalTailed null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } - 'diagonalTailedSerifed' { Body.DiagonalTailed Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } + 'serifless' { "Regular" null XMiddle.Regular Marks.FullHook 1 } + 'serifed' { "Regular" Serifs.Long XMiddle.Regular Marks.FullHook 1 } + 'straightLine' { "Straight" null XMiddle.Straight Marks.Straight para.diversityII } + 'hooky' { "Straight" Serifs.Long XMiddle.Hooky Marks.Straight para.diversityII } + 'flatHookSerifless' { "FlatHook" null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } + 'flatHookSerifed' { "FlatHook" Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } + 'diagonalTailedSerifless' { "DiagonalTailed" null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } + 'diagonalTailedSerifed' { "DiagonalTailed" Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } + + foreach {suffix { shapeId Serif xMiddleT Marks div } } [Object.entries JConfig] : do + local df : DivFrame div + local xMiddle : xMiddleT df - foreach {suffix { Body Serif xMiddleT Marks div } } [Object.entries JConfig] : do create-glyph "dotlessj.\(suffix)" : glyph-proc - local df : DivFrame div set-width df.width include : df.markSet.p - local xMiddle : xMiddleT df - include : Body df XH xMiddle + include : Body.(shapeId) df XH xMiddle if Serif : include : tagged 'serifLT' : Serif df XH xMiddle include : Marks df XH xMiddle (!(!Serif)) + create-glyph "dotlessjBar.\(suffix)" : glyph-proc + include [refer-glyph "dotlessj.\(suffix)"] AS_BASE ALSO_METRICS + include : LetterBarOverlay.m xMiddle (XH / 2) (space -- {0 df.width}) + + create-glyph "dotlessjBarHookTop.\(suffix)" : glyph-proc + set-width df.width + include : df.markSet.if + include [refer-glyph "dotlessjBar.\(suffix)"] + include : WithTransform [ApparentTranslate (xMiddle - HalfStroke * HVContrast - SB) 0] : HooktopLeftBar XH + select-variant 'dotlessj' 0x237 + select-variant 'dotlessjBar' 0x25F (follow -- 'dotlessj') + select-variant 'dotlessjBarHookTop' 0x284 (follow -- 'dotlessj/sansSerif') link-reduced-variant 'dotlessj/sansSerif' 'dotlessj' MathSansSerif CreateAccentedComposition 'j' 'j' 'dotlessj' 'dotAbove' CreateAccentedComposition 'j/sansSerif' null 'dotlessj/sansSerif' 'dotAbove' diff --git a/font-src/glyphs/letter/latin/upper-b.ptl b/font-src/glyphs/letter/latin/upper-b.ptl index df08e74b0..df96539f4 100644 --- a/font-src/glyphs/letter/latin/upper-b.ptl +++ b/font-src/glyphs/letter/latin/upper-b.ptl @@ -9,7 +9,7 @@ glyph-block Letter-Latin-Upper-B : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Metrics : BowlXDepth - glyph-block-import Letter-Shared-Shapes : ShoulderMidKnotRhs + glyph-block-import Letter-Shared-Shapes : ShoulderMidKnotRhs LetterBarOverlay glyph-block-import Letter-Blackboard : BBS BBD define BArcMix 0.93 @@ -94,11 +94,8 @@ glyph-block Letter-Latin-Upper-B : begin define [BOverlayBar top bp] : begin local stroke : AdviceStroke2 2 3 top - return : HOverlayBar - mix SB 0 0.7 - mix SB RightSB 0.5 - mix 0 (top * bp + stroke / 2) 0.5 - Math.min ((top - Stroke * 3) / 4) OverlayStroke + return : LetterBarOverlay.l.in SB stroke (top * bp - 0.5 * stroke) 0.5 + space -- { 0 (RightSB - Stroke * HVContrast) } define [BahtBar sw] : VBar [mix SB RightSB 0.475] (CAP - Descender / 2) (Descender / 2) sw define [BitcoinBar sw] : begin diff --git a/font-src/glyphs/letter/latin/upper-d.ptl b/font-src/glyphs/letter/latin/upper-d.ptl index 0661df47a..ff766bb9b 100644 --- a/font-src/glyphs/letter/latin/upper-d.ptl +++ b/font-src/glyphs/letter/latin/upper-d.ptl @@ -8,6 +8,7 @@ glyph-module glyph-block Letter-Latin-Upper-D : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay define [DArcShapeT sink df top right offset sw fRound] : glyph-proc local mockWidth : right + (df.width - df.rightSB) @@ -85,14 +86,16 @@ glyph-block Letter-Latin-Upper-D : begin link-reduced-variant 'D/sansSerif' 'D' MathSansSerif derive-glyphs 'Eth' 0xD0 'D' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS - include : HOverlayBar (SB * 0.3) [mix (SB + Stroke) (RightSB - Stroke) 0.55] (CAP * OverlayPos) + include : LetterBarOverlay.l.in SB Stroke (CAP - Stroke) + space -- { 0 (RightSB - Stroke * HVContrast) } alias 'Dcroat' 0x110 'Eth' alias 'arficanD' 0x189 'Eth' select-variant 'smcpD' 0x1D05 (follow -- 'D') derive-glyphs 'smcpEth' 0x1D06 'smcpD' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS - include : HOverlayBar (SB * 0.3) [mix (SB + Stroke) (RightSB - Stroke) 0.55] (XH * OverlayPos) + include : LetterBarOverlay.l.in SB Stroke (XH - Stroke) + space -- { 0 (RightSB - Stroke * HVContrast) } derive-glyphs 'Dhookleft' 0x18a 'D' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS diff --git a/font-src/glyphs/letter/latin/upper-f.ptl b/font-src/glyphs/letter/latin/upper-f.ptl index 0a7934834..972c0a90d 100644 --- a/font-src/glyphs/letter/latin/upper-f.ptl +++ b/font-src/glyphs/letter/latin/upper-f.ptl @@ -8,6 +8,7 @@ glyph-module glyph-block Letter-Latin-Upper-F : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay glyph-block-export xMidBarShrink define [xMidBarShrink serifV] : [Math.max HalfStroke ((RightSB - SB) * 0.15)] + [if serifV (Stroke * 0.25) 0] @@ -62,9 +63,11 @@ glyph-block Letter-Latin-Upper-F : begin create-glyph "currency/frenchFrancSign.\(suffix)" : glyph-proc include [refer-glyph "F.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar (SB * 0.5) (SB * 3 + Stroke * HVContrast) : Math.max - mix [if lb Stroke 0] ([yMidBar CAP] - HalfStroke) (1 / 2) - [mix [if lb Stroke 0] ([yMidBar CAP] - HalfStroke) (2 / 3)] - OverlayStroke / 2 + include : LetterBarOverlay.l.in + x -- SB + bot -- [if lb Stroke 0] + top -- [yMidBar CAP] - HalfStroke + py -- 0.5 create-glyph "smcpF.\(suffix)" : glyph-proc include : MarkSet.e diff --git a/font-src/glyphs/letter/latin/upper-g.ptl b/font-src/glyphs/letter/latin/upper-g.ptl index 3ac4422c1..fad2c817f 100644 --- a/font-src/glyphs/letter/latin/upper-g.ptl +++ b/font-src/glyphs/letter/latin/upper-g.ptl @@ -10,7 +10,7 @@ glyph-block Letter-Latin-Upper-G : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : DToothlessRise ShoulderMidKnotLhs glyph-block-import Letter-Shared-Shapes : SerifedArcStart_RtlLhs ArcStartHookTop - glyph-block-import Letter-Shared-Shapes : ArcStartSerifR ArcStartInwardSerifR + glyph-block-import Letter-Shared-Shapes : ArcStartSerifR ArcStartInwardSerifR LetterBarOverlay define TOOTHED 0 define TOOTHLESS-CORNER 1 @@ -68,7 +68,13 @@ glyph-block Letter-Latin-Upper-G : begin [Just TOOTHLESS-ROUNDED] : glyph-proc define [OverlayBarOfG top] : begin - return : HOverlayBar [mix SB RightSB 0.5] [mix RightSB Width 0.7] [mix 0 (top / 2) 0.55] + return : LetterBarOverlay.r.in RightSB 0 (top / 2) OverlayPos (space -- {(SB + Stroke * HVContrast) Width}) + + create-glyph 'GBarOverlay' : LetterBarOverlay.r.in + x -- RightSB + bot -- 0 + top -- (CAP / 2) + space -- { (SB + Stroke * HVContrast) Width } define GConfig : object toothedSeriflessHookless { TOOTHED CROSSBAR-NONE SLAB-NONE } @@ -104,7 +110,6 @@ glyph-block Letter-Latin-Upper-G : begin create-glyph "G.\(suffix)" : glyph-proc include : MarkSet.capital include : GShape shape slabType crossBarShape CAP ArchDepthA ArchDepthB - create-forked-glyph "Gbar.\(suffix)" : OverlayBarOfG CAP create-glyph "GHookTop.\(suffix)" : glyph-proc include : MarkSet.capital include : GShape shape SLAB-HOOK-TOP crossBarShape CAP ArchDepthA ArchDepthB @@ -122,9 +127,10 @@ glyph-block Letter-Latin-Upper-G : begin select-variant 'smcpG' 0x262 (follow -- 'G') select-variant 'GHookTop' 0x193 select-variant 'smcpGHookTop' 0x29B (follow -- 'GHookTop') - select-variant 'Gbar' 0x1E4 (follow -- 'G') turned 'turnSansSerifG' 0x2141 'G/sansSerif' Middle (CAP / 2) + derive-composites 'Gbar' 0x1E4 'G' 'GBarOverlay' + glyph-block-import Letter-Blackboard : BBS BBD BBBarRight define [BBGArcT sink offset top ada adb xTerm yTerm] : sink widths.lhs BBS diff --git a/font-src/glyphs/letter/latin/upper-l.ptl b/font-src/glyphs/letter/latin/upper-l.ptl index d120f3205..f8562a8c8 100644 --- a/font-src/glyphs/letter/latin/upper-l.ptl +++ b/font-src/glyphs/letter/latin/upper-l.ptl @@ -11,7 +11,7 @@ glyph-block Letter-Latin-Upper-L : begin glyph-block-import Mark-Shared-Metrics : markMiddle glyph-block-import Mark-Above : aboveMarkMid glyph-block-import Letter-Blackboard : BBS BBD - glyph-block-import Letter-Shared-Shapes : BeltOverlay + glyph-block-import Letter-Shared-Shapes : BeltOverlay LetterBarOverlay define LBarLeftX : SB * 1.5 define [LShape top sgr] : glyph-proc @@ -36,14 +36,10 @@ glyph-block Letter-Latin-Upper-L : begin create-glyph "smcpL.\(suffix)" : glyph-proc include : MarkSet.e include : LShape XH serifGrade - create-glyph "LBelt.\(suffix)" : glyph-proc - include [refer-glyph "L.\(suffix)"] AS_BASE ALSO_METRICS - include : BeltOverlay CAP (LBarLeftX + 0.5 * HVContrast * Stroke) select-variant 'L' 'L' link-reduced-variant 'L/sansSerif' 'L' MathSansSerif select-variant 'smcpL' 0x29F (follow -- 'L') - select-variant 'LBelt' 0xA7AD (follow -- 'L') turned 'turnL' 0xA780 'L' Middle (CAP / 2) turned 'turnSansSerifL' 0x2142 'L.serifless' Middle (CAP / 2) @@ -82,5 +78,7 @@ glyph-block Letter-Latin-Upper-L : begin include : refer-glyph "tildeAboveOverlay" include : ApparentTranslate (SB * 1.5 + Stroke * HVContrast / 2 - markMiddle) (CAP * 0.525 - aboveMarkMid) - create-glyph 'LBarOverlay' : HOverlayBar (SB * 0.3) [mix (SB + Stroke) (RightSB - Stroke) 0.55] (CAP * OverlayPos) + create-glyph 'LBarOverlay' : LetterBarOverlay.l.in LBarLeftX 0 CAP + create-glyph 'LBeltOverlay' : BeltOverlay CAP (LBarLeftX + 0.5 * HVContrast * Stroke) derive-composites 'LBar' 0x23D 'L' 'LBarOverlay' + derive-composites 'LBelt' 0xA7AD 'L' 'LBeltOverlay' diff --git a/font-src/glyphs/letter/latin/upper-t.ptl b/font-src/glyphs/letter/latin/upper-t.ptl index 1491d80a2..7025dd491 100644 --- a/font-src/glyphs/letter/latin/upper-t.ptl +++ b/font-src/glyphs/letter/latin/upper-t.ptl @@ -10,7 +10,7 @@ glyph-block Letter-Latin-Upper-T : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Latin-Lower-M - glyph-block-import Letter-Shared-Shapes : CyrDescender + glyph-block-import Letter-Shared-Shapes : CyrDescender LetterBarOverlay define [TLeftX df] : df.leftSB + OX * 1.5 define [TRightX df] : df.rightSB - OX * 1.5 @@ -51,10 +51,7 @@ glyph-block Letter-Latin-Upper-T : begin create-glyph "TBar.\(suffix)" : glyph-proc include [refer-glyph "T.\(suffix)"] AS_BASE ALSO_METRICS - include : HOverlayBar - mix df.middle df.leftSB 0.8 - mix df.middle df.rightSB 0.8 - mix 0 CAP 0.45 + include : LetterBarOverlay.m.in df.middle 0 CAP 0.45 create-glyph "Thookleft.\(suffix)" : glyph-proc include [refer-glyph "T.\(suffix)"] AS_BASE ALSO_METRICS diff --git a/font-src/glyphs/letter/latin/upper-y.ptl b/font-src/glyphs/letter/latin/upper-y.ptl index 7896cda78..9380e89e4 100644 --- a/font-src/glyphs/letter/latin/upper-y.ptl +++ b/font-src/glyphs/letter/latin/upper-y.ptl @@ -40,7 +40,7 @@ glyph-block Letter-Latin-Upper-Y : begin include : VBar Middle bot (cross + HalfStroke) set-base-anchor 'overlay' Middle cross - define [YOverlayShape] : glyph-proc + define [YenOverlayShape] : glyph-proc include : HOverlayBar SB RightSB (CAP * 0.45) include : HOverlayBar SB RightSB (CAP * 0.25) @@ -119,6 +119,13 @@ glyph-block Letter-Latin-Upper-Y : begin eject-contour 'serifRT' include : SetGrekUpperTonos (OX - HookX / 3) + create-glyph "YStroke.\(suffix)" : glyph-proc + include [refer-glyph "Y.\(suffix)"] AS_BASE ALSO_METRICS + local b : YCrossPos CAP 0 + local t : CAP - [if (slabType === SLAB-ALL || slabType === SLAB-MOTION) Stroke 0] + include : HOverlayBar [mix 0 SB 0.5] [mix Width RightSB 0.5] [mix b t 0.5] + Math.min OverlayStroke ((t - b) * 0.625) + select-variant 'Y' 'Y' link-reduced-variant 'Y/sansSerif' 'Y' MathSansSerif select-variant 'YHookTop' 0x1B3 (follow -- 'Y') @@ -132,7 +139,7 @@ glyph-block Letter-Latin-Upper-Y : begin alias 'cyrl/Ue' 0x4AE 'Y' derive-glyphs 'currency/yenSign' 0xA5 'Y' : lambda [src gr] : glyph-proc include [refer-glyph src] AS_BASE ALSO_METRICS - include : YOverlayShape + include : YenOverlayShape create-glyph 'YStrokeOverlay' : HOverlayBar ([mix 0 SB 0.5]) ([mix Width RightSB 0.5]) [mix 0 CAP 0.75] derive-composites 'YStroke' 0x24E 'Y' 'YStrokeOverlay' diff --git a/font-src/glyphs/letter/shared.ptl b/font-src/glyphs/letter/shared.ptl index 60f5c65d5..9a7d251db 100644 --- a/font-src/glyphs/letter/shared.ptl +++ b/font-src/glyphs/letter/shared.ptl @@ -525,13 +525,20 @@ glyph-block Letter-Shared-Shapes : begin glyph-proc glyph-block-export HooktopLeftBar - define [HooktopLeftBar] : params [bottom] : glyph-proc - include : dispiro + define [HooktopLeftBar] : params [[bottom 0]] : glyph-proc + local yTurn : CAP - Hook - HalfStroke + if (bottom + TanSlope * HVContrast * Stroke < yTurn) + : then : include : dispiro widths.lhs straight.left.start (SB + HalfStroke * HVContrast + HookX) Ascender archv flat SB (CAP - Hook - HalfStroke) - curl SB [fallback bottom 0] [heading Downward] + curl SB bottom [heading Downward] + : else : include : dispiro + widths.lhs + straight.left.start (SB + HalfStroke * HVContrast + HookX) Ascender + archv + straight.down.end SB bottom [heading Downward] glyph-block-export BeltOverlay define [BeltOverlay top xMiddle] : begin @@ -546,3 +553,46 @@ glyph-block Letter-Shared-Shapes : begin arcvh flat (xMiddle - HalfStroke - r * 1.5) (0.5 * top - r) curl (xMiddle + HalfStroke + r * 1.5 + fine) (0.5 * top - r) + + glyph-block-export LetterBarOverlay + define [LetterBarOverlay] : params [x y space refSw pXInSw sw] : begin + local {xLeftSpace xRightSpace} space + local xLeftEdge : x - pXInSw * refSw * HVContrast + local xRightEdge : x + (1 - pXInSw) * refSw * HVContrast + local xStrokeCenter : mix xLeftEdge xRightEdge 0.5 + return : HOverlayBar + Math.max [mix xLeftSpace xLeftEdge 0.3] (xStrokeCenter - 0.75 * LongJut) + Math.min [mix xRightSpace xRightEdge 0.3] (xStrokeCenter + 0.75 * LongJut) + begin y + begin sw + + set LetterBarOverlay.l : function [] + params [x y [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] : begin + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 0) (sw -- sw) + set LetterBarOverlay.m : function [] + params [x y [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] : begin + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 0.5) (sw -- sw) + set LetterBarOverlay.r : function [] + params [x y [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] : begin + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 1) (sw -- sw) + + define [calcYAndSw bot top py sw] : begin + local y : mix bot top py + local sw1 : Math.min sw (1.25 * (top - bot) * py) (1.25 * (top - bot) * (1 - py)) + return { y sw1 } + + set LetterBarOverlay.l.in : function [] + params [x bot top [py OverlayPos] [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] + : begin + local { y sw1 } : calcYAndSw bot top py sw + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 0) (sw -- sw1) + set LetterBarOverlay.m.in : function [] + params [x bot top [py OverlayPos] [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] + : begin + local { y sw1 } : calcYAndSw bot top py sw + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 0.5) (sw -- sw1) + set LetterBarOverlay.r.in : function [] + params [x bot top [py OverlayPos] [space {0 Width}] [refSw Stroke] [sw OverlayStroke]] + : begin + local { y sw1 } : calcYAndSw bot top py sw + LetterBarOverlay x y (space -- space) (refSw -- refSw) (pXInSw -- 1) (sw -- sw1) diff --git a/font-src/glyphs/symbol/letter.ptl b/font-src/glyphs/symbol/letter.ptl index 461a108e5..cf6f90cf1 100644 --- a/font-src/glyphs/symbol/letter.ptl +++ b/font-src/glyphs/symbol/letter.ptl @@ -10,6 +10,7 @@ glyph-module glyph-block Symbol-Currency : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Letter-Shared-Shapes : LetterBarOverlay create-glyph 'currency' 0xA4 : glyph-proc local sw : AdviceStroke 3.5 @@ -22,28 +23,30 @@ glyph-block Symbol-Currency : begin flat (Middle + radius * 0.87 * [Math.cos angle]) (SymbolMid + radius * 0.87 * [Math.sin angle]) curl (Middle + radius * [Math.sqrt 2] * [Math.cos angle]) (SymbolMid + radius * [Math.sqrt 2] * [Math.sin angle]) - define [SterlineBaseShape] : glyph-proc - local barLeft : [mix SB RightSB 0.2] - Stroke * 0.1 - local hookEndX : Math.max (barLeft + Stroke * 2.25 * HVContrast) [mix SB RightSB 0.95] - include : union - dispiro - g4 hookEndX (CAP - Hook * 0.85) [widths.lhs] - hookstart (CAP - O) (tight -- true) - flat barLeft [CAP - ArchDepthA * 0.75] - curl barLeft [mix Stroke CAP 0.3] - g4 SB Stroke - HBarBottom SB RightSB 0 + do "Sterling" + define xBarLeft : [mix SB RightSB 0.2] - Stroke * 0.1 + define [BaseShape] : glyph-proc + local xBarLeft : [mix SB RightSB 0.2] - Stroke * 0.1 + local hookEndX : Math.max (xBarLeft + Stroke * 2.25 * HVContrast) [mix SB RightSB 0.95] + include : union + dispiro + g4 hookEndX (CAP - Hook * 0.85) [widths.lhs] + hookstart (CAP - O) (tight -- true) + flat xBarLeft [CAP - ArchDepthA * 0.75] + curl xBarLeft [mix Stroke CAP 0.3] + g4 SB Stroke + HBarBottom SB RightSB 0 - create-glyph 'currency/sterlingSign' 0xA3 : glyph-proc - set-width Width - include : SterlineBaseShape - include : HOverlayBar [mix SB RightSB 0.05] [mix SB RightSB 0.7] (CAP * 0.53) + create-glyph 'currency/sterlingSign' 0xA3 : glyph-proc + set-width Width + include : BaseShape + include : LetterBarOverlay.l xBarLeft (CAP * 0.5) - create-glyph 'currency/liraSymbolSign' 0x20A4 : glyph-proc - set-width Width - include : SterlineBaseShape - include : HOverlayBar [mix SB RightSB 0.05] [mix SB RightSB 0.7] (CAP * 0.4) - include : HOverlayBar [mix SB RightSB 0.05] [mix SB RightSB 0.7] (CAP * 0.63) + create-glyph 'currency/liraSymbolSign' 0x20A4 : glyph-proc + set-width Width + include : BaseShape + include : LetterBarOverlay.l xBarLeft (CAP * 0.37) + include : LetterBarOverlay.l xBarLeft (CAP * 0.60 - OverlayStroke * 0.25) glyph-block Symbol-Currency-Letter-Derived : begin glyph-block-import CommonShapes