Make Dotless J with Stroke and Hook serifed under slab. (#2562)

* Make Dotless J with Stroke and Hook auto-serifed.

* typo.
This commit is contained in:
John McWilliams 2024-10-27 16:40:40 -04:00 committed by GitHub
parent 7593710011
commit bba1f8dbca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 71 additions and 40 deletions

View file

@ -9,3 +9,4 @@
- ARMENIAN SMALL LETTER TURNED AYB (`U+0560`) ... ARMENIAN HYPHEN (`U+058A`). - ARMENIAN SMALL LETTER TURNED AYB (`U+0560`) ... ARMENIAN HYPHEN (`U+058A`).
- ARMENIAN DRAM SIGN (`U+058F`). - ARMENIAN DRAM SIGN (`U+058F`).
* Optimize `semi-chancery-straight-serifed` and `semi-chancery-curly-serifed` variants for `x` (`cv58`). * Optimize `semi-chancery-straight-serifed` and `semi-chancery-curly-serifed` variants for `x` (`cv58`).
* Make Dotless J with Stroke and Hook (`U+0284`) have a serif under slab.

View file

@ -13,10 +13,10 @@ glyph-block Letter-Armenian-Aliases : begin
alias 'armn/aybTurned' 0x560 'm' alias 'armn/aybTurned' 0x560 'm'
alias 'armn/ayb' 0x561 'turnm' alias 'armn/ayb' 0x561 'turnm'
alias 'armn/ho' 0x570 'h' alias 'armn/ho' 0x570 'h'
alias 'armn/yi' 0x575 [if SLAB 'dotlessj.flatHookSerifed' 'dotlessj.flatHookSerifless'] alias 'armn/yi' 0x575 'dotlessj.flatHook'
alias 'armn/vo' 0x578 'n' alias 'armn/vo' 0x578 'n'
alias 'armn/peh' 0x57A 'turnmLeg' alias 'armn/peh' 0x57A 'turnmLeg'
alias 'armn/seh' 0x57D 'u' alias 'armn/seh' 0x57D 'u'
alias 'armn/co' 0x581 'cyrl/de.BGR' alias 'armn/co' 0x581 'cyrl/de.BGR'
alias 'armn/oh' 0x585 'o' alias 'armn/oh' 0x585 'o'
alias 'armn/yiBar' 0x588 [if SLAB 'dotlessjBar.flatHookSerifed' 'dotlessjBar.flatHookSerifless'] alias 'armn/yiBar' 0x588 'dotlessjBar.flatHook'

View file

@ -35,14 +35,16 @@ glyph-block Letter-Latin-Lower-J : begin
set-base-anchor 'overlay' barCenter (top / 2) set-base-anchor 'overlay' barCenter (top / 2)
define XMiddle : namespace define XMiddle : namespace
export : define [Straight df] : begin df.middle export : define [StraightSerifless df] : begin df.middle
export : define [Hooky df] : df.middle + [IBalance2 df] export : define [StraightSerifed df] : df.middle + [IBalance2 df]
export : define [Regular df] : df.middle + JBalance export : define [BentHook df] : df.middle + JBalance
export : define [FlatHookSerifless df] : df.middle + 0.25 * JBalance * df.div * [mix 1 df.div 2] export : define [FlatHookSerifless df] : df.middle + 0.25 * JBalance * df.div * [mix 1 df.div 2]
export : define [FlatHookSerifed df] : df.middle + JBalance * df.div export : define [FlatHookSerifed df] : df.middle + JBalance * df.div
export : define [StraightAutoSerifed df] : if SLAB [StraightSerifed df] [StraightSerifless df]
export : define [FlatHookAutoSerifed df] : if SLAB [FlatHookSerifed df] [FlatHookSerifless df]
define Body : namespace define Body : namespace
export : define [Regular df top xMiddle] : glyph-proc export : define [BentHook df top xMiddle] : glyph-proc
local hookx : Math.min (xMiddle - (Width * 0.5) - [HSwToV HalfStroke] + OXHook) (xMiddle - 1.5 * [HSwToV Stroke] + OXHook) local hookx : Math.min (xMiddle - (Width * 0.5) - [HSwToV HalfStroke] + OXHook) (xMiddle - 1.5 * [HSwToV Stroke] + OXHook)
set-base-anchor "below" [mix hookx xMiddle 0.5] Descender set-base-anchor "below" [mix hookx xMiddle 0.5] Descender
include : dispiro include : dispiro
@ -74,26 +76,46 @@ glyph-block Letter-Latin-Lower-J : begin
set-base-anchor "trailing" (xMiddle - [HSwToV HalfStroke]) Descender set-base-anchor "trailing" (xMiddle - [HSwToV HalfStroke]) Descender
define Serifs : namespace define Serifs : namespace
export : define [None df top xMiddle] : no-shape
export : define [Long df top xMiddle] : HSerif.lt xMiddle top (LongJut * df.div) export : define [Long df top xMiddle] : HSerif.lt xMiddle top (LongJut * df.div)
export : define [Auto df top xMiddle] : if SLAB [Long df top xMiddle] [no-shape]
define Marks : namespace define Marks : namespace
export : define [Serifed df top xMiddle] : glyph-proc
include : Serifless df top xMiddle
include : LeaningAnchor.Above.At [mix df.middle xMiddle (7/8)]
export : define [Serifless df top xMiddle] : glyph-proc export : define [Serifless df top xMiddle] : glyph-proc
set-base-anchor 'above' xMiddle top set-base-anchor 'above' xMiddle top
set-base-anchor 'overlay' xMiddle (top / 2) set-base-anchor 'overlay' xMiddle (top / 2)
export : define [Serifed df top xMiddle] : glyph-proc
include : Serifless df top xMiddle
include : LeaningAnchor.Above.At [mix df.middle xMiddle (7/8)]
export : define [AutoSerifed df top xMiddle] : glyph-proc
include : if SLAB
Serifed df top xMiddle
Serifless df top xMiddle
define Div : namespace
export : define BentHook 1
export : define StraightSerifless para.diversityII
export : define StraightSerifed para.diversityI
export : define FlatHookSerifless para.diversityII
export : define FlatHookSerifed para.diversityI
export : define StraightAutoSerifed : if SLAB para.diversityI para.diversityII
export : define FlatHookAutoSerifed : if SLAB para.diversityI para.diversityII
define JConfig : object define JConfig : object
'serifless' { "Regular" null XMiddle.Regular Marks.Serifless 1 } 'bentHook' { "BentHook" Serifs.Auto XMiddle.BentHook Marks.AutoSerifed Div.BentHook }
'serifed' { "Regular" Serifs.Long XMiddle.Regular Marks.Serifed 1 } 'bentHookSerifless' { "BentHook" Serifs.None XMiddle.BentHook Marks.Serifless Div.BentHook }
'straightLine' { "Straight" null XMiddle.Straight Marks.Serifless para.diversityII } 'bentHookSerifed' { "BentHook" Serifs.Long XMiddle.BentHook Marks.Serifed Div.BentHook }
'hooky' { "Straight" Serifs.Long XMiddle.Hooky Marks.Serifed para.diversityI } 'straight' { "Straight" Serifs.Auto XMiddle.StraightAutoSerifed Marks.AutoSerifed Div.StraightAutoSerifed }
'flatHookSerifless' { "FlatHook" null XMiddle.FlatHookSerifless Marks.Serifless para.diversityII } 'straightSerifless' { "Straight" Serifs.None XMiddle.StraightSerifless Marks.Serifless Div.StraightSerifless }
'flatHookSerifed' { "FlatHook" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed para.diversityI } 'straightSerifed' { "Straight" Serifs.Long XMiddle.StraightSerifed Marks.Serifed Div.StraightSerifed }
'diagonalTailedSerifless' { "DiagonalTailed" null XMiddle.FlatHookSerifless Marks.Serifless para.diversityII } 'flatHook' { "FlatHook" Serifs.Auto XMiddle.FlatHookAutoSerifed Marks.AutoSerifed Div.FlatHookAutoSerifed }
'diagonalTailedSerifed' { "DiagonalTailed" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed para.diversityI } 'flatHookSerifless' { "FlatHook" Serifs.None XMiddle.FlatHookSerifless Marks.Serifless Div.FlatHookSerifless }
'flatHookSerifed' { "FlatHook" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed Div.FlatHookSerifed }
'diagonalTailed' { "DiagonalTailed" Serifs.Auto XMiddle.FlatHookAutoSerifed Marks.AutoSerifed Div.FlatHookAutoSerifed }
'diagonalTailedSerifless' { "DiagonalTailed" Serifs.None XMiddle.FlatHookSerifless Marks.Serifless Div.FlatHookSerifless }
'diagonalTailedSerifed' { "DiagonalTailed" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed Div.FlatHookSerifed }
foreach { suffix { shapeId Serif xMiddleT Marks div } } [Object.entries JConfig] : do foreach { suffix { shapeId Serif xMiddleT Marks div } } [Object.entries JConfig] : do
local df : DivFrame div local df : DivFrame div
@ -103,7 +125,7 @@ glyph-block Letter-Latin-Lower-J : begin
set-width df.width set-width df.width
include : df.markSet.p include : df.markSet.p
include : Body.(shapeId) df XH xMiddle include : Body.(shapeId) df XH xMiddle
if Serif : include : tagged 'serifLT' : Serif df XH xMiddle include : tagged 'serifLT' : Serif df XH xMiddle
include : Marks df XH xMiddle include : Marks df XH xMiddle
create-glyph "dotlessjBar.\(suffix)" : glyph-proc create-glyph "dotlessjBar.\(suffix)" : glyph-proc
@ -122,7 +144,7 @@ glyph-block Letter-Latin-Lower-J : begin
link-reduced-variant 'j/sansSerif' 'j' MathSansSerif link-reduced-variant 'j/sansSerif' 'j' MathSansSerif
select-variant 'dotlessjBar' 0x25F (follow -- 'dotlessj') select-variant 'dotlessjBar' 0x25F (follow -- 'dotlessj')
select-variant 'dotlessjBarHookTop' 0x284 (follow -- 'dotlessj/sansSerif') select-variant 'dotlessjBarHookTop' 0x284 (follow -- 'dotlessjHookTop')
CreateAccentedComposition 'jBar' 0x249 'dotlessjBar' 'tittleAbove' CreateAccentedComposition 'jBar' 0x249 'dotlessjBar' 'tittleAbove'
alias 'grek/yot' 0x3F3 'j' alias 'grek/yot' 0x3F3 'j'

View file

@ -13,7 +13,7 @@ glyph-block Letter-Latin-Upper-J : begin
glyph-block-import Letter-Blackboard : BBS BBD glyph-block-import Letter-Blackboard : BBS BBD
glyph-block-import Letter-Latin-Lower-J : FlatHookDotlessJShape glyph-block-import Letter-Latin-Lower-J : FlatHookDotlessJShape
define [JFullHookBase df dfHook top] : glyph-proc define [JBentHookBase df dfHook top] : glyph-proc
set-width df.width set-width df.width
include : df.markSet.[if (top > XH) 'capital' 'e'] include : df.markSet.[if (top > XH) 'capital' 'e']
@ -51,7 +51,7 @@ glyph-block Letter-Latin-Upper-J : begin
flat (df.rightSB - JBalance2 - [Math.min (0.625 * (df.rightSB - df.leftSB)) (1.375 * hd.x)]) 0 [widths.rhs Stroke] flat (df.rightSB - JBalance2 - [Math.min (0.625 * (df.rightSB - df.leftSB)) (1.375 * hd.x)]) 0 [widths.rhs Stroke]
curl df.leftSB 0 curl df.leftSB 0
define [JDescendingBase df dfHook top] : glyph-proc define [JDescendingBentHookBase df dfHook top] : glyph-proc
set-width df.width set-width df.width
include : df.markSet.[if (top > XH) 'capDesc' 'p'] include : df.markSet.[if (top > XH) 'capDesc' 'p']
@ -69,8 +69,8 @@ glyph-block Letter-Latin-Upper-J : begin
hookend Descender hookend Descender
g4 hookx (Descender + JHook) g4 hookx (Descender + JHook)
set JFullHookBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.rightSB - [HSwToV HalfStroke] - JBalance2) (df.leftSB) top 0 'capital' set JBentHookBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.rightSB - [HSwToV HalfStroke] - JBalance2) (df.leftSB) top 0 'capital'
set JDescendingBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.middle + JBalance) (df.middle + JBalance - LongJut - [HSwToV HalfStroke]) top Descender 'capDesc' set JDescendingBentHookBase.WithCurlyTail : function [df top] : JCurlyTailBaseT df (df.middle + JBalance) (df.middle + JBalance - LongJut - [HSwToV HalfStroke]) top Descender 'capDesc'
define [JCurlyTailBaseT df xc xCo top bottom markClass] : glyph-proc define [JCurlyTailBaseT df xc xCo top bottom markClass] : glyph-proc
set-width df.width set-width df.width
include : df.markSet.(markClass) include : df.markSet.(markClass)
@ -112,9 +112,9 @@ glyph-block Letter-Latin-Upper-J : begin
define JConfig : SuffixCfg.weave define JConfig : SuffixCfg.weave
object # height and hook object # height and hook
"" { JFullHookBase [DivFrame 1] [DivFrame 1] } bentHook { JBentHookBase [DivFrame 1] [DivFrame 1] }
flatHook { JFlatHookBase [DivFrame 1] [DivFrame 1] } flatHook { JFlatHookBase [DivFrame 1] [DivFrame 1] }
descending { JDescendingBase [DivFrame 1] [DivFrame 1] } descendingBentHook { JDescendingBentHookBase [DivFrame 1] [DivFrame 1] }
descendingFlatHookSerifless { JDescendingFlatHookBase [DivFrame para.diversityI] [DivFrame para.diversityI] } descendingFlatHookSerifless { JDescendingFlatHookBase [DivFrame para.diversityI] [DivFrame para.diversityI] }
descendingFlatHookSerifed { JDescendingFlatHookSerifedBase [DivFrame para.diversityI] [DivFrame para.diversityI] } descendingFlatHookSerifed { JDescendingFlatHookSerifedBase [DivFrame para.diversityI] [DivFrame para.diversityI] }
function [body] : if (body == 'descendingFlatHookSerifless' || body == 'descendingFlatHookSerifed') {."" null} : object function [body] : if (body == 'descendingFlatHookSerifless' || body == 'descendingFlatHookSerifed') {."" null} : object

View file

@ -1059,13 +1059,13 @@ selectorAffix.JCurlyTail = "descending"
[prime.capital-j.variants-buildup.stages.hook."*"] [prime.capital-j.variants-buildup.stages.hook."*"]
next = "serifs" next = "serifs"
[prime.capital-j.variants-buildup.stages.hook.standard] [prime.capital-j.variants-buildup.stages.hook.bent-hook]
rank = 1 rank = 1
keyAffix = "" keyAffix = ""
selectorAffix.J = "" selectorAffix.J = "bentHook"
selectorAffix."J/noDescend" = "" selectorAffix."J/noDescend" = "bentHook"
selectorAffix."J/sansSerif" = "" selectorAffix."J/sansSerif" = "bentHook"
selectorAffix.JCurlyTail = "" selectorAffix.JCurlyTail = "bentHook"
[prime.capital-j.variants-buildup.stages.hook.flat-hook] [prime.capital-j.variants-buildup.stages.hook.flat-hook]
rank = 2 rank = 2
@ -1073,7 +1073,7 @@ descriptionAffix = "flat hook"
selectorAffix.J = "flatHook" selectorAffix.J = "flatHook"
selectorAffix."J/noDescend" = "flatHook" selectorAffix."J/noDescend" = "flatHook"
selectorAffix."J/sansSerif" = "flatHook" selectorAffix."J/sansSerif" = "flatHook"
selectorAffix.JCurlyTail = "" selectorAffix.JCurlyTail = "bentHook"
[prime.capital-j.variants-buildup.stages.serifs.serifless] [prime.capital-j.variants-buildup.stages.serifs.serifless]
rank = 1 rank = 1
@ -3082,29 +3082,33 @@ tagKind = "letter"
[prime.j.variants.serifless] [prime.j.variants.serifless]
rank = 1 rank = 1
description = "`j` without serif" description = "`j` without serif"
selector.dotlessj = "serifless" selector.dotlessj = "bentHookSerifless"
selector."dotlessj/sansSerif" = "serifless" selector."dotlessj/sansSerif" = "bentHookSerifless"
selector.dotlessjHookTop = "bentHook"
selector.dotlessjCurlyTail = "serifless" selector.dotlessjCurlyTail = "serifless"
[prime.j.variants.serifed] [prime.j.variants.serifed]
rank = 2 rank = 2
description = "`j` with top serif" description = "`j` with top serif"
selector.dotlessj = "serifed" selector.dotlessj = "bentHookSerifed"
selector."dotlessj/sansSerif" = "serifless" selector."dotlessj/sansSerif" = "bentHookSerifless"
selector.dotlessjHookTop = "bentHook"
selector.dotlessjCurlyTail = "serifed" selector.dotlessjCurlyTail = "serifed"
[prime.j.variants.straight-line] [prime.j.variants.straight-line]
rank = 3 rank = 3
description = "`j` like a straight line" description = "`j` like a straight line"
selector.dotlessj = "straightLine" selector.dotlessj = "straightSerifless"
selector."dotlessj/sansSerif" = "straightLine" selector."dotlessj/sansSerif" = "straightSerifless"
selector.dotlessjHookTop = "straight"
selector.dotlessjCurlyTail = "serifless" selector.dotlessjCurlyTail = "serifless"
[prime.j.variants.hooky] [prime.j.variants.hooky]
rank = 4 rank = 4
description = "`j` like a straight line with top serif" description = "`j` like a straight line with top serif"
selector.dotlessj = "hooky" selector.dotlessj = "straightSerifed"
selector."dotlessj/sansSerif" = "straightLine" selector."dotlessj/sansSerif" = "straightSerifless"
selector.dotlessjHookTop = "straight"
selector.dotlessjCurlyTail = "serifed" selector.dotlessjCurlyTail = "serifed"
[prime.j.variants.flat-hook-serifless] [prime.j.variants.flat-hook-serifless]
@ -3112,6 +3116,7 @@ rank = 5
description = "`j` with flat terminal hook" description = "`j` with flat terminal hook"
selector.dotlessj = "flatHookSerifless" selector.dotlessj = "flatHookSerifless"
selector."dotlessj/sansSerif" = "flatHookSerifless" selector."dotlessj/sansSerif" = "flatHookSerifless"
selector.dotlessjHookTop = "flatHook"
selector.dotlessjCurlyTail = "serifless" selector.dotlessjCurlyTail = "serifless"
[prime.j.variants.flat-hook-serifed] [prime.j.variants.flat-hook-serifed]
@ -3119,6 +3124,7 @@ rank = 6
description = "`j` with flat terminal hook and top serif" description = "`j` with flat terminal hook and top serif"
selector.dotlessj = "flatHookSerifed" selector.dotlessj = "flatHookSerifed"
selector."dotlessj/sansSerif" = "flatHookSerifless" selector."dotlessj/sansSerif" = "flatHookSerifless"
selector.dotlessjHookTop = "flatHook"
selector.dotlessjCurlyTail = "serifed" selector.dotlessjCurlyTail = "serifed"
[prime.j.variants.diagonal-tailed-serifless] [prime.j.variants.diagonal-tailed-serifless]
@ -3126,6 +3132,7 @@ rank = 7
description = "`j` with diagonal tail" description = "`j` with diagonal tail"
selector.dotlessj = "diagonalTailedSerifless" selector.dotlessj = "diagonalTailedSerifless"
selector."dotlessj/sansSerif" = "diagonalTailedSerifless" selector."dotlessj/sansSerif" = "diagonalTailedSerifless"
selector.dotlessjHookTop = "diagonalTailed"
selector.dotlessjCurlyTail = "serifless" selector.dotlessjCurlyTail = "serifless"
[prime.j.variants.diagonal-tailed-serifed] [prime.j.variants.diagonal-tailed-serifed]
@ -3133,6 +3140,7 @@ rank = 8
description = "`j` with top serif and diagonal tail" description = "`j` with top serif and diagonal tail"
selector.dotlessj = "diagonalTailedSerifed" selector.dotlessj = "diagonalTailedSerifed"
selector."dotlessj/sansSerif" = "diagonalTailedSerifless" selector."dotlessj/sansSerif" = "diagonalTailedSerifless"
selector.dotlessjHookTop = "diagonalTailed"
selector.dotlessjCurlyTail = "serifed" selector.dotlessjCurlyTail = "serifed"