- CYRILLIC CAPITAL LETTER DZZE (`U+A688`) (#1799).
  - CYRILLIC SMALL LETTER DZZE (`U+A689`) (#1799).
  - MODIFIER LETTER CYRILLIC SMALL DZZE (`U+1E04A`) (#1799).
This commit is contained in:
be5invis 2023-06-26 22:07:20 -07:00
parent 6edc915e6c
commit 088b555749
30 changed files with 200 additions and 123 deletions

View file

@ -2,5 +2,8 @@
* Add Characters:
- CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH (`U+1F10F`).
- CIRCLED C WITH OVERLAID BACKSLASH (`U+1F16E`).
- CYRILLIC CAPITAL LETTER DZZE (`U+A688`) (#1799).
- CYRILLIC SMALL LETTER DZZE (`U+A689`) (#1799).
- MODIFIER LETTER CYRILLIC SMALL DZZE (`U+1E04A`) (#1799).
* Fix reversed shape of `U+1D12` (#1814).
* Improve density of quadruple arrows for better legibility at smaller font sizes.

View file

@ -639,7 +639,7 @@ glyph-block AutoBuild-Enclosure : begin
foreach [j : range 0 26] : compositions.push {(0x24B6 + j) {[glyphStore.queryNameOfUnicode (['A'.charCodeAt 0] + j)]} WideWidth1}
foreach [j : range 0 26] : compositions.push {(0x24D0 + j) {[glyphStore.queryNameOfUnicode (['a'.charCodeAt 0] + j)]} WideWidth1 0.5 (XH/2)}
createCircledGlyphs 1 compositions
do "Single-digit backslash-circled"
createBackslashCircledGlyphs 1 : list
list 0x1F10F {'dollar'} WideWidth2
@ -1356,16 +1356,16 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
define stdShrink : clamp 0.625 0.9 : StrokeWidthBlend 0.625 0.9
createPhoneticLigatures ToLetter 'phonetic' para.diversityM 2 stdShrink 1 : list
list 0x02A3 { 'd/phoneticLeft' 'z' } 'b'
list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'if'
list 0x02A4 { 'd/phoneticLeft' 'ezh' } 'bp'
list 0x02A5 { 'd/phoneticLeft' 'zCurlyTail' } 'b'
list 0x02A6 { 't/phoneticLeft2' 's/phoneticRight' } 'b'
list 0x02A7 { 't/teshLeft' 'esh' } 'if'
list 0x02A7 { 't/teshLeft' 'esh' } 'bp'
list 0x02A8 { 't/phoneticLeft1' 'cCurlyTail' } 'b'
list 0x02A9 { 'f/phoneticLeft' 'eng/phoneticRight' } 'if'
list 0x02A9 { 'f/phoneticLeft' 'eng/phoneticRight' } 'bp'
list 0x02AA { 'l/phoneticLeft' 's/phoneticRight' } 'b'
list 0x02AB { 'l/phoneticLeft' 'z' } 'b'
list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'if'
list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'if'
list 0xAB66 { 'd/phoneticLeft' 'zRTailBR' } 'bp'
list 0xAB67 { 't/phoneticLeft1' 'sRTail' } 'bp'
list 0xFB00 { 'f' 'f' } null
list 0xFB01 { 'f/compLigLeft1' 'dotlessi/compLigRight' } null
list 0xFB02 { 'f/compLigLeft2' 'l/compLigRight' } null
@ -1378,15 +1378,15 @@ glyph-block Autobuild-Pnonetic-Ligatures : begin
createPhoneticLigatures ToSuperscript 'phoneticSuperscript' 1 2 stdShrink 1 : list
list 0x10787 { 'd/phoneticLeft' 'z' } 'b'
list 0x1078A { 'd/phoneticLeft' 'ezh' } 'if'
list 0x10789 { 'd/phoneticLeft' 'zCurlyTail' } 'if'
list 0x1078A { 'd/phoneticLeft' 'ezh' } 'bp'
list 0x10789 { 'd/phoneticLeft' 'zCurlyTail' } 'bp'
list 0x107AC { 't/phoneticLeft2' 's/phoneticRight' } 'b'
list 0x107AE { 't/teshLeft' 'esh' } 'if'
list 0x107AE { 't/teshLeft' 'esh' } 'bp'
list 0x107AB { 't/phoneticLeft1' 'cCurlyTail' } 'b'
list 0x10790 { 'f/phoneticLeft' 'eng/phoneticRight' } 'if'
list 0x10790 { 'f/phoneticLeft' 'eng/phoneticRight' } 'bp'
list 0x10799 { 'l/phoneticLeft' 's/phoneticRight' } 'b'
list 0x1079A { 'l/phoneticLeft' 'z' } 'b'
list 0x10788 { 'd/phoneticLeft' 'zRTailBR' } 'if'
list 0x10788 { 'd/phoneticLeft' 'zRTailBR' } 'bp'
list 0x107AD { 't/phoneticLeft1' 'sRTail' } 'p'
createPhoneticLigatures ToSubscript 'tenSubscript' 1 2 1 0.5 : list

View file

@ -320,6 +320,7 @@ glyph-block Autobuild-Transformed : begin
list 0x1E047 'cyrl/yery'
list 0x1E048 'cyrl/e'
list 0x1E049 'cyrl/yu'
list 0x1E04A 'cyrl/dzze'
list 0x1E04B 'cyrl/schwa'
list 0x1E04C 'cyrl/Ukrainiani'
list 0x1E04D 'cyrl/je'

View file

@ -8,6 +8,9 @@ glyph-block Letter-Cyrillic-De : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors
glyph-block-import Letter-Greek-Lower-Epsilon : CyrZe EpsilonConfig
local BottomExtension : 0.25 * Stroke - LongJut
glyph-block-export CyrDeShape CyrDeItalicShapeT
define [CyrDeShape top left right _sw _desc] : glyph-proc
@ -18,17 +21,21 @@ glyph-block Letter-Cyrillic-De : begin
local xTopRight : mix xCutLeft xCutRight : StrokeWidthBlend 0.95 0.96
local swOuter : fallback _sw Stroke
local swInner : swOuter * [AdviceStroke 2.75] / Stroke
local desc : fallback _desc : -LongJut + 0.5 * Stroke
local desc : fallback _desc BottomExtension
include : HBar.b (xCutLeft - descenderOverflow) (xCutRight + descenderOverflow) 0 swOuter
include : HBar.b xTopLeft xTopRight 0 swOuter
include : VBar.r xTopRight 0 top swInner
include : dispiro
widths.lhs swInner
flat xTopLeft top
curl xTopLeft [mix 0 top 0.625]
g4 xCutLeft swOuter
include : VBar.l (xCutLeft - descenderOverflow) desc 0.1 swOuter
include : VBar.r (xCutRight + descenderOverflow) desc 0.1 swOuter
include : tagged 'footL' : union
HBar.b (xCutLeft - descenderOverflow) xTopLeft 0 swOuter
VBar.l (xCutLeft - descenderOverflow) desc 0.1 swOuter
include : tagged 'footR' : union
HBar.b xTopRight (xCutRight + descenderOverflow) 0 swOuter
VBar.r (xCutRight + descenderOverflow) desc 0.1 swOuter
include : if SLAB
then : dispiro
@ -37,25 +44,7 @@ glyph-block Letter-Cyrillic-De : begin
curl (xTopRight + descenderOverflow) top
else : HBar.t xTopLeft xTopRight top swOuter
define [CyrDeItalicShapeT sink left right _sw] : begin
local stroke : fallback _sw Stroke
local middle : mix left right 0.5
return : sink
widths.lhs (stroke * CThinB)
flat (right - OX - stroke * HVContrast * (1 - CThinB)) SmallArchDepthA
curl (right - OX - stroke * HVContrast * (1 - CThinB)) (XH - SmallArchDepthB)
arcvh
g4 (middle - CorrectionOMidS) (Ascender * 0.7 - O) [widths.lhs stroke]
archv
flat (left + OX) (XH - SmallArchDepthA)
curl (left + OX) SmallArchDepthB
arcvh
g4 (middle + CorrectionOMidS) O
archv
flat (right - OX) SmallArchDepthA
curl (right - OX) (XH - SmallArchDepthB)
quadControls 0 0.8
g4 (left + stroke * 1.1) Ascender
return : object desc xTopLeft xTopRight
define [CyrSoftDeShape top left right _sw] : glyph-proc
local descenderOverflow : if SLAB SideJut ((right - left) * 0.075)
@ -74,12 +63,12 @@ glyph-block Letter-Cyrillic-De : begin
create-glyph 'cyrl/De' 0x414 : glyph-proc
include : MarkSet.capital
include : ExtendBelowBaseAnchors (-LongJut + 0.5 * Stroke)
include : ExtendBelowBaseAnchors BottomExtension
include : CyrDeShape CAP SB RightSB
create-glyph 'cyrl/de.upright' : glyph-proc
include : MarkSet.e
include : ExtendBelowBaseAnchors (-LongJut + 0.5 * Stroke)
include : ExtendBelowBaseAnchors BottomExtension
include : CyrDeShape XH SB RightSB
create-glyph 'cyrl/deLongLeg' 0x1C81 : glyph-proc
@ -90,16 +79,86 @@ glyph-block Letter-Cyrillic-De : begin
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.capital
include : ExtendBelowBaseAnchors (-LongJut + 0.5 * Stroke)
include : ExtendBelowBaseAnchors BottomExtension
include : CyrSoftDeShape CAP df.leftSB df.rightSB df.mvs
create-glyph 'cyrl/deSoft' 0xA663 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.e
include : ExtendBelowBaseAnchors (-LongJut + 0.5 * Stroke)
include : ExtendBelowBaseAnchors BottomExtension
include : CyrSoftDeShape XH df.leftSB df.rightSB df.mvs
foreach { suffix { st sb }} [Object.entries EpsilonConfig] : do
define [DzzeDescendershape de] : begin
local sr : [mix RightSB Width 0.5] - O * 2
local sl : mix sr de.xTopRight 2
local sw : AdviceStroke 2.5 ((sr - sl + 2 * SB) / Width)
local shapeBot : de.desc - 0.5 * sw
local hook : Hook * (0 - shapeBot) / CAP
local ze : CyrZe 3 sb sw shapeBot sl sr 0.65 hook sw (0.5 * O) 0.5
return : union [ze.Shape] [ze.AutoEndSerifL]
create-glyph "cyrl/Dzze.\(suffix)" : glyph-proc
include : MarkSet.capital
include : ExtendBelowBaseAnchors BottomExtension
local de : include : CyrDeShape CAP SB RightSB
eject-contour 'footR'
include : DzzeDescendershape de
create-glyph "cyrl/dzze.upright.\(suffix)" : glyph-proc
include : MarkSet.e
include : ExtendBelowBaseAnchors BottomExtension
local de : include : CyrDeShape XH SB RightSB
eject-contour 'footR'
include : DzzeDescendershape de
## Italic
define [CyrDeItalicShapeT sink df _sw] : begin
local left df.leftSB
local right df.rightSB
local middle : mix left right 0.5
local sw : fallback _sw df.mvs
local ada : df.archDepthA SmallArchDepth
local adb : df.archDepthB SmallArchDepth
return : sink
widths.lhs (sw * CThinB)
flat (right - OX - sw * HVContrast * (1 - CThinB)) ada
curl (right - OX - sw * HVContrast * (1 - CThinB)) (XH - adb)
arcvh
g4 (middle - CorrectionOMidX * df.mvs) (Ascender * 0.7 - O) [widths.lhs sw]
archv
flat (left + OX) (XH - ada)
curl (left + OX) adb
arcvh
g4 (middle + CorrectionOMidX * sw) O
archv
flat (right - OX) ada
curl (right - OX) (XH - adb)
quadControls 0 0.8
g4 (left + sw * 1.1) Ascender
create-glyph 'cyrl/de.italic' : glyph-proc
include : MarkSet.b
include : CyrDeItalicShapeT dispiro SB RightSB Stroke
include : CyrDeItalicShapeT dispiro [DivFrame 1]
foreach { suffix { st sb }} [Object.entries EpsilonConfig] : do
create-glyph "cyrl/dzze.italic.\(suffix)" : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.bp
local dfLeft : df.slice 3 2 OX
include : CyrDeItalicShapeT dispiro dfLeft
local xZeLeft : dfLeft.leftSB + df.width - dfLeft.width + OX
local xZeRight : dfLeft.rightSB + df.width - dfLeft.width - OX
local ze : CyrZe 1 sb XH Descender xZeLeft xZeRight 0.65 Hook df.mvs
include : union [ze.Shape] [ze.AutoEndSerifL]
select-variant 'cyrl/Dzze' 0xA688 (follow -- 'cyrl/ze/topAttached')
select-variant 'cyrl/dzze.upright' (follow -- 'cyrl/ze/topAttached')
select-variant 'cyrl/dzze.italic' (follow -- 'cyrl/ze/topAttached')

View file

@ -22,13 +22,13 @@ glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
glyph-block-import Letter-Cyrillic-De : CyrDeShape CyrDeItalicShapeT
define [CyrDzzheDeShape df top] : glyph-proc
local [object subDf sw] : SubDfDim 0 2 df
local [object subDf sw] : SubDfDim 0 2 df OX
local left : if SLAB (subDf.leftSB + 0.5 * SideJut) subDf.leftSB
include : CyrDeShape top left subDf.rightSB sw
define [CyrDzzheDeItalicShape df] : glyph-proc
local [object subDf sw] : SubDfDim 0 2 df
include : CyrDeItalicShapeT dispiro subDf.leftSB subDf.rightSB sw
local [object subDf sw] : SubDfDim 0 2 df OX
include : CyrDeItalicShapeT dispiro subDf sw
create-glyph "cyrl/Dzzhe/left" : glyph-proc
define df : DivFrame para.diversityM 3.5
@ -66,7 +66,7 @@ glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
bilateralInwardSerifed { SLAB-INWARD SLAB-INWARD }
define [CyrZhweZeShape slabTop slabBot df top hook] : glyph-proc
local [object subDf sw] : SubDfDim 0 2 df
local [object subDf sw] : SubDfDim 0 2 df OX
local ze : CyrZe slabTop slabBot top 0 subDf.leftSB subDf.rightSB 0.65 hook sw
include : ze.Shape
include : ze.AutoStartSerifL
@ -90,26 +90,26 @@ glyph-block Letter-Cyrillic-Dzzhe-Zhwe : begin
do "zhe subglyphs"
glyph-block-import Letter-Cyrillic-Zhe : Zhe
define [CyrRightZheShape legShape fSlab df top barLeft] : glyph-proc
local [object subDf shift sw] : SubDfDim 1 3 df
local [object subDf shift sw] : SubDfDim 1 3 df OX
include : WithTransform [ApparentTranslate shift 0] : Zhe.HalfShape legShape fSlab subDf 0 top top
include : HBar.m barLeft (shift + subDf.middle) (0.5 * top) sw
define [DzzheLeft df] : begin
local [object subDf sw] : SubDfDim 0 2 df
local [object subDf sw] : SubDfDim 0 2 df OX
local swInner : sw * [AdviceStroke 2.75] / Stroke
return : [mix subDf.leftSB subDf.rightSB : StrokeWidthBlend 0.95 0.96] - 0.5 * HVContrast * swInner
define [ZhweZheShape legShape fSlab df top hook] : glyph-proc
local [object subDf sw] : SubDfDim 0 2 df
local [object subDf sw] : SubDfDim 0 2 df OX
local ze : CyrZe 0 0 top 0 subDf.leftSB subDf.rightSB 0.65 hook (0.5 * sw)
include : difference [CyrRightZheShape legShape fSlab df top subDf.middle] [ze.ShapeMask]
glyph-block-import Letter-Cyrillic-De : CyrDeItalicShapeT
define [DzzheZheItalicShape legShape fSlab df] : glyph-proc
local [object subDf sw] : SubDfDim 0 2 df
local [object subDf sw] : SubDfDim 0 2 df OX
include : difference
CyrRightZheShape legShape fSlab df XH subDf.middle
CyrDeItalicShapeT spiro-outline subDf.leftSB subDf.rightSB sw
CyrDeItalicShapeT spiro-outline subDf sw
define ZheConfig : object
straight { Zhe.StraightLegs SLAB }

View file

@ -17,7 +17,7 @@ glyph-block Letter-Cyrillic-Multiocular-O : begin
local subDf : df.slice 5 2
set-width df.width
include : df.markSet.if
include : df.markSet.bp
local pMidRowBottom 0.327
local pMidRowSw (-0.25)

View file

@ -27,6 +27,7 @@ glyph-block Letter-Cyrillic-Orthography : begin
orthographic-italic 'cyrl/gheDescender' 0x4F7
orthographic-italic 'cyrl/ve' 0x432
orthographic-italic 'cyrl/gheStrokeHook' 0x4FB
orthographic-italic 'cyrl/dzze' 0xA689
orthographic-italic 'latn/yatSakha' 0xAB60
# Accented forms

View file

@ -161,7 +161,7 @@ glyph-block Letter-Cyrillic-Yeri : begin
right -- right
stroke -- stroke
jut -- jut
yStart -- (top - Hook - 0.5 * stroke)
yStart -- (top - TailY - 0.5 * stroke)
eject-contour 'serifYeriLT'
include : VerticalHook.l xLeftBarLeftEdge (top - TailY - 0.5 * stroke) (xTopBarLeftEnd - xLeftBarLeftEdge - 0.5 * stroke) (-TailY) stroke

View file

@ -19,6 +19,7 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
define SLAB-NONE 0
define SLAB-CLASSICAL 1
define SLAB-INWARD 2
define FLAT-CONNECTION 3
define StdBlend 0.65
@ -63,23 +64,24 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
export : define [AutoStartSerifR] : begin
define [object stroke] : Dim
return : match slabTop
[Just SLAB-CLASSICAL] : ArcStartSerif.R RightSB top stroke Hook
[Just SLAB-INWARD] : ArcStartSerif.InwardR RightSB top stroke Hook
[Just SLAB-CLASSICAL] : ArcStartSerif.R RightSB top stroke hook
[Just SLAB-INWARD] : ArcStartSerif.InwardR RightSB top stroke hook
__ : glyph-proc
export : define [AutoEndSerifR] : begin
define [object stroke] : Dim
return : match slabBot
[Just SLAB-CLASSICAL] : ArcEndSerif.R RightSB bot stroke Hook
[Just SLAB-INWARD] : ArcEndSerif.InwardR RightSB bot stroke Hook
[Just SLAB-CLASSICAL] : ArcEndSerif.R RightSB bot stroke hook
[Just SLAB-INWARD] : ArcEndSerif.InwardR RightSB bot stroke hook
__ : glyph-proc
glyph-block-export CyrZe
define [CyrZe slabTop slabBot top bot left right blend hook _stroke] : namespace
define [CyrZe slabTop slabBot top bot left right blend hook _stroke _xo _op] : namespace
local xo : fallback _xo OX
export : define [Dim] : begin
local stroke : fallback _stroke : AdviceStroke2 2 3 (top - bot)
local midx : mix right left blend
local midy : mix bot top OverlayPos
local midy : mix bot top [fallback _op OverlayPos]
local topHeight : top - bot
local midyHeight : midy - bot
local adb : topHeight - [mix (midyHeight + stroke / 2) (topHeight - O - stroke) (ArchDepthA / (ArchDepthA + ArchDepthB))] + TanSlope * HVContrast * stroke
@ -94,7 +96,10 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
match slabTop
[Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs left middle top stroke hook
[Just SLAB-INWARD] : InwardSlabArcStart.LtrRhs left middle top stroke hook
__ : list [g4 (left - O) (top - hook) : widths.rhs stroke] [hookstart (top - O)]
[Just FLAT-CONNECTION] : list
flat (left - xo) top [widths.rhs.heading stroke Rightward]
curl (middle - CorrectionOMidX * stroke) top [heading Rightward]
__ : list [g4 (left - xo) (top - hook) : widths.rhs stroke] [hookstart (top - O)]
g4 right [YSmoothMidR top (midy - stroke / 2)]
arcvh
flat middle (midy - (fine - stroke / 2)) [widths.heading 0 fine Leftward]
@ -107,11 +112,11 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
flat midx (midy + (fine - stroke / 2)) [widths.rhs.heading fine Rightward]
curl middle (midy + (fine - stroke / 2)) [heading Rightward]
archv
g4 (right - OX * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs stroke]
g4 (right - xo * 2) [YSmoothMidR (midy + stroke / 2) bot] [widths.rhs stroke]
match slabBot
[Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs left middle bot stroke hook
[Just SLAB-INWARD] : InwardSlabArcEnd.RtlRhs left middle bot stroke hook
__ : list [hookend (bot + O) (sw -- stroke)] [g4 (left + O) (bot + hook)]
__ : list [hookend (bot + O) (sw -- stroke)] [g4 (left + xo) (bot + hook)]
export : define [UpperShape] : CyrZeUpperShapeT dispiro
@ -161,17 +166,18 @@ glyph-block Letter-Greek-Lower-Epsilon : begin
export : define [AutoStartSerifL] : begin
define [object stroke] : Dim
return : match slabTop
[Just SLAB-CLASSICAL] : ArcStartSerif.L left top stroke Hook
[Just SLAB-INWARD] : ArcStartSerif.InwardL left top stroke Hook
[Just SLAB-CLASSICAL] : ArcStartSerif.L left top stroke hook
[Just SLAB-INWARD] : ArcStartSerif.InwardL left top stroke hook
__ : glyph-proc
export : define [AutoEndSerifL] : begin
define [object stroke] : Dim
return : match slabBot
[Just SLAB-CLASSICAL] : ArcEndSerif.L left bot stroke Hook
[Just SLAB-INWARD] : ArcEndSerif.InwardL left bot stroke Hook
[Just SLAB-CLASSICAL] : ArcEndSerif.L left bot stroke hook
[Just SLAB-INWARD] : ArcEndSerif.InwardL left bot stroke hook
__ : glyph-proc
glyph-block-export EpsilonConfig
define EpsilonConfig : object
serifless { SLAB-NONE SLAB-NONE }
unilateralSerifed { SLAB-CLASSICAL SLAB-NONE }

View file

@ -66,11 +66,11 @@ glyph-block Letter-Greek-Lower-Xi : begin
curl [Math.min (RightSB - (Stroke - [mix Descender Stroke 0.5]) * 1.1 - 1) [mix SB RightSB 0.5]] (Descender + Stroke)
create-glyph 'grek/xi.flatTop' : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : LowerXiShape SHAPE-FLAT-TOP
create-glyph 'grek/xi.rounded' : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : LowerXiShape SHAPE-ROUNDED
select-variant 'grek/xi' 0x3BE
select-variant 'grek/xi' 0x3BE

View file

@ -11,7 +11,7 @@ glyph-block Letter-Greek-Lower-Zeta : begin
create-glyph 'grek/zeta' 0x3B6 : glyph-proc
local fine : AdviceStroke 3
include : MarkSet.if
include : MarkSet.bp
include : HBar.m SB RightSB (Ascender - HalfStroke)
include : dispiro
g4 RightSB (Ascender - Stroke) [widths.rhs fine]

View file

@ -45,7 +45,7 @@ glyph-block Letter-Greek-Psi : begin
create-glyph 'grek/psi' 0x3C8 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : PsiBaseShape df Descender 0 XH Ascender false false SLAB false
create-glyph 'cyrl/psi' 0x471 : glyph-proc

View file

@ -43,7 +43,7 @@ glyph-block Letter-Greek-Upper-Phi : begin
create-glyph 'grek/varphi' 0x3D5 : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : VarPhiRing 0 df 0 XH
include : VBar.m df.middle Descender HalfStroke
@ -52,7 +52,7 @@ glyph-block Letter-Greek-Upper-Phi : begin
create-glyph 'cyrl/ef.serifless' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : VarPhiRing 1 df 0 XH
include : VBar.m df.middle Descender HalfStroke
@ -72,7 +72,7 @@ glyph-block Letter-Greek-Upper-Phi : begin
create-glyph 'cyrl/ef.cursive' : glyph-proc
local df : DivFrame para.diversityM 3
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : VarPhiRing 1 df 0 XH
local hd : FlatHookDepth df

View file

@ -16,7 +16,7 @@ glyph-block Letter-Latin-Lower-Eszet : begin
define TAILED 2
define [Traditional fFlathook slab tail] : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local l : SB * 1
local xHook : [mix SB RightSB 0.75] + HalfStroke * HVContrast
local hd : FlatHookDepth [DivFrame 1]

View file

@ -103,7 +103,7 @@ glyph-block Letter-Latin-Ezh : begin
include : RevEzhShape XH Descender
create-glyph 'lyogh.serifless' : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : EzhShape XH Descender 0.4
include : VBar.l SB (XH * 0.1) Ascender

View file

@ -138,32 +138,32 @@ glyph-block Letter-Latin-Long-S : begin
foreach { suffix { serifStyle pShift } } [Object.entries SerifSuffixesDescending] : do
create-glyph "longs.flatHookDescending\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local m : Middle - pShift * (JBalance + HalfStroke * HVContrast)
include : LongSFlatHookNoTailShape m Descender false
include : StandardSerifs m serifStyle
create-forked-glyph "longsbar.flatHookDescending\(suffix)" : LongSBentHookOverlayBar m
create-glyph "longs.flatHookDescendingExt\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local m : Middle - pShift * (JBalance + HalfStroke * HVContrast)
include : LongSFlatHookNoTailShape m Descender false
include : HBar.t RightSB (2 * Width) Ascender
create-glyph "longs.flatHookTailed\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook
include : StandardSerifs (Middle - HalfStroke * HVContrast) serifStyle
create-forked-glyph "longsbar.flatHookTailed\(suffix)" : LongSSymmetricOverlayBar Middle
create-glyph "longs.flatHookTailedExt\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook
include : StandardSerifs (Middle - HalfStroke * HVContrast) serifStyle
include : HBar.t (Middle + HookX + (0.25 - TanSlope) * Stroke) (2 * Width) Ascender
create-glyph "longs.flatHookDiagonalTailed\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : union
intersection [MaskAbove 0] [LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook]
SmallFDiagonalTail [DivFrame 1] (Middle - HalfStroke * HVContrast)
@ -171,7 +171,7 @@ glyph-block Letter-Latin-Long-S : begin
create-forked-glyph "longsbar.flatHookDiagonalTailed\(suffix)" : LongSSymmetricOverlayBar Middle
create-glyph "longs.flatHookDiagonalTailedExt\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : union
intersection [MaskAbove 0] [LongSShape Ascender Descender (HookX + 0.25 * Stroke) Hook]
SmallFDiagonalTail [DivFrame 1] (Middle - HalfStroke * HVContrast)
@ -179,7 +179,7 @@ glyph-block Letter-Latin-Long-S : begin
include : HBar.t (Middle + HookX + (0.25 - TanSlope) * Stroke) (2 * Width) Ascender
create-glyph "longs.bentHookDescending\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local m : StdSmallFBarLeftPos true
include : LongSBentHookBase (XH / 2) m SLAB_SERIFLESS
include : VBar.l m Descender 0
@ -187,7 +187,7 @@ glyph-block Letter-Latin-Long-S : begin
create-forked-glyph "longsbar.bentHookDescending\(suffix)" : LongSBentHookOverlayBar m
create-glyph "longs.bentHookTailed\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local m : StdSmallFBarLeftPos true
include : LongSBentHookBase (XH / 2) m SLAB_SERIFLESS
include : LongSLowerHalf 1 (m + HalfStroke * HVContrast) (XH / 2 - O) Descender (HookX + 0.25 * Stroke) Hook Stroke
@ -195,7 +195,7 @@ glyph-block Letter-Latin-Long-S : begin
create-forked-glyph "longsbar.bentHookTailed\(suffix)" : LongSBentHookOverlayBar m
create-glyph "longs.bentHookDiagonalTailed\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local m : StdSmallFBarLeftPos true
include : LongSBentHookBase (XH / 2) m SLAB_SERIFLESS
include : SmallFDiagonalTail [DivFrame 1] m
@ -215,7 +215,7 @@ glyph-block Letter-Latin-Long-S : begin
PalatalHook.r (x -- RightSB) (y -- 0) (xLink -- Middle) (refSw -- [AdviceStroke 3])
maskOut -- [intersection [MaskBelow 0] [MaskLeft (Middle + HVContrast * HalfStroke)]]
create-glyph "eshRetroflexHook" 0x1D98 : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : LongSShape Ascender 0 (HookX + 0.25 * Stroke) Hook
include : RetroflexHook.l
x -- Middle - (HookX + 0.25 * Stroke)
@ -223,7 +223,7 @@ glyph-block Letter-Latin-Long-S : begin
yOverflow -- Stroke
create-glyph "eshCurlyTail" 0x286 : glyph-proc
include : MarkSet.if
include : MarkSet.bp
local fine : AdviceStroke 3.5
local rinner : LongJut / 2 - fine / 2
local m1 : Middle - HalfStroke * HVContrast - FBalance

View file

@ -38,7 +38,7 @@ glyph-block Letter-Latin-Thorn : begin
include : ThornShape yThornBowlBot
create-glyph 'thorn' 0xFE : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : OBarLeft.shape
include : VBar.l SB Descender Ascender
if SLAB : begin
@ -69,6 +69,6 @@ glyph-block Letter-Latin-Thorn : begin
alias 'grek/Sho' 0x3F7 'Thorn'
create-glyph 'grek/sho' 0x3F8 : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : OBarLeft.shape
include : VBar.l SB Descender Ascender

View file

@ -145,9 +145,9 @@ glyph-block Letter-Latin-Lower-F : begin
function [body] : object # hooks
serifless { [if body pNarrowSide 0.95] CH-NONE 'b' }
serifed { [if body pNarrowSide 0.95] CH-SERIF 'b' }
extended { [if body pNarrowSide 0.95] CH-EXTENSION 'if' }
tailed { [if body pNarrowSide 1] CH-HOOK 'if' }
diagonalTailed { [if body pNarrowSide 1] CH-DIAGONAL-HOOK 'if' }
extended { [if body pNarrowSide 0.95] CH-EXTENSION 'bp' }
tailed { [if body pNarrowSide 1] CH-HOOK 'bp' }
diagonalTailed { [if body pNarrowSide 1] CH-DIAGONAL-HOOK 'bp' }
object # crossbar
"" fbar
crossbarAtXHeight XH

View file

@ -84,13 +84,13 @@ glyph-block Letter-Latin-Lower-H : begin
include : Serifs fTailed true
create-glyph "hHookTopLTail.\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : refer-glyph "hHookTop.\(suffix)"
eject-contour 'serifRB'
include : EngHook RightSB 0 Descender
create-glyph "heng.\(suffix)" : glyph-proc
include : MarkSet.if
include : MarkSet.bp
include : refer-glyph "h.\(suffix)"
eject-contour 'serifRB'
include : EngHook RightSB 0 Descender
@ -164,7 +164,7 @@ glyph-block Letter-Latin-Lower-H : begin
include [refer-glyph 'cedillaBelow']
include : ApparentTranslate shift 0
include [refer-glyph src]
include : MarkSet.if
include : MarkSet.bp
set-base-anchor 'belowBraceL' ((-Middle) + shift - 0.5 * markExtend) belowMarkMid
set-base-anchor 'belowBraceR' ((-Middle) + shift + 0.5 * markExtend) belowMarkMid

View file

@ -358,7 +358,7 @@ glyph-block Letter-Latin-Lower-I : begin
create-glyph 'looprevesh' 0x1AA : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.if
include : df.markSet.bp
local fine : AdviceStroke 4
include : dispiro
widths.center fine

View file

@ -261,7 +261,7 @@ glyph-block Letter-Latin-Lower-T : begin
create-glyph "tLTail.\(suffix)" : glyph-proc
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : (Style.LTBody || Style.Body) df top 0
local attach : currentGlyph.gizmo.unapply (currentGlyph.baseAnchors.lTailHookAttach || currentGlyph.baseAnchors.bottomRight)
@ -272,12 +272,12 @@ glyph-block Letter-Latin-Lower-T : begin
create-glyph "tRTail.\(suffix)" : glyph-proc
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : Style.Retroflex df top Descender
create-glyph "tHookTopRTail.\(suffix)" : glyph-proc
set-width df.width
include : df.markSet.if
include : df.markSet.bp
include : Style.Retroflex df XH Descender
local attach : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.hooktopAttach
include : TopHook.mBarInner attach.x XH Ascender

View file

@ -250,7 +250,7 @@ glyph-block Letter-Latin-Upper-B : begin
include : ClosedEpsilonShape XH
create-glyph 'grek/beta' 0x3B2 : glyph-proc
include : MarkSet.if
include : MarkSet.bp
define pBar 0.55
define fine : Stroke * CThin
define yMiddle : [mix 0 Ascender pBar] - Stroke * 0.7 # Bottom edge

View file

@ -50,7 +50,7 @@ glyph-block Letter-Latin-Upper-J : begin
define [JDescendingBase df dfHook top] : glyph-proc
set-width df.width
include : df.markSet.[if (top > XH) 'if' 'p']
include : df.markSet.[if (top > XH) 'bp' 'p']
local center : df.middle + JBalance + HalfStroke * HVContrast
set-base-anchor 'above' (center - HVContrast * HalfStroke) top
@ -67,7 +67,7 @@ glyph-block Letter-Latin-Upper-J : begin
g4 hookx (Descender + JHook)
set JFullHookBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.rightSB - HalfStroke * HVContrast - JBalance2) (df.leftSB) top 0 'capital'
set JDescendingBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.middle + JBalance) (df.middle + JBalance - LongJut - HalfStroke * HVContrast) top Descender 'if'
set JDescendingBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.middle + JBalance) (df.middle + JBalance - LongJut - HalfStroke * HVContrast) top Descender 'bp'
define [JCurlyTailBaseT df xc xCo top bottom markClass] : glyph-proc
set-width df.width
include : df.markSet.(markClass)
@ -90,7 +90,7 @@ glyph-block Letter-Latin-Upper-J : begin
define [JDescendingFlatHookBase df dfHook top] : glyph-proc
set-width df.width
include : df.markSet.[if (top > XH) 'if' 'p']
include : df.markSet.[if (top > XH) 'bp' 'p']
include : FlatHookDotlessJShape df dfHook top
crossLeft -- (df.middle - (dfHook.middle - [mix 0 dfHook.leftSB : mix 1 dfHook.div 2]))
barCenter -- (df.middle + 0.25 * JBalance * df.div * [mix 1 df.div 2])
@ -98,7 +98,7 @@ glyph-block Letter-Latin-Upper-J : begin
define [JDescendingFlatHookSerifedBase df dfHook top] : glyph-proc
set-width df.width
include : df.markSet.[if (top > XH) 'if' 'p']
include : df.markSet.[if (top > XH) 'bp' 'p']
include : FlatHookDotlessJShape df df top
crossLeft -- [mix 0 SB : mix 1 df.div 2]
barCenter -- (df.middle + JBalance * df.div)

View file

@ -157,16 +157,16 @@ glyph-block Letter-Latin-Upper-Q : begin
define QInnerVertSw : Math.min [AdviceStroke 3.5] ((RightSB - SB - Stroke * 2 * HVContrast) / (2 * HVContrast))
define QConfig : object
straight { QStdBody Stroke QStaraightTail 'if' 'p' }
curlyTailed { QStdBody Stroke QCurlyTail 'if' 'p' }
crossingCurlyTailed { QStdBody QInnerVertSw QCrossingCurlyTail 'if' 'p' }
straight { QStdBody Stroke QStaraightTail 'bp' 'p' }
curlyTailed { QStdBody Stroke QCurlyTail 'bp' 'p' }
crossingCurlyTailed { QStdBody QInnerVertSw QCrossingCurlyTail 'bp' 'p' }
crossing { QStdBody [AdviceStroke 4] QCrossing 'capital' 'e' }
crossingBaseline { QStdBody [AdviceStroke 4] QCrossingBaseline 'capital' 'e' }
verticalCrossing { QStdBody QInnerVertSw QVerticalCrossing 'if' 'p' }
verticalCrossing { QStdBody QInnerVertSw QVerticalCrossing 'bp' 'p' }
horizontalTailed { QHorizontalTailedBody [AdviceStroke 3] QHorizontalTail 'capital' 'e' }
detachedTailed { QStdBody Stroke QDetachedTail 'if' 'p' }
detachedBendTailed { QStdBody Stroke QDetachedBendTail 'if' 'p' }
openSwash { QOpenSwashyBody Stroke QSwashyTail 'if' 'p' }
detachedTailed { QStdBody Stroke QDetachedTail 'bp' 'p' }
detachedBendTailed { QStdBody Stroke QDetachedBendTail 'bp' 'p' }
openSwash { QOpenSwashyBody Stroke QSwashyTail 'bp' 'p' }
foreach { suffix { body swTailInner tailShape mkCapital mkSmcp } } [Object.entries QConfig] : do
@ -220,4 +220,4 @@ glyph-block Letter-Latin-Upper-Q : begin
union
QTail (Middle - tailDeltaX)
QTail (Middle + tailDeltaX)
QInner
QInner

View file

@ -790,19 +790,21 @@ glyph-block Letter-Shared-Shapes : begin
# Descender of cyrillics
glyph-block-export CyrDescender
define CyrDescender : Descenders : function [x y xLink yAttach yOverflow sw] : glyph-proc
include : ExtendBelowBaseAnchors (y - LongJut + 0.5 * Stroke)
local extension : 0.25 * Stroke - LongJut
include : ExtendBelowBaseAnchors (y + extension)
include : union
xLinkStroke xLink x yAttach sw
VBar.m x yAttach (y - LongJut + 0.5 * Stroke) sw
VBar.m x yAttach (y + extension) sw
glyph-block-export CyrTailDescender
define CyrTailDescender : Descenders : function [x y xLink yAttach yOverflow sw] : glyph-proc
include : ExtendBelowBaseAnchors (y - LongJut + 0.5 * Stroke)
local extension : 0.25 * Stroke - LongJut
include : ExtendBelowBaseAnchors (y + extension)
include : union
xLinkStroke xLink x yAttach sw
intersection
MaskBelow (yAttach + Stroke)
MaskAbove (y - LongJut + 0.5 * Stroke)
MaskAbove (y + extension)
ExtLineCenter 16 sw (x + 0.24 * Descender) (y + 0.5 * sw + Descender) x y
# Palatal Hooks

View file

@ -154,7 +154,7 @@ export : define [calculateMetrics para] : begin
local smOfSma : ada + delta
local smOfSmb : adb - delta
local yNotAdjusted : mix top bot (smOfSmb / (smOfSma + smOfSmb))
return : yNotAdjusted - delta
return : yNotAdjusted - delta * [Math.min 1 ((top - bot) / (ada + adb))]
define [YSmoothMidL top bot _ada _adb] : begin
local ada : fallback _ada ArchDepthA
local adb : fallback _adb ArchDepthB
@ -162,7 +162,7 @@ export : define [calculateMetrics para] : begin
local smOfSma : ada + delta
local smOfSmb : adb - delta
local yNotAdjusted : mix top bot (smOfSma / (smOfSma + smOfSmb))
return : yNotAdjusted + delta
return : yNotAdjusted + delta * [Math.min 1 ((top - bot) / (ada + adb))]
define ArchDepthA : ArchDepth - TanSlope * SmoothAdjust
define ArchDepthB : ArchDepth + TanSlope * SmoothAdjust
define SmallArchDepthA : SmallArchDepth - TanSlope * SmoothAdjust
@ -356,7 +356,7 @@ define [MarksetDiv p sbMul me] : begin
oper : buildStandardMarkSet {.top me.OperTop .bot me.OperBot}
tack : buildStandardMarkSet {.top me.TackTop .bot me.TackBot}
plus : buildStandardMarkSet {.top me.PlusTop .bot me.PlusBot}
if : buildStandardMarkSet {.top me.Ascender .bot me.Descender}
bp : buildStandardMarkSet {.top me.Ascender .bot me.Descender}
capDesc : buildStandardMarkSet {.top me.CAP .bot me.Descender}
export : define DesignParameters : object

View file

@ -118,8 +118,8 @@ class NormalRectifier {
if (isTangentValid(d)) {
this.m_biKnots[0].origTangent = d;
} else {
console.error(this.m_biKnots);
throw new Error("NaN angle detected.");
this.m_biKnots[0].origTangent = { x: 0, y: 0 };
// throw new Error("NaN angle detected.");
}
}
if (this.m_biKnots[this.m_nKnotsProcessed]) {
@ -127,8 +127,8 @@ class NormalRectifier {
if (isTangentValid(d)) {
this.m_biKnots[this.m_nKnotsProcessed].origTangent = d;
} else {
console.error(this.m_biKnots);
throw new Error("NaN angle detected.");
this.m_biKnots[this.m_nKnotsProcessed].origTangent = { x: 0, y: 0 };
// throw new Error("NaN angle detected.");
}
}
this.m_nKnotsProcessed += 1;

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "iosevka",
"version": "24.1.4",
"version": "25.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "iosevka",
"version": "24.1.4",
"version": "25.0.0",
"dependencies": {
"@iarna/toml": "^2.2.5",
"@msgpack/msgpack": "^2.8.0",

View file

@ -1,6 +1,6 @@
{
"name": "iosevka",
"version": "24.1.4",
"version": "25.0.0",
"main": "./font-src/index.js",
"scripts": {
"build": "verda -f verdafile.mjs",

View file

@ -4324,6 +4324,7 @@ description = "Serifless Cyrillic Lower Ze (`з`)"
selector."latn/epsilon" = "serifless"
selector."latn/epsilon/descBase" = "seriflessDesc"
selector."cyrl/ze" = "serifless"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "serifless"
[prime.cyrl-ze.variants.unilateral-serifed]
@ -4332,6 +4333,7 @@ description = "Cyrillic Lower Ze (`з`) with serif at top"
selector."latn/epsilon" = "unilateralSerifed"
selector."latn/epsilon/descBase" = "bilateralSerifed"
selector."cyrl/ze" = "unilateralSerifed"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "unilateralSerifed"
[prime.cyrl-ze.variants.bilateral-serifed]
@ -4340,6 +4342,7 @@ description = "Cyrillic Lower Ze (`з`) with serif at both top and bottom"
selector."latn/epsilon" = "bilateralSerifed"
selector."latn/epsilon/descBase" = "bilateralSerifed"
selector."cyrl/ze" = "bilateralSerifed"
selector."cyrl/ze/topAttached" = "bilateralSerifed"
selector."cyrl/ksi" = "unilateralSerifed"
[prime.cyrl-ze.variants.unilateral-inward-serifed]
@ -4348,6 +4351,7 @@ description = "Cyrillic Lower Ze (`з`) with inward serif at top"
selector."latn/epsilon" = "unilateralInwardSerifed"
selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc"
selector."cyrl/ze" = "unilateralInwardSerifed"
selector."cyrl/ze/topAttached" = "serifless"
selector."cyrl/ksi" = "unilateralInwardSerifed"
[prime.cyrl-ze.variants.bilateral-inward-serifed]
@ -4356,6 +4360,7 @@ description = "Cyrillic Lower Ze (`з`) with inward serif at both top and bottom
selector."latn/epsilon" = "bilateralInwardSerifed"
selector."latn/epsilon/descBase" = "unilateralInwardSerifedDesc"
selector."cyrl/ze" = "bilateralInwardSerifed"
selector."cyrl/ze/topAttached" = "bilateralInwardSerifed"
selector."cyrl/ksi" = "unilateralInwardSerifed"