Harmonize serifs and hook/bar terminals of զ/լ/յ/ց (Armenian). (#2571)

* Make bar terminal of `լ` match `զ` under QP.

* Make `զ`/`լ`/`յ`/`ց` match each other.

* Reduce glyph count surrounding `g` and cleanup.

* Minor cleanup of `ծ` and `ձ`.

* Subtle optimization of `◌՟`.

* Add Armenian language sample.
This commit is contained in:
John McWilliams 2024-11-03 17:29:46 -05:00 committed by GitHub
parent a6fe9a9fdf
commit 072a307920
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 58 additions and 59 deletions

2
changes/32.0.2.md Normal file
View file

@ -0,0 +1,2 @@
* Make serif of Armenian Lower Yi (`U+0575`) consistent with Armenian Lower Liwn (`U+056C`).
* Make hook of Armenian Lower Co (`U+0581`) consistent with Armenian Lower Yi (`U+0575`).

View file

@ -10,7 +10,7 @@ glyph-block Letter-Armenian-Aliases : begin
alias 'armn/Tiun' 0x54F 'S.serifless'
alias 'armn/Piur' 0x553 'grek/Phi'
alias 'armn/Oh' 0x555 'O'
alias 'armn/yi' 0x575 : if SLAB 'dotlessj.flatHookSerifed' 'dotlessj.flatHookSerifless'
alias 'armn/co' 0x581 'g.singleStorey'
alias 'armn/yi' 0x575 : if SLAB 'dotlessj.flatHookShortSerifed' 'dotlessj.flatHookSerifless'
alias 'armn/co' 0x581 : if (SLAB && [not para.isItalic]) 'g.singleStoreyFlatHookSerifed' 'g.singleStoreyFlatHookSerifless'
alias 'armn/oh' 0x585 'o'
alias 'armn/yiBar' 0x588 : if SLAB 'dotlessjBar.flatHookSerifed' 'dotlessjBar.flatHookSerifless'
alias 'armn/yiBar' 0x588 : if SLAB 'dotlessjBar.flatHookShortSerifed' 'dotlessjBar.flatHookSerifless'

View file

@ -41,8 +41,8 @@ glyph-block Letter-Armenian-Ca : begin
local x1 : mix df.leftSB df.rightSB 0.45
local x2 : mix df.leftSB df.rightSB 0.3
local xOffset : 0.5 * [HSwToV df.mvs]
local y2 : mix Ascender XH 0.5
local xOffset : HSwToV : 0.5 * df.mvs
local y2 : mix XH Ascender 0.5
include : dispiro
widths.rhs df.mvs
flat (x1 + xOffset) Ascender [heading Downward]
@ -55,11 +55,11 @@ glyph-block Letter-Armenian-Ca : begin
widths.rhs df.mvs
flat (x3 + xOffset) Ascender
curl (x4 + xOffset) XH
straight.down.end (df.rightSB - OX) (XH - SmallArchDepthB)
flat (df.rightSB - OX) (XH - SmallArchDepthB)
curl (df.rightSB - OX) (0 + SmallArchDepthA)
arch.rhs 0 (sw -- df.mvs)
flat (df.leftSB + OX) (0 + SmallArchDepthB)
curl (df.leftSB + OX) (XH - SmallArchDepthA)
curl (df.leftSB + OX) (highBarPos - SmallArchDepthA)
arcvh
flat df.middle XH
curl df.rightSB XH
flat df.middle highBarPos
curl (df.rightSB + jut - [HSwToV : 0.5 * df.mvs]) highBarPos

View file

@ -52,8 +52,9 @@ glyph-block Letter-Armenian-Eh-Liun-Hiun : begin
local df : include : DivFrame : if SLAB para.diversityI para.diversityII
include : df.markSet.p
local xMiddle : df.middle - [IBalance2 df]
local longJut : if (df.div < 1) (jut * [if SLAB 1.5 1]) LongJut
include : VBar.m xMiddle Descender XH df.mvs
include : HBar.b xMiddle (xMiddle + LongJut * df.div) Descender df.mvs
include : HBar.b xMiddle (xMiddle + longJut) Descender df.mvs
if SLAB : include : HSerif.lt xMiddle XH Jut df.mvs
do "Hiun"

View file

@ -21,10 +21,10 @@ glyph-block Letter-Armenian-Lower-Dza-Cheh : begin
include : df.markSet.b
local x1 : mix df.leftSB df.rightSB 0.25
local x2 : mix df.leftSB df.rightSB 0.75
local y2 : Math.min [mix Ascender XH 0.5] (XH + 0.5 * SmallArchDepthA)
local y2 : Math.min (XH + 0.5 * SmallArchDepthA) : mix XH Ascender 0.5
include : dispiro
widths.center df.mvs
straight.down.start x1 Ascender [heading Downward]
straight.down.start x1 Ascender
arcvh
flat df.middle y2
curl x2 y2 [heading Rightward]

View file

@ -53,7 +53,7 @@ glyph-block Letter-Latin-Lower-G : begin
derive-composites "gBar.doubleStorey" null "g.doubleStorey" [OverlayW obwDoubleStorey]
create-glyph 'g.openDoubleStorey' : glyph-proc
create-glyph 'g.doubleStoreyOpen' : glyph-proc
include : MarkSet.p
local obot : XH * DesignParameters.gBarPos - O - Stroke * 0.4
include : OShape XH obot SB (RightSB - 0.3 * SB)
@ -81,10 +81,10 @@ glyph-block Letter-Latin-Lower-G : begin
set-base-anchor 'overlay' Middle [mix (Descender + O) groundy 0.5]
set-base-anchor 'strike' Middle (XH / 2)
derive-composites "gBar.openDoubleStorey" null "g.openDoubleStorey" [OverlayW obwDoubleStorey]
derive-composites "gBar.doubleStoreyOpen" null "g.doubleStoreyOpen" [OverlayW obwDoubleStorey]
define SingleStorey : namespace
export : define [RoundHookT sink df yTop offset sw] : sink
export : define [BentHookT sink df yTop offset sw] : sink
widths.rhs sw
[if (sink == spiro-outline) corner flat] (df.rightSB - offset) yTop [heading Downward]
curl (df.rightSB - offset) (Descender + SmallArchDepthA)
@ -92,7 +92,7 @@ glyph-block Letter-Latin-Lower-G : begin
g4 (df.leftSB + offset) (Descender + SHook)
if (sink == spiro-outline) {[corner df.leftSB XH]} {}
export : define [RoundHook df y0] : RoundHookT dispiro df y0 0 df.mvs
export : define [BentHook df y0] : BentHookT dispiro df y0 0 df.mvs
export : define [FlatHook df y0] : begin
local hd : FlatHookDepth df (9 / 8)
local xTerminal : Math.min (df.rightSB - hd.x - TINY) : mix df.leftSB df.rightSB (1 / 5)
@ -126,10 +126,6 @@ glyph-block Letter-Latin-Lower-G : begin
include : SeriflessBody df top
include : tagged 'serifRT' : HSerif.rt df.rightSB top SideJut
export : define [AutoSerifedBody df top] : glyph-proc
include : SeriflessBody df top
if (SLAB && [not para.isItalic]) : include : tagged 'serifRT' : HSerif.rt df.rightSB top SideJut
export : define [EarlessCornerBody df top] : glyph-proc
include : OBarLeft.toothless
top -- top
@ -151,10 +147,9 @@ glyph-block Letter-Latin-Lower-G : begin
define SingleStoreyConfig : SuffixCfg.weave
object # hook
singleStorey SingleStorey.RoundHook
singleStorey SingleStorey.BentHook
singleStoreyFlatHook SingleStorey.FlatHook
object # ear/serif
"" { SingleStorey.AutoSerifedBody 0 }
serifless { SingleStorey.SeriflessBody 0 }
serifed { SingleStorey.SerifedBody 0 }
earlessCorner { SingleStorey.EarlessCornerBody DToothlessRise }
@ -231,8 +226,8 @@ glyph-block Letter-Latin-Lower-G : begin
left -- SB
right -- RightSB - BBD
sw -- BBS
include : SingleStorey.RoundHookT dispiro [DivFrame 1] XH 0 BBS
include : SingleStorey.BentHookT dispiro [DivFrame 1] XH 0 BBS
include : HBar.t (RightSB - BBD) RightSB XH BBS
include : intersection
VBar.r (RightSB - BBD) Descender XH BBS
SingleStorey.RoundHookT spiro-outline [DivFrame 1] XH 1 BBS
SingleStorey.BentHookT spiro-outline [DivFrame 1] XH 1 BBS

View file

@ -1390,5 +1390,5 @@ glyph-block Mark-Above : begin
local leftEnd : markMiddle - markExtend * 1.5
local rightEnd : markMiddle + markExtend * 1.5
include : VBar.m leftEnd aboveMarkBot aboveMarkTop (markFine * 2)
include : VBar.l leftEnd aboveMarkBot aboveMarkTop (markFine * 2)
include : HBar.b leftEnd rightEnd aboveMarkBot (markFine * 2)

View file

@ -2763,19 +2763,6 @@ descriptionLeader = "`g`"
next = "openness"
rank = 1
descriptionAffix = "double-storey shape"
selectorAffix.g = ""
selectorAffix."g/sansSerif" = ""
selectorAffix."g/hookTopBase" = ""
selectorAffix."gScript" = ""
selectorAffix."g/single/autoSerifed/slab" = ""
selectorAffix."g/single/autoSerifed/sans" = ""
[prime.g.variants-buildup.stages.openness."*"]
next = "END"
[prime.g.variants-buildup.stages.openness.closed]
rank = 1
keyAffix = ""
selectorAffix.g = "doubleStorey"
selectorAffix."g/sansSerif" = "doubleStorey"
selectorAffix."g/hookTopBase" = "singleStoreySerifless"
@ -2783,15 +2770,28 @@ selectorAffix."gScript" = "singleStoreyScriptCut"
selectorAffix."g/single/autoSerifed/slab" = "singleStoreySerifed"
selectorAffix."g/single/autoSerifed/sans" = "singleStoreySerifless"
[prime.g.variants-buildup.stages.openness."*"]
next = "END"
[prime.g.variants-buildup.stages.openness.closed]
rank = 1
keyAffix = ""
selectorAffix.g = ""
selectorAffix."g/sansSerif" = ""
selectorAffix."g/hookTopBase" = ""
selectorAffix."gScript" = ""
selectorAffix."g/single/autoSerifed/slab" = ""
selectorAffix."g/single/autoSerifed/sans" = ""
[prime.g.variants-buildup.stages.openness.open]
rank = 1
descriptionAffix = "open contour"
selectorAffix.g = "openDoubleStorey"
selectorAffix."g/sansSerif" = "openDoubleStorey"
selectorAffix."g/hookTopBase" = "singleStoreySerifless"
selectorAffix."gScript" = "singleStoreyScriptCut"
selectorAffix."g/single/autoSerifed/slab" = "singleStoreySerifed"
selectorAffix."g/single/autoSerifed/sans" = "singleStoreySerifless"
selectorAffix.g = "open"
selectorAffix."g/sansSerif" = "open"
selectorAffix."g/hookTopBase" = ""
selectorAffix."gScript" = ""
selectorAffix."g/single/autoSerifed/slab" = ""
selectorAffix."g/single/autoSerifed/sans" = ""
[prime.g.variants-buildup.stages.storey.single-storey]
next = "hook"
@ -2807,7 +2807,7 @@ selectorAffix."g/single/autoSerifed/sans" = "singleStorey"
[prime.g.variants-buildup.stages.hook."*"]
next = "ear"
[prime.g.variants-buildup.stages.hook.standard]
[prime.g.variants-buildup.stages.hook.bent-hook]
rank = 1
keyAffix = ""
selectorAffix.g = ""

View file

@ -4,6 +4,7 @@ import themes from "../themes/index.mjs";
const languages = [
{ lang: 'English', sample: 'Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth.' },
{ lang: 'IPA', sample: '[liə̯bə̆ ɡʷɯ̹ʔ̚ daŋ˕ sŋə̆r̥ra] [ʔɹie˦ na˦ ɡɨ˨ tɕie˦] [ʔɣɛw˦˨ tɕi˦˨ ʔɨwk˦ ʔɨwk˦] [jaw⁴ tsɨ³ tʂɨ¹ ʋu² tʂi¹]', localeId :'und-fonipa' },
{ lang: 'Armenian', sample: 'Չին ֆիզիկոսը օճառաջուր ցողելով բժշկում է հայ գնդապետի փքված ձախ թևը։' },
{ lang: 'Azerbaijani', sample: 'Zəfər, jaketini də papağını da götür, bu axşam hava çox soyuq olacaq.', localeId :'az' },
{ lang: 'Belarusian', sample: 'У Іўі худы жвавы чорт у зялёнай камізэльцы пабег пад’есці фаршу з юшкай.' },
{ lang: 'Breton', sample: 'Yeched mat Jakez! Skarzhit ar gwerennoù-mañ, kavet e vo gwin betek fin ho puhez.' },