Add 4 chars from Cyrl Ext.B and 2 from Latn Ext.E (#2337)

This commit is contained in:
John McWilliams 2024-05-20 18:02:25 -04:00 committed by GitHub
parent 503a1c8448
commit d6a49822d3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 127 additions and 35 deletions

View file

@ -1,6 +1,12 @@
* Reduce fully-serifed variants of turned m (`U+019C`, `U+026F`, `U+0270`) and Cyrillic Italic Lower {Sha|Scha} (`U+0448`, `U+0449`) under monospace.
* Add characters:
- SQUAT BLACK RIGHTWARDS ARROW (`U+27A7`).
- CYRILLIC CAPITAL LETTER CCHE (`U+A686`).
- CYRILLIC SMALL LETTER CCHE (`U+A687`).
- CYRILLIC CAPITAL LETTER HWE (`U+A694`).
- CYRILLIC SMALL LETTER HWE (`U+A695`).
- LATIN SMALL LETTER U WITH SHORT RIGHT LEG (`U+AB4E`).
- LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG (`U+AB4F`).
- LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK (`U+1DF12`).
- LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK (`U+1DF17`).
- LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD (`U+1F800`) ... DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD (`U+1F80B`).

View file

@ -10,7 +10,8 @@ glyph-block Letter-Cyrillic-Che : begin
glyph-block-import Mark-Adjustment : LeaningAnchor
glyph-block-import Letter-Shared : CreateTurnedLetter
glyph-block-import Letter-Shared-Shapes : SerifFrame RightwardTailedBar DToothlessRise
glyph-block-import Letter-Shared-Shapes : CyrDescender BottomExtension
glyph-block-import Letter-Shared-Shapes : TopHook CyrDescender BottomExtension
glyph-block-import Letter-Latin-Lower-M : EarlessCornerDoubleArchSmallMShape
glyph-block-export BODY
define BODY : object
@ -31,7 +32,7 @@ glyph-block Letter-Cyrillic-Che : begin
glyph-block-export CyrCheShape
define [CyrCheShape] : with-params [df top pyBar bodyType slabType [sw df.mvs] [yBarOffset DToothlessRise]] : glyph-proc
local bar : top * [fallback pyBar 0.5] + yBarOffset
include : match bodyType
include : tagged 'strokeR' : match bodyType
[Just BODY.TAILED] : RightwardTailedBar df.rightSB 0 top (sw -- sw)
__ : VBar.r df.rightSB 0 top sw
include : dispiro
@ -63,19 +64,57 @@ glyph-block Letter-Cyrillic-Che : begin
[Just SERIFS.BR] sf.rb.outer
__ : glyph-proc
define [CyrCcheShape] : with-params [df top pyBar bodyType slabType [sw df.mvs] [yBarOffset DToothlessRise]] : glyph-proc
local bar : top * [fallback pyBar 0.5]
include : EarlessCornerDoubleArchSmallMShape df (top - bar + HalfStroke) 0 0 0
eject-contour 'barL'
include : FlipAround df.middle (top / 2)
include : match bodyType
[Just BODY.TAILED] : RightwardTailedBar df.rightSB 0 top (sw -- sw)
__ : VBar.r df.rightSB 0 top sw
local sf : SerifFrame.fromDf df top 0
include : tagged 'serifLT' : match slabType
[Just SERIFS.ALL] [if sf.enoughSpaceForFullSerifs sf.lt.full sf.lt.outer]
[Just SERIFS.TOP] [if sf.enoughSpaceForFullSerifs sf.lt.full sf.lt.outer]
[Just SERIFS.TL-BR] sf.lt.outer
[Just SERIFS.TL] sf.lt.outer
__ : glyph-proc
include : tagged 'serifMT' : match slabType
[Just SERIFS.ALL] [if sf.enoughSpaceForFullSerifs sf.mt.full [glyph-proc]]
[Just SERIFS.TOP] [if sf.enoughSpaceForFullSerifs sf.mt.full [glyph-proc]]
__ : glyph-proc
include : tagged 'SerifRT' : match slabType
[Just SERIFS.ALL] [if sf.enoughSpaceForFullSerifs sf.rt.full sf.rt.outer]
[Just SERIFS.TOP] [if sf.enoughSpaceForFullSerifs sf.rt.full sf.rt.outer]
__ : glyph-proc
include : tagged 'SerifRB' : match slabType
[Just SERIFS.ALL] sf.rb.fullSide
[Just SERIFS.TL-BR] sf.rb.outer
[Just SERIFS.BR] sf.rb.outer
__ : glyph-proc
create-glyph 'cyrl/Che' 0x427 : glyph-proc
include : MarkSet.capital
include : LeaningAnchor.Below.VBar.r RightSB
include : CyrCheShape [DivFrame 1] CAP [if SLAB 0.45 0.35] BODY.STRAIGHT
if SLAB SERIFS.ALL SERIFS.NONE
create-glyph 0x4B6 : composite-proc
create-glyph 'cyrl/CheDescender' 0x4B6 : composite-proc
refer-glyph 'cyrl/Che'
CyrDescender.rSideJut RightSB 0
create-glyph 0x4CB : composite-proc
create-glyph 'cyrl/kjh/Che' 0x4CB : composite-proc
refer-glyph 'cyrl/Che'
CyrDescender.lSideJut (RightSB - [HSwToV Stroke]) 0 (jut -- MidJutSide)
create-glyph 'cyrl/Cche' 0xA686 : glyph-proc
local df : include : DivFrame para.diversityM 3
include : df.markSet.capital
include : LeaningAnchor.Below.VBar.r df.rightSB
include : CyrCcheShape df CAP [if SLAB 0.45 0.35] BODY.STRAIGHT
if SLAB SERIFS.ALL SERIFS.NONE
glyph-block-export ItalicConfig
define ItalicConfig : object
standard { BODY.STRAIGHT SERIFS.ALL SERIFS.ALL-BGR SERIFS.TL-BR }
@ -94,23 +133,32 @@ glyph-block Letter-Cyrillic-Che : begin
include : CyrCheShape [DivFrame 1] XH [if SLAB 0.45 0.4] body
if SLAB [if para.isItalic slabItalic slabUprightBGR] SERIFS.NONE
create-glyph "cyrl/cche.\(suffix)" : glyph-proc
local df : include : DivFrame para.diversityM 3
include : df.markSet.e
include : LeaningAnchor.Below.VBar.r df.rightSB
include : CyrCcheShape df XH [if SLAB 0.45 0.4] body
if SLAB [if para.isItalic slabItalic slabUpright] SERIFS.NONE
select-variant 'cyrl/che' 0x447
select-variant 'cyrl/che.BGR' (follow -- 'cyrl/che')
create-glyph 0x4B7 : composite-proc
create-glyph 'cyrl/cheDescender' 0x4B7 : composite-proc
refer-glyph 'cyrl/che.standard'
CyrDescender.rSideJut RightSB 0
create-glyph 0x4CC : composite-proc
create-glyph 'cyrl/kjh/che' 0x4CC : composite-proc
refer-glyph 'cyrl/che.standard'
CyrDescender.lSideJut (RightSB - [HSwToV Stroke]) 0 (jut -- MidJutSide)
define [ChrVBar top pyBar] : begin
select-variant 'cyrl/cche' 0xA687 (follow -- 'cyrl/che')
define [CheVBarBarShape top pyBar] : begin
local SwCheVBar : Math.min OverlayStroke (0.625 * (RightSB - SB - [HSwToV : 2 * Stroke]) / HVContrast)
local yc : top * [fallback pyBar 0.5] + Stroke * 0.1
return : VBar.m Middle (yc + LongJut * 0.8) (yc - LongJut * 0.8) SwCheVBar
derive-composites 'cyrl/CheVBar' 0x4B8 'cyrl/Che' [ChrVBar CAP [if SLAB 0.45 0.35]]
derive-composites 'cyrl/cheVBar' 0x4B9 'cyrl/che' [ChrVBar XH [if SLAB 0.45 0.4 ]]
derive-composites 'cyrl/CheVBar' 0x4B8 'cyrl/Che' [CheVBarBarShape CAP [if SLAB 0.45 0.35]]
derive-composites 'cyrl/cheVBar' 0x4B9 'cyrl/che' [CheVBarBarShape XH [if SLAB 0.45 0.4 ]]
define ShhaConfig : object
serifless SERIFS.NONE
@ -126,7 +174,15 @@ glyph-block Letter-Cyrillic-Che : begin
yBarOffset -- [HSwToV : Math.pow Stroke 2] / (RightSB - SB)
include : FlipAround Middle (CAP / 2)
create-glyph "cyrl/Hwe.\(suffix)" : glyph-proc
include [refer-glyph "cyrl/Shha.\(suffix)"] AS_BASE ALSO_METRICS
eject-contour 'strokeR'
eject-contour 'serifRB'
include : TopHook.lBarInner SB 0 CAP
include : LeaningAnchor.Above.VBar.l SB
select-variant 'cyrl/Shha' 0x4BA (follow -- 'H')
select-variant 'cyrl/Shha/descBase' (shapeFrom -- 'cyrl/Shha') (follow -- 'H/descBase')
select-variant 'cyrl/Hwe' 0xA694 (follow -- 'HHookTop')
derive-composites 'cyrl/ShhaDescender' 0x526 'cyrl/Shha/descBase' [CyrDescender.rSideJut RightSB 0]

View file

@ -123,6 +123,7 @@ glyph-block Letter-Latin-Lower-H : begin
alias 'cyrl/shha' 0x4BB 'h'
alias 'cyrl/tshe' 0x45B 'hStroke'
alias 'cyrl/hwe' 0xA695 'hHookTop'
derive-composites 'hPalatalHook' 0xA795 'h/descBase' [PalatalHook.rSideJut RightSB 0]
derive-composites 'hDescender' 0x2C68 'h/descBase' [CyrDescender.rSideJut RightSB 0]

View file

@ -152,6 +152,7 @@ glyph-block Letter-Latin-Lower-M : begin
define [SmallMShortLegHeight top df] : (top - df.mvs) * 0.45
define [SmallMSmoothHeight top df] : top - [SmallMSmooth df] - TanSlope * Stroke
glyph-block-export EarlessCornerDoubleArchSmallMShape
define [EarlessCornerDoubleArchSmallMShape df top lbot mbot rbot _mid] : glyph-proc
local mid : fallback _mid df.middle

View file

@ -37,7 +37,7 @@ glyph-block Letter-Latin-U : begin
glyph-block-export UShapeGroup
define [UShapeGroup ada adb] : namespace
export : define [Toothed df top sw fHookLeft] : glyph-proc
export : define [Toothed df top sw fHookLeft fShortLeg] : glyph-proc
set-base-anchor 'trailing' df.rightSB 0
include : nShoulder
top -- top
@ -50,9 +50,9 @@ glyph-block Letter-Latin-U : begin
adb -- adb
if fHookLeft : include : RetroflexHook.rExt df.rightSB (TailY + HalfStroke) (sw -- sw)
include : FlipAround df.middle (top / 2)
include : tagged 'strokeR' : VBar.r df.rightSB 0 top sw
include : tagged 'strokeR' : VBar.r df.rightSB 0 [if fShortLeg [mix ada top 0.5] top] sw
export : define [Tailed df top sw fHookLeft] : glyph-proc
export : define [Tailed df top sw fHookLeft fShortLeg] : glyph-proc
set-base-anchor 'trailing' (df.rightSB + SideJut) 0
include : nShoulder
top -- top
@ -65,23 +65,31 @@ glyph-block Letter-Latin-U : begin
adb -- adb
if fHookLeft : include : RetroflexHook.rExt df.rightSB (TailY + HalfStroke) (sw -- sw)
include : FlipAround df.middle (top / 2)
include : tagged 'strokeR' : RightwardTailedBar df.rightSB 0 top (sw -- sw)
include : tagged 'strokeR' : RightwardTailedBar df.rightSB 0 [if fShortLeg [mix ada top 0.5] top] (sw -- sw)
export : define [ToothlessRounded df top sw fHookLeft] : glyph-proc
export : define [ToothlessRounded df top sw fHookLeft fShortLeg] : glyph-proc
if fHookLeft : begin
include : dispiro
widths.rhs sw
flat df.leftSB 0 [heading Upward]
flat df.leftSB [if fShortLeg [mix (top - ada) 0 0.5] 0] [heading Upward]
curl df.leftSB (top - ada)
arch.rhs top
flat df.rightSB (top - adb)
curl df.rightSB (TailY + HalfStroke) [heading Downward]
include : RetroflexHook.rExt df.rightSB (TailY + HalfStroke) (sw -- sw)
include : FlipAround df.middle (top / 2)
: else : begin
if fShortLeg : include : dispiro
widths.lhs sw
flat df.leftSB top [heading Downward]
curl df.leftSB adb
arch.lhs 0 (sw -- sw)
flat df.rightSB ada
curl df.rightSB [mix ada top 0.5] [heading Upward]
: else : include : UShape df top 0 (stroke -- sw) (ada -- ada) (adb -- adb)
export : define [ToothlessCorner df top sw fHookLeft] : glyph-proc
include : VBar.l df.leftSB 0 (top - DToothlessRise) sw
export : define [ToothlessCorner df top sw fHookLeft fShortLeg] : glyph-proc
include : VBar.l df.leftSB [if fShortLeg [mix (top - ada) 0 0.5] 0] (top - DToothlessRise) sw
include : dispiro
widths.rhs sw
g4 df.leftSB (top - DToothlessRise)
@ -243,6 +251,13 @@ glyph-block Letter-Latin-U : begin
include sf.rb.fullSide
include : LeaningAnchor.Below.VBar.r df.rightSB
create-glyph "uShortLeg.\(suffix)" : glyph-proc
local df : DivFrame 1
include : df.markSet.e
include : Base df XH Stroke false true
include : Slabs df XH
eject-contour 'serifRT'
create-glyph "uHookLeft.\(suffix)" : glyph-proc
local df : DivFrame 1
include : df.markSet.e
@ -299,6 +314,7 @@ glyph-block Letter-Latin-U : begin
select-variant 'u' 'u'
link-reduced-variant 'u/sansSerif' 'u' MathSansSerif
select-variant 'u/uRTailBase' (shapeFrom -- 'u')
select-variant 'uShortLeg' 0xAB4E
select-variant 'uHookLeft' 0xAB52
select-variant 'grek/mu' 0x3BC

View file

@ -205,7 +205,7 @@ glyph-block Letter-Latin-Upper-H : begin
include : df.markSet.e
include : HwairShape df XH (XH / 2) slabType
create-glyph "HHookLeft.\(suffix)" : glyph-proc
create-glyph "HHookTop.\(suffix)" : glyph-proc
include [refer-glyph "H.\(suffix)"] AS_BASE ALSO_METRICS
eject-contour "serifLT"
include : LeftHook SB CAP
@ -269,7 +269,7 @@ glyph-block Letter-Latin-Upper-H : begin
CreateSelectorVariants 'cyrl/enghe' 0x4A5 [Object.keys HConfig] (follow -- 'cyrl/en')
select-variant 'Hwair' 0x1F6
select-variant 'HHookLeft' 0xA7AA
select-variant 'HHookTop' 0xA7AA
select-variant 'HStroke' 0x126 (follow -- 'H')
select-variant 'smcpHStroke' null (follow -- 'H')

View file

@ -35,8 +35,8 @@ glyph-block Letter-Latin-Upper-N : begin
[Just BODY-SYMMETRIC] : dispiro
flat left 0 [widths.heading 0 stroke Upward]
curl left (top * 0.4) [heading Upward]
straight.up.end left top [widths.heading 0 swDiag Upward]
[Just BODY-ASYMMETRIC] : VBar.l left 0 top stroke
straight.up.end left top [widths.heading 0 swEnd Upward]
[Just BODY-ASYMMETRIC] : VBar.l left 0 top swEnd
match bodyType
[Just BODY-SYMMETRIC] : dispiro
flat right top [widths.heading 0 stroke Downward]
@ -61,20 +61,23 @@ glyph-block Letter-Latin-Upper-N : begin
local yEnd : match bodyType
[Just BODY-SYMMETRIC] 0
[Just BODY-ASYMMETRIC] : top * 0.375
local swEnd : match bodyType
[Just BODY-SYMMETRIC] swDiag
[Just BODY-ASYMMETRIC] stroke
include : union
match bodyType
[Just BODY-SYMMETRIC] : dispiro
flat left top [widths.lhs.heading stroke Downward]
curl left (top * 0.6) [heading Downward]
straight.down.end left 0 [widths.lhs.heading swDiag Downward]
[Just BODY-ASYMMETRIC] : VBar.l left 0 top stroke
straight.down.end left 0 [widths.lhs.heading swEnd Downward]
[Just BODY-ASYMMETRIC] : VBar.l left 0 top swEnd
match bodyType
[Just BODY-SYMMETRIC] : dispiro
flat right 0 [widths.lhs.heading stroke Upward]
curl right (top * 0.4) [heading Upward]
straight.up.end right top [widths.lhs.heading swDiag Upward]
[Just BODY-ASYMMETRIC] : VBar.r right 0 top stroke
straight.up.end right top [widths.lhs.heading swEnd Upward]
[Just BODY-ASYMMETRIC] : VBar.r right 0 top swEnd
intersection [Rect top 0 left right]
ExtLineCenter 2 swDiag (left + swDiag) yEnd (right - swDiag) top

View file

@ -211,6 +211,7 @@ export : define decompOverrides : object
0xAB30 { 'scripta' 'hStrike' }
0xAB3F { 'turnc' 'shortSlash' }
0xAB4F { 'uShortLeg' 'hStrike' }
0x1DF0B { 'esh' 'dblBarOver' }
0x1DF0C { 'eshCurlyTail' 'dblBarOver' }

View file

@ -400,7 +400,7 @@ selector.rightHalfH = "serifless"
selector."grek/Heta" = "serifless"
selector."grek/heta" = "serifless"
selector.Hwair = "serifless"
selector.HHookLeft = "serifless"
selector.HHookTop = "serifless"
selector."cyrl/Nje/leftHalf" = "serifless"
selector."cyrl/Nje/leftHalf/reduced" = "serifless"
@ -415,7 +415,7 @@ selector.rightHalfH = "serifless"
selector."grek/Heta" = "topLeftSerifed"
selector."grek/heta" = "topLeftSerifed"
selector.Hwair = "topLeftSerifed"
selector.HHookLeft = "serifless"
selector.HHookTop = "serifless"
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed"
@ -430,7 +430,7 @@ selector.rightHalfH = "topLeftBottomRightSerifed"
selector."grek/Heta" = "topLeftSerifed"
selector."grek/heta" = "topLeftSerifed"
selector.Hwair = "topLeftSerifed"
selector.HHookLeft = "topLeftBottomRightSerifed"
selector.HHookTop = "topLeftBottomRightSerifed"
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed"
@ -445,7 +445,7 @@ selector.rightHalfH = "serifed"
selector."grek/Heta" = "serifed"
selector."grek/heta" = "topLeftSerifed"
selector.Hwair = "serifedExceptBottomRight"
selector.HHookLeft = "serifed"
selector.HHookTop = "serifed"
selector."cyrl/Nje/leftHalf" = "serifed"
selector."cyrl/Nje/leftHalf/reduced" = "serifedExceptBottomRight"
@ -3740,6 +3740,7 @@ descriptionAffix = "toothed shape"
selectorAffix.u = "toothed"
selectorAffix."u/sansSerif" = "toothed"
selectorAffix."u/uRTailBase" = "urtBase"
selectorAffix.uShortLeg = "toothed"
selectorAffix.uHookLeft = "toothed"
selectorAffix.turnh = "toothed"
selectorAffix.turnhHookLeft = "toothed"
@ -3767,6 +3768,7 @@ descriptionAffix = "tailed shape"
selectorAffix.u = "tailed"
selectorAffix."u/sansSerif" = "tailed"
selectorAffix."u/uRTailBase" = "urtBase"
selectorAffix.uShortLeg = "tailed"
selectorAffix.uHookLeft = "tailed"
selectorAffix.turnh = "toothed"
selectorAffix.turnhHookLeft = "toothed"
@ -3794,6 +3796,7 @@ descriptionAffix = "toothless (corner bottom-right) shape"
selectorAffix.u = "toothlessCorner"
selectorAffix."u/sansSerif" = "toothlessCorner"
selectorAffix."u/uRTailBase" = "urtBase"
selectorAffix.uShortLeg = "toothlessCorner"
selectorAffix.uHookLeft = "toothlessCorner"
selectorAffix.turnh = "toothlessCorner"
selectorAffix.turnhHookLeft = "toothlessCorner"
@ -3821,6 +3824,7 @@ descriptionAffix = "toothless (rounded) shape"
selectorAffix.u = "toothlessRounded"
selectorAffix."u/sansSerif" = "toothlessRounded"
selectorAffix."u/uRTailBase" = "urtBase"
selectorAffix.uShortLeg = "toothlessRounded"
selectorAffix.uHookLeft = "toothlessRounded"
selectorAffix.turnh = "toothed"
selectorAffix.turnhHookLeft = "toothed"
@ -3849,6 +3853,7 @@ descriptionJoiner = "without"
selectorAffix.u = "serifless"
selectorAffix."u/sansSerif" = "serifless"
selectorAffix."u/uRTailBase" = "serifless"
selectorAffix.uShortLeg = "serifless"
selectorAffix.uHookLeft = "serifless"
selectorAffix.turnh = "serifless"
selectorAffix.turnhHookLeft = "serifless"
@ -3877,6 +3882,7 @@ descriptionAffix = "serif at bottom-right"
selectorAffix.u = "bottomRightSerifed"
selectorAffix."u/sansSerif" = "serifless"
selectorAffix."u/uRTailBase" = "serifless"
selectorAffix.uShortLeg = "bottomRightSerifed"
selectorAffix.uHookLeft = "bottomRightSerifed"
selectorAffix.turnh = "serifless"
selectorAffix.turnhHookLeft = "serifless"
@ -3904,6 +3910,7 @@ descriptionAffix = "motion serifs at top-left and bottom-right"
selectorAffix.u = "motionSerifed"
selectorAffix."u/sansSerif" = "serifless"
selectorAffix."u/uRTailBase" = "motionSerifed"
selectorAffix.uShortLeg = "motionSerifed"
selectorAffix.uHookLeft = {if = [{body = "toothed"}], then = "bottomRightSerifed", else = "serifless"}
selectorAffix.turnh = "motionSerifed"
selectorAffix.turnhHookLeft = "bottomRightSerifed"
@ -3931,6 +3938,7 @@ descriptionAffix = "serifs"
selectorAffix.u = "serifed"
selectorAffix."u/sansSerif" = "serifless"
selectorAffix."u/uRTailBase" = "serifed"
selectorAffix.uShortLeg = "motionSerifed"
selectorAffix.uHookLeft = "serifed"
selectorAffix.turnh = "serifed"
selectorAffix.turnhHookLeft = "serifed"