* \[**Breaking**\]: Made serifed variants of X, Y, Z, x and z selectable via variant selector (#939).

* \[**Breaking**\]: Rename variants of `A`, `X`, `Y`, `Z`, `x` and `z`.
 * Update SS02 and SS16 to better reflect their source fonts (#939).
 * Remove unnecessary serifs of Slab Italic Small Cyrillic KA (#938).
This commit is contained in:
be5invis 2021-04-07 19:18:18 -07:00
parent 584e7a7fe0
commit 373eafa6a5
12 changed files with 780 additions and 435 deletions

View file

@ -1 +1,5 @@
* \[**Breaking**\]: The grades for width is updated to make the unit width of Extended subfamily being 0.6em. * \[**Breaking**\]: The grades for width is updated to make the unit width of Extended subfamily being 0.6em.
* \[**Breaking**\]: Made serifed variants of `X`, `Y`, `Z`, `x` and `z` selectable via variant selector (#939).
* \[**Breaking**\]: Rename variants of `A`, `X`, `Y`, `Z`, `x` and `z`.
* Update SS02 and SS16 to better reflect their source fonts (#939).
* Remove unnecessary serifs of Slab Italic Small Cyrillic KA (#938).

View file

@ -225,18 +225,18 @@ glyph-block Letter-Latin-K : begin
curly { KCurlyLegs KCurlyLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] } curly { KCurlyLegs KCurlyLegShapeImpl [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] }
symmetricTouching { KSymmetricTouchingLegs [KSymmetricLegsImpl false] [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] } symmetricTouching { KSymmetricTouchingLegs [KSymmetricLegsImpl false] [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] }
symmetricConnected { KSymmetricConnectedLegs [KSymmetricLegsImpl true] [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] } symmetricConnected { KSymmetricConnectedLegs [KSymmetricLegsImpl true] [if SLAB 1 0] [if SLAB 1 0] [if SLAB 1 0] }
straightSmallCyrl { KNormalLegs KStraightLegShapeImpl [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB 1 0] } straightSmallCyrl { KNormalLegs KStraightLegShapeImpl [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB [if para.isItalic 0 1] 0] }
curlySmallCyrl { KCurlyLegs KCurlyLegShapeImpl [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB 1 0] } curlySmallCyrl { KCurlyLegs KCurlyLegShapeImpl [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB [if para.isItalic 0 1] 0] }
symmetricTouchingSmallCyrl { KSymmetricTouchingLegs [KSymmetricLegsImpl false] [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB 1 0] } symmetricTouchingSmallCyrl { KSymmetricTouchingLegs [KSymmetricLegsImpl false] [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB [if para.isItalic 0 1] 0] }
symmetricConnectedSmallCyrl { KSymmetricConnectedLegs [KSymmetricLegsImpl true] [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB 1 0] } symmetricConnectedSmallCyrl { KSymmetricConnectedLegs [KSymmetricLegsImpl true] [if SLAB [if para.isItalic 2 1] 0] [if SLAB [if para.isItalic 0 1] 0] [if SLAB [if para.isItalic 0 1] 0] }
straightSerifless { KNormalLegs KStraightLegShapeImpl 0 0 0 } straightSerifless { KNormalLegs KStraightLegShapeImpl 0 0 0 }
curlySerifless { KCurlyLegs KCurlyLegShapeImpl 0 0 0 } curlySerifless { KCurlyLegs KCurlyLegShapeImpl 0 0 0 }
symmetricTouchingSerifless { KSymmetricTouchingLegs [KSymmetricLegsImpl false] 0 0 0 } symmetricTouchingSerifless { KSymmetricTouchingLegs [KSymmetricLegsImpl false] 0 0 0 }
symmetricConnectedSerifless { KSymmetricConnectedLegs [KSymmetricLegsImpl true] 0 0 0 } symmetricConnectedSerifless { KSymmetricConnectedLegs [KSymmetricLegsImpl true] 0 0 0 }
straightMotionSerifed { KNormalLegs KStraightLegShapeImpl 2 0 0} straightMotionSerifed { KNormalLegs KStraightLegShapeImpl 2 0 0 }
curlyMotionSerifed { KCurlyLegs KCurlyLegShapeImpl 2 0 0} curlyMotionSerifed { KCurlyLegs KCurlyLegShapeImpl 2 0 0 }
symmetricTouchingMotionSerifed { KSymmetricTouchingLegs [KSymmetricLegsImpl false] 2 0 0} symmetricTouchingMotionSerifed { KSymmetricTouchingLegs [KSymmetricLegsImpl false] 2 0 0 }
symmetricConnectedMotionSerifed { KSymmetricConnectedLegs [KSymmetricLegsImpl true] 2 0 0} symmetricConnectedMotionSerifed { KSymmetricConnectedLegs [KSymmetricLegsImpl true] 2 0 0 }
define [UpperKLTSerif slabTop top straightBar] : match slabTop define [UpperKLTSerif slabTop top straightBar] : match slabTop
2 : LeftwardTopSerif (SB + [KBalance slabTop straightBar]) top SideJut 2 : LeftwardTopSerif (SB + [KBalance slabTop straightBar]) top SideJut

View file

@ -14,54 +14,51 @@ glyph-block Letter-Latin-Lower-D : begin
glyph-block-import Recursive-Build : Widen glyph-block-import Recursive-Build : Widen
glyph-block-import Letter-Shared-Shapes : CurlyTail glyph-block-import Letter-Shared-Shapes : CurlyTail
create-glyph 'd.toothed' : glyph-proc create-glyph 'd.toothedSerifless' : glyph-proc
include : MarkSet.b
include : OBarRightShape
include : VBarRight RightSB 0 CAP
create-glyph 'd.toothedTopSerifed' : glyph-proc
include : MarkSet.b
include : OBarRightShape
include : VBarRight RightSB 0 CAP
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothedSerifed' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightShape include : OBarRightShape
include : VBarRight RightSB 0 CAP include : VBarRight RightSB 0 CAP
if SLAB : begin
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.tailed' : glyph-proc create-glyph 'd.tailedSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightShape include : OBarRightShape
include : RightwardTailedBar RightSB 0 CAP include : RightwardTailedBar RightSB 0 CAP
if SLAB : begin
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothlessCorner' : glyph-proc create-glyph 'd.toothlessCornerSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend
include : VBarRight RightSB DToothlessRise CAP include : VBarRight RightSB DToothlessRise CAP
if SLAB : begin
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothlessRounded' : glyph-proc create-glyph 'd.toothlessRoundedSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightRoundedShape XH RightSB CAP include : OBarRightRoundedShape XH RightSB CAP
if SLAB : begin
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothedMotionSerifed' : glyph-proc create-glyph 'd.tailedSerifed' : glyph-proc
include : MarkSet.b
include : OBarRightShape
include : VBarRight RightSB 0 CAP
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'd.motionSerifedTailed' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightShape include : OBarRightShape
include : RightwardTailedBar RightSB 0 CAP include : RightwardTailedBar RightSB 0 CAP
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothlessCornerMotionSerifed' : glyph-proc create-glyph 'd.toothlessCornerSerifed' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend
include : VBarRight RightSB DToothlessRise CAP include : VBarRight RightSB DToothlessRise CAP
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
create-glyph 'd.toothlessRoundedMotionSerifed' : glyph-proc create-glyph 'd.toothlessRoundedSerifed' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightRoundedShape XH RightSB CAP include : OBarRightRoundedShape XH RightSB CAP
include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut include : tagged 'serifRT' : LeftwardTopSerif (RightSB - Stroke * HVContrast) CAP SideJut
@ -97,42 +94,44 @@ glyph-block Letter-Latin-Lower-D : begin
include : LeftwardTopSerif (m1 - Stroke * HVContrast) CAP SideJut include : LeftwardTopSerif (m1 - Stroke * HVContrast) CAP SideJut
define yDHookTopConnect : CAP - Hook - HalfStroke define yDHookTopConnect : CAP - Hook - HalfStroke
create-glyph 'dhooktop.toothed' : glyph-proc create-glyph 'dhooktop.toothedSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightShape include : OBarRightShape
include : VBarRight RightSB 0 yDHookTopConnect include : VBarRight RightSB 0 yDHookTopConnect
include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook) include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook)
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'dhooktop.tailed' : glyph-proc create-glyph 'dhooktop.toothedBottomSerifed' : glyph-proc
include : MarkSet.b
include : OBarRightShape
include : VBarRight RightSB 0 yDHookTopConnect
include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook)
include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'dhooktop.tailedSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightShape include : OBarRightShape
include : RightwardTailedBar RightSB 0 yDHookTopConnect include : RightwardTailedBar RightSB 0 yDHookTopConnect
include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook) include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook)
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'dhooktop.toothlessCorner' : glyph-proc create-glyph 'dhooktop.toothlessCornerSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend include : OBarRightToothlessShape XH RightSB DToothlessRise DMBlend
include : VBarRight RightSB DToothlessRise yDHookTopConnect include : VBarRight RightSB DToothlessRise yDHookTopConnect
include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook) include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook)
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
create-glyph 'dhooktop.toothlessRounded' : glyph-proc create-glyph 'dhooktop.toothlessRoundedSerifless' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : OBarRightRoundedShape XH RightSB yDHookTopConnect include : OBarRightRoundedShape XH RightSB yDHookTopConnect
include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook) include : VerticalHook (RightSB - HalfStroke * HVContrast) yDHookTopConnect HookX (-Hook)
if SLAB : include : tagged 'serifRB' : RightwardBottomSerif RightSB 0 SideJut
select-variant 'dhooktop' 0x257 select-variant 'dhooktop' 0x257
create-glyph 'dHookBottom' 0x256 : glyph-proc create-glyph 'dHookBottom' 0x256 : glyph-proc
include [refer-glyph 'd.toothed'] AS_BASE ALSO_METRICS include [refer-glyph : if SLAB 'd.toothedTopSerifed' 'd.toothedSerifless'] AS_BASE ALSO_METRICS
eject-contour 'serifRB'
include : refer-glyph 'rtailBR' include : refer-glyph 'rtailBR'
create-glyph 'dHookTopBottom' 0x1D91 : composite-proc create-glyph 'dHookTopBottom' 0x1D91 : composite-proc
refer-glyph 'dhooktop.toothed' refer-glyph 'dhooktop.toothedSerifless'
refer-glyph 'rtailBR' refer-glyph 'rtailBR'
with-related-glyphs 'ddot' 0x1E0B 'd' : lambda [src sel] : glyph-proc with-related-glyphs 'ddot' 0x1E0B 'd' : lambda [src sel] : glyph-proc

View file

@ -13,8 +13,9 @@ glyph-block Letter-Latin-Upper-A : begin
glyph-block-import Letter-Latin-V : VShapeOutline VShape glyph-block-import Letter-Latin-V : VShapeOutline VShape
glyph-block-export LambdaShape AMaskShape DeltaShape glyph-block-export LambdaShape AMaskShape DeltaShape
define SLAB-AUTO 1 define SLAB-NONE 0
define SLAB-MOTION 2 define SLAB-TOP 1
define SLAB-BASE 2
define SLAB-TRI 3 define SLAB-TRI 3
define [AMaskShape df top sw barStraight] : new-glyph : glyph-proc define [AMaskShape df top sw barStraight] : new-glyph : glyph-proc
@ -24,17 +25,19 @@ glyph-block Letter-Latin-Upper-A : begin
define [ABarPosition slab top] : mix [if fBaseSlabs Stroke 0] top (XH / 2 / CAP) define [ABarPosition slab top] : mix [if fBaseSlabs Stroke 0] top (XH / 2 / CAP)
define AConfig : object define AConfig : object
straight { true SLAB-AUTO SLAB } straightSerifless { true SLAB-NONE false }
curly { false SLAB-AUTO SLAB } curlySerifless { false SLAB-NONE false }
straightMotionSerifed { true SLAB-MOTION false } straightTopSerifed { true SLAB-TOP false }
curlyMotionSerifed { false SLAB-MOTION false } curlyTopSerifed { false SLAB-TOP false }
straightBaseSerifed { true SLAB-BASE true }
curlyBaseSerifed { false SLAB-BASE true }
straightTriSerifed { true SLAB-TRI true } straightTriSerifed { true SLAB-TRI true }
curlyTriSerifed { false SLAB-TRI true } curlyTriSerifed { false SLAB-TRI true }
define [ASerifs df top kind] : glyph-proc : match kind define [ASerifs df top kind] : glyph-proc : match kind
[Just SLAB-TRI] : begin [Just SLAB-TRI] : begin
include : LeftwardTopSerif df.middle top (MidJutSide + Stroke * HVContrast * 0.25) include : LeftwardTopSerif df.middle top (MidJutSide + Stroke * HVContrast * 0.25)
[Just SLAB-MOTION] : begin [Just SLAB-TOP] : begin
include : LeftwardTopSerif Middle top [mix MidJutSide LongJut 0.5] include : LeftwardTopSerif Middle top [mix MidJutSide LongJut 0.5]
foreach { suffix { fStraightBar slabKind fBaseSlabs } } [Object.entries AConfig] : do foreach { suffix { fStraightBar slabKind fBaseSlabs } } [Object.entries AConfig] : do

View file

@ -29,8 +29,9 @@ glyph-block Letter-Latin-Upper-T : begin
include : tagged 'serifMB' : LeftwardBottomSerif Middle 0 MidJutCenter include : tagged 'serifMB' : LeftwardBottomSerif Middle 0 MidJutCenter
define TConfig : object define TConfig : object
standard { SLAB SLAB } serifless { false false }
motionSerifed { true false } motionSerifed { true false }
serifed { true true }
foreach { suffix { doST doSB } } [Object.entries TConfig] : do foreach { suffix { doST doSB } } [Object.entries TConfig] : do
create-glyph "T.\(suffix)" : glyph-proc create-glyph "T.\(suffix)" : glyph-proc

View file

@ -14,7 +14,8 @@ glyph-block Letter-Latin-Upper-Y : begin
define BODY-CURLY 0 define BODY-CURLY 0
define BODY-STRAIGHT 1 define BODY-STRAIGHT 1
define SLAB-AUTO 1 define SLAB-NONE 0
define SLAB-ALL 1
define SLAB-BASE 2 define SLAB-BASE 2
define SLAB-MOTION 3 define SLAB-MOTION 3
@ -28,7 +29,7 @@ glyph-block Letter-Latin-Upper-Y : begin
set-base-anchor 'overlay' Middle cross set-base-anchor 'overlay' Middle cross
match slabType match slabType
[Just SLAB-AUTO] : if SLAB : begin [Just SLAB-ALL] : begin
include : VSerifs top include : VSerifs top
include : CenterBottomSerif Middle [fallback bot 0] MidJutSide include : CenterBottomSerif Middle [fallback bot 0] MidJutSide
[Just SLAB-MOTION] : include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut [Just SLAB-MOTION] : include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut
@ -53,12 +54,14 @@ glyph-block Letter-Latin-Upper-Y : begin
define YConfig : object define YConfig : object
straight { BODY-STRAIGHT SLAB-AUTO } straightSerifless { BODY-STRAIGHT SLAB-NONE }
curly { BODY-CURLY SLAB-AUTO } curlySerifless { BODY-CURLY SLAB-NONE }
straightBaseSerifed { BODY-STRAIGHT SLAB-BASE } straightBaseSerifed { BODY-STRAIGHT SLAB-BASE }
curlyBaseSerifed { BODY-CURLY SLAB-BASE } curlyBaseSerifed { BODY-CURLY SLAB-BASE }
straightMotionSerifed { BODY-STRAIGHT SLAB-MOTION } straightMotionSerifed { BODY-STRAIGHT SLAB-MOTION }
curlyMotionSerifed { BODY-CURLY SLAB-MOTION } curlyMotionSerifed { BODY-CURLY SLAB-MOTION }
straightSerifed { BODY-STRAIGHT SLAB-ALL }
curlySerifed { BODY-CURLY SLAB-ALL }
foreach { suffix { bodyType slabType } } [Object.entries YConfig] : do foreach { suffix { bodyType slabType } } [Object.entries YConfig] : do
create-glyph "Y.\(suffix)" : glyph-proc create-glyph "Y.\(suffix)" : glyph-proc

View file

@ -54,14 +54,20 @@ glyph-block Letter-Latin-X : begin
define [XMotionSerifs top] : glyph-proc define [XMotionSerifs top] : glyph-proc
include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut include : tagged 'serifLT' : LeftwardTopSerif SB top SideJut
create-glyph 'X.straight' : glyph-proc create-glyph 'X.straightSerifless' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase true include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase true
include : NeedSlab SLAB : HSerifs CAP create-glyph 'X.curlySerifless' : glyph-proc
create-glyph 'X.curly' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase false include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase false
include : NeedSlab SLAB : HSerifs CAP create-glyph 'X.straightSerifed' : glyph-proc
include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase true
include : HSerifs CAP
create-glyph 'X.curlySerifed' : glyph-proc
include : MarkSet.capital
include : WithAIHSerifsMask CAP 0 SB RightSB : UpperXBase false
include : HSerifs CAP
create-glyph 'X.straightMotionSerifed' : glyph-proc create-glyph 'X.straightMotionSerifed' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
include : UpperXBase true include : UpperXBase true
@ -78,14 +84,20 @@ glyph-block Letter-Latin-X : begin
XStrand fStraight SLAB SB 0 RightSB XH turn 0.4 tension XStrand fStraight SLAB SB 0 RightSB XH turn 0.4 tension
XStrand fStraight SLAB SB XH RightSB 0 turn 0.4 tension XStrand fStraight SLAB SB XH RightSB 0 turn 0.4 tension
create-glyph 'x.straight' : glyph-proc create-glyph 'x.straightSerifless' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase true include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase true
include : NeedSlab SLAB : HSerifs XH create-glyph 'x.curlySerifless' : glyph-proc
create-glyph 'x.curly' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase false include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase false
include : NeedSlab SLAB : HSerifs XH create-glyph 'x.straightSerifed' : glyph-proc
include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase true
include : HSerifs XH
create-glyph 'x.curlySerifed' : glyph-proc
include : MarkSet.e
include : WithAIHSerifsMask XH 0 SB RightSB : LowerXBase false
include : HSerifs XH
create-glyph 'x.straightMotionSerifed' : glyph-proc create-glyph 'x.straightMotionSerifed' : glyph-proc
include : MarkSet.e include : MarkSet.e
include : LowerXBase true include : LowerXBase true
@ -94,10 +106,8 @@ glyph-block Letter-Latin-X : begin
include : MarkSet.e include : MarkSet.e
include : LowerXBase false include : LowerXBase false
include : XMotionSerifs XH include : XMotionSerifs XH
create-glyph 'x.cursive' : glyph-proc
include : MarkSet.e
define [halfShape] : begin define [XCursiveHalfShape fFlatEnd] : begin
local sma : SmoothAOf (Smooth * 0.8) (Width / 2) local sma : SmoothAOf (Smooth * 0.8) (Width / 2)
local smb : SmoothBOf (Smooth * 0.8) (Width / 2) local smb : SmoothBOf (Smooth * 0.8) (Width / 2)
@ -125,15 +135,30 @@ glyph-block Letter-Latin-X : begin
archv 16 archv 16
flat (xCenterRight - HVContrast * fineMid) (XH - sma) [widths.lhs fineMid] flat (xCenterRight - HVContrast * fineMid) (XH - sma) [widths.lhs fineMid]
curl (xCenterRight - HVContrast * fineMid) (XH / 2 + O) curl (xCenterRight - HVContrast * fineMid) (XH / 2 + O)
dispiro if fFlatEnd
: then : dispiro
flat (xCenterRight - 0.5 * HVContrast * fineMid) (XH / 2 - O) [widths.center fineMid]
curl (xCenterRight - 0.5 * HVContrast * fineMid) smb
arcvh 16
flat [mix xCenterRight RightSB 0.5] HalfStroke [widths.center.heading Stroke Rightward]
curl RightSB HalfStroke [heading Rightward]
: else : dispiro
flat (xCenterRight - 0.5 * HVContrast * fineMid) (XH / 2 - O) [widths.center fineMid] flat (xCenterRight - 0.5 * HVContrast * fineMid) (XH / 2 - O) [widths.center fineMid]
curl (xCenterRight - 0.5 * HVContrast * fineMid) [Math.min smb (swMid + rIn)] curl (xCenterRight - 0.5 * HVContrast * fineMid) [Math.min smb (swMid + rIn)]
arcvh 16 arcvh 16
DiagonalTailF 1 [DivFrame 1] (xCenterRight - 0.5 * HVContrast * Stroke + TanSlope * rIn) 0 rIn 50 flatHookDepth Stroke DiagonalTailF 1 [DivFrame 1] (xCenterRight - 0.5 * HVContrast * Stroke + TanSlope * rIn) 0 rIn 50 flatHookDepth Stroke
include : halfShape create-glyph 'x.cursive' : glyph-proc
include : MarkSet.e
include : XCursiveHalfShape
include : FlipAround Middle (XH / 2) include : FlipAround Middle (XH / 2)
include : halfShape include : XCursiveHalfShape
create-glyph 'x.cursiveCyrlHaDescenderBase' : glyph-proc
include : MarkSet.e
include : XCursiveHalfShape
include : FlipAround Middle (XH / 2)
include : XCursiveHalfShape true
define [ChiBase fStraight] : union define [ChiBase fStraight] : union
XStrand fStraight false SB Descender RightSB XH 0.05 0.4 0.11 XStrand fStraight false SB Descender RightSB XH 0.05 0.4 0.11
@ -147,6 +172,7 @@ glyph-block Letter-Latin-X : begin
alias 'cyrl/Ha' 0x425 'X' alias 'cyrl/Ha' 0x425 'X'
select-variant 'x' 'x' select-variant 'x' 'x'
select-variant 'xCyrlHaDescenderBase' nothing (shapeFrom -- 'x')
select-variant 'cyrl/ha' 0x445 (shapeFrom -- 'x') select-variant 'cyrl/ha' 0x445 (shapeFrom -- 'x')
select-variant 'grek/chi' 0x3C7 select-variant 'grek/chi' 0x3C7
@ -156,7 +182,7 @@ glyph-block Letter-Latin-X : begin
include [refer-glyph src] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS
include : CyrDescender RightSB (connex -- 0.5) include : CyrDescender RightSB (connex -- 0.5)
with-related-glyphs 'cyrl/hadescender' 0x4B3 'cyrl/ha' : lambda [src sel] : glyph-proc with-related-glyphs 'cyrl/hadescender' 0x4B3 'xCyrlHaDescenderBase' : lambda [src sel] : glyph-proc
include [refer-glyph src] AS_BASE ALSO_METRICS include [refer-glyph src] AS_BASE ALSO_METRICS
include : CyrDescender RightSB (connex -- 0.5) include : CyrDescender RightSB (connex -- 0.5)

View file

@ -13,8 +13,9 @@ glyph-block Letter-Latin-Z : begin
glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Blackboard : BBS BBD
glyph-block-import Letter-Latin-X : XStrand glyph-block-import Letter-Latin-X : XStrand
define [ZSerifless top] : glyph-proc
define [ZStdSerifs top] : glyph-proc define [ZStdSerifs top] : glyph-proc
if SLAB : begin
include : tagged 'serifLT' : DownwardLeftSerif SB top VJut include : tagged 'serifLT' : DownwardLeftSerif SB top VJut
include : tagged 'serifRB' : UpwardRightSerif RightSB 0 VJut include : tagged 'serifRB' : UpwardRightSerif RightSB 0 VJut
@ -25,8 +26,6 @@ glyph-block Letter-Latin-Z : begin
include : tagged 'serifLT' : DownwardLeftSerif SB top VJut include : tagged 'serifLT' : DownwardLeftSerif SB top VJut
define [ZBaseShape] : glyph-proc define [ZBaseShape] : glyph-proc
include : MarkSet.capital
local cor : 1.15 * HVContrast local cor : 1.15 * HVContrast
include : tagged 'strokeTop' : HBarTop SB RightSB CAP include : tagged 'strokeTop' : HBarTop SB RightSB CAP
include : spiro-outline include : spiro-outline
@ -37,49 +36,14 @@ glyph-block Letter-Latin-Z : begin
include : tagged 'strokeBottom' : HBarBottom SB RightSB 0 include : tagged 'strokeBottom' : HBarBottom SB RightSB 0
define [ZCurlyShape] : glyph-proc define [ZCurlyShape] : glyph-proc
include : MarkSet.capital
include : tagged 'strokeTop' : HBarTop SB (RightSB - Stroke * HVContrast) CAP include : tagged 'strokeTop' : HBarTop SB (RightSB - Stroke * HVContrast) CAP
include : XStrand false SLAB SB 0 RightSB CAP 0.125 0.4 0.32 include : XStrand false SLAB SB 0 RightSB CAP 0.125 0.4 0.32
include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0 include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0
create-glyph 'Z.standard' : glyph-proc define [HBarOver] : refer-glyph 'barOver'
include : ZBaseShape define [DBarOver] : refer-glyph 'antiSlashOver'
include : ZStdSerifs CAP
create-glyph 'Z.withHorizontalCrossBar' : glyph-proc
include : ZBaseShape
include : ZStdSerifs CAP
include : refer-glyph 'barOver'
create-glyph 'Z.withCrossBar' : glyph-proc
include : ZBaseShape
include : ZStdSerifs CAP
include : refer-glyph 'antiSlashOver'
create-glyph 'Z.motionSerifed' : glyph-proc
include : ZBaseShape
include : ZMotionSerifsB CAP
create-glyph 'Z.topMotionSerifed' : glyph-proc
include : ZBaseShape
include : ZMotionSerifsT CAP
create-glyph 'Z.curly' : glyph-proc
include : ZCurlyShape
include : ZStdSerifs CAP
create-glyph 'Z.curlyWithHorizontalCrossBar' : glyph-proc
include : ZCurlyShape
include : ZStdSerifs CAP
include : refer-glyph 'barOver'
create-glyph 'Z.curlyWithCrossBar' : glyph-proc
include : ZCurlyShape
include : ZStdSerifs CAP
include : refer-glyph 'antiSlashOver'
create-glyph 'Z.curlyMotionSerifed' : glyph-proc
include : ZCurlyShape
include : ZMotionSerifsB CAP
create-glyph 'Z.curlyTopMotionSerifed' : glyph-proc
include : ZCurlyShape
include : ZMotionSerifsT CAP
define [SmallZBaseShape] : glyph-proc define [SmallZBaseShape] : glyph-proc
include : MarkSet.e
local cor : 1.2 * HVContrast local cor : 1.2 * HVContrast
include : tagged 'strokeTop' : HBarTop SB RightSB XH include : tagged 'strokeTop' : HBarTop SB RightSB XH
include : spiro-outline include : spiro-outline
@ -90,14 +54,11 @@ glyph-block Letter-Latin-Z : begin
include : tagged 'strokeBottom' : HBarBottom SB RightSB 0 include : tagged 'strokeBottom' : HBarBottom SB RightSB 0
define [SmallZCurlyShape] : glyph-proc define [SmallZCurlyShape] : glyph-proc
include : MarkSet.e
include : tagged 'strokeTop' : HBarTop SB (RightSB - Stroke * HVContrast) XH include : tagged 'strokeTop' : HBarTop SB (RightSB - Stroke * HVContrast) XH
include : XStrand false SLAB SB 0 RightSB XH 0.125 0.4 0.36 include : XStrand false SLAB SB 0 RightSB XH 0.125 0.4 0.36
include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0 include : tagged 'strokeBottom' : HBarBottom (SB + Stroke * HVContrast) RightSB 0
define [SmallZCursiveShape] : glyph-proc define [SmallZCursiveShape] : glyph-proc
include : MarkSet.e
define hookTerminalWidth : AdviceStroke 3.5 define hookTerminalWidth : AdviceStroke 3.5
define xDiagWidth : 1 * Stroke define xDiagWidth : 1 * Stroke
define yFootHeight : Math.max (0.15 * XH) (Stroke * 0.625) define yFootHeight : Math.max (0.15 * XH) (Stroke * 0.625)
@ -151,48 +112,47 @@ glyph-block Letter-Latin-Z : begin
flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth) flat [mix (RightSB - xHookDepth) SB kBot] (kBot * yTailDepth)
curl SB (yTailDepth) curl SB (yTailDepth)
create-glyph 'z.standard' : glyph-proc define ZConfig : object
include : SmallZBaseShape straightSerifless { ZBaseShape SmallZBaseShape ZSerifless null }
include : ZStdSerifs XH straightSeriflessWithCrossBar { ZBaseShape SmallZBaseShape ZSerifless DBarOver }
create-glyph 'z.withHorizontalCrossBar' : glyph-proc straightSeriflessWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZSerifless HBarOver }
include : SmallZBaseShape curlySerifless { ZCurlyShape SmallZCurlyShape ZSerifless null }
include : ZStdSerifs XH curlySeriflessWithCrossBar { ZCurlyShape SmallZCurlyShape ZSerifless DBarOver }
include : refer-glyph 'barOver' curlySeriflessWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZSerifless HBarOver }
create-glyph 'z.withCrossBar' : glyph-proc straightSerifed { ZBaseShape SmallZBaseShape ZStdSerifs null }
include : SmallZBaseShape straightSerifedWithCrossBar { ZBaseShape SmallZBaseShape ZStdSerifs DBarOver }
include : ZStdSerifs XH straightSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZStdSerifs HBarOver }
include : refer-glyph 'antiSlashOver' curlySerifed { ZCurlyShape SmallZCurlyShape ZStdSerifs null }
create-glyph 'z.motionSerifed' : glyph-proc curlySerifedWithCrossBar { ZCurlyShape SmallZCurlyShape ZStdSerifs DBarOver }
include : SmallZBaseShape curlySerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZStdSerifs HBarOver }
include : ZMotionSerifsB XH straightBottomSerifed { ZBaseShape SmallZBaseShape ZMotionSerifsB null }
create-glyph 'z.topMotionSerifed' : glyph-proc straightBottomSerifedWithCrossbar { ZBaseShape SmallZBaseShape ZMotionSerifsB DBarOver }
include : SmallZBaseShape straightBottomSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZMotionSerifsB HBarOver }
include : ZMotionSerifsT XH curlyBottomSerifedWithCrossbar { ZCurlyShape SmallZCurlyShape ZMotionSerifsB null }
create-glyph 'z.curly' : glyph-proc curlyBottomSerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZMotionSerifsB DBarOver }
include : SmallZCurlyShape curlyBottomSerifed { ZCurlyShape SmallZCurlyShape ZMotionSerifsB HBarOver }
include : ZStdSerifs XH straightTopSerifed { ZBaseShape SmallZBaseShape ZMotionSerifsT null }
create-glyph 'z.curlyWithHorizontalCrossBar' : glyph-proc straightTopSerifedWithCrossbar { ZBaseShape SmallZBaseShape ZMotionSerifsT DBarOver }
include : SmallZCurlyShape straightTopSerifedWithHorizontalCrossBar { ZBaseShape SmallZBaseShape ZMotionSerifsT HBarOver }
include : ZStdSerifs XH curlyTopSerifed { ZCurlyShape SmallZCurlyShape ZMotionSerifsT null }
include : refer-glyph 'barOver' curlyTopSerifedWithCrossbar { ZCurlyShape SmallZCurlyShape ZMotionSerifsT DBarOver }
create-glyph 'z.curlyWithCrossBar' : glyph-proc curlyTopSerifedWithHorizontalCrossBar { ZCurlyShape SmallZCurlyShape ZMotionSerifsT HBarOver }
include : SmallZCurlyShape cursive { null SmallZCursiveShape ZSerifless null }
include : ZStdSerifs XH cursiveWithCrossBar { null SmallZCursiveShape ZSerifless DBarOver }
include : refer-glyph 'antiSlashOver' cursiveWithHorizontalCrossBar { null SmallZCursiveShape ZSerifless HBarOver }
create-glyph 'z.curlyMotionSerifed' : glyph-proc
include : SmallZCurlyShape foreach { suffix { capital small serifs slash } } [Object.entries ZConfig] : do
include : ZMotionSerifsB XH if capital : create-glyph "Z.\(suffix)" : glyph-proc
create-glyph 'z.curlyTopMotionSerifed' : glyph-proc include : MarkSet.capital
include : SmallZCurlyShape include : capital
include : ZMotionSerifsT XH if serifs : include : serifs CAP
create-glyph 'z.cursive' : glyph-proc if slash : include : slash CAP
include : SmallZCursiveShape
create-glyph 'z.cursiveWithHorizontalCrossBar' : glyph-proc if small : create-glyph "z.\(suffix)" : glyph-proc
include : SmallZCursiveShape include : MarkSet.e
include : refer-glyph 'barOver' include : small
create-glyph 'z.cursiveWithCrossBar' : glyph-proc if serifs : include : serifs XH
include : SmallZCursiveShape if slash : include : slash XH
include : refer-glyph 'antiSlashOver'
select-variant 'Z' 'Z' select-variant 'Z' 'Z'
select-variant 'z' 'z' select-variant 'z' 'z'

View file

@ -143,14 +143,26 @@ class Composite {
this.upright = cfg.upright || cfg["upright-oblique"]; this.upright = cfg.upright || cfg["upright-oblique"];
this.oblique = cfg.oblique || cfg["upright-oblique"]; this.oblique = cfg.oblique || cfg["upright-oblique"];
this.italic = cfg.italic; this.italic = cfg.italic;
const slabOverrideCfg = cfg["slab-override"] || {};
this.slabOverride = {
design: slabOverrideCfg.design,
override: slabOverrideCfg.upright || slabOverrideCfg["upright-oblique"],
oblique: slabOverrideCfg.oblique || slabOverrideCfg["upright-oblique"],
italic: slabOverrideCfg.italic
};
} }
decompose(para, selTree) { decompose(para, selTree) {
const ans = []; const ans = [];
const cfg = Object.assign( const cfg = Object.assign(
{}, {},
this.design, this.decomposeSlabOverride(this.design, this.slabOverride.design, para),
para.isItalic ? this.italic : para.isOblique ? this.oblique : this.upright para.isItalic
? this.decomposeSlabOverride(this.italic, this.slabOverride.italic, para)
: para.isOblique
? this.decomposeSlabOverride(this.oblique, this.slabOverride.oblique, para)
: this.decomposeSlabOverride(this.upright, this.slabOverride.upright, para)
); );
for (const [k, v] of Object.entries(cfg)) { for (const [k, v] of Object.entries(cfg)) {
const pv = selTree.get(k, v); const pv = selTree.get(k, v);
@ -159,6 +171,10 @@ class Composite {
} }
return ans; return ans;
} }
decomposeSlabOverride(d, sd, para) {
if (para.slab) return Object.assign({}, d, sd);
else return d;
}
resolve(para, selTree, catalog, vs) { resolve(para, selTree, catalog, vs) {
if (this.inherits) { if (this.inherits) {
if (!catalog.has(this.inherits)) { if (!catalog.has(this.inherits)) {

File diff suppressed because it is too large Load diff

View file

@ -16,13 +16,9 @@ module.exports = async function () {
const primes = getCvData(varDatParsed); const primes = getCvData(varDatParsed);
const composites = getSsData(varDatParsed); const composites = getSsData(varDatParsed);
const defaults = getDefaultCompData(varDatParsed); const defaults = getCompWithLens(varDatParsed, null, x => x.composition);
return { return { primes, composites, defaults };
primes,
composites,
defaults: defaults
};
}; };
function getCvData(parsed) { function getCvData(parsed) {
@ -34,9 +30,18 @@ function getCvData(parsed) {
return Array.from(samplerGroups.values()); return Array.from(samplerGroups.values());
} }
const UPRIGHT = {}; const mockPara = {
const OBLIQUE = { isOblique: true }; sans: {
const ITALIC = { isItalic: true }; upright: {},
oblique: { isOblique: true },
italic: { isItalic: true }
},
slab: {
upright: { slab: 2 },
oblique: { slab: 2, isOblique: true },
italic: { slab: 2, isItalic: true }
}
};
function getSsData(variants) { function getSsData(variants) {
const result = [ const result = [
@ -45,51 +50,73 @@ function getSsData(variants) {
tag: "off", tag: "off",
rank: 0, rank: 0,
description: "Default", description: "Default",
uprightComposition: {}, composition: {
italicComposition: {}, sans: { upright: {}, italic: {}, oblique: {} },
obliqueComposition: {}, slab: { upright: {}, italic: {}, oblique: {} }
hotCharSetUpright: [], },
hotCharSetItalic: [], hotChars: {
hotCharSetOblique: [] sans: { upright: [], italic: [], oblique: [] },
slab: { upright: [], italic: [], oblique: [] }
}
} }
]; ];
const hcSansUpright = buildupComposite(variants, UPRIGHT, variants.defaultComposite).hotChars; const hcDefault = getCompWithLens(variants, null, x => x.hotChars);
const hcSansItalic = buildupComposite(variants, ITALIC, variants.defaultComposite).hotChars;
const hcSansOblique = buildupComposite(variants, OBLIQUE, variants.defaultComposite).hotChars;
for (const [key, composite] of variants.composites) { for (const [key, composite] of variants.composites) {
if (!composite.tag) continue; if (!composite.tag) continue;
const upright = buildupComposite(variants, UPRIGHT, composite);
const oblique = buildupComposite(variants, OBLIQUE, composite);
const italic = buildupComposite(variants, ITALIC, composite);
result.push({ result.push({
key, key,
tag: composite.tag, tag: composite.tag,
rank: 1, rank: 1,
description: composite.description, description: composite.description,
uprightComposition: upright.composition, composition: getCompWithLens(variants, composite, x => x.composition),
italicComposition: italic.composition, hotChars: getCompWithLens(variants, composite, (x, style, slope) =>
obliqueComposition: oblique.composition, uniqueHotChars(x.hotChars, hcDefault[style][slope])
hotCharSetUpright: uniqueHotChars(hcSansUpright, upright.hotChars), )
hotCharSetItalic: uniqueHotChars(hcSansItalic, italic.hotChars),
hotCharSetOblique: uniqueHotChars(hcSansOblique, oblique.hotChars)
}); });
} }
return result; return result;
} }
function getDefaultCompData(variants) { function getCompWithLens(variants, c, lens) {
const cDefault = variants.defaultComposite; const cDefault = variants.defaultComposite;
const cSlab = variants.composites.get("slab"); const cSlab = variants.composites.get("slab");
return { return {
sansUpright: buildupComposite(variants, UPRIGHT, cDefault).composition, sans: {
sansItalic: buildupComposite(variants, ITALIC, cDefault).composition, upright: lens(
sansOblique: buildupComposite(variants, OBLIQUE, cDefault).composition, buildupComposite(variants, mockPara.sans.upright, cDefault, c),
slabUpright: buildupComposite(variants, UPRIGHT, cDefault, cSlab).composition, "sans",
slabItalic: buildupComposite(variants, ITALIC, cDefault, cSlab).composition, "upright"
slabOblique: buildupComposite(variants, OBLIQUE, cDefault, cSlab).composition ),
italic: lens(
buildupComposite(variants, mockPara.sans.italic, cDefault, c),
"sans",
"italic"
),
oblique: lens(
buildupComposite(variants, mockPara.sans.oblique, cDefault, c),
"sans",
"oblique"
)
},
slab: {
upright: lens(
buildupComposite(variants, mockPara.slab.upright, cDefault, cSlab, c),
"slab",
"upright"
),
italic: lens(
buildupComposite(variants, mockPara.slab.italic, cDefault, cSlab, c),
"slab",
"italic"
),
oblique: lens(
buildupComposite(variants, mockPara.slab.oblique, cDefault, cSlab, c),
"slab",
"oblique"
)
}
}; };
} }
@ -105,6 +132,7 @@ function buildupComposite(variants, para, ...composites) {
let compositionMap = new Map(); let compositionMap = new Map();
let hotChars = new Map(); let hotChars = new Map();
for (const composite of composites) { for (const composite of composites) {
if (!composite) continue;
for (const [prime, variant] of composite.decompose(para, variants.selectorTree)) { for (const [prime, variant] of composite.decompose(para, variants.selectorTree)) {
if (!prime.sampler) continue; if (!prime.sampler) continue;
const key = getSelectorKey(prime, variant); const key = getSelectorKey(prime, variant);

View file

@ -58,7 +58,7 @@ async function main() {
applyFeature: `'${ss.tag}' ${ss.rank}`, applyFeature: `'${ss.tag}' ${ss.rank}`,
name: `stylistic-set-u-${ss.tag}-${ss.rank}`, name: `stylistic-set-u-${ss.tag}-${ss.rank}`,
applyCallback: `cbAmendStylisticSetContents`, applyCallback: `cbAmendStylisticSetContents`,
applyCallbackArgs: { hotChars: ss.hotCharSetUpright } applyCallbackArgs: { hotChars: ss.hotChars.sans.upright }
}); });
readmeSnapshotTasks.push({ readmeSnapshotTasks.push({
el: "#packaging-sampler", el: "#packaging-sampler",
@ -66,7 +66,7 @@ async function main() {
applyFeature: `'${ss.tag}' ${ss.rank}`, applyFeature: `'${ss.tag}' ${ss.rank}`,
name: `stylistic-set-i-${ss.tag}-${ss.rank}`, name: `stylistic-set-i-${ss.tag}-${ss.rank}`,
applyCallback: `cbAmendStylisticSetContents`, applyCallback: `cbAmendStylisticSetContents`,
applyCallbackArgs: { hotChars: ss.hotCharSetItalic } applyCallbackArgs: { hotChars: ss.hotChars.sans.italic }
}); });
} }
await fs.writeJson( await fs.writeJson(