diff --git a/font-src/glyphs/letter/latin/x.ptl b/font-src/glyphs/letter/latin/x.ptl index 83992ae52..2c6dc85f2 100644 --- a/font-src/glyphs/letter/latin/x.ptl +++ b/font-src/glyphs/letter/latin/x.ptl @@ -112,7 +112,7 @@ glyph-block Letter-Latin-X : begin include : LowerXBase false include : XMotionSerifs XH - define [XCursiveHalfShape top fFlatEnd] : begin + define [XCursiveHalfShape top] : glyph-proc local ada : ArchDepthAOf (ArchDepth * 0.8) (Width / 2) local adb : ArchDepthBOf (ArchDepth * 0.8) (Width / 2) @@ -131,27 +131,23 @@ glyph-block Letter-Latin-X : begin define rIn : Math.max (0.2 * (RightSB - SB) - 0.7 * Stroke * HVContrast) [AdviceStroke 16] define flatHookDepth : 0.7 * (RightSB - SB) - swEnd - 1.5 * rIn - return : union - dispiro - curl (RightSB - OX) (top - hook1Depth) [widths.lhs.heading swEnd Upward] - flat (RightSB - OX) (top - hook1Depth + hook1StraightDepth) [heading Upward] - arcvh 16 - ShoulderMidKnotLhsRev (xTurn) (top - O) fineMid swEnd (-1) (-1) - archv 16 - flat (xCenterRight - HVContrast * fineMid) (top - ada) [widths.lhs fineMid] - curl (xCenterRight - HVContrast * fineMid) (top / 2 + O) - if fFlatEnd - : then : dispiro - flat (xCenterRight - 0.5 * HVContrast * fineMid) (top / 2 - O) [widths.center fineMid] - curl (xCenterRight - 0.5 * HVContrast * fineMid) adb - arcvh 16 - flat [mix xCenterRight RightSB 0.5] HalfStroke [widths.center.heading Stroke Rightward] - curl RightSB HalfStroke [heading Rightward] - : else : dispiro - flat (xCenterRight - 0.5 * HVContrast * fineMid) (top / 2 - O) [widths.center fineMid] - curl (xCenterRight - 0.5 * HVContrast * fineMid) [Math.min adb (swMid + rIn)] - arcvh 16 - DiagonalTailF 1 [DivFrame 1] (xCenterRight - 0.5 * HVContrast * Stroke + TanSlope * rIn) 0 rIn 50 flatHookDepth Stroke + define upperHalf : include : dispiro + curl (RightSB - OX) (top - hook1Depth) [widths.lhs.heading swEnd Upward] + flat (RightSB - OX) (top - hook1Depth + hook1StraightDepth) [heading Upward] + arcvh 16 + ShoulderMidKnotLhsRev (xTurn) (top - O) fineMid swEnd (-1) (-1) + archv 16 + flat (xCenterRight - HVContrast * fineMid) (top - ada) [widths.lhs fineMid] + curl (xCenterRight - HVContrast * fineMid) (top / 2 + O) + + define lowerHalf : include : dispiro + flat (xCenterRight - 0.5 * HVContrast * fineMid) (top / 2 - O) [widths.center fineMid] + curl (xCenterRight - 0.5 * HVContrast * fineMid) [Math.min adb (swMid + rIn)] + arcvh 16 + DiagonalTailF 1 [DivFrame 1] (xCenterRight - 0.5 * HVContrast * Stroke + TanSlope * rIn) 0 rIn 50 flatHookDepth Stroke + + define lowerHalfLastKnot lowerHalf.rhsKnots.(lowerHalf.rhsKnots.length - 1) + set-base-anchor 'cyrlDescenderAttach' lowerHalfLastKnot.x lowerHalfLastKnot.y create-glyph 'x.cursive' : glyph-proc include : MarkSet.e @@ -159,12 +155,6 @@ glyph-block Letter-Latin-X : begin include : FlipAround Middle (XH / 2) include : XCursiveHalfShape XH - create-glyph 'x.cursiveCyrlHaDescenderBase' : glyph-proc - include : MarkSet.e - include : XCursiveHalfShape XH - include : FlipAround Middle (XH / 2) - include : XCursiveHalfShape XH true - define [ChiBase fStraight] : union XStrand fStraight false SB Descender RightSB XH 0.05 0.4 0.11 XStrand fStraight false SB XH RightSB Descender 0.05 0.4 0.11 @@ -205,17 +195,16 @@ glyph-block Letter-Latin-X : begin select-variant 'x' 'x' link-reduced-variant 'x/sansSerif' 'x' MathSansSerif - select-variant 'xCyrlHaDescenderBase' nothing (shapeFrom -- 'x') select-variant 'cyrl/ha' 0x445 (shapeFrom -- 'x') select-variant 'grek/chi' 0x3C7 (shapeFrom -- 'latn/chi') select-variant 'latn/chi' 0xAB53 (follow -- 'x') derive-composites 'cyrl/HaDescender' 0x4B2 'cyrl/Ha' [CyrDescender RightSB] - derive-composites 'cyrl/haDescender' 0x4B3 'xCyrlHaDescenderBase' [CyrDescender RightSB] + derive-composites 'cyrl/haDescender' 0x4B3 'cyrl/ha' [CyrDescender RightSB] derive-composites 'cyrl/HaHook' 0x4FC 'cyrl/Ha' [CyrHookDescender RightSB] - derive-composites 'cyrl/haHook' 0x4FD 'xCyrlHaDescenderBase' [CyrHookDescender RightSB] + derive-composites 'cyrl/haHook' 0x4FD 'cyrl/ha' [CyrHookDescender RightSB] define [CyrlHaBarShape top] : HOverlayBar [mix SB RightSB 0.08] [mix SB RightSB 0.92] (top / 2) derive-composites 'cyrl/HaBar' 0x4FE 'cyrl/Ha' [CyrlHaBarShape CAP] diff --git a/font-src/glyphs/letter/shared.ptl b/font-src/glyphs/letter/shared.ptl index 9fc647fd9..70085becf 100644 --- a/font-src/glyphs/letter/shared.ptl +++ b/font-src/glyphs/letter/shared.ptl @@ -464,11 +464,20 @@ glyph-block Letter-Shared-Shapes : begin define VJutSw : AdviceStroke 3.5 glyph-block-export CyrDescender - define [CyrDescender] : params [x [connex 0.5] [overflow nothing]] : begin - local descenderOverflow : fallback overflow SideJut - return : union - VBarRight (x + descenderOverflow + 0.125 * Stroke) (HalfStroke - LongJut) Stroke VJutSw - HBarTop (x - connex * Stroke * HVContrast) (x + descenderOverflow) Stroke + define [CyrDescender] : params [x [connex 0.5] [overflow nothing]] : glyph-proc + local attachAnchor currentGlyph.baseAnchors.cyrlDescenderAttach + if attachAnchor + : then : begin + local attach : currentGlyph.gizmo.unapply attachAnchor + local descenderOverflow : fallback overflow SideJut + include : union + VBarRight attach.x (HalfStroke - LongJut) attach.y VJutSw + HBarTop (attach.x - connex * Stroke * HVContrast) attach.x attach.y + : else : begin + local descenderOverflow : fallback overflow SideJut + include : union + VBarRight (x + descenderOverflow + 0.125 * Stroke) (HalfStroke - LongJut) Stroke VJutSw + HBarTop (x - connex * Stroke * HVContrast) (x + descenderOverflow) Stroke glyph-block-export CyrHookDescender define [CyrHookDescender] : params [x [connex 0.5] [overflow nothing]] : begin diff --git a/params/variants.toml b/params/variants.toml index cfbeaaa8c..b5ded7b56 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -4212,7 +4212,6 @@ rank = 1 description = "Serifless, straight `x`" selector.x = "straightSerifless" selector."x/sansSerif" = "straightSerifless" -selector.xCyrlHaDescenderBase = "straightSerifless" selector."cyrl/ha" = "straightSerifless" selector."grek/chi" = "straightSerifless" @@ -4221,7 +4220,6 @@ rank = 2 description = "Serifless, slightly curly `x`, like Iosevka 2.x" selector.x = "curlySerifless" selector."x/sansSerif" = "curlySerifless" -selector.xCyrlHaDescenderBase = "curlySerifless" selector."cyrl/ha" = "curlySerifless" selector."grek/chi" = "curlySerifless" @@ -4230,7 +4228,6 @@ rank = 3 description = "Straight `x` with motion serifs" selector.x = "straightMotionSerifed" selector."x/sansSerif" = "straightSerifless" -selector.xCyrlHaDescenderBase = "straightMotionSerifed" selector."cyrl/ha" = "straightMotionSerifed" selector."grek/chi" = "straightMotionSerifed" @@ -4239,7 +4236,6 @@ rank = 4 description = "Slightly curly `x`, like Iosevka 2.x, with motion serifs" selector.x = "curlyMotionSerifed" selector."x/sansSerif" = "curlySerifless" -selector.xCyrlHaDescenderBase = "curlyMotionSerifed" selector."cyrl/ha" = "curlyMotionSerifed" selector."grek/chi" = "curlyMotionSerifed" @@ -4248,7 +4244,6 @@ rank = 5 description = "Straight `x` with full serifs" selector.x = "straightSerifed" selector."x/sansSerif" = "straightSerifless" -selector.xCyrlHaDescenderBase = "straightSerifed" selector."cyrl/ha" = "straightSerifed" selector."grek/chi" = "straightBilateralMotionSerifed" @@ -4257,7 +4252,6 @@ rank = 6 description = "Slightly curly `x`, like Iosevka 2.x, with full serifs" selector.x = "curlySerifed" selector."x/sansSerif" = "curlySerifless" -selector.xCyrlHaDescenderBase = "curlySerifed" selector."cyrl/ha" = "curlySerifed" selector."grek/chi" = "curlyBilateralMotionSerifed" @@ -4266,7 +4260,6 @@ rank = 7 description = "Cursive `x`" selector.x = "cursive" selector."x/sansSerif" = "cursive" -selector.xCyrlHaDescenderBase = "cursiveCyrlHaDescenderBase" selector."cyrl/ha" = "cursive" selector."grek/chi" = "curlySerifless"