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 = 'tailed'`, `cv14 = 4`: `d` with a slightly tail bottom-right tail (default for Italic).
- Styles for `f`:
+ `f = 'straight'`, `cv15 = 1`: `f` without bottom hook (default for Sans Upright).
+ `f = 'tailed'`, `cv15 = 2`: `f` with a leftward bottom hook (default for Italic).
+ `f = 'serifed'`, `cv15 = 3`: `f` with bottom serif (default for Slab Upright).
+ `f = 'straight-tailed'`, `cv15 = 4`: `f` with straight tail.
+ `f = 'flat-hook'`, `cv15 = 5`: `f` with flat hook.
+ `f = 'flat-hook-crossbar-at-x-height'`, `cv15 = 6`: `f` with flat hook and crossbar placed right at X-height.
+ `f = 'flat-hook-serifed'`, `cv15 = 7`: `f` with flat hook and bottom serif.
+ `f = 'flat-hook-serifed-crossbar-at-x-height'`, `cv15 = 8`: `f` with flat hook, bottom serif, and crossbar placed right at X-height.
+ `f = 'flat-hook-round-tailed'`, `cv15 = 9`: `f` with flat hook.
+ `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-flat-tailed'`, `cv15 = 11`: `f` with flat hook and bottom serif.
+ `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 = 'serifless'`, `cv15 = 1`: `f` without bottom serif, hook or exension (default for Sans Upright).
+ `f = 'serifed'`, `cv15 = 2`: `f` with bottom serif (default for Slab Upright).
+ `f = 'tailed'`, `cv15 = 3`: `f` with bottom hook.
+ `f = 'extended'`, `cv15 = 4`: `f` with bar extended to descender.
+ `f = 'serifless-crossbar-at-x-height'`, `cv15 = 5`: `f` without bottom serif, hook or exension; crossbar is 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 = 'tailed-crossbar-at-x-height'`, `cv15 = 7`: `f` with bottom hook; crossbar is 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'`, `cv15 = 9`: `f` with flat top hook, without bottom serif, hook or exension.
+ `f = 'flat-hook-serifed'`, `cv15 = 10`: `f` with flat top hook and bottom serif.
+ `f = 'flat-hook-tailed'`, `cv15 = 11`: `f` with flat top hook and bottom hook (default for Italic).
+ `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`:
+ `g = 'singlestorey'`, `cv16 = 1`: Single-storey `g` (default).
+ `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.
- Styles for `i`:
+ `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 = 'serifless'`, `cv18 = 4`: `i` like a straight line.
+ `i = 'zshaped'`, `cv18 = 5`: Z-shaped `i`.
+ `i = 'tailed'`, `cv18 = 6`: Tailed `i`.
+ `i = 'hookybottom'`, `cv18 = 7`: `i` with a straight tail.
+ `i = 'serifed-asymmetric'`, `cv18 = 8`: `i` with shorter top serif and full bottom serif.
+ `i = 'zshaped'`, `cv18 = 4`: Z-shaped `i`.
+ `i = 'hooky-bottom'`, `cv18 = 5`: `i` with a straight tail.
+ `i = 'serifed-asymmetric'`, `cv18 = 6`: `i` with shorter top serif and full bottom serif.
+ `i = 'tailed'`, `cv18 = 7`: `i` with curly tail.
+ `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`:
+ `j = 'serifed'`, `cv19 = 1`: `j` with top serif (default).
+ `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 = 'cursive'`, `cv20 = 3`: `k` with a cursive loop (default for Italic).
- Styles for `l`:
+ `l = 'hooky'`, `cv21 = 1`: Hooky `l`.
+ `l = 'zshaped'`, `cv21 = 2`: Z-shaped `l`.
+ `l = 'serifed'`, `cv21 = 3`: Serifed `l` (default for Upright).
+ `l = 'italic'`, `cv21 = 4`: Italic, cursive `l` (default for Italic).
+ `l = 'serifless'`, `cv21 = 5`: `l` like a straight line.
+ `l = 'tailed'`, `cv21 = 6`: `l` with a curved tail.
+ `l = 'hookybottom'`, `cv21 = 7`: `l` with a straight tail.
+ `l = 'serifed-asymmetric'`, `cv21 = 8`: `l` with shorter top serif and full bottom serif.
+ `l = 'serifed'`, `cv21 = 1`: Serifed `l` (default for Upright).
+ `l = 'serifless'`, `cv21 = 2`: `l` like a straight line.
+ `l = 'hooky'`, `cv21 = 3`: Hooky `l`.
+ `l = 'zshaped'`, `cv21 = 4`: Z-shaped `l`.
+ `l = 'hooky-bottom'`, `cv21 = 5`: `l` with a straight tail.
+ `l = 'serifed-asymmetric'`, `cv21 = 6`: `l` with shorter top serif and full bottom serif.
+ `l = 'tailed'`, `cv21 = 7`: `l` with curly tail.
+ `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`:
+ `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.

View file

@ -482,9 +482,9 @@ l = 'serifed'
f = 'flat-hook'
[buildPlans.iosevka-aile.derivingVariants.mathtt.italic]
i = 'italic'
l = 'italic'
f = 'flat-hook-flat-tailed'
i = 'serifed-tailed'
l = 'serifed-tailed'
f = 'flat-hook-tailed'
[buildPlans.iosevka-aile.variants.design]
at = 'fourfold'
@ -521,18 +521,6 @@ quasiProportionalDiversity = 1
at = 'fourfold'
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]
shape = 576
menu = 5
@ -565,9 +553,9 @@ f = 'serifed'
r = 'serifed'
[buildPlans.iosevka-sparkle.variants.italic]
i = 'italic'
l = 'italic'
f = 'tailed'
i = 'serifed-tailed'
l = 'serifed-tailed'
f = 'flat-hook-tailed'
r = 'top-serifed'
[buildPlans.iosevka-sparkle.derivingVariants.mathtt.design]
@ -587,9 +575,9 @@ f = 'serifed'
r = 'serifed'
[buildPlans.iosevka-sparkle.derivingVariants.mathtt.italic]
i = 'italic'
l = 'italic'
f = 'tailed'
i = 'serifed-tailed'
l = 'serifed-tailed'
f = 'flat-hook-tailed'
r = 'top-serifed'
[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 dotless form of mathematical derived letters if it ia aliased (#731).
* 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]
flat xleft 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
local fine : fallback _fine Stroke
include : dispiro
@ -678,4 +688,4 @@ glyph-block CommonShapes : begin
corner [mix x1 x2 (-k)] [mix y1 y2 (-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
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-import CommonShapes
@ -210,27 +216,69 @@ glyph-block Letter-Latin-Lower-I : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : CreateDottedComposition
glyph-block-export IotaShape TailedIShape
glyph-block-import Letter-Shared-Shapes : FlatHookDepth
### 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 middle df.middle
local hd : FlatHookDepth df
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
widths.center
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
flat (middle + Hook - HalfStroke) HalfStroke
curl (middle + [Math.max HookX (LongJut * 1.05 * df.div)]) HalfStroke [heading Rightward]
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
if addTopSerif : begin
include : tagged 'serifLT' : LeftwardTopSerif xMiddle top (LongJut * df.div)
create-glyph 'grek/iota' 0x3B9 : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.e
include : IotaShape XH
include : IotaShape XH (addTopSerif -- true)
alias 'latiniota' 0x269 'grek/iota'
@ -238,7 +286,7 @@ glyph-block Letter-Latin-Lower-I : begin
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.capital
include : IotaShape CAP
include : IotaShape CAP (addTopSerif -- true)
create-glyph 'dotlessi.straight' : glyph-proc
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 : LeftwardBottomSerif df.middle 0 (LongJut * df.div)
create-glyph 'dotlessi.italic' : glyph-proc
create-glyph 'dotlessi.tailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.e
if para.isItalic
: then : begin
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 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
include : ItalicDotlessIShape df XH (setMarks -- true) (addTopSerif -- false)
: 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
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
create-glyph 'dotlessi.serifedTailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
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
set-width df.width
include : df.markSet.e
@ -514,7 +547,7 @@ glyph-block Letter-Latin-Lower-J : begin
widths.lhs
flat [Math.min terminal (bar - tTurn - [Math.max (Stroke / 3) (df.width / 6)])] Descender
curl (bar - tTurn) Descender
archv
archv.superness DesignParameters.tightHookSuperness
flat bar (Descender + tTurn)
curl bar XH [heading Upward]
set-base-anchor 'above' barCenter XH
@ -653,7 +686,7 @@ glyph-block Letter-Latin-Lower-L : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
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-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 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.italic' : glyph-proc
create-glyph 'l.tailed' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
if para.isItalic
: then : begin
local shift : (1 - df.div) * 0.4
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
include : ItalicDotlessIShape df CAP (addTopSerif -- false)
: else : begin
include : IotaShape CAP
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
include : TailedDotlessShape df CAP (addTopSerif -- false)
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
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]
set-base-anchor 'topright' (df.middle + RightSB - Middle) CAP
create-glyph 'l.tailed' : 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
create-glyph 'l.hookyBottom' : glyph-proc
local df : DivFrame para.diversityI
set-width df.width
include : df.markSet.b
@ -794,11 +825,13 @@ glyph-block Letter-Latin-Lower-L : begin
list 'hooky' 0
list 'zshaped' Stroke
list 'serifed' Stroke
list 'italic' Stroke
list 'serifedTailed' Stroke
list 'serifless' 0
list 'tailed' Stroke
list 'hookybottom' Stroke
list 'hookyBottom' Stroke
list 'serifedAsymmetric' Stroke
list 'flatTailed' Stroke
list 'serifedFlatTailed' Stroke
foreach {suffix y0} [items-of LDotOptions] : if [query-glyph ('l.' + suffix)]
create-glyph ('ldot.' + suffix) : glyph-proc
@ -2396,15 +2429,15 @@ glyph-block Letter-Latin-K : begin
define [BashkirKaShape top straightBar] : glyph-proc
local left : if SLAB ([mix SB RightSB 0.35] - MVertStroke / 2 * HVContrast) [mix SB RightSB 0.2]
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
include : HBarTop barleft (Stroke * 0.1 + left) top
include : HBarTop barLeft (Stroke * 0.1 + left) top
include : VBarLeft left 0 top sw
include : KLegShape leftNB RightSB top straightBar sw
if SLAB : begin
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
include : MarkSet.capital
@ -4233,7 +4266,6 @@ glyph-block Letter-Latin-Lower-Q : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Marks : markHalfStroke
glyph-block-import Letter-Latin-Lower-I : TailedIShape
glyph-block-import Letter-Shared-Shapes : RightwardTailedBar DToothlessRise DMBlend
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-import CommonShapes
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)
@ -5778,10 +5810,12 @@ glyph-block Letter-Latin-Lower-F : begin
local w [fallback fine Stroke]
include : dispiro
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)
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
include : MarkSet.if
@ -5842,6 +5876,7 @@ glyph-block Letter-Latin-Lower-F : begin
define fbar : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdj
define fbarFH : XH * DesignParameters.fBarPosToXH + Stroke * DesignParameters.fbarStrokeAdjFH
define [SmallFBottomSerif] : dispiro
widths.lhs
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 (RightSB + RBalance2 - (OX - O) - offset) 0]} {}
create-glyph : glyph-proc
include : MarkSet.b
define [SmallFDownExtension barLeft] : VBarLeft barLeft 0.1 (Descender * 0.9)
local barleft : [mix SB RightSB 0.35] - Stroke * 0.25 * HVContrast
include : StdFShapeT dispiro 0 barleft Stroke
define [SmallFDownHook df barRight counterHookLeft] : begin
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
include : HBarTop SB [mix SB RightSB 0.95] fbar
define [StandardSmallFShape df m bh counterHook] : glyph-proc
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
VerticalHook (barleft + HalfStroke * HVContrast) 0 (-HookX) Hook
include : StdFShapeT dispiro 0 barLeft0 Stroke
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
local crossLeft : mix 0 SB m
local crossRight : mix df.width df.rightSB m
local barLeft : [mix crossLeft crossRight 0.42] - Stroke * 0.375 * HVContrast + df.width / 32
local tTurn : Math.max (Hook * [Math.min 1 : Math.sqrt df.div]) (Stroke * 1.375) : Math.min Hook (Stroke * 1.75)
local barLeft : if (counterHook > 1)
df.middle - HalfStroke * HVContrast
[mix crossLeft crossRight 0.42] - Stroke * 0.375 * HVContrast + df.width / 32
local hd : FlatHookDepth df
include : dispiro
widths.lhs
flat crossRight CAP
curl [Math.min (barLeft + tTurn) (crossRight - 0.1)] CAP
archv
flat barLeft [Math.max XH (CAP - tTurn)]
curl [Math.min (barLeft + hd.x) (crossRight - 0.1)] CAP
archv.superness DesignParameters.tightHookSuperness
flat barLeft [Math.max XH (CAP - hd.y)]
curl barLeft 0 [heading Downward]
include : HBarTop crossLeft crossRight bh
if (counterHook === 1) : begin
include : VerticalHook (barLeft + HalfStroke * HVContrast) 0 (-HookX) Hook
include : HCrossBar.top crossLeft crossRight 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 : barRight - (crossRight - barLeft)
include : dispiro
widths.lhs
flat counterHookLeft Descender
curl [Math.max (barRight - tTurn) (counterHookLeft + 0.1)] Descender
archv
flat barRight [Math.min 0 (Descender + tTurn)]
curl barRight 0.1 [heading Upward]
include : SmallFDownHook df barRight counterHookLeft
create-glyph 'f.serifless' : glyph-proc
include : MarkSet.b
include : StandardSmallFShape [DivFrame 1] 0.95 fbarFH
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
set-width dfNarrowF.width
include : dfNarrowF.markSet.b
include : NarrowFShape dfNarrowF 0.5 fbar
define df : DivFrame para.diversityF
set-width df.width
include : df.markSet.b
include : NarrowFShape df 0.5 fbarFH
create-glyph 'f.flatHook' : glyph-proc
include : MarkSet.b
include : NarrowFShape [DivFrame 1] 1 fbar
include : NarrowFShape [DivFrame 1] 1 fbarFH
create-glyph 'f.flatHookCrossbarAtXHeight' : glyph-proc
include : MarkSet.b
@ -5935,7 +6001,7 @@ glyph-block Letter-Latin-Lower-F : begin
create-glyph 'f.flatHookSerifed' : glyph-proc
include : MarkSet.b
include : NarrowFShape [DivFrame 1] 1 fbar
include : NarrowFShape [DivFrame 1] 1 fbarFH
include : WithTransform [Translate ((RightSB - SB) * 0.035) 0] : SmallFBottomSerif
create-glyph 'f.flatHookSerifedCrossbarAtXHeight' : glyph-proc
@ -5943,43 +6009,57 @@ glyph-block Letter-Latin-Lower-F : begin
include : NarrowFShape [DivFrame 1] 1 XH
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 : NarrowFShape [DivFrame 1] 1 fbar 1
include : NarrowFShape [DivFrame 1] 1 fbarFH 2
create-glyph 'f.flatHookRoundTailedCrossbarAtXHeight' : 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
create-glyph 'f.flatHookTailedCrossbarAtXHeight' : glyph-proc
include : MarkSet.if
include : NarrowFShape [DivFrame 1] 1 XH 2
create-glyph 'f.tailed' : glyph-proc
include [refer-glyph 'longs.italic'] AS_BASE
include : HBarTop (Middle - LongJut) (Middle + LongJut) fbar
create-glyph 'f.flatHookExtended' : glyph-proc
include : MarkSet.if
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'
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.straightTailed' nothing 'f.straightTailed' Middle (XH / 2) [MarkSet.if]
turned 'turnf.tailed' nothing 'f.tailed' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.tailed' nothing 'f.tailed' Middle (XH / 2) [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.flatHookCrossbarAtXHeight' nothing 'f.flatHookCrossbarAtXHeight' 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.flatHookRoundTailed' nothing 'f.flatHookRoundTailed' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookRoundTailedCrossbarAtXHeight' nothing 'f.flatHookRoundTailedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookFlatTailed' nothing 'f.flatHookFlatTailed' Middle [mix Descender CAP 0.5] [MarkSet.if]
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]
turned 'turnf.flatHookTailedCrossbarAtXHeight' nothing 'f.flatHookTailedCrossbarAtXHeight' Middle [mix Descender CAP 0.5] [MarkSet.if]
turned 'turnf.flatHookExtendedCrossbarAtXHeight' nothing 'f.flatHookExtendedCrossbarAtXHeight' 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]
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"
local shift (-(Width * 0.055 + SB * 0.5))
local barr RightSB
@ -6226,7 +6306,7 @@ glyph-block Letter-Latin-Lower-T : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
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 [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
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
include : HBarTop
include : HCrossBar.top
xSmallTBarLeft + HalfStroke - LongJut + TBalance2
xSmallTBarLeft + HalfStroke + LongJut + TBalance2
begin XH
@ -6265,7 +6345,7 @@ glyph-block Letter-Latin-Lower-T : begin
VBarLeft (xSmallTBarLeft + BBD) 0 CAP BBS
SmallTHookShapeT spiro-outline 1 CAP 0 BBS
include : difference
HBarTop
HCrossBar.top
xSmallTBarLeft + (BBD / 2) - LongJut + TBalance2
xSmallTBarLeft + (BBD / 2) + LongJut + TBalance2
begin XH
@ -6276,15 +6356,15 @@ glyph-block Letter-Latin-Lower-T : begin
local xCrossLeft : mix 0 SB m
local xCrossRight : mix df.width df.rightSB m
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
HBarTop xCrossLeft (xCrossRight + ext) XH
HCrossBar.top xCrossLeft (xCrossRight + ext) XH
dispiro
widths.rhs
flat xCrossRight 0
curl [Math.min (xBarLeft + tTurn) (xCrossRight - 1)] 0
archv
flat xBarLeft tTurn
curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] 0
archv.superness DesignParameters.tightHookSuperness
flat xBarLeft hd.y
curl xBarLeft top [heading Upward]
set-base-anchor 'topright' xCrossRight CAP
@ -6324,13 +6404,13 @@ glyph-block Letter-Latin-Lower-T : begin
set-width Width
include : MarkSet.b
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
set-width Width
include : MarkSet.b
include : VBarLeft xSmallTBarLeft 0 CAP
include : HBarTop xSmallTBarLeft (Middle + LongJut) XH
include : HCrossBar.top xSmallTBarLeft (Middle + LongJut) XH
select-variant 't' 't'

View file

@ -118,7 +118,9 @@ export : define [SetupBuilders args] : begin
return cache.(samples).vh
list hv vh
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]
set arcvh.superness : lambda [s] : arcvh DEFAULT_STEPS s
define [complexThru] : begin
local a : {}.slice.call arguments

View file

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

View file

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

View file

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