Fix shape of LATIN SMALL LETTER E WITH OGONEK (U+0119) (#1427).

This commit is contained in:
be5invis 2022-10-05 03:01:11 -07:00
parent a4d0240b8f
commit 92bfbaa2d3
16 changed files with 187 additions and 98 deletions

1
changes/16.3.1.md Normal file
View file

@ -0,0 +1 @@
* Fix shape of LATIN SMALL LETTER E WITH OGONEK (`U+0119`) (#1427).

View file

@ -9,7 +9,7 @@ glyph-block Letter-Latin-Lower-A : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke
glyph-block-import Letter-Shared : CreateAccentedComposition
glyph-block-import Letter-Shared : CreateAccentedComposition CreateOgonekComposition
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend
define ADoubleStoreyStroke : AdviceStroke2 2 3 XH
@ -70,14 +70,14 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreySerifless' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' RightSB 0
include : union
ADoubleStoreyHookAndBar 0
ADoubleStoreyArc 0
create-glyph 'a.doubleStoreySerifed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : union
ADoubleStoreyHookAndBar 0
ADoubleStoreyArc 0
@ -101,7 +101,7 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreyTailed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : union
ADoubleStoreyHookAndBar (XH - ADoubleStoreySmoothB + O)
ADoubleStoreyArc 0
@ -109,47 +109,47 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreyToothlessCorner' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
# set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
include : union
ADoubleStoreyHookAndBar DToothlessRise
ADoubleStoreyArc 1 DToothlessRise
create-glyph 'a.doubleStoreyToothlessRounded' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
# set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
include : union
ADoubleStoreyHookAndBar ADoubleStoreySmoothA
ADoubleStoreyArc 2 ADoubleStoreySmoothA
create-glyph 'a.singleStoreySerifless' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' RightSB 0
include : OBarRightShape
include : VBarRight RightSB 0 XH
create-glyph 'a.singleStoreySerifed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarRightShape
include : VBarRight RightSB 0 XH
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'a.singleStoreyTailed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarRightShape
include : RightwardTailedBar RightSB 0 XH
create-glyph 'a.singleStoreyEarlessCornerSerifless' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' RightSB 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2)
include : VBarRight RightSB 0 (XH - DToothlessRise)
create-glyph 'a.singleStoreyEarlessCornerSerifed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2)
include : VBarRight RightSB 0 (XH - DToothlessRise)
@ -157,27 +157,27 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.singleStoreyEarlessCornerTailed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2)
include : RightwardTailedBar RightSB 0 (XH - DToothlessRise)
create-glyph 'a.singleStoreyEarlessRoundedSerifless' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' RightSB 0
include : OBarLeftRoundedShape XH SB XH
include : FlipAround Middle (XH / 2)
create-glyph 'a.singleStoreyEarlessRoundedSerifed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftRoundedShape XH SB XH
include : FlipAround Middle (XH / 2)
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'a.singleStoreyEarlessRoundedTailed' : glyph-proc
include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftRoundedShape XH SB (SmallArchDepthB - O)
include : FlipAround Middle (XH / 2)
include : RightwardTailedBar RightSB 0 (XH - SmallArchDepthB)
@ -232,3 +232,6 @@ glyph-block Letter-Latin-Lower-A : begin
CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove'
CreateAccentedComposition 'aSbRsbUnderlineBelow' null 'a' 'sbRsbUnderlineBelow'
CreateAccentedComposition 'aRightHalfRingTR' 0x1E9A 'a' 'rightHalfCircleTR'
# Ognoek shapes
CreateOgonekComposition 'aOgonek' 0x105 'a'

View file

@ -10,12 +10,15 @@ glyph-block Letter-Latin-Lower-E : begin
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : FlatHookDepth
glyph-block-import Mark-Shared-Metrics : markExtend markStroke markStress markFine
glyph-block-import Mark-Above : aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
define [SmallEShape] : params [df top stroke barpos curly [bbd 0]] : glyph-proc
local barbottom : top * [fallback barpos DesignParameters.eBarPos] - (stroke / 2)
local hook : Math.min AHook : if para.isItalic top (stroke / 2 + (top - stroke * 3) / 4)
include : HBarBottom (df.leftSB + (stroke / 2) + OX + bbd) (df.rightSB - (stroke / 2) - OX) barbottom stroke
include : dispiro
local path : include : dispiro
widths.lhs stroke
flat (df.rightSB - OX) barbottom [heading Upward]
curl (df.rightSB - OX) (top - SmallArchDepthB)
@ -27,6 +30,8 @@ glyph-block Letter-Latin-Lower-E : begin
hookend O (sw -- stroke)
g4 (df.rightSB - OX * [if para.isItalic 0 0.5]) hook
return path.rhsKnots.[path.rhsKnots.length - 1]
define [RevSmallEShape] : params [df top stroke barpos] : glyph-proc
local barbottom (top * [fallback barpos DesignParameters.eBarPos] - HalfStroke)
local hookx df.leftSB
@ -53,7 +58,7 @@ glyph-block Letter-Latin-Lower-E : begin
local xStart : df.leftSB + (0.125 * stroke * HVContrast)
local pfIt : if para.isItalic 1 0
include : dispiro
local path : include : dispiro
widths.lhs stroke
[if para.isItalic g2 flat] xStart (barbottom - pfIt * [StrokeWidthBlend 2 3] * O)
if para.isItalic [alsoThru.g2 0.5 0.8] [list]
@ -68,6 +73,8 @@ glyph-block Letter-Latin-Lower-E : begin
hookend O (sw -- stroke)
g4 (df.rightSB - OX * [if para.isItalic 0 0.5]) hook
return path.rhsKnots.[path.rhsKnots.length - 1]
define [RevSmallERoundedShape] : params [df top stroke barpos] : glyph-proc
local barbottom : top * [fallback barpos : if para.isItalic 0.500 0.475] - (stroke / 2)
local hook : Math.min AHook : if para.isItalic top (stroke / 2 + (top - stroke * 3) / 4)
@ -119,6 +126,30 @@ glyph-block Letter-Latin-Lower-E : begin
include : MarkSet.e
include : Body [DivFrame 1] XH [AdviceStroke2 2 3 XH]
create-glyph "eOgonek.\(suffix)" : glyph-proc
include : MarkSet.e
local lastKnot : include : Body [DivFrame 1] XH [AdviceStroke2 2 3 XH]
# Connected Ogonek shape
local fine : AdviceStroke 8
local depth : 0 - Descender - markStroke
local extL : (7 / 16) * depth + 0.25 * markStress
local extR : Math.max (0.0625 * markExtend) (1.5 * TanSlope * markStroke)
local beginCoSlope : if para.isItalic 0.2 0
set-base-anchor 'trailing' (RightSB + extR) (-depth + 0.5 * O - markStroke)
include : intersection
MaskBelow lastKnot.y
dispiro
g4 lastKnot.x lastKnot.y [widths.rhs fine]
g4 (lastKnot.x - beginCoSlope * 0.01) (lastKnot.y - 0.01)
alsoThru.withOffset 0.5 0.525 0 (-0.25 * [mix fine markStroke 0.5]) [widths.rhs [mix fine markStroke 0.5]]
g4.down.mid (RightSB - extL) (-0.75 * depth) [widths.rhs.heading markStroke {.x (HVContrast) .y (0.5 * (markStroke - fine) / markStroke)}]
arcvh [widths.rhs markStroke]
g4 (RightSB + [mix (-extL) extR (11/16)]) (-depth + O) [heading Rightward]
g4 (RightSB + extR) (-depth + 0.5 * O) [heading Rightward]
create-glyph "Schwa.\(suffix)" : glyph-proc
include : MarkSet.capital
include : Body [DivFrame 1] CAP [AdviceStroke2 2 3 CAP]
@ -160,6 +191,8 @@ glyph-block Letter-Latin-Lower-E : begin
alias 'cyrl/ie' 0x435 'e'
turned 'turne' 0x1DD 'e' Middle (XH / 2)
select-variant 'eOgonek' 0x119 (follow -- 'e')
select-variant 'Schwa' 0x18F
alias 'cyrl/Schwa' 0x4D8 'Schwa'

View file

@ -8,7 +8,7 @@ glyph-module
glyph-block Letter-Latin-Lower-I : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : CreateAccentedComposition CreateMultiAccentedComposition
glyph-block-import Letter-Shared : CreateAccentedComposition CreateMultiAccentedComposition CreateOgonekComposition
glyph-block-import Letter-Shared-Shapes : FlatHookDepth DiagonalTailR DiagonalTailStdDepth
glyph-block-import Letter-Shared : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail
@ -55,7 +55,6 @@ glyph-block Letter-Latin-Lower-I : begin
export : define [Serifless df top xMiddle] : glyph-proc
include : OverrideILMarks df xMiddle top
include : VBar xMiddle 0 top
set-base-anchor 'trailing' xMiddle 0
export : define [HookyBottom df top xMiddle] : glyph-proc
include : OverrideILMarks df xMiddle top
@ -271,6 +270,8 @@ glyph-block Letter-Latin-Lower-I : begin
CreateAccentedComposition 'dotlessiBarOver' null 'dotlessi' 'barOver'
CreateAccentedComposition 'iBarOver' 0x268 'dotlessiBarOver' 'dotAbove'
CreateOgonekComposition 'iOgonek' 0x12F 'i'
do "l glyphs"
select-variant 'l' 'l'
link-reduced-variant 'l/sansSerif' 'l' MathSansSerif

View file

@ -16,17 +16,14 @@ glyph-block Letter-Latin-O : begin
create-glyph 'O' 'O' : glyph-proc
include : MarkSet.capital
include : OShape CAP 0 SB RightSB nothing ArchDepthA ArchDepthB
set-base-anchor 'trailing' Middle 0
create-glyph 'smcpO' 0x1D0F : glyph-proc
include : MarkSet.e
include : OShape XH 0 SB RightSB nothing ArchDepthA ArchDepthB
set-base-anchor 'trailing' Middle 0
create-glyph 'o' 'o' : glyph-proc
include : MarkSet.e
include : OShape XH 0 SB RightSB nothing nothing nothing
set-base-anchor 'trailing' Middle 0
create-glyph 'oSideways' 0x1D11 : glyph-proc
include : MarkSet.e
@ -40,7 +37,6 @@ glyph-block Letter-Latin-O : begin
include : OShape CAP 0 SB RightSB df.mvs ArchDepthA ArchDepthB
include : DotAt Middle (df.mvs / 2 + O) rBroadOn
include : DotAt Middle (CAP - df.mvs / 2 - O) rBroadOn
set-base-anchor 'trailing' Middle 0
create-glyph 'cyrl/broadOn' 0x47B : glyph-proc
define df : DivFrame 1 3
@ -48,7 +44,6 @@ glyph-block Letter-Latin-O : begin
include : OShape XH 0 SB RightSB df.mvs nothing nothing
include : DotAt Middle (df.mvs / 2 + O) rBroadOn
include : DotAt Middle (XH - df.mvs / 2 - O) rBroadOn
set-base-anchor 'trailing' Middle 0
create-glyph 'grek/Omicron' 0x39F : glyph-proc
include [refer-glyph 'O'] AS_BASE ALSO_METRICS

View file

@ -9,7 +9,7 @@ glyph-block Letter-Latin-U : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke
glyph-block-import Letter-Shared : CreateAccentedComposition SetGrekUpperTonos
glyph-block-import Letter-Shared : CreateAccentedComposition SetGrekUpperTonos CreateOgonekComposition
glyph-block-import Letter-Shared-Shapes : nShoulder RightwardTailedBar DToothlessRise SerifFrame
glyph-block-import Letter-Shared-Shapes : CyrTailDescender
@ -36,7 +36,7 @@ glyph-block Letter-Latin-U : begin
offset -- offset
define [UToothed df top] : glyph-proc
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0
set-base-anchor 'trailing' df.rightSB 0
include : nShoulder
top -- top
left -- (df.leftSB + Stroke * HVContrast)
@ -46,7 +46,7 @@ glyph-block Letter-Latin-U : begin
include : VBarRight df.rightSB 0 top
define [UTailed df top] : glyph-proc
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0
set-base-anchor 'trailing' (df.rightSB + SideJut) 0
include : nShoulder
top -- top
left -- (df.leftSB + Stroke * HVContrast)
@ -56,15 +56,12 @@ glyph-block Letter-Latin-U : begin
include : RightwardTailedBar df.rightSB 0 top
define [UToothlessRounded df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : UShape df top 0
define [UToothlessRoundedSmall df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : UShape df top 0 (ada -- SmallArchDepthA) (adb -- SmallArchDepthB)
define [UToothlessCorner df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : VBarLeft df.leftSB 0 (top - DToothlessRise)
include : dispiro
widths.rhs
@ -76,7 +73,6 @@ glyph-block Letter-Latin-U : begin
include : FlipAround df.middle (top / 2)
define [UToothlessCornerSmall df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : VBarLeft df.leftSB 0 (top - DToothlessRise)
include : dispiro
widths.rhs
@ -93,8 +89,11 @@ glyph-block Letter-Latin-U : begin
define [UTopRightSerif df yTop] : tagged 'serifRT'
LeftwardTopSerif (df.rightSB - Stroke * HVContrast) yTop SideJut
define [UBottomRightSerif df yTop] : tagged 'serifRB'
RightwardBottomSerif df.rightSB 0 SideJut
define [UBottomRightSerif df yTop] : glyph-proc
include : tagged 'serifRB' : RightwardBottomSerif df.rightSB 0 SideJut
define trAnchor currentGlyph.baseAnchors.trailing
if trAnchor : begin
set-base-anchor 'trailing' (trAnchor.x + SideJut) trAnchor.y
define [SmallUSlabs df top] : glyph-proc : if SLAB : begin
include : UTopLeftSerif df top
@ -299,3 +298,6 @@ glyph-block Letter-Latin-U : begin
include : Translate 0 (SB / 2)
CreateAccentedComposition 'uDieresisSideways' 0x1D1E 'uDieresisSidewaysBase' 'uDieresisSidewaysMark'
CreateOgonekComposition 'UOgonek' 0x172 'U'
CreateOgonekComposition 'uOgonek' 0x173 'u'

View file

@ -9,7 +9,7 @@ glyph-block Letter-Latin-Upper-A : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke
glyph-block-import Letter-Shared : SetGrekUpperTonos
glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition
glyph-block-import Letter-Shared-Shapes : SerifFrame
glyph-block-import Letter-Latin-V : VShapeOutline VShape
glyph-block-export LambdaShape AMaskShape DeltaShape
@ -48,7 +48,7 @@ glyph-block Letter-Latin-Upper-A : begin
define [AShapeImpl mak top fGrek] : glyph-proc
local df : DivFrame 1
include : df.markSet.(mak)
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0
set-base-anchor 'trailing' df.rightSB 0
if fGrek : include : SetGrekUpperTonos
[if (slabKind === SLAB-TOP || slabKind === SLAB-TRI) 0 0.2] * (df.rightSB - df.leftSB)
include : VShape df top Stroke fStraightBar
@ -123,3 +123,5 @@ glyph-block Letter-Latin-Upper-A : begin
BBVInnerMaskShape SB RightSB 1 1 CAP
HBarTop 0 Width (CAP - XH / 2) BBS
include : FlipAround Middle (CAP / 2)
CreateOgonekComposition 'AOgonek' 0x104 'A'

View file

@ -9,7 +9,7 @@ glyph-block Letter-Latin-Upper-E : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke
glyph-block-import Letter-Shared : SetGrekUpperTonos
glyph-block-import Letter-Shared : SetGrekUpperTonos CreateOgonekComposition
glyph-block-import Letter-Latin-Upper-F : xMidBarShrink yMidBar EFVJutLength
define kSB 1
@ -49,7 +49,7 @@ glyph-block Letter-Latin-Upper-E : begin
create-glyph "E.\(suffix)" : glyph-proc
include : MarkSet.capital
include : EShape CAP (serifLT -- lt) (serifLB -- lb) (serifV -- v)
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
set-base-anchor 'trailing' RightSB 0
create-glyph "grek/Epsilon.\(suffix)" : glyph-proc
include [refer-glyph "E.\(suffix)"] AS_BASE ALSO_METRICS
@ -84,3 +84,6 @@ glyph-block Letter-Latin-Upper-E : begin
EShape CAP (serif -- false) (stroke -- BBS)
Rect (CAP - BBS) BBS (xEBarLeft + BBS * HVContrast) (xEBarLeft + BBD)
VBarLeft (xEBarLeft + BBD) 0 CAP BBS
# Ognoek shapes
CreateOgonekComposition 'EOgonek' 0x118 'E'

View file

@ -8,11 +8,10 @@ glyph-module
glyph-block Letter-Latin-Upper-I : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : SetGrekUpperTonos CreateAccentedComposition
glyph-block-import Letter-Shared : SetGrekUpperTonos CreateAccentedComposition CreateOgonekComposition
define [ISeriflessShape df top jut] : glyph-proc
include : VBar df.middle 0 CAP
set-base-anchor 'trailing' df.middle 0
define [ISerifShape df top jut] : glyph-proc
include : VBar df.middle 0 top
@ -58,3 +57,5 @@ glyph-block Letter-Latin-Upper-I : begin
include : HBarBottom (Middle - BBD / 2 - Jut) (Middle + BBD / 2 + Jut) 0 BBS
CreateAccentedComposition 'smcpIBarOver' 0x1D7B 'smcpI' 'barOver'
CreateOgonekComposition 'IOgonek' 0x12E 'I'

View file

@ -11,13 +11,22 @@ glyph-block Letter-Shared : begin
glyph-block-import Common-Derivatives
glyph-block-export CreateAccentedComposition
define [CreateAccentedComposition dst u srcGid accentGid fDontDecompose]
define [CreateAccentedComposition dst u srcGid accentGid]
derive-multi-part-glyphs dst u { srcGid accentGid } : function [gns gr] : glyph-proc
local { base mark } gns
include [refer-glyph base] AS_BASE ALSO_METRICS
include [refer-glyph mark]
if (!gr && accentGid === 'dotAbove') : Dotless.set currentGlyph base
glyph-block-export CreateOgonekComposition
define [CreateOgonekComposition dst u srcGid]
derive-multi-part-glyphs dst u { srcGid 'ogonekBelow' 'ogonekTR' } : function [gns gr] : glyph-proc
local { base markBelow markTR } gns
include [refer-glyph base] AS_BASE ALSO_METRICS
if currentGlyph.baseAnchors.trailing
then : include [refer-glyph markTR]
else : include [refer-glyph markBelow]
glyph-block-export CreateCommaCaronComposition
define [CreateCommaCaronComposition dst u sourceGid]
derive-multi-part-glyphs dst u { sourceGid 'commaTR' } : function [gns gr] : glyph-proc

View file

@ -14,7 +14,7 @@ glyph-block Mark-Above : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markExtend markHalfStroke markStress markFine
glyph-block-import Mark-Shared-Metrics : markExtend markStroke markHalfStroke markStress markFine
glyph-block-import Mark-Shared-Metrics : markMiddle markDotsRadius
glyph-block-export aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
@ -24,8 +24,8 @@ glyph-block Mark-Above : begin
define aboveMarkStack (XH + AccentStackOffset)
glyph-block-export commaOvershoot commaOvershoot2 commaAboveRadius
define commaOvershoot : O * [linreg 16 0 90 (-1) (markHalfStroke * 2)]
define commaOvershoot2 : O * [linreg 16 1 90 (-1) (markHalfStroke * 2)]
define commaOvershoot : O * [linreg 16 0 90 (-1) markStroke]
define commaOvershoot2 : O * [linreg 16 1 90 (-1) markStroke]
define commaAboveRadius : 0.85 * DotRadius * markHalfStroke / HalfStroke
define asciiMarkZoom : (RightSB - SB) / (markExtend * 3)
@ -58,8 +58,8 @@ glyph-block Mark-Above : begin
select-variant 'dieresisAboveAlwaysUpright' (follow -- 'diacriticDot')
define [RingDims] : begin
local radiusOut : AccentHeight * [linreg 16 0.5 90 0.75 (markHalfStroke * 2)]
local radiusIn : radiusOut - markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)]
local radiusOut : AccentHeight * [linreg 16 0.5 90 0.75 markStroke]
local radiusIn : radiusOut - markFine * [linreg 16 2 90 1.75 markStroke]
return [object radiusIn radiusOut]
create-glyph 'ringAbove' 0x30A : glyph-proc
@ -130,7 +130,7 @@ glyph-block Mark-Above : begin
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : dispiro
widths.rhs (markHalfStroke * 2)
widths.rhs markStroke
flat (markMiddle - markExtend * 1.5) (aboveMarkTop + markFine * 0.7)
curl (markMiddle + markStress * HVContrast) (aboveMarkTop + markFine * 0.7)
include : dispiro
@ -146,7 +146,7 @@ glyph-block Mark-Above : begin
flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading Upward]
include : dispiro
widths.rhs (markHalfStroke * 2)
widths.rhs markStroke
flat (markMiddle - markStress * HVContrast) (aboveMarkTop + markFine * 0.7)
curl (markMiddle + markExtend * 1.5) (aboveMarkTop + markFine * 0.7)
@ -176,7 +176,7 @@ glyph-block Mark-Above : begin
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : dispiro
widths.lhs (markHalfStroke * 2)
widths.lhs markStroke
flat (markMiddle - markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress)
curl (markMiddle + markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress)
include : dispiro
@ -192,7 +192,7 @@ glyph-block Mark-Above : begin
flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress]
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading Downward]
include : dispiro
widths.lhs (markHalfStroke * 2)
widths.lhs markStroke
flat (markMiddle - markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress)
curl (markMiddle + markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress)
@ -497,7 +497,7 @@ glyph-block Mark-Above : begin
local radius commaAboveRadius
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
straight.down.start (markMiddle + radius) (aboveMarkTop - radius + commaOvershoot)
quadControls 0 0.6
g4 [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
@ -511,7 +511,7 @@ glyph-block Mark-Above : begin
local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect aboveMarkTop (aboveMarkTop - radius * 2) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
widths.rhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
flat (markMiddle + radius) aboveMarkTop [heading Downward]
curl (markMiddle + radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6
@ -541,7 +541,7 @@ glyph-block Mark-Above : begin
local radius commaAboveRadius
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
straight.down.start (markMiddle - radius) (aboveMarkTop - radius + commaOvershoot)
quadControls 0 0.6
g4 [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
@ -555,7 +555,7 @@ glyph-block Mark-Above : begin
local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)])
widths.lhs : Math.min radius (markFine * [linreg 16 2 90 1.75 markStroke])
flat (markMiddle - radius) aboveMarkTop [heading Downward]
curl (markMiddle - radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6
@ -575,22 +575,22 @@ glyph-block Mark-Above : begin
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar markMiddle aboveMarkBot aboveMarkTop (markHalfStroke * 2)
include : VBar markMiddle aboveMarkBot aboveMarkTop markStroke
create-glyph 'ascenderBarAbove' : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar markMiddle [mix XH aboveMarkBot 0.5] CAP (markHalfStroke * 2)
include : VBar markMiddle [mix XH aboveMarkBot 0.5] CAP markStroke
create-glyph 'dblBarAbove' 0x30E : glyph-proc
set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop (markHalfStroke * 2)
include : VBar (markMiddle - markExtend * 0.75) aboveMarkBot aboveMarkTop markStroke
include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop markStroke
create-glyph 'bridgeAbove' 0x346 : glyph-proc
set-width 0
@ -616,7 +616,7 @@ glyph-block Mark-Above : begin
create-glyph "candrabinduAbove.\(suffix)" : glyph-proc
set-width 0
local fine : AdviceStroke 6.5
local arcSw : Math.min (markHalfStroke * 2) (fine * 1.25)
local arcSw : Math.min markStroke (fine * 1.25)
local radius : Math.max (markExtend - DotRadius) (fine * 1.35)
local yDot : mix aboveMarkBot aboveMarkTop 0.625
include : dispiro
@ -883,26 +883,18 @@ glyph-block Mark-Above : begin
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local fine : [Math.min [AdviceStroke 8] (Stroke + O)] / 2
local ogonekBot : XH - 2 * fine
local ogonekTop : aboveMarkMid + markStress
local ogonekLeft : markMiddle - markExtend
local ogonekRight : markMiddle + (ogonekTop - ogonekBot) * 0.5
include : spiro-outline
corner (markMiddle - 0.1) ogonekBot
curl markMiddle ogonekBot
archv
g4 ogonekRight [mix ogonekBot ogonekTop 0.5]
arcvh
flat (markMiddle - markExtend * 0.25) ogonekTop
corner ogonekLeft ogonekTop
corner ogonekLeft (ogonekTop - markStress * 2)
curl (markMiddle - markExtend * 0.25) (ogonekTop - markStress * 2)
archv
g4 (ogonekRight - [mix fine markStress 0.75] * 2 * HVContrast) [mix (ogonekBot + fine * 2) (ogonekTop - markStress * 2) 0.5]
arcvh
flat markMiddle (ogonekBot + fine * 2)
corner (markMiddle - 0.1) (ogonekBot + fine * 2)
local fine : AdviceStroke 8
local depth : 0 - Descender - markStroke
local fullExt : (7 / 16) * depth + 0.125 * markStress
local extR : 0.5 * fullExt
local extL : 0.5 * fullExt + 0.375 * markStroke + [Math.max (0.125 * markExtend) (1.5 * TanSlope * markStroke)]
include : dispiro
g4 (markMiddle + [mix extR (-extL) 0.75]) XH [widths.rhs fine]
g4.up.mid (markMiddle + extR) (XH + 0.75 * depth) [widths.rhs.heading markStroke {.x (-HVContrast) .y (-0.5 * (markStroke - fine) / markStroke)}]
arcvh [widths.rhs markStroke]
g4 (markMiddle + [mix extR (-extL) 0.625]) (XH + depth - O) [heading Leftward]
g4 (markMiddle - extL) (XH + depth - 0.5 * O) [heading Leftward]
create-glyph 'leftHalfCircleAbove' 0x351 : glyph-proc
set-width 0

View file

@ -13,7 +13,7 @@ glyph-block Mark-Horn-And-Angle : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markExtend markHalfStroke markStress markFine
glyph-block-import Mark-Shared-Metrics : markExtend markStroke markStress markFine
glyph-block-import Mark-Shared-Metrics : markMiddle markDotsRadius
glyph-block-import Mark-Above : aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
glyph-block-import Mark-Above : commaAboveRadius
@ -152,7 +152,21 @@ glyph-block Mark-Horn-And-Angle : begin
create-glyph 'ogonekTR' : glyph-proc
set-width 0
include : refer-glyph "ogonekBelow"
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress
local ogonekRight : markMiddle + markExtend * 0.85
set-mark-anchor 'trailing' markMiddle 0 ogonekRight ogonekBot
local fine : AdviceStroke 8
local depth : 0 - Descender - markStroke
local extL : (7 / 16) * depth + 0.125 * markStress
local extR : Math.max (0.125 * markExtend) (1.5 * TanSlope * markStroke)
include : difference
dispiro
g4 markMiddle 0 [widths.rhs fine]
g4.down.mid (markMiddle - extL) (-0.75 * depth) [widths.rhs.heading markStroke {.x (HVContrast) .y (0.5 * (markStroke - fine) / markStroke)}]
arcvh [widths.rhs markStroke]
g4 (markMiddle + [mix (-extL) extR (11/16)]) (-depth + O) [heading Rightward]
g4 (markMiddle + extR) (-depth + 0.5 * O) [heading Rightward]
intersection
MaskAbove 0
MaskRight markMiddle
set-mark-anchor 'trailing' markMiddle 0 (markMiddle + extR) (-depth - 0.5 * O - markStroke)

View file

@ -14,9 +14,10 @@ glyph-block Mark-Shared-Metrics : begin
glyph-block-import Common-Derivatives
### Combining marks
glyph-block-export markExtend markHalfStroke markStress markFine
glyph-block-export markExtend markStroke markHalfStroke markStress markFine
define markExtend (AccentWidth * 0.5)
define markHalfStroke : 0.5 * [AdviceStroke2 3.375 3.5 XH]
define markStroke : AdviceStroke2 3.375 3.5 XH
define markHalfStroke : 0.5 * markStroke
define markStress : markHalfStroke * 1.1
define markFine : Math.min (markHalfStroke * 0.9) (0.5 * [AdviceStroke2 3.875 4.25 XH])

View file

@ -209,6 +209,13 @@ export function SetupBuilders(bindings) {
fallback(args.raf, unimportant)
);
}
function afInterpolateDelta(before, after, args) {
return g4(
mix(before.x, after.x, args.rx) + args.deltaX,
mix(before.y, after.y, args.ry) + args.deltaY,
fallback(args.raf, unimportant)
);
}
function afInterpolateG2(before, after, args) {
return g2(
mix(before.x, after.x, args.rx),
@ -236,6 +243,9 @@ export function SetupBuilders(bindings) {
function alsoThru(rx, ry, raf) {
return { type: "interpolate", rx, ry, raf, blender: afInterpolate };
}
alsoThru.withOffset = function (rx, ry, deltaX, deltaY, raf) {
return { type: "interpolate", rx, ry, deltaX, deltaY, raf, blender: afInterpolateDelta };
};
alsoThru.g2 = function (rx, ry, raf) {
return { type: "interpolate", rx, ry, raf, blender: afInterpolateG2 };
};

View file

@ -14,7 +14,6 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
define {chain-rule} : ChainRuleBuilder sink
define groupGrekUpperTonos {}
define groupTR {}
define groupLF {}
define dotlessFrom {}
define dotlessTo {}
@ -23,7 +22,6 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
define TieGlyphs {}
foreach { gid g } [glyphStore.namedEntries] : if (gid.(0) !== "."): begin
if g.baseAnchors.trailing : groupTR.push gid
if g.baseAnchors.lf : groupLF.push gid
if g.baseAnchors.grekUpperTonos : groupGrekUpperTonos.push gid
if [Dotless.get g] : begin
@ -35,7 +33,6 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
TieMarkTo.push [TieMark.get g]
define [IotaLF] : UkMapToLookup UnicodeKnowledge.iotaBelowToLfTf
define [OgonekTrailing] : UkMapToLookup UnicodeKnowledge.ogonekBelowToTRTf
define [GrekUpperTonosTf] : UkMapToLookup UnicodeKnowledge.upperGrekMarkToTonosTf
define [ToneToToneStart toneEnd] : begin
@ -123,13 +120,7 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
chain-rule groupLF markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [IotaLF]
chain-rule groupLF markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [IotaLF]
# Ogonek transform (max 6 middle marks are supported)
chain-rule groupTR [OgonekTrailing]
chain-rule groupTR markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
define lookupMarks2 : AddLookup sink : object
.type 'gsub_ligature'
@ -235,4 +226,32 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
AddCommonFeature sink ccmp
EndLookupBlock rec sink
return ccmp
export : define [buildCCMPPostCvSs sink ccmpFeature glyphStore markGlyphs] : begin
local rec : BeginLookupBlock sink
define ccmp : AddFeature sink 'ccmp'
define {chain-rule} : ChainRuleBuilder sink
define groupTR {}
foreach { gid g } [glyphStore.namedEntries] : if (gid.(0) !== "."): begin
if g.baseAnchors.trailing : groupTR.push gid
define [OgonekTrailing] : UkMapToLookup UnicodeKnowledge.ogonekBelowToTRTf
define lookupMarks1 : AddLookup sink : object
.type 'gsub_chaining'
.rules : list
# Ogonek transform (max 6 middle marks are supported)
chain-rule groupTR [OgonekTrailing]
chain-rule groupTR markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
chain-rule groupTR markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all markGlyphs.all [OgonekTrailing]
ccmpFeature.lookups.push lookupMarks1
EndLookupBlock rec sink
define [objectIsNotEmpty obj] : obj && [Object.keys obj].length

View file

@ -4,7 +4,7 @@ import as Gr from"../support/gr.mjs"
import [CreateEmptyTable FinalizeTable MoveBackUtilityLookups] from"./table-util.mjs"
import [buildLigations] from"./gsub-ligation.mjs"
import [buildCCMP] from"./gsub-ccmp.mjs"
import [buildCCMP buildCCMPPostCvSs] from"./gsub-ccmp.mjs"
import [buildGrFeature] from"./gsub-gr.mjs"
import [buildFrac] from"./gsub-frac.mjs"
import [buildCVSS] from"./gsub-cv-ss.mjs"
@ -39,7 +39,7 @@ define [buildGSUB para glyphStore markGlyphs] : begin
buildGrFeature gsub glyphStore Gr.DenominatorForm
# ccmp
buildCCMP gsub glyphStore markGlyphs
local ccmp : buildCCMP gsub glyphStore markGlyphs
# frac
buildFrac gsub glyphStore
@ -58,6 +58,9 @@ define [buildGSUB para glyphStore markGlyphs] : begin
if para.enableCvSs : begin
buildCVSS gsub para glyphStore
# ccmp post cv/ss (for Ogonek shape transform)
buildCCMPPostCvSs gsub ccmp glyphStore markGlyphs
# locl
# Builds last, but the lookups are added into the beginning of the lookup list
buildLOCL gsub para glyphStore