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 CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke 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 glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend
define ADoubleStoreyStroke : AdviceStroke2 2 3 XH define ADoubleStoreyStroke : AdviceStroke2 2 3 XH
@ -70,14 +70,14 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreySerifless' : glyph-proc create-glyph 'a.doubleStoreySerifless' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' RightSB 0
include : union include : union
ADoubleStoreyHookAndBar 0 ADoubleStoreyHookAndBar 0
ADoubleStoreyArc 0 ADoubleStoreyArc 0
create-glyph 'a.doubleStoreySerifed' : glyph-proc create-glyph 'a.doubleStoreySerifed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : union include : union
ADoubleStoreyHookAndBar 0 ADoubleStoreyHookAndBar 0
ADoubleStoreyArc 0 ADoubleStoreyArc 0
@ -101,7 +101,7 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreyTailed' : glyph-proc create-glyph 'a.doubleStoreyTailed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : union include : union
ADoubleStoreyHookAndBar (XH - ADoubleStoreySmoothB + O) ADoubleStoreyHookAndBar (XH - ADoubleStoreySmoothB + O)
ADoubleStoreyArc 0 ADoubleStoreyArc 0
@ -109,47 +109,47 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.doubleStoreyToothlessCorner' : glyph-proc create-glyph 'a.doubleStoreyToothlessCorner' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 # set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
include : union include : union
ADoubleStoreyHookAndBar DToothlessRise ADoubleStoreyHookAndBar DToothlessRise
ADoubleStoreyArc 1 DToothlessRise ADoubleStoreyArc 1 DToothlessRise
create-glyph 'a.doubleStoreyToothlessRounded' : glyph-proc create-glyph 'a.doubleStoreyToothlessRounded' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 # set-base-anchor 'trailing' (RightSB - markHalfStroke) 0
include : union include : union
ADoubleStoreyHookAndBar ADoubleStoreySmoothA ADoubleStoreyHookAndBar ADoubleStoreySmoothA
ADoubleStoreyArc 2 ADoubleStoreySmoothA ADoubleStoreyArc 2 ADoubleStoreySmoothA
create-glyph 'a.singleStoreySerifless' : glyph-proc create-glyph 'a.singleStoreySerifless' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' RightSB 0
include : OBarRightShape include : OBarRightShape
include : VBarRight RightSB 0 XH include : VBarRight RightSB 0 XH
create-glyph 'a.singleStoreySerifed' : glyph-proc create-glyph 'a.singleStoreySerifed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarRightShape include : OBarRightShape
include : VBarRight RightSB 0 XH include : VBarRight RightSB 0 XH
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'a.singleStoreyTailed' : glyph-proc create-glyph 'a.singleStoreyTailed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarRightShape include : OBarRightShape
include : RightwardTailedBar RightSB 0 XH include : RightwardTailedBar RightSB 0 XH
create-glyph 'a.singleStoreyEarlessCornerSerifless' : glyph-proc create-glyph 'a.singleStoreyEarlessCornerSerifless' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' RightSB 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : VBarRight RightSB 0 (XH - DToothlessRise) include : VBarRight RightSB 0 (XH - DToothlessRise)
create-glyph 'a.singleStoreyEarlessCornerSerifed' : glyph-proc create-glyph 'a.singleStoreyEarlessCornerSerifed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : VBarRight RightSB 0 (XH - DToothlessRise) include : VBarRight RightSB 0 (XH - DToothlessRise)
@ -157,27 +157,27 @@ glyph-block Letter-Latin-Lower-A : begin
create-glyph 'a.singleStoreyEarlessCornerTailed' : glyph-proc create-glyph 'a.singleStoreyEarlessCornerTailed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend include : OBarLeftToothlessShape XH SB DToothlessRise DMBlend
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : RightwardTailedBar RightSB 0 (XH - DToothlessRise) include : RightwardTailedBar RightSB 0 (XH - DToothlessRise)
create-glyph 'a.singleStoreyEarlessRoundedSerifless' : glyph-proc create-glyph 'a.singleStoreyEarlessRoundedSerifless' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' RightSB 0
include : OBarLeftRoundedShape XH SB XH include : OBarLeftRoundedShape XH SB XH
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
create-glyph 'a.singleStoreyEarlessRoundedSerifed' : glyph-proc create-glyph 'a.singleStoreyEarlessRoundedSerifed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftRoundedShape XH SB XH include : OBarLeftRoundedShape XH SB XH
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'a.singleStoreyEarlessRoundedTailed' : glyph-proc create-glyph 'a.singleStoreyEarlessRoundedTailed' : glyph-proc
include : MarkSet.e include : MarkSet.e
set-base-anchor 'trailing' (RightSB - markHalfStroke) 0 set-base-anchor 'trailing' (RightSB + SideJut) 0
include : OBarLeftRoundedShape XH SB (SmallArchDepthB - O) include : OBarLeftRoundedShape XH SB (SmallArchDepthB - O)
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : RightwardTailedBar RightSB 0 (XH - SmallArchDepthB) include : RightwardTailedBar RightSB 0 (XH - SmallArchDepthB)
@ -232,3 +232,6 @@ glyph-block Letter-Latin-Lower-A : begin
CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove' CreateAccentedComposition 'aDieresis' 0xE4 'a' 'dieresisAbove'
CreateAccentedComposition 'aSbRsbUnderlineBelow' null 'a' 'sbRsbUnderlineBelow' CreateAccentedComposition 'aSbRsbUnderlineBelow' null 'a' 'sbRsbUnderlineBelow'
CreateAccentedComposition 'aRightHalfRingTR' 0x1E9A 'a' 'rightHalfCircleTR' 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 Common-Derivatives
glyph-block-import Letter-Shared-Shapes : FlatHookDepth 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 define [SmallEShape] : params [df top stroke barpos curly [bbd 0]] : glyph-proc
local barbottom : top * [fallback barpos DesignParameters.eBarPos] - (stroke / 2) local barbottom : top * [fallback barpos DesignParameters.eBarPos] - (stroke / 2)
local hook : Math.min AHook : if para.isItalic top (stroke / 2 + (top - stroke * 3) / 4) 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 : HBarBottom (df.leftSB + (stroke / 2) + OX + bbd) (df.rightSB - (stroke / 2) - OX) barbottom stroke
include : dispiro local path : include : dispiro
widths.lhs stroke widths.lhs stroke
flat (df.rightSB - OX) barbottom [heading Upward] flat (df.rightSB - OX) barbottom [heading Upward]
curl (df.rightSB - OX) (top - SmallArchDepthB) curl (df.rightSB - OX) (top - SmallArchDepthB)
@ -27,6 +30,8 @@ glyph-block Letter-Latin-Lower-E : begin
hookend O (sw -- stroke) hookend O (sw -- stroke)
g4 (df.rightSB - OX * [if para.isItalic 0 0.5]) hook 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 define [RevSmallEShape] : params [df top stroke barpos] : glyph-proc
local barbottom (top * [fallback barpos DesignParameters.eBarPos] - HalfStroke) local barbottom (top * [fallback barpos DesignParameters.eBarPos] - HalfStroke)
local hookx df.leftSB local hookx df.leftSB
@ -53,7 +58,7 @@ glyph-block Letter-Latin-Lower-E : begin
local xStart : df.leftSB + (0.125 * stroke * HVContrast) local xStart : df.leftSB + (0.125 * stroke * HVContrast)
local pfIt : if para.isItalic 1 0 local pfIt : if para.isItalic 1 0
include : dispiro local path : include : dispiro
widths.lhs stroke widths.lhs stroke
[if para.isItalic g2 flat] xStart (barbottom - pfIt * [StrokeWidthBlend 2 3] * O) [if para.isItalic g2 flat] xStart (barbottom - pfIt * [StrokeWidthBlend 2 3] * O)
if para.isItalic [alsoThru.g2 0.5 0.8] [list] 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) hookend O (sw -- stroke)
g4 (df.rightSB - OX * [if para.isItalic 0 0.5]) hook 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 define [RevSmallERoundedShape] : params [df top stroke barpos] : glyph-proc
local barbottom : top * [fallback barpos : if para.isItalic 0.500 0.475] - (stroke / 2) 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) 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 : MarkSet.e
include : Body [DivFrame 1] XH [AdviceStroke2 2 3 XH] 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 create-glyph "Schwa.\(suffix)" : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : Body [DivFrame 1] CAP [AdviceStroke2 2 3 CAP] 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' alias 'cyrl/ie' 0x435 'e'
turned 'turne' 0x1DD 'e' Middle (XH / 2) turned 'turne' 0x1DD 'e' Middle (XH / 2)
select-variant 'eOgonek' 0x119 (follow -- 'e')
select-variant 'Schwa' 0x18F select-variant 'Schwa' 0x18F
alias 'cyrl/Schwa' 0x4D8 'Schwa' alias 'cyrl/Schwa' 0x4D8 'Schwa'

View file

@ -8,7 +8,7 @@ glyph-module
glyph-block Letter-Latin-Lower-I : begin glyph-block Letter-Latin-Lower-I : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives 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-Shapes : FlatHookDepth DiagonalTailR DiagonalTailStdDepth
glyph-block-import Letter-Shared : CreateCommaCaronComposition glyph-block-import Letter-Shared : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail 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 export : define [Serifless df top xMiddle] : glyph-proc
include : OverrideILMarks df xMiddle top include : OverrideILMarks df xMiddle top
include : VBar xMiddle 0 top include : VBar xMiddle 0 top
set-base-anchor 'trailing' xMiddle 0
export : define [HookyBottom df top xMiddle] : glyph-proc export : define [HookyBottom df top xMiddle] : glyph-proc
include : OverrideILMarks df xMiddle top include : OverrideILMarks df xMiddle top
@ -271,6 +270,8 @@ glyph-block Letter-Latin-Lower-I : begin
CreateAccentedComposition 'dotlessiBarOver' null 'dotlessi' 'barOver' CreateAccentedComposition 'dotlessiBarOver' null 'dotlessi' 'barOver'
CreateAccentedComposition 'iBarOver' 0x268 'dotlessiBarOver' 'dotAbove' CreateAccentedComposition 'iBarOver' 0x268 'dotlessiBarOver' 'dotAbove'
CreateOgonekComposition 'iOgonek' 0x12F 'i'
do "l glyphs" do "l glyphs"
select-variant 'l' 'l' select-variant 'l' 'l'
link-reduced-variant 'l/sansSerif' 'l' MathSansSerif 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 create-glyph 'O' 'O' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : OShape CAP 0 SB RightSB nothing ArchDepthA ArchDepthB include : OShape CAP 0 SB RightSB nothing ArchDepthA ArchDepthB
set-base-anchor 'trailing' Middle 0
create-glyph 'smcpO' 0x1D0F : glyph-proc create-glyph 'smcpO' 0x1D0F : glyph-proc
include : MarkSet.e include : MarkSet.e
include : OShape XH 0 SB RightSB nothing ArchDepthA ArchDepthB include : OShape XH 0 SB RightSB nothing ArchDepthA ArchDepthB
set-base-anchor 'trailing' Middle 0
create-glyph 'o' 'o' : glyph-proc create-glyph 'o' 'o' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : OShape XH 0 SB RightSB nothing nothing nothing include : OShape XH 0 SB RightSB nothing nothing nothing
set-base-anchor 'trailing' Middle 0
create-glyph 'oSideways' 0x1D11 : glyph-proc create-glyph 'oSideways' 0x1D11 : glyph-proc
include : MarkSet.e include : MarkSet.e
@ -40,7 +37,6 @@ glyph-block Letter-Latin-O : begin
include : OShape CAP 0 SB RightSB df.mvs ArchDepthA ArchDepthB include : OShape CAP 0 SB RightSB df.mvs ArchDepthA ArchDepthB
include : DotAt Middle (df.mvs / 2 + O) rBroadOn include : DotAt Middle (df.mvs / 2 + O) rBroadOn
include : DotAt Middle (CAP - 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 create-glyph 'cyrl/broadOn' 0x47B : glyph-proc
define df : DivFrame 1 3 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 : OShape XH 0 SB RightSB df.mvs nothing nothing
include : DotAt Middle (df.mvs / 2 + O) rBroadOn include : DotAt Middle (df.mvs / 2 + O) rBroadOn
include : DotAt Middle (XH - 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 create-glyph 'grek/Omicron' 0x39F : glyph-proc
include [refer-glyph 'O'] AS_BASE ALSO_METRICS 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 CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke 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 : nShoulder RightwardTailedBar DToothlessRise SerifFrame
glyph-block-import Letter-Shared-Shapes : CyrTailDescender glyph-block-import Letter-Shared-Shapes : CyrTailDescender
@ -36,7 +36,7 @@ glyph-block Letter-Latin-U : begin
offset -- offset offset -- offset
define [UToothed df top] : glyph-proc define [UToothed df top] : glyph-proc
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0 set-base-anchor 'trailing' df.rightSB 0
include : nShoulder include : nShoulder
top -- top top -- top
left -- (df.leftSB + Stroke * HVContrast) left -- (df.leftSB + Stroke * HVContrast)
@ -46,7 +46,7 @@ glyph-block Letter-Latin-U : begin
include : VBarRight df.rightSB 0 top include : VBarRight df.rightSB 0 top
define [UTailed df top] : glyph-proc define [UTailed df top] : glyph-proc
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0 set-base-anchor 'trailing' (df.rightSB + SideJut) 0
include : nShoulder include : nShoulder
top -- top top -- top
left -- (df.leftSB + Stroke * HVContrast) left -- (df.leftSB + Stroke * HVContrast)
@ -56,15 +56,12 @@ glyph-block Letter-Latin-U : begin
include : RightwardTailedBar df.rightSB 0 top include : RightwardTailedBar df.rightSB 0 top
define [UToothlessRounded df top] : glyph-proc define [UToothlessRounded df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : UShape df top 0 include : UShape df top 0
define [UToothlessRoundedSmall df top] : glyph-proc define [UToothlessRoundedSmall df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : UShape df top 0 (ada -- SmallArchDepthA) (adb -- SmallArchDepthB) include : UShape df top 0 (ada -- SmallArchDepthA) (adb -- SmallArchDepthB)
define [UToothlessCorner df top] : glyph-proc define [UToothlessCorner df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : VBarLeft df.leftSB 0 (top - DToothlessRise) include : VBarLeft df.leftSB 0 (top - DToothlessRise)
include : dispiro include : dispiro
widths.rhs widths.rhs
@ -76,7 +73,6 @@ glyph-block Letter-Latin-U : begin
include : FlipAround df.middle (top / 2) include : FlipAround df.middle (top / 2)
define [UToothlessCornerSmall df top] : glyph-proc define [UToothlessCornerSmall df top] : glyph-proc
set-base-anchor 'trailing' df.middle 0
include : VBarLeft df.leftSB 0 (top - DToothlessRise) include : VBarLeft df.leftSB 0 (top - DToothlessRise)
include : dispiro include : dispiro
widths.rhs widths.rhs
@ -93,8 +89,11 @@ glyph-block Letter-Latin-U : begin
define [UTopRightSerif df yTop] : tagged 'serifRT' define [UTopRightSerif df yTop] : tagged 'serifRT'
LeftwardTopSerif (df.rightSB - Stroke * HVContrast) yTop SideJut LeftwardTopSerif (df.rightSB - Stroke * HVContrast) yTop SideJut
define [UBottomRightSerif df yTop] : tagged 'serifRB' define [UBottomRightSerif df yTop] : glyph-proc
RightwardBottomSerif df.rightSB 0 SideJut 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 define [SmallUSlabs df top] : glyph-proc : if SLAB : begin
include : UTopLeftSerif df top include : UTopLeftSerif df top
@ -299,3 +298,6 @@ glyph-block Letter-Latin-U : begin
include : Translate 0 (SB / 2) include : Translate 0 (SB / 2)
CreateAccentedComposition 'uDieresisSideways' 0x1D1E 'uDieresisSidewaysBase' 'uDieresisSidewaysMark' 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 CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke 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-Shared-Shapes : SerifFrame
glyph-block-import Letter-Latin-V : VShapeOutline VShape glyph-block-import Letter-Latin-V : VShapeOutline VShape
glyph-block-export LambdaShape AMaskShape DeltaShape glyph-block-export LambdaShape AMaskShape DeltaShape
@ -48,7 +48,7 @@ glyph-block Letter-Latin-Upper-A : begin
define [AShapeImpl mak top fGrek] : glyph-proc define [AShapeImpl mak top fGrek] : glyph-proc
local df : DivFrame 1 local df : DivFrame 1
include : df.markSet.(mak) include : df.markSet.(mak)
set-base-anchor 'trailing' (df.rightSB - markHalfStroke) 0 set-base-anchor 'trailing' df.rightSB 0
if fGrek : include : SetGrekUpperTonos if fGrek : include : SetGrekUpperTonos
[if (slabKind === SLAB-TOP || slabKind === SLAB-TRI) 0 0.2] * (df.rightSB - df.leftSB) [if (slabKind === SLAB-TOP || slabKind === SLAB-TRI) 0 0.2] * (df.rightSB - df.leftSB)
include : VShape df top Stroke fStraightBar include : VShape df top Stroke fStraightBar
@ -123,3 +123,5 @@ glyph-block Letter-Latin-Upper-A : begin
BBVInnerMaskShape SB RightSB 1 1 CAP BBVInnerMaskShape SB RightSB 1 1 CAP
HBarTop 0 Width (CAP - XH / 2) BBS HBarTop 0 Width (CAP - XH / 2) BBS
include : FlipAround Middle (CAP / 2) 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 CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Mark-Shared-Metrics : markHalfStroke 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 glyph-block-import Letter-Latin-Upper-F : xMidBarShrink yMidBar EFVJutLength
define kSB 1 define kSB 1
@ -49,7 +49,7 @@ glyph-block Letter-Latin-Upper-E : begin
create-glyph "E.\(suffix)" : glyph-proc create-glyph "E.\(suffix)" : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : EShape CAP (serifLT -- lt) (serifLB -- lb) (serifV -- v) 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 create-glyph "grek/Epsilon.\(suffix)" : glyph-proc
include [refer-glyph "E.\(suffix)"] AS_BASE ALSO_METRICS 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) EShape CAP (serif -- false) (stroke -- BBS)
Rect (CAP - BBS) BBS (xEBarLeft + BBS * HVContrast) (xEBarLeft + BBD) Rect (CAP - BBS) BBS (xEBarLeft + BBS * HVContrast) (xEBarLeft + BBD)
VBarLeft (xEBarLeft + BBD) 0 CAP BBS 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 Letter-Latin-Upper-I : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives 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 define [ISeriflessShape df top jut] : glyph-proc
include : VBar df.middle 0 CAP include : VBar df.middle 0 CAP
set-base-anchor 'trailing' df.middle 0
define [ISerifShape df top jut] : glyph-proc define [ISerifShape df top jut] : glyph-proc
include : VBar df.middle 0 top 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 include : HBarBottom (Middle - BBD / 2 - Jut) (Middle + BBD / 2 + Jut) 0 BBS
CreateAccentedComposition 'smcpIBarOver' 0x1D7B 'smcpI' 'barOver' 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-import Common-Derivatives
glyph-block-export CreateAccentedComposition 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 derive-multi-part-glyphs dst u { srcGid accentGid } : function [gns gr] : glyph-proc
local { base mark } gns local { base mark } gns
include [refer-glyph base] AS_BASE ALSO_METRICS include [refer-glyph base] AS_BASE ALSO_METRICS
include [refer-glyph mark] include [refer-glyph mark]
if (!gr && accentGid === 'dotAbove') : Dotless.set currentGlyph base 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 glyph-block-export CreateCommaCaronComposition
define [CreateCommaCaronComposition dst u sourceGid] define [CreateCommaCaronComposition dst u sourceGid]
derive-multi-part-glyphs dst u { sourceGid 'commaTR' } : function [gns gr] : glyph-proc 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 CommonShapes
glyph-block-import Common-Derivatives 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-import Mark-Shared-Metrics : markMiddle markDotsRadius
glyph-block-export aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack glyph-block-export aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
@ -24,8 +24,8 @@ glyph-block Mark-Above : begin
define aboveMarkStack (XH + AccentStackOffset) define aboveMarkStack (XH + AccentStackOffset)
glyph-block-export commaOvershoot commaOvershoot2 commaAboveRadius glyph-block-export commaOvershoot commaOvershoot2 commaAboveRadius
define commaOvershoot : O * [linreg 16 0 90 (-1) (markHalfStroke * 2)] define commaOvershoot : O * [linreg 16 0 90 (-1) markStroke]
define commaOvershoot2 : O * [linreg 16 1 90 (-1) (markHalfStroke * 2)] define commaOvershoot2 : O * [linreg 16 1 90 (-1) markStroke]
define commaAboveRadius : 0.85 * DotRadius * markHalfStroke / HalfStroke define commaAboveRadius : 0.85 * DotRadius * markHalfStroke / HalfStroke
define asciiMarkZoom : (RightSB - SB) / (markExtend * 3) define asciiMarkZoom : (RightSB - SB) / (markExtend * 3)
@ -58,8 +58,8 @@ glyph-block Mark-Above : begin
select-variant 'dieresisAboveAlwaysUpright' (follow -- 'diacriticDot') select-variant 'dieresisAboveAlwaysUpright' (follow -- 'diacriticDot')
define [RingDims] : begin define [RingDims] : begin
local radiusOut : AccentHeight * [linreg 16 0.5 90 0.75 (markHalfStroke * 2)] local radiusOut : AccentHeight * [linreg 16 0.5 90 0.75 markStroke]
local radiusIn : radiusOut - markFine * [linreg 16 2 90 1.75 (markHalfStroke * 2)] local radiusIn : radiusOut - markFine * [linreg 16 2 90 1.75 markStroke]
return [object radiusIn radiusOut] return [object radiusIn radiusOut]
create-glyph 'ringAbove' 0x30A : glyph-proc create-glyph 'ringAbove' 0x30A : glyph-proc
@ -130,7 +130,7 @@ glyph-block Mark-Above : begin
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : dispiro include : dispiro
widths.rhs (markHalfStroke * 2) widths.rhs markStroke
flat (markMiddle - markExtend * 1.5) (aboveMarkTop + markFine * 0.7) flat (markMiddle - markExtend * 1.5) (aboveMarkTop + markFine * 0.7)
curl (markMiddle + markStress * HVContrast) (aboveMarkTop + markFine * 0.7) curl (markMiddle + markStress * HVContrast) (aboveMarkTop + markFine * 0.7)
include : dispiro include : dispiro
@ -146,7 +146,7 @@ glyph-block Mark-Above : begin
flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress] flat (markMiddle - markExtend - markStress) (aboveMarkBot + markStress - markFine) [widths markStress markStress]
curl markMiddle (aboveMarkTop + markFine * 0.7) [heading Upward] curl markMiddle (aboveMarkTop + markFine * 0.7) [heading Upward]
include : dispiro include : dispiro
widths.rhs (markHalfStroke * 2) widths.rhs markStroke
flat (markMiddle - markStress * HVContrast) (aboveMarkTop + markFine * 0.7) flat (markMiddle - markStress * HVContrast) (aboveMarkTop + markFine * 0.7)
curl (markMiddle + markExtend * 1.5) (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 set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : dispiro include : dispiro
widths.lhs (markHalfStroke * 2) widths.lhs markStroke
flat (markMiddle - markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress) flat (markMiddle - markExtend * 1.5) (aboveMarkBot - markFine * 1.7 + markStress)
curl (markMiddle + markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress) curl (markMiddle + markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress)
include : dispiro include : dispiro
@ -192,7 +192,7 @@ glyph-block Mark-Above : begin
flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress] flat (markMiddle - markExtend - markStress) aboveMarkTop [widths markStress markStress]
curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading Downward] curl markMiddle (aboveMarkBot - markFine * 1.7 + markStress) [heading Downward]
include : dispiro include : dispiro
widths.lhs (markHalfStroke * 2) widths.lhs markStroke
flat (markMiddle - markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress) flat (markMiddle - markStress * HVContrast) (aboveMarkBot - markFine * 1.7 + markStress)
curl (markMiddle + markExtend * 1.5) (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 local radius commaAboveRadius
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius) include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro 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) straight.down.start (markMiddle + radius) (aboveMarkTop - radius + commaOvershoot)
quadControls 0 0.6 quadControls 0 0.6
g4 [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2) g4 [mix markMiddle (markMiddle - radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
@ -511,7 +511,7 @@ glyph-block Mark-Above : begin
local radius : commaAboveRadius * DesignParameters.squareDotScalar local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect aboveMarkTop (aboveMarkTop - radius * 2) (markMiddle - radius) (markMiddle + radius) include : Rect aboveMarkTop (aboveMarkTop - radius * 2) (markMiddle - radius) (markMiddle + radius)
include : dispiro 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] flat (markMiddle + radius) aboveMarkTop [heading Downward]
curl (markMiddle + radius) (aboveMarkTop - 2 * radius) [heading Downward] curl (markMiddle + radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6 quadControls 0 0.6
@ -541,7 +541,7 @@ glyph-block Mark-Above : begin
local radius commaAboveRadius local radius commaAboveRadius
include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius) include : Ring (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro 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) straight.down.start (markMiddle - radius) (aboveMarkTop - radius + commaOvershoot)
quadControls 0 0.6 quadControls 0 0.6
g4 [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2) g4 [mix markMiddle (markMiddle + radius) 0.2] (aboveMarkBot - radius - commaOvershoot2)
@ -555,7 +555,7 @@ glyph-block Mark-Above : begin
local radius : commaAboveRadius * DesignParameters.squareDotScalar local radius : commaAboveRadius * DesignParameters.squareDotScalar
include : Rect (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius) include : Rect (aboveMarkTop + commaOvershoot) (aboveMarkTop - radius * 2 + commaOvershoot) (markMiddle - radius) (markMiddle + radius)
include : dispiro 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] flat (markMiddle - radius) aboveMarkTop [heading Downward]
curl (markMiddle - radius) (aboveMarkTop - 2 * radius) [heading Downward] curl (markMiddle - radius) (aboveMarkTop - 2 * radius) [heading Downward]
quadControls 0 0.6 quadControls 0 0.6
@ -575,22 +575,22 @@ glyph-block Mark-Above : begin
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
include : VBar markMiddle aboveMarkBot aboveMarkTop (markHalfStroke * 2) include : VBar markMiddle aboveMarkBot aboveMarkTop markStroke
create-glyph 'ascenderBarAbove' : glyph-proc create-glyph 'ascenderBarAbove' : glyph-proc
set-width 0 set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid 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 create-glyph 'dblBarAbove' 0x30E : glyph-proc
set-width 0 set-width 0
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
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 (markHalfStroke * 2) include : VBar (markMiddle + markExtend * 0.75) aboveMarkBot aboveMarkTop markStroke
create-glyph 'bridgeAbove' 0x346 : glyph-proc create-glyph 'bridgeAbove' 0x346 : glyph-proc
set-width 0 set-width 0
@ -616,7 +616,7 @@ glyph-block Mark-Above : begin
create-glyph "candrabinduAbove.\(suffix)" : glyph-proc create-glyph "candrabinduAbove.\(suffix)" : glyph-proc
set-width 0 set-width 0
local fine : AdviceStroke 6.5 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 radius : Math.max (markExtend - DotRadius) (fine * 1.35)
local yDot : mix aboveMarkBot aboveMarkTop 0.625 local yDot : mix aboveMarkBot aboveMarkTop 0.625
include : dispiro include : dispiro
@ -883,26 +883,18 @@ glyph-block Mark-Above : begin
set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack set-mark-anchor 'above' markMiddle XH markMiddle aboveMarkStack
set-base-anchor 'aboveBrace' markMiddle aboveMarkMid set-base-anchor 'aboveBrace' markMiddle aboveMarkMid
local fine : [Math.min [AdviceStroke 8] (Stroke + O)] / 2 local fine : AdviceStroke 8
local ogonekBot : XH - 2 * fine local depth : 0 - Descender - markStroke
local ogonekTop : aboveMarkMid + markStress local fullExt : (7 / 16) * depth + 0.125 * markStress
local ogonekLeft : markMiddle - markExtend local extR : 0.5 * fullExt
local ogonekRight : markMiddle + (ogonekTop - ogonekBot) * 0.5 local extL : 0.5 * fullExt + 0.375 * markStroke + [Math.max (0.125 * markExtend) (1.5 * TanSlope * markStroke)]
include : spiro-outline
corner (markMiddle - 0.1) ogonekBot include : dispiro
curl markMiddle ogonekBot g4 (markMiddle + [mix extR (-extL) 0.75]) XH [widths.rhs fine]
archv g4.up.mid (markMiddle + extR) (XH + 0.75 * depth) [widths.rhs.heading markStroke {.x (-HVContrast) .y (-0.5 * (markStroke - fine) / markStroke)}]
g4 ogonekRight [mix ogonekBot ogonekTop 0.5] arcvh [widths.rhs markStroke]
arcvh g4 (markMiddle + [mix extR (-extL) 0.625]) (XH + depth - O) [heading Leftward]
flat (markMiddle - markExtend * 0.25) ogonekTop g4 (markMiddle - extL) (XH + depth - 0.5 * O) [heading Leftward]
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)
create-glyph 'leftHalfCircleAbove' 0x351 : glyph-proc create-glyph 'leftHalfCircleAbove' 0x351 : glyph-proc
set-width 0 set-width 0

View file

@ -13,7 +13,7 @@ glyph-block Mark-Horn-And-Angle : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives 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-Shared-Metrics : markMiddle markDotsRadius
glyph-block-import Mark-Above : aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack glyph-block-import Mark-Above : aboveMarkTop aboveMarkBot aboveMarkMid aboveMarkStack
glyph-block-import Mark-Above : commaAboveRadius glyph-block-import Mark-Above : commaAboveRadius
@ -152,7 +152,21 @@ glyph-block Mark-Horn-And-Angle : begin
create-glyph 'ogonekTR' : glyph-proc create-glyph 'ogonekTR' : glyph-proc
set-width 0 set-width 0
include : refer-glyph "ogonekBelow"
local ogonekBot : [mix belowMarkTop belowMarkBot 0.75] + markStress local fine : AdviceStroke 8
local ogonekRight : markMiddle + markExtend * 0.85 local depth : 0 - Descender - markStroke
set-mark-anchor 'trailing' markMiddle 0 ogonekRight ogonekBot 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 glyph-block-import Common-Derivatives
### Combining marks ### Combining marks
glyph-block-export markExtend markHalfStroke markStress markFine glyph-block-export markExtend markStroke markHalfStroke markStress markFine
define markExtend (AccentWidth * 0.5) 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 markStress : markHalfStroke * 1.1
define markFine : Math.min (markHalfStroke * 0.9) (0.5 * [AdviceStroke2 3.875 4.25 XH]) 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) 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) { function afInterpolateG2(before, after, args) {
return g2( return g2(
mix(before.x, after.x, args.rx), mix(before.x, after.x, args.rx),
@ -236,6 +243,9 @@ export function SetupBuilders(bindings) {
function alsoThru(rx, ry, raf) { function alsoThru(rx, ry, raf) {
return { type: "interpolate", rx, ry, raf, blender: afInterpolate }; 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) { alsoThru.g2 = function (rx, ry, raf) {
return { type: "interpolate", rx, ry, raf, blender: afInterpolateG2 }; 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 {chain-rule} : ChainRuleBuilder sink
define groupGrekUpperTonos {} define groupGrekUpperTonos {}
define groupTR {}
define groupLF {} define groupLF {}
define dotlessFrom {} define dotlessFrom {}
define dotlessTo {} define dotlessTo {}
@ -23,7 +22,6 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
define TieGlyphs {} define TieGlyphs {}
foreach { gid g } [glyphStore.namedEntries] : if (gid.(0) !== "."): begin 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.lf : groupLF.push gid
if g.baseAnchors.grekUpperTonos : groupGrekUpperTonos.push gid if g.baseAnchors.grekUpperTonos : groupGrekUpperTonos.push gid
if [Dotless.get g] : begin if [Dotless.get g] : begin
@ -35,7 +33,6 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
TieMarkTo.push [TieMark.get g] TieMarkTo.push [TieMark.get g]
define [IotaLF] : UkMapToLookup UnicodeKnowledge.iotaBelowToLfTf define [IotaLF] : UkMapToLookup UnicodeKnowledge.iotaBelowToLfTf
define [OgonekTrailing] : UkMapToLookup UnicodeKnowledge.ogonekBelowToTRTf
define [GrekUpperTonosTf] : UkMapToLookup UnicodeKnowledge.upperGrekMarkToTonosTf define [GrekUpperTonosTf] : UkMapToLookup UnicodeKnowledge.upperGrekMarkToTonosTf
define [ToneToToneStart toneEnd] : begin 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 [IotaLF]
chain-rule groupLF markGlyphs.all 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 define lookupMarks2 : AddLookup sink : object
.type 'gsub_ligature' .type 'gsub_ligature'
@ -235,4 +226,32 @@ export : define [buildCCMP sink glyphStore markGlyphs] : begin
AddCommonFeature sink ccmp AddCommonFeature sink ccmp
EndLookupBlock rec sink 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 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 [CreateEmptyTable FinalizeTable MoveBackUtilityLookups] from"./table-util.mjs"
import [buildLigations] from"./gsub-ligation.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 [buildGrFeature] from"./gsub-gr.mjs"
import [buildFrac] from"./gsub-frac.mjs" import [buildFrac] from"./gsub-frac.mjs"
import [buildCVSS] from"./gsub-cv-ss.mjs" import [buildCVSS] from"./gsub-cv-ss.mjs"
@ -39,7 +39,7 @@ define [buildGSUB para glyphStore markGlyphs] : begin
buildGrFeature gsub glyphStore Gr.DenominatorForm buildGrFeature gsub glyphStore Gr.DenominatorForm
# ccmp # ccmp
buildCCMP gsub glyphStore markGlyphs local ccmp : buildCCMP gsub glyphStore markGlyphs
# frac # frac
buildFrac gsub glyphStore buildFrac gsub glyphStore
@ -58,6 +58,9 @@ define [buildGSUB para glyphStore markGlyphs] : begin
if para.enableCvSs : begin if para.enableCvSs : begin
buildCVSS gsub para glyphStore buildCVSS gsub para glyphStore
# ccmp post cv/ss (for Ogonek shape transform)
buildCCMPPostCvSs gsub ccmp glyphStore markGlyphs
# locl # locl
# Builds last, but the lookups are added into the beginning of the lookup list # Builds last, but the lookups are added into the beginning of the lookup list
buildLOCL gsub para glyphStore buildLOCL gsub para glyphStore