Add flat-hooked Long S and Eszet (#952).

This commit is contained in:
be5invis 2021-04-15 20:55:07 -07:00
parent 61f070d690
commit 0787efe08c
4 changed files with 122 additions and 55 deletions

View file

@ -7,4 +7,5 @@
* Add flat-arc parenthesis (#941).
* Fixed broken shape of Motion Serifed Cyrl/Shcha (#944).
* Add vertical-sides variants of `W` and `w` (#950).
* Add slant-sided `M` (#953).
* Add slant-sided `M` (#953).
* Add flat-hooked Long S and Eszet (#952).

View file

@ -9,6 +9,7 @@ glyph-module
glyph-block Letter-Latin-Eszet : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : FlatHookDepth
glyph-block-import Letter-Latin-S : SNeck
local ymiddle : [mix 0 CAP 0.5] - HalfStroke
@ -19,12 +20,21 @@ glyph-block Letter-Latin-Eszet : begin
xmiddle - 1 - Stroke * TanSlope
Math.max (SB + Stroke * 2) [mix SB RightSB (1 / 4)]
define [TraditionalBody slab tail] : glyph-proc
define [TraditionalBody fFlathook slab tail] : glyph-proc
include : MarkSet.b
local l : SB * 1
include : dispiro
local xHook : [mix SB RightSB 0.75] + HalfStroke * HVContrast
local hd : FlatHookDepth [DivFrame 1]
if fFlathook
: then : include : dispiro
flat xHook CAP [widths.lhs]
curl (l + hd.x) CAP
archv
flat l (CAP - hd.y)
curl l 0 [heading Downward]
: else : include : dispiro
widths.lhs
g4 ([mix SB RightSB 0.75] + HalfStroke * HVContrast) (CAP - Hook)
g4 xHook (CAP - Hook)
hookstart (CAP - O)
flat l XH
curl l 0 [heading Downward]
@ -112,8 +122,10 @@ glyph-block Letter-Latin-Eszet : begin
if tail : include : VerticalHook (SB + 0.5 * swOuter * HVContrast) 0 (-Hook * 1.2) Hook swOuter
if slab : include : LeftwardBottomSerif SB 0 SideJut
create-glyph 'eszet.traditional' : TraditionalBody SLAB false
create-glyph 'eszet.traditionalTailed' : TraditionalBody false true
create-glyph 'eszet.traditional' : TraditionalBody false SLAB false
create-glyph 'eszet.traditionalTailed' : TraditionalBody false false true
create-glyph 'eszet.traditionalFlatHook' : TraditionalBody true SLAB false
create-glyph 'eszet.traditionalFlatHookTailed' : TraditionalBody true false true
create-glyph 'eszet.sulzbacher' : SulzbacherBody SLAB false
create-glyph 'eszet.sulzbacherTailed' : SulzbacherBody false true
create-glyph 'eszet.longSSLig' : LongSSLigBody SLAB false

View file

@ -26,7 +26,7 @@ glyph-block Letter-Latin-Lower-F : begin
if SLAB : begin
include : tagged 'serifMB' : CenterBottomSerif (Middle - FBalance) 0 Jut
create-glyph 'longs.upright' : glyph-proc
create-glyph 'longs.upright.standard' : glyph-proc
include : MarkSet.b
local m : Middle - JBalance - HalfStroke * HVContrast
local r : m + (Width * 0.5) + Stroke * HVContrast - OXHook
@ -40,7 +40,28 @@ glyph-block Letter-Latin-Lower-F : begin
if SLAB : begin
include : tagged 'serifLB' : CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) 0 (Jut + RBalance * 0.65)
create-derived 'longsbar.upright' : glyph-proc
create-derived 'longsbar.upright.standard' : glyph-proc
include : HOverlayBar
m + HalfStroke * HVContrast - LongJut * 0.75
m + HalfStroke * HVContrast + LongJut * 0.75
[mix (XH - Stroke) CAP 0.5] - HalfStroke
create-glyph 'longs.upright.flatHook' : glyph-proc
include : MarkSet.b
local hd : FlatHookDepth [DivFrame 1]
local m : Middle - JBalance - HalfStroke * HVContrast
include : dispiro
widths.lhs
flat RightSB CAP
curl (m + hd.x) CAP
archv
flat m (CAP - hd.y)
curl m 0 [heading Downward]
set-base-anchor 'overlay' (m + Stroke * 0.65 * HVContrast) (CAP * OverlayPos)
if SLAB : begin
include : tagged 'serifLB' : CenterBottomSerif (m + HalfStroke * HVContrast + RBalance * 0.35) 0 (Jut + RBalance * 0.65)
create-derived 'longsbar.upright.flatHook' : glyph-proc
include : HOverlayBar
m + HalfStroke * HVContrast - LongJut * 0.75
m + HalfStroke * HVContrast + LongJut * 0.75
@ -74,7 +95,8 @@ glyph-block Letter-Latin-Lower-F : begin
Middle + LongJut * 0.75
[mix Stroke Descender 0.5] + HalfStroke
select-variant 'longs.upright'
select-variant 'longsbar.upright' null (follow -- 'longs.upright')
alias 'esh' 0x283 'longs.italic'
create-glyph 'eshcurlytail' 0x286 : glyph-proc

View file

@ -3055,10 +3055,28 @@ selector.z = "cursiveWithHorizontalCrossBar"
selector."zReduced" = "cursive"
[prime.long-s]
sampler = "ſ"
samplerExplain = "Long-S"
tag = "cv51"
[prime.long-s.variants.standard]
rank = 1
description = "Long-S with standard hook"
selector."longs.upright" = "standard"
[prime.long-s.variants.flat-hook]
rank = 2
description = "Long-S with flat hook"
selector."longs.upright" = "flatHook"
[prime.eszet]
sampler = "ß"
samplerExplain = "Eszet"
tag = "cv51"
tag = "cv52"
[prime.eszet.variants.traditional]
rank = 1
@ -3067,27 +3085,37 @@ selector.eszet = "traditional"
[prime.eszet.variants.traditional-tailed]
rank = 2
description = "Traditional, Fraktur-like Eszet (`ß`)"
description = "Traditional, Fraktur-like Eszet (`ß`) with descending tail"
selector.eszet = "traditionalTailed"
[prime.eszet.variants.sulzbacher]
[prime.eszet.variants.traditional-flat-hook]
rank = 3
description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook"
selector.eszet = "traditionalFlatHook"
[prime.eszet.variants.traditional-flat-hook-tailed]
rank = 4
description = "Traditional, Fraktur-like Eszet (`ß`) with flat hook and descending tail"
selector.eszet = "traditionalFlatHookTailed"
[prime.eszet.variants.sulzbacher]
rank = 5
description = "More modern, beta-like Eszet (`ß`)"
selector.eszet = "sulzbacher"
[prime.eszet.variants.sulzbacher-tailed]
rank = 4
description = "More modern, beta-like Eszet (`ß`)"
rank = 6
description = "More modern, beta-like Eszet (`ß`) with descending tail"
selector.eszet = "sulzbacherTailed"
[prime.eszet.variants.longs-s-lig]
rank = 5
rank = 7
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`"
selector.eszet = "longSSLig"
[prime.eszet.variants.longs-s-lig-tailed]
rank = 6
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`"
rank = 8
description = "Eszet (`ß`) shown as a ligature of long-S (`ſ`) and `s`, with descending tail"
selector.eszet = "longSSLigTailed"
@ -3096,7 +3124,7 @@ selector.eszet = "longSSLigTailed"
sampler = "ΛΔ"
samplerExplain = "Greek capital Lambda (`Λ`) and Greek capital Delta (`Δ`)"
tag = "cv52"
tag = "cv53"
[prime.turn-v.variants.straight]
rank = 1
@ -3115,7 +3143,7 @@ selector."grek/Delta" = "curly"
[prime.lower-alpha]
sampler = "α"
samplerExplain = "Greek lower Alpha"
tag = "cv53"
tag = "cv54"
[prime.lower-alpha.variants.crossing]
rank = 1
@ -3132,7 +3160,7 @@ selector."grek/alpha" = "tailedBarred"
[prime.capital-gamma]
sampler = "Γ"
samplerExplain = "Greek capital Gamma"
tag = "cv54"
tag = "cv55"
[prime.capital-gamma.variants.standard]
rank = 1
@ -3153,7 +3181,7 @@ selector."cyrl/ghe.upright" = "motionSerifed"
[prime.latn-epsilon]
sampler = "ɛ"
samplerExplain = "Latin small Epsilon"
tag = "cv55"
tag = "cv56"
[prime.latn-epsilon.variants.serifless]
rank = 1
@ -3178,7 +3206,7 @@ selector.'latn/epsilon' = 'inwardSerifed'
[prime.latn-reverse-epsilon]
sampler = "ɜ"
samplerExplain = "Latin reverse Epsilon and Cyrillic Ze"
tag = "cv56"
tag = "cv57"
[prime.latn-reverse-epsilon.variants.serifless]
rank = 1
@ -3203,7 +3231,7 @@ selector.'cyrl/ze' = 'inwardSerifed'
[prime.lower-iota]
sampler = "ι"
samplerExplain = "Greek lower Iota"
tag = "cv57"
tag = "cv58"
[prime.lower-iota.variants.zshaped]
rank = 1
@ -3240,7 +3268,7 @@ selector."grek/iota" = "serifedFlatTailed"
[prime.lower-lambda]
sampler = "λ"
samplerExplain = "Greek small Lambda"
tag = "cv58"
tag = "cv59"
[prime.lower-lambda.variants.straight]
rank = 1
@ -3267,7 +3295,7 @@ selector."grek/lambda" = "curlyTurn"
[prime.cyrl-ka]
sampler = "к"
samplerExplain = "Cyrillic Ka"
tag = "cv59"
tag = "cv60"
[prime.cyrl-ka.variants.straight]
rank = 1
@ -3322,7 +3350,7 @@ selector."cyrl/ka" = "symmetricConnectedMotionSerifed"
[prime.cyrl-capital-u]
sampler = "У"
samplerExplain = "Cyrillic Capital U"
tag = "cv60"
tag = "cv61"
[prime.cyrl-capital-u.variants.straight]
rank = 1
@ -3426,7 +3454,7 @@ selector."cyrl/lje" = "cursive"
[prime.zero]
sampler = "0"
tag = "cv61"
tag = "cv62"
[prime.zero.variants.unslashed]
rank = 1
@ -3482,7 +3510,7 @@ selector.zero = "longDottedOval"
[prime.one]
sampler = "1"
tag = "cv62"
tag = "cv63"
[prime.one.variants.nobase]
rank = 1
@ -3523,7 +3551,7 @@ selector.one = "baseFlatTopSerif"
[prime.two]
sampler = "2"
tag = "cv63"
tag = "cv64"
[prime.two.variants.straight-neck]
rank = 1
@ -3539,7 +3567,7 @@ selector.two = "curlyNeck"
[prime.three]
sampler = "3"
tag = "cv64"
tag = "cv65"
[prime.three.variants.flattop]
rank = 1
@ -3555,7 +3583,7 @@ selector.three = "twoarcs"
[prime.four]
sampler = "4"
tag = "cv65"
tag = "cv66"
[prime.four.variants.closed]
rank = 1
@ -3591,7 +3619,7 @@ selector.four = "openNonCrossing"
[prime.five]
sampler = "5"
tag = "cv66"
tag = "cv67"
[prime.five.variants.vertical-upper-left-bar]
rank = 1
@ -3607,7 +3635,7 @@ selector.five = "obliqueUpperLeftBar"
[prime.six]
sampler = "6"
tag = "cv67"
tag = "cv68"
[prime.six.variants.closed-contour]
rank = 1
@ -3628,7 +3656,7 @@ selector.six = "straightBar"
[prime.seven]
sampler = "7"
tag = "cv68"
tag = "cv69"
[prime.seven.variants.straight-serifless]
rank = 1
@ -3694,7 +3722,7 @@ selector.seven = "curlyCrossbarSerifed"
[prime.eight]
sampler = "8"
tag = "cv69"
tag = "cv70"
[prime.eight.variants.crossing]
rank = 1
@ -3715,7 +3743,7 @@ selector.eight = "crossingAsymmetric"
[prime.nine]
sampler = "9"
tag = "cv70"
tag = "cv71"
[prime.nine.variants.closed-contour]
rank = 1
@ -3736,7 +3764,7 @@ selector.nine = "straightBar"
[prime.tilde]
sampler = "~"
tag = "cv71"
tag = "cv72"
[prime.tilde.variants.high]
rank = 1
@ -3752,7 +3780,7 @@ selector.asciiTilde = "low"
[prime.asterisk]
sampler = "*"
tag = "cv72"
tag = "cv73"
[prime.asterisk.variants.high]
rank = 1
@ -3794,7 +3822,7 @@ selector."asterisk/lowered" = "turnPentaLow"
[prime.underscore]
sampler = "_"
tag = "cv73"
tag = "cv74"
[prime.underscore.variants.above-baseline]
rank = 1
@ -3815,7 +3843,7 @@ selector.underscore = "low"
[prime.paragraph-sign]
sampler = "¶"
tag = "cv74"
tag = "cv75"
[prime.paragraph-sign.variants.high]
rank = 1
@ -3833,7 +3861,7 @@ selector.revertParagraph = "low"
[prime.caret]
sampler = "^"
tag = "cv75"
tag = "cv76"
[prime.caret.variants.high]
rank = 1
@ -3854,7 +3882,7 @@ selector.asciiCaret = "low"
[prime.paren]
sampler = "( )"
tag = "cv76"
tag = "cv77"
[prime.paren.variants.normal]
rank = 1
@ -3878,7 +3906,7 @@ selector.parenRight = "flatArc"
[prime.brace]
sampler = "{ }"
tag = "cv77"
tag = "cv78"
[prime.brace.variants.straight]
rank = 1
@ -3896,7 +3924,7 @@ selector.braceRight = "curly"
[prime.number-sign]
sampler = "#"
tag = "cv78"
tag = "cv79"
[prime.number-sign.variants.upright]
rank = 1
@ -3922,7 +3950,7 @@ selector.numberSign = "slantedOpen"
[prime.ampersand]
sampler = "&"
tag = "cv79"
tag = "cv80"
[prime.ampersand.variants.closed]
rank = 1
@ -3963,7 +3991,7 @@ selector.ampersand = "flatTop"
[prime.at]
sampler = "@"
tag = "cv80"
tag = "cv81"
[prime.at.variants.threefold]
rank = 1
@ -3984,7 +4012,7 @@ selector.at = "short"
[prime.dollar]
sampler = "$"
tag = "cv81"
tag = "cv82"
[prime.dollar.variants.open]
rank = 1
@ -4020,7 +4048,7 @@ selector.dollar = "interruptedCap"
[prime.cent]
sampler = "¢"
tag = "cv82"
tag = "cv83"
[prime.cent.variants.open]
rank = 1
@ -4041,7 +4069,7 @@ selector.cent = "barInterrupted"
[prime.percent]
sampler = "%"
tag = "cv83"
tag = "cv84"
[prime.percent.variants.dots]
rank = 1
@ -4075,7 +4103,7 @@ selector."permille.WWID" = "ringsContinuousSlashAlsoConnected"
[prime.bar]
sampler = "|"
tag = "cv84"
tag = "cv85"
slopeDependent = true
[prime.bar.variants.natural-slope]
@ -4092,7 +4120,7 @@ selector."bar.italic" = "forceUpright"
[prime.lig-ltgteq]
sampler = "<= >="
tag = "cv85"
tag = "cv86"
[prime.lig-ltgteq.variants.flat]
rank = 1
@ -4110,7 +4138,7 @@ selector."eq.at-gteq.lig2" = "slanted"
[prime.ascii-single-quote]
sampler = "'"
tag = "cv86"
tag = "cv87"
[prime.ascii-single-quote.variants.straight]
rank = 1
@ -4126,7 +4154,7 @@ selector.asciiSingleQuote = "raisedComma"
[prime.ascii-grave]
sampler = "`"
tag = "cv87"
tag = "cv88"
[prime.ascii-grave.variants.straight]
rank = 1
@ -4147,7 +4175,7 @@ selector.asciiGrave = "raisedTurnComma"
[prime.question]
sampler = "?"
tag = "cv88"
tag = "cv89"
[prime.question.variants.smooth]
rank = 1
@ -4218,6 +4246,7 @@ w = "straight"
x = "straight-serifless"
z = "straight-serifless"
# Non-latin
long-s = "standard"
turn-v = "straight"
lower-alpha = "crossing"
capital-gamma = "standard"
@ -4436,6 +4465,7 @@ description = "Consolas Style"
[composite.ss03.design]
capital-g = "toothless-corner-serifless-hooked"
capital-k = "symmetric-touching"
capital-m = "slanted-sides-hanging"
a = "double-storey"
d = "toothed-serifless"
g = "double-storey"
@ -4526,6 +4556,7 @@ description = "Fira Mono Style"
[composite.ss05.design]
capital-g = "toothless-corner-serifless-hooked"
capital-k = "symmetric-touching"
capital-m = "slanted-sides-hanging"
a = "double-storey-tailed"
e = "flat-crossbar"
f = "serifless"
@ -4891,6 +4922,7 @@ l = "serifed-flat-tailed"
u = "toothless-rounded"
w = "straight-flat-top"
y = "straight"
long-s = "flat-hook"
lower-alpha = "tailed-barred"
cyrl-ka = "symmetric-connected"
cyrl-capital-u = "straight"
@ -4936,7 +4968,7 @@ r = "compact-serifed"
t = "flat-hook"
u = "toothed"
y = "straight-turn"
eszet = "traditional"
eszet = "traditional-flat-hook"
lower-lambda = "straight-turn"
cyrl-capital-u = "straight-turn"
zero = "dotted"