Variants cleanup and rectify

This commit is contained in:
be5invis 2020-06-20 00:34:26 -07:00
parent dc62a5caad
commit 7b6ea912b6
74 changed files with 324 additions and 261 deletions

View file

@ -372,9 +372,10 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
* `v-x-straight`, `cv77`: Standard, straight `X` and `x` (default). * `v-x-straight`, `cv77`: Standard, straight `X` and `x` (default).
* `v-x-curly`, `cv78`: Slightly curly `X` and `x`, like Iosevka 2.x. * `v-x-curly`, `cv78`: Slightly curly `X` and `x`, like Iosevka 2.x.
* Styles for `y`: * Styles for `y`:
* `v-y-straight`, `cv48`: More-straight letter `y` (default for Upright). * `v-y-straight`, `cv48`: Letter `y` that is fully straight (default for Sans Upright).
* `v-y-cursive`, `cv49`: Cursive-like `y` (default for Italic). * `v-y-cursive`, `cv49`: Cursive-like `y` (default for Italic).
* `v-y-curly`, `cv79`: More curly letter `y`, like Iosevka 2.x. * `v-y-curly`, `cv79`: More curly letter `y`, like Iosevka 2.x.
* `v-y-straight-turn`, `VXBF`: Letter `y` with straight upper and a tail turns leftward (default for Slab Upright).
* Styles for `z`: * Styles for `z`:
* `v-z-standard`, `VXBD`: Standard `Z` and `z` (default). * `v-z-standard`, `VXBD`: Standard `Z` and `z` (default).
* `v-z-with-crossbar`, `VXBE`: `Z` and `z` with a cross bar for better dsitinction with `2`. * `v-z-with-crossbar`, `VXBE`: `Z` and `z` with a cross bar for better dsitinction with `2`.
@ -417,7 +418,7 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
* `v-four-open`, `VXAV`: `4` with open contour. * `v-four-open`, `VXAV`: `4` with open contour.
* `v-four-open-non-crossing`, `VXAW`: `4` with open contour but the horizontal bar does not overflow the vertical bar. * `v-four-open-non-crossing`, `VXAW`: `4` with open contour but the horizontal bar does not overflow the vertical bar.
* Styles for `6`: * Styles for `6`:
* `v-six-closed-contour`, `VXAE`: `6` with a more closed contour. * `v-six-closed-contour`, `VXAE`: `6` with a more closed.
* `v-six-open-contour`, `VXAF`: `6` with a more open contour. * `v-six-open-contour`, `VXAF`: `6` with a more open contour.
* `v-six-straight-bar`, `VXBB`: `6` with a straight bar (default). * `v-six-straight-bar`, `VXBB`: `6` with a straight bar (default).
* Styles for `7`: * Styles for `7`:
@ -426,7 +427,7 @@ The current available styles for `design`/`upright`/`italic`/`oblique` options a
* `v-seven-crossbar`, `VXAX`: `7` with crossbar. * `v-seven-crossbar`, `VXAX`: `7` with crossbar.
* `v-seven-crossbar-serifed`, `VXAY`: `7` with crossbar and initial serif. * `v-seven-crossbar-serifed`, `VXAY`: `7` with crossbar and initial serif.
* Styles for `9`: * Styles for `9`:
* `v-nine-closed-contour`, `cv96`: `9` with a more closed contour. * `v-nine-closed-contour`, `cv96`: `9` with a more closed.
* `v-nine-open-contour`, `cv97`: `9` with a more open contour. * `v-nine-open-contour`, `cv97`: `9` with a more open contour.
* `v-nine-straight-bar`, `VXBC`: `9` with a straight bar (default). * `v-nine-straight-bar`, `VXBC`: `9` with a straight bar (default).
* Styles for `ß`: * Styles for `ß`:

View file

@ -8,7 +8,7 @@ const Parameters = require("../support/parameters");
const FormVariantData = require("../support/variant-data"); const FormVariantData = require("../support/variant-data");
const FormLigationData = require("../support/ligation-data"); const FormLigationData = require("../support/ligation-data");
const { AnyCv, CvDecompose } = require("../support/gr"); const { AnyCv, CvDecompose } = require("../support/gr");
const Toml = require("toml"); const Toml = require("@iarna/toml");
module.exports = async function main(argv) { module.exports = async function main(argv) {
const para = await getParameters(argv); const para = await getParameters(argv);

View file

@ -1457,23 +1457,22 @@ glyph-block Letter-Latin-Lower-Y : begin
glyph-block-import CommonShapes glyph-block-import CommonShapes
glyph-block-import Overmarks glyph-block-import Overmarks
define [GenSmallYShape straightBar serifless] : begin define [GenSmallYShape straightBar useTurnBottom serifless] : begin
local slab : if serifless false SLAB local slab : if serifless false SLAB
local useStraightBottom : !slab && straightBar local useStraightBottom : straightBar && !useTurnBottom
local useTurnBotton : slab || straightBar
local slabCurly : slab && !straightBar local slabCurly : slab && !straightBar
local px1 0.84 local px1 0.84
local py1 : [StrokeWidthBlend 0.8 0.76] * [if slabCurly [StrokeWidthBlend 1 0.9] 1] local py1 : [StrokeWidthBlend 0.8 0.76] * [if slabCurly [StrokeWidthBlend 1 0.9] 1]
local px2 0.95 local px2 0.95
local py20 : 0.88 * [if slabCurly [StrokeWidthBlend 1 0.9] 1] local py20 : 0.88 * [if slabCurly [StrokeWidthBlend 1 0.9] 1]
local py2 : if (useStraightBottom || useTurnBotton) 0.97 py20 local py2 : if (useStraightBottom || useTurnBottom) 0.97 py20
local pds 0.1 local pds 0.1
local pds2 0.01 local pds2 0.01
local dpy1 : (1 - [linreg (1 - px2) (1 - py2) px1 py1 1]) / (1 - py1) local dpy1 : (1 - [linreg (1 - px2) (1 - py2) px1 py1 1]) / (1 - py1)
local dpy20 : (1 - [linreg (1 - px1) (1 - py1) px2 py20 1]) / (1 - py20) local dpy20 : (1 - [linreg (1 - px1) (1 - py1) px2 py20 1]) / (1 - py20)
local dpy2 : (1 - [linreg (1 - px1) (1 - py1) px2 py2 1]) / (1 - py2) local dpy2 : (1 - [linreg (1 - px1) (1 - py1) px2 py2 1]) / (1 - py2)
local yrstrokel0 : Middle - Width * 0.1 local yrstrokel0 : Middle - Width * 0.1
local yrstrokel : Middle - Width * 0.1 + (Stroke * HVContrast * [if (useStraightBottom || useTurnBotton) (2 / 3) (1 / 3)] * [if slabCurly [StrokeWidthBlend 0.95 0.97] 1]) local yrstrokel : Middle - Width * 0.1 + (Stroke * HVContrast * [if (useStraightBottom || useTurnBottom) (2 / 3) (1 / 3)] * [if slabCurly [StrokeWidthBlend 0.95 0.97] 1])
local yrstroker : Width - SB * [if (straightBar && SLAB && !slab) 1.5 1] * [if straightBar designParameters.straightSmallYShapeSbShrink 1] local yrstroker : Width - SB * [if (straightBar && SLAB && !slab) 1.5 1] * [if straightBar designParameters.straightSmallYShapeSbShrink 1]
local yshrink : [StrokeWidthBlend 1 0.85] * [if straightBar ([adviceBlackness 3.25] / Stroke) 1] local yshrink : [StrokeWidthBlend 1 0.85] * [if straightBar ([adviceBlackness 3.25] / Stroke) 1]
local yBottomJut : Jut * 1.25 local yBottomJut : Jut * 1.25
@ -1483,7 +1482,7 @@ glyph-block Letter-Latin-Lower-Y : begin
define [CalcDS top bottom] : begin define [CalcDS top bottom] : begin
local ds0 : (top - bottom) * pds local ds0 : (top - bottom) * pds
local ds : if slabCurly [Math.max [adviceBlackness2 3 6 (top - bottom)] ds0] ds0 local ds : if slabCurly [Math.max [adviceBlackness2 3 6 (top - bottom)] ds0] ds0
local ds2 : (top - bottom) * pds2 + [if (useStraightBottom || useTurnBotton) (slabysize * slabyvx) 0] local ds2 : (top - bottom) * pds2 + [if (useStraightBottom || useTurnBottom) (slabysize * slabyvx) 0]
return {ds ds2} return {ds ds2}
define [yDiagCor dy] : diagCor dy (yrstroker - yrstrokel) 0 Stroke define [yDiagCor dy] : diagCor dy (yrstroker - yrstrokel) 0 Stroke
@ -1516,7 +1515,7 @@ glyph-block Letter-Latin-Lower-Y : begin
useStraightBottom : list useStraightBottom : list
ConnectZ shrink ConnectZ shrink
curl [mix yrstroker joinX ((top - bottom) / (top - joinY))] bottom [widths.heading 0 (Stroke * [yDiagCor (top - bottom)]) Downward] curl [mix yrstroker joinX ((top - bottom) / (top - joinY))] bottom [widths.heading 0 (Stroke * [yDiagCor (top - bottom)]) Downward]
useTurnBotton : list useTurnBottom : list
ConnectZ shrink ConnectZ shrink
flat (yrstrokel - slabysize) bottom [widths.rhs] flat (yrstrokel - slabysize) bottom [widths.rhs]
curl [Math.min (yrstrokel - slabysize - 0.1) (yrstrokel - Stroke - yBottomJut)] bottom curl [Math.min (yrstrokel - slabysize - 0.1) (yrstrokel - Stroke - yBottomJut)] bottom
@ -1526,6 +1525,18 @@ glyph-block Letter-Latin-Lower-Y : begin
flat yrstrokel (bottom + ds2) [widths.heading 0 Stroke Downward] flat yrstrokel (bottom + ds2) [widths.heading 0 Stroke Downward]
curl yrstrokel bottom [widths.heading 0 Stroke Downward] curl yrstrokel bottom [widths.heading 0 Stroke Downward]
define [yBaseSerif top bottom] : glyph-construction
local {ds ds2} : CalcDS top bottom
define joinX : mix yrstrokel yrstroker (1 - px2)
define joinY : mix (bottom + ds2) (top - ds) (1 - py2)
if (!useTurnBottom) : begin
if (useStraightBottom) : begin
local xBaseKnot : mix yrstroker joinX ((top - bottom) / (top - joinY))
include : LeftwardBottomSerif (xBaseKnot - HalfStroke * HVContrast) bottom yBottomJut
: else : begin
include : LeftwardBottomSerif (yrstroker - HalfStroke * HVContrast) bottom yBottomJut
define [yJoinProportion hooktop x] : linreg define [yJoinProportion hooktop x] : linreg
1 - px2 1 - px2
1 - py2 1 - py2
@ -1585,10 +1596,11 @@ glyph-block Letter-Latin-Lower-Y : begin
if slab : begin if slab : begin
include : AIVSerifs top include : AIVSerifs top
include : yBaseSerif top bottom
define [SmallYHookTopShape top bottom] : glyph-construction define [SmallYHookTopShape top bottom] : glyph-construction
local ds : (top - bottom) * pds local ds : (top - bottom) * pds
local ds2 : (top - bottom) * pds2 + [if (useStraightBottom || useTurnBotton) (slabysize * slabyvx) 0] local ds2 : (top - bottom) * pds2 + [if (useStraightBottom || useTurnBottom) (slabysize * slabyvx) 0]
local joinHeight : yJoinHeight ds ds2 top bottom true local joinHeight : yJoinHeight ds ds2 top bottom true
include : intersection include : intersection
@ -1615,6 +1627,7 @@ glyph-block Letter-Latin-Lower-Y : begin
if slab : begin if slab : begin
include : AIVSerifs top include : AIVSerifs top
eject-contour 'serifRT' eject-contour 'serifRT'
include : yBaseSerif top bottom
define [SmallLambdaShape top bottom] : ReverseContours : glyph-construction define [SmallLambdaShape top bottom] : ReverseContours : glyph-construction
set currentGlyph.gizmo : Italify (-para.slantAngle) set currentGlyph.gizmo : Italify (-para.slantAngle)
@ -1631,12 +1644,17 @@ glyph-block Letter-Latin-Lower-Y : begin
sketch # y.straight sketch # y.straight
include MarkSet.p include MarkSet.p
branch branch
include : [GenSmallYShape true].SmallYShape XH Descender include : [GenSmallYShape true false].SmallYShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'y.straight' save 'y.straight'
save 'cyru.straight' save 'cyru.straight'
branch branch
include : [GenSmallYShape false].SmallYShape XH Descender include : [GenSmallYShape true true].SmallYShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2)
save 'y.straightTurn'
save 'cyru.straightTurn'
branch
include : [GenSmallYShape false SLAB].SmallYShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'y.curly' save 'y.curly'
save 'cyru.curly' save 'cyru.curly'
@ -1667,11 +1685,15 @@ glyph-block Letter-Latin-Lower-Y : begin
sketch # yhooktop sketch # yhooktop
include MarkSet.p include MarkSet.p
branch branch
include : [GenSmallYShape true].SmallYHookTopShape XH Descender include : [GenSmallYShape true false].SmallYHookTopShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'yhooktop.straight' save 'yhooktop.straight'
branch branch
include : [GenSmallYShape false].SmallYHookTopShape XH Descender include : [GenSmallYShape true true].SmallYHookTopShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2)
save 'yhooktop.straightTurn'
branch
include : [GenSmallYShape false SLAB].SmallYHookTopShape XH Descender
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'yhooktop.curly' save 'yhooktop.curly'
@ -1697,11 +1719,15 @@ glyph-block Letter-Latin-Lower-Y : begin
sketch # cyrU sketch # cyrU
include MarkSet.capital include MarkSet.capital
branch branch
include : [GenSmallYShape true].SmallYShape CAP 0 include : [GenSmallYShape true false].SmallYShape CAP 0
set-base-anchor 'overlay' Middle (XH / 2 - Descender) set-base-anchor 'overlay' Middle (XH / 2 - Descender)
save 'cyrU.straight' save 'cyrU.straight'
branch branch
include : [GenSmallYShape false].SmallYShape CAP 0 include : [GenSmallYShape true true].SmallYShape CAP 0
set-base-anchor 'overlay' Middle (XH / 2 - Descender)
save 'cyrU.straightTurn'
branch
include : [GenSmallYShape false SLAB].SmallYShape CAP 0
set-base-anchor 'overlay' Middle (XH / 2 - Descender) set-base-anchor 'overlay' Middle (XH / 2 - Descender)
save 'cyrU.curly' save 'cyrU.curly'
@ -1714,7 +1740,7 @@ glyph-block Letter-Latin-Lower-Y : begin
sketch # lambda.straight sketch # lambda.straight
include MarkSet.b include MarkSet.b
include : [GenSmallYShape true true].SmallLambdaShape CAP 0 include : [GenSmallYShape true false true].SmallLambdaShape CAP 0
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'lambda.straight' save 'lambda.straight'
include : LambdaBarOverlayShape include : LambdaBarOverlayShape
@ -1722,7 +1748,7 @@ glyph-block Letter-Latin-Lower-Y : begin
sketch # lambda.curly sketch # lambda.curly
include MarkSet.b include MarkSet.b
include : [GenSmallYShape false true].SmallLambdaShape CAP 0 include : [GenSmallYShape false false true].SmallLambdaShape CAP 0
set-base-anchor 'overlay' Middle (XH / 2) set-base-anchor 'overlay' Middle (XH / 2)
save 'lambda.curly' save 'lambda.curly'
include : LambdaBarOverlayShape include : LambdaBarOverlayShape

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 171 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 KiB

After

Width:  |  Height:  |  Size: 400 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 342 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

After

Width:  |  Height:  |  Size: 340 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 973 KiB

After

Width:  |  Height:  |  Size: 974 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

After

Width:  |  Height:  |  Size: 320 KiB

Before After
Before After

View file

@ -16,7 +16,7 @@
"semver": "^7.1.3", "semver": "^7.1.3",
"spiro": "^2.0.0", "spiro": "^2.0.0",
"stylus": "^0.54.7", "stylus": "^0.54.7",
"toml": "^3.0.0", "@iarna/toml": "^2.2.5",
"topsort": "^0.0.2", "topsort": "^0.0.2",
"ttf2woff": "^2.0.1", "ttf2woff": "^2.0.1",
"ttf2woff2": "^3.0.0", "ttf2woff2": "^3.0.0",

File diff suppressed because it is too large Load diff

View file

@ -376,6 +376,10 @@
<div class="label tag">cv79</div> <div class="label tag">cv79</div>
<div class="sample" style="font-feature-settings:'cv79'">y</div> <div class="sample" style="font-feature-settings:'cv79'">y</div>
</li> </li>
<li class="desc-group char">
<div class="label tag">VXBF</div>
<div class="sample" style="font-feature-settings:'VXBF'">y</div>
</li>
</ol></li> </ol></li>
<li> <li>
<div class="desc-group char"> <div class="desc-group char">
@ -925,78 +929,78 @@
</li> </li>
<li> <li>
<span class="tag">ss01</span><span class="description">Andale Mono Style</span> <span class="tag">ss01</span><span class="description">Andale Mono Style</span>
<span class="sample" style="font-feature-settings:'ss01'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss01'"><b>@</b>rea<b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss01'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss01'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss02</span><span class="description">Anonymous Pro Style</span> <span class="tag">ss02</span><span class="description">Anonymous Pro Style</span>
<span class="sample" style="font-feature-settings:'ss02'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b><b>7</b>8<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss02'"><b>@</b>real fox.quick(h){ <b>*</b>is_brown && it_jumps_over(dogs.laz<b>y</b>) } 0<b>1</b>2345<b>6</b><b>7</b>8<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss02'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b><b>7</b>8<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss02'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>z<b>y</b>) } 0<b>1</b>2345<b>6</b><b>7</b>8<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss03</span><span class="description">Consolas Style</span> <span class="tag">ss03</span><span class="description">Consolas Style</span>
<span class="sample" style="font-feature-settings:'ss03'"><b>@</b>real fox.quick(h){ <b>*</b>is<b>_</b>brown && it<b>_</b>jumps<b>_</b>over(do<b>g</b>s.lazy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss03'"><b>@</b>real fox.quick(h){ <b>*</b>is<b>_</b>brown && it<b>_</b>jumps<b>_</b>over(do<b>g</b>s.laz<b>y</b>) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss03'"><b>@</b>real fox.quick(h){ <b>*</b>is<b>_</b>brown && it<b>_</b>jumps<b>_</b>over(do<b>g</b>s.lazy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss03'"><b>@</b>real fox.quick(h){ <b>*</b>is<b>_</b>brown && it<b>_</b>jumps<b>_</b>over(dogs.lazy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss04</span><span class="description">Menlo Style</span> <span class="tag">ss04</span><span class="description">Menlo Style</span>
<span class="sample" style="font-feature-settings:'ss04'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss04'">@rea<b>l</b> fox.quick(h){ <b>*</b>is<b>_</b>brown <b>&</b><b>&</b> it<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>az<b>y</b>) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss04'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss04'">@re<b>a</b>l fox.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.l<b>a</b>z<b>y</b>) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss05</span><span class="description">Fira Mono Style</span> <span class="tag">ss05</span><span class="description">Fira Mono Style</span>
<span class="sample" style="font-feature-settings:'ss05'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>23<b>4</b>5<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss05'"><b>@</b>rea<b>l</b> fox.quick(h){ *is<b>_</b>brown <b>&</b><b>&</b> it<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>23<b>4</b>5<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss05'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>23<b>4</b>5<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss05'"><b>@</b>re<b>a</b>l fox.qu<b>i</b>c<b>k</b>(h){ *<b>i</b>s<b>_</b>brown <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>over(do<b>g</b>s.l<b>a</b>z<b>y</b>) } <b>0</b><b>1</b>23<b>4</b>5<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss06</span><span class="description">Liberation Mono Style</span> <span class="tag">ss06</span><span class="description">Liberation Mono Style</span>
<span class="sample" style="font-feature-settings:'ss06'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss06'"><b>@</b>real fox.quick(h){ *is_brown && it_jumps_over(dogs.laz<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss06'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss06'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ *<b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss07</span><span class="description">Monaco Style</span> <span class="tag">ss07</span><span class="description">Monaco Style</span>
<span class="sample" style="font-feature-settings:'ss07'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss07'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>z<b>y</b>) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss07'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss07'"><b>@</b>rea<b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(dogs.<b>l</b>az<b>y</b>) } 0<b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss08</span><span class="description">Pragmata Pro Style</span> <span class="tag">ss08</span><span class="description">Pragmata Pro Style</span>
<span class="sample" style="font-feature-settings:'ss08'"><b>@</b>re<b>a</b><b>l</b> fo<b>x</b>.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>bro<b>w</b>n <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>o<b>v</b>er(do<b>g</b>s.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b>12345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span> <span class="sample" style="font-feature-settings:'ss08'">@real fo<b>x</b>.quic<b>k</b>(h){ <b>*</b>is<b>_</b>bro<b>w</b>n <b>&</b><b>&</b> it<b>_</b>jumps<b>_</b>o<b>v</b>er(do<b>g</b>s.laz<b>y</b>) } <b>0</b>12345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span>
<span class="sample italic" style="font-feature-settings:'ss08'"><b>@</b>re<b>a</b><b>l</b> fo<b>x</b>.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>bro<b>w</b>n <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>o<b>v</b>er(do<b>g</b>s.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b>12345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span> <span class="sample italic" style="font-feature-settings:'ss08'">@re<b>a</b><b>l</b> fo<b>x</b>.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>bro<b>w</b>n <b>&</b><b>&</b> <b>i</b>t<b>_</b>jumps<b>_</b>o<b>v</b>er(dogs.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b>12345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span>
</li> </li>
<li> <li>
<span class="tag">ss09</span><span class="description">Source Code Pro Style</span> <span class="tag">ss09</span><span class="description">Source Code Pro Style</span>
<span class="sample" style="font-feature-settings:'ss09'"><b>@</b>rea<b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(do<b>g</b>s.<b>l</b>azy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss09'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s_brown && <b>i</b>t_jumps_over(do<b>g</b>s.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss09'"><b>@</b>rea<b>l</b> fox.quick(h){ <b>*</b>is_brown && it_jumps_over(do<b>g</b>s.<b>l</b>azy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss09'">@real fox.quic<b>k</b>(h){ <b>*</b>is_brown && it_jumps_over(dogs.laz<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss10</span><span class="description">Envy Code R Style</span> <span class="tag">ss10</span><span class="description">Envy Code R Style</span>
<span class="sample" style="font-feature-settings:'ss10'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>23456789 ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss10'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>az<b>y</b>) } 0<b>1</b>23456789 ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss10'"><b>@</b>re<b>a</b><b>l</b> fox.qu<b>i</b>ck(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>23456789 ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss10'">@re<b>a</b><b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b><b>a</b>zy) } 0<b>1</b>23456789 ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss11</span><span class="description">X Window Style</span> <span class="tag">ss11</span><span class="description">X Window Style</span>
<span class="sample" style="font-feature-settings:'ss11'"><b>@</b>real fox.quick(h){ *is_brown && it_jumps_over(dogs.lazy) } <b>0</b><b>1</b>2<b>3</b>45<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss11'">@real fox.quick(h){ *is_brown && it_jumps_over(dogs.lazy) } <b>0</b><b>1</b>2<b>3</b>45<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss11'"><b>@</b>real fox.quick(h){ *is_brown && it_jumps_over(dogs.lazy) } <b>0</b><b>1</b>2<b>3</b>45<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss11'">@real fox.quick(h){ *is_brown && it_jumps_over(dogs.lazy) } <b>0</b><b>1</b>2<b>3</b>45<b>6</b>78<b>9</b> ABCKRWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss12</span><span class="description">Ubuntu Mono Style</span> <span class="tag">ss12</span><span class="description">Ubuntu Mono Style</span>
<span class="sample" style="font-feature-settings:'ss12'"><b>@</b>re<b>a</b><b>l</b> <b>f</b>ox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>ju<b>m</b>ps<b>_</b>over(dogs.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss12'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>ju<b>m</b>ps<b>_</b>over(dogs.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss12'"><b>@</b>re<b>a</b><b>l</b> <b>f</b>ox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>ju<b>m</b>ps<b>_</b>over(dogs.<b>l</b><b>a</b>z<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss12'">@re<b>a</b>l <b>f</b>ox.quic<b>k</b>(h){ *is<b>_</b>brown && it<b>_</b>ju<b>m</b>ps<b>_</b>over(dogs.l<b>a</b>z<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss13</span><span class="description">Lucida Style</span> <span class="tag">ss13</span><span class="description">Lucida Style</span>
<span class="sample" style="font-feature-settings:'ss13'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>azy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss13'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss13'">@rea<b>l</b> fox.qu<b>i</b>ck(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>azy) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss13'">@rea<b>l</b> fox.qu<b>i</b>c<b>k</b>(h){ *<b>i</b>s<b>_</b>brown && <b>i</b>t<b>_</b>jumps<b>_</b>over(dogs.<b>l</b>az<b>y</b>) } <b>0</b><b>1</b>2345<b>6</b>78<b>9</b> ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss14</span><span class="description">JetBrains Mono Style</span> <span class="tag">ss14</span><span class="description">JetBrains Mono Style</span>
<span class="sample" style="font-feature-settings:'ss14'">@rea<b>l</b> fox.q<b>u</b><b>i</b>ck(h){ <b>*</b><b>i</b>s_brown <b>&</b><b>&</b> <b>i</b>t_j<b>u</b>mps_over(dogs.<b>l</b>azy) } <b>0</b><b>1</b>2<b>3</b><b>4</b>56<b>7</b>89 ABCKRWXYZ</span> <span class="sample" style="font-feature-settings:'ss14'">@rea<b>l</b> fox.q<b>u</b>ick(h){ <b>*</b>is_brown <b>&</b><b>&</b> it_j<b>u</b>mps_over(dogs.<b>l</b>azy) } <b>0</b><b>1</b>2<b>3</b><b>4</b>56<b>7</b>89 ABCKRWXYZ</span>
<span class="sample italic" style="font-feature-settings:'ss14'">@rea<b>l</b> fox.q<b>u</b><b>i</b>ck(h){ <b>*</b><b>i</b>s_brown <b>&</b><b>&</b> <b>i</b>t_j<b>u</b>mps_over(dogs.<b>l</b>azy) } <b>0</b><b>1</b>2<b>3</b><b>4</b>56<b>7</b>89 ABCKRWXYZ</span> <span class="sample italic" style="font-feature-settings:'ss14'">@real fox.q<b>u</b><b>i</b>c<b>k</b>(h){ <b>*</b><b>i</b>s_brown <b>&</b><b>&</b> <b>i</b>t_j<b>u</b>mps_over(dogs.lazy) } <b>0</b><b>1</b>2<b>3</b><b>4</b>56<b>7</b>89 ABC<b>K</b>RWXYZ</span>
</li> </li>
<li> <li>
<span class="tag">ss20</span><span class="description">Curly Style</span> <span class="tag">ss20</span><span class="description">Curly Style</span>
<span class="sample" style="font-feature-settings:'ss20'">@real fo<b>x</b>.quic<b>k</b>(h){ *is_bro<b>w</b>n && it_jumps_o<b>v</b>er(dogs.laz<b>y</b>) } 012345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span> <span class="sample" style="font-feature-settings:'ss20'">@real fo<b>x</b>.quic<b>k</b>(h){ *is_bro<b>w</b>n && it_jumps_o<b>v</b>er(dogs.laz<b>y</b>) } 012345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span>
<span class="sample italic" style="font-feature-settings:'ss20'">@real fo<b>x</b>.quic<b>k</b>(h){ *is_bro<b>w</b>n && it_jumps_o<b>v</b>er(dogs.laz<b>y</b>) } 012345<b>6</b>78<b>9</b> <b>A</b>BC<b>K</b><b>R</b><b>W</b><b>X</b><b>Y</b>Z</span> <span class="sample italic" style="font-feature-settings:'ss20'">@real fo<b>x</b>.quick(h){ *is_bro<b>w</b>n && it_jumps_o<b>v</b>er(dogs.lazy) } 012345<b>6</b>78<b>9</b> <b>A</b>BCK<b>R</b><b>W</b><b>X</b><b>Y</b>Z</span>
</li> </li>
</ol> </ol>
</section><section id="ligations"> </section><section id="ligations">

View file

@ -34,15 +34,14 @@ module.exports = function formVariantData(data, para) {
const vs = {}; const vs = {};
// simple selector // simple selector
for (let k in data.simple) { for (let k in data.simple) {
const hive = objectAssign({}, data.simple[k]); const varDef = data.simple[k];
if (!varDef.variant) throw new Error("Unreachable! Variant definition is invalid");
const hive = { ...varDef.variant };
vs[k] = hive; vs[k] = hive;
const tag = hive.tag; const tag = varDef.tag;
delete hive.tag; const tagUpright = varDef.tagUpright;
const tagUpright = hive.tagUpright; const tagItalic = varDef.tagItalic;
delete hive.tagUpright;
const tagItalic = hive.tagItalic;
delete hive.tagItalic;
if (tag) { if (tag) {
let __cvmap = {}; let __cvmap = {};
for (let k in hive) __cvmap[k] = tag; for (let k in hive) __cvmap[k] = tag;

View file

@ -1,6 +1,6 @@
const fs = require("fs-extra"); const fs = require("fs-extra");
const path = require("path"); const path = require("path");
const toml = require("toml"); const toml = require("@iarna/toml");
function TAG(...ltag) { function TAG(...ltag) {
return function (s) { return function (s) {

View file

@ -1,6 +1,6 @@
const fs = require("fs-extra"); const fs = require("fs-extra");
const path = require("path"); const path = require("path");
const toml = require("toml"); const toml = require("@iarna/toml");
module.exports = async function () { module.exports = async function () {
const variantsToml = await fs.readFile( const variantsToml = await fs.readFile(
@ -75,31 +75,59 @@ function getSsData(variants, cvData) {
hotCharSetItalic: [] hotCharSetItalic: []
} }
]; ];
const defaultUpright = buildupComposite(
cvData,
...variants.default.design,
...variants.default.upright
);
const defaultItalic = buildupComposite(
cvData,
...variants.default.design,
...variants.default.italic
);
for (const tag in variants.composite) { for (const tag in variants.composite) {
if (!/^ss\d\d$/.test(tag)) continue; if (!/^ss\d\d$/.test(tag)) continue;
const composition = variants.composite[tag]; const composition = variants.composite[tag];
const uprightCfg = new Set([...(composition.design || []), ...(composition.upright || [])]); const upright = buildupComposite(
const italicCfg = new Set([...(composition.design || []), ...(composition.italic || [])]); cvData,
const hotCharSetUpright = new Set(); ...(composition.design || []),
const hotCharSetItalic = new Set(); ...(composition.upright || [])
for (const gr of cvData) { );
if (gr.ligatureSampler) continue; const italic = buildupComposite(
for (const config of gr.configs) { cvData,
if (uprightCfg.has(config.selector)) ...(composition.design || []),
for (const ch of gr.descSampleText) hotCharSetUpright.add(ch); ...(composition.italic || [])
if (italicCfg.has(config.selector)) );
for (const ch of gr.descSampleText) hotCharSetItalic.add(ch);
}
}
result.push({ result.push({
tag, tag,
effective: true, effective: true,
description: composition.description, description: composition.description,
uprightComposition: Array.from(uprightCfg), uprightComposition: Array.from(upright.composition),
italicComposition: Array.from(italicCfg), italicComposition: Array.from(italic.composition),
hotCharSetUpright: Array.from(hotCharSetUpright), hotCharSetUpright: Array.from(uniqueHotChars(defaultUpright, upright.hotChars)),
hotCharSetItalic: Array.from(hotCharSetItalic) hotCharSetItalic: Array.from(uniqueHotChars(defaultItalic, italic.hotChars))
}); });
} }
return result; return result;
} }
function buildupComposite(cvData, ..._cfg) {
const hch = new Map();
const cfg = new Set(_cfg);
for (const gr of cvData) {
if (gr.ligatureSampler) continue;
for (const config of gr.configs) {
if (cfg.has(config.selector)) {
for (const ch of gr.descSampleText) hch.set(ch, config.selector);
}
}
}
return {
composition: [...cfg],
hotChars: hch
};
}
function* uniqueHotChars(cfgDefault, cfgSS) {
for (const [hc, v] of cfgSS) {
if (cfgDefault.hotChars.get(hc) !== v) yield hc;
}
}

View file

@ -13,7 +13,7 @@ module.exports = build;
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
const path = require("path"); const path = require("path");
const toml = require("toml"); const toml = require("@iarna/toml");
const BUILD = "build"; const BUILD = "build";
const DIST = "dist"; const DIST = "dist";