* Fix disconnected underbars for Abkhasian Che (#1579).

* Fix shape of heavy-weight serifed Latin C With Hook, Epsilons (#1580).
* Fix heavy-weight ampersand's top arc alignment (#1581).
* Fix shape of heavy-weight lowercase r (#1582).
* Optimize shape for Sulzbacher Eszet (#1583).
* Fix missing serifs of Cyrillic Koppa (#1584).
* Fix shape of heavy-weight Rs (#1585).
* Fix shape of Latin Small Letter Y with Hook under heavy weights (#1588, #1589).
* Fix shape of Bashkir Ka under heavy weights (#1590).
* Fix artifacts of certain K-related letters (#1591).
* Optimize shape of small S (#1592).
This commit is contained in:
be5invis 2023-03-07 21:15:36 -08:00
parent ac3415fbab
commit 3ebc80a816
17 changed files with 170 additions and 122 deletions

View file

@ -1,4 +1,15 @@
* Make ASCII marks (grave, caret, tilde) more significant (#1576).
* Optimize shape for Italic long-dotted-oval zero (#1577).
* Fix ear-cuts of capital Y under Italics (#1578).
* Fix disconnected Cedillas for serifed italic glyphs on heavier weights (#1579).
* Make ASCII marks (grave, caret, tilde) more significant (#1576).
* Fix disconnected underbars for Abkhasian Che (#1579).
* Fix shape of heavy-weight serifed Latin C With Hook, Epsilons (#1580).
* Fix heavy-weight ampersand's top arc alignment (#1581).
* Fix shape of heavy-weight lowercase r (#1582).
* Optimize shape for Sulzbacher Eszet (#1583).
* Fix missing serifs of Cyrillic Koppa (#1584).
* Fix shape of heavy-weight Rs (#1585).
* Fix shape of Latin Small Letter Y with Hook under heavy weights (#1588, #1589).
* Fix shape of Bashkir Ka under heavy weights (#1590).
* Fix artifacts of certain K-related letters (#1591).
* Optimize shape of small S (#1592).

View file

@ -13,7 +13,7 @@ glyph-block Letter-Cyrillic-Zhe : begin
define [ZheSw df] : AdviceStroke 3.3 df.div
define [ZheSw2 df] : AdviceStroke 4.0 df.div
define [ZheSw3 df] : AdviceStroke 3.7 df.div
define [ZheOvershoot fSlab df] : if fSlab 0 (O * 3 * df.div)
define [Overshoot fSlab df] : if fSlab 0 (O * 3 * df.div)
define [CenterBar fSlab df bot midTop] : glyph-proc
include : VBar.m df.middle bot midTop [ZheSw df]
@ -30,18 +30,18 @@ glyph-block Letter-Cyrillic-Zhe : begin
include : HSerif.rt (df.rightSB - fine * fineK) top SideJut
include : HSerif.rb (df.rightSB - fine * fineK) bot SideJut
export : define [Descender df] : begin
export : define [Descender fSlab df] : begin
define sw : ZheSw df
define fineK 0.1
return : CyrDescender.rSideJut
x -- df.rightSB - fineK * sw
x -- df.rightSB - fineK * sw - [Overshoot fSlab df]
y -- 0
refSw -- sw
sideJut -- SideJut
export : define [StraightLegs fSlab df bot top] : begin
define fine : ZheSw df
define overshoot : ZheOvershoot fSlab df
define overshoot : Overshoot fSlab df
define attach1X : df.middle - 0.5 * HVContrast * fine
define attach1Y : [mix bot top 0.42] - fine
@ -114,7 +114,7 @@ glyph-block Letter-Cyrillic-Zhe : begin
define cor : DiagCor (top - bot) (df.rightSB - df.leftSB)
define midX : mix df.leftSB (df.middle - HVContrast * cor * fine) k
define midY : mix bot top 0.5
define overshoot : ZheOvershoot fSlab df
define overshoot : Overshoot fSlab df
return : union
HBar.m midX (df.width - midX) midY fine
intersection [MaskBelow midY] [MaskAbove bot]
@ -147,7 +147,7 @@ glyph-block Letter-Cyrillic-Zhe : begin
create-glyph "cyrl/ZheDescender.\(suffix)" : glyph-proc
local df : DivFrame para.diversityM 3
include [refer-glyph "cyrl/Zhe.\(suffix)"] AS_BASE ALSO_METRICS
include : Zhe.Descender df
include : Zhe.Descender fSlab df
create-glyph "cyrl/zhe.\(suffix)" : glyph-proc
define df : DivFrame para.diversityM 3
@ -158,7 +158,7 @@ glyph-block Letter-Cyrillic-Zhe : begin
create-glyph "cyrl/zheDescender.\(suffix)" : glyph-proc
local df : DivFrame para.diversityM 3
include [refer-glyph "cyrl/zhe.\(suffix)"] AS_BASE ALSO_METRICS
include : Zhe.Descender df
include : Zhe.Descender fSlab df
create-glyph "cyrl/zhe.BGR.\(suffix)" : glyph-proc
define df : DivFrame para.diversityM 3

View file

@ -43,7 +43,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
[Just SLAB-CLASSICAL] : SerifedArcStart_RtlLhs RightSB Middle top stroke hook
[Just SLAB-INWARD] : InwardSlabArcStart_RtlLhs RightSB Middle top stroke hook
__ : list [g4 (RightSB + O) (top - hook) [widths.lhs]] [hookstart (top - O)]
g4 SB (top - ada)
g4 SB [YSmoothMidL top (midy - stroke / 2)]
arcvh
flat Middle (midy - (fine - stroke / 2)) [widths.heading fine 0 Rightward]
curl midx (midy - (fine - stroke / 2)) [heading Rightward]
@ -54,7 +54,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
flat midx (midy + (fine - stroke / 2)) [widths.heading fine 0 Leftward]
curl Middle (midy + (fine - stroke / 2)) [heading Leftward]
archv
g4 (SB + OX * 2) (bot + adb) [widths.lhs]
g4 (SB + OX * 2) [YSmoothMidL (midy + stroke / 2) bot] [widths.lhs]
match slabType
[Just SLAB-CLASSICAL] : SerifedArcEnd_LtrLhs RightSB Middle bot stroke hook
[Just SLAB-INWARD] : InwardSlabArcEnd_LtrLhs RightSB Middle bot stroke hook
@ -64,15 +64,19 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
SmallEpsilonUpperShape slabTop top bot blend hook
SmallEpsilonLowerShape slabBot top bot blend hook
define [AutoStartSerifR sty top] : match sty
[Just SLAB-CLASSICAL] : ArcStartSerifR RightSB top Stroke Hook
[Just SLAB-INWARD] : ArcStartInwardSerifR RightSB top Stroke Hook
__ : glyph-proc
define [AutoStartSerifR sty top bot blend] : begin
define [object stroke] : SmallEpsilonShapeDim top bot blend
return : match sty
[Just SLAB-CLASSICAL] : ArcStartSerifR RightSB top stroke Hook
[Just SLAB-INWARD] : ArcStartInwardSerifR RightSB top stroke Hook
__ : glyph-proc
define [AutoEndSerifR sty bot] : match sty
[Just SLAB-CLASSICAL] : ArcEndSerifR RightSB bot Stroke Hook
[Just SLAB-INWARD] : ArcEndInwardSerifR RightSB bot Stroke Hook
__ : glyph-proc
define [AutoEndSerifR sty top bot blend] : begin
define [object stroke] : SmallEpsilonShapeDim top bot blend
return : match sty
[Just SLAB-CLASSICAL] : ArcEndSerifR RightSB bot stroke Hook
[Just SLAB-INWARD] : ArcEndInwardSerifR RightSB bot stroke Hook
__ : glyph-proc
define [CyrZeShapeDim top bot blend] : begin
local stroke : AdviceStroke2 2 3 (top - bot)
@ -92,7 +96,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
[Just SLAB-CLASSICAL] : SerifedArcStart_LtrRhs SB Middle top stroke hook
[Just SLAB-INWARD] : InwardSlabArcStart_LtrRhs SB Middle top stroke hook
__ : list [g4 (SB - O) (top - hook) : widths.rhs] [hookstart (top - O)]
g4 RightSB (top - adb)
g4 RightSB [YSmoothMidR top (midy - stroke / 2)]
arcvh
flat Middle (midy - (fine - stroke / 2)) [widths.heading 0 fine Leftward]
curl midx (midy - (fine - stroke / 2)) [heading Leftward]
@ -103,7 +107,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
flat midx (midy + (fine - stroke / 2)) [widths.rhs.heading fine Rightward]
curl Middle (midy + (fine - stroke / 2)) [heading Rightward]
archv
g4 (RightSB - OX * 2) (bot + ada) [widths.rhs stroke]
g4 (RightSB - OX * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs stroke]
match slabType
[Just SLAB-CLASSICAL] : SerifedArcEnd_RtlRhs SB Middle bot stroke hook
[Just SLAB-INWARD] : InwardSlabArcEnd_RtlRhs SB Middle bot stroke hook
@ -132,15 +136,19 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
CyrZeUpperShape slabTop top bot blend hook
CyrZeLowerShapeTailed SLAB-NONE top bot blend hook
define [AutoStartSerifL sty top] : match sty
[Just SLAB-CLASSICAL] : ArcStartSerifL SB top Stroke Hook
[Just SLAB-INWARD] : ArcStartInwardSerifL SB top Stroke Hook
__ : glyph-proc
define [AutoStartSerifL sty top bot blend] : begin
define [object stroke] : CyrZeShapeDim top bot blend
return : match sty
[Just SLAB-CLASSICAL] : ArcStartSerifL SB top stroke Hook
[Just SLAB-INWARD] : ArcStartInwardSerifL SB top stroke Hook
__ : glyph-proc
define [AutoEndSerifL sty bot] : match sty
[Just SLAB-CLASSICAL] : ArcEndSerifL SB bot Stroke Hook
[Just SLAB-INWARD] : ArcEndInwardSerifL SB bot Stroke Hook
__ : glyph-proc
define [AutoEndSerifL sty top bot blend] : begin
define [object stroke] : CyrZeShapeDim top bot blend
return : match sty
[Just SLAB-CLASSICAL] : ArcEndSerifL SB bot stroke Hook
[Just SLAB-INWARD] : ArcEndInwardSerifL SB bot stroke Hook
__ : glyph-proc
define EpsilonConfig : object
serifless { SLAB-NONE SLAB-NONE }
@ -156,42 +164,42 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
create-glyph "latn/Epsilon.\(suffix)" : glyph-proc
include : MarkSet.capital
include : SmallEpsilonShape slabTop slabBot CAP 0 StdBlend Hook
include : AutoStartSerifR slabTop CAP
include : AutoEndSerifR slabBot 0
include : AutoStartSerifR slabTop CAP 0 StdBlend
include : AutoEndSerifR slabBot CAP 0 StdBlend
create-glyph "latn/epsilon.\(suffix)" : glyph-proc
include : MarkSet.e
include : SmallEpsilonShape slabTop slabBot XH 0 StdBlend SHook
include : AutoStartSerifR slabTop XH
include : AutoEndSerifR slabBot 0
include : AutoStartSerifR slabTop XH 0 StdBlend
include : AutoEndSerifR slabBot XH 0 StdBlend
create-glyph "cyrl/Ze.\(suffix)" : glyph-proc
include : MarkSet.capital
include : CyrZeShape slabTop slabBot CAP 0 StdBlend Hook
include : AutoStartSerifL slabTop CAP
include : AutoEndSerifL slabBot 0
include : AutoStartSerifL slabTop CAP 0 StdBlend
include : AutoEndSerifL slabBot CAP 0 StdBlend
create-glyph "cyrl/ze.\(suffix)" : glyph-proc
include : MarkSet.e
include : CyrZeShape slabTop slabBot XH 0 StdBlend SHook
include : AutoStartSerifL slabTop XH
include : AutoEndSerifL slabBot 0
include : AutoStartSerifL slabTop XH 0 StdBlend
include : AutoEndSerifL slabBot XH 0 StdBlend
create-glyph "cyrl/ze.BGR.\(suffix)" : glyph-proc
include : MarkSet.p
include : CyrZeShape slabTop slabBot XH Descender StdBlend SHook
include : AutoStartSerifL slabTop XH
include : AutoEndSerifL slabBot Descender
include : AutoStartSerifL slabTop XH Descender StdBlend
include : AutoEndSerifL slabBot XH Descender StdBlend
create-glyph "cyrl/KsiBase.\(suffix)" : glyph-proc
include : MarkSet.capital
include : CyrKsiBaseShape slabTop CAP 0 StdBlend Hook
include : AutoStartSerifL slabTop CAP
include : AutoStartSerifL slabTop CAP 0 StdBlend
create-glyph "cyrl/ksiBase.\(suffix)" : glyph-proc
include : MarkSet.e
include : CyrKsiBaseShape slabTop XH 0 StdBlend SHook
include : AutoStartSerifL slabTop XH
include : AutoStartSerifL slabTop XH 0 StdBlend
alias 'grek/epsilon' 0x3B5 'latn/epsilon.serifless'
select-variant 'latn/Epsilon' 0x190

View file

@ -27,7 +27,7 @@ glyph-block Letter-Greek-Qoppa : begin
if SLAB : begin
define kSerifShift : 0.45 * ((0.3 * (RightSB - SB)) / (CAP / 2 + HalfStroke))
include : HSerif.mb (x2co + kSerifShift * Stroke) 0 Jut
include : HSerif.mt (x2 - kSerifShift * Stroke) CAP Jut
include : HSerif.mt (x2 - kSerifShift * Stroke) CAP Jut
create-glyph 'grek/qoppa' 0x3DF : glyph-proc
include : MarkSet.b

View file

@ -15,14 +15,6 @@ glyph-block Letter-Latin-Lower-Eszet : begin
define DESCENDING 1
define TAILED 2
local ymiddle : [mix 0 Ascender 0.5] - HalfStroke
local ymiddleCap : [mix 0 Ascender 0.54] - HalfStroke
local xmiddle : Math.max (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
local xmiddleBot : Math.max (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
local xfinal : Math.min
xmiddle - 1 - Stroke * TanSlope
Math.max (SB + Stroke * 2) [mix SB RightSB (1 / 4)]
define [TraditionalBody fFlathook slab tail] : glyph-proc
include : MarkSet.b
local l : SB * 1
@ -66,24 +58,31 @@ glyph-block Letter-Latin-Lower-Eszet : begin
define [SulzbacherBody slab tail] : glyph-proc
define ymiddle : [mix 0 Ascender 0.5] - HalfStroke
define xFinal : Math.max
mix (SB + Stroke * HVContrast) RightSB 0.1
mix SB RightSB 0.3
define xMiddle : Math.max xFinal (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
define xMiddleBot : Math.max xMiddle (xFinal + 0.01 + TanSlope * Stroke)
include : MarkSet.b
include : dispiro
widths.rhs
flat SB 0 [heading Upward]
curl SB XH
arcvh
g4 (Middle + O) (Ascender - O)
g4 (Middle - CorrectionOMidS) (Ascender - O)
archv
g4 (RightSB + O * 2) [mix Ascender ymiddle 0.47]
g4.left.end xmiddle ymiddle [heading Leftward]
g4 (RightSB + O * 2) [YSmoothMidR ymiddle Ascender]
g4.left.end xMiddle ymiddle [heading Leftward]
include : dispiro
widths.rhs
g4.right.start xmiddle (ymiddle + Stroke) [heading Rightward]
g4.right.start xMiddle (ymiddle + Stroke) [heading Rightward]
archv
g4 (RightSB - O) [mix 0 (ymiddle + Stroke) 0.5]
g4 (RightSB - O) [YSmoothMidR (ymiddle + Stroke) 0]
arcvh
flat xmiddleBot 0
curl xfinal 0 [heading Leftward]
flat xMiddleBot 0 [heading Leftward]
curl xFinal 0 [heading Leftward]
if slab : include : HSerif.lb SB 0 SideJut
include : match tail
@ -98,7 +97,7 @@ glyph-block Letter-Latin-Lower-Eszet : begin
define swOuter : AdviceStroke2 2 3 Ascender
define strokeCoeff : StrokeWidthBlend 0 1 swInner
define sEndX : Math.max
SB + swOuter * HVContrast + (RightSB - SB - Stroke) * 0.1
mix (SB + Stroke * HVContrast) RightSB 0.1
mix SB RightSB 0.3
define swInner : AdviceStroke2 2.5 3 Ascender
define ess: swInner * EssLower / Stroke
@ -125,7 +124,7 @@ glyph-block Letter-Latin-Lower-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 + TanSlope * swInner ) 0
flat ([Math.max (sEndX + 0.1 + TanSlope * swInner) : Math.min (RightSB - innerSmoothB) [mix sEndX RightSB 0.375]] + CorrectionOMidX * swInner / 2 + TanSlope * swInner ) 0
curl sEndX 0 [heading Leftward]
if slab : include : HSerif.lb SB 0 SideJut
@ -154,35 +153,37 @@ glyph-block Letter-Latin-Upper-Eszet : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
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)
local xmiddleBot : Math.max (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
local xfinal : Math.min
xmiddle - 1 - Stroke * TanSlope
Math.max (SB + Stroke * 2) [mix SB RightSB (1 / 4)]
create-glyph 'Eszet' 0x1E9E : glyph-proc
include : MarkSet.capital
local rightTopX : RightSB + O * 4
define ymiddle : [mix 0 CAP 0.5] - HalfStroke
define ymiddleCap : [mix 0 CAP 0.54] - HalfStroke
define xFinal : Math.max
mix (SB + Stroke * HVContrast) RightSB 0.1
mix SB RightSB 0.3
define xMiddle : Math.max xFinal (SB + Stroke * HVContrast * 1.2) (RightSB - ymiddle / 2 - Stroke * 0.75)
define xMiddleBot : Math.max xMiddle (xFinal + 0.01 + TanSlope * Stroke)
define rightTopX : RightSB + O
include : dispiro
widths.lhs
flat rightTopX CAP
flat rightTopX CAP [heading Leftward]
curl Middle CAP
archv
flat SB XH
curl SB 0 [heading Downward]
include : dispiro
widths.rhs
g4 xmiddle (ymiddleCap + Stroke) [heading Rightward]
g4 xMiddle (ymiddleCap + Stroke) [heading Rightward]
archv
g4 (RightSB - O * 2) [mix 0 (ymiddleCap + Stroke) 0.5]
g4 (RightSB - O * 2) [YSmoothMidR (ymiddleCap + Stroke) 0]
arcvh
flat xmiddleBot 0
curl xfinal 0 [heading Leftward]
flat xMiddleBot 0
curl xFinal 0 [heading Leftward]
include : dispiro
widths.rhs
g4 rightTopX (CAP - Stroke)
g4 xmiddle (ymiddleCap + Stroke) [widths Stroke 0]
if SLAB : include : HSerif.lb SB 0 SideJut
g4 xMiddle (ymiddleCap + Stroke) [widths Stroke 0]
if SLAB : include : HSerif.lb SB 0 SideJut

View file

@ -406,6 +406,7 @@ glyph-block Letter-Latin-C : begin
refer-glyph src
Rect (CAP / 2) Descender (Middle + Stroke * HVContrast) (Width * 4)
Rect (XH / 2) [mix Stroke Hook 0.5] Middle (Width * 4)
if SLAB : include : HSerif.mb (Middle + HalfStroke * HVContrast) Descender MidJutSide
derive-glyphs 'cyrl/koppa' 0x481 'cTopSerifOnly' : lambda [src gr] : glyph-proc
include : MarkSet.p
@ -413,6 +414,7 @@ glyph-block Letter-Latin-C : begin
refer-glyph src
Rect (XH / 2) Descender (Middle + Stroke * HVContrast) (Width * 4)
Rect (XH / 2) [mix Stroke Hook 0.5] Middle (Width * 4)
if SLAB : include : HSerif.mb (Middle + HalfStroke * HVContrast) Descender MidJutSide
derive-composites 'CCedilla' 0xC7 'C' 'cedillaExtShapeBelowOArc'
derive-composites 'cCedilla' 0xE7 'c' 'cedillaExtShapeBelowOArc'

View file

@ -47,7 +47,11 @@ glyph-block Letter-Latin-K : begin
set-base-anchor 'trailing' (kshRightBot - Ok) 0
define [TopStrokeMask offset] : Rect top 0 kshLeft [if [maskBit slabLegs 1] (kshRightTop + offset) (2 * Width)]
local kshRightSerifs : right + [KBalanceRight true true]
local serifLengthAdj : Ok + stroke * HVContrast
define [TopStrokeMask offset] : Rect top 0 kshLeft [if [maskBit slabLegs 1] (kshRightSerifs - serifLengthAdj + offset + SideJut + serifLengthAdj - TanSlope * Stroke) (2 * Width)]
define [BottomStrokeMask offset] : Rect top 0 kshLeft [if [maskBit slabLegs 0] (kshRightSerifs - serifLengthAdj + offset + SideJut + serifLengthAdj + TanSlope * Stroke) (2 * Width)]
if [not fHookTop] : include : intersection
TopStrokeMask 0
dispiro
@ -63,6 +67,7 @@ glyph-block Letter-Latin-K : begin
curl (kshLeft + stroke) attach [widths.rhs fine]
include : intersection
BottomStrokeMask (-0.1)
spiro-outline
corner (kshLeft + stroke) 0
corner (kshLeft + stroke) (attach + 1)
@ -70,9 +75,8 @@ glyph-block Letter-Latin-K : begin
corner (kshRightBot - Ok) top
corner (kshRightBot - Ok) 0
dispiro
widths.lhs stroke
flat (kshRightBot - Ok) 0
curl (kshLeft + stroke) attach2
flat (kshRightBot - Ok) 0 [widths.lhs stroke]
curl (kshLeft + stroke) attach2 [widths.lhs fine]
include : difference
union
@ -214,7 +218,7 @@ glyph-block Letter-Latin-K : begin
define [KCursiveLoopAndLegDimen top straightBar slabLeft slabLegs] : begin
define kshLeft : SB + [KBalance slabLeft straightBar]
define kshRight : RightSB + [KBalanceRightCursive slabLegs straightBar] + 0.2 * Stroke
define kshRight : RightSB + [KBalanceRightCursive slabLegs straightBar]
define arcFine : Stroke * CThin
define arcStroke : AdviceStroke2 2 3 top
@ -238,7 +242,7 @@ glyph-block Letter-Latin-K : begin
define arcBottomX : mix arcStartX kshRight pArcBottomX
define arcBottomY : mix 0 top pArcBottomY
define arcTerminalY : arcBottomY + arcStroke * 0.125 - O
define arcRightX : kshRight * pArcRightX
define arcRightX : kshRight * pArcRightX + 0.2 * Stroke * HVContrast
define arcRightY : mix arcBottomY top pArcRightY
define arcTopX : mix arcStartX arcRightX pArcTopX
define arcTopY : top - O
@ -249,6 +253,8 @@ glyph-block Letter-Latin-K : begin
define [KCursiveLoopAndLegShapeImpl tailed] : function [fHookTop left right stroke top slabLeft slabLegs attachment] : glyph-proc
define dim : KCursiveLoopAndLegDimen top true slabLeft slabLegs
local Ok : KO slabLegs true top stroke
include : dispiro
g4.up.start dim.arcStartX dim.arcStartY [widths.heading 0 dim.arcFine Upward]
arcvh 8 2.0
@ -279,7 +285,7 @@ glyph-block Letter-Latin-K : begin
Rect XH 0 0 [if slabLegs (dim.slabStartX + SideJut) (Width * 2)]
dispiro
flat dim.arcTerminalX dim.arcTerminalY [widths.lhs]
curl dim.kshRight 0 [widths.rhs]
curl (dim.kshRight - Ok) 0 [widths.rhs]
spiro-outline
g4.up.start (dim.arcStartX - O) dim.arcStartY
arcvh 4 2.1
@ -292,9 +298,10 @@ glyph-block Letter-Latin-K : begin
if (slabLegs && !tailed) : include : HSerif.rb dim.slabStartX 0 SideJut
if attachment : include : attachment.rSideJut
x -- dim.slabStartX
jut -- Jut
x -- [if slabLegs dim.slabStartX (dim.kshRight - Ok)]
xLink -- (xDTStart - Stroke * HVContrast)
y -- 0
jut -- Jut
define [KHookTopBar slabLegs straightBar] : HooktopLeftBar.inner
x -- SB + [KBalance slabLegs straightBar]
@ -460,14 +467,16 @@ glyph-block Letter-Latin-K : begin
define [BashkirKaShape df top] : glyph-proc
local left : if slabTop ([mix SB RightSB 0.35] - df.mvs / 2 * HVContrast) [mix SB RightSB 0.2]
local leftNB : left - [KBalance slabTop straightBar]
local barLeft : mix 0 SB [if slabTop 0.25 0.375]
local xTopBarLeftEnd : mix 0 SB [if slabTop 0.25 0.375]
local sw : AdviceStroke 3
include : HBar.t barLeft (Stroke * 0.1 + left) top
include : HBar.t xTopBarLeftEnd (Stroke * 0.1 + left) top
include : VBar.l left 0 top sw
include : LegsImpl false leftNB RightSB Stroke top slabTop slabLegs
if slabTop : include : VSerif.dl barLeft top VJut (df.mvs / HVContrast)
if slabBot : include : HSerif.mb (left + HalfStroke * HVContrast) 0 Jut
include : LegsImpl false leftNB RightSB sw top slabTop slabLegs
if slabTop : include : VSerif.dl xTopBarLeftEnd top VJut
Math.min (VJutStroke * df.mvs / Stroke) (0.625 * (left - xTopBarLeftEnd))
if slabBot : begin
include : HSerif.mb (left + 0.5 * sw * HVContrast) 0 Jut
create-glyph "cyrl/BashkirUpperKa.\(suffix)" : glyph-proc
define df : DivFrame 1

View file

@ -110,7 +110,7 @@ glyph-block Letter-Latin-Lower-E : begin
define dfSub : DivFrame divSub 2
include : Body dfSub top df.mvs
if fDesc : include : difference
VBar.m dfSub.middle (- AccentStackOffset) 0 [AdviceStroke 3.5 df.div]
VBar.m dfSub.middle (-AccentStackOffset) (df.mvs + O) [AdviceStroke 3.5 df.div]
OShapeOutline.NoOvershoot top 0 dfSub.leftSB dfSub.rightSB df.mvs
include : Translate (Width * (df.div - divSub)) 0

View file

@ -28,11 +28,11 @@ glyph-block Letter-Latin-Lower-R : begin
local strokeA : mix strokeBar stroke 0.5
local { rBalanceMultiplier rHookMultiplier rHookSwMultiplier rSerifLeftExtender hookSuperness } : match mode
[Just rStraight] { 1 1 0 0 2.35 }
[Just rSerifed] { (4 / 3) (2 / 3) (1 / 4) (1 / 3) 2.75 }
[Just rSerifed] { (4 / 3) (2 / 3) (1 / 4) (1 / 3) 2.35 }
[Just rNarrow] { (2 * (df.div - 0.5)) 1 0 0 2.35 }
[Just rNarrowSerifed] { (5 / 8 * df.div) (3 / 4) 0 (1 / 2 * [Math.max 0 : mix 1 df.div 4]) 2.35 }
[Just rCornerHooked] { (2 * (df.div - 0.5)) 1 0 0 2.35 }
[Just rCornerHookedSerifed] { (4 / 3) (2 / 3) (1 / 4) (1 / 3) 2.75 }
[Just rCornerHookedSerifed] { (4 / 3) (2 / 3) (1 / 4) (1 / 3) 2.35 }
[Just rEarless] { 1 1 0 0 2.35 }
local xBar : match mode
@ -66,7 +66,7 @@ glyph-block Letter-Latin-Lower-R : begin
0.65 + 0.25 * strokeA / Width + 4 * TanSlope * strokeA / Width
__ : 0.65 + 4 * TanSlope * strokeA / Width
local rmiddlein : [mix xBar (rHookX - strokeA * HVContrast * 1.05) mixpin] - CorrectionOMidS
local skew : Math.max 0 : (xArchMiddle - rmiddlein) / stroke
local skew : Math.max 0 : (xArchMiddle - rmiddlein) / stroke - TanSlope
local rHookY : RHook * rHookMultiplier + stroke * rHookSwMultiplier
local rHookXN : match mode
[Just rNarrowSerifed] : mix df.width rHookX df.div
@ -86,9 +86,9 @@ glyph-block Letter-Latin-Lower-R : begin
include : dispiro
widths.lhs
g4.up.start rHookX (XH - rHookY - Stroke * 0.5) [heading Upward]
arcvh nothing hookSuperness
arcvh 32 hookSuperness
g4.left.mid (xArchMiddle - CorrectionOMidS * [linreg 72 0.75 108 1 Stroke]) (XH - O) [widths.heading Stroke 0 {.y (-1) .x (-skew)}]
archv
archv 32
straight.down.end (xBar - fine * HVContrast) (XH * 0.53 + (SmallArchDepth - SmallArchDepthA)) [widths.heading fine 0 Downward]
include : VBar.r xBar 0 XH
if doBottomSerif : include : rBottomSerif 0

View file

@ -228,6 +228,7 @@ glyph-block Letter-Latin-Lower-Y : begin
yTopKnots (Width - yrstroker) top bottom ds (-1)
yJoinKnots ds ds2 top bottom true
SmallYStrokeSplitMask top bottom true (-1)
Rect (bottom + HalfStroke) (bottom - top) 0 Width
if doSlabTop : include : let [sf : SerifFrame top bottom SB RightSB] sf.lt.full
if doSlabBottom : include : yBaseSerif top bottom
@ -356,6 +357,7 @@ glyph-block Letter-Latin-Lower-Y : begin
include : hookShape (XH - Hook - HalfStroke) Descender
include : VerticalHook.r RightSB (XH - Hook - HalfStroke) HookX (-Hook)
include : Cursive.Serifs XH slabKind
eject-contour 'serifRT'
create-glyph "yCap.\(suffix)" : glyph-proc
include : MarkSet.capital

View file

@ -32,7 +32,7 @@ glyph-block Letter-Latin-S : begin
local stroke : fallback _stroke Stroke
local strokeFactor : stroke * [clamp 1 2 : linreg 126 1 137 1.025 stroke] * [clamp 0 1 : Math.pow (Width / HalfUPM) 0.5]
local widthFactor : RightSB - SB
local ss : y * 0.22 + 0.075 * strokeFactor + 0.05 * widthFactor
local ss : y * 0.22 + 0.12 * strokeFactor + 0.05 * widthFactor
return : ss + sign * TanSlope * SmoothAdjust
define [SStrokeDollarInterruptGap deltaX top bot gap stroke refSwEss] : begin

View file

@ -62,6 +62,7 @@ glyph-block Letter-Latin-Upper-N : begin
include : MarkSet.capDesc
include : NShape bodyType slabType CAP SB RightSB (crDiag -- crD)
include : VerticalHook.r RightSB 0 (-HookX) Hook
include : VBar.r RightSB 0 CAP
create-glyph "Nltail.\(suffix)" : glyph-proc
include [refer-glyph "N.\(suffix)"] AS_BASE ALSO_METRICS

View file

@ -106,7 +106,7 @@ glyph-block Letter-Latin-Upper-P : begin
HSerif.rb (SB * mul + 0.5 * sw * HVContrast) 0 MidJutSide sw
set PShape.OpenGap : function [] : params [top [mul PShape.defaultMul] [bp PShape.BarPos] [sw Stroke]] : VBar.l
SB * mul + sw * HVContrast
[PBarPosY top sw bp] - sw
Math.min ([PBarPosY top sw bp] - sw) sw
Math.max ([PBarPosY top sw bp] + sw) [mix top [PBarPosY top sw bp] 0.5]
0.2 * (RightSB - SB) * ([AdviceStroke 5] / Stroke)

View file

@ -16,8 +16,8 @@ glyph-block Letter-Latin-Upper-R : begin
define LEG-SHAPE-STRAIGHT 1
define LEG-SHAPE-STANDING 2
define [RLegTerminalX legShape right sw] : right - [if legShape (OX * 2) 0] - sw / 2 * HVContrast
define [RSlabExtraShift slab sw] : if slab (-Jut / 2 + 0.25 * sw * HVContrast) 0
define [RLegTerminalX legShape right sw] : right - [if legShape (OX * 2) 0]
define [RSlabExtraShift slab sw] : if slab (-Jut / 2 + 0.5 * sw * HVContrast) 0
define [RLegDiagCor top bottom left right extraShift sw] : DiagCor (top - bottom) (right - left - extraShift) 0 sw
define [RStandingLegFine sw] : sw * CThinB
@ -25,14 +25,18 @@ glyph-block Letter-Latin-Upper-R : begin
define [RStandingBottomOverflow slab] : if slab 0 (2 * OX)
define [RLegShape-Straight] : params [top bottom left right charTop slab sw extraShift] : glyph-proc
local xRightBottom : RLegTerminalX LEG-SHAPE-STRAIGHT right sw
local shift : RSlabExtraShift slab sw
include : dispiro
widths.center (sw * [RLegDiagCor top bottom left right extraShift sw])
corner (left + extraShift + shift / 2) top [heading Downward]
corner (xRightBottom + shift) bottom [heading Downward]
local xLeftTop : Math.max (PShape.BarPos + sw * HVContrast) (left - 0.5 * sw * HVContrast + shift)
local xRightBottom : [RLegTerminalX LEG-SHAPE-STRAIGHT right sw] + shift
local xRightBottomSerifStart : xRightBottom - 0.25 * sw * HVContrast
include : intersection
Rect top bottom (-Width) [if slab xRightBottomSerifStart (2 * Width)]
dispiro
corner xLeftTop top [widths.lhs sw]
corner xRightBottom bottom [widths.rhs sw]
if slab : begin
include : HSerif.rb (xRightBottom + shift + 0.25 * sw * HVContrast) bottom (SideJut + Jut / 8)
include : HSerif.rb xRightBottomSerifStart bottom (SideJut + Jut / 8)
define [RLegShape-Curly] : params [top bottom left right charTop slab sw extraShift] : glyph-proc
local xRightBottom : RLegTerminalX LEG-SHAPE-CURLY right sw
@ -40,7 +44,7 @@ glyph-block Letter-Latin-Upper-R : begin
Rect top bottom (-Width) (2 * Width)
dispiro
widths.center sw
g4.up.start xRightBottom bottom [heading Upward]
g4.up.start (xRightBottom - 0.5 * sw * HVContrast) bottom [heading Upward]
quadControls 0 0.4 8
g4 left top
if slab : begin
@ -65,17 +69,21 @@ glyph-block Letter-Latin-Upper-R : begin
define RLegShapes { RLegShape-Curly RLegShape-Straight RLegShape-Standing }
define [RevRLegTerminalX legShape left sw] : left + [if legShape (OX * 2) 0] + sw / 2 * HVContrast
define [RevRLegTerminalX legShape left sw] : left + [if legShape (OX * 2) 0]
define [RevRLegShape-Straight] : params [top bottom left right charTop slab sw extraShift] : glyph-proc
local xLeftBottom : RevRLegTerminalX LEG-SHAPE-STRAIGHT left sw
local shift : RSlabExtraShift slab sw
include : dispiro
widths.center (sw * [RLegDiagCor top bottom left right extraShift sw])
corner (right - extraShift - shift / 2) top [heading Downward]
corner (xLeftBottom - shift) bottom [heading Downward]
local xLeftBottom : [RevRLegTerminalX LEG-SHAPE-STRAIGHT left sw] - shift
local xLeftBottomSerifStart : xLeftBottom + 0.25 * sw * HVContrast
local xRightTop : Math.min (RightSB - PShape.BarPos - sw * HVContrast) (right + 0.5 * sw * HVContrast - shift)
include : intersection
Rect top bottom [if slab xLeftBottomSerifStart (-Width)] (2 * Width)
dispiro
corner xRightTop top [widths.rhs sw]
corner xLeftBottom bottom [widths.lhs sw]
if slab : begin
include : HSerif.lb (xLeftBottom - shift - 0.25 * sw * HVContrast) bottom (SideJut + Jut / 8)
include : HSerif.lb xLeftBottomSerifStart bottom (SideJut + Jut / 8)
define [RevRLegShape-Curly] : params [top bottom left right charTop slab sw extraShift] : glyph-proc
local xLeftBottom : RevRLegTerminalX LEG-SHAPE-CURLY left sw
@ -83,7 +91,7 @@ glyph-block Letter-Latin-Upper-R : begin
Rect top 0 (-Width) (2 * Width)
dispiro
widths.center sw
g4.up.start xLeftBottom bottom [heading Upward]
g4.up.start (xLeftBottom + 0.5 * sw * HVContrast) bottom [heading Upward]
quadControls 0 0.4 8
g4 right top
if slab : begin

View file

@ -391,7 +391,7 @@ glyph-block Letter-Shared-Shapes : begin
sx - (barSw - fine) * HVContrast
cy - hook + O * 2
widths.lhs.heading fine Upward
arcvh
arcvh.superness 2
ShoulderMidKnotLhs cx (cy - O) fine sw (-1) (-1)
archv
@ -404,7 +404,7 @@ glyph-block Letter-Shared-Shapes : begin
sx + (barSw - fine) * HVContrast
cy - hook + O * 2
widths.rhs.heading fine Upward
arcvh
arcvh.superness 2
ShoulderMidKnotRhs cx (cy - O) fine sw (+1) (-1)
archv
@ -415,7 +415,7 @@ glyph-block Letter-Shared-Shapes : begin
return : list
arcvh
ShoulderMidKnotRhs cx (cy + O) fine sw (-1) (+1)
archv
archv.superness 2
g4.up.end
sx + (barSw - fine) * HVContrast
cy + hook - O * 2
@ -428,7 +428,7 @@ glyph-block Letter-Shared-Shapes : begin
return : list
arcvh
ShoulderMidKnotLhs cx (cy + O) fine sw (+1) (+1)
archv
archv.superness 2
g4.up.end
sx - (barSw - fine) * HVContrast
cy + hook - O * 2
@ -498,9 +498,11 @@ glyph-block Letter-Shared-Shapes : begin
return : VBar.r cx (cy + hook + DToothlessRise / 2) (cy + DToothlessRise) [ArcStartSerifWidth stroke]
glyph-block-export ArcStartHookTop
define [ArcStartHookTop cx cy sw hookX hookY] : union
VBar.r cx (cy - hookY + O * 2) cy sw
VerticalHook.r cx cy hookX (-hookY) sw
define [ArcStartHookTop cx cy stroke hookX hookY] : begin
local sw : ArcStartSerifWidth stroke
return : union
VBar.r cx (cy - hookY + O * 2) cy sw
VerticalHook.r cx cy hookX (-hookY) sw
define DiagTailDefaultAngle 40

View file

@ -191,7 +191,7 @@ glyph-block Symbol-Punctuation-Ampersand : begin
define FORM-TOOTHED 3
define [EtUpperHalf] : dispiro
g4 (xEtRight + O) (CAP - SHook) [widths.lhs]
g4 xEtRight (CAP - SHook) [widths.lhs]
hookstart (CAP - O)
g4 xEtLeft (CAP - adaEt)
arcvh

View file

@ -145,13 +145,17 @@ export : define [calculateMetrics para] : begin
define SmoothAdjust : StrokeWidthBlend 80 144
define [ArchDepthAOf archDepth width] : archDepth - TanSlope * SmoothAdjust / Width * width
define [ArchDepthBOf archDepth width] : archDepth + TanSlope * SmoothAdjust / Width * width
define [YSmoothMidR top bot ada adb] : begin
define [YSmoothMidR top bot _ada _adb] : begin
local ada : fallback _ada ArchDepthA
local adb : fallback _adb ArchDepthB
local delta : (adb - ada) / 2
local smOfSma : ada + delta
local smOfSmb : adb - delta
local yNotAdjusted : mix top bot (smOfSmb / (smOfSma + smOfSmb))
return : yNotAdjusted - delta
define [YSmoothMidL top bot ada adb] : begin
define [YSmoothMidL top bot _ada _adb] : begin
local ada : fallback _ada ArchDepthA
local adb : fallback _adb ArchDepthB
local delta : (adb - ada) / 2
local smOfSma : ada + delta
local smOfSmb : adb - delta