Reorder and reorganize character variants of i, l, and f, including:

* The “italic” variants are removed, or renamed to reflect its shape;
   * Reorder variants of `i` and `l` to let them get synchronized;
   * Make `f`'s variant more matrix-like.
This commit is contained in:
be5invis 2020-11-14 23:46:02 -08:00
parent cb96e828c1
commit 10f2596115
9 changed files with 475 additions and 334 deletions

View file

@ -488,18 +488,22 @@ Subsection `variants` is used to configure character variants in the font. Prope
+ `d = 'toothless-rounded'`, `cv14 = 3`: `d` without bottom-right tooth, with a rounded transition. + `d = 'toothless-rounded'`, `cv14 = 3`: `d` without bottom-right tooth, with a rounded transition.
+ `d = 'tailed'`, `cv14 = 4`: `d` with a slightly tail bottom-right tail (default for Italic). + `d = 'tailed'`, `cv14 = 4`: `d` with a slightly tail bottom-right tail (default for Italic).
- Styles for `f`: - Styles for `f`:
+ `f = 'straight'`, `cv15 = 1`: `f` without bottom hook (default for Sans Upright). + `f = 'serifless'`, `cv15 = 1`: `f` without bottom serif, hook or exension (default for Sans Upright).
+ `f = 'tailed'`, `cv15 = 2`: `f` with a leftward bottom hook (default for Italic). + `f = 'serifed'`, `cv15 = 2`: `f` with bottom serif (default for Slab Upright).
+ `f = 'serifed'`, `cv15 = 3`: `f` with bottom serif (default for Slab Upright). + `f = 'tailed'`, `cv15 = 3`: `f` with bottom hook.
+ `f = 'straight-tailed'`, `cv15 = 4`: `f` with straight tail. + `f = 'extended'`, `cv15 = 4`: `f` with bar extended to descender.
+ `f = 'flat-hook'`, `cv15 = 5`: `f` with flat hook. + `f = 'serifless-crossbar-at-x-height'`, `cv15 = 5`: `f` without bottom serif, hook or exension; crossbar is placed right at X-height.
+ `f = 'flat-hook-crossbar-at-x-height'`, `cv15 = 6`: `f` with flat hook and crossbar placed right at X-height. + `f = 'serifed-crossbar-at-x-height'`, `cv15 = 6`: `f` with bottom serif; crossbar is placed right at X-height.
+ `f = 'flat-hook-serifed'`, `cv15 = 7`: `f` with flat hook and bottom serif. + `f = 'tailed-crossbar-at-x-height'`, `cv15 = 7`: `f` with bottom hook; crossbar is placed right at X-height.
+ `f = 'flat-hook-serifed-crossbar-at-x-height'`, `cv15 = 8`: `f` with flat hook, bottom serif, and crossbar placed right at X-height. + `f = 'extended-crossbar-at-x-height'`, `cv15 = 8`: `f` with bar extended to descender; crossbar is placed right at X-height.
+ `f = 'flat-hook-round-tailed'`, `cv15 = 9`: `f` with flat hook. + `f = 'flat-hook'`, `cv15 = 9`: `f` with flat top hook, without bottom serif, hook or exension.
+ `f = 'flat-hook-round-tailed-crossbar-at-x-height'`, `cv15 = 10`: `f` with flat hook and crossbar placed right at X-height. + `f = 'flat-hook-serifed'`, `cv15 = 10`: `f` with flat top hook and bottom serif.
+ `f = 'flat-hook-flat-tailed'`, `cv15 = 11`: `f` with flat hook and bottom serif. + `f = 'flat-hook-tailed'`, `cv15 = 11`: `f` with flat top hook and bottom hook (default for Italic).
+ `f = 'flat-hook-flat-tailed-crossbar-at-x-height'`, `cv15 = 12`: `f` with flat hook, bottom serif, and crossbar placed right at X-height. + `f = 'flat-hook-extended'`, `cv15 = 12`: `f` with flat top hook and bar extended to descender.
+ `f = 'flat-hook-crossbar-at-x-height'`, `cv15 = 13`: `f` with flat top hook, without bottom serif, hook or exension; crossbar is placed right at X-height.
+ `f = 'flat-hook-serifed-crossbar-at-x-height'`, `cv15 = 14`: `f` with flat top hook, bottom serif; crossbar is placed right at X-height.
+ `f = 'flat-hook-tailed-crossbar-at-x-height'`, `cv15 = 15`: `f` with flat top hook, bottom hook; crossbar is placed right at X-height.
+ `f = 'flat-hook-extended-crossbar-at-x-height'`, `cv15 = 16`: `f` with flat top hook, bar extended to descender; crossbar is placed right at X-height.
- Styles for `g`: - Styles for `g`:
+ `g = 'singlestorey'`, `cv16 = 1`: Single-storey `g` (default). + `g = 'singlestorey'`, `cv16 = 1`: Single-storey `g` (default).
+ `g = 'doublestorey'`, `cv16 = 2`: Double-storey `g`. + `g = 'doublestorey'`, `cv16 = 2`: Double-storey `g`.
@ -513,13 +517,15 @@ Subsection `variants` is used to configure character variants in the font. Prope
+ `h = 'motion-serifed-tailed'`, `cv17 = 4`: `h` with curly tailed ending. + `h = 'motion-serifed-tailed'`, `cv17 = 4`: `h` with curly tailed ending.
- Styles for `i`: - Styles for `i`:
+ `i = 'serifed'`, `cv18 = 1`: Serifed `i` (default for Upright). + `i = 'serifed'`, `cv18 = 1`: Serifed `i` (default for Upright).
+ `i = 'italic'`, `cv18 = 2`: Italic `i` (default for Italic). + `i = 'serifless'`, `cv18 = 2`: `i` like a straight line.
+ `i = 'hooky'`, `cv18 = 3`: Hooky `i`. + `i = 'hooky'`, `cv18 = 3`: Hooky `i`.
+ `i = 'serifless'`, `cv18 = 4`: `i` like a straight line. + `i = 'zshaped'`, `cv18 = 4`: Z-shaped `i`.
+ `i = 'zshaped'`, `cv18 = 5`: Z-shaped `i`. + `i = 'hooky-bottom'`, `cv18 = 5`: `i` with a straight tail.
+ `i = 'tailed'`, `cv18 = 6`: Tailed `i`. + `i = 'serifed-asymmetric'`, `cv18 = 6`: `i` with shorter top serif and full bottom serif.
+ `i = 'hookybottom'`, `cv18 = 7`: `i` with a straight tail. + `i = 'tailed'`, `cv18 = 7`: `i` with curly tail.
+ `i = 'serifed-asymmetric'`, `cv18 = 8`: `i` with shorter top serif and full bottom serif. + `i = 'serifed-tailed'`, `cv18 = 8`: `i` with curly tail and top serif (default for Italic).
+ `i = 'flat-tailed'`, `cv18 = 9`: `i` with top serif and a curly-then-flat tail.
+ `i = 'serifed-flat-tailed'`, `cv18 = 10`: `i` with top serif and a curly-then-flat tail.
- Styles for `j`: - Styles for `j`:
+ `j = 'serifed'`, `cv19 = 1`: `j` with top serif (default). + `j = 'serifed'`, `cv19 = 1`: `j` with top serif (default).
+ `j = 'serifless'`, `cv19 = 2`: `j` without serif. + `j = 'serifless'`, `cv19 = 2`: `j` without serif.
@ -531,14 +537,16 @@ Subsection `variants` is used to configure character variants in the font. Prope
+ `k = 'curly'`, `cv20 = 2`: Slightly curly `k`, like Iosevka 2.x. + `k = 'curly'`, `cv20 = 2`: Slightly curly `k`, like Iosevka 2.x.
+ `k = 'cursive'`, `cv20 = 3`: `k` with a cursive loop (default for Italic). + `k = 'cursive'`, `cv20 = 3`: `k` with a cursive loop (default for Italic).
- Styles for `l`: - Styles for `l`:
+ `l = 'hooky'`, `cv21 = 1`: Hooky `l`. + `l = 'serifed'`, `cv21 = 1`: Serifed `l` (default for Upright).
+ `l = 'zshaped'`, `cv21 = 2`: Z-shaped `l`. + `l = 'serifless'`, `cv21 = 2`: `l` like a straight line.
+ `l = 'serifed'`, `cv21 = 3`: Serifed `l` (default for Upright). + `l = 'hooky'`, `cv21 = 3`: Hooky `l`.
+ `l = 'italic'`, `cv21 = 4`: Italic, cursive `l` (default for Italic). + `l = 'zshaped'`, `cv21 = 4`: Z-shaped `l`.
+ `l = 'serifless'`, `cv21 = 5`: `l` like a straight line. + `l = 'hooky-bottom'`, `cv21 = 5`: `l` with a straight tail.
+ `l = 'tailed'`, `cv21 = 6`: `l` with a curved tail. + `l = 'serifed-asymmetric'`, `cv21 = 6`: `l` with shorter top serif and full bottom serif.
+ `l = 'hookybottom'`, `cv21 = 7`: `l` with a straight tail. + `l = 'tailed'`, `cv21 = 7`: `l` with curly tail.
+ `l = 'serifed-asymmetric'`, `cv21 = 8`: `l` with shorter top serif and full bottom serif. + `l = 'serifed-tailed'`, `cv21 = 8`: `l` with top serif and curly tail (default for Italic).
+ `l = 'flat-tailed'`, `cv21 = 9`: `l` with top serif and a curly-then-flat tail.
+ `l = 'serifed-flat-tailed'`, `cv21 = 10`: `l` with top serif and a curly-then-flat tail.
- Styles for `m`: - Styles for `m`:
+ `m = 'normal'`, `cv22 = 1`: `m` with normal middle leg, touching the baseline (default). + `m = 'normal'`, `cv22 = 1`: `m` with normal middle leg, touching the baseline (default).
+ `m = 'shortleg'`, `cv22 = 2`: `m` with shorter middle leg, like Ubuntu Mono. + `m = 'shortleg'`, `cv22 = 2`: `m` with shorter middle leg, like Ubuntu Mono.

View file

@ -482,9 +482,9 @@ l = 'serifed'
f = 'flat-hook' f = 'flat-hook'
[buildPlans.iosevka-aile.derivingVariants.mathtt.italic] [buildPlans.iosevka-aile.derivingVariants.mathtt.italic]
i = 'italic' i = 'serifed-tailed'
l = 'italic' l = 'serifed-tailed'
f = 'flat-hook-flat-tailed' f = 'flat-hook-tailed'
[buildPlans.iosevka-aile.variants.design] [buildPlans.iosevka-aile.variants.design]
at = 'fourfold' at = 'fourfold'
@ -521,18 +521,6 @@ quasiProportionalDiversity = 1
at = 'fourfold' at = 'fourfold'
j = 'serifed' j = 'serifed'
[buildPlans.iosevka-etoile.variants.upright]
i = 'serifed'
l = 'serifed'
[buildPlans.iosevka-etoile.variants.oblique]
i = 'serifed'
l = 'serifed'
[buildPlans.iosevka-etoile.variants.italic]
i = 'italic'
l = 'italic'
[buildPlans.iosevka-etoile.widths.normal] [buildPlans.iosevka-etoile.widths.normal]
shape = 576 shape = 576
menu = 5 menu = 5
@ -565,9 +553,9 @@ f = 'serifed'
r = 'serifed' r = 'serifed'
[buildPlans.iosevka-sparkle.variants.italic] [buildPlans.iosevka-sparkle.variants.italic]
i = 'italic' i = 'serifed-tailed'
l = 'italic' l = 'serifed-tailed'
f = 'tailed' f = 'flat-hook-tailed'
r = 'top-serifed' r = 'top-serifed'
[buildPlans.iosevka-sparkle.derivingVariants.mathtt.design] [buildPlans.iosevka-sparkle.derivingVariants.mathtt.design]
@ -587,9 +575,9 @@ f = 'serifed'
r = 'serifed' r = 'serifed'
[buildPlans.iosevka-sparkle.derivingVariants.mathtt.italic] [buildPlans.iosevka-sparkle.derivingVariants.mathtt.italic]
i = 'italic' i = 'serifed-tailed'
l = 'italic' l = 'serifed-tailed'
f = 'tailed' f = 'flat-hook-tailed'
r = 'top-serifed' r = 'top-serifed'
[buildPlans.iosevka-sparkle.widths.normal] [buildPlans.iosevka-sparkle.widths.normal]

View file

@ -1,3 +1,7 @@
* [**Breaking**] Reorder and reorganize character variants of `i`, `l`, and `f`, including:
* The “italic” variants are removed, or renamed to reflect its shape;
* Reorder variants of `i` and `l` to let them get synchronized;
* Make `f`'s variant more matrix-like.
* Fix inconsistent italic serif of U+0463 CYRILLIC SMALL LETTER YAT (#729). * Fix inconsistent italic serif of U+0463 CYRILLIC SMALL LETTER YAT (#729).
* Fix dotless form of mathematical derived letters if it ia aliased (#731). * Fix dotless form of mathematical derived letters if it ia aliased (#731).
* Fix inconsistent serif on Bulgarian U+044E CYRILLIC SMALL LETTER YU (#732). * Fix inconsistent serif on Bulgarian U+044E CYRILLIC SMALL LETTER YU (#732).

View file

@ -426,6 +426,16 @@ glyph-block CommonShapes : begin
widths.center [fallback s OverlayStroke] widths.center [fallback s OverlayStroke]
flat xleft y flat xleft y
curl xright y curl xright y
define [HCrossBar xl xr y s] : dispiro
widths.center [fallback s OverlayStroke]
flat xl y
curl xr y
set HCrossBar.top : lambda [xl xr y _s] : begin
local s : fallback _s Stroke
return : HCrossBar (xl - 0 * s * TanSlope) (xr - 0 * s * TanSlope) (y - 0.5 * s) s
set HCrossBar.bottom : lambda [xl xr y _s] : begin
local s : fallback _s Stroke
return : HCrossBar (xl + 0 * s * TanSlope) (xr + 0 * s * TanSlope) (y + 0.5 * s) s
define [VBar x ydown yup _fine] : glyph-proc define [VBar x ydown yup _fine] : glyph-proc
local fine : fallback _fine Stroke local fine : fallback _fine Stroke
include : dispiro include : dispiro
@ -678,4 +688,4 @@ glyph-block CommonShapes : begin
corner [mix x1 x2 (-k)] [mix y1 y2 (-k)] corner [mix x1 x2 (-k)] [mix y1 y2 (-k)]
corner [mix x1 x2 (1+k)] [mix y1 y2 (1+k)] corner [mix x1 x2 (1+k)] [mix y1 y2 (1+k)]
glyph-block-export Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar FlatSlashShape hookstart hookend CyrDescender CyrLeftDescender FlipAround ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo WithAIHSerifsMask WithTransform ReverseContours clear-anchors OBarLeftToothlessShape OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical ExtLineCenter DiagCorDs glyph-block-export Rect SquareAt Ring RingAt DotAt RingStroke RingStrokeAt DotStrokeAt CircleRing CircleRingAt CircleDotAt OShape OShapeOutline OBarLeftShape OBarRightShape LeftwardTopSerif LeftwardBottomSerif RightwardTopSerif RightwardBottomSerif CenterTopSerif CenterBottomSerif DownwardRightSerif UpwardRightSerif DownwardLeftSerif UpwardLeftSerif AIVSerifs AIHSerifs AINSerifs AICyrISerifs AIMSerifs HBar HBarTop HBarBottom HOverlayBar VBar VBarLeft VBarRight VerticalHook LegShape LeftHook HooktopLeftBar FlatSlashShape hookstart hookend CyrDescender CyrLeftDescender FlipAround ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo WithAIHSerifsMask WithTransform ReverseContours clear-anchors OBarLeftToothlessShape OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical ExtLineCenter DiagCorDs HCrossBar

View file

@ -151,6 +151,12 @@ glyph-block Letter-Shared-Shapes : begin
glyph-proc glyph-proc
include : spiro-outline : nShoulderKnots.apply null [a.concat { (fMask -- true) }] include : spiro-outline : nShoulderKnots.apply null [a.concat { (fMask -- true) }]
glyph-block-export FlatHookDepth
define [FlatHookDepth df] : object
x : FlatHookDepthImpl [Math.min 1 : Math.sqrt df.div] HVContrast
y : FlatHookDepthImpl [Math.min 1 : Math.sqrt df.div] 1
define [FlatHookDepthImpl sHook sStroke] : begin
return : Math.max (sHook * Hook) (sStroke * Stroke * 1.375) : Math.min (sHook * Hook) (sStroke * Stroke * 1.75)
glyph-block Letter-Latin-Upper-I : begin glyph-block Letter-Latin-Upper-I : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
@ -210,27 +216,69 @@ glyph-block Letter-Latin-Lower-I : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : CreateDottedComposition glyph-block-import Letter-Shared : CreateDottedComposition
glyph-block-export IotaShape TailedIShape glyph-block-import Letter-Shared-Shapes : FlatHookDepth
### dotless i, i and iota ### dotless i, i and iota
define [IotaShape top] : glyph-proc glyph-block-export IotaShape
define [IotaShape] : params [top [addTopSerif false]] : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
local middle df.middle local middle df.middle
local hd : FlatHookDepth df
set-base-anchor 'above' middle top set-base-anchor 'above' middle top
include : tagged 'serifLT' : LeftwardTopSerif middle top (LongJut * df.div) if addTopSerif : include : tagged 'serifLT'
LeftwardTopSerif middle top (LongJut * df.div)
include : dispiro include : dispiro
widths.center widths.center
flat middle top [heading Downward] flat middle top [heading Downward]
curl middle Hook curl middle hd.y
arcvh.superness DesignParameters.tightHookSuperness
flat (middle + hd.x - HalfStroke * HVContrast) HalfStroke
curl (middle + [Math.max (hd.x - HalfStroke * HVContrast + 1) (LongJut * 1.05 * df.div)] + HalfStroke * TanSlope) HalfStroke
glyph-block-export ItalicDotlessIShape
define [ItalicDotlessIShape] : params [df top [addTopSerif false] [setMarks true]] : glyph-proc
local shift : (1 - df.div) * 0.2
local left : [mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift)] - HalfStroke * HVContrast
local right : mix SB df.rightSB (1.1 - shift)
local rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.55 * df.div)
include : dispiro
widths.lhs
flat left top [heading Downward]
curl left (SmallSmoothB * 0.8)
hookend O
g4 rightTerm (Hook * [StrokeWidthBlend 0.85 1] * df.div)
if addTopSerif : include : dispiro
flat (left - (LongJut * df.div) + HalfStroke * HVContrast) top [widths 0 Stroke]
curl left top
if setMarks : begin
set-base-anchor 'above' (left + HalfStroke * HVContrast + [StrokeWidthBlend 0.25 0] * TanSlope * df.width) top
set-base-anchor 'below' middle 0
glyph-block-export TailedDotlessShape
define [TailedDotlessShape] : params [df top [xMiddle (df.middle - LBalance2)] [setMarks true] [hookScale 1] [addTopSerif false]] : glyph-proc
local x0 : mix HalfStroke (HalfStroke + (Hook - Stroke + 1) * 0.85 * df.div + LBalance2) hookScale
local x1 : mix HalfStroke ([Math.max (Hook - HalfStroke + 1) (LongJut * df.div)] + LBalance2) hookScale
include : dispiro
widths.center
flat xMiddle top [heading Downward]
curl xMiddle [mix Stroke Hook hookScale]
arcvh arcvh
flat (middle + Hook - HalfStroke) HalfStroke g4.right.mid (xMiddle + x0) (HalfStroke + O) [heading Rightward]
curl (middle + [Math.max HookX (LongJut * 1.05 * df.div)]) HalfStroke [heading Rightward] g4 (xMiddle + x1) (HalfStroke + (1 - 2 * hookScale) * O) [heading Rightward]
if setMarks : begin
set-base-anchor 'above' xMiddle top
set-base-anchor 'below' xMiddle 0
set-base-anchor 'overlay' xMiddle (top * OverlayPos)
set-base-anchor 'topright' (xMiddle + RightSB - Middle) top
if addTopSerif : begin
include : tagged 'serifLT' : LeftwardTopSerif xMiddle top (LongJut * df.div)
create-glyph 'grek/iota' 0x3B9 : glyph-proc create-glyph 'grek/iota' 0x3B9 : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : IotaShape XH include : IotaShape XH (addTopSerif -- true)
alias 'latiniota' 0x269 'grek/iota' alias 'latiniota' 0x269 'grek/iota'
@ -238,7 +286,7 @@ glyph-block Letter-Latin-Lower-I : begin
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.capital include : df.markSet.capital
include : IotaShape CAP include : IotaShape CAP (addTopSerif -- true)
create-glyph 'dotlessi.straight' : glyph-proc create-glyph 'dotlessi.straight' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
@ -290,54 +338,39 @@ glyph-block Letter-Latin-Lower-I : begin
include : RightwardBottomSerif df.middle 0 (LongJut * df.div) include : RightwardBottomSerif df.middle 0 (LongJut * df.div)
include : LeftwardBottomSerif df.middle 0 (LongJut * df.div) include : LeftwardBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'dotlessi.italic' : glyph-proc create-glyph 'dotlessi.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
if para.isItalic if para.isItalic
: then : begin : then : begin
local shift : (1 - df.div) * 0.2 include : ItalicDotlessIShape df XH (setMarks -- true) (addTopSerif -- false)
local left : [mix SB df.rightSB ([StrokeWidthBlend 0.42 0.46] - shift)] - HalfStroke * HVContrast
local right : mix SB df.rightSB (1.1 - shift)
local rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.55 * df.div)
include : dispiro
widths.lhs
flat left XH [heading Downward]
curl left (SmallSmoothB * 0.8)
hookend O
g4 rightTerm (Hook * [StrokeWidthBlend 0.85 1] * df.div)
include : dispiro
flat (left - (LongJut * df.div) + HalfStroke * HVContrast) XH [widths 0 Stroke]
curl left XH
set-base-anchor 'above' (left + HalfStroke * HVContrast + [StrokeWidthBlend 0.25 0] * TanSlope * df.width) XH
set-base-anchor 'below' middle 0
: else : begin : else : begin
include : IotaShape XH include : TailedDotlessShape df XH (addTopSerif -- false)
define [TailedIShape] : params [df top [xMiddle (df.middle - LBalance2)] [setMarks true] [hookScale 1]] : glyph-proc create-glyph 'dotlessi.serifedTailed' : glyph-proc
local x0 : mix HalfStroke (HalfStroke + (Hook - Stroke + 1) * 0.85 * df.div + LBalance2) hookScale
local x1 : mix HalfStroke ([Math.max (Hook - HalfStroke + 1) (LongJut * df.div)] + LBalance2) hookScale
include : dispiro
widths.center
flat xMiddle top [heading Downward]
curl xMiddle [mix Stroke Hook hookScale]
arcvh
g4.right.mid (xMiddle + x0) (HalfStroke + O) [heading Rightward]
g4 (xMiddle + x1) (HalfStroke + (1 - 2 * hookScale) * O) [heading Rightward]
if setMarks : begin
set-base-anchor 'above' xMiddle top
set-base-anchor 'below' xMiddle 0
set-base-anchor 'overlay' xMiddle (top * OverlayPos)
set-base-anchor 'topright' (xMiddle + RightSB - Middle) top
create-glyph 'dotlessi.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
include : TailedIShape df XH if para.isItalic
: then : begin
include : ItalicDotlessIShape df XH (setMarks -- true) (addTopSerif -- true)
: else : begin
include : TailedDotlessShape df XH (addTopSerif -- true)
create-glyph 'dotlessi.hookybottom' : glyph-proc create-glyph 'dotlessi.flatTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.e
include : IotaShape XH (addTopSerif -- false)
create-glyph 'dotlessi.serifedFlatTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.e
include : IotaShape XH (addTopSerif -- true)
create-glyph 'dotlessi.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.e include : df.markSet.e
@ -514,7 +547,7 @@ glyph-block Letter-Latin-Lower-J : begin
widths.lhs widths.lhs
flat [Math.min terminal (bar - tTurn - [Math.max (Stroke / 3) (df.width / 6)])] Descender flat [Math.min terminal (bar - tTurn - [Math.max (Stroke / 3) (df.width / 6)])] Descender
curl (bar - tTurn) Descender curl (bar - tTurn) Descender
archv archv.superness DesignParameters.tightHookSuperness
flat bar (Descender + tTurn) flat bar (Descender + tTurn)
curl bar XH [heading Upward] curl bar XH [heading Upward]
set-base-anchor 'above' barCenter XH set-base-anchor 'above' barCenter XH
@ -653,7 +686,7 @@ glyph-block Letter-Latin-Lower-L : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Marks : markMiddle aboveMarkBot aboveMarkTop glyph-block-import Marks : markMiddle aboveMarkBot aboveMarkTop
glyph-block-import Letter-Latin-Lower-I : IotaShape TailedIShape glyph-block-import Letter-Latin-Lower-I : IotaShape TailedDotlessShape ItalicDotlessIShape
glyph-block-import Letter-Shared : CreateCommaCaronComposition glyph-block-import Letter-Shared : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail glyph-block-import Letter-Shared-Shapes : CurlyTail
@ -711,33 +744,37 @@ glyph-block Letter-Latin-Lower-L : begin
set-base-anchor 'overlay' (df.middle + balance / 2) (CAP * OverlayPos) set-base-anchor 'overlay' (df.middle + balance / 2) (CAP * OverlayPos)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.italic' : glyph-proc create-glyph 'l.tailed' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
if para.isItalic if para.isItalic
: then : begin : then : begin
local shift : (1 - df.div) * 0.4 include : ItalicDotlessIShape df CAP (addTopSerif -- false)
local left : mix SB df.rightSB (0.3 - shift)
local right : mix SB df.rightSB (1.1 - shift)
local rightTerm : Math.max right (left + HookX + Stroke)
local middle : mix left right (0.54 * df.div)
include : dispiro
widths.lhs
flat left CAP [heading Downward]
curl left (SmallSmoothB * 0.85)
hookend O
g4 rightTerm (Hook * [StrokeWidthBlend 0.85 1] * df.div)
include : tagged 'serifLT': dispiro
flat (left - (LongJut * df.div) + HalfStroke * HVContrast) CAP [widths 0 Stroke]
curl left CAP
set-base-anchor 'above' (left + HalfStroke) CAP
set-base-anchor 'below' middle 0
set-base-anchor 'overlay' (left + HalfStroke) (CAP * OverlayPos)
set-base-anchor 'topright' (left + HalfStroke + RightSB - Middle) CAP
: else : begin : else : begin
include : IotaShape CAP include : TailedDotlessShape df CAP (addTopSerif -- false)
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.serifedTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
if para.isItalic
: then : begin
include : ItalicDotlessIShape df CAP (addTopSerif -- true)
: else : begin
include : TailedDotlessShape df CAP (addTopSerif -- true)
create-glyph 'l.flatTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : IotaShape CAP (addTopSerif -- false)
create-glyph 'l.serifedFlatTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : IotaShape CAP (addTopSerif -- true)
create-glyph 'l.phoneticLeft' : glyph-proc create-glyph 'l.phoneticLeft' : glyph-proc
local df : DivFrame 1 local df : DivFrame 1
@ -753,13 +790,7 @@ glyph-block Letter-Latin-Lower-L : begin
curl [Math.max RightSB (middle + [Math.max HookX (LongJut * 1.05 * df.div)])] HalfStroke [heading Rightward] curl [Math.max RightSB (middle + [Math.max HookX (LongJut * 1.05 * df.div)])] HalfStroke [heading Rightward]
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.tailed' : glyph-proc create-glyph 'l.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
include : TailedIShape df CAP
create-glyph 'l.hookybottom' : glyph-proc
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
@ -794,11 +825,13 @@ glyph-block Letter-Latin-Lower-L : begin
list 'hooky' 0 list 'hooky' 0
list 'zshaped' Stroke list 'zshaped' Stroke
list 'serifed' Stroke list 'serifed' Stroke
list 'italic' Stroke list 'serifedTailed' Stroke
list 'serifless' 0 list 'serifless' 0
list 'tailed' Stroke list 'tailed' Stroke
list 'hookybottom' Stroke list 'hookyBottom' Stroke
list 'serifedAsymmetric' Stroke list 'serifedAsymmetric' Stroke
list 'flatTailed' Stroke
list 'serifedFlatTailed' Stroke
foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)] foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)]
create-glyph ('ldot.' + suffix) : glyph-proc create-glyph ('ldot.' + suffix) : glyph-proc
@ -2396,15 +2429,15 @@ glyph-block Letter-Latin-K : begin
define [BashkirKaShape top straightBar] : glyph-proc define [BashkirKaShape top straightBar] : glyph-proc
local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2] local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
local leftNB : left - [KBalance straightBar] local leftNB : left - [KBalance straightBar]
local barleft : mix 0 SB [if SLAB 0.25 0.375] local barLeft : mix 0 SB [if SLAB 0.25 0.375]
local sw : AdviceStroke 3 local sw : AdviceStroke 3
include : HBarTop barleft (Stroke * 0.1 + left) top include : HBarTop barLeft (Stroke * 0.1 + left) top
include : VBarLeft left 0 top sw include : VBarLeft left 0 top sw
include : KLegShape leftNB RightSB top straightBar sw include : KLegShape leftNB RightSB top straightBar sw
if SLAB : begin if SLAB : begin
include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut include : CenterBottomSerif (left + HalfStroke * HVContrast) 0 Jut
include : DownwardLeftSerif barleft top VJut (MVertStroke / HVContrast) include : DownwardLeftSerif barLeft top VJut (MVertStroke / HVContrast)
create-glyph 'cyrl/BashkirUpperKa.straight' : glyph-proc create-glyph 'cyrl/BashkirUpperKa.straight' : glyph-proc
include : MarkSet.capital include : MarkSet.capital
@ -4233,7 +4266,6 @@ glyph-block Letter-Latin-Lower-Q : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Marks : markHalfStroke glyph-block-import Marks : markHalfStroke
glyph-block-import Letter-Latin-Lower-I : TailedIShape
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend
create-glyph 'q.straight' : glyph-proc create-glyph 'q.straight' : glyph-proc
@ -5736,7 +5768,7 @@ glyph-block Letter-Latin-Upper-F : begin
glyph-block Letter-Latin-Lower-F : begin glyph-block Letter-Latin-Lower-F : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared-Shapes : CurlyTail glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth
define fovershoot : fallback para.fovershoot (O * 6) define fovershoot : fallback para.fovershoot (O * 6)
@ -5778,10 +5810,12 @@ glyph-block Letter-Latin-Lower-F : begin
local w [fallback fine Stroke] local w [fallback fine Stroke]
include : dispiro include : dispiro
widths.center w widths.center w
straight.right.start (Middle - hookx) (bottom + w / 2 + fovershoot) flat (Middle - hookx) (bottom + w / 2 + fovershoot)
curl (Middle - [Math.min hooky (hookx - 0.1)]) (bottom + w / 2 + fovershoot)
flat Middle (bottom + hooky) flat Middle (bottom + hooky)
curl Middle (top - hooky) curl Middle (top - hooky)
straight.right.end (Middle + hookx) (top - w / 2 - fovershoot) flat (Middle + [Math.min hooky (hookx - 0.1)]) (top - w / 2 - fovershoot)
curl (Middle + hookx) (top - w / 2 - fovershoot)
create-glyph 'longs.italic' : glyph-proc create-glyph 'longs.italic' : glyph-proc
include : MarkSet.if include : MarkSet.if
@ -5842,6 +5876,7 @@ glyph-block Letter-Latin-Lower-F : begin
define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj
define fbarFH : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdjFH
define [SmallFBottomSerif] : dispiro define [SmallFBottomSerif] : dispiro
widths.lhs widths.lhs
flat ([mix SB RightSB 0.02] + HalfStroke * TanSlope) 0 flat ([mix SB RightSB 0.02] + HalfStroke * TanSlope) 0
@ -5856,78 +5891,109 @@ glyph-block Letter-Latin-Lower-F : begin
[if offset corner curl] (barleft + offset) 0 [heading Downward] [if offset corner curl] (barleft + offset) 0 [heading Downward]
if offset {[corner (RightSB + RBalance2 - (OX - O) - offset) 0]} {} if offset {[corner (RightSB + RBalance2 - (OX - O) - offset) 0]} {}
create-glyph : glyph-proc define [SmallFDownExtension barLeft] : VBarLeft barLeft 0.1 (Descender * 0.9)
include : MarkSet.b
local barleft : [mix SB RightSB 0.35] - Stroke * 0.25 * HVContrast define [SmallFDownHook df barRight counterHookLeft] : begin
include : StdFShapeT dispiro 0 barleft Stroke local hd : FlatHookDepth df
return : dispiro
widths.lhs
flat counterHookLeft Descender
curl [Math.max (barRight - hd.x) (counterHookLeft + 0.1)] Descender
archv.superness DesignParameters.tightHookSuperness
flat barRight [Math.min 0 (Descender + hd.y)]
curl barRight 0.1 [heading Upward]
create-derived 'f.straight' : glyph-proc define [StandardSmallFShape df m bh counterHook] : glyph-proc
include : HBarTop SB [mix SB RightSB 0.95] fbar local barLeft0 : [mix SB RightSB 0.35] - Stroke * 0.25 * HVContrast
local barLeft : [mix SB RightSB : if (counterHook > 1) 0.45 0.35] - Stroke * [if (counterHook > 1) 0.45 0.25] * HVContrast
create-derived 'fltail' 0x192 include : StdFShapeT dispiro 0 barLeft0 Stroke
VerticalHook (barleft + HalfStroke * HVContrast) 0 (-HookX) Hook include : Translate (barLeft - barLeft0) 0
include : HCrossBar.top SB [mix SB RightSB m] bh
if (counterHook === 1) : include : SmallFDownExtension barLeft
if (counterHook === 2) : begin
local barRight : barLeft + Stroke * HVContrast
local crossRight : mix df.width df.rightSB m
local counterHookLeft : Math.max SB : barRight - (crossRight - barLeft)
include : SmallFDownHook df barRight counterHookLeft
if (counterHook === 3) : begin
include : VerticalHook (barLeft + HalfStroke * HVContrast) 0 (-HookX) Hook
create-derived 'f.serifed' : SmallFBottomSerif
create-derived 'f.straightTailed' : glyph-proc
include : MarkSet.if
include : VBarLeft barleft 0 (Descender * 0.9)
alias 'lenisf' 0xAB35 'f.straight'
create-derived 'f.phoneticLeft' : glyph-proc
include : HBarTop SB RightSB fbar
if SLAB : include : SmallFBottomSerif
glyph-block-import Letter-Blackboard : BBS BBD
create-glyph 'mathbb/f' 0x1D557 : glyph-proc
include : MarkSet.b
local barleft : [mix SB RightSB 0.35] - BBD * 0.25 * HVContrast
include : StdFShapeT dispiro 0 barleft BBS
include : intersection
VBarLeft (barleft + BBD) 0 CAP BBS
StdFShapeT spiro-outline 1 barleft BBS
include : difference
HBarTop SB [mix SB RightSB 0.95] fbar BBS
Rect CAP 0 barleft (barleft + BBD)
include : HBarBottom barleft (barleft + BBD) 0 BBS
define dfNarrowF : DivFrame para.diversityF
define [NarrowFShape df m bh counterHook] : glyph-proc define [NarrowFShape df m bh counterHook] : glyph-proc
local crossLeft : mix 0 SB m local crossLeft : mix 0 SB m
local crossRight : mix df.width df.rightSB m local crossRight : mix df.width df.rightSB m
local barLeft : [mix crossLeft crossRight 0.42] - Stroke * 0.375 * HVContrast + df.width / 32 local barLeft : if (counterHook > 1)
local tTurn : Math.max (Hook * [Math.min 1 : Math.sqrt df.div]) (Stroke * 1.375) : Math.min Hook (Stroke * 1.75) df.middle - HalfStroke * HVContrast
[mix crossLeft crossRight 0.42] - Stroke * 0.375 * HVContrast + df.width / 32
local hd : FlatHookDepth df
include : dispiro include : dispiro
widths.lhs widths.lhs
flat crossRight CAP flat crossRight CAP
curl [Math.min (barLeft + tTurn) (crossRight - 0.1)] CAP curl [Math.min (barLeft + hd.x) (crossRight - 0.1)] CAP
archv archv.superness DesignParameters.tightHookSuperness
flat barLeft [Math.max XH (CAP - tTurn)] flat barLeft [Math.max XH (CAP - hd.y)]
curl barLeft 0 [heading Downward] curl barLeft 0 [heading Downward]
include : HBarTop crossLeft crossRight bh include : HCrossBar.top crossLeft crossRight bh
if (counterHook === 1) : begin if (counterHook === 1) : include : SmallFDownExtension barLeft
include : VerticalHook (barLeft + HalfStroke * HVContrast) 0 (-HookX) Hook
if (counterHook === 2) : begin if (counterHook === 2) : begin
local barRight : barLeft + Stroke * HVContrast local barRight : barLeft + Stroke * HVContrast
local crossRight : mix df.width df.rightSB m
local counterHookLeft : barRight - (crossRight - barLeft) local counterHookLeft : barRight - (crossRight - barLeft)
include : dispiro include : SmallFDownHook df barRight counterHookLeft
widths.lhs
flat counterHookLeft Descender
curl [Math.max (barRight - tTurn) (counterHookLeft + 0.1)] Descender create-glyph 'f.serifless' : glyph-proc
archv include : MarkSet.b
flat barRight [Math.min 0 (Descender + tTurn)] include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH
curl barRight 0.1 [heading Upward]
create-glyph 'f.phoneticLeft' : glyph-proc
include : MarkSet.b
include : StandardSmallFShape [DivFrame 1] 1 fbarFH
if SLAB : include : SmallFBottomSerif
create-glyph 'f.serifed' : glyph-proc
include : MarkSet.b
include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH
include : SmallFBottomSerif
create-glyph 'fltail' 0x192 : glyph-proc
include : MarkSet.if
include : StandardSmallFShape [DivFrame 1] 1 fbarFH 2
create-glyph 'f.tailed' : glyph-proc
include : MarkSet.if
include : StandardSmallFShape [DivFrame 1] 1 fbarFH 2
create-glyph 'f.extended' : glyph-proc
include : MarkSet.if
include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH 1
create-glyph 'f.seriflessCrossbarAtXHeight' : glyph-proc
include : MarkSet.b
include : StandardSmallFShape [DivFrame 1] 0.95 XH
create-glyph 'f.serifedCrossbarAtXHeight' : glyph-proc
include : MarkSet.b
include : StandardSmallFShape [DivFrame 1] 0.95 XH
include : SmallFBottomSerif
create-glyph 'f.tailedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if
include : StandardSmallFShape [DivFrame 1] 1 XH 2
create-glyph 'f.extendedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if
include : StandardSmallFShape [DivFrame 1] 0.95 XH 1
create-glyph 'f.narrow' : glyph-proc create-glyph 'f.narrow' : glyph-proc
set-width dfNarrowF.width define df : DivFrame para.diversityF
include : dfNarrowF.markSet.b set-width df.width
include : NarrowFShape dfNarrowF 0.5 fbar include : df.markSet.b
include : NarrowFShape df 0.5 fbarFH
create-glyph 'f.flatHook' : glyph-proc create-glyph 'f.flatHook' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : NarrowFShape [DivFrame 1] 1 fbar include : NarrowFShape [DivFrame 1] 1 fbarFH
create-glyph 'f.flatHookCrossbarAtXHeight' : glyph-proc create-glyph 'f.flatHookCrossbarAtXHeight' : glyph-proc
include : MarkSet.b include : MarkSet.b
@ -5935,7 +6001,7 @@ glyph-block Letter-Latin-Lower-F : begin
create-glyph 'f.flatHookSerifed' : glyph-proc create-glyph 'f.flatHookSerifed' : glyph-proc
include : MarkSet.b include : MarkSet.b
include : NarrowFShape [DivFrame 1] 1 fbar include : NarrowFShape [DivFrame 1] 1 fbarFH
include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif
create-glyph 'f.flatHookSerifedCrossbarAtXHeight' : glyph-proc create-glyph 'f.flatHookSerifedCrossbarAtXHeight' : glyph-proc
@ -5943,43 +6009,57 @@ glyph-block Letter-Latin-Lower-F : begin
include : NarrowFShape [DivFrame 1] 1 XH include : NarrowFShape [DivFrame 1] 1 XH
include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif
create-glyph 'f.flatHookRoundTailed' : glyph-proc create-glyph 'f.flatHookTailed' : glyph-proc
include : MarkSet.if include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 fbar 1 include : NarrowFShape [DivFrame 1] 1 fbarFH 2
create-glyph 'f.flatHookRoundTailedCrossbarAtXHeight' : glyph-proc create-glyph 'f.flatHookTailedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 XH 1
create-glyph 'f.flatHookFlatTailed' : glyph-proc
include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 fbar 2
create-glyph 'f.flatHookFlatTailedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 XH 2 include : NarrowFShape [DivFrame 1] 1 XH 2
create-glyph 'f.tailed' : glyph-proc create-glyph 'f.flatHookExtended' : glyph-proc
include [refer-glyph 'longs.italic'] AS_BASE include : MarkSet.if
include : HBarTop (Middle - LongJut) (Middle + LongJut) fbar include : NarrowFShape [DivFrame 1] 1 fbarFH 1
create-glyph 'f.flatHookExtendedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 XH 1
select-variant 'f' 'f' select-variant 'f' 'f'
alias 'lenisf' 0xAB35 'f.serifless'
turned 'turnf.straight' nothing 'f.straight' Middle (XH / 2) [MarkSet.p] turned 'turnf.serifless' nothing 'f.serifless' Middle (XH / 2) [MarkSet.p]
turned 'turnf.serifed' nothing 'f.serifed' Middle (XH / 2) [MarkSet.p] turned 'turnf.serifed' nothing 'f.serifed' Middle (XH / 2) [MarkSet.p]
turned 'turnf.straightTailed' nothing 'f.straightTailed' Middle (XH / 2) [MarkSet.if] turned 'turnf.tailed' nothing 'f.tailed' Middle (XH / 2) [MarkSet.if]
turned 'turnf.tailed' nothing 'f.tailed' Middle [mix Descender CAP 0.5] [MarkSet.if] turned 'turnf.extended' nothing 'f.extended' Middle (XH / 2) [MarkSet.if]
turned 'turnf.seriflessCrossbarAtXHeight' nothing 'f.seriflessCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p]
turned 'turnf.serifedCrossbarAtXHeight' nothing 'f.serifedCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p]
turned 'turnf.tailedCrossbarAtXHeight' nothing 'f.tailedCrossbarAtXHeight' Middle (XH / 2) [MarkSet.if]
turned 'turnf.extendedCrossbarAtXHeight' nothing 'f.extendedCrossbarAtXHeight' Middle (XH / 2) [MarkSet.if]
turned 'turnf.flatHook' nothing 'f.flatHook' Middle (XH / 2) [MarkSet.p] turned 'turnf.flatHook' nothing 'f.flatHook' Middle (XH / 2) [MarkSet.p]
turned 'turnf.flatHookCrossbarAtXHeight' nothing 'f.flatHookCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p]
turned 'turnf.flatHookSerifed' nothing 'f.flatHookSerifed' Middle (XH / 2) [MarkSet.p] turned 'turnf.flatHookSerifed' nothing 'f.flatHookSerifed' Middle (XH / 2) [MarkSet.p]
turned 'turnf.flatHookTailed' nothing 'f.flatHookTailed' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookExtended' nothing 'f.flatHookExtended' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookCrossbarAtXHeight' nothing 'f.flatHookCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p]
turned 'turnf.flatHookSerifedCrossbarAtXHeight' nothing 'f.flatHookSerifedCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p] turned 'turnf.flatHookSerifedCrossbarAtXHeight' nothing 'f.flatHookSerifedCrossbarAtXHeight' Middle (XH / 2) [MarkSet.p]
turned 'turnf.flatHookRoundTailed' nothing 'f.flatHookRoundTailed' Middle [mix Descender CAP 0.5] [MarkSet.if] turned 'turnf.flatHookTailedCrossbarAtXHeight' nothing 'f.flatHookTailedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookRoundTailedCrossbarAtXHeight' nothing 'f.flatHookRoundTailedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if] turned 'turnf.flatHookExtendedCrossbarAtXHeight' nothing 'f.flatHookExtendedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookFlatTailed' nothing 'f.flatHookFlatTailed' Middle [mix Descender CAP 0.5] [MarkSet.if] let [df : DivFrame para.diversityF] : turned 'turnf.narrow' nothing 'f.narrow' df.middle (XH / 2) [df.markSet.p]
turned 'turnf.flatHookFlatTailedCrossbarAtXHeight' nothing 'f.flatHookFlatTailedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.narrow' nothing 'f.narrow' dfNarrowF.middle (XH / 2) [dfNarrowF.markSet.p]
select-variant 'turnf' 0x25F (follow -- 'f') select-variant 'turnf' 0x25F (follow -- 'f')
glyph-block-import Letter-Blackboard : BBS BBD
create-glyph 'mathbb/f' 0x1D557 : glyph-proc
include : MarkSet.b
local barLeft : [mix SB RightSB 0.35] - BBD * 0.25 * HVContrast
include : StdFShapeT dispiro 0 barLeft BBS
include : intersection
VBarLeft (barLeft + BBD) 0 CAP BBS
StdFShapeT spiro-outline 1 barLeft BBS
include : difference
HCrossBar.top SB [mix SB RightSB 0.95] fbar BBS
Rect CAP 0 barLeft (barLeft + BBD)
include : HBarBottom barLeft (barLeft + BBD) 0 BBS
do "f ligatures" do "f ligatures"
local shift (-(Width * 0.055 + SB * 0.5)) local shift (-(Width * 0.055 + SB * 0.5))
local barr RightSB local barr RightSB
@ -6226,7 +6306,7 @@ glyph-block Letter-Latin-Lower-T : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Common-Derivatives glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : CreateCommaCaronComposition glyph-block-import Letter-Shared : CreateCommaCaronComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth
define xSmallTBarLeft : Middle - TBalance - Stroke * 0.5 * HVContrast define xSmallTBarLeft : Middle - TBalance - Stroke * 0.5 * HVContrast
define [SmallTHookShapeT sink offset top bot sw] : begin define [SmallTHookShapeT sink offset top bot sw] : begin
@ -6247,7 +6327,7 @@ glyph-block Letter-Latin-Lower-T : begin
local g : G.call currentGlyph # Not using include local g : G.call currentGlyph # Not using include
set-base-anchor 'bottomright' g.knots.(g.knots.length - 1).x g.knots.(g.knots.length - 1).y set-base-anchor 'bottomright' g.knots.(g.knots.length - 1).x g.knots.(g.knots.length - 1).y
set-base-anchor 'below' [mix xSmallTBarLeft g.knots.(g.knots.length - 1).x : StrokeWidthBlend 0.375 0.5] bot set-base-anchor 'below' [mix xSmallTBarLeft g.knots.(g.knots.length - 1).x : StrokeWidthBlend 0.375 0.5] bot
include : HBarTop include : HCrossBar.top
xSmallTBarLeft + HalfStroke - LongJut + TBalance2 xSmallTBarLeft + HalfStroke - LongJut + TBalance2
xSmallTBarLeft + HalfStroke + LongJut + TBalance2 xSmallTBarLeft + HalfStroke + LongJut + TBalance2
begin XH begin XH
@ -6265,7 +6345,7 @@ glyph-block Letter-Latin-Lower-T : begin
VBarLeft (xSmallTBarLeft + BBD) 0 CAP BBS VBarLeft (xSmallTBarLeft + BBD) 0 CAP BBS
SmallTHookShapeT spiro-outline 1 CAP 0 BBS SmallTHookShapeT spiro-outline 1 CAP 0 BBS
include : difference include : difference
HBarTop HCrossBar.top
xSmallTBarLeft + (BBD / 2) - LongJut + TBalance2 xSmallTBarLeft + (BBD / 2) - LongJut + TBalance2
xSmallTBarLeft + (BBD / 2) + LongJut + TBalance2 xSmallTBarLeft + (BBD / 2) + LongJut + TBalance2
begin XH begin XH
@ -6276,15 +6356,15 @@ glyph-block Letter-Latin-Lower-T : begin
local xCrossLeft : mix 0 SB m local xCrossLeft : mix 0 SB m
local xCrossRight : mix df.width df.rightSB m local xCrossRight : mix df.width df.rightSB m
local xBarLeft : [mix xCrossLeft xCrossRight 0.42] - Stroke * 0.375 * HVContrast local xBarLeft : [mix xCrossLeft xCrossRight 0.42] - Stroke * 0.375 * HVContrast
local tTurn : Math.max (Hook * [Math.min 1 : Math.sqrt df.div]) (Stroke * 1.375) : Math.min Hook (Stroke * 1.75) local hd : FlatHookDepth df
include : union include : union
HBarTop xCrossLeft (xCrossRight + ext) XH HCrossBar.top xCrossLeft (xCrossRight + ext) XH
dispiro dispiro
widths.rhs widths.rhs
flat xCrossRight 0 flat xCrossRight 0
curl [Math.min (xBarLeft + tTurn) (xCrossRight - 1)] 0 curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] 0
archv archv.superness DesignParameters.tightHookSuperness
flat xBarLeft tTurn flat xBarLeft hd.y
curl xBarLeft top [heading Upward] curl xBarLeft top [heading Upward]
set-base-anchor 'topright' xCrossRight CAP set-base-anchor 'topright' xCrossRight CAP
@ -6324,13 +6404,13 @@ glyph-block Letter-Latin-Lower-T : begin
set-width Width set-width Width
include : MarkSet.b include : MarkSet.b
include : VBar Middle 0 CAP include : VBar Middle 0 CAP
include : HBarTop (Middle - LongJut) (Middle + LongJut) XH include : HCrossBar.top (Middle - LongJut) (Middle + LongJut) XH
create-glyph 't.hooklessAsymmetric' : glyph-proc create-glyph 't.hooklessAsymmetric' : glyph-proc
set-width Width set-width Width
include : MarkSet.b include : MarkSet.b
include : VBarLeft xSmallTBarLeft 0 CAP include : VBarLeft xSmallTBarLeft 0 CAP
include : HBarTop xSmallTBarLeft (Middle + LongJut) XH include : HCrossBar.top xSmallTBarLeft (Middle + LongJut) XH
select-variant 't' 't' select-variant 't' 't'

View file

@ -118,7 +118,9 @@ export : define [SetupBuilders args] : begin
return cache.(samples).vh return cache.(samples).vh
list hv vh list hv vh
define [archv samples superness] : alsoThruThem [jhv [fallback samples DEFAULT_STEPS] superness] define [archv samples superness] : alsoThruThem [jhv [fallback samples DEFAULT_STEPS] superness]
set archv.superness : lambda [s] : archv DEFAULT_STEPS s
define [arcvh samples superness] : alsoThruThem [jvh [fallback samples DEFAULT_STEPS] superness] define [arcvh samples superness] : alsoThruThem [jvh [fallback samples DEFAULT_STEPS] superness]
set arcvh.superness : lambda [s] : arcvh DEFAULT_STEPS s
define [complexThru] : begin define [complexThru] : begin
local a : {}.slice.call arguments local a : {}.slice.call arguments

View file

@ -324,6 +324,7 @@ export : define DesignParameters : object
upperEBarPos : lambda [slab] : if slab 0.52 0.53 upperEBarPos : lambda [slab] : if slab 0.52 0.53
# Fine adjustments # Fine adjustments
fbarStrokeAdj 0.25 fbarStrokeAdj 0.25
fbarStrokeAdjFH 0.125
superness 2.275 superness 2.275
tightHookSuperness 2.30 tightHookSuperness 2.30

View file

@ -119,7 +119,7 @@ define-macro glyph-block-import : syntax-rules
ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo ScaleAround Realign ForceUpright DiagCor CreateWaveShape NameUni PointingTo
WithAIHSerifsMask WithTransform ReverseContours clear-anchors OBarLeftToothlessShape WithAIHSerifsMask WithTransform ReverseContours clear-anchors OBarLeftToothlessShape
OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical OBarLeftRoundedShape OBarRightToothlessShape OBarRightRoundedShape AsRadical
ExtLineCenter DiagCorDs] ExtLineCenter DiagCorDs HCrossBar]
define vartiableFilter : if externEnv.$glyphBlockVariableUsage$ define vartiableFilter : if externEnv.$glyphBlockVariableUsage$
lambda [x] externEnv.$glyphBlockVariableUsage$.(x) lambda [x] externEnv.$glyphBlockVariableUsage$.(x)

View file

@ -306,65 +306,85 @@ selector.d = "tailed"
sampler = 'f' sampler = 'f'
tag = 'cv15' tag = 'cv15'
[prime.f.variants.straight] [prime.f.variants.serifless]
rank = 1 rank = 1
description = '`f` without bottom hook' description = '`f` without bottom serif, hook or exension'
selector.f = "straight" selector.f = "serifless"
[prime.f.variants.tailed]
rank = 2
description = '`f` with a leftward bottom hook'
selector.f = "tailed"
[prime.f.variants.serifed] [prime.f.variants.serifed]
rank = 3 rank = 2
description = '`f` with bottom serif' description = '`f` with bottom serif'
selector.f = "serifed" selector.f = "serifed"
[prime.f.variants.straight-tailed] [prime.f.variants.tailed]
rank = 3
description = '`f` with bottom hook'
selector.f = "tailed"
[prime.f.variants.extended]
rank = 4 rank = 4
description = '`f` with straight tail' description = '`f` with bar extended to descender'
selector.f = "straightTailed" selector.f = "extended"
[prime.f.variants.serifless-crossbar-at-x-height]
rank = 5
description = '`f` without bottom serif, hook or exension; crossbar is placed right at X-height'
selector.f = "seriflessCrossbarAtXHeight"
[prime.f.variants.serifed-crossbar-at-x-height]
rank = 6
description = '`f` with bottom serif; crossbar is placed right at X-height'
selector.f = "serifedCrossbarAtXHeight"
[prime.f.variants.tailed-crossbar-at-x-height]
rank = 7
description = '`f` with bottom hook; crossbar is placed right at X-height'
selector.f = "tailedCrossbarAtXHeight"
[prime.f.variants.extended-crossbar-at-x-height]
rank = 8
description = '`f` with bar extended to descender; crossbar is placed right at X-height'
selector.f = "extendedCrossbarAtXHeight"
[prime.f.variants.flat-hook] [prime.f.variants.flat-hook]
rank = 5 rank = 9
description = '`f` with flat hook' description = '`f` with flat top hook, without bottom serif, hook or exension'
selector.f = 'flatHook' selector.f = 'flatHook'
[prime.f.variants.flat-hook-crossbar-at-x-height]
rank = 6
description = '`f` with flat hook and crossbar placed right at X-height'
selector.f = 'flatHookCrossbarAtXHeight'
[prime.f.variants.flat-hook-serifed] [prime.f.variants.flat-hook-serifed]
rank = 7 rank = 10
description = '`f` with flat hook and bottom serif' description = '`f` with flat top hook and bottom serif'
selector.f = 'flatHookSerifed' selector.f = 'flatHookSerifed'
[prime.f.variants.flat-hook-tailed]
rank = 11
description = '`f` with flat top hook and bottom hook'
selector.f = 'flatHookTailed'
[prime.f.variants.flat-hook-extended]
rank = 12
description = '`f` with flat top hook and bar extended to descender'
selector.f = 'flatHookExtended'
[prime.f.variants.flat-hook-crossbar-at-x-height]
rank = 13
description = '`f` with flat top hook, without bottom serif, hook or exension; crossbar is placed right at X-height'
selector.f = 'flatHookCrossbarAtXHeight'
[prime.f.variants.flat-hook-serifed-crossbar-at-x-height] [prime.f.variants.flat-hook-serifed-crossbar-at-x-height]
rank = 8 rank = 14
description = '`f` with flat hook, bottom serif, and crossbar placed right at X-height' description = '`f` with flat top hook, bottom serif; crossbar is placed right at X-height'
selector.f = 'flatHookSerifedCrossbarAtXHeight' selector.f = 'flatHookSerifedCrossbarAtXHeight'
[prime.f.variants.flat-hook-round-tailed] [prime.f.variants.flat-hook-tailed-crossbar-at-x-height]
rank = 9 rank = 15
description = '`f` with flat hook' description = '`f` with flat top hook, bottom hook; crossbar is placed right at X-height'
selector.f = 'flatHookRoundTailed' selector.f = 'flatHookTailedCrossbarAtXHeight'
[prime.f.variants.flat-hook-round-tailed-crossbar-at-x-height] [prime.f.variants.flat-hook-extended-crossbar-at-x-height]
rank = 10 rank = 16
description = '`f` with flat hook and crossbar placed right at X-height' description = '`f` with flat top hook, bar extended to descender; crossbar is placed right at X-height'
selector.f = 'flatHookRoundTailedCrossbarAtXHeight' selector.f = 'flatHookExtendedCrossbarAtXHeight'
[prime.f.variants.flat-hook-flat-tailed]
rank = 11
description = '`f` with flat hook and bottom serif'
selector.f = 'flatHookFlatTailed'
[prime.f.variants.flat-hook-flat-tailed-crossbar-at-x-height]
rank = 12
description = '`f` with flat hook, bottom serif, and crossbar placed right at X-height'
selector.f = 'flatHookFlatTailedCrossbarAtXHeight'
@ -438,41 +458,51 @@ rank = 1
description = 'Serifed `i`' description = 'Serifed `i`'
selector.dotlessi = 'serifed' selector.dotlessi = 'serifed'
[prime.i.variants.italic] [prime.i.variants.serifless]
rank = 2 rank = 2
description = 'Italic `i`' description = '`i` like a straight line'
selector.dotlessi = 'italic' selector.dotlessi = "serifless"
[prime.i.variants.hooky] [prime.i.variants.hooky]
rank = 3 rank = 3
description = 'Hooky `i`' description = 'Hooky `i`'
selector.dotlessi = 'hooky' selector.dotlessi = 'hooky'
[prime.i.variants.serifless]
rank = 4
description = '`i` like a straight line'
selector.dotlessi = "serifless"
[prime.i.variants.zshaped] [prime.i.variants.zshaped]
rank = 5 rank = 4
description = 'Z-shaped `i`' description = 'Z-shaped `i`'
selector.dotlessi = 'zshaped' selector.dotlessi = 'zshaped'
[prime.i.variants.tailed] [prime.i.variants.hooky-bottom]
rank = 6 rank = 5
description = "Tailed `i`"
selector.dotlessi = 'tailed'
[prime.i.variants.hookybottom]
rank = 7
description = "`i` with a straight tail" description = "`i` with a straight tail"
selector.dotlessi = 'hookybottom' selector.dotlessi = 'hookyBottom'
[prime.i.variants.serifed-asymmetric] [prime.i.variants.serifed-asymmetric]
rank = 8 rank = 6
description = "`i` with shorter top serif and full bottom serif" description = "`i` with shorter top serif and full bottom serif"
selector.dotlessi = 'serifedAsymmetric' selector.dotlessi = 'serifedAsymmetric'
[prime.i.variants.tailed]
rank = 7
description = "`i` with curly tail"
selector.dotlessi = 'tailed'
[prime.i.variants.serifed-tailed]
rank = 8
description = '`i` with curly tail and top serif'
selector.dotlessi = 'serifedTailed'
[prime.i.variants.flat-tailed]
rank = 9
description = "`i` with top serif and a curly-then-flat tail"
selector.dotlessi = 'flatTailed'
[prime.i.variants.serifed-flat-tailed]
rank = 10
description = "`i` with top serif and a curly-then-flat tail"
selector.dotlessi = 'serifedFlatTailed'
[prime.j] [prime.j]
@ -531,46 +561,55 @@ selector.k = 'cursive'
sampler = 'l' sampler = 'l'
tag = 'cv21' tag = 'cv21'
[prime.l.variants.hooky] [prime.l.variants.serifed]
rank = 1 rank = 1
description = 'Serifed `l`'
selector.l = 'serifed'
[prime.l.variants.serifless]
rank = 2
description = '`l` like a straight line'
selector.l = "serifless"
[prime.l.variants.hooky]
rank = 3
description = 'Hooky `l`' description = 'Hooky `l`'
selector.l = 'hooky' selector.l = 'hooky'
[prime.l.variants.zshaped] [prime.l.variants.zshaped]
rank = 2 rank = 4
description = 'Z-shaped `l`' description = 'Z-shaped `l`'
selector.l = 'zshaped' selector.l = 'zshaped'
[prime.l.variants.serifed] [prime.l.variants.hooky-bottom]
rank = 3
description = 'Serifed `l`'
selector.l = 'serifed'
[prime.l.variants.italic]
rank = 4
description = 'Italic, cursive `l`'
selector.l = 'italic'
[prime.l.variants.serifless]
rank = 5 rank = 5
description = '`l` like a straight line'
selector.l = "serifless"
[prime.l.variants.tailed]
rank = 6
description = '`l` with a curved tail'
selector.l = 'tailed'
[prime.l.variants.hookybottom]
rank = 7
description = '`l` with a straight tail' description = '`l` with a straight tail'
selector.l = 'hookybottom' selector.l = 'hookyBottom'
[prime.l.variants.serifed-asymmetric] [prime.l.variants.serifed-asymmetric]
rank = 8 rank = 6
description = '`l` with shorter top serif and full bottom serif' description = '`l` with shorter top serif and full bottom serif'
selector.l = 'serifedAsymmetric' selector.l = 'serifedAsymmetric'
[prime.l.variants.tailed]
rank = 7
description = '`l` with curly tail'
selector.l = 'tailed'
[prime.l.variants.serifed-tailed]
rank = 8
description = '`l` with top serif and curly tail'
selector.l = 'serifedTailed'
[prime.l.variants.flat-tailed]
rank = 9
description = "`l` with top serif and a curly-then-flat tail"
selector.l = 'flatTailed'
[prime.l.variants.serifed-flat-tailed]
rank = 10
description = "`l` with top serif and a curly-then-flat tail"
selector.l = 'serifedFlatTailed'
[prime.m] [prime.m]
@ -1716,7 +1755,7 @@ digit-form = 'lining'
[default.upright-oblique] [default.upright-oblique]
a = 'doublestorey' a = 'doublestorey'
d = 'toothed' d = 'toothed'
f = 'straight' f = 'serifless'
i = 'serifed' i = 'serifed'
j = 'serifed' j = 'serifed'
k = 'straight' k = 'straight'
@ -1727,11 +1766,11 @@ y = 'straight'
[default.italic] [default.italic]
a = 'singlestorey-tailed' a = 'singlestorey-tailed'
d = 'tailed' d = 'tailed'
f = 'tailed' f = 'flat-hook-tailed'
i = 'italic' i = 'serifed-tailed'
j = 'serifed' j = 'serifed'
k = 'cursive' k = 'cursive'
l = 'italic' l = 'serifed-tailed'
u = 'tailed' u = 'tailed'
y = 'cursive' y = 'cursive'
@ -1741,21 +1780,16 @@ y = 'cursive'
one = 'base' one = 'base'
seven = 'serifed' seven = 'serifed'
[composite.slab.upright] [composite.slab.upright-oblique]
f = 'serifed' f = 'serifed'
r = 'serifed' r = 'serifed'
y = 'straight-turn' y = 'straight-turn'
[composite.slab.italic] [composite.slab.italic]
f = 'tailed' f = 'flat-hook-tailed'
r = 'top-serifed' r = 'top-serifed'
y = 'cursive' y = 'cursive'
[composite.slab.oblique]
f = 'serifed'
r = 'serifed'
y = 'straight-turn'
[composite.ss01] [composite.ss01]
@ -1778,6 +1812,7 @@ asterisk = 'hexhigh'
one = 'base' one = 'base'
six = 'open-contour' six = 'open-contour'
nine = 'open-contour' nine = 'open-contour'
percent = "rings-connected"
@ -1798,6 +1833,7 @@ one = 'base'
seven = 'serifed' seven = 'serifed'
six = 'closed-contour' six = 'closed-contour'
nine = 'closed-contour' nine = 'closed-contour'
percent = "rings-connected"
@ -1814,6 +1850,7 @@ asterisk = 'hexhigh'
one = 'base' one = 'base'
six = 'open-contour' six = 'open-contour'
nine = 'open-contour' nine = 'open-contour'
percent = "rings-connected"
[composite.ss03.upright-oblique] [composite.ss03.upright-oblique]
g = 'doublestorey' g = 'doublestorey'
@ -1835,7 +1872,7 @@ a = 'doublestorey'
underscore = 'low' underscore = 'low'
i = 'serifed' i = 'serifed'
k = 'straight' k = 'straight'
l = 'italic' l = 'serifed-flat-tailed'
y = 'straight-turn' y = 'straight-turn'
brace = 'straight' brace = 'straight'
number-sign = 'slanted' number-sign = 'slanted'
@ -1844,6 +1881,7 @@ one = 'base'
ampersand = 'upper-open' ampersand = 'upper-open'
six = 'closed-contour' six = 'closed-contour'
nine = 'closed-contour' nine = 'closed-contour'
percent = "rings-connected"
@ -1858,7 +1896,7 @@ a = 'doublestorey'
g = 'opendoublestorey' g = 'opendoublestorey'
i = 'serifed' i = 'serifed'
k = 'straight' k = 'straight'
l = 'italic' l = 'serifed-tailed'
y = 'straight-turn' y = 'straight-turn'
number-sign = 'slanted' number-sign = 'slanted'
zero = 'dotted' zero = 'dotted'
@ -1867,6 +1905,7 @@ ampersand = 'et'
four = 'semi-open' four = 'semi-open'
six = 'closed-contour' six = 'closed-contour'
nine = 'open-contour' nine = 'open-contour'
percent = "rings-connected"
@ -1887,6 +1926,7 @@ number-sign = 'slanted'
one = 'base' one = 'base'
six = 'closed-contour' six = 'closed-contour'
nine = 'closed-contour' nine = 'closed-contour'
percent = "rings-connected"
@ -1908,6 +1948,7 @@ one = 'base'
paren = 'large-contour' paren = 'large-contour'
six = 'closed-contour' six = 'closed-contour'
nine = 'closed-contour' nine = 'closed-contour'
percent = "rings-connected"
@ -1957,7 +1998,7 @@ description = 'Source Code Pro Style'
capital-g = 'toothless' capital-g = 'toothless'
at = 'threefold' at = 'threefold'
k = 'straight' k = 'straight'
l = 'italic' l = 'serifed-tailed'
y = 'straight-turn' y = 'straight-turn'
asterisk = 'low' asterisk = 'low'
zero = 'dotted' zero = 'dotted'
@ -1992,6 +2033,7 @@ asterisk = 'low'
one = 'base' one = 'base'
nine = 'straight-bar' nine = 'straight-bar'
six = 'straight-bar' six = 'straight-bar'
percent = "rings-connected"
@ -2021,8 +2063,8 @@ a = "doublestorey-toothless-corner"
b = "toothless-corner" b = "toothless-corner"
d = "toothless-corner" d = "toothless-corner"
g = "earless-corner" g = "earless-corner"
i = "italic" i = "serifed-tailed"
l = "italic" l = "serifed-tailed"
m = "earless-corner-double-arch-shortleg" m = "earless-corner-double-arch-shortleg"
n = "earless-corner-straight" n = "earless-corner-straight"
p = "earless-corner" p = "earless-corner"
@ -2055,6 +2097,7 @@ number-sign = 'slanted'
one = 'base' one = 'base'
six = 'closed-contour' six = 'closed-contour'
nine = 'closed-contour' nine = 'closed-contour'
percent = "rings-connected"
@ -2063,20 +2106,25 @@ tag = 'ss14'
description = 'JetBrains Mono Style' description = 'JetBrains Mono Style'
[composite.ss14.design] [composite.ss14.design]
i = 'serifed' capital-q = "straight"
k = 'straight' capital-g = "toothless"
l = 'italic' f = "flat-hook-crossbar-at-x-height"
u = 'toothless-rounded' i = "serifed"
zero = 'long-dotted' l = "serifed-flat-tailed"
three = 'flattop' u = "toothless-rounded"
capital-q = 'straight' zero = "dotted"
asterisk = 'low' three = "flattop"
one = 'base' one = "base"
seven = 'serifed' asterisk = "low"
ampersand = 'upper-open' tilde = "low"
four = 'semi-open-non-crossing' lig-ltgteq = "slanted"
nine = 'straight-bar' percent = "rings-connected"
six = 'straight-bar' ampersand = "upper-open"
brace = "straight"
number-sign = "slanted"
[composite.ss14.italic]
f = "flat-hook-tailed-crossbar-at-x-height"