Optimize glyphs for Iotified A, Closed Little Yus.

This commit is contained in:
John McWilliams 2025-04-21 06:50:24 -04:00
parent 8547436f4b
commit c3ca79eca8
5 changed files with 78 additions and 79 deletions

View file

@ -4,6 +4,9 @@
- CYRILLIC CAPITAL LETTER KOMI DZJE (`U+0506`).
- CYRILLIC SMALL LETTER KOMI DZJE (`U+0507`).
- THERE DOES NOT EXIST (`U+2204`).
- CYRILLIC CAPITAL LETTER IOTIFIED A (`U+A656`).
- CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS (`U+A65C`).
- CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS (`U+A65D`).
- LATIN CAPITAL LETTER VOLAPUK UE (`U+A79E`).
- LATIN SMALL LETTER VOLAPUK UE (`U+A79F`).
- MODIFIER LETTER SMALL CAPITAL G WITH HOOK (`U+10794`).

View file

@ -100,17 +100,12 @@ glyph-block Letter-Cyrillic-BigYus : begin
define divSub : (df.width - gap - df.mvs) / Width
define dfSub : DivFrame divSub 3
include : CyrBigYusShape dfSub top yp df.mvs
eject-contour 'serifRB'
include : Translate (Width * (df.adws - divSub)) 0
include : Iotified.outer df top
hBarRight -- [mix df.leftSB df.rightSB (2 / 3)]
hBarY -- (top * yp - df.mvs * 0.5)
fCapital -- fCapital
if SLAB : begin
local sf : SerifFrame.fromDf df top 0 (swSerif -- df.mvs)
include sf.rb.outer
hBarY -- (top * yp - df.mvs * 0.5)
fCapital -- fCapital
create-glyph 'cyrl/BigYusIotified' 0x46C : glyph-proc
local df : include : DivFrame (para.advanceScaleM ** 2) 4.25

View file

@ -55,75 +55,75 @@ glyph-block Letter-Cyrillic-Iotified-A : begin
export : define [full] : with-params [df top hBarRight hBarY [fCapital false] [swSerif df.mvs]] : begin
local useItalicShape : [not fCapital] && para.isItalic
Shape
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- [if useItalicShape SLAB-OUTWARD SLAB-FULL]
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- [if useItalicShape SLAB-OUTWARD SLAB-FULL]
slabBottom -- [if useItalicShape SLAB-NONE SLAB-FULL]
swSerif -- swSerif
swSerif -- swSerif
# Outwards only
export : define [outer] : with-params [df top hBarRight hBarY [fCapital false] [swSerif df.mvs]] : begin
local useItalicShape : [not fCapital] && para.isItalic
Shape
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- SLAB-OUTWARD
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- SLAB-OUTWARD
slabBottom -- [if useItalicShape SLAB-NONE SLAB-OUTWARD]
swSerif -- swSerif
swSerif -- swSerif
# Iotified A-shaped glyphs
export : define [A] : with-params [df top hBarRight hBarY [fCapital false] [swSerif df.mvs]] : begin
local useItalicShape : [not fCapital] && para.isItalic
Shape
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- [if useItalicShape SLAB-OUTWARD SLAB-FULL]
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- [if useItalicShape SLAB-OUTWARD SLAB-FULL]
slabBottom -- [if useItalicShape SLAB-NONE SLAB-OUTWARD]
swSerif -- swSerif
swSerif -- swSerif
# Used for Bulgarian Lower Yu
export : define [ascender] : with-params [df top hBarRight hBarY [fCapital false] [swSerif df.mvs]] : begin
local useItalicShape : [not fCapital] && para.isItalic
Shape
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- SLAB-OUTWARD
df -- df
top -- top
hBarRight -- hBarRight
hBarY -- hBarY
slabTop -- SLAB-OUTWARD
slabBottom -- [if useItalicShape SLAB-NONE SLAB-FULL]
swSerif -- swSerif
swSerif -- swSerif
do "iotified A"
glyph-block-import Letter-Latin-Upper-A : AShape AConfig
foreach { suffix { fStraightBar slabKind } } [Object.entries AConfig] : do
foreach { suffix { bodyShape slabKind } } [Object.entries AConfig] : do
create-glyph "cyrl/AIotified.\(suffix)" : glyph-proc
define df : include : DivFrame para.advanceScaleM 3.5
include : df.markSet.capital
local gap : (df.width - 2 * df.leftSB - 3 * df.mvs) / 3
local divSub : (df.width - gap - df.mvs) / Width
local subDf : DivFrame divSub 2 (df.leftSB / SB) df.mvs 0
local subDf : DivFrame divSub 2
local shift : Width * (df.adws - divSub)
local xIotifiedBarRight : df.leftSB + [HSwToV df.mvs]
local botGap : Math.max ((df.rightSB - df.leftSB) * 0.08) [AdviceStroke 6]
local botGap : Math.max ((df.rightSB - df.leftSB) * 0.08) : AdviceStroke 6
include : difference
with-transform [ApparentTranslate shift 0]
AShape.Letter subDf fStraightBar slabKind CAP df.mvs
AShape.Letter subDf bodyShape slabKind CAP df.mvs
intersection [MaskBelow df.mvs]
MaskLeft : mix xIotifiedBarRight [Math.min (subDf.leftSB + shift) (xIotifiedBarRight + botGap)] 0.5
include : difference
Iotified.A df CAP [mix df.leftSB df.rightSB (3 / 4)] (CAP / 2) (fCapital -- true)
with-transform [ApparentTranslate shift 0]
AShape.Mask subDf fStraightBar CAP df.mvs
AShape.Mask subDf bodyShape CAP df.mvs
do "iotified a"
glyph-block-import Letter-Latin-Lower-A : DoubleStorey DoubleStoreyConfig SingleStorey SingleStoreyConfig
@ -183,8 +183,8 @@ glyph-block Letter-Cyrillic-Iotified-A : begin
include : with-transform [ApparentTranslate shift 0]
body subDf XH
stroke -- df.mvs
ada -- (SmallArchDepthA * 0.7 * df.adws)
adb -- (SmallArchDepthB * 0.7 * df.adws)
ada -- (SmallArchDepthA * 0.7 * df.adws)
adb -- (SmallArchDepthB * 0.7 * df.adws)
include : Iotified.full df XH (shift + subDf.leftSB + [HSwToV : 0.5 * df.mvs]) (XH / 2)

View file

@ -15,11 +15,11 @@ glyph-block Letter-Cyrillic-SmallYus : begin
define [CyrSmallYusShape df top straightBar _fine] : glyph-proc
local fine : fallback _fine : AdviceStroke 3.3 df.adws
include : LambdaShape
df -- df
df -- df
fBarStraight -- straightBar
slabKind -- 0
top -- top
sw -- fine
slabKind -- 0
top -- top
sw -- fine
include : intersection
HBar.t df.leftSB df.rightSB (top / 2) fine
AShape.Mask df [if straightBar 1 0] top fine
@ -35,11 +35,11 @@ glyph-block Letter-Cyrillic-SmallYus : begin
define [CyrClosedSmallYusShape df top straightBar _fine] : glyph-proc
local fine : fallback _fine : AdviceStroke 2.75 df.adws
include : DeltaShape
df -- df
top -- top
sw -- fine
df -- df
top -- top
sw -- fine
fBarStraight -- straightBar
slab -- false
slab -- false
include : intersection
HBar.t df.leftSB df.rightSB (top / 2) fine
AShape.Mask df [if straightBar 1 0] top fine
@ -79,23 +79,24 @@ glyph-block Letter-Cyrillic-SmallYus : begin
select-variant 'cyrl/smallYusClosed' 0xA659 (follow -- 'grek/Delta')
define [CyrIotifiedSmallYusShape fClosed fCapital df top straightBar] : glyph-proc
local gap : (df.width - 2 * df.leftSB - 4 * df.mvs) / 3
local gap : (df.width - 2 * df.leftSB - [if fClosed 3 4] * df.mvs) / 3
define divSub : (df.width - gap - df.mvs) / Width
define dfSub : DivFrame divSub 3
if fClosed
include : CyrClosedSmallYusShape dfSub top straightBar df.mvs
include : CyrSmallYusShape dfSub top straightBar df.mvs
eject-contour 'serifRB'
include : Translate (Width * (df.adws - divSub)) 0
define dfSub : DivFrame divSub : if fClosed 2 3
local shift : Width * (df.adws - divSub)
local xIotifiedBarRight : df.leftSB + [HSwToV df.mvs]
local botGap : Math.max ((df.rightSB - df.leftSB) * 0.08) : AdviceStroke 6
include : difference
with-transform [ApparentTranslate shift 0] : if fClosed
CyrClosedSmallYusShape dfSub top straightBar df.mvs
CyrSmallYusShape dfSub top straightBar df.mvs
intersection [MaskBelow df.mvs]
MaskLeft : mix xIotifiedBarRight [Math.min (dfSub.leftSB + shift) (xIotifiedBarRight + botGap)] 0.5
include : Iotified.A df top
hBarRight -- [mix df.leftSB df.rightSB (2 / 3)]
hBarY -- (top / 2 - df.mvs * 0.5)
fCapital -- fCapital
if SLAB : begin
local sf : SerifFrame.fromDf df top 0 (swSerif -- df.mvs)
include sf.rb.outer
hBarY -- (top / 2 - df.mvs * 0.5)
fCapital -- fCapital
create-glyph : glyph-proc
local df : include : DivFrame (para.advanceScaleM ** 2) 4.25
@ -114,7 +115,7 @@ glyph-block Letter-Cyrillic-SmallYus : begin
CyrIotifiedSmallYusShape false false df XH false
create-glyph : glyph-proc
local df : include : DivFrame para.advanceScaleM 4.25
local df : include : DivFrame para.advanceScaleM 3.5
include : df.markSet.capital
create-forked-glyph 'cyrl/SmallYusClosedIotified.straight'
CyrIotifiedSmallYusShape true true df CAP true
@ -122,7 +123,7 @@ glyph-block Letter-Cyrillic-SmallYus : begin
CyrIotifiedSmallYusShape true true df CAP false
create-glyph : glyph-proc
local df : include : DivFrame para.advanceScaleM 4.25
local df : include : DivFrame para.advanceScaleM 3.5
include : df.markSet.e
create-forked-glyph 'cyrl/smallYusClosedIotified.straight'
CyrIotifiedSmallYusShape true false df XH true

View file

@ -141,11 +141,11 @@ glyph-block Letter-Latin-Upper-Lambda-Delta : begin
glyph-block-export DeltaShape
define [DeltaShape] : with-params [df top sw fBarStraight] : union
LambdaShape
df -- df
df -- df
fBarStraight -- fBarStraight
slabKind -- 0
top -- top
sw -- sw
slabKind -- 0
top -- top
sw -- sw
intersection
HBar.b 0 df.width 0 sw
LambdaMask df fBarStraight top sw
@ -158,37 +158,37 @@ glyph-block Letter-Latin-Upper-Lambda-Delta : begin
create-glyph "grek/Delta.\(suffix)" : glyph-proc
include : MarkSet.capital
include : DeltaShape
df -- [DivFrame 1]
df -- [DivFrame 1]
fBarStraight -- fBarStraight
top -- CAP
sw -- Stroke
top -- CAP
sw -- Stroke
create-glyph "increment.\(suffix)" : glyph-proc
include : MarkSet.capital
include : DeltaShape
df -- [DivFrame 1]
df -- [DivFrame 1]
fBarStraight -- fBarStraight
top -- CAP
sw -- OperatorStroke
top -- CAP
sw -- OperatorStroke
create-glyph "increment.aplForm.\(suffix)" : glyph-proc
include : MarkSet.oper
define shapeHeight : OperTop - OperBot
include : DeltaShape
df -- [DivFrame 1]
df -- [DivFrame 1]
fBarStraight -- fBarStraight
top -- shapeHeight
sw -- OperatorStroke
top -- shapeHeight
sw -- OperatorStroke
include : ApparentTranslate 0 (SymbolMid - shapeHeight / 2)
create-glyph "increment.aplThin.\(suffix)" : glyph-proc
include : MarkSet.oper
define shapeHeight : OperTop - OperBot
include : DeltaShape
df -- [DivFrame 1]
df -- [DivFrame 1]
fBarStraight -- fBarStraight
top -- shapeHeight
sw -- [AdviceStroke 3.75]
top -- shapeHeight
sw -- [AdviceStroke 3.75]
include : ApparentTranslate 0 (SymbolMid - shapeHeight / 2)
define [CodeNonApl u] : if (para.variantSelector.__enableAplForm === 'enable') null u
@ -209,6 +209,6 @@ glyph-block Letter-Latin-Upper-Lambda-Delta : begin
local xCutLeft SB
local xCutRight RightSB
include : HBar.b (xCutLeft - descenderOverflow) (xCutRight + descenderOverflow) 0
include : VBar.l (xCutLeft - descenderOverflow) (-LongVJut + HalfStroke) Stroke
include : VBar.r (xCutRight + descenderOverflow) (-LongVJut + HalfStroke) Stroke
include : VBar.l (xCutLeft - descenderOverflow) ((-LongVJut) + QuarterStroke) Stroke
include : VBar.r (xCutRight + descenderOverflow) ((-LongVJut) + QuarterStroke) Stroke