Improved spacing of tailed / flat-tailed i, l and iota characters (#905).

This commit is contained in:
be5invis 2021-03-05 18:51:11 -08:00
parent dc4acbed7b
commit 31b61400c9
12 changed files with 138 additions and 120 deletions

View file

@ -4,3 +4,4 @@
- Commercial Minus Sign (`U+2052`). - Commercial Minus Sign (`U+2052`).
- Precedes Under Relation (`U+22B0`) and Succeeds Under Relation (`U+22B1`) - Precedes Under Relation (`U+22B0`) and Succeeds Under Relation (`U+22B1`)
- Heavy Black Curved Downwards And Rightwards Arrow (`U+27A5`) - Heavy Black Curved Downwards And Rightwards Arrow (`U+27A5`)
* Improved spacing of tailed / flat-tailed `i`, `l` and `iota` characters (#905).

View file

@ -93,6 +93,14 @@ glyph-block Common-Derivatives : begin
include : FlipAround x y include : FlipAround x y
set currentGlyph.autoRefPriority [query-glyph src].autoRefPriority set currentGlyph.autoRefPriority [query-glyph src].autoRefPriority
define [HalfAdvance] : this.advanceWidth / 2
define [TurnMarks k fnOverride] : glyph-proc
local df : DivFrame (currentGlyph.advanceWidth / Width)
local mx : compositeBaseAnchors [df.markSet.(k)]
if fnOverride [fnOverride df] {.baseAnchors {.}}
include mx
# Dual derivatives # Dual derivatives
define [HCombine newid unicode id1 id2 spacing] : begin define [HCombine newid unicode id1 id2 spacing] : begin
if [not newid] : throw : new Error "Target ID not specified" if [not newid] : throw : new Error "Target ID not specified"
@ -119,6 +127,7 @@ glyph-block Common-Derivatives : begin
glyph-block-export select-variant orthographic-italic refer-glyph query-glyph with-related-glyphs glyph-block-export select-variant orthographic-italic refer-glyph query-glyph with-related-glyphs
glyph-block-export alias turned HDual HCombine VDual VCombine glyph-is-needed glyph-block-export alias turned HDual HCombine VDual VCombine glyph-is-needed
glyph-block-export HalfAdvance TurnMarks
glyph-block Recursive-Build : begin glyph-block Recursive-Build : begin
define [Fork gs ps] : begin define [Fork gs ps] : begin

View file

@ -102,8 +102,8 @@ glyph-block Letter-Latin-Lower-F : begin
create-glyph 'ifishhook' 0x27F : glyph-proc create-glyph 'ifishhook' 0x27F : glyph-proc
include : MarkSet.p include : MarkSet.p
include : VBar Middle Descender (XH - Hook) include : VBar Middle Descender (XH - Hook)
include : VerticalHook Middle (XH - Hook) (-LongJut + LBalance) (-Hook + HalfStroke) include : VerticalHook Middle (XH - Hook) (-LongJut + [IBalance2 : DivFrame 1]) (-Hook + HalfStroke)
include : Translate LBalance 0 include : Translate [IBalance2 : DivFrame 1] 0
if SLAB : begin if SLAB : begin
include : CenterBottomSerif Middle Descender Jut include : CenterBottomSerif Middle Descender Jut

View file

@ -12,30 +12,44 @@ glyph-block Letter-Latin-Lower-I : begin
glyph-block-import Letter-Shared : CreateDottedComposition glyph-block-import Letter-Shared : CreateDottedComposition
glyph-block-import Letter-Shared-Shapes : FlatHookDepth DiagonalTailR DiagonalTailStdDepth glyph-block-import Letter-Shared-Shapes : FlatHookDepth DiagonalTailR DiagonalTailStdDepth
glyph-block-export OverrideILMarks
define [OverrideILMarks df xMiddle yTop] : glyph-proc
set-base-anchor 'above' xMiddle yTop
set-base-anchor 'below' xMiddle 0
set-base-anchor 'overlay' xMiddle (yTop * OverlayPos)
set-base-anchor 'topright' (xMiddle + df.rightSB - df.middle) yTop
glyph-block-export OverrideILMarksSerifed
define [OverrideILMarksSerifed df xMiddle yTop] : glyph-proc
set-base-anchor 'above' xMiddle yTop
set-base-anchor 'below' xMiddle 0
set-base-anchor 'overlay' [mix df.middle xMiddle 0.5] (yTop * OverlayPos)
set-base-anchor 'topright' (xMiddle + df.rightSB - df.middle) yTop
### dotless i, i and iota ### dotless i, i and iota
glyph-block-export IotaShape glyph-block-export IotaShape
define [IotaShape] : params [df top [addTopSerif false]] : glyph-proc define [IotaShape] : params [df top [addTopSerif false]] : glyph-proc
local middle : df.middle - [if addTopSerif 0 LBalance2] local xMiddle : df.middle - [if addTopSerif 0 : IBalance2 df]
local tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hd : FlatHookDepth df local hd : FlatHookDepth df
set-base-anchor 'above' middle top
set-base-anchor 'below' middle 0
set-base-anchor 'overlay' middle (top * OverlayPos)
set-base-anchor 'topright' (middle + RightSB - Middle) top
if addTopSerif : include : tagged 'serifLT' if addTopSerif : include : tagged 'serifLT'
LeftwardTopSerif middle top (LongJut * df.div) LeftwardTopSerif xMiddle top (LongJut * df.div)
include : dispiro include : dispiro
widths.center widths.center
flat middle top [heading Downward] flat xMiddle top [heading Downward]
curl middle hd.y curl xMiddle hd.y
arcvh.superness DesignParameters.tightHookSuperness arcvh.superness DesignParameters.tightHookSuperness
flat (middle + hd.x - HalfStroke * HVContrast) HalfStroke flat (xMiddle + hd.x - HalfStroke * HVContrast) HalfStroke
curl (middle + [Math.max (hd.x - HalfStroke * HVContrast + 1) (LongJut * 1.05 * df.div)] + HalfStroke * TanSlope) HalfStroke curl (xMiddle + [Math.max (hd.x - HalfStroke * HVContrast + 1) tailLength] + HalfStroke * TanSlope) HalfStroke
include : OverrideILMarks df xMiddle top
glyph-block-export ItalicDotlessIShape glyph-block-export ItalicDotlessIShape
define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc
local fine : AdviceStroke 3
local shift : (1 - df.div) * 0.2 local shift : (1 - df.div) * 0.2
local left : [mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift)] - HalfStroke * HVContrast local xBarMiddle : mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift)
local left : xBarMiddle - HalfStroke * HVContrast
local right : mix SB df.rightSB (1.1 - shift) local right : mix SB df.rightSB (1.1 - shift)
local rightTerm : Math.max right (left + HookX + Stroke) local rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.55 * df.div) local middle : mix left right (0.55 * df.div)
@ -44,32 +58,33 @@ glyph-block Letter-Latin-Lower-I : begin
flat left top [heading Downward] flat left top [heading Downward]
curl left (SmallSmoothB * 0.8) curl left (SmallSmoothB * 0.8)
hookend O hookend O
g4 rightTerm (Hook * [StrokeWidthBlend 0.85 1] * df.div) g4 rightTerm (Hook * [StrokeWidthBlend 0.85 1] * df.div) [widths.lhs fine]
if addTopSerif : include : dispiro if addTopSerif : include : dispiro
flat (left - (LongJut * df.div) + HalfStroke * HVContrast) top [widths 0 Stroke] flat (left - (LongJut * df.div) + HalfStroke * HVContrast) top [widths 0 Stroke]
curl left top curl left top
if setMarks : begin
set-base-anchor 'above' (left + HalfStroke * HVContrast + [StrokeWidthBlend 0.25 0] * TanSlope * df.width) top local xDot : xBarMiddle + [StrokeWidthBlend 0.25 0] * TanSlope * df.width
set-base-anchor 'below' middle 0 include : OverrideILMarks df xDot top
glyph-block-export TailedDotlessShape glyph-block-export TailedDotlessShape
define [TailedDotlessShape] : params [df top [xMiddle (df.middle - LBalance2)] [setMarks true] [hookScale 1] [addTopSerif false]] : glyph-proc define [TailedDotlessShape] : params [df top [setMarks true] [addTopSerif false]] : glyph-proc
local x0 : mix HalfStroke (HalfStroke + (Hook - Stroke + 1) * 0.85 * df.div + LBalance2) hookScale local xMiddle : df.middle - [if addTopSerif 0 : IBalance2 df]
local x1 : mix HalfStroke ([Math.max (Hook - HalfStroke + 1) (LongJut * df.div)] + LBalance2) hookScale local tailLength : LongJut * 1.05 * [mix 1 df.div 0.75]
local hookScaleX : mix 1 df.div 0.5
local hookScaleY : mix 1 df.div 1.25
local x0 : mix HalfStroke (HalfStroke + (Hook - Stroke + 1) * 0.85 * df.div + [IBalance2 df]) hookScaleX
local x1 : mix HalfStroke ([Math.max (Hook - HalfStroke + 1) tailLength] + [IBalance2 df]) hookScaleX
include : dispiro include : dispiro
widths.center widths.center
flat xMiddle top [heading Downward] flat xMiddle top [heading Downward]
curl xMiddle [mix Stroke Hook hookScale] curl xMiddle [mix Stroke Hook hookScaleY]
arcvh arcvh 16
g4.right.mid (xMiddle + x0) (HalfStroke + O) [heading Rightward] g4.right.mid (xMiddle + x0) (HalfStroke + O) [heading Rightward]
g4 (xMiddle + x1) (HalfStroke + (1 - 2 * hookScale) * O) [heading Rightward] g4 (xMiddle + x1) (HalfStroke + (1 - 2 * hookScaleY) * O) [heading Rightward]
if setMarks : begin
set-base-anchor 'above' xMiddle top
set-base-anchor 'below' xMiddle 0
set-base-anchor 'overlay' xMiddle (top * OverlayPos)
set-base-anchor 'topright' (xMiddle + RightSB - Middle) top
if addTopSerif : begin if addTopSerif : begin
include : tagged 'serifLT' : LeftwardTopSerif xMiddle top (LongJut * df.div) include : tagged 'serifLT' : LeftwardTopSerif xMiddle top (LongJut * df.div)
include : OverrideILMarks df xMiddle top
create-glyph 'dotlessi.straight' : glyph-proc create-glyph 'dotlessi.straight' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
@ -78,12 +93,13 @@ glyph-block Letter-Latin-Lower-I : begin
include : VBar (df.middle) 0 XH include : VBar (df.middle) 0 XH
create-glyph 'dotlessi.hooky' : glyph-proc create-glyph 'dotlessi.hooky' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
local balance : IBalance2 * df.div * df.div local xMiddle : df.middle + [IBalance2 df]
include : VBar (df.middle + balance) 0 XH include : OverrideILMarks df xMiddle XH
include : LeftwardTopSerif (df.middle + balance) XH (LongJut * df.div) include : VBar xMiddle 0 XH
include : LeftwardTopSerif xMiddle XH (LongJut * df.div)
create-glyph 'dotlessi.zshaped' : glyph-proc create-glyph 'dotlessi.zshaped' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
@ -102,18 +118,22 @@ glyph-block Letter-Latin-Lower-I : begin
include : RightwardBottomSerif df.middle 0 (LongJut * df.div) include : RightwardBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'dotlessi.hookyBottom' : glyph-proc create-glyph 'dotlessi.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : VBar (df.middle - LBalance2) 0 XH local xMiddle : df.middle - [IBalance2 df]
include : RightwardBottomSerif (df.middle - LBalance2) 0 (LongJut * df.div) include : OverrideILMarks df xMiddle XH
include : VBar xMiddle 0 XH
include : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
create-glyph 'latn/Iota.hookyBottom' : glyph-proc create-glyph 'latn/Iota.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.capital include : df.markSet.capital
include : VBar (df.middle - LBalance2) 0 CAP local xMiddle : df.middle - [IBalance2 df]
include : RightwardBottomSerif (df.middle - LBalance2) 0 (LongJut * df.div) include : OverrideILMarks df xMiddle CAP
include : VBar xMiddle 0 CAP
include : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
create-glyph 'dotlessi.serifless' : glyph-proc create-glyph 'dotlessi.serifless' : glyph-proc
local df : DivFrame para.diversityII local df : DivFrame para.diversityII
@ -125,7 +145,8 @@ glyph-block Letter-Latin-Lower-I : begin
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
local balance : IBalance * df.div * df.div local balance : IBalance df
include : OverrideILMarksSerifed df (df.middle + balance) XH
include : VBar (df.middle + balance) 0 XH include : VBar (df.middle + balance) 0 XH
include : LeftwardTopSerif (df.middle + balance) XH (LongJut * df.div - balance) include : LeftwardTopSerif (df.middle + balance) XH (LongJut * df.div - balance)
include : RightwardBottomSerif df.middle 0 (LongJut * df.div) include : RightwardBottomSerif df.middle 0 (LongJut * df.div)
@ -135,7 +156,8 @@ glyph-block Letter-Latin-Lower-I : begin
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
local balance : IBalance * df.div * df.div local balance : IBalance df
include : OverrideILMarksSerifed df (df.middle + balance) XH
include : VBar (df.middle + balance) 0 XH include : VBar (df.middle + balance) 0 XH
include : LeftwardTopSerif (df.middle + balance) XH include : LeftwardTopSerif (df.middle + balance) XH
mix Jut ((LongJut * df.div) - balance) 0.5 mix Jut ((LongJut * df.div) - balance) 0.5
@ -143,23 +165,23 @@ glyph-block Letter-Latin-Lower-I : begin
include : LeftwardBottomSerif df.middle 0 (LongJut * df.div) include : LeftwardBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'dotlessi.tailed' : glyph-proc create-glyph 'dotlessi.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
if para.isItalic if (para.isItalic && para.diversityII >= (3 / 4))
: then : begin : then : begin
include : ItalicDotlessIShape df XH (setMarks -- true) (addTopSerif -- false) include : ItalicDotlessIShape df XH (addTopSerif -- false)
: else : begin : else : begin
include : TailedDotlessShape df XH (addTopSerif -- false) include : TailedDotlessShape df XH (addTopSerif -- false)
create-glyph 'grek/iota.tailed' : glyph-proc create-glyph 'grek/iota.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : TailedDotlessShape df XH (addTopSerif -- false) include : TailedDotlessShape df XH (addTopSerif -- false)
create-glyph 'latn/Iota.tailed' : glyph-proc create-glyph 'latn/Iota.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.capital include : df.markSet.capital
include : TailedDotlessShape df CAP (addTopSerif -- false) include : TailedDotlessShape df CAP (addTopSerif -- false)
@ -168,9 +190,9 @@ glyph-block Letter-Latin-Lower-I : begin
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
if para.isItalic if (para.isItalic && para.diversityI >= (3 / 4))
: then : begin : then : begin
include : ItalicDotlessIShape df XH (setMarks -- true) (addTopSerif -- true) include : ItalicDotlessIShape df XH (addTopSerif -- true)
: else : begin : else : begin
include : TailedDotlessShape df XH (addTopSerif -- true) include : TailedDotlessShape df XH (addTopSerif -- true)
@ -187,13 +209,13 @@ glyph-block Letter-Latin-Lower-I : begin
include : TailedDotlessShape df CAP (addTopSerif -- true) include : TailedDotlessShape df CAP (addTopSerif -- true)
create-glyph 'dotlessi.flatTailed' : glyph-proc create-glyph 'dotlessi.flatTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : IotaShape df XH (addTopSerif -- false) include : IotaShape df XH (addTopSerif -- false)
create-glyph 'latn/Iota.flatTailed' : glyph-proc create-glyph 'latn/Iota.flatTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.capital include : df.markSet.capital
include : IotaShape df CAP (addTopSerif -- false) include : IotaShape df CAP (addTopSerif -- false)
@ -211,31 +233,27 @@ glyph-block Letter-Latin-Lower-I : begin
include : IotaShape df CAP (addTopSerif -- true) include : IotaShape df CAP (addTopSerif -- true)
glyph-block-export DTailDotlessIShape glyph-block-export DTailDotlessIShape
define [DTailDotlessIShape] : params [top [addTopSerif false]] : glyph-proc define [DTailDotlessIShape] : params [df top [addTopSerif false]] : glyph-proc
local df : DivFrame para.diversityI local xMiddle : df.middle - [if addTopSerif 0 : IBalance2 df]
local middle : df.middle - [if addTopSerif 0 LBalance2] include : OverrideILMarks df xMiddle top
set-base-anchor 'above' middle top
set-base-anchor 'below' middle 0
set-base-anchor 'overlay' middle (top * OverlayPos)
set-base-anchor 'topright' (middle + RightSB - Middle) top
if addTopSerif : include : tagged 'serifLT' if addTopSerif : include : tagged 'serifLT'
LeftwardTopSerif middle top (LongJut * df.div) LeftwardTopSerif xMiddle top (LongJut * df.div)
include : dispiro include : dispiro
widths.center widths.center
flat middle top [heading Downward] flat xMiddle top [heading Downward]
DiagonalTailR df middle 0 [DiagonalTailStdDepth df Stroke] Stroke DiagonalTailR df xMiddle 0 [DiagonalTailStdDepth df Stroke] Stroke
create-glyph 'dotlessi.diagonalTailed' : glyph-proc create-glyph 'dotlessi.diagonalTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : DTailDotlessIShape XH (addTopSerif -- false) include : DTailDotlessIShape df XH (addTopSerif -- false)
create-glyph 'dotlessi.serifedDiagonalTailed' : glyph-proc create-glyph 'dotlessi.serifedDiagonalTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : DTailDotlessIShape XH (addTopSerif -- true) include : DTailDotlessIShape df XH (addTopSerif -- true)
select-variant 'dotlessi' 0x131 select-variant 'dotlessi' 0x131
create-glyph 'iogonek.dotless' : glyph-proc create-glyph 'iogonek.dotless' : glyph-proc
@ -254,7 +272,7 @@ glyph-block Letter-Latin-Lower-I : begin
alias 'latn/iota' 0x269 'grek/iota' alias 'latn/iota' 0x269 'grek/iota'
select-variant 'latn/Iota' 0x196 (follow -- 'grek/iota') select-variant 'latn/Iota' 0x196 (follow -- 'grek/iota')
turned 'turni' 0x1D09 'i' [lambda [] : this.advanceWidth / 2] (XH / 2) [MarkSet.p] turned 'turni' 0x1D09 'i' HalfAdvance (XH / 2) [TurnMarks 'p']
with-related-glyphs 'cyrl/ghe.SRB' null 'dotlessi' : lambda [src sel] : glyph-proc with-related-glyphs 'cyrl/ghe.SRB' null 'dotlessi' : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS

View file

@ -64,10 +64,10 @@ glyph-block Letter-Latin-Lower-J : begin
include : VBar df.middle Descender XH include : VBar df.middle Descender XH
create-glyph 'dotlessj.hooky' : glyph-proc create-glyph 'dotlessj.hooky' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.p include : df.markSet.p
local balance : IBalance2 * df.div * df.div local balance : IBalance2 df
include : LeftwardTopSerif (df.middle + balance) XH (LongJut * df.div) include : LeftwardTopSerif (df.middle + balance) XH (LongJut * df.div)
include : VBar (df.middle + balance) Descender XH include : VBar (df.middle + balance) Descender XH

View file

@ -12,21 +12,19 @@ glyph-block Letter-Latin-Lower-L : begin
glyph-block-import Marks : markMiddle aboveMarkBot aboveMarkTop glyph-block-import Marks : markMiddle aboveMarkBot aboveMarkTop
glyph-block-import Letter-Latin-Lower-I : IotaShape TailedDotlessShape ItalicDotlessIShape glyph-block-import Letter-Latin-Lower-I : IotaShape TailedDotlessShape ItalicDotlessIShape
glyph-block-import Letter-Latin-Lower-I : DTailDotlessIShape glyph-block-import Letter-Latin-Lower-I : DTailDotlessIShape
glyph-block-import Letter-Latin-Lower-I : OverrideILMarks OverrideILMarksSerifed
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
create-glyph 'l.hooky' : glyph-proc create-glyph 'l.hooky' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
local balance : LBalance2 * df.div * df.div local balance : IBalance2 df
local middle : df.middle + balance local xMiddle : df.middle + balance
set-base-anchor 'above' middle CAP include : OverrideILMarks df xMiddle CAP
set-base-anchor 'below' middle 0 include : VBar xMiddle 0 (CAP - Stroke)
set-base-anchor 'overlay' middle (CAP * OverlayPos) include : LeftwardTopSerif xMiddle CAP (LongJut * df.div)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
include : VBar (df.middle + balance) 0 (CAP - Stroke)
include : LeftwardTopSerif (df.middle + balance) CAP (LongJut * df.div)
create-glyph 'l.zshaped' : glyph-proc create-glyph 'l.zshaped' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
@ -35,7 +33,6 @@ glyph-block Letter-Latin-Lower-L : begin
include : VBar (df.middle) 0 (CAP - Stroke) include : VBar (df.middle) 0 (CAP - Stroke)
include : tagged 'serifLT' : LeftwardTopSerif (df.middle) CAP (LongJut * df.div) include : tagged 'serifLT' : LeftwardTopSerif (df.middle) CAP (LongJut * df.div)
include : tagged 'serifRB' : RightwardBottomSerif (df.middle) 0 (LongJut * df.div) include : tagged 'serifRB' : RightwardBottomSerif (df.middle) 0 (LongJut * df.div)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.serifless' : glyph-proc create-glyph 'l.serifless' : glyph-proc
local df : DivFrame para.diversityII local df : DivFrame para.diversityII
@ -43,25 +40,24 @@ glyph-block Letter-Latin-Lower-L : begin
include : df.markSet.b include : df.markSet.b
include : VBar (df.middle) 0 (CAP * 0.6) include : VBar (df.middle) 0 (CAP * 0.6)
include : VBar (df.middle) (CAP * 0.4) CAP include : VBar (df.middle) (CAP * 0.4) CAP
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
set currentGlyph.autoRefPriority (-2) set currentGlyph.autoRefPriority (-2)
create-glyph 'l.serifed' : glyph-proc create-glyph 'l.serifed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
local balance : LBalance * df.div * df.div local balance : IBalance df
include : OverrideILMarksSerifed df (df.middle + balance) CAP
include : VBar (df.middle + balance) 0 CAP include : VBar (df.middle + balance) 0 CAP
include : LeftwardTopSerif (df.middle + balance) CAP ((LongJut * df.div) - balance) include : LeftwardTopSerif (df.middle + balance) CAP ((LongJut * df.div) - balance)
include : CenterBottomSerif df.middle 0 (LongJut * df.div) include : CenterBottomSerif df.middle 0 (LongJut * df.div)
set-base-anchor 'overlay' (df.middle + balance / 2) (CAP * OverlayPos)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.serifedAsymmetric' : glyph-proc create-glyph 'l.serifedAsymmetric' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
local balance : LBalance * df.div * df.div local balance : IBalance df
include : OverrideILMarksSerifed df (df.middle + balance) CAP
include : VBar (df.middle + balance) 0 CAP include : VBar (df.middle + balance) 0 CAP
include : LeftwardTopSerif (df.middle + balance) CAP include : LeftwardTopSerif (df.middle + balance) CAP
mix Jut ((LongJut * df.div) - balance) 0.5 mix Jut ((LongJut * df.div) - balance) 0.5
@ -70,7 +66,7 @@ glyph-block Letter-Latin-Lower-L : begin
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.tailed' : glyph-proc create-glyph 'l.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
if para.isItalic if para.isItalic
@ -90,7 +86,7 @@ glyph-block Letter-Latin-Lower-L : begin
include : TailedDotlessShape df CAP (addTopSerif -- true) include : TailedDotlessShape df CAP (addTopSerif -- true)
create-glyph 'l.flatTailed' : glyph-proc create-glyph 'l.flatTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
include : IotaShape df CAP (addTopSerif -- false) include : IotaShape df CAP (addTopSerif -- false)
@ -102,16 +98,16 @@ glyph-block Letter-Latin-Lower-L : begin
include : IotaShape df CAP (addTopSerif -- true) include : IotaShape df CAP (addTopSerif -- true)
create-glyph 'l.diagonalTailed' : glyph-proc create-glyph 'l.diagonalTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
include : DTailDotlessIShape CAP (addTopSerif -- false) include : DTailDotlessIShape df CAP (addTopSerif -- false)
create-glyph 'l.serifedDiagonalTailed' : glyph-proc create-glyph 'l.serifedDiagonalTailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
include : DTailDotlessIShape CAP (addTopSerif -- true) include : DTailDotlessIShape df CAP (addTopSerif -- true)
create-glyph 'l.phoneticLeft' : glyph-proc create-glyph 'l.phoneticLeft' : glyph-proc
local df : DivFrame 1 local df : DivFrame 1
@ -128,20 +124,18 @@ glyph-block Letter-Latin-Lower-L : begin
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.hookyBottom' : glyph-proc create-glyph 'l.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityII
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
local middle : df.middle - LBalance2 local xMiddle : df.middle - [IBalance2 df]
set-base-anchor 'above' middle CAP include : OverrideILMarks df xMiddle CAP
set-base-anchor 'below' middle 0 include : VBar xMiddle 0 CAP
set-base-anchor 'overlay' middle (CAP * OverlayPos) include : RightwardBottomSerif xMiddle 0 (LongJut * df.div)
set-base-anchor 'topright' (middle + RightSB - Middle) CAP
include : VBar middle 0 CAP
include : RightwardBottomSerif middle 0 (LongJut * df.div)
select-variant 'l' 'l' select-variant 'l' 'l'
alias 'cyrl/palochka' 0x4CF 'l' alias 'cyrl/palochka' 0x4CF 'l'
turned 'turnl' 0xA781 'l' Middle (XH / 2) [MarkSet.p]
turned 'turnl' 0xA781 'l' HalfAdvance (XH / 2) [TurnMarks 'p']
glyph-block-import Letter-Blackboard : BBS BBD BBBarCenter glyph-block-import Letter-Blackboard : BBS BBD BBBarCenter
create-glyph 'mathbb/l' 0x1D55D : glyph-proc create-glyph 'mathbb/l' 0x1D55D : glyph-proc
@ -159,7 +153,7 @@ glyph-block Letter-Latin-Lower-L : begin
include : FlatSlashShape anchor.x anchor.y (0.5 * OverlayStroke) (0.8 * stretch) (0.4 * stretch) include : FlatSlashShape anchor.x anchor.y (0.5 * OverlayStroke) (0.8 * stretch) (0.4 * stretch)
local LDotOptions : list local LDotOptions : list
list 'hooky' 0 list 'hooky' Stroke
list 'zshaped' Stroke list 'zshaped' Stroke
list 'serifed' Stroke list 'serifed' Stroke
list 'serifedTailed' Stroke list 'serifedTailed' Stroke
@ -174,10 +168,9 @@ glyph-block Letter-Latin-Lower-L : begin
foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)] foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)]
create-glyph ('ldot.' + suffix) : glyph-proc create-glyph ('ldot.' + suffix) : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame ([query-glyph ('l.' + suffix)].advanceWidth / Width)
set-width df.width set-width df.width
include [refer-glyph ('l.' + suffix)] AS_BASE include [refer-glyph ('l.' + suffix)] AS_BASE
include : Translate (df.width / 2 - [query-glyph ('l.' + suffix)].advanceWidth / 2) 0
include : Translate (-DotRadius / 2) 0 include : Translate (-DotRadius / 2) 0
include : RingAt [Math.max (df.middle + HalfStroke + DotRadius) (df.rightSB - DotRadius)] [mix y0 CAP 0.5] DotRadius include : RingAt [Math.max (df.middle + HalfStroke + DotRadius) (df.rightSB - DotRadius)] [mix y0 CAP 0.5] DotRadius
@ -186,7 +179,7 @@ glyph-block Letter-Latin-Lower-L : begin
create-glyph 'lrtail' 0x26D : glyph-proc create-glyph 'lrtail' 0x26D : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
include : refer-glyph "rtailBR" include : refer-glyph "rtailBR"
include : Translate (df.middle + LBalance2 + HalfStroke * HVContrast) 0 include : Translate (df.middle + [IBalance2 df] + HalfStroke * HVContrast) 0
include : refer-glyph "l.hooky" include : refer-glyph "l.hooky"
include : df.markSet.if include : df.markSet.if
@ -227,12 +220,12 @@ glyph-block Letter-Latin-Lower-L : begin
create-glyph 'lbelt' 0x26C : glyph-proc create-glyph 'lbelt' 0x26C : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS include [refer-glyph 'l.serifed'] AS_BASE ALSO_METRICS
include : Belt (df.middle + LBalance * df.div * df.div) include : Belt (df.middle + [IBalance * df])
create-glyph 'lbeltrtail' 0xA78E : glyph-proc create-glyph 'lbeltrtail' 0xA78E : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
include [refer-glyph 'lrtail'] AS_BASE ALSO_METRICS include [refer-glyph 'lrtail'] AS_BASE ALSO_METRICS
include : Belt (df.middle + LBalance2 * df.div * df.div) include : Belt (df.middle + [IBalance2 df])
create-glyph 'looprevesh' 0x1AA : glyph-proc create-glyph 'looprevesh' 0x1AA : glyph-proc
include : MarkSet.if include : MarkSet.if

View file

@ -154,12 +154,8 @@ glyph-block Letter-Latin-Lower-R : begin
include : dfR.markSet.e include : dfR.markSet.e
include : BBRShape dfN rStraight 0 0 include : BBRShape dfN rStraight 0 0
define [HalfAdvance] : this.advanceWidth / 2 define [TurnRMarks k] : TurnMarks k
define [TurnRMarks k] : glyph-proc function [df] : return {.baseAnchors {.bottomright {.x (df.rightSB - RBalance) .y 0}}}
local df : DivFrame (currentGlyph.advanceWidth / Width)
local mx : compositeBaseAnchors [df.markSet.(k)]
begin {.baseAnchors {.bottomright {.x (df.rightSB - RBalance) .y 0}}}
include mx
turned 'turnr' 0x279 'r' HalfAdvance (XH / 2) [TurnRMarks 'e'] turned 'turnr' 0x279 'r' HalfAdvance (XH / 2) [TurnRMarks 'e']

View file

@ -315,10 +315,8 @@ glyph-block Letter-Shared-Shapes : begin
define rInY : DiagonalTailInnerRadius define rInY : DiagonalTailInnerRadius
define rInX : 1 * rInY define rInX : 1 * rInY
define InvSqrt2 : 1 / [Math.sqrt 2] define InvSqrt2 : 1 / [Math.sqrt 2]
define dxTurn : 0.5 * sw * HVContrast + rInX define dxTurn : 0.5 * sw * HVContrast + rInX * df.div
define dxTurnObl : if (sign > 0) define dxTurnObl : if (sign > 0) (-0.75 * TanSlope * rInY) 0
-0.75 * TanSlope * rInY
0 * TanSlope * (0.5 * mocSwMid + rInY)
define dyTurn : 0.5 * mocSwMid define dyTurn : 0.5 * mocSwMid
define dxTailStart : dxTurn + InvSqrt2 * rInX + InvSqrt2 * 0.5 * mocFine * HVContrast define dxTailStart : dxTurn + InvSqrt2 * rInX + InvSqrt2 * 0.5 * mocFine * HVContrast
define dyTailStart : dyTurn + (1 - InvSqrt2 + [if (sign > 0) 0 (TanSlope)]) * (0.5 * mocFine + rInY) define dyTailStart : dyTurn + (1 - InvSqrt2 + [if (sign > 0) 0 (TanSlope)]) * (0.5 * mocFine + rInY)

View file

@ -111,12 +111,10 @@ export : define [calculateMetrics para] : begin
define TailAdjX : Width * 0.2 define TailAdjX : Width * 0.2
define TailAdjY : XH * 0.25 define TailAdjY : XH * 0.25
define LBalance : LongJut * 0.04 define [IBalance df] : df.div * df.div * [fallback para.ibalance (LongJut * 0.04)] # Serifed
define IBalance : fallback para.ibalance (LongJut * 0.04) define [IBalance2 df] : df.div * [fallback para.ibalance2 (LongJut * 0.14)] # Hooky, Tailed
define LBalance2 : LongJut * 0.14
define IBalance2 : fallback para.ibalance (LongJut * 0.14)
define JBalance : fallback para.jbalance 0 define JBalance : fallback para.jbalance 0
define JBalance2 : fallback para.jbalance2 (Stroke * 0.25 + LBalance) define JBalance2 : fallback para.jbalance2 (Stroke * 0.25 + LongJut * 0.04)
define TBalance : fallback para.tbalance JBalance define TBalance : fallback para.tbalance JBalance
define TBalance2 : fallback para.tbalance2 TBalance define TBalance2 : fallback para.tbalance2 TBalance
define RBalance : fallback para.rbalance (JBalance * 0.3) define RBalance : fallback para.rbalance (JBalance * 0.3)
@ -202,7 +200,7 @@ export : define [calculateMetrics para] : begin
Rightward Leftward UpwardT DownwardT LeftwardT RightwardT O OX OXHook Hook AHook SHook RHook Rightward Leftward UpwardT DownwardT LeftwardT RightwardT O OX OXHook Hook AHook SHook RHook
JHook FHook HookX Smooth SmallSmooth Stroke DotSize PeriodSize HBarPos OverlayPos JHook FHook HookX Smooth SmallSmooth Stroke DotSize PeriodSize HBarPos OverlayPos
LongJut Jut VJut Accent AccentX AccentBaseOffset AccentStackOffset CThin CThinB SLAB LongJut Jut VJut Accent AccentX AccentBaseOffset AccentStackOffset CThin CThinB SLAB
TailAdjX TailAdjY LBalance IBalance LBalance2 IBalance2 JBalance JBalance2 TBalance TailAdjX TailAdjY IBalance IBalance2 JBalance JBalance2 TBalance
TBalance2 RBalance RBalance2 FBalance OneBalance WideWidth0 WideWidth1 WideWidth2 WideWidth3 TBalance2 RBalance RBalance2 FBalance OneBalance WideWidth0 WideWidth1 WideWidth2 WideWidth3
WideWidth4 Ess EssQuestion HalfStroke RightSB Middle CapMiddle DotRadius PeriodRadius WideWidth4 Ess EssQuestion HalfStroke RightSB Middle CapMiddle DotRadius PeriodRadius
SideJut SmoothA SmoothB SmallSmoothA SmallSmoothB CorrectionOMidX CorrectionOMidS SideJut SmoothA SmoothB SmallSmoothA SmallSmoothB CorrectionOMidX CorrectionOMidS

View file

@ -129,7 +129,8 @@ define-macro glyph-block-import : syntax-rules
define allExports : object define allExports : object
Common-Derivatives `[select-variant orthographic-italic refer-glyph query-glyph Common-Derivatives `[select-variant orthographic-italic refer-glyph query-glyph
alias turned HDual HCombine VDual VCombine with-related-glyphs glyph-is-needed] alias turned HDual HCombine VDual VCombine with-related-glyphs glyph-is-needed
HalfAdvance TurnMarks]
CommonShapes `[Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CommonShapes `[Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt
CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape
@ -210,8 +211,8 @@ define-macro glyph-block : syntax-rules
HVContrast Upward Downward Rightward Leftward UpwardT DownwardT LeftwardT RightwardT O OX HVContrast Upward Downward Rightward Leftward UpwardT DownwardT LeftwardT RightwardT O OX
OXHook Hook AHook SHook RHook JHook FHook HookX Smooth SmallSmooth Stroke DotSize OXHook Hook AHook SHook RHook JHook FHook HookX Smooth SmallSmooth Stroke DotSize
PeriodSize HBarPos OverlayPos LongJut Jut VJut Accent AccentX AccentBaseOffset PeriodSize HBarPos OverlayPos LongJut Jut VJut Accent AccentX AccentBaseOffset
AccentStackOffset CThin CThinB SLAB TailAdjX TailAdjY LBalance IBalance LBalance2 AccentStackOffset CThin CThinB SLAB TailAdjX TailAdjY IBalance IBalance2
IBalance2 JBalance JBalance2 TBalance TBalance2 RBalance RBalance2 FBalance OneBalance JBalance JBalance2 TBalance TBalance2 RBalance RBalance2 FBalance OneBalance
WideWidth0 WideWidth1 WideWidth2 WideWidth3 WideWidth4 Ess EssQuestion HalfStroke RightSB WideWidth0 WideWidth1 WideWidth2 WideWidth3 WideWidth4 Ess EssQuestion HalfStroke RightSB
Middle CapMiddle DotRadius PeriodRadius SideJut SmoothA SmoothB SmallSmoothA Middle CapMiddle DotRadius PeriodRadius SideJut SmoothA SmoothB SmallSmoothA
SmallSmoothB CorrectionOMidX CorrectionOMidS AdviceStroke AdviceStroke2 MVertStroke SmallSmoothB CorrectionOMidX CorrectionOMidS AdviceStroke AdviceStroke2 MVertStroke

View file

@ -177,11 +177,15 @@ module.exports = class Glyph {
if (g.baseAnchors) for (const k in g.baseAnchors) this.baseAnchors[k] = g.baseAnchors[k]; if (g.baseAnchors) for (const k in g.baseAnchors) this.baseAnchors[k] = g.baseAnchors[k];
} }
setBaseAnchor(id, x, y) { setBaseAnchor(id, x, y) {
if (isNaN(x - 0) || isNaN(y - 0)) throw new Error(`NaN found in anchor coord for ${id}`);
this.baseAnchors[id] = new Anchor(x, y).transform(this.gizmo); this.baseAnchors[id] = new Anchor(x, y).transform(this.gizmo);
} }
setMarkAnchor(id, x, y, mbx, mby) { setMarkAnchor(id, x, y, mbx, mby) {
if (isNaN(x - 0) || isNaN(y - 0)) throw new Error(`NaN found in anchor coord for ${id}`);
this.markAnchors[id] = new Anchor(x, y).transform(this.gizmo); this.markAnchors[id] = new Anchor(x, y).transform(this.gizmo);
if (mbx != null && mby != null) { if (mbx != null && mby != null) {
if (isNaN(mbx - 0) || isNaN(mby - 0))
throw new Error(`NaN found in anchor coord for ${id}`);
this.baseAnchors[id] = new Anchor(mbx, mby).transform(this.gizmo); this.baseAnchors[id] = new Anchor(mbx, mby).transform(this.gizmo);
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "iosevka", "name": "iosevka",
"version": "5.0.4", "version": "5.0.5",
"main": "./font-src/index.js", "main": "./font-src/index.js",
"scripts": { "scripts": {
"build": "node utility/ensure-verda-exists && verda -f verdafile.js", "build": "node utility/ensure-verda-exists && verda -f verdafile.js",