diff --git a/changes/31.9.0.md b/changes/31.9.0.md index e5d5ff40e..50b0c8903 100644 --- a/changes/31.9.0.md +++ b/changes/31.9.0.md @@ -3,6 +3,8 @@ * Optimize glyphs for `rounded-serifless` and `rounded-serifed` variants for Capital Eszett (`ẞ`). * Optimize glyphs for closed epsilon shapes (`U+025E`, `U+029A`). * Optimize glyphs for cursive variants for Greek Lower Beta (`β`) and Cyrillic Lower Ve (`в`). +* Optimize glyphs for Cyrillic Capital/Lower Broad On (`U+047A`, `U+047B`). +* Optimize glyphs for Roman Numeral CD shapes (`U+2180`, `U+2182`, `U+2188`). * Optimize glyph for Cyrillic Lower Dzze (`U+A689`) under italics. * Optimize glyphs for Volapük Ae/Oe/Ue (`U+A79A`..`U+A79F`). * Optimize glyph for Latin Lower Dezh Digraph with Palatal Hook (`U+1DF12`). diff --git a/packages/font-glyphs/src/letter/latin/o.ptl b/packages/font-glyphs/src/letter/latin/o.ptl index aeee919f9..ec3785523 100644 --- a/packages/font-glyphs/src/letter/latin/o.ptl +++ b/packages/font-glyphs/src/letter/latin/o.ptl @@ -64,14 +64,20 @@ glyph-block Letter-Latin-O : begin create-glyph 'cyrl/BroadOn' 0x47A : glyph-proc define df : include : DivFrame [mix 1 para.diversityM 0.5] 3 include : df.markSet.capital - include : OShape CAP 0 df.leftSB df.rightSB df.mvs ArchDepthA ArchDepthB + local gap : Math.max (0.25 * (df.rightSB - df.leftSB)) : HSwToV (rBroadOn * Math.SQRT2) + local ada : ArchDepthA * df.div + local adb : ArchDepthB * df.div + include : OShapeFlatTB CAP 0 df.leftSB df.rightSB df.mvs ada adb gap include : DotAt df.middle (df.mvs / 2 + O) rBroadOn include : DotAt df.middle (CAP - df.mvs / 2 - O) rBroadOn create-glyph 'cyrl/broadOn' 0x47B : glyph-proc define df : include : DivFrame [mix 1 para.diversityM 0.5] 3 include : df.markSet.e - include : OShape XH 0 df.leftSB df.rightSB df.mvs nothing nothing + local gap : Math.max (0.25 * (df.rightSB - df.leftSB)) : HSwToV (rBroadOn * Math.SQRT2) + local ada : ArchDepthA * df.div + local adb : ArchDepthB * df.div + include : OShapeFlatTB XH 0 df.leftSB df.rightSB df.mvs ada adb gap include : DotAt df.middle (df.mvs / 2 + O) rBroadOn include : DotAt df.middle (XH - df.mvs / 2 - O) rBroadOn @@ -160,31 +166,44 @@ glyph-block Letter-Latin-O : begin create-glyph 'romanThousandCD' 0x2180 : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.capital - include : OShape CAP 0 df.leftSB df.rightSB df.mvs ArchDepthA ArchDepthB + local dist : df.rightSB - df.leftSB + local gap : Math.max (dist / 4) : HSwToV df.mvs + local ada : ArchDepthA * df.div + local adb : ArchDepthB * df.div + include : OShapeFlatTB CAP 0 df.leftSB df.rightSB df.mvs ada adb gap include : VBar.m df.middle (df.mvs / 2) (CAP - df.mvs / 2) df.mvs set-base-anchor 'trailing' Middle 0 create-glyph 'romanTenThousand' 0x2182 : glyph-proc local df : include : DivFrame para.diversityM 5 include : df.markSet.capital - - local innerDist : df.rightSB - df.leftSB - [HSwToV : 5 * df.mvs] + local dist : df.rightSB - df.leftSB + local gap : Math.max (dist / 4) : HSwToV df.mvs + local gapInner : Math.max (dist / 8) : HSwToV df.mvs + local ada : ArchDepthA * df.div + local adb : ArchDepthB * df.div + local innerDist : dist - [HSwToV : 5 * df.mvs] local arcXL1 : df.leftSB + innerDist * (1 / 4) + [HSwToV : 1 * df.mvs] local arcXR1 : df.leftSB + innerDist * (3 / 4) + [HSwToV : 4 * df.mvs] local heightGap : Math.min (df.mvs + (CAP - df.mvs * 4) / 5) (innerDist / 4 + df.mvs) - local heightInner1 : CAP - 2 * heightGap - local smInner1 : clamp (df.mvs * 1.5) (0.499 * heightInner1) (ArchDepth * heightInner1 / CAP) - local adaInner1 : ArchDepthAOf smInner1 (arcXR1 - arcXL1 + df.leftSB * 2) - local adbInner1 : ArchDepthBOf smInner1 (arcXR1 - arcXL1 + df.leftSB * 2) - include : OShape CAP 0 df.leftSB df.rightSB df.mvs ArchDepthA ArchDepthB - include : OShape (CAP - heightGap) (0 + heightGap) arcXL1 arcXR1 df.mvs adaInner1 adbInner1 + local heightInner : CAP - 2 * heightGap + local smInner : clamp (df.mvs * 1.5) (0.499 * heightInner) (ArchDepth * heightInner / CAP) + local adaInner : [ArchDepthAOf smInner : arcXR1 - arcXL1 + df.leftSB * 2] * df.div + local adbInner : [ArchDepthBOf smInner : arcXR1 - arcXL1 + df.leftSB * 2] * df.div + include : OShapeFlatTB CAP 0 df.leftSB df.rightSB df.mvs ada adb gap + include : OShapeFlatTB (CAP - heightGap) (0 + heightGap) arcXL1 arcXR1 df.mvs adaInner adbInner gapInner include : VBar.m df.middle (df.mvs / 2) (CAP - df.mvs / 2) df.mvs create-glyph 'romanHundredThousand' 0x2188 : glyph-proc local df : include : DivFrame para.diversityM 7 include : df.markSet.capital - - local innerDist : df.rightSB - df.leftSB - [HSwToV : 7 * df.mvs] + local dist : df.rightSB - df.leftSB + local gap : Math.max (dist / 4) : HSwToV df.mvs + local gapInner1 : Math.max (dist / 6) : HSwToV df.mvs + local gapInner2 : Math.max (dist / 12) : HSwToV df.mvs + local ada : ArchDepthA * df.div + local adb : ArchDepthB * df.div + local innerDist : dist - [HSwToV : 7 * df.mvs] local arcXL1 : df.leftSB + innerDist * (1 / 6) + [HSwToV : 1 * df.mvs] local arcXR1 : df.leftSB + innerDist * (5 / 6) + [HSwToV : 6 * df.mvs] local arcXL2 : df.leftSB + innerDist * (2 / 6) + [HSwToV : 2 * df.mvs] @@ -193,14 +212,14 @@ glyph-block Letter-Latin-O : begin local heightInner1 : CAP - 2 * heightGap local heightInner2 : CAP - 4 * heightGap local smInner1 : clamp (df.mvs * 1.5) (0.499 * heightInner1) (ArchDepth * heightInner1 / CAP) - local adaInner1 : ArchDepthAOf smInner1 (arcXR1 - arcXL1 + df.leftSB * 2) - local adbInner1 : ArchDepthBOf smInner1 (arcXR1 - arcXL1 + df.leftSB * 2) + local adaInner1 : [ArchDepthAOf smInner1 : arcXR1 - arcXL1 + df.leftSB * 2] * df.div + local adbInner1 : [ArchDepthBOf smInner1 : arcXR1 - arcXL1 + df.leftSB * 2] * df.div local smInner2 : clamp (df.mvs * 1.5) (0.499 * heightInner2) (ArchDepth * heightInner2 / CAP) - local adaInner2 : ArchDepthAOf smInner2 (arcXR2 - arcXL2 + df.leftSB * 2) - local adbInner2 : ArchDepthBOf smInner2 (arcXR2 - arcXL2 + df.leftSB * 2) - include : OShape CAP 0 df.leftSB df.rightSB df.mvs ArchDepthA ArchDepthB - include : OShape (CAP - heightGap) (0 + heightGap) arcXL1 arcXR1 df.mvs adaInner1 adbInner1 - include : OShape (CAP - 2 * heightGap) (0 + 2 * heightGap) arcXL2 arcXR2 df.mvs adaInner2 adbInner2 + local adaInner2 : [ArchDepthAOf smInner2 : arcXR2 - arcXL2 + df.leftSB * 2] * df.div + local adbInner2 : [ArchDepthBOf smInner2 : arcXR2 - arcXL2 + df.leftSB * 2] * df.div + include : OShapeFlatTB CAP 0 df.leftSB df.rightSB df.mvs ada adb gap + include : OShapeFlatTB (CAP - heightGap) (0 + heightGap) arcXL1 arcXR1 df.mvs adaInner1 adbInner1 gapInner1 + include : OShapeFlatTB (CAP - 2 * heightGap) (0 + 2 * heightGap) arcXL2 arcXR2 df.mvs adaInner2 adbInner2 gapInner2 include : VBar.m df.middle (df.mvs / 2) (CAP - df.mvs / 2) df.mvs create-glyph 'oupperhalf' 0x1D16 : glyph-proc @@ -246,7 +265,7 @@ glyph-block Letter-Latin-O : begin CreateAccentedComposition 'oDieresis' 0xF6 'o' 'dieresisAbove' create-glyph 'numeroRightHalf' : glyph-proc - include : OShape XH [Math.max (Stroke * 1.5) (CAP * 0.1)] SB RightSB Stroke ArchDepthA ArchDepthB + include : OShape XH [Math.max (CAP * 0.1) (Stroke * 1.5)] SB RightSB Stroke ArchDepthA ArchDepthB include : HBar.b SB RightSB 0 CreateAccentedComposition 'oSbRsbUnderlineBelow' null 'o' 'sbRsbUnderlineBelow'