diff --git a/.eslintrc.json b/.eslintrc.json index 667d65f008..6d699a8c35 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,7 +13,7 @@ "sourceType": "module" }, "extends": ["eslint:recommended", "prettier", "plugin:import/recommended"], - "ignorePatterns": ["/font-src/glyphs", "/font-src/meta", "/font-src/otl"], + "ignorePatterns": ["packages/font-glyphs", "packages/font-otl"], "rules": { "semi": ["error", "always"], "no-var": "error", diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 1f455f2c30..ef39a7ac79 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -2,5 +2,4 @@ printWidth: 100 useTabs: true tabWidth: 4 -trailingComma: none -arrowParens: avoid \ No newline at end of file +arrowParens: avoid diff --git a/CHANGELOG.md b/CHANGELOG.md index 510ddba582..5a61b4a643 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,174 +1,70 @@ ## Modifications since last major version -### 28.1.0 - -* Add characters: - - LEFT VERTICAL BOX LINE (`U+23B8`) ... HORIZONTAL SCAN LINE-9 (`U+23BD`). - - SQUARE FOUR CORNERS (`U+26F6`). - - TWO JOINED SQUARES (`U+29C9`). - - OVERLAPPING WHITE SQUARES (`U+2BBA`). - - OVERLAPPING WHITE AND BLACK SQUARES (`U+2BBB`). - - OVERLAPPING BLACK SQUARES (`U+2BBC`). - - OUTLINED LATIN CAPITAL LETTER A (`U+1CCD6`) ... OUTLINED LATIN CAPITAL LETTER Z (`U+1CCEF`) (Purposed for Unicode 16; L2/21-235). - - OUTLINED DIGIT ZERO (`U+1CCF0`) ... OUTLINED DIGIT NINE (`U+1CCF9`) (Purposed for Unicode 16; L2/21-235). - - BLOCK OCTANT-3 (`U+1CD00`) ... BLOCK OCTANT-2345678 (`U+1CDE5`) (Purposed for Unicode 16; L2/21-235). - - LEFT HALF TRIPLE DASH HORIZONTAL (`U+1CE0D`) ... LARGE TYPE PIECE STEM-12 (`U+1CE50`) (Purposed for Unicode 16; L2/21-235). -* Fix metrics of Cyrillic Yery (#2182). -* Fix Italic/Upright localization forms for Serbian/Macedonian Cyrillic. -* Add Bosnian Cyrillic localization forms based on Serbian/Macedonian. -* Add italic form for Combining Cyrillic Letter Es-Te (U+2DF5) (#2187). -* `zero` feature will apply to composites (#2191). - - -### 28.0.7 - -* Make superscript/subscript/overscript Cyrillic characters obey localization forms of base letters (#2177). -* Add IPA localization forms for Greek Lower Beta (`β`) and Chi (`χ`). -* Add APLF variants for `U+25F0`, `U+25F3`, and `U+25F4`. -* Make Ezh follow variants of `Z`/`z` (#1957). -* Fix serif form for Cyrillic Lower Tall / Iotified Yat (#2178). -* Make top serifs of Cyrillic Lower Straight U (`ү`, `ұ`) and Latin Lower Gamma (`ɣ`) respond to italics. -* Fix leaning marks of Capital Turned/Half H (`U+2C75`, `U+2C76`, `U+A78D`, `U+A7F5`, `U+A7F6`). -* Fix leaning marks of Wynn (`U+01BF`, `U+01F7`). -* Fix leaning marks of Insular R (`U+A782`, `U+A783`). -* Fix leaning marks of Greek/Latin Beta (`U+03B2`, `U+A7B4`, `U+A7B5`). -* Fix leaning marks of Greek Lower San (`U+03FB`). - - -### 28.0.6 - -* Fix application of `APLF` for several [Uiua](https://www.uiua.org/) operators. -* Adjust serif shapes for lowercase italic Yeri glyphs with corner body shape (#2151). -* Adjustments to CV defaults: - - Make `a` (`cv26`) use `single-storey-tailed` under slab italic by default. - - Make `b` (`cv27`) use `toothed-motion-serifed` under slab italic by default. - - Make `g` (`cv32`) use `single-storey-serifless` under slab italic by default. - - Make `q` (`cv41`) use `straight-bottom-serifed` under slab italic by default. - - -### 28.0.5 - -* Add characters: - - LIGHTNING (`U+2607`) (#2158). - - SUBSET WITH DOT (`U+2ABD`). - - SUPERSET WITH DOT (`U+2ABE`). -* Add untagged variant selector for Cyrillic Capital Ef (`Ф`) for style-driven variation. -* Allow turned h (`ɥ`) and turned m with long leg (`ɰ`) to use toothless-corner variants. -* Fix leaning marks of Turned/Reversed Sans-Serif Capital L. -* Fix leaning marks of Cyrillic Tall Te. -* Fix leaning marks of Greek Lower Mu/Rho. -* `APLF` feature will apply to all [Uiua](https://www.uiua.org/) operators. - - -### 28.0.4 - -* Fix leaning marks of turned capital F/L (#2137). -* Fix overlay bar placement of Z with Hook and Z with Swash Tail (#2141). -* Fix attachment of descender parts of Cyrillic Lower Ha/X under `x` = `cursive` (#2142). -* Make the Eng part in LATIN SMALL LETTER FENG DIGRAPH always connected to the f part (#2143). -* Fix top bar shape in CYRILLIC CAPITAL LETTER DJE (#2145). -* Fix leaning marks placement for reversed k/F/P (#2150). - - -### 28.0.3 - -* Add characters: - - COMBINING SUSPENSION MARK (`U+1DC3`). - - FROWN (`U+2322`). - - SMILE (`U+2323`). - - CIRCLE WITH HORIZONTAL BAR (`U+29B5`). - - LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER (`U+A750`) (#1797). - - LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER (`U+A751`) (#1797). -* Remove tailless variants for Latin Iota (`U+0196`, `U+0269`) and Cyrillic Iota (`U+A646`, `U+A647`). -* Fix slash ligations when `frac` feature is enabled (#2130). -* Fix leaning marks of turned `r` (#2133). - - -### 28.0.2 - -* Add characters: - - LATIN CAPITAL LETTER AU (`U+A736`) (#1689). - - LATIN SMALL LETTER AU (`U+A737`) (#1689). -* Refine shape of Tshe and Cyrillic Capital Letter Te with Middle Hook (`U+A68A`) (#2123). -* Remove bottom serif of Cyrillic Small Letter Ghe with Middle Hook (`U+0495`) under italics. -* Make serif variants of Cyrillic Small Letter Tall Te (`U+1C84`) respond to italics. -* Make terminal serif behavior of palatalized Komi consonants (`U+0502`...`U+0505`, `U+0508`...`U+050F`) more consistent with each other. -* Refine serifs of Turned M (`U+019C`, `U+026F`, `U+0270`, `U+1D1F`, `U+1D5A`, `U+1DAD`), Cyrillic Sha (`U+0448`, `U+2DF2`, `U+1E046`, `U+1E064`), and Cyrillic Shcha (`U+0449`, `U+2DF3`) under monospace. - - -### 28.0.1 - -* Add italic form of CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK (`U+A68B`) (#2119). -* Add missing feature tag to chaining plus ligation (#2118). -* Make the central part of Cyrillic Twe to follow lowercase Tau variants (#2122). - - -### 28.0.0 - -* \[**BREAKING**\] The filenames and package filenames are changed. - - They will now use PascalCase instead of kebab-case. - - To package manager maintainers: Please upgrade your script to make it capable to download and install the fonts under new names, and properly uninstall the fonts under old names. -* \[**BREAKING**\] Certain properties in the build plans are changed to camelCase. Using them will trigger a build failure. - - `no-cv-ss` → `noCvSs` - - `no-ligation` → `noLigation` - - `export-glyph-names` → `exportGlyphNames` - - `build-texture-feature` → `buildTextureFeature` - - `metric-override` → `metricOverride` - - `compatibility-ligatures` → `compatibilityLigatures` - - `exclude-chars` → `excludeChars` - - `webfont-formats` → `webfontFormats` -* \[**BREAKING**\] The "SGr" TTC packages for Iosevka Aile and Etoile will no longer be generated, as they are duplicates to the non-SGr TTC packages. +### 29.0.0 + +* \[**BREAKING**\] Add separate serifed variants for digits `2` through `5`. As a result, current variants are partially renamed and reordered (#1965). Change of variant names: + - `two`.`straight-neck` → `two`.`straight-neck-serifless` + - `two`.`curly-neck` → `two`.`curly-neck-serifless` + - `three`.`flat-top` → `three`.`flat-top-serifless` + - `four`.`closed` → `four`.`closed-serifless` + - `four`.`closed-non-crossing` → `four`.`closed-non-crossing-serifless` + - `four`.`semi-open` → `four`.`semi-open-serifless` + - `four`.`semi-open-non-crossing` → `four`.`semi-open-non-crossing-serifless` + - `four`.`open` → `four`.`open-serifless` + - `four`.`open-non-crossing` → `four`.`open-non-crossing-serifless` + - `five`.`upright-arched` → `five`.`upright-arched-serifless` + - `five`.`upright-flat` → `five`.`upright-flat-serifless` + - `five`.`oblique-arched` → `five`.`oblique-arched-serifless` + - `five`.`oblique-flat` → `five`.`oblique-flat-serifless` * \[**BREAKING**\] Reorder of glyph variants: - - Influenced characters: `M`, `R`, `f`, `i`, `l`, `t`, `x`, Long S (`ſ`), Lower Lambda (`λ`), Lower Tau (`τ`), Lower Chi (`χ`), Cyrillic Lower Em (`м`), Cyrillic Lower Ef (`ф`), Cyrillic Ya (`Я`, `я`), `5`. -* \[**BREAKING**\] Tags for variant features for Cyrillic lowercase Er and U are changed to `cv76` and `cv78`. - - Various other glyph variant tags are also changed to reflect this insertion. -* \[**BREAKING**\] Make the ligation group names for symbol connections more intuitive, and add alternatives to start chaining from at least 3 continuous characters (#2100): - - `plusplus` → `plus-plus`, `plus-plus-plus`. - - `connected-hyphen` → `minus-minus`, `minus-minus-minus`. - - `connected-tilde-as-wave` → `tilde-tilde`, `tilde-tilde-tilde`. - - `connected-underscore` → `underscore-underscore`, `underscore-underscore-underscore`. - - `connected-number-sign` → `hash-hash`, `hash-hash-hash`. -* Add Characters: - - CYRILLIC CAPITAL LETTER LHA (`U+0514`) ... CYRILLIC SMALL LETTER YAE (`U+0519`) (#2018). - - GEORGIAN PARAGRAPH SEPARATOR (`U+10FB`). - - COMBINING BREVE-MACRON (`U+1DCB`) ... COMBINING MACRON-BREVE (`U+1DCC`) (#1880). - - COMBINING DOUBLE CIRCUMFLEX ABOVE (`U+1DCD`). - - COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE (`U+1DD3`). - - COMBINING DELETION MARK (`U+1DFB`). - - LINE SEPARATOR (`U+2028`) ... PARAGRAPH SEPARATOR (`U+2029`). - - TRIANGLE-HEADED RIGHTWARDS ARROW (`U+279D`). - - LONG RIGHTWARDS SQUIGGLE ARROW (`U+27FF`). - - LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE (`U+2902`) ... LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE (`U+2904`). - - LONG LEFTWARDS SQUIGGLE ARROW (`U+2B33`). - - DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW (`U+2B4D`). - - RAISED SQUARE (`U+2E0B`). - - HYPODIASTOLE (`U+2E12`). - - TWO DOTS OVER ONE DOT PUNCTUATION (`U+2E2A`) ... FIVE DOT MARK (`U+2E2D`). - - LATIN SMALL LETTER U WITH LEFT HOOK (`U+AB52`). - - MODIFIER LETTER SMALL U WITH LEFT HOOK (`U+AB5F`). -* Add hook-inward-serifed variants for `a` (#2085). -* Add single-storey-double-serifed and single-storey-tailed-serifed variants for `a` and Greek Lower Alpha (`α`) (#1949). - - Make `a`.`single-storey-tailed-serifed` the default for slab italic to match `g` and `q`. -* Add bottom-serifed variants for `d`, and `q`. -* Add bottom-right-serifed variants for `U`. -* Add tailless variants for Greek Lower Iota (`ι`). -* Make Greek Lower Iota (`ι`) and Greek Lower Tau (`τ`) semi-tailed under default upright and tailed under default italic. -* Remove earless-rounded variants for `U+01A5`, `U+0256`, `U+02A0`, and `U+1D91`. -* Remove earless-corner variants for `U+027E`. -* Improve serifs for turned k (`U+029E`) to match `q` and turned h (`U+0265`). -* Improve top-left serif for LATIN SMALL LETTER KRA (`U+0138`) to match `k`. -* Make Greek Kappa (`U+03BA`) respond to more serif variants for `k` (`cv36`). -* Add a top-left serif to GREEK SMALL LETTER HETA (`U+0371`) under slab. -* Add a serif to MATHEMATICAL DOUBLE-STRUCK SMALL J (`U+1D55B`) to match that of MATHEMATICAL DOUBLE-STRUCK SMALL I (`U+1D55A`). -* Improve vertical alignmant of bowl for LATIN CAPITAL LETTER THORN WITH STROKE (`U+A764`) and LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER (`U+A766`). -* Stylistic set fixes: - - Fix `cv10` for `ss01`, `ss02`, and `ss08` under slab. - - Fix `cv53` for `ss16`. - - Fix `cv64` and `cv65` for `ss07`. - - Fix `cv66` for `ss17`. - - Fix `cv81` and `cv82` for `ss03` and `ss08` under italic slab. - - Fix `cv93` for `ss01`. - - Fix `vsAJ` for `ss10`. - - Fix `vlAB` for `ss09` and `ss14`. - - Fix `vlAD` for `ss05` and `ss14`. + - Influenced characters: `I`, `U`, `Z`, `i`, `l`, `u`, `z`, Greek Lower Mu (`μ`), Micro Sign (`µ`). +* \[**BREAKING**\] Quasi-proportional will now use a six-unit system instead of four. Metrics of various letters (`f`, `t`, `r`, `m`, `w`, etc.) are adjusted. +* Add characters: + - UPWARDS WHITE ARROW FROM BAR (`U+21EA`) ... RIGHTWARDS WHITE ARROW FROM WALL (`U+21F0`). + - RETURN SYMBOL (`U+23CE`). + - SYMBOL FOR DELETE MEDIUM SHADE FORM (`U+2429`). + - GEAR WITHOUT HUB (`U+26ED`). + - GEAR WITH HANDLES (`U+26EE`). + - MAP SYMBOL FOR LIGHTHOUSE (`U+26EF`). + - THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD (`U+27A2`). + - THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD (`U+27A3`). + - SHUFFLE PRODUCT (`U+29E2`). + - GLEICH STARK (`U+29E6`). + - INTERIOR PRODUCT (`U+2A3C`). + - RIGHTHAND INTERIOR PRODUCT (`U+2A3D`). + - SHORT LEFT TACK (`U+2ADE`) ... SHORT UP TACK (`U+2AE0`). + - VERTICAL BAR TRIPLE RIGHT TURNSTILE (`U+2AE2`) ... REVERSED DOUBLE STROKE NOT SIGN (`U+2AED`). + - UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR (`U+2BB8`). + - LEFT RAISED OMISSION BRACKET (`U+2E0C`). + - RIGHT RAISED OMISSION BRACKET (`U+2E0C`). + - LEFT LOW PARAPHRASE BRACKET (`U+2E1C`). + - RIGHT LOW PARAPHRASE BRACKET (`U+2E1C`). + - LOWER HORIZONTAL RULER SEGMENT (`U+1CC05`) (Proposed for Unicode 16; L2/21-235). + - RIGHT VERTICAL RULER SEGMENT (`U+1CC06`) (Proposed for Unicode 16; L2/21-235). + - LOWER RIGHT RULER SEGMENT (`U+1CC07`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT (`U+1CC1B`) ... SEPARATED BLOCK QUADRANT-1234 (`U+1CC2F`) (Proposed for Unicode 16; L2/21-235). + - EIGHT RAYS INWARD (`U+1CC69`) ... BLACK NEUTRAL FACE (`U+1CC6F`) (Proposed for Unicode 16; L2/21-235). + - SQUARE FOUR CORNER SALTIRES (`U+1CC89`) ... INVERSE BLACK DIAMOND (`U+1CC8D`) (Proposed for Unicode 16; L2/21-235). + - VERTICAL LINE WITH FOUR TICK MARKS (`U+1CC90`) (Proposed for Unicode 16; L2/21-235). + - HORIZONTAL LINE WITH FOUR TICK MARKS (`U+1CC91`) (Proposed for Unicode 16; L2/21-235). + - WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR (`U+1CE06`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT (`U+1CE09`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT (`U+1CE0A`) (Proposed for Unicode 16; L2/21-235). + - SEPARATED BLOCK SEXTANT-1 (`U+1CE51`) ... SEPARATED BLOCK SEXTANT-123456 (`U+1CE8F`) (Proposed for Unicode 16; L2/21-235). + - UPPER LEFT ONE SIXTEENTH BLOCK (`U+1CE90`) ... LOWER HALF RIGHT ONE QUARTER BLOCK (`U+1CEAF`) (Proposed for Unicode 16; L2/21-235). + - FOLDER (`U+1F5C0`) (#2181). + - DOWNWARDS BLACK ARROW TO BAR (`U+1F8B3`) ... SOUTH WEST ARROW FROM BAR (`U+1F8BB`) (Proposed for Unicode 16; L2/21-235). + - RAISED LEFT SMALL SQUARE BRACKET (`U+1FBCC`) (Proposed for Unicode 16; L2/21-235). + - LEFT TWO THIRDS BLOCK (`U+1FBCE`) (Proposed for Unicode 16; L2/21-235). + - LEFT ONE THIRD BLOCK (`U+1FBCF`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT (`U+1FBD0`) ... BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT (`U+1FBDF`) (Proposed for Unicode 16; L2/21-235). + - UPPER CENTRE ONE QUARTER BLOCK (`U+1FBE4`) ... MIDDLE RIGHT ONE QUARTER BLOCK (`U+1FBE7`) (Proposed for Unicode 16; L2/21-235). +* Fix a disjoint stroke of Outlined Curly `Z` under some weights (#2195). +* Unify diagonal box drawings' angles (#2197). +* Fix Large Type Piece `U+1CE3B` (#2206). +* Added a `MOSC` feature that turns certain geometric shapes into mosaics (#2212). +* Fix `frac` feature for better recognizing fraction patterns (#2214). +* Fix broken shape of `U+1FB95`, `U+1FB96` and `U+1FB97` (#2218). +* Increase weight for `U+276E`/`U+276F` (#2217). +* Fix ligation for `[|]` (#2221). diff --git a/README.md b/README.md index d4ca1ced0a..a68f4bcd23 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,29 @@

-**Iosevka** is an *open-source*, *sans-serif* + *slab-serif*, *monospace* + *quasi‑proportional* typeface family, designed for *writing code*, using in *terminals*, and preparing *technical documents*. +**Iosevka** \[ˌjɔˈseβ.kʰa\] is an *open-source*, *sans-serif* + *slab-serif*, *monospace* + *quasi‑proportional* typeface family, designed for *writing code*, using in *terminals*, and preparing *technical documents*. ## Installation +### Installing from GitHub Releases + +1. Download your font package from [releases](https://github.com/be5invis/Iosevka/releases). + * For Linux users you could use the following command to download all the packages in the latest release: + ```bash + curl -s 'https://api.github.com/repos/be5invis/Iosevka/releases/latest' | jq -r ".assets[] | .browser_download_url" | grep ttf-iosevka | xargs -n 1 curl -L -O --fail --silent --show-error + ``` +2. Quit all your editors / programs. +3. Unarchive the font package and you will see the font files. +4. Take actions depending on your OS: + * **Windows**: Select the font files and drag into font [settings](ms-settings:fonts) / font control panel page. + * On Windows 10 1809 or newer, the default font installation is per-user, and it may cause compatibility issues for some applications, mostly written in Java. To cope with this, right click and select “Install for all users” instead. [Ref.](https://youtrack.jetbrains.com/issue/JRE-1166?p=IDEA-200145) + * **macOS**: [Follow instructions here](http://support.apple.com/kb/HT2509). + * **Linux** : Copy the font files to your fonts directory then run `sudo fc-cache`. + ### Installing via Package Managers +*Disclaimer: This repository does not maintain any package manager distribution. The packages listed below may not always be up-to-date.* + * **macOS** * Standard distribution in Homebrew: ```bash @@ -26,21 +43,6 @@ * **FreeBSD**: The font can be installed with `pkg install iosevka`. * **OpenBSD**: Run `pkg_info -Q iosevka` to see which Iosevka packages are available. Use `pkg_add` to install the chosen package(s). -### Manual Installation - -1. Download your font package from [releases](https://github.com/be5invis/Iosevka/releases). - * For Linux users you could use the following command to download all the packages in the latest release: - ```bash - curl -s 'https://api.github.com/repos/be5invis/Iosevka/releases/latest' | jq -r ".assets[] | .browser_download_url" | grep ttf-iosevka | xargs -n 1 curl -L -O --fail --silent --show-error - ``` -2. Quit all your editors / programs. -3. Unarchive the font package and you will see the font files. -4. Take actions depending on your OS: - * **Windows**: Select the font files and drag into font [settings](ms-settings:fonts) / font control panel page. - * On Windows 10 1809 or newer, the default font installation is per-user, and it may cause compatibility issues for some applications, mostly written in Java. To cope with this, right click and select “Install for all users” instead. [Ref.](https://youtrack.jetbrains.com/issue/JRE-1166?p=IDEA-200145) - * **macOS**: [Follow instructions here](http://support.apple.com/kb/HT2509). - * **Linux** : Copy the font files to your fonts directory then run `sudo fc-cache`. - ## Features In the official package, Iosevka provides 6 monospace subfamilies (sans-serif and slab-serif, each in the 3 spacings Default, Term and Fixed) and 2 quasi-proportional subfamilies (Aile (sans-serif) and Etoile (slab-serif)). In all the monospace subfamilies, 9 weights (Thin to Heavy), 2 widths (Normal and Extended), and 3 slopes (Upright, Italic and Oblique) are included. In the quasi-proportional subfamilies, the quantity of widths is reduced to 1. diff --git a/changes/29.0.0.md b/changes/29.0.0.md new file mode 100644 index 0000000000..f890f0ddc1 --- /dev/null +++ b/changes/29.0.0.md @@ -0,0 +1,65 @@ +* \[**BREAKING**\] Add separate serifed variants for digits `2` through `5`. As a result, current variants are partially renamed and reordered (#1965). Change of variant names: + - `two`.`straight-neck` → `two`.`straight-neck-serifless` + - `two`.`curly-neck` → `two`.`curly-neck-serifless` + - `three`.`flat-top` → `three`.`flat-top-serifless` + - `four`.`closed` → `four`.`closed-serifless` + - `four`.`closed-non-crossing` → `four`.`closed-non-crossing-serifless` + - `four`.`semi-open` → `four`.`semi-open-serifless` + - `four`.`semi-open-non-crossing` → `four`.`semi-open-non-crossing-serifless` + - `four`.`open` → `four`.`open-serifless` + - `four`.`open-non-crossing` → `four`.`open-non-crossing-serifless` + - `five`.`upright-arched` → `five`.`upright-arched-serifless` + - `five`.`upright-flat` → `five`.`upright-flat-serifless` + - `five`.`oblique-arched` → `five`.`oblique-arched-serifless` + - `five`.`oblique-flat` → `five`.`oblique-flat-serifless` +* \[**BREAKING**\] Reorder of glyph variants: + - Influenced characters: `I`, `U`, `Z`, `i`, `l`, `u`, `z`, Greek Lower Mu (`μ`), Micro Sign (`µ`). +* \[**BREAKING**\] Quasi-proportional will now use a six-unit system instead of four. Metrics of various letters (`f`, `t`, `r`, `m`, `w`, etc.) are adjusted. +* Add characters: + - UPWARDS WHITE ARROW FROM BAR (`U+21EA`) ... RIGHTWARDS WHITE ARROW FROM WALL (`U+21F0`). + - RETURN SYMBOL (`U+23CE`). + - SYMBOL FOR DELETE MEDIUM SHADE FORM (`U+2429`). + - GEAR WITHOUT HUB (`U+26ED`). + - GEAR WITH HANDLES (`U+26EE`). + - MAP SYMBOL FOR LIGHTHOUSE (`U+26EF`). + - THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD (`U+27A2`). + - THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD (`U+27A3`). + - SHUFFLE PRODUCT (`U+29E2`). + - GLEICH STARK (`U+29E6`). + - INTERIOR PRODUCT (`U+2A3C`). + - RIGHTHAND INTERIOR PRODUCT (`U+2A3D`). + - SHORT LEFT TACK (`U+2ADE`) ... SHORT UP TACK (`U+2AE0`). + - VERTICAL BAR TRIPLE RIGHT TURNSTILE (`U+2AE2`) ... REVERSED DOUBLE STROKE NOT SIGN (`U+2AED`). + - UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR (`U+2BB8`). + - LEFT RAISED OMISSION BRACKET (`U+2E0C`). + - RIGHT RAISED OMISSION BRACKET (`U+2E0C`). + - LEFT LOW PARAPHRASE BRACKET (`U+2E1C`). + - RIGHT LOW PARAPHRASE BRACKET (`U+2E1C`). + - LOWER HORIZONTAL RULER SEGMENT (`U+1CC05`) (Proposed for Unicode 16; L2/21-235). + - RIGHT VERTICAL RULER SEGMENT (`U+1CC06`) (Proposed for Unicode 16; L2/21-235). + - LOWER RIGHT RULER SEGMENT (`U+1CC07`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT (`U+1CC1B`) ... SEPARATED BLOCK QUADRANT-1234 (`U+1CC2F`) (Proposed for Unicode 16; L2/21-235). + - EIGHT RAYS INWARD (`U+1CC69`) ... BLACK NEUTRAL FACE (`U+1CC6F`) (Proposed for Unicode 16; L2/21-235). + - SQUARE FOUR CORNER SALTIRES (`U+1CC89`) ... INVERSE BLACK DIAMOND (`U+1CC8D`) (Proposed for Unicode 16; L2/21-235). + - VERTICAL LINE WITH FOUR TICK MARKS (`U+1CC90`) (Proposed for Unicode 16; L2/21-235). + - HORIZONTAL LINE WITH FOUR TICK MARKS (`U+1CC91`) (Proposed for Unicode 16; L2/21-235). + - WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR (`U+1CE06`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT (`U+1CE09`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT (`U+1CE0A`) (Proposed for Unicode 16; L2/21-235). + - SEPARATED BLOCK SEXTANT-1 (`U+1CE51`) ... SEPARATED BLOCK SEXTANT-123456 (`U+1CE8F`) (Proposed for Unicode 16; L2/21-235). + - UPPER LEFT ONE SIXTEENTH BLOCK (`U+1CE90`) ... LOWER HALF RIGHT ONE QUARTER BLOCK (`U+1CEAF`) (Proposed for Unicode 16; L2/21-235). + - FOLDER (`U+1F5C0`) (#2181). + - DOWNWARDS BLACK ARROW TO BAR (`U+1F8B3`) ... SOUTH WEST ARROW FROM BAR (`U+1F8BB`) (Proposed for Unicode 16; L2/21-235). + - RAISED LEFT SMALL SQUARE BRACKET (`U+1FBCC`) (Proposed for Unicode 16; L2/21-235). + - LEFT TWO THIRDS BLOCK (`U+1FBCE`) (Proposed for Unicode 16; L2/21-235). + - LEFT ONE THIRD BLOCK (`U+1FBCF`) (Proposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT (`U+1FBD0`) ... BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT (`U+1FBDF`) (Proposed for Unicode 16; L2/21-235). + - UPPER CENTRE ONE QUARTER BLOCK (`U+1FBE4`) ... MIDDLE RIGHT ONE QUARTER BLOCK (`U+1FBE7`) (Proposed for Unicode 16; L2/21-235). +* Fix a disjoint stroke of Outlined Curly `Z` under some weights (#2195). +* Unify diagonal box drawings' angles (#2197). +* Fix Large Type Piece `U+1CE3B` (#2206). +* Added a `MOSC` feature that turns certain geometric shapes into mosaics (#2212). +* Fix `frac` feature for better recognizing fraction patterns (#2214). +* Fix broken shape of `U+1FB95`, `U+1FB96` and `U+1FB97` (#2218). +* Increase weight for `U+276E`/`U+276F` (#2217). +* Fix ligation for `[|]` (#2221). diff --git a/changes/28.0.0.md b/changes/archives/28.x/28.0.0.md similarity index 100% rename from changes/28.0.0.md rename to changes/archives/28.x/28.0.0.md diff --git a/changes/28.0.1.md b/changes/archives/28.x/28.0.1.md similarity index 100% rename from changes/28.0.1.md rename to changes/archives/28.x/28.0.1.md diff --git a/changes/28.0.2.md b/changes/archives/28.x/28.0.2.md similarity index 100% rename from changes/28.0.2.md rename to changes/archives/28.x/28.0.2.md diff --git a/changes/28.0.3.md b/changes/archives/28.x/28.0.3.md similarity index 100% rename from changes/28.0.3.md rename to changes/archives/28.x/28.0.3.md diff --git a/changes/28.0.4.md b/changes/archives/28.x/28.0.4.md similarity index 100% rename from changes/28.0.4.md rename to changes/archives/28.x/28.0.4.md diff --git a/changes/28.0.5.md b/changes/archives/28.x/28.0.5.md similarity index 100% rename from changes/28.0.5.md rename to changes/archives/28.x/28.0.5.md diff --git a/changes/28.0.6.md b/changes/archives/28.x/28.0.6.md similarity index 100% rename from changes/28.0.6.md rename to changes/archives/28.x/28.0.6.md diff --git a/changes/28.0.7.md b/changes/archives/28.x/28.0.7.md similarity index 100% rename from changes/28.0.7.md rename to changes/archives/28.x/28.0.7.md diff --git a/changes/28.1.0.md b/changes/archives/28.x/28.1.0.md similarity index 80% rename from changes/28.1.0.md rename to changes/archives/28.x/28.1.0.md index d0e15cfe15..0414a9e042 100644 --- a/changes/28.1.0.md +++ b/changes/archives/28.x/28.1.0.md @@ -5,10 +5,10 @@ - OVERLAPPING WHITE SQUARES (`U+2BBA`). - OVERLAPPING WHITE AND BLACK SQUARES (`U+2BBB`). - OVERLAPPING BLACK SQUARES (`U+2BBC`). - - OUTLINED LATIN CAPITAL LETTER A (`U+1CCD6`) ... OUTLINED LATIN CAPITAL LETTER Z (`U+1CCEF`) (Purposed for Unicode 16; L2/21-235). - - OUTLINED DIGIT ZERO (`U+1CCF0`) ... OUTLINED DIGIT NINE (`U+1CCF9`) (Purposed for Unicode 16; L2/21-235). - - BLOCK OCTANT-3 (`U+1CD00`) ... BLOCK OCTANT-2345678 (`U+1CDE5`) (Purposed for Unicode 16; L2/21-235). - - LEFT HALF TRIPLE DASH HORIZONTAL (`U+1CE0D`) ... LARGE TYPE PIECE STEM-12 (`U+1CE50`) (Purposed for Unicode 16; L2/21-235). + - OUTLINED LATIN CAPITAL LETTER A (`U+1CCD6`) ... OUTLINED LATIN CAPITAL LETTER Z (`U+1CCEF`) (Proposed for Unicode 16; L2/21-235). + - OUTLINED DIGIT ZERO (`U+1CCF0`) ... OUTLINED DIGIT NINE (`U+1CCF9`) (Proposed for Unicode 16; L2/21-235). + - BLOCK OCTANT-3 (`U+1CD00`) ... BLOCK OCTANT-2345678 (`U+1CDE5`) (Proposed for Unicode 16; L2/21-235). + - LEFT HALF TRIPLE DASH HORIZONTAL (`U+1CE0D`) ... LARGE TYPE PIECE STEM-12 (`U+1CE50`) (Proposed for Unicode 16; L2/21-235). * Fix metrics of Cyrillic Yery (#2182). * Fix Italic/Upright localization forms for Serbian/Macedonian Cyrillic. * Add Bosnian Cyrillic localization forms based on Serbian/Macedonian. diff --git a/doc/PACKAGE-LIST.md b/doc/PACKAGE-LIST.md index 1e616860e1..386490afd8 100644 --- a/doc/PACKAGE-LIST.md +++ b/doc/PACKAGE-LIST.md @@ -1,7 +1,7 @@ -# Package list of Release 28.1.0 +# Package list of Release 29.0.0 ## Prebuilt Packages Iosevka provides a large variety of variants. Prebuilt variants are listed below. For all Monospace variants' packages, it will contain three _spacing variants_. You can either download the package containing all the spacing variants (recommended), or cherry-pick the variant with specific spacing. @@ -22,146 +22,146 @@ Iosevka provides various packaging formats, here is the list of them: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + +
📦 IosevkaMonospace, DefaultSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ IosevkaDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka TermTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka FixedFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SlabMonospace, Slab-serifSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SlabDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SlabTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SlabFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka CurlyMonospace, Curly StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka CurlyDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term CurlyTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed CurlyFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka Curly SlabMonospace, Curly Style, Slab-serifSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka Curly SlabDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term Curly SlabTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed Curly SlabFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS01Monospace, Andale Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS01DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS01TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS01FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS02Monospace, Anonymous Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS02DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS02TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS02FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS03Monospace, Consolas StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS03DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS03TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS03FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS04Monospace, Menlo StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS04DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS04TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS04FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS05Monospace, Fira Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS05DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS05TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS05FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS06Monospace, Liberation Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS06DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS06TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS06FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS07Monospace, Monaco StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS07DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS07TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS07FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS08Monospace, Pragmata Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS08DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS08TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS08FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS09Monospace, Source Code Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS09DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS09TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS09FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS10Monospace, Envy Code R StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS10DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS10TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS10FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS11Monospace, X Windows Fixed StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS11DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS11TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS11FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS12Monospace, Ubuntu Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS12DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS12TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS12FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS13Monospace, Lucida StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS13DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS13TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS13FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS14Monospace, JetBrains Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS14DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS14TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS14FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS15Monospace, IBM Plex Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS15DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS15TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS15FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS16Monospace, PT Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS16DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS16TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS16FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS17Monospace, Recursive Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS17DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS17TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS17FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS18Monospace, Input Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS18DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS18TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS18FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 IosevkaMonospace, DefaultSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ IosevkaDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka TermTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka FixedFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SlabMonospace, Slab-serifSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SlabDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SlabTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SlabFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka CurlyMonospace, Curly StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka CurlyDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term CurlyTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed CurlyFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka Curly SlabMonospace, Curly Style, Slab-serifSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka Curly SlabDefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term Curly SlabTerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed Curly SlabFixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS01Monospace, Andale Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS01DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS01TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS01FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS02Monospace, Anonymous Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS02DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS02TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS02FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS03Monospace, Consolas StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS03DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS03TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS03FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS04Monospace, Menlo StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS04DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS04TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS04FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS05Monospace, Fira Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS05DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS05TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS05FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS06Monospace, Liberation Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS06DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS06TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS06FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS07Monospace, Monaco StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS07DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS07TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS07FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS08Monospace, Pragmata Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS08DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS08TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS08FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS09Monospace, Source Code Pro StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS09DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS09TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS09FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS10Monospace, Envy Code R StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS10DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS10TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS10FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS11Monospace, X Windows Fixed StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS11DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS11TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS11FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS12Monospace, Ubuntu Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS12DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS12TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS12FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS13Monospace, Lucida StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS13DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS13TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS13FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS14Monospace, JetBrains Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS14DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS14TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS14FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS15Monospace, IBM Plex Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS15DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS15TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS15FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS16Monospace, PT Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS16DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS16TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS16FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS17Monospace, Recursive Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS17DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS17TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS17FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka SS18Monospace, Input Mono StyleSuper TTCTTC 
  └ Sub-packagesSpacingLigaturesDownloads
    ├ Iosevka SS18DefaultYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    ├ Iosevka Term SS18TerminalYesSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka Fixed SS18FixedNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka AileQuasi-proportional, Sans-serif 
  └ Sub-packagesSpacingLigaturesDownloads
    └ Iosevka AileDefaultNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka AileDefaultNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
📦 Iosevka EtoileQuasi-proportional, Slab-serif 
  └ Sub-packagesSpacingLigaturesDownloads
    └ Iosevka EtoileDefaultNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
    └ Iosevka EtoileDefaultNoSuper TTCTTCTTF (Unhinted)WebFont (Unhinted)
diff --git a/doc/character-variants.md b/doc/character-variants.md index b5c73ea7b3..7eb7d3e1e4 100644 --- a/doc/character-variants.md +++ b/doc/character-variants.md @@ -204,8 +204,8 @@ cv09 - + @@ -520,8 +520,8 @@ cv20 - + @@ -671,15 +671,15 @@ - - - - - - + + + + + + 1 @@ -699,15 +699,15 @@ - - - - - - + + + + + + 13 @@ -965,11 +965,11 @@ cv34 - + @@ -1096,11 +1096,11 @@ cv37 - + @@ -1477,8 +1477,8 @@ cv45 - + @@ -1664,15 +1664,15 @@ - - - - - - + + + + + + 1 @@ -1692,15 +1692,15 @@ - - - - - - + + + + + + 13 @@ -2066,8 +2066,8 @@ cv62 - + @@ -2870,35 +2870,46 @@ cv87 - - - + + + + + 1 2 - +3 +4 + cv88 - + + - + 1 2 - +3 + cv89 - - - - - - - + + + + + + + + + + + + 1 @@ -2907,22 +2918,35 @@ 4 5 6 - +7 +8 +9 +10 +11 +12 cv90 - - - - - + + + + + + + + + 1 2 3 4 - +5 +6 +7 +8 + cv91 @@ -3312,8 +3336,8 @@ VSAQ - + @@ -3399,7 +3423,7 @@ -VXAA +VLAE @@ -3410,7 +3434,7 @@ -VLAE +VLAF @@ -3421,7 +3445,7 @@ -VLAF +VLAG diff --git a/doc/custom-build.md b/doc/custom-build.md index 8adaa0d1a9..9cf1061e29 100644 --- a/doc/custom-build.md +++ b/doc/custom-build.md @@ -60,8 +60,16 @@ Inside the plan, top-level properties include: - As a consequence, the following characters will be **removed**: - `U+27F5` LONG LEFTWARDS ARROW - `U+27F6` LONG RIGHTWARDS ARROW + - `U+27F7` LONG LEFT RIGHT ARROW + - `U+27F8` LONG LEFTWARDS DOUBLE ARROW + - `U+27F9` LONG RIGHTWARDS DOUBLE ARROW + - `U+27FA` LONG LEFT RIGHT DOUBLE ARROW - `U+27FB` LONG LEFTWARDS ARROW FROM BAR - `U+27FC` LONG RIGHTWARDS ARROW FROM BAR + - `U+27FD` LONG LEFTWARDS DOUBLE ARROW FROM BAR + - `U+27FE` LONG RIGHTWARDS DOUBLE ARROW FROM BAR + - `U+27FF` LONG RIGHTWARDS SQUIGGLE ARROW + - `U+2B33` LONG LEFTWARDS SQUIGGLE ARROW - Remove `NWID` and `WWID` features typographic features - `fixed`: Apply `fontconfig-mono` changes and further remove ligations. * `serifs`: Optional, String, configures style of serifs. @@ -426,10 +434,10 @@ Subsection `variants` is used to configure character variants in the font. Prope - Styles for `I`
3 variants - - - + + +
capital-i = 'serifed', cv09 = 1
I with standard (long) serifs (default)
capital-i = 'serifless', cv09 = 2
capital-i = 'serifless', cv09 = 1
I without serifs, like a straight bar
capital-i = 'serifed', cv09 = 2
I with standard (long) serifs (default)
capital-i = 'short-serifed', cv09 = 3
I with short serifs
@@ -696,10 +704,10 @@ Subsection `variants` is used to configure character variants in the font. Prope - - - + + + @@ -826,48 +834,48 @@ Subsection `variants` is used to configure character variants in the font. Prope - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + @@ -1074,16 +1082,16 @@ Subsection `variants` is used to configure character variants in the font. Prope - Styles for `i`
14 variants
capital-u = 'toothed-serifless', cv20 = 1
U with toothed shape; without serifs
capital-u = 'toothed-motion-serifed', cv20 = 2
U with toothed shape, and motion serifs at top-left and bottom-right
capital-u = 'toothed-bottom-right-serifed', cv20 = 3
capital-u = 'toothed-bottom-right-serifed', cv20 = 2
U with toothed shape, and serif at bottom-right
capital-u = 'toothed-motion-serifed', cv20 = 3
U with toothed shape, and motion serifs at top-left and bottom-right
capital-u = 'toothed-serifed', cv20 = 4
U with toothed shape, and serifs
capital-u = 'tailed-serifless', cv20 = 5
Z with straight body shape, and a diagonal crossbar; without serifs
capital-z = 'straight-serifless-with-horizontal-crossbar', cv25 = 3
Z with straight body shape, and a horizontal crossbar; without serifs
capital-z = 'straight-serifed', cv25 = 4
Z with straight body shape, and serifs (default for Slab)
capital-z = 'straight-serifed-with-crossbar', cv25 = 5
Z with straight body shape, serifs, and a diagonal crossbar
capital-z = 'straight-serifed-with-horizontal-crossbar', cv25 = 6
Z with straight body shape, serifs, and a horizontal crossbar
capital-z = 'straight-top-serifed', cv25 = 4
Z with straight body shape, and serifs at top
capital-z = 'straight-top-serifed-with-crossbar', cv25 = 5
Z with straight body shape, serifs at top, and a diagonal crossbar
capital-z = 'straight-top-serifed-with-horizontal-crossbar', cv25 = 6
Z with straight body shape, serifs at top, and a horizontal crossbar
capital-z = 'straight-bottom-serifed', cv25 = 7
Z with straight body shape, and serifs at bottom
capital-z = 'straight-bottom-serifed-with-crossbar', cv25 = 8
Z with straight body shape, serifs at bottom, and a diagonal crossbar
capital-z = 'straight-bottom-serifed-with-horizontal-crossbar', cv25 = 9
Z with straight body shape, serifs at bottom, and a horizontal crossbar
capital-z = 'straight-top-serifed', cv25 = 10
Z with straight body shape, and serifs at top
capital-z = 'straight-top-serifed-with-crossbar', cv25 = 11
Z with straight body shape, serifs at top, and a diagonal crossbar
capital-z = 'straight-top-serifed-with-horizontal-crossbar', cv25 = 12
Z with straight body shape, serifs at top, and a horizontal crossbar
capital-z = 'straight-serifed', cv25 = 10
Z with straight body shape, and serifs (default for Slab)
capital-z = 'straight-serifed-with-crossbar', cv25 = 11
Z with straight body shape, serifs, and a diagonal crossbar
capital-z = 'straight-serifed-with-horizontal-crossbar', cv25 = 12
Z with straight body shape, serifs, and a horizontal crossbar
capital-z = 'curly-serifless', cv25 = 13
Z with curly body shape; without serifs
capital-z = 'curly-serifless-with-crossbar', cv25 = 14
Z with curly body shape, and a diagonal crossbar; without serifs
capital-z = 'curly-serifless-with-horizontal-crossbar', cv25 = 15
Z with curly body shape, and a horizontal crossbar; without serifs
capital-z = 'curly-serifed', cv25 = 16
Z with curly body shape, and serifs
capital-z = 'curly-serifed-with-crossbar', cv25 = 17
Z with curly body shape, serifs, and a diagonal crossbar
capital-z = 'curly-serifed-with-horizontal-crossbar', cv25 = 18
Z with curly body shape, serifs, and a horizontal crossbar
capital-z = 'curly-top-serifed', cv25 = 16
Z with curly body shape, and serifs at top
capital-z = 'curly-top-serifed-with-crossbar', cv25 = 17
Z with curly body shape, serifs at top, and a diagonal crossbar
capital-z = 'curly-top-serifed-with-horizontal-crossbar', cv25 = 18
Z with curly body shape, serifs at top, and a horizontal crossbar
capital-z = 'curly-bottom-serifed', cv25 = 19
Z with curly body shape, and serifs at bottom
capital-z = 'curly-bottom-serifed-with-crossbar', cv25 = 20
Z with curly body shape, serifs at bottom, and a diagonal crossbar
capital-z = 'curly-bottom-serifed-with-horizontal-crossbar', cv25 = 21
Z with curly body shape, serifs at bottom, and a horizontal crossbar
capital-z = 'curly-top-serifed', cv25 = 22
Z with curly body shape, and serifs at top
capital-z = 'curly-top-serifed-with-crossbar', cv25 = 23
Z with curly body shape, serifs at top, and a diagonal crossbar
capital-z = 'curly-top-serifed-with-horizontal-crossbar', cv25 = 24
Z with curly body shape, serifs at top, and a horizontal crossbar
capital-z = 'curly-serifed', cv25 = 22
Z with curly body shape, and serifs
capital-z = 'curly-serifed-with-crossbar', cv25 = 23
Z with curly body shape, serifs, and a diagonal crossbar
capital-z = 'curly-serifed-with-horizontal-crossbar', cv25 = 24
Z with curly body shape, serifs, and a horizontal crossbar
capital-z = 'cursive', cv25 = 25
Z with cursive body shape
capital-z = 'cursive-with-crossbar', cv25 = 26
- - - + - + - + - + + + @@ -1184,16 +1192,16 @@ Subsection `variants` is used to configure character variants in the font. Prope - Styles for `l`
14 variants
i = 'serifed', cv34 = 1
Serifed i (default for Upright)
i = 'serifless', cv34 = 2
i = 'serifless', cv34 = 1
i like a straight line
i = 'hooky', cv34 = 3
i = 'hooky', cv34 = 2
Hooky i
i = 'hooky-bottom', cv34 = 4
i = 'hooky-bottom', cv34 = 3
i with a sharp-turning horizontal tail
i = 'zshaped', cv34 = 5
i = 'zshaped', cv34 = 4
Z-shaped i
i = 'serifed', cv34 = 5
Serifed i (default for Upright)
i = 'serifed-asymmetric', cv34 = 6
i with shorter top serif and full bottom serif
i = 'tailed', cv34 = 7
- - - + - + - + - + + + @@ -1512,10 +1520,10 @@ Subsection `variants` is used to configure character variants in the font. Prope
l = 'serifed', cv37 = 1
Serifed l (default for Upright)
l = 'serifless', cv37 = 2
l = 'serifless', cv37 = 1
l like a straight line
l = 'hooky', cv37 = 3
l = 'hooky', cv37 = 2
Hooky l
l = 'hooky-bottom', cv37 = 4
l = 'hooky-bottom', cv37 = 3
l with a straight sharp-turning horizontal tail
l = 'zshaped', cv37 = 5
l = 'zshaped', cv37 = 4
Z-shaped l
l = 'serifed', cv37 = 5
Serifed l (default for Upright)
l = 'serifed-asymmetric', cv37 = 6
l with shorter top serif and full bottom serif
l = 'tailed', cv37 = 7
- - - + + + @@ -1674,48 +1682,48 @@ Subsection `variants` is used to configure character variants in the font. Prope - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + @@ -2014,10 +2022,10 @@ Subsection `variants` is used to configure character variants in the font. Prope
u = 'toothed-serifless', cv45 = 1
u with toothed shape; without serifs (default for Sans Upright)
u = 'toothed-motion-serifed', cv45 = 2
u with toothed shape, and motion serifs at top-left and bottom-right
u = 'toothed-bottom-right-serifed', cv45 = 3
u = 'toothed-bottom-right-serifed', cv45 = 2
u with toothed shape, and serif at bottom-right
u = 'toothed-motion-serifed', cv45 = 3
u with toothed shape, and motion serifs at top-left and bottom-right
u = 'toothed-serifed', cv45 = 4
u with toothed shape, and serifs (default for Slab Upright)
u = 'tailed-serifless', cv45 = 5
z with straight body shape, and a diagonal crossbar; without serifs
z = 'straight-serifless-with-horizontal-crossbar', cv50 = 3
z with straight body shape, and a horizontal crossbar; without serifs
z = 'straight-serifed', cv50 = 4
z with straight body shape, and serifs (default for Slab Upright)
z = 'straight-serifed-with-crossbar', cv50 = 5
z with straight body shape, serifs, and a diagonal crossbar
z = 'straight-serifed-with-horizontal-crossbar', cv50 = 6
z with straight body shape, serifs, and a horizontal crossbar
z = 'straight-top-serifed', cv50 = 4
z with straight body shape, and serifs at top
z = 'straight-top-serifed-with-crossbar', cv50 = 5
z with straight body shape, serifs at top, and a diagonal crossbar
z = 'straight-top-serifed-with-horizontal-crossbar', cv50 = 6
z with straight body shape, serifs at top, and a horizontal crossbar
z = 'straight-bottom-serifed', cv50 = 7
z with straight body shape, and serifs at bottom
z = 'straight-bottom-serifed-with-crossbar', cv50 = 8
z with straight body shape, serifs at bottom, and a diagonal crossbar
z = 'straight-bottom-serifed-with-horizontal-crossbar', cv50 = 9
z with straight body shape, serifs at bottom, and a horizontal crossbar
z = 'straight-top-serifed', cv50 = 10
z with straight body shape, and serifs at top
z = 'straight-top-serifed-with-crossbar', cv50 = 11
z with straight body shape, serifs at top, and a diagonal crossbar
z = 'straight-top-serifed-with-horizontal-crossbar', cv50 = 12
z with straight body shape, serifs at top, and a horizontal crossbar
z = 'straight-serifed', cv50 = 10
z with straight body shape, and serifs (default for Slab Upright)
z = 'straight-serifed-with-crossbar', cv50 = 11
z with straight body shape, serifs, and a diagonal crossbar
z = 'straight-serifed-with-horizontal-crossbar', cv50 = 12
z with straight body shape, serifs, and a horizontal crossbar
z = 'curly-serifless', cv50 = 13
z with curly body shape; without serifs
z = 'curly-serifless-with-crossbar', cv50 = 14
z with curly body shape, and a diagonal crossbar; without serifs
z = 'curly-serifless-with-horizontal-crossbar', cv50 = 15
z with curly body shape, and a horizontal crossbar; without serifs
z = 'curly-serifed', cv50 = 16
z with curly body shape, and serifs
z = 'curly-serifed-with-crossbar', cv50 = 17
z with curly body shape, serifs, and a diagonal crossbar
z = 'curly-serifed-with-horizontal-crossbar', cv50 = 18
z with curly body shape, serifs, and a horizontal crossbar
z = 'curly-top-serifed', cv50 = 16
z with curly body shape, and serifs at top
z = 'curly-top-serifed-with-crossbar', cv50 = 17
z with curly body shape, serifs at top, and a diagonal crossbar
z = 'curly-top-serifed-with-horizontal-crossbar', cv50 = 18
z with curly body shape, serifs at top, and a horizontal crossbar
z = 'curly-bottom-serifed', cv50 = 19
z with curly body shape, and serifs at bottom
z = 'curly-bottom-serifed-with-crossbar', cv50 = 20
z with curly body shape, serifs at bottom, and a diagonal crossbar
z = 'curly-bottom-serifed-with-horizontal-crossbar', cv50 = 21
z with curly body shape, serifs at bottom, and a horizontal crossbar
z = 'curly-top-serifed', cv50 = 22
z with curly body shape, and serifs at top
z = 'curly-top-serifed-with-crossbar', cv50 = 23
z with curly body shape, serifs at top, and a diagonal crossbar
z = 'curly-top-serifed-with-horizontal-crossbar', cv50 = 24
z with curly body shape, serifs at top, and a horizontal crossbar
z = 'curly-serifed', cv50 = 22
z with curly body shape, and serifs
z = 'curly-serifed-with-crossbar', cv50 = 23
z with curly body shape, serifs, and a diagonal crossbar
z = 'curly-serifed-with-horizontal-crossbar', cv50 = 24
z with curly body shape, serifs, and a horizontal crossbar
z = 'cursive', cv50 = 25
z with cursive body shape (default for Slab Italic)
z = 'cursive-with-crossbar', cv50 = 26
- - - + + + @@ -2696,48 +2704,74 @@ Subsection `variants` is used to configure character variants in the font. Prope
lower-mu = 'toothed-serifless', cv62 = 1
Greek small Mu (μ) with toothed shape; without serifs
lower-mu = 'toothed-motion-serifed', cv62 = 2
Greek small Mu (μ) with toothed shape, and motion serifs at top-left and bottom-right
lower-mu = 'toothed-bottom-right-serifed', cv62 = 3
lower-mu = 'toothed-bottom-right-serifed', cv62 = 2
Greek small Mu (μ) with toothed shape, and serif at bottom-right
lower-mu = 'toothed-motion-serifed', cv62 = 3
Greek small Mu (μ) with toothed shape, and motion serifs at top-left and bottom-right
lower-mu = 'toothed-serifed', cv62 = 4
Greek small Mu (μ) with toothed shape, and serifs
lower-mu = 'tailed-serifless', cv62 = 5
1 with bottom serif and a diagonal cut at top
- Styles for `2` -
2 variants +
4 variants - - - - + + + + + + + +
two = 'straight-neck', cv87 = 1
2 with straight neck
two = 'curly-neck', cv87 = 2
2 with curly neck (default)
two = 'straight-neck-serifless', cv87 = 1
2 with straight neck; without serifs
two = 'straight-neck-serifed', cv87 = 2
2 with straight neck, and serifs
two = 'curly-neck-serifless', cv87 = 3
2 with curly neck; without serifs (default for Sans)
two = 'curly-neck-serifed', cv87 = 4
2 with curly neck, and serifs (default for Slab)
- Styles for `3` -
2 variants +
3 variants - - - - + + + + + +
three = 'flat-top', cv88 = 1
Flat top 3 (Like Museo Sans / Montserrat)
three = 'two-arcs', cv88 = 2
Arched top 3 (default)
three = 'flat-top-serifless', cv88 = 1
3 with flat top (Like Museo Sans / Montserrat); without serifs
three = 'flat-top-serifed', cv88 = 2
3 with flat top (Like Museo Sans / Montserrat), and serifs
three = 'two-arcs', cv88 = 3
3 with arched top (default)
- Styles for `4` -
6 variants +
12 variants - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
four = 'closed', cv89 = 1
4 with closed contour
four = 'closed-non-crossing', cv89 = 2
4 with closed contour but the horizontal bar does not overflow the vertical bar
four = 'semi-open', cv89 = 3
4 with semi-open contour (default)
four = 'semi-open-non-crossing', cv89 = 4
4 with semi-open contour but the horizontal bar does not overflow the vertical bar
four = 'open', cv89 = 5
4 with open contour
four = 'open-non-crossing', cv89 = 6
4 with open contour but the horizontal bar does not overflow the vertical bar
four = 'closed-serifless', cv89 = 1
4 with closed contour; without serifs
four = 'closed-serifed', cv89 = 2
4 with closed contour, and serifs
four = 'closed-non-crossing-serifless', cv89 = 3
4 with closed contour, and horizontal bar that does not overflow the vertical bar; without serifs
four = 'closed-non-crossing-serifed', cv89 = 4
4 with closed contour, horizontal bar that does not overflow the vertical bar, and serifs
four = 'semi-open-serifless', cv89 = 5
4 with semi-open contour; without serifs (default for Sans)
four = 'semi-open-serifed', cv89 = 6
4 with semi-open contour, and serifs (default for Slab)
four = 'semi-open-non-crossing-serifless', cv89 = 7
4 with semi-open contour, and horizontal bar that does not overflow the vertical bar; without serifs
four = 'semi-open-non-crossing-serifed', cv89 = 8
4 with semi-open contour, horizontal bar that does not overflow the vertical bar, and serifs
four = 'open-serifless', cv89 = 9
4 with open contour; without serifs
four = 'open-serifed', cv89 = 10
4 with open contour, and serifs
four = 'open-non-crossing-serifless', cv89 = 11
4 with open contour, and horizontal bar that does not overflow the vertical bar; without serifs
four = 'open-non-crossing-serifed', cv89 = 12
4 with open contour, horizontal bar that does not overflow the vertical bar, and serifs
- Styles for `5` -
4 variants +
8 variants - - - - - - - - + + + + + + + + + + + + + + + +
five = 'upright-arched', cv90 = 1
5 with upright upper-left bar, and arched middle part (default)
five = 'upright-flat', cv90 = 2
5 with upright upper-left bar, and flat middle part
five = 'oblique-arched', cv90 = 3
5 with arched middle part
five = 'oblique-flat', cv90 = 4
5 with flat middle part
five = 'upright-arched-serifless', cv90 = 1
5 with upright upper-left bar, and arched middle part; without serifs (default for Sans)
five = 'upright-arched-serifed', cv90 = 2
5 with upright upper-left bar, arched middle part, and serifs (default for Slab)
five = 'upright-flat-serifless', cv90 = 3
5 with upright upper-left bar, and flat middle part; without serifs
five = 'upright-flat-serifed', cv90 = 4
5 with upright upper-left bar, flat middle part, and serifs
five = 'oblique-arched-serifless', cv90 = 5
5 with arched middle part; without serifs
five = 'oblique-arched-serifed', cv90 = 6
5 with arched middle part, and serifs
five = 'oblique-flat-serifless', cv90 = 7
5 with flat middle part; without serifs
five = 'oblique-flat-serifed', cv90 = 8
5 with flat middle part, and serifs
- Styles for `6`
3 variants @@ -3060,10 +3094,10 @@ Subsection `variants` is used to configure character variants in the font. Prope - - - + + + @@ -3128,25 +3162,25 @@ Subsection `variants` is used to configure character variants in the font. Prope - Styles for `++` (Plus ligations)
2 variants
micro-sign = 'toothed-serifless', VSAQ = 1
Micro Sign (µ) with toothed shape; without serifs (default for Sans Upright)
micro-sign = 'toothed-motion-serifed', VSAQ = 2
Micro Sign (µ) with toothed shape, and motion serifs at top-left and bottom-right
micro-sign = 'toothed-bottom-right-serifed', VSAQ = 3
micro-sign = 'toothed-bottom-right-serifed', VSAQ = 2
Micro Sign (µ) with toothed shape, and serif at bottom-right
micro-sign = 'toothed-motion-serifed', VSAQ = 3
Micro Sign (µ) with toothed shape, and motion serifs at top-left and bottom-right
micro-sign = 'toothed-serifed', VSAQ = 4
Micro Sign (µ) with toothed shape, and serifs (default for Slab Upright)
micro-sign = 'tailed-serifless', VSAQ = 5
- + - +
lig-plus-chain = 'with-notch', VXAA = 1
lig-plus-chain = 'with-notch', VLAE = 1
The bars in connected plus (++, etc.) ligation have notches in the middle
lig-plus-chain = 'without-notch', VXAA = 2
lig-plus-chain = 'without-notch', VLAE = 2
The bars in connected plus (++, etc.) ligation do not have notches in the middle (default)
- Styles for `=>` (Double arrow ligation)
2 variants - + - +
lig-double-arrow-bar = 'with-notch', VLAE = 1
lig-double-arrow-bar = 'with-notch', VLAF = 1
The bars in double arrow (=>, etc.) ligation have notches in the middle
lig-double-arrow-bar = 'without-notch', VLAE = 2
lig-double-arrow-bar = 'without-notch', VLAF = 2
The bars in double arrow (=>, etc.) ligation do not have notches in the middle (default)
- Styles for `->` (Single arrow ligation)
2 variants - + - +
lig-single-arrow-bar = 'with-notch', VLAF = 1
lig-single-arrow-bar = 'with-notch', VLAG = 1
The bars in single arrow (=>, etc.) ligation have notches in the middle
lig-single-arrow-bar = 'without-notch', VLAF = 2
lig-single-arrow-bar = 'without-notch', VLAG = 2
The bars in single arrow (=>, etc.) ligation do not have notches in the middle (default)
diff --git a/doc/packages-sha.txt b/doc/packages-sha.txt index 04799cbbcd..f543b47c51 100644 --- a/doc/packages-sha.txt +++ b/doc/packages-sha.txt @@ -1,452 +1,452 @@ -8180eb43c5f6ffa09c2fb14304930c45bdd5013d6714d7dec21245873b2c2b31 undefined -536a6f7387ac385037bcad6bf050832adb89299e45e40570c87e466d631b84f5 undefined -954d9ae953cb969575593917bc5a544e08b62fb357814c163eef7bf5580f196c undefined -c82c91e16441b01804e7698aae710d8ffdc7087a7c54fda91ebda38baaea48e6 undefined -1be3d9df8049b6e616daba33f6710c720b5bb74da03fd1ffa35cbb16338ed2c2 undefined -8b6a63665137d714128237c9af530d274da3d24c4172e29e45a57ea15eaad1a8 undefined -2411bc1d08bd2632eb2625f78cf15ac3cfd12a269bd96d9254eb5b1dbc8729a1 undefined -9eb94fb9f21a04dfa608d8a5eeaf092d14c8db16adc21e86a6be709841dbd351 undefined -559ed7fc2860ba895eb0f83088c322ec7e2f1a49adf671ddf893695351023680 undefined -4c33072f9309dc69cb6b9129bd1f557520383285128d654a7021813a74ce42a2 undefined -06ad63203743a6873f018ae815705e707b5540a04a587a3eb0ca4886616781ca undefined -7ae42041f15319c4ae1143bc31501d957ff87b041b3572350477297e7f7afa2f undefined -c10753e8e79ef42ea09a2550e4a74f3e1b094c19746cf73e7a8659675b73753d undefined -7f97e55377c118c2058b0cc194515810d4b9aa88ccd925e6c1b398329380d0f9 undefined -0b8b54c29d3db0cbdbc0a4a0798dde6cbf1ddca7e0692c3eacead7dd3bf31d61 undefined -c9fb3689d0da864ea28946628e90526d8f23563248cdff1055fb22d1425fae33 undefined -cd9f581ad6c5e02dd2af966904fa009d9789fd0b679d2775dc64f1bf543f5d49 undefined -838c34fee093ee23d73eda2e5575397dbbaed9b3d37ae51b5ee9944f23daae80 undefined -480fa0b7973ef95e12be3e9e932e0a382d27430c4ba1b06d0b93a212e468efb4 undefined -8ac89242ed5c6b81c95bda5fb47660ac781d09ce232f1366215386a64cf4025b undefined -a52c121670738b5d55571860429c0d4af825a985981f679b9be0a98336c50e5f undefined -e19e777992cc5b8f5a1ee6cd40e06f90a46e919ade92a317f9889d7f68c65f8c undefined -145c3dd7519cf36ca047b100ef729c0d1a78167ac23806e2635d3d6dfdc21eb2 undefined -4fb58ebd344ff0ce03fc4e74aede0c6baf4abccfdd926947309cfb82b44241c9 undefined -ab6257d4a3617407f6a0fafe9247d166dd60853e2ec625f0303787e289bf7b88 undefined -f308b9f577e0b2b9ed915424dae71f39c7a3a03e756f044cc2b9863f6dd7fd58 undefined -7efdcdf11717c0e762b7be9b55cd2291de6c30d1afd19974f396eea592b20723 undefined -3a7c9a8b2436a785044d3bd3bb3614cd09850a053ec5f4a84777fd63bb893e78 undefined -f867d002f595a3173197a306d6dbf411ccf5a905dff7c8a259be8ea4e31e482f undefined -04424bec675654aa802f603b3b2978c838b22dccd220521bb75974e72406a03e undefined -135b48b1dc5b1f53b37462bcbb5dfe601c90e0c3c7b13a9b8977d05c99cdd736 undefined -441f64eeeb1cf369bfc24f37171eac3deacbc88ca4d7321bf0480c0cfec8c97a undefined -aafef47ec35c7cc98b197bff63108481d679082dce831dae61b6c773045605af undefined -1c02aac0abd6ce7d94b0c5877b91619a5db8892206df9882a0214b0ad6a96b65 undefined -b75c72626e8e5f4d2c8fa55816cd071b10bc26ca127263d5f28a4afad547fa85 undefined -14d20c8c55bdfe074d9d6883f74b4309124ff4c12cd07a74c4e8a8f2afedeea2 undefined -56fee28179f823b6a1169d05af45932cd9afca4dec2b6a3c9633f0c4c7980f72 undefined -cb2e6d3dee04e5bbe8bf10a0a7991bc2552f686f6a25f044c22093494f0f31a1 undefined -0aacd6975b491add4f1dcdc3b2c463bbc1360c56c0aed349d3385ea463001713 undefined -f2a9dbb1a37446b80bfb8cfeb66b0c2cb56055f5bfb8c659509868f9c417dc77 undefined -43768c868910d111b99f53c9868bed238f3a4f246db3f4806db93ffe8bcdd817 undefined -ec3aba99e8f5415e7e011d21d1f481ed3130c52e73ec6f7a326dde1c63e7814e undefined -f2aa3e19fac0b2069e0e2a26c62a8f7cf829d6a0a74e6b8422278569a2a063e5 undefined -ea67a20d27165f552e27a80b1854959070b46f61413c887b7172d9d995240894 undefined -2c91c3aeda3c37dafdaa9b020c9a865568b5e0379d5751294c528bcdbdf12ab7 undefined -30608829b5236024bdd337c78fe97cc0ef888b1b97f54df9407cc9b07d6733b2 undefined -efb974d784ffe8abe0f9fd03e8c737d91dcbea61129c21a86952e5d11db97557 undefined -1fcabb93efd682d4fb821718745e0c63d23384e4b4c1e1c514581c2313876fda undefined -489e1fa217d98fb1b9729c62ff8149128487c76759e7d04d338910844a7db50f undefined -b99e882c61b7a4a43be3ebe1de45a331928e2dfe6a78740a1c9555e03369cd7a undefined -cebe496e5d5b3958591978caf6f82fe3bc609e799a8288ce10b29bfdc931e98e undefined -75f3f6e9a6b0c5dcba78cd08659382fff4326714165973f27bbdce2ef4b237f1 undefined -0fc4d9b1640a2b73acd131e429e5a11efe5d827c9531ed81c110c633baac49b7 undefined -914b6ba64a20564e3c78b6d54d078a21e2fa0a9e421bd4783febfb50fd6552d8 undefined -fdbd9d3eeba9774db337a6e55c8d5ed5e2ceb0e426af9fb4edf62d679c310d22 undefined -3d746f9889d6805e4b21fd605d5dede4f139dc6921f1b6a5aa56edfdd8dd32d3 undefined -d2073abc967a177bc6680f045f2ed07c7ef9e7e1ea0d449a1abb2c0e414b25d5 undefined -197a7235de5ead95695c43ddece88b0a500bea01c88c88e85e05b6bdd4ab25e0 undefined -654c757df9802af08f4472ec7fec315b90157b18cf1310381a2b07334601875b undefined -17b50a4cde32cc95bcab0731c246396edeee88be7763930192e952559abaa7c6 undefined -586adf9077a3d83d2e9d17f224f654de220283ab374d73a5681c748bd728c3da undefined -e1608497d823fff722f0403a5c4c105ecbcdecbf8abb538183c0351391cb8d34 undefined -e52c04e8ba366f8e02623093a2e9189de84df5287970d20509e64d63216f8cd9 undefined -d0ce4f9a50307d9b9668a05a7702216fa42fe91dbde93b42c42044e16b90f9cd undefined -ad3022dfd211c98bf0e7c0d88ad3bdc27221d95aa8bb7e223d81b03ff91956ef undefined -acb406726051e08c3e6c69a703f2f5ad24b3068350aae82c3f08462cabcca130 undefined -18f8c6493ea7c762b2aaecfb0bacc9b9d79814c8d7d990e06d990ef59f20b933 undefined -c45da79aed2de2387538a15ee92a347066428063b8fc1fa9582605a184673204 undefined -e795a550aea72efe7a702c86cf3d337a444ed76f6facf800093d48fad5c5f7e0 undefined -92356aaedb4b4211feb57d9be8959478a22f7ead0a76c9b28a85027da128f276 undefined -571f01beb24266c6287afcfc2a2c599d7c4f2884f3564373f4b8eaea52b1b25f undefined -2d0b1d0caf12fcbc14bf630a07e372018981a61e8af5aa9fef7c791f682e8ccf undefined -cb25a6448c6d93c28b47845bfff0441c27cb93c6595a63a6619b9064e13933eb undefined -9170560b051f9392856073cb8bfe0e8a27a02257b0438383cf49158b57ee804e undefined -9e6e04cb7bf126b8e2468ee953ef410a091bf5666861391ea42769ecf202a066 undefined -285149ba7792e423e7f2603c9cc3a38a3eb7b6cb44e5aba0a483f181ae1e25c6 undefined -a58856122a74bd802d3ef577eb10de55441da39bcbfcdb79e900dec40e0f86dd undefined -ef6626fcbfa451ad35cfefd5460a3cd5e90538cef5e72455872753b220a411da undefined -260f4bb5acb7f5ee766c7a8501ebb3e517e61813247a081e789a76b052f7e09a undefined -bedcb682b61d1cbb5092142af381245de8faab09a685b4bf1b1e568b4c337ef6 undefined -9ee7bc60f819290ad6fa58f7140d1f6cb0780fa10dd5c6e8431c80a43c25b715 undefined -a33e12353c870b0753c7f58fa07668f41b3d486a560261656be16f52398e3c15 undefined -8eb8d9560e83cf6cf5bee3d9ca12e9301ce1dfcdfcb8613ce1fde42d72bb8aeb undefined -a2bbc233f2dfc29be7816620330da03048bd8f9776089b3034af85ef45c66c01 undefined -68244732de1bf90722adc3fbeb318332f5833869467dede28ef4361111f638f3 undefined -82990b3a21a3bb87d7f7a9e75e4eb7eb496d6099c8876939ca5ed7351eb4331f undefined -26171b52081c4936bc481173bfb0abf5c8138e8f70f7ca7f0c1cdb9520a6b5bf undefined -cfae8945d8b01c0d5c6c4df44185b5af790dad49f7fa61049d3529eacd1c4c70 undefined -f077855d778611ac5bf1e0b8c106608cddd475dbf80f21d40552f17e075f96bf undefined -8fff7b0b3ce9e2a1e4700834b01b0f2e96b08290bc71e6a392e118ef03fd2420 undefined -3ba0a89dfb29231a2669b78e2684351fffde30d1d96b3f2e93a39704d0b4b7bc undefined -47614d665496ff8cd8b48e552548377fdcd91f63a361a2ca5b08f180166bc648 undefined -7196bfffa2ecd904dc1c152b211e86732e3f6a3e580f9d50da527ce18beadae4 undefined -62d1d0b05c341cee881f659d5882b1af8d15d50fbf72a0749fe242e3016431a5 undefined -1b73c805e76c7354567e4f10840608537ffb758b63d7cecb78dbeec8d196ae2c undefined -deba93f6e00c7997c4710da13e49985faa5a32f6414149cacf99f9f83fa6edd9 undefined -a5d95ba4a9ba7455ce84fd6038605df4a0b034981dece6b47cd0322bfe00b763 undefined -5c3ff0c3d6cd1a71891ef6e496d1e231b43e5b16d56454c0df577cf350171b22 undefined -a4bc3fe83535802ac737fb4bee5893e1dd558490fe28e45a10c08031c96c6536 undefined -5ae0cbba176c40069770743726f1f63c571ddb54b779a38f9213a4fedbed003e undefined -20d45ee6a517f2a1e47d805cf0359ced2d8c52d4986b38ef07a56f7117effdc6 undefined -eb59813ebb6493b46cb17b7a310522a06125d69e2f8e87547973a6b78a773f23 undefined -ec34f6411c6874bf2c58549d4875d0cb3e002fee64915937961610b4ab98a1c6 undefined -69dedaa72e63528b0cd40fb997467c22b3be2c0b30a4799a982611dd4d79d9e7 undefined -f44b26d45899c00f892e77f85c52bf9320ee9614891ce02ac692f4c4f354997e undefined -a7931623b6b14426bfac86001ddff78f49f0fbd519146a7e092e149d36f380d1 undefined -a6c45d695ca09030b0316178df205f4d35cebab2764932c41925861363024610 undefined -ceac6154e3a4823722418a205c9ad9c483d04cdf7661f1ccd27ef79c15886dc7 undefined -dcc491016e4803ab2c9a6a2cbefe5249791eb620a49058afec56176f4c3b49be undefined -06dc72a88aa7da761b7536cbd06d41e8a442ce951da58b01db0624214da67ceb undefined -6274c1545f521aca3fbf77ef0d3f494ce3e6052592fc070e30fe919995364744 undefined -375f6827611f28b5bee60b3624785e10a0b4de1ff2850f2f13e2e0e7f6c626ae undefined -72aa4f0f842037e7acd27fe06d6fe88f994f010a81cda55df75921b7b7a7aca3 undefined -141087329908aaf5bece625ef5c3a6196e03952e07977ee64a5f9578b000d92f undefined -2afadb822a73489387f3ae76b1fd61f905f365fbca3d04983b7f5c97c970a974 undefined -73fdf71d5edf506fa49ee77bc339e7272d311b69fdd4bf5af5fcd0de54feb038 undefined -9b4b8d8b9478867c2cd1cef70a5f7112904a5ee9053246a32f246ae1242d6890 undefined -cc0e5defc612e3ad7f146d92a42870448a4068dc1f38def205ffe1fd05decc6b undefined -1b8282bd1c1f32f961906cc138f68dbbce581884f7bb69733d31605f3903d439 undefined -5279c921f6ca00444a06972b938f7bb45e8dc40cc756b8b60f90a48c347d5970 undefined -80ee3009882c43efb5790c305e8754d3bfdb34cef3b052d8b8c210ee8b92f34c undefined -9efcdcb77363a7e33ca2dc28ddf1ec41b59778bc816e03748970a1245996f90c undefined -49132853f8b2f87627aa2f600c92f1e0b99e678636695d215374f2550edd8893 undefined -d2a5253ed14511d9462a54b394f25abdf79a642d99cedae2446efd7acf86805c undefined -6738709d7c4dd889eb8d32a90d2142ac6082b29c712c1a9c6fa0c52ffaf5669b undefined -577a112f8033a7702b9399b4408f6b85fedaa3bd09ce7f0bf8018a1a81d8c37b undefined -a4478f834f7f968909fd75609915f87f93548b5bbcf3e80baf0ced381d846efa undefined -c26ba5a3408adcb339bc96805a8c6ad89689cbbdfa15cc8ee09eda4da9191f6d undefined -00532a6d8fab0f2e8e653f188cb952fd01b3ec6eba7cde4b72a3846f3e661500 undefined -63d043acdeac5d52329d528f8790097546eea0b88531d4cdbfc8b5cd626c70a1 undefined -ed8925d6937df2c07e679cc925d2bf73c655d3257101914ee58dd2e547b39fea undefined -7d6eb04b4216fd8fad37f6ec9f64dad6654405ba6f4db7d8b6970ae8bb7cccbf undefined -86ea1cdece92c05973e4c16881672cc8b6882afa025ec338f8282dd76f26f2ff undefined -ccf3e0f2fbdd5b1d5c4382f8f82e1c6dc98711e4f4692d7b853b913e91067c45 undefined -575b39e956a54268d6994b270179c07a8db27ce6486da46178eaaeccb1a74586 undefined -b6ea6ffd7d5fbc1559ed8370d9b00a80c87e0d35329e97557b846229c7783ad9 undefined -19467e5ee30a4a50950bc739d1e19b350af954fbb1633b6b495921295bd04706 undefined -d91fde24066eba62a666254de5c0e6717ff926c058786dfad13a3b010b22f65a undefined -2c9350d82210f0400647333405810a31adc9bedb5e54951c0b12537ce43aa42d undefined -541cbd17757dabb61b05c4cddc3bc10bbacd0945c233fd4910ca5fd23f4ee2dc undefined -9f9e3be1d4807a9a517ad35a6b91b47def552ea830761ce7b5c49de8ac10e64c undefined -c5f02c6a123f3e356baa56b48a57bdd939a2db27e109c4c34a85182f740bd2b9 undefined -9587ac730eb7dec01c9e676eabb1fffe5782e6634cb11c8cc5060b99b6774131 undefined -5e0f3e96ad5538632429be12f708cada970c3ac72b97153e889fd1e19a2db4f4 undefined -10b2bb83a6c052a45b9ed54bc84b423fcc71b734b350f2ea990d222925c9fd55 undefined -92432f58b4079fd003ba4d60ab4b9067c0cbd22a940a7d2b2480f922f089b874 undefined -8df310a1e62ed1b0e95f001e53303cb06737bbd0ee5a01ec93627bd8d26a35f6 undefined -0e9e887f5c7f230b839ea6bd703ee64a652a0489f30dcef125e20d2fd6d955fd undefined -ed53662a62375ed0b8a5f8207632fdbc451d7449b817e011116fbe55be382f8f undefined -12b9eac9f336aac75cb57279ec5481baed9267c7c0fe55d5b7ccd73b11e6c10e undefined -c65194ec750b412b44e4a0cad879bea8fdb9bd540d6b6186c9da8f58818db4b7 undefined -f3a0fde5edbececa7164bd923ac07c6b339b34b8db7645dde40281cd536d2aed undefined -30842fd49359b685e449c35e033c10df093344db88a255e27f6c934103a8db1c undefined -9d9144db8d068b5c0d0e7675d07ba25ac8219d4d71796b5e804fa547a9d1752b undefined -556689ceb98e3be22cfebc3b36dd63ef1e9af3b7107415401271c519b83b289d undefined -00c76fe8f1fd29a51a7a2a37f118b74a7a6bcc77af4508b2d4f8afa0f30ab286 undefined -faf1c0afda223ed3ea5f7489cc932d67b3b437fbc757f17a305e030cf522a553 undefined -f95b6405289f17000b1d3ff3a5622bb5287298a6243eb595bf08fd52d92f8967 undefined -8220c065fbbf189864b5c69a3030b4442127c5b14ba8d16cc2812603acdf458b undefined -8c44e804e8d46f8b30abbd26c7f555edc04660796554f39d9cea83ba0f6c4a2d undefined -350ac302de4edfd6e0da56d2809f815a3ddc293c1038d372206e327ee46cdd4e undefined -8680d89cd33ae2a3e517ddf42608ccca5133d74a3024f876ed8b00cca09a849b undefined -3c877410e5762a68e5c711f681d377109f51a1a1b7b6818330c678dd6648429e undefined -7a34e7afacb31f07180a6a7fe761e17ad183846a0e2653099da6598b47ecb060 undefined -a640c23cdf72775db905d3d548a2698da7b14114c6efd76f654c258451755196 undefined -7bdbcba53ab09765ef30e09bcd4b80888226f67a9c02e1403cfad4531afa4938 undefined -56e27738058b50089e281da81fb6c02f99b3a911fc43f0568664ce87460885ce undefined -53238032980b97ca6bdf3d475de8d5a96938dd2e08147a91a4e138cb662ef357 undefined -12061b27dcce1ec10528668b46beeaae3e696f17f33237ea0bd71ca5d57ac53d undefined -7978432678cedc2e0e8569821cbeb9322fb25608894f5bff255a10550623dc17 undefined -8deec0d122a8ef9be87ee8f9c69d89d83881add87db7cd209e9c459cd2235c8f undefined -e7ab164517a4750c92137d6f5a1ca93f469c303e59e159f6011a1ef46f52da5f undefined -d56d31384359c98bdb725f1219e3071dd030237688f101ef8654c813bdb3446c undefined -375a6d58e075cbb083c9d431cebe012dbe292fe0b140cc3f2c64fe8e960e5457 undefined -5ea400b4ff6bed10c53249ef87cdc234a37056542231be589f86b879ee1691eb undefined -5b91e7f247fd8117d0ace526383a1ad4191669e1eb1f155b887af692c7cf8ce9 undefined -36183aec1fe24f7aaee492152febd345455a5b152718cbd7e85ce81d10ec3841 undefined -aae303adba1d66b1e0f24f2424d912e1d8f300e21e5228d5bc454ec8b5a44c37 undefined -2822c4deb1fccf8d76479ab178fc0d8d6175f2be92f84346010d5fb5d594659c undefined -40bc4c8b34142a6c9e9cbb8d00fcab0b4fc74864054582d776a9a1c70bda7a78 undefined -fc5677faf43b70a81f7a3a56c2ccba63f2b371ef927f5b789adca6c9cba3598a undefined -491dfb39a9e31de6ed6059d3c22179f84601b4e7f026d32a990ac46ae5ada712 undefined -2a509bbcc6afe9eff34091187923f91e6298c45640a9c619731cc61c0c584047 undefined -d8f58641f00fc6eddb339dcc23c9bcb0f3ac568070a3807125920a0d372d896e undefined -47d0a70ab899c2952374ee54c060393bcd527b35bea8a7150e96b2211a12f969 undefined -2a9a0cb11c09dfd6b7ed85d895a181d489a8424d7bb47c8d2f1fd6811ca8636f undefined -0c36b5751de0c12f3dc8f62041949a6709c1a534859b8613ca1b0ca6d0c0bd58 undefined -4da15ea2d72ad4a7be99295ae8981a8d65c4808bd0ee8ada67567fe10c00e9a9 undefined -d39daed2546f1f9166b70e40c572d0283aac19c94459bbd104351eb64f8d782c undefined -ea789b3aa66faf8307da7135922ef7ae626d51eeba259b398d0b40a57359b605 undefined -a1f0da59f567674e95706c696afc51b50195d3f840d63f7edc7bcdda794ccba0 undefined -5c341fd5407602ed4e6f90a54a292bc71a8d82818f8fb3e960ae535ec44b3a65 undefined -a99f47c62aa6d3a8d323561292d2d0bb779223a60af488294cf710796c94bbd5 undefined -1f1550ce63fcc2a799a87c4af471ef846786aa48d154efbc1187a372219a9c12 undefined -99f7a62e30863f6cebf4641096647b19142fdbcffe097f9704ceb21f7c38d9df undefined -a3a6e18de9f888347f45443d231622528de39ecae466f3b0e51abb8157157e16 undefined -1bbb7d724669320fcb85efb233e8952dd9661e0a2086a8f990af6d71941770b4 undefined -8df80ee852bda9d9852a2cb467583d7f8aafd74f311540bd4dfaffcaf73b1e7c undefined -7ce71c34b6745a27705ea8b0ce6f2a23a997c8953fbdb8eda42ec0177da6bd35 undefined -ad668df5591a59ad8867fb1f6606f147cdda5f4c3637d71f8a806d76ed98df90 undefined -e9511d08de35658c4d25986cfccbcb977533ae5f42e2c5cfbc92ba7ccde528dd undefined -eb699995868522801a2699fcc808969737f12a82e4b2ef20f755ed7949fd58cc undefined -54aad64468d589941f921ac594eac0e0dcccc0ca0e3673a8649cfad233cd5554 undefined -f70c95db6ff5d9e37cd104d9028047a62e544cce34452a58ed47f9c1985aa5c4 undefined -0f9bdc0eced9d0711b1e39f5aff4d557eb8e483895e211bb3d7525601600bfbc undefined -9ac005a53f27441029ed23be12a83ccc04ff7feecd2642edc30c7688ca06552c undefined -0ad67feaf30bdeca1733150dd6803594f5e2c52e61d672f1d64d5b0670793adf undefined -81965395de04f93afa40c9a8fc4056e5ba3d43f1d0c68de2a47d301b12dd40df undefined -37317d22c326e41721df99c7df9dd3d39745cd0a03c9f8289e9de0a96cf0f75a undefined -ec1f470e718be260a34338079d185a79802ede3cf500fa430422c63da30a64e1 undefined -77b43ab1a4387c59aa0b3568ca0c0fc19183708518d0fc18b237a3ae73555cde undefined -00bd5422721e2524702dba7231d71bb435149371f5a9c0efef71401a2b2ecdc1 undefined -ab69c96d3532d2b2335c011cf74c2216cc7fc14a7cd41fe1f60dc4ed27df3bd1 undefined -c289e4b296d266e4570f3ab691603e0ea3525283e2b5b4e68c069e9e738c02ee undefined -d51562952455e5014d40ab48fa98f267e5e575f2b64ac21fedc09a8cd550872b undefined -21d57c9e4f323b22d6c50d7f5557d0f54fba126fbb112ad6570de31240fa90bf undefined -297b978ffb950783d250eb3658679ea49a8fb45b28fd99c2f92efc7553802341 undefined -36f2a38804350bd910ee8abe312e38be268d297d290819f728ea7d04d99a4ee4 undefined -b009f8510672963ccd9340da849341daaad5613223194a0db152b96c6c12fa8b undefined -cf3f950c545eba6fc6d6e467850222795c2475066f5307ad52b28624d929bc05 undefined -af8253d4e2ca4c07fb25fa0f3515465077cd40610e8ec5d140c81a0f77e6961d undefined -be79856bda439aedd86374a93ebd0d2c1532de98503309836ecc9251a19a05ac undefined -449a7e1d2a0bcadd0627059d60dbd378f4e3877ec5344f01dfa81bcdfd157bdf undefined -e1cf490134357ee178c47e761413c3ee3d9d2585ad27800009ce77b8f7cb8400 undefined -9a1511dda79958f5d5f6de8acae1efe4148141e00df445ce2146ea8b27543cde undefined -0349260cf6c24a1af0461ad5bee99bbbd094b18ff27eb6e95cb5bf4e4f63ee70 undefined -6686eb8d7af9728f610ac253ee80c8458f121f2485dcd6d3a59d75902d354e9e undefined -c67f2c0a232c45ee5b5e9d68e7ed2f46da55ebeb7ac5eb49ea3f7de4ebba96ee undefined -0aa2a481cfe7825c6badd34f8455e0e147a4bcace6028e9ea22437dd4b70db42 undefined -bab4b385871bb42dc31236397305ac290622b19c67ca0629556f092860841762 undefined -1c690fb60993743ef123845b5e9202e8967495898a01bca8d95b97541a66966e undefined -0b461e090645accd42f0de163ef155d61c6e83d11ef334a000565b6b9d24f9fb undefined -6fe9a06fb9e6f6afa5ad83bc74ce4d3c12aea70c31be8356c1ed2cb87402832a undefined -c4696fd547e5ccaa9734025eb14622c23d10336f647a0977b6d9b7cafbfc4188 undefined -43084eff59b231a5e6cefa802ffc631ec185e94ca692ed5406cb44ead88402e3 undefined -7acc35d866ad60b164b71b316198025f901c31009e1278d28587528eac06903a undefined -86eb8ff1a0cd76174e57bcf6fb84c763502da2e44b40e887f4b40deb6bbf8c03 undefined -d4e4ba015f69931d33fa5d1b8d89912b3e01771af7b83ecd23bad418f6679e23 undefined -b4a8750183a43deb5db4e6a47a1bfd25506c896476ce660b9e3fe6866e44a89a undefined -c1bec94342de3044bb170693b2f51551d9f5ee4b07fad95a4f9b057c6fe5dd80 undefined -083e76510f872a53824d3a109bd9e389683b9ed1df67a6651fabbaf526236d65 undefined -d65fc0acf067b9468d830ca059316aa839878973ff322cbc61a4cf77b21ec495 undefined -e9cc1371328b7fdf1ce121172423a0dcd01e46828ac71d69cf241dd273652ed6 undefined -cbeae8ef360d55d8604e30e8e82adbd5062ff6c07588053e2f4c953662f09d1e undefined -9361b16af13f7e335336a9dd0bc5516a606f195ba0f58444a54b125ab13cd6d4 undefined -9aefb684edadfcc4d86a2726cd30acc3aae9aba0e06bb749621e994172809bf5 undefined -443cf4b440d476d7c63e681cccc80505e237f8531b38369964752e57d5a8a474 undefined -9efd9efc82769a99cb29ac195a0d9574d97d8035b659242e69f258c3a07e8333 undefined -0ad5b273e05357bcfdb37521869a4c77e1738ea6b11c4faf93f09af487f3c29f undefined -e22f06cf8ad814ca2be3d8201661e478b2f3535e28e4d1a64f74730a8ca47812 undefined -9cb2edfd5788b0f4cdf3f24b30516eb5a3c9f6a21b3fb9badb93a4454f1e1aa2 undefined -c880988fdfaf8e9d916bfa341cc259899f2a93688c7a5d53aee76827855960d1 undefined -3f7b5e8d47ccbee5da9ef0a763489a59ae129cf5a37a4afc5dbe82a48d44ad69 undefined -a89523576631b48b2c14d0860b862b49810a9c848e44609b41eef615f819b9f8 undefined -e4831e6e1b86fb1b46f4edc9600ef76a1601e8230e8e895ef77f0d590db43cbe undefined -6d2aa54435867dbbcb423e1a44b1a0bc1bd927afcb977c96b1ea4fb4cb98cef9 undefined -3abc3060da008ab20d2be3849fe8f39a992986f082c55127ad915b686b26de89 undefined -bbe6b827c066439db40a389cf49c8f9540e5bcb0f5b03ded09244fbd06d0ce51 undefined -396398035127d682df2e515824454527643277abdba2fa7cffb61a76cb1df1be undefined -ffc7842ded5add0ea1ca190a03805cee4896ed58e1097be33b8ccbdf497006fc undefined -7dce606be7ac516e0ec2323c530b348b02e273482faf52595f3e23b842491713 undefined -19d9378a9559bdc54490203f34633181ac5f508919d90accc68a6afff296608a undefined -5cf33d59d70ea031ffa9bdf810abf20d448745072ddd0e9eda3dc144ca220739 undefined -61209a2b8e029d364046b6a8180352cca418bf517c87d62310f095e7d2d3adaf undefined -e7b3af0d80bcd055f976acbacbb84d2e5b8b023e2b82c6872c178429446c2446 undefined -9c19a6d0768b102e720d69873eec867e50049b945eda1328ca79ec514c83de72 undefined -7b82ca3c37954c6192542f8600955f9bfdfba826d3f6fa6c6bed66ae88acfae9 undefined -acef27db2d21e9a96889b0243adc4732ceea9e6536912a45fb9142c321a97e71 undefined -03d585b351558e03966c4749fafff57e729c9bdf8bc0625f667ef0cc4c024bad undefined -e0be738976942a7c0e9186366c7b19ed2dace21c6e6fd82adfe4e7720bbf98fd undefined -9304bf524f6793955741a754d2b93d5f1a1c0d81b11a3e1781f194f446bf7c8e undefined -184be5236833d1ad9605dd27c0a3813ff9cf94ff537d94e3d7743f232e5eb782 undefined -effcd9d5ca95a1e645f8eabc22b99132c444f49ac6e73ff98bd8c0c253d7c7f8 undefined -d2534ff9efae1030289a5eee1d05a82b4250df94c33b70c93012575c3b2d7443 undefined -a4b7c0f81a52bb69642ef206593aa7c781fb6ca4c823a50e50d0b8d3c33aca88 undefined -cfa78c6d98b1e5652395a4d2d9947d7732b7b0bfb125d691d56dfa275fb85f54 undefined -ee83853a19e03c611d6508a9b8b9c844880d097ebf20b3920c9a21770510f72b undefined -505d331858c06aeebd783da4304cda685b1bbd040f349c78494e1284d1601277 undefined -0f456d8ac7414ddcda2c8199ed28cc4edceb5c99c0494f706607bcc538d233a1 undefined -48502230983c5b3b056f592aad46e8c9ff059f3b3ada1f5bf420fca5613d4266 undefined -e8306f7d47ed39e9751c3b7e600ecae0474c1022f69dc8476e07297adf01d513 undefined -8ab8dfd837d1c6a2031af36a53a8584d1c7a9bbed5e3205d1355862be0843ef7 undefined -4acf6e0fbf3b5565309605d38afa582684db1b6c64cfbaff4e8ceba186dc5e71 undefined -930cbd1ecdebda00c7a779cb8154c1a1a83c79842debb48005e260e41eac22ff undefined -80e81b8e0d5af7e00cb9137e205421ddc9565c8455f377164a3d9c72dfc6cdb5 undefined -e13dde851aaf201a8a69f20a149b37bcfe8f276bba171e749bd298d854c65326 undefined -b187874c60cb10e3f0b9b7e590b34a0d3d4cbdee3fc62a1ec08fecfd8e069062 undefined -0e93715a994b613d882ed28c1a58c03642cda0edf3def0b39792577553b8fb6e undefined -b4c5c76d45344a734824ca946f7e74976f722ea8f923b3a5fff730bb256e8c09 undefined -7f47fb5c6e1d36d23c2f4dcd11769697a369b9b9bd7033844a2b683918029db2 undefined -e75bcbcea1edb3eea9e70f6eb462e1dc6c935b0a8401ea5ea450e456767e1223 undefined -b12b1c823084505452641dd16e0dcaa92952c014257812c0c1fb159e633fe435 undefined -b4c60a3b9ea7bb7b298b1668f790985c1aa509c84ef02019cbdef400eb3a11af undefined -c2d9908f9f9483b26fc8f647068f71794c78816251b8eb18d52f09bea609bd0d undefined -826834c36229a8cc74c9100bc0c138ce5d8d8ae31d283a71936d995b7515f4bb undefined -b93d6cc4e3be7049eb5cd67e4418b570040b76ab1a493121eb98430a4b99f997 undefined -c7053854fcb8bd90019d5904d4c516530da543ed15faad061981f23b8377f6a8 undefined -3bc3224e03f81d4f3ae15f5f52dedfc0599c2b61e633a514e8ff39920a8034bf undefined -0c42f62ba0f758aa2d56f1eee684623a9a36877ed4fd1dd6f81ad8f7cfe3d65d undefined -63933a65c14a2ce196347fee9028b6b55c1d1787c5a300b4127ba3fa5e75bfc6 undefined -6f67f2137c4f7e0ebbbea7b0932c29cf399cebf58173b0e1c65b05bfb59a7724 undefined -d34a60a575f8544ec07ddb384430c6e9241d485a84cf342a57e377ae871259fd undefined -07f8a58d666d885d21f54d16a7981e95f4a0a7be55ae24aa3d542d4a88083b31 undefined -e08eb5d960003e406a06d374d0d2b6d4bbf0c74a1d85b521d422e1cd63f1fd11 undefined -21863756722ec0caee67b38df0fd6a20c2eedd3a043cf87e683d18ef01d44f5f undefined -60f03c564bce96ff71dba10827da75c9975ca59d8ea215bb5e8076c645864813 undefined -85b8a414c8153f4c9da829f31578cfcd5327008aad9fb6f80dbff21c9d4205fd undefined -0e9bd714046074147ab0f8304e98802cd27a2553209314c0d0fc330947bda5aa undefined -3980e55d04c31c1b3bf9f4969ea249b66988c05e8be142132318e8bea2cf300c undefined -1a4c260bb5713e1efb60cc714b320db770925d15368641a718fe7dbc45a6ede1 undefined -be4755f473b4e188e6ba773439c85270ddc985f151ce591dfafcd06346f332a7 undefined -c87e64ce1bb41db4518fcd61250792a0bd849e460c6141c4b154917d225c8cb0 undefined -0a261ababf7b8b90ea121b6fb0b21b52fdabc7f2b75d47f4ed494bf0183b3413 undefined -c9d513563542ad2271a5bdc732c2e7f9f1157c488f36334d0a9e314b484268f2 undefined -9cdf740b2733523c570dc8d636fce31978d2f31a680b82417a1553ca9cbead2a undefined -9dd5b5289046e084e8a41b28ebe2fc50193b5974ac4a5be3674fc9e6cfbbd666 undefined -2e560b6e7c6d0d70a95bee77fe9eb94c710c82c10dbe8862c7258f1d8c5d2298 undefined -218fc410a981ae825c0d25496bbb6e94376036aabe5c1d9e45773031d75716f2 undefined -46ff1cc27e392f65e744356139b9c245e678c3d4ff9467072075bcfa6c967f3d undefined -849337a7b7c646391be1ce7a477c632b8579d3aa98d95c24643862947b6d55d3 undefined -b018750d7e57b53c3966eb7ad21ef6a09d435ef639513a5ed80c19e12eff9501 undefined -be5b1af565df5527a6845f2fd502855e1b57faeec2785da565432a7a40c00359 undefined -224b01b864d850436f60294aaf413a99b16555232108b9bc4cc503d0dfabc57c undefined -41026f640c42dabe32cf554f716285b98362d7811c13c2ca77c00ac266ea9bc3 undefined -2faf12778fb0ad5cc485321d66b1743e6403eec1837965339cc0f516aee4d4d1 undefined -7427058b9f2443c4106bb913b8fbf67f8a582525b279a85cf6ca169ff70b5205 undefined -8b0968f1e2059f14388d2e9b97f02ba91fc464756f338699416ed4aa99a78cf5 undefined -5fede47789117f75e4ffdb84526609ed95211fadbfeb069ff1c236962e7392e9 undefined -1cf63d625560f9dafb86c3c5f0449b087443793b940d573a9bc51b8b7d223b90 undefined -daac28f485b52d87f61f8a307f6b957d5d0499d4908ba095893f7a8643a2be11 undefined -3cb58d91cf901eac1c1660855215b0fdee6ad7995e6010a64c145b1e71e160c0 undefined -03b51c0e161d8351a2e7704af2be5540bd50d0730e9608d1ea9eeebe3741ccb3 undefined -e3eede48d0856b77b02a77cf0e804cc64a1c2bd3e6c315156f37f5bec80d2f93 undefined -e0004835741ab5cc54210b1ada9d18a62106cfef80c52eae137975774dfb38ab undefined -9d1640119173cc815dfe2585b60c304c7eb04edd28b8ab4493be645e1ecb2f20 undefined -1bf20c49e3b59248c72b4ed82aa3f7965616c35d1c60c2262086acc8fefba30d undefined -b964b4ef5996ec90172875fb5cb3b99db5be83cb0141b558e66bde043755d436 undefined -2cc09c1b087f906824025314968090397b7bac6aa051596f6a97c0f628c7bbe6 undefined -f368034f2bf3bd31820c8c68ef48b3a48d75311081b42ae73b7f81141e123521 undefined -8412f7231a5df139cb3ff0bb3369c34100cefd7ee0e580ddfd3fa41f5979d499 undefined -e2cb36510a2b17470819abcebe6fd850705cd2dd8be8d5b159f5443732467b4b undefined -90697c7e37c602319bd8c0116c987c33172099c3dcb223b181f2d5ecf6874f44 undefined -a36a5e879ac7d202cf8b250a6ce5cdb7023bda76908fc421961333866badfaaf undefined -f7a2801f1ae98ffbda8faec436f64bbbf01f8b6860b62afc44ca5b4e167e9314 undefined -416cb98593dae9eaeaf2ade0e705fc245b739a5c942c887bb09f929b62ed20fa undefined -f2fd1db127713f643d1e5bf8d933dba44498a908f6d7ea5dc2c66a01f18ca319 undefined -219ba97564a5f7b7a87267b78722df2e21d53487b40f5def7c07e0e9bb495e5b undefined -944ac8431163dabaca48400eb7d536b00e0f5d186a4740016686a6b7947ea71b undefined -1c4d2df36f4ca80aa242c9dd4d7c82d9420fdb7955b72f7a0abf472359549674 undefined -9c88a67ca8da7681ee8a3556fa7c3b9e54b8c37479ae2872a233f5e1505801b6 undefined -c2a297e1c66eec3cf10cb9820eef9a44a0908805bf9b1475dc19d1e29c3def12 undefined -07e4b00dabbc498858060be306229bf2dac5579fe5803f642da43b6ee30b1c00 undefined -ccc422589003feb274d01494bbbda394dd99d523525951b8d6df3dc17374c628 undefined -d0c63cb6c7ad8fb2b405ebb66a38d7c5b0e950fa389b235fa4fdf5b47a2861b2 undefined -192f53587f9fa0e7c26c03ec7117fa2063b201a543ec27c81c6aca7ffc2d44ae undefined -21cef8bf8a4101f6e068f518b99a1b02bdb7e7430956c4897e2ff9c13064ca22 undefined -9633db3338990db3cb994e899a9b48b1b1404ce5187edd8ba30fda5b12208d3e undefined -e64aa6012be2555e851455fcf2aba6abe1a26dedd69c66d0251bf9cf9df42947 undefined -8d951a926d097b61d392811e21d9399f78024272a095311863b1cfa206a74784 undefined -8d9e9f379371b85b2b65bb03fb60bc628e28e3f7f7e3609545bfbf6fdbb49441 undefined -b118bb6a94cb27b984e1cdaec1c99915c5aaa48f6f77f72cdbb5cd0fb1896a1c undefined -223c198d4ddb3b98b56cc61ae955bfffc043d106da6b797531d0b6bd80b98d27 undefined -81a2988f75e6b38d1849bf10921591c1ede959860788253ed936f35fa797ad2d undefined -a5ca5991d64d82bc66021f9ee275a42610ffe8fdf757648242756e7c9884a2df undefined -71e1c6bd94ecb15640969dcc59e1de6d684f3ab2a6bfcf540272dc5d072d524d undefined -25ed878e6315c8e57ea95cf00ed4934c7e29074ff9e1fc8b33c3997039f10e58 undefined -92ae2335774a06e4c63fefb8cfb82b7d1a5c7b39e38d28a04f2a2d17d39153fb undefined -040510bf1bed16c88e8007da60c12dfe5d194b557706e6c1c9af3394192ff970 undefined -a59f7100a2292f1071711b99eca40c4d460df356509dddf62f0ee2549dde2761 undefined -5e595f19d59a487139c938014af181bf195df439b587255d9f5615fa60530c77 undefined -3b07ee2f778b6cfb44ab6a0d246e844d0304a5b2ca17ff90504f6ac502713f17 undefined -34a42b6d58ec3cb5f835e1b5a39dea370eabb77e5864e40c185a185af641a067 undefined -3b01bc1ebc9e4fcee170a54550de85e392d0ff4cebebd942f6a31e055d29b0cb undefined -64c579bc38331f0d32fd1dbc0ec1843c289223fedf38f41223f66a8d26f44345 undefined -080a3a71f1605b1ef85cb0388f00d99cffd4f9f4afcf830b4f313e285d6bd9ee undefined -cecfc38b3cdebb00d985f401072a179db63720232fcc3cfc98978b70fa407254 undefined -f0ae832843292201300fa5755066e3eeb56b95da50a49a69576d2991d57d8d60 undefined -172621129c8cc043f1c7ed14d67f59a03ea32b64b701c374e952e695d4f5d983 undefined -a230e92354c058b517dd3939dcd86c06560b0ed59b20465a6e680ae5f14cb132 undefined -18eff5040ad7e9b2e1455186bf2a416dca4c12ace46b9ea77a4e8f2f9876d0ef undefined -5983fe64b2708c316eaa19d56f8cf25fa6e36628e94a01e0eafa6652fcf3a202 undefined -e383a27f46a7fb200083f0e67715667f896dd5de2cf718b54821122770ac2b39 undefined -829e985e3983433fc7e042122e420bf8573df44c89a8a9ca14f133be69fbff65 undefined -83ae578838b4b6c782e5e789aa6d1b6202323558cbab26cad6b90813a99f43ac undefined -97f8454394e32626eca962b6d5f0518a5d6d34c0510073e4492dd634cd86b856 undefined -19bccf3d1d60a038e2d565ff056273173c8068f5fda143b21b5930b8153e9ec8 undefined -ece4186e64145ed8aed4b73b2c0bf18a70d84f0a612440713de599fa008cd303 undefined -3470792f12393571bee8ad1412237e6a9a8bd1bf4dcc27e19b2ae76c7ad4746a undefined -f5d43934bd602f11cb5b8040d02eb38d4ad4c784f734bc8102cbfc5e90c2aa2f undefined -498a88c3d920ede6d7fc13ce92368391638d49e3d81d9069cdbf0dd2460a71fb undefined -051f8f0e9c141d3eb19a650ae26aed937c8f921f9abe3d90de60fcd20163a4fb undefined -fe2e11938ecbee5a9e93a3233c2daed53a0302915c0c926525a11aab8a512b21 undefined -f95cdc1fbe6663a5c2b1340447673583d77c158589ca757d0ce87aa99dee3a11 undefined -2531da0328bae393bdec6d08ba6e7356a48d782460301fb32d1012759010c8a0 undefined -667596e29a688ea5b55ea0c597551da8d9300637c63c4cbb8a93e2411a600d3c undefined -480af52ead65c364c0b46a8dbefb63d61517e156e4a7ed0996ed11f6b5cb38f0 undefined -da4e4631c39919f740cc74bddb2b8065eaaa5c213f3b1c19d33d218ec111664d undefined -e04f67be955ab095688188f1b12755ff78c15bd863f5556ccd2a9c1803754d16 undefined -6be574c2eeee7a26bc4956439a273b2a881661719f9b077ef41a8d5ecaabf8b0 undefined -44627026daf89397b5785a35f9209303d3ba377819d03bf2252b618df36889b4 undefined -e16bf7bb3d81e2003c301d60f137530be257374c684394351c332e719ace1228 undefined -4bdf34cb3d163dc6dbe3aba99bbc85eb3e833f6aee8719570d471730f7121498 undefined -ef2f657dcd855ccb11730c74272f68d7251c143e5d52898350f6af1dc35d0238 undefined -a767deb31bd525145085aa0266d04534040089f5fa9b0b76dbcdf8a60d5ae142 undefined -97df3dd32106517df97f66bda56780510ae9f6797bf79982ff66e1ab42c61833 undefined -9b93d7daf7213a6fa110d4335759c3443a63baaf02caff85b050b93e2fa7e08a undefined -3a73e26402f39e5f01d29b1da2bf52384bca37a75493e5d2cbdd9d9e16a00c6a undefined -405294a4ef4bd3970ecaba6cf0e6e7df79e70e3c1b852a430632ba13554d722c undefined -a8d05f277eb2ca8007a2d0eb514a056d6a065d5d66db5966a0b492683fcabb25 undefined -d04aa4f9da0e35ff36c2973ce9fd92e25d4af7054ca3adb79cf8ebac5af7c0b8 undefined -ae1907d41e0d3707cc51aba098a68408a61920a8e0dbb361c40edcca09360c6e undefined -6fbcb61be8cd342d851cf3707079f763a7edb4fd3385ba113288da4d5c2d93a0 undefined -2f3881870514e5ee13a59ff53a4c64abe6ab1a7c2f106768f2fdef3a829afe71 undefined -decd0a2c9902837d81bfa566eeb831a328254735d2c7115e653c28b5d81b59a0 undefined -df83bbabf3d3957a88783f0d76762cc42e0603cea4d0968aee90781e994e1067 undefined -80afdc6d02405dd21d13e4d58bd5202367191c78409c77de7578ae756f0f7b9b undefined -6bdbfc3052a7a7a0ef173638e57c98cc76a6d4db9e4c2181237bb7fdaf9d4169 undefined -9356e01b5e1fe32a773f73d4a448400a510c841fb6508fa02f2c8923c0ce6fab undefined -99977cc0e63a2a0a45833abaa953ec08a0db3c5452f62fd7938980462f638c8d undefined -2ef70f006e32eeae6d72cfd5d92e966f0e49c86b94c3b947cf21757576c5d954 undefined -81ffbceedc3307a7ac7026c7267b6d8af98f37bfc0baa9bc78ab9f7fdcbfaf7b undefined -4f7f83601b11574198bfb4c953392a97a13435930f86736be944ba2253809d9b undefined -8a0c91a128cd1b132936ea6fd9ce4644018f39eda46e758ca31b103f2926f993 undefined -a5004568db6cba1cb5d62a7d746ccafd1862e509ba52cfec928bbc6da7dbaa18 undefined -f60e9307874ba26716fef5094196efbedf064d4da4dceb1831479c4fd5b035af undefined -411375b7360b34ae5966a82b0f3adc65f9897963e044b827a198e454f80ad330 undefined -40c8f89f169c5f279998763b298a3f29386b5412c07d138ae2ecd597603b9643 undefined -558a1e87dfac396b4eacf2bb75a39208a67b424415727b114081c251c2219e86 undefined -7d5638fd9f240a6015ff701c3f9346c045e9a92b1f6c750cfbc7bd6b0ec5b092 undefined -dcbe1adeea2ed0c25a2dc3e3dafe20391ff005439c9d1785876acf01291f004a undefined -a935d0a04203323bc3c8a9d1df77dae656e01f605947be8ebf5ae68b77d4ed46 undefined -0d9fde8ff36196a70e020bc8f5b1bfde13f380821f485928c1ed645fa2739724 undefined -9fb86193e60699e4b4bc65f45dff6e600aef04411432d94dc83447eb1ad254d1 undefined -5652df97e0c8707cb7b072fd20d5bf8968684ad89de6a5cd64028cfcd3b1a313 undefined -5dd9e8b0499a611292131369157dc87727631c381a800fe6ccece7eafca54997 undefined -e7d93f100a4f5f23608267b36558d910471426009708b8910447910970c010e3 undefined -19c02e71a9b35fa26bcb7d87844f61d715da3d440e522a391f81b27008f156d9 undefined -3438dffb4b10a738a92fcffcb53409730957a4103fa0feea87b662bbcf32b0aa undefined -5c6ac7632d0b339d26af1a5a67f380b383001327e7d8317e167f7b11cbf1ac09 undefined -db6f178cfdb06c29ff8dc72e721da34344fab70ac35d332d2e0cfca19345ac1d undefined -021c7bdbddbef863b9cf8879ce83ddfd69dec7c56082eebc6a67eb4504b83858 undefined -1ec1cb9305de93a135f16137ea3ff2e984a3ca4a0eb1469a9864a275b59c3526 undefined -0cf15720c2fb614bcaa94a82b7354e7c63a3aa8a270233409b298cca19f436dc undefined -3cc822516ceb5f626f0ba10d0105aa1a2020104711ca6479a4f3fb9afbd80524 undefined -2a9295bfc1b82166e077e973e450679d02ee2947ea5d5481308a37f325f0daa5 undefined -593667165e8197d89313997696c14b609b16bfcab5bee9de80a238eb5c0011e4 undefined -86cd3c76d23fba5e59244c5af99d44af7bccaf2b891ce171aaeef609fe8ee8e2 undefined -e38e93fc1d5d9791bbaa82aac0db93c69db9307f8b9ed8b117752b7423571483 undefined -7c24bd9013371428e21677e6e6b05a02c0854ed7c53dcf15a338ed884ebc0bf8 undefined -f1db829afefbe25e092395c5d42882d7a365403d5b260c54f7e82e78768c5f9d undefined -ea05b200b9a872ffd4ccf757bc69de89d5d9eea3d80713c85be707322b43ff4e undefined -376ba40d335cfa1015ad55e3c94a85404100bcf21d699476bf809b38eef91b29 undefined +9afe9413399aa0b6ccc967ad5928b3e6f8e1bc2e6d0b87b4876edf6242fed903 PkgTTC-Iosevka-29.0.0.zip +848e7e1f661de95b53d53e71bdcb47faf8f031bd1564d8d78923a82eb892ea9b PkgTTC-IosevkaAile-29.0.0.zip +4a78bae1a6b3baae63779919975fe47011da06fda21156116399f6ef62cb5139 PkgTTC-IosevkaCurly-29.0.0.zip +4a8666e726fc1f8526e00c1b5370d6b7b8e4d46bc3519d64c902dd9de1a67314 PkgTTC-IosevkaCurlySlab-29.0.0.zip +41bcd5504aae2adb89a8e133b66f61d5566b0c136aa2c6ab7b63365254ad486a PkgTTC-IosevkaEtoile-29.0.0.zip +ec5f213035ecfbd13214434f18fc7c6f512e6990263dd84f2a4daa47a6ecc298 PkgTTC-IosevkaSS01-29.0.0.zip +52c25e50c08d3e38ac7f7d8491934fc3ac5c289703d3344db7d2828d76c5cdc3 PkgTTC-IosevkaSS02-29.0.0.zip +21982913a96de7370dec271afbf23717c3a11aa1270de4a5126dd95849f6f148 PkgTTC-IosevkaSS03-29.0.0.zip +c0b83e36ebb479065e0795a4cc7704d948072063e591c7d404494004f3858e3e PkgTTC-IosevkaSS04-29.0.0.zip +71e2d2db6da4c1c8b651367e6729de070b62d31c9a745bbc51896e876349efd4 PkgTTC-IosevkaSS05-29.0.0.zip +8b51f0198b602a5f95cc216cae2682b797f46e39890d0b229e7a4447ca82a47e PkgTTC-IosevkaSS06-29.0.0.zip +7c617944faf2dcdcf7c7e735cdc513c86b56cc111da43bcee28d8ed1452633ea PkgTTC-IosevkaSS07-29.0.0.zip +602758011223c4e610a32eadd89eeb929e3c3e8eb39b69a95edf8a679f5f5202 PkgTTC-IosevkaSS08-29.0.0.zip +362fdd4d34d60360978e916fd39bf45e990273bac0693e70ceb5062701b282dd PkgTTC-IosevkaSS09-29.0.0.zip +f2bc7d4703c31ea4ebb7ab91b8a88fa617b64126fb7d8c831b620bfb41d62271 PkgTTC-IosevkaSS10-29.0.0.zip +2096f53c7d7c1d565ddf25dc0a8dcd8f06888797850f55cebe687c7531f501d4 PkgTTC-IosevkaSS11-29.0.0.zip +652a4e6ec9a8dd20f4ee5ea009e9f9624157075206c7094a5d528397aa9e4f23 PkgTTC-IosevkaSS12-29.0.0.zip +b7780017065dc2b66b7f40cf77bf30bca03cdc4138efbc5a9688032f6d05dcbe PkgTTC-IosevkaSS13-29.0.0.zip +8a1810195e851776daaa4938e61e55cc52ebfa49372f940f8ba34bde46c562bf PkgTTC-IosevkaSS14-29.0.0.zip +3250fdcb8efa0e9d41313e2d2eb85ec4852b2c183177f831867b757c436ef771 PkgTTC-IosevkaSS15-29.0.0.zip +684ae49fd1a85169e66660209a8af9084c0128e2f90359b8dbdaa268f0c9daf9 PkgTTC-IosevkaSS16-29.0.0.zip +07bc2e6b671b577a54324ee4f15552dc5e76caee2a48af26b9f1fcc95f15bf7b PkgTTC-IosevkaSS17-29.0.0.zip +c15ebd84efc4c4bd061c8ed7f910ab30951f384f48bd79664c4ace2efbcda366 PkgTTC-IosevkaSS18-29.0.0.zip +58d68f906ce3abbe930db6fba91958bba074cbea12c38fea50d34702838b3735 PkgTTC-IosevkaSlab-29.0.0.zip +6caf59648906f5259e6b54fc0fb0db9ca0ec3ddd0c9277c6007cd5ac40e7138c PkgTTC-SGr-Iosevka-29.0.0.zip +a264a8c46355f679f1f68ccf538aacf1d27c72d794f813a4c471bc41919d93cd PkgTTC-SGr-IosevkaCurly-29.0.0.zip +a5e75ac2c7d29666788a35258fc5da1a67726b37d7a619294fc5761cf81a0db3 PkgTTC-SGr-IosevkaCurlySlab-29.0.0.zip +f3a139ba89d695881eb3aed3e8b3649d6b954ba6f35cc688be288144f1e3eb7b PkgTTC-SGr-IosevkaFixed-29.0.0.zip +44d8f552c3ef367cec4a657d121a06160633b7da27fceb3d508fd7256c0e36f8 PkgTTC-SGr-IosevkaFixedCurly-29.0.0.zip +65ecbb197bd77db17c6986b9bb3aaa09b686305fe194c98a3eaa466c800c082a PkgTTC-SGr-IosevkaFixedCurlySlab-29.0.0.zip +6a403f29a7fb81419c7d51215388bd1dbd753581b2d610264f1ff05c3d006686 PkgTTC-SGr-IosevkaFixedSS01-29.0.0.zip +175c5b5fd34760f68e65dd390685034725259c9e8701aefdf2bf492e8eb23f18 PkgTTC-SGr-IosevkaFixedSS02-29.0.0.zip +bc2792c28be59d8f32eeeb1978a49d6faaa4c833e17f788de3da65f86fc78515 PkgTTC-SGr-IosevkaFixedSS03-29.0.0.zip +02dca685fd31f2930e9344bc25e98db94f018039ba9d6b0cf86fce404c88cce2 PkgTTC-SGr-IosevkaFixedSS04-29.0.0.zip +ccc5eac329935f5733d20700fa89391b738a2aeff52a90f61b94b17894588f9f PkgTTC-SGr-IosevkaFixedSS05-29.0.0.zip +532a342434fb089df5be464189e72b88a584357c2ccf0a3758bcef3918b77375 PkgTTC-SGr-IosevkaFixedSS06-29.0.0.zip +c57e065ad4fe90c99221c1d9326865b4655e17d8f916ceb62f18a4960aaafc0e PkgTTC-SGr-IosevkaFixedSS07-29.0.0.zip +e1bb4a2cd4fd6fd2ca64ac705d300683e38b7fb1370a36c21bebaf58ba9b5b4f PkgTTC-SGr-IosevkaFixedSS08-29.0.0.zip +263d454e843803abdcb22b29ebffa936c7de84e0e35d9cbd2e4428d86a3b0187 PkgTTC-SGr-IosevkaFixedSS09-29.0.0.zip +e2f2d37328fc7d65c510f60e38a6775731debc7e2ef622e4fbd5266b8e15b754 PkgTTC-SGr-IosevkaFixedSS10-29.0.0.zip +6aa38d724e4b2646d0a12c902fabc961bbf9ebf7770354901f7b768567910fff PkgTTC-SGr-IosevkaFixedSS11-29.0.0.zip +081925fc0bcdad4f294bbb5c9ef6465923f0b2b210c6bd2a19309c223232a0a9 PkgTTC-SGr-IosevkaFixedSS12-29.0.0.zip +25c6ee16c250a1e23fc027973f5350f3fd76a73bb1feb7f3d2b7847f0ee15f67 PkgTTC-SGr-IosevkaFixedSS13-29.0.0.zip +d36098fcf2e98356afb00959c1382493f6eeb90c3fcfcc227b37b4f4ccdd7ba2 PkgTTC-SGr-IosevkaFixedSS14-29.0.0.zip +9986bc9218be8f119446284c36f7c3ee9440a15a0b0f3e68d68260274e26dcda PkgTTC-SGr-IosevkaFixedSS15-29.0.0.zip +4d77fff01f6117d7b3daf1a9497f1fda80b34079bfdbb7e248e123731675e17d PkgTTC-SGr-IosevkaFixedSS16-29.0.0.zip +c9bf8cb30bc767ffe72233c6ec5717a01128cdd867625dd9e3a5a6373d5a8f65 PkgTTC-SGr-IosevkaFixedSS17-29.0.0.zip +771a9f4aae0e0b290b42d21d653bc9130276e937c97bd274793923a79e4d80ef PkgTTC-SGr-IosevkaFixedSS18-29.0.0.zip +0ce47c22edce18a2370390e2cc6774040fb5094dde0b4e5c3be3327645f6ffad PkgTTC-SGr-IosevkaFixedSlab-29.0.0.zip +4af563f515acc30dfa7014313a419e4642d3753be1258c85640c5c241239138b PkgTTC-SGr-IosevkaSS01-29.0.0.zip +1f670a856048c33ac2f21250ee811084f8b265c5a7f763245c5ba552cc2a9c53 PkgTTC-SGr-IosevkaSS02-29.0.0.zip +e408c66ff42b73988306d70dcb7742298814d3d2c9e1a2784de2f038b4d87f94 PkgTTC-SGr-IosevkaSS03-29.0.0.zip +d4de6c7b2b511c520ada8af3f740f10e21a27d56fe88415eb2aaf9f9455c5a9f PkgTTC-SGr-IosevkaSS04-29.0.0.zip +e11b94fcd356ef547528405d8ae379458238e6c954dd283f5e15f649bb46c82c PkgTTC-SGr-IosevkaSS05-29.0.0.zip +1560e4769616eee3b61dc806106c4e3861ed641f246c7d196f93c0c82104a35a PkgTTC-SGr-IosevkaSS06-29.0.0.zip +27d83d1b60a797f269398f910a1516cad337da9f7436985d7aaa74e873aa72c0 PkgTTC-SGr-IosevkaSS07-29.0.0.zip +64e65cfbf5a8bcdb2c16c8d1e406b6d1e5294632496d9e5057c65fa97d2aacea PkgTTC-SGr-IosevkaSS08-29.0.0.zip +e5580b257c1d81182a6b887c9a284253fa89d9c3433d8b342486e69d0199dd58 PkgTTC-SGr-IosevkaSS09-29.0.0.zip +b9f0495ceb3e3b1dd88161bd6d2a0ce2d649d6b25c0274c07308689745e24dc9 PkgTTC-SGr-IosevkaSS10-29.0.0.zip +1e05f72189b8fbd8574563fbf2d45b67ef3d7a36bac29e0acec6924537498b80 PkgTTC-SGr-IosevkaSS11-29.0.0.zip +02045dafa0e00800a35928e57f3e162f0d20d48e5e33cea8aa839a5787e495ac PkgTTC-SGr-IosevkaSS12-29.0.0.zip +b1938ec316895185ade1b6a50be92dd5b67e07b968ae268cd551d8f2aa877677 PkgTTC-SGr-IosevkaSS13-29.0.0.zip +5604b8d97309b6a654e4962afe5e8c5f6e2eced8c0c698d092f2b8ced7eebba9 PkgTTC-SGr-IosevkaSS14-29.0.0.zip +89962c4e5a2f261dcdbb46d9b725e31b8948ea76414f6ccd781245c421f56b43 PkgTTC-SGr-IosevkaSS15-29.0.0.zip +fd97a8b71dba657b3051f10ca560331d13592ccdfe84c9466e00a7d0c4941f89 PkgTTC-SGr-IosevkaSS16-29.0.0.zip +e460591b900d040f796e174f690deb778e5f89bc90112e00b53377ff518bdfb0 PkgTTC-SGr-IosevkaSS17-29.0.0.zip +31ec00f746544b81f0b17caf34edc9f9b4fc384c80c09fb387ce1662f1f7ebea PkgTTC-SGr-IosevkaSS18-29.0.0.zip +2356c9e92283d9900874bd78944044f61c4d9a2cf610af3df892ebf277deef01 PkgTTC-SGr-IosevkaSlab-29.0.0.zip +447d95d27bdba83c71d4c5bd70338c0e197767b5e28da5ec4214f1a7e8464409 PkgTTC-SGr-IosevkaTerm-29.0.0.zip +7fab8bda581c8a4a1b044fc72e6024a6fee08ae75d4e6331c453eac009484e0c PkgTTC-SGr-IosevkaTermCurly-29.0.0.zip +86bdedf340e9f6c3e397f5d63417510138e94e3a3b4d7d25e10dbacd6df2622e PkgTTC-SGr-IosevkaTermCurlySlab-29.0.0.zip +7ba4d8de99a9401de7085b8171a2c6afb8b8c3dc3de3159ec89559dd5c2b2199 PkgTTC-SGr-IosevkaTermSS01-29.0.0.zip +9899cae6e8e100e65523e516e15cdcb989a28c47ed4388415549e327cf739323 PkgTTC-SGr-IosevkaTermSS02-29.0.0.zip +3e33dd833f0c2935d1a394c6cdd52143a87175a6af53d1b68cd707851f515acb PkgTTC-SGr-IosevkaTermSS03-29.0.0.zip +c49a547a3ee28e314048e970ee70078ca95dd88ed57216a5a58462db4dcde0fd PkgTTC-SGr-IosevkaTermSS04-29.0.0.zip +246b5e1e83c9eaf2701d21acb6969820e5134514cb5f78f6cb6f4624d5510301 PkgTTC-SGr-IosevkaTermSS05-29.0.0.zip +f56a8f0f17fdb6a053819563438bb15867704f076677032e71abc7bc535cd8c6 PkgTTC-SGr-IosevkaTermSS06-29.0.0.zip +cc9f481a4017b2436b8cdc2477bd34db816ecf47459c479d5735e86e7e91d0ef PkgTTC-SGr-IosevkaTermSS07-29.0.0.zip +e7d04e5ced68750634a40a4b9abccbcdb8ce53d3c01d6324ab235a9bef26c22d PkgTTC-SGr-IosevkaTermSS08-29.0.0.zip +866893b5f34dd5a40814cb53a4a229e0f9fbd738d9b1d7b2eb885c29cf93c224 PkgTTC-SGr-IosevkaTermSS09-29.0.0.zip +abba70ba91790f955d8e4492c87b08ed99d35cc0451ce165385c7f25c80f5fef PkgTTC-SGr-IosevkaTermSS10-29.0.0.zip +944c340acfb6c6210799c3613a8d60efabe4d5d3ddb44a9267d057bca40b3c8e PkgTTC-SGr-IosevkaTermSS11-29.0.0.zip +00227ca44f55e85f993bf1f5883913970b8ef37c35e001ac74c3493069431d97 PkgTTC-SGr-IosevkaTermSS12-29.0.0.zip +ba089237b7e51c454ca563c85c68317c35f59fee2b78d460cdc9f41a46d76e37 PkgTTC-SGr-IosevkaTermSS13-29.0.0.zip +31e40a2882705f0d9a7815836f94de1a973cf0bd8786af45ed1bd2c3726ade08 PkgTTC-SGr-IosevkaTermSS14-29.0.0.zip +d7744fad289084f18bc8c22637b678cab8bc4c9ff8cba181ce0a575cbc1fce30 PkgTTC-SGr-IosevkaTermSS15-29.0.0.zip +68372281b8051652f32107b3cda0363aa4d0edc3f6c848c1f0512376ebd28083 PkgTTC-SGr-IosevkaTermSS16-29.0.0.zip +3c2fbb65e2ff73f56a3910a07696b70979121c73a8ede8898e43a29722903efb PkgTTC-SGr-IosevkaTermSS17-29.0.0.zip +f2cf5f0c8a1d1361040c5da451754fd9bce6ca5edd7dd6696d1d51a572492181 PkgTTC-SGr-IosevkaTermSS18-29.0.0.zip +c12063e59aff4d65efe6d263af74d7c6f1e67f3c07a591a0ec0100639407f708 PkgTTC-SGr-IosevkaTermSlab-29.0.0.zip +9f27b64c70e445246e518ce434a226e8a39eeb8e91967862c5772f28fb0fc4dc PkgTTF-Iosevka-29.0.0.zip +43520ef52205cd9f82ba52927a6fe866ca60bc1403bb8d98431cb36eb1cf67fd PkgTTF-IosevkaAile-29.0.0.zip +308c5161b5db39ddad176a83ce2b227b8e85099ea852e0021d6778404d1430a6 PkgTTF-IosevkaCurly-29.0.0.zip +6ebfca06361bb1f5a2a43835ce58fe857f4c29f3e61ae875a708b57abb821f58 PkgTTF-IosevkaCurlySlab-29.0.0.zip +00340c41c73d5046c867448b878011e9d5bf0be1b3c48ac9fe3277e46d6c236a PkgTTF-IosevkaEtoile-29.0.0.zip +9e8ba2b4418f5eedc654db2b440c9e8582ae36b1411b11b43b9bf71827f1aecf PkgTTF-IosevkaFixed-29.0.0.zip +8456923c355255fa24cf00e81d805264e37996d740b9ad3667728257649a2cb1 PkgTTF-IosevkaFixedCurly-29.0.0.zip +f0391cc3add5c1c5495bf9afce331ad8e8da38d64e4d5e1a56d70a132dcfbd70 PkgTTF-IosevkaFixedCurlySlab-29.0.0.zip +1bbd890860fb5277d5c46dd2890192b4f2bfea190bda0ce64de0810af06c77d2 PkgTTF-IosevkaFixedSS01-29.0.0.zip +7e91a1f9fa821dd56b2ef72ed4407ca62efba44371bc2ef420760eb62249f5f4 PkgTTF-IosevkaFixedSS02-29.0.0.zip +65312e51592ffe4676e8a03d6aa703883898d4fb1eb82d2da6b11d361f9db71a PkgTTF-IosevkaFixedSS03-29.0.0.zip +17415afbdc4ae96544766f059f024b1862146303c9073271900b4fd3fd478eca PkgTTF-IosevkaFixedSS04-29.0.0.zip +549ce79cd3680d1ca75922845ea592ab7c1972d2ef1d6fd3094e559057d33501 PkgTTF-IosevkaFixedSS05-29.0.0.zip +33b9a14c105994756e33ffb7380159315b1aa2aba6aaf5aeff1491b1a64dd8bf PkgTTF-IosevkaFixedSS06-29.0.0.zip +9520cbcca8837ac747fbac35a98386ad1b09a006a4b9c958d326630907c63a9a PkgTTF-IosevkaFixedSS07-29.0.0.zip +41db9b70ef82735e651286be10cb7924c1ba46bffef7aa8064fa569a88f24664 PkgTTF-IosevkaFixedSS08-29.0.0.zip +347ae2e8604fdb1072429b3dc8d5f146464b2af2f5bdf259c58e443f9a26b6d7 PkgTTF-IosevkaFixedSS09-29.0.0.zip +556d26a56f370f58e12715a33a9e5acbf49e97d8c2c0c8ebad2ef612955be224 PkgTTF-IosevkaFixedSS10-29.0.0.zip +52352c312364dbd79736982d3006ac350ed8dc7c896232ffaef24aecb2527531 PkgTTF-IosevkaFixedSS11-29.0.0.zip +f3acaf4adfc2e9cbf10cbee2feb97bdb329e2c4b321d081e57e246450a2602c1 PkgTTF-IosevkaFixedSS12-29.0.0.zip +53931ea2839a00aecc6514401b6ffecce325bc7b75f393576ebc3e3a1ee491ec PkgTTF-IosevkaFixedSS13-29.0.0.zip +2c2ac19f54a773889f225b2ab7a9892e635cecb90ef5e250faa604026ba598dc PkgTTF-IosevkaFixedSS14-29.0.0.zip +097c50d2c5489eb877d7ed7a64837cc91deb4ba39a6c9576c10946a508c27e98 PkgTTF-IosevkaFixedSS15-29.0.0.zip +e9cb22e285ce720dc85a0057169c7ba2508afd577a82a3cd66a159e7d64608e0 PkgTTF-IosevkaFixedSS16-29.0.0.zip +35e57bdf8d05f77c1a9e46da7149f1c709d45a81126d98ac80316a0b01ef7656 PkgTTF-IosevkaFixedSS17-29.0.0.zip +c7ff639ec73673d8dd0bd68c27891a5b5d7ff467dbb7ed251e745edfc14f3ae4 PkgTTF-IosevkaFixedSS18-29.0.0.zip +af7ce4b3eed234c50159009b859f63c5d6a821d34df5a233063e96638a87b3b9 PkgTTF-IosevkaFixedSlab-29.0.0.zip +42bf4f3abd4074c87438e337ffa36b7efab0edfe1921961c0fc6aa3cf778e77a PkgTTF-IosevkaSS01-29.0.0.zip +e9f28a83c381ca0376053124411a0283e9f7a25dc3b493859ecdef946843184b PkgTTF-IosevkaSS02-29.0.0.zip +f183f4d53e17cced0ee90e96b710e8329f511197334196a699f70a7f4d282c1f PkgTTF-IosevkaSS03-29.0.0.zip +53d0b7d013361cd3c08ee8c4ae595276f35dabaa008c0354645d4d7719be2d8b PkgTTF-IosevkaSS04-29.0.0.zip +d9d08d4791530ceef4fbacc9650a67d59c734a55f8db7d445154512af06af133 PkgTTF-IosevkaSS05-29.0.0.zip +10c6aadc09fbfaf2aa47ee76dc31b770729ba16aaeefc1604a15a09d011f5527 PkgTTF-IosevkaSS06-29.0.0.zip +994b7df77b68e82ff084f3d9319676298ff34aeeaf6bcd24648d0b2b77039fd7 PkgTTF-IosevkaSS07-29.0.0.zip +8710bcadc8b0e643eec104f4baccf40eb5ab4f9378c3a2661d481ace74910cd6 PkgTTF-IosevkaSS08-29.0.0.zip +ea0e89213624d95a1e20f40f4aa735e741f23216bb203f9b723d6769a7446290 PkgTTF-IosevkaSS09-29.0.0.zip +7326580c145ee3d3022071a09bbc3513c337aeddbe7bae78f66ff0c978d97cff PkgTTF-IosevkaSS10-29.0.0.zip +13c42655ed0a032c090e05dfed6a0ae140abe4c5ee6bb936ae10ec1445f4d993 PkgTTF-IosevkaSS11-29.0.0.zip +7fa3e3b01d5697fc9343d0a748a25566bb9e6a3f69596b3b18fcbea5af885128 PkgTTF-IosevkaSS12-29.0.0.zip +ee31eb21af1e3b20cbdaba07ea43eef1ef72de7db1ccd9ebe4a8d19709211e37 PkgTTF-IosevkaSS13-29.0.0.zip +7f1ac6f75f8a053174a17d2b3f7e48b31ba7576fc35895c20a09f1c968f6851a PkgTTF-IosevkaSS14-29.0.0.zip +de897d6e003882b6eaeed2bd56e86ea3868a939180723f5afebd07a97a00084d PkgTTF-IosevkaSS15-29.0.0.zip +4ce6146c46812987eac631002699c0b07ecbdaf9005d3a58c2aa882df5f4c2ea PkgTTF-IosevkaSS16-29.0.0.zip +95285b7c869e3dfc92c167a757abd971779e241736dca38c690dff84b1897fbb PkgTTF-IosevkaSS17-29.0.0.zip +56a208a964bc26c8f41361ddc74207ebf0e419d750c4d6c31cf3bdd370521dbc PkgTTF-IosevkaSS18-29.0.0.zip +72380c64b2e4d517ed2904e2cb842c9c251b0f4ced7ddde9528f8d3455abad7c PkgTTF-IosevkaSlab-29.0.0.zip +6803acfa4b34ec08e8ba808fdf46c87b85d346434a1c89f83d76eaa7d6ab2f8b PkgTTF-IosevkaTerm-29.0.0.zip +13c8a2d42cafcbdc770a0b227a3797c14893f001364385bd31681984cf88c332 PkgTTF-IosevkaTermCurly-29.0.0.zip +cb0d50c9dbf413b64a906d6791fe34a014abedf8afddd9a3862581cbe82c4535 PkgTTF-IosevkaTermCurlySlab-29.0.0.zip +ec08e6d4ec29b0a53b4eb70205329b6faadd5bc6fe463d988c61ef19eea54ef6 PkgTTF-IosevkaTermSS01-29.0.0.zip +779095df2311796f01c84ddbf395e45187dac47a3d7d40a89f33dc933781a282 PkgTTF-IosevkaTermSS02-29.0.0.zip +218278685f05adb581dec98e0242c9e037a75117c7aecd4322af25e72b6131c1 PkgTTF-IosevkaTermSS03-29.0.0.zip +d2beaca457d949d6d5485efd11599c6b5efda49dc546ccf5b917ae0c9dc9b1e6 PkgTTF-IosevkaTermSS04-29.0.0.zip +265036752e973377bf052c7c444402c4ea5e961d5411ed20d05dc1660c77a434 PkgTTF-IosevkaTermSS05-29.0.0.zip +7a3f86f2ddd0229f0cd166444e51aa5994d022309381457d661b51da9e3b7764 PkgTTF-IosevkaTermSS06-29.0.0.zip +aa56c3cfe324e9d5da0dbe707ad0e735d7c0129392577d94ef006750a912978b PkgTTF-IosevkaTermSS07-29.0.0.zip +c5fc149edef03d86694342ade2e76733fb77c082ffcdf7a63830e02b9cdba663 PkgTTF-IosevkaTermSS08-29.0.0.zip +65bd24dbcb4268b3e3d30db1affc6e2199b3e59b0af24c20f95782304c0bca2f PkgTTF-IosevkaTermSS09-29.0.0.zip +615ea917d65d9508dac6863004f460d3ee45d5732cf9870c69310871583815f2 PkgTTF-IosevkaTermSS10-29.0.0.zip +9c207b1808bb398fb6ee7646383e6299ae2c32008afbf352510aaafb01913228 PkgTTF-IosevkaTermSS11-29.0.0.zip +380ae0cfbec5fc88c1431666f050dbabda3c65e66253e212e7fbb43e1079b51b PkgTTF-IosevkaTermSS12-29.0.0.zip +906121240d2cf5d382dcd99a69b1ebdb705b4b31fafcb3e7512335d91243c3b0 PkgTTF-IosevkaTermSS13-29.0.0.zip +0a364c3bf085418934f8cfd9695ce42d711edc030f8d8ec540d8b82b1e1ebada PkgTTF-IosevkaTermSS14-29.0.0.zip +fc361b88239d389311814e6d031210db3b42dea2c83c3658787d5fd50007861a PkgTTF-IosevkaTermSS15-29.0.0.zip +fb8d0f3ed6920bfc3c698c1a92598272f19487ef35db4dfda9fb77fdea23c129 PkgTTF-IosevkaTermSS16-29.0.0.zip +5164d6176044de13417795c3a58640abb2883811b884dfffee59d9ced945434f PkgTTF-IosevkaTermSS17-29.0.0.zip +c72b6999993ab3937d60663767edf7c319332855f038f4d4ce969e4bf729090b PkgTTF-IosevkaTermSS18-29.0.0.zip +fa03c8d4ebef798dd832af6e484d30c3046795767fa36971764137123b7e1078 PkgTTF-IosevkaTermSlab-29.0.0.zip +4f62f1e6a8736bccfe49d03535941f0cd0fd89924909ed1a92795263115f10c8 PkgTTF-Unhinted-Iosevka-29.0.0.zip +f46288b7ea12eae11448ef04a27e7413d38cd7fafa9fe0bde023a1a98f0479cf PkgTTF-Unhinted-IosevkaAile-29.0.0.zip +7f8a40940b8ebeb5185b3b03d2428a7d4ec2369ede8a5df0adf85102c04a1750 PkgTTF-Unhinted-IosevkaCurly-29.0.0.zip +630e32447e926909de3f9843d26745355965de1bf181f914c074906a67026e1c PkgTTF-Unhinted-IosevkaCurlySlab-29.0.0.zip +a4864b9f76df0eceabe42970f1d00b66a8ada9adae0df7a70b887536c1093bfc PkgTTF-Unhinted-IosevkaEtoile-29.0.0.zip +9c9575c70600d28dcf6e4b073933cef569b005b0b8575a726f6a92a9b126b2d7 PkgTTF-Unhinted-IosevkaFixed-29.0.0.zip +a54747c9fb2cd32a6c5326a231cc2f244b6d52df74c956ca772c3a42df120e0b PkgTTF-Unhinted-IosevkaFixedCurly-29.0.0.zip +fc7d3d0ade7581e538f944c49c4d48e6808518ef5a1ad1dc56967f4acfa80dec PkgTTF-Unhinted-IosevkaFixedCurlySlab-29.0.0.zip +daac45ec30a95013c5b3f4dec2685484b2262c35fa743d882d0021700e75b235 PkgTTF-Unhinted-IosevkaFixedSS01-29.0.0.zip +d9a9e1d7d31c40d0b339ba97cc0062d63a1e1486c285af3810c960be376e01d0 PkgTTF-Unhinted-IosevkaFixedSS02-29.0.0.zip +1040b2c7e43b3cff03e3bb48fd01db6d4585992738a93ec969b087b224af673c PkgTTF-Unhinted-IosevkaFixedSS03-29.0.0.zip +b2982568dbea58e9f230cb667e9ba7f3b1fc7be9fe6d71920cd19e5cc582c648 PkgTTF-Unhinted-IosevkaFixedSS04-29.0.0.zip +c51f034084b49a7c2ed313a63891ad3549d6d693191e33924bab43dde1548782 PkgTTF-Unhinted-IosevkaFixedSS05-29.0.0.zip +35e5b3094098e5d3aaef864e86f4ffd8cecd4ab50a2d11c3a558841d370b3000 PkgTTF-Unhinted-IosevkaFixedSS06-29.0.0.zip +29d897deb7ec1027996b4e5d1d891b086b1b98a1f85520d989c650bf6c71ab7c PkgTTF-Unhinted-IosevkaFixedSS07-29.0.0.zip +5e1cc9bdd9e09a072e42e605dc829a7a8a1654eb8c309fae232031e98c534461 PkgTTF-Unhinted-IosevkaFixedSS08-29.0.0.zip +c5afe0b93e931867e6f14ae40f754d8fa4fe079c5f1d38dcf43d278ea1d1208b PkgTTF-Unhinted-IosevkaFixedSS09-29.0.0.zip +450b4aeabe0a4a5cef60a2686f655c1eebd52e57996336839762680314f27036 PkgTTF-Unhinted-IosevkaFixedSS10-29.0.0.zip +ad05086fbe0d9da43c772f604ff59f2b113810bd13beb95dde93771d2e29bcf0 PkgTTF-Unhinted-IosevkaFixedSS11-29.0.0.zip +9dcacdc2752f58078dfd9a19209d7e83e900cc7d43995d5b306fd345806041fc PkgTTF-Unhinted-IosevkaFixedSS12-29.0.0.zip +736905b75da14144fcb64730657efeefbcc40143d258e3c9d75cbb2bbba61dcc PkgTTF-Unhinted-IosevkaFixedSS13-29.0.0.zip +aef93f08ecfb44f9ce449f66541ba2c83962ccdcd68d36ce1f1d3df07861397a PkgTTF-Unhinted-IosevkaFixedSS14-29.0.0.zip +d2aa31cda67bc8414efce4c8323c7c97904aa250850ed5a735d04089848c1eaf PkgTTF-Unhinted-IosevkaFixedSS15-29.0.0.zip +09dcc71a9d7f27a165c7ed72efeeee84445f0809b4cfe23f25f01b65aaf52944 PkgTTF-Unhinted-IosevkaFixedSS16-29.0.0.zip +102e2a1dcf6fce923780854af890c093c657f28c5770a74f6d561f3f716ed888 PkgTTF-Unhinted-IosevkaFixedSS17-29.0.0.zip +954b02f7440fbd0a1a0caa5e2527550c018c611869c74b62713685b5c161a202 PkgTTF-Unhinted-IosevkaFixedSS18-29.0.0.zip +2bf113cba80f9c878cdd29c69e327892f9a101eedb71f06498c03bbd65abf99a PkgTTF-Unhinted-IosevkaFixedSlab-29.0.0.zip +2166993091d36c0c63ad73e2fa6a203c3c2ad868263950f506af70f1ad66eb3b PkgTTF-Unhinted-IosevkaSS01-29.0.0.zip +535c7555dcfffbaffee82a2136e70679e8c1c440fcdf980f11b3604b535f1974 PkgTTF-Unhinted-IosevkaSS02-29.0.0.zip +db776961c3f0578eb3186ec51399d8f2736ddacf0b876b94d47ef63069ea03aa PkgTTF-Unhinted-IosevkaSS03-29.0.0.zip +40ab90a0066bff9018adc0474751ea2c6fc764ba752a81626ccede2e389559f5 PkgTTF-Unhinted-IosevkaSS04-29.0.0.zip +742d4229caa277be28b1b0d14c7f9635dd2198739674eb05b9b36793aaa0dc13 PkgTTF-Unhinted-IosevkaSS05-29.0.0.zip +5d989eb499cf8e7f53408f87d9633989f6db5aecd429d10ce90f5b1f3e500d8d PkgTTF-Unhinted-IosevkaSS06-29.0.0.zip +9190ce897002de86dce39032ae5466e42bedc7b74e8e0b12af7a8a42cef20a61 PkgTTF-Unhinted-IosevkaSS07-29.0.0.zip +909036c6800293511e0ea601f79d308f71b48936dc925afaf2e8425e7846dd9e PkgTTF-Unhinted-IosevkaSS08-29.0.0.zip +411f2d34ecf82bc35cc32872626967fcb5a80bbcc25a774240daa2ca93ec63b0 PkgTTF-Unhinted-IosevkaSS09-29.0.0.zip +9fff6d9351e779633da3ec3bdff6180ae4651f64c2fe669ffb6dd6e98762c45b PkgTTF-Unhinted-IosevkaSS10-29.0.0.zip +b3ff77fc5b587c49166da1187bbbe74ee2335a43cbaa394a5b31b684e22ef180 PkgTTF-Unhinted-IosevkaSS11-29.0.0.zip +a27518c35864b6d619c0b528bc6fde9957cdaffa17bdc836c76f1d0a51f3c61c PkgTTF-Unhinted-IosevkaSS12-29.0.0.zip +891042a5111a9f7f0b8cb3ec1d91a596ab547610c54394fec4d49f9eae9fee25 PkgTTF-Unhinted-IosevkaSS13-29.0.0.zip +cc82859a71f69abd6407a40e1999f03bac27120219b1a0a4c0a18cfaa1c6e631 PkgTTF-Unhinted-IosevkaSS14-29.0.0.zip +ce6cb4bad0f1b95f6a34b8f3fb6be5dac55be24d70c9a1f81234f47b4bb40137 PkgTTF-Unhinted-IosevkaSS15-29.0.0.zip +ff94ada87c2cad782e4c113dbb2a36110664de0a7fd787204cf8f42ecfaed190 PkgTTF-Unhinted-IosevkaSS16-29.0.0.zip +e4e0e7ba5fe8a2adb1fc24e6c6822c4dc1d57d767da565ea594ad38e508611ca PkgTTF-Unhinted-IosevkaSS17-29.0.0.zip +4fe7fc07ed1c5893b9b321a0f1b311108104718555eead8aaffb839e5fbaf606 PkgTTF-Unhinted-IosevkaSS18-29.0.0.zip +18c037223f8d0247d6a1b393350503dcd2380ba2d4f15677cbe4af44eea930c0 PkgTTF-Unhinted-IosevkaSlab-29.0.0.zip +f15f49347a15e5a21161e8f5d0566847f5e80292cef328e04ee5707b6e8553aa PkgTTF-Unhinted-IosevkaTerm-29.0.0.zip +1d2529ea19bee29c13d8152ae57f56eb29845c7cd9ce71ad0dd96070ed6e9f19 PkgTTF-Unhinted-IosevkaTermCurly-29.0.0.zip +0ea1a164a0873409950751b6ef17706d602f23a152a6f7d0ae5ee8724edf0648 PkgTTF-Unhinted-IosevkaTermCurlySlab-29.0.0.zip +2826f5ef4e83ad45b3a6a6b20cabfb4f1ff5538ac74d403a4c24379a38db3946 PkgTTF-Unhinted-IosevkaTermSS01-29.0.0.zip +89681db975d1c22cadac0a92329c7d78bfb799a871962b8b6bc0a421042f8761 PkgTTF-Unhinted-IosevkaTermSS02-29.0.0.zip +d6cfbb63ce15f6b04af8258495dd8c5afa9eb37837288f49d05987846f20ff5d PkgTTF-Unhinted-IosevkaTermSS03-29.0.0.zip +0c2edbeb4b7e381d0a3f0a1a4ab11ef4b20048d81b0832a916a2c551c34387b0 PkgTTF-Unhinted-IosevkaTermSS04-29.0.0.zip +3607938b395a725776207d51850e538f52a1a9fab24f04995f5d68c89a379e7a PkgTTF-Unhinted-IosevkaTermSS05-29.0.0.zip +efddefbbcbdfa93ed8e7dbc3dbb3835426ecbbc267c2e2d22f8de2afcfc7988e PkgTTF-Unhinted-IosevkaTermSS06-29.0.0.zip +6041caf307e900f1b15b0d66ccf0a6104fd50c6111b558afdc71ea03333ff701 PkgTTF-Unhinted-IosevkaTermSS07-29.0.0.zip +2f0835eaaeb674d20faff2232862aa3715f19292f24fa97efc3430431f78932f PkgTTF-Unhinted-IosevkaTermSS08-29.0.0.zip +6f5ceeeb6caef0ef64a4788e65a917f3311e51831e956a7e634cf694f19d79d8 PkgTTF-Unhinted-IosevkaTermSS09-29.0.0.zip +1e0ba45643049ef6ade43722d3e7bfbc58c17aa4065dfc258ba331afd9e681aa PkgTTF-Unhinted-IosevkaTermSS10-29.0.0.zip +63f58a2f2f44bd72fe52917af8498e206a62c70719e0915251f00ae5dd20e705 PkgTTF-Unhinted-IosevkaTermSS11-29.0.0.zip +fe265e2acda8397b9216eb07112f6edfe4aa03d8bf3f0347f899cef66e41d354 PkgTTF-Unhinted-IosevkaTermSS12-29.0.0.zip +e00acb9cf800e31f272e7986856b36db969b844a218975302441b9b568a3607e PkgTTF-Unhinted-IosevkaTermSS13-29.0.0.zip +7465f285f5b38953cc61d2ac0403257d8469b955baadbeb9953558d6bfa4b7be PkgTTF-Unhinted-IosevkaTermSS14-29.0.0.zip +ffdbd4a104e6310fd35e9dcb26202a6452828ae9603d9a07a85c2579c3941d2e PkgTTF-Unhinted-IosevkaTermSS15-29.0.0.zip +e10b554d1ae6410a5b4243dbc6b711703eb607633c79aa84558501fed60a6396 PkgTTF-Unhinted-IosevkaTermSS16-29.0.0.zip +7102e378cd20cb06a45522f7fbab8c570cf51815557682d1e1d61ba0c6a9976c PkgTTF-Unhinted-IosevkaTermSS17-29.0.0.zip +9ae5fe6599f27ccd1f82aa0ed773eca2a1ac7d60298c9df86e45b8a887f960f1 PkgTTF-Unhinted-IosevkaTermSS18-29.0.0.zip +34342db8f4caf27d43415e3b54c143f93a8d770133075d6a87c7190d22532162 PkgTTF-Unhinted-IosevkaTermSlab-29.0.0.zip +5407906ef36b36d1dbd47316804284d7667fd39ad5041683cda6954e40b58dd5 PkgWebFont-Iosevka-29.0.0.zip +14dd7b30ca46d352fb7e2ed33a17080c6d9dc564bf17254788e9a09acbbb3bcb PkgWebFont-IosevkaAile-29.0.0.zip +0b93bc6cb775a7b1a08749e4f1378fd9a5cdcac5430349f8d20be5d8bc0127a4 PkgWebFont-IosevkaCurly-29.0.0.zip +5a8e82d58d008aa0d6667b6041d093031755b030659a5cdb4f597d59ea1909ac PkgWebFont-IosevkaCurlySlab-29.0.0.zip +8b42614eedd0d629d661b5640c8d2af0353c9dc3d2ea18e73fdb389b6ff307a4 PkgWebFont-IosevkaEtoile-29.0.0.zip +89e1c0a5d1c3b9a3cfeff3682b742953215d64d5e80a7219e71f8898ae48f2ca PkgWebFont-IosevkaFixed-29.0.0.zip +f1607d3ce94d9ec3da85cdbc3a6bde86dbb04b66f954c9d5d9ad192eaec35b21 PkgWebFont-IosevkaFixedCurly-29.0.0.zip +e907a960f835055f57aa1cd454f6aaaa37bc9bd6c8aa8ebb2de27ac23ef90e6b PkgWebFont-IosevkaFixedCurlySlab-29.0.0.zip +d7ab1e1aab75d3dfa9a709bd367a379dca846ebcb317564c7c4111c8013faf0b PkgWebFont-IosevkaFixedSS01-29.0.0.zip +029c6863c91ca45505b57a49a39ade7920b01449ace5d45f51b9edd11042392d PkgWebFont-IosevkaFixedSS02-29.0.0.zip +30b1dbfbe771fe0cf1e305947f41ba1e934768622d6a3b18438dbc6f51b60b0f PkgWebFont-IosevkaFixedSS03-29.0.0.zip +17fa3f79927d3c3a48c0c21eef6d0e43a249a60bd00ca7c097271c86fce1f3e3 PkgWebFont-IosevkaFixedSS04-29.0.0.zip +217ad80b08aeb8d7376f8b1ae633c229c0838514d72e92522fca635c06bceb6c PkgWebFont-IosevkaFixedSS05-29.0.0.zip +aef4adaa0f5d1d11adcfaf30e58c5a22b7c09857cf91ff65554dfa7db0a084e4 PkgWebFont-IosevkaFixedSS06-29.0.0.zip +2925c0f9aaaca084c99110f28e00e2ee8deb64a2ea33ca5722405cd7d45a1559 PkgWebFont-IosevkaFixedSS07-29.0.0.zip +6e8865b5c814d9030fc817bbe13e8166ad006dbccf97b33459781d14a7f2338c PkgWebFont-IosevkaFixedSS08-29.0.0.zip +888d592479ff43306551e6a2526d78acaacd6c04f7b58d95a7fcefbb1baba427 PkgWebFont-IosevkaFixedSS09-29.0.0.zip +6a127ab4d844b452dc27b7bd41fb3b52857a19690ebfa374f71adf36b18d4198 PkgWebFont-IosevkaFixedSS10-29.0.0.zip +c85d08762912f4873f7b34c180fa00b18f57c4183109d10552f03f2cd2e21c04 PkgWebFont-IosevkaFixedSS11-29.0.0.zip +e1ec35535377aa40cc1e0ed24e46b9a335cb46679825eaf2e5275e47731f96eb PkgWebFont-IosevkaFixedSS12-29.0.0.zip +b252dff8f9ff68902e83fb4ccda956247d840e214ee7ae7d47be60108efb23b4 PkgWebFont-IosevkaFixedSS13-29.0.0.zip +cb0ec2adf13fe81415c023f0a4db299749076f7fef4cf37995ed48be2fc8bfde PkgWebFont-IosevkaFixedSS14-29.0.0.zip +74bbfe08734f6cd092f69dc1b4f85314681176d7b81203aab413ba50e205f24d PkgWebFont-IosevkaFixedSS15-29.0.0.zip +1679681e87522b0aad7b8138d8110e1185e8d1b4ebf64607dfcfafb4c2ecedf0 PkgWebFont-IosevkaFixedSS16-29.0.0.zip +17c4738be6ff6af60edb232752160c2e704c265566f67985a45877b905c2aca3 PkgWebFont-IosevkaFixedSS17-29.0.0.zip +aac7c39d0a8109728ac016d1895b8e4b5d2683d84bb777653d22f4c924c8887c PkgWebFont-IosevkaFixedSS18-29.0.0.zip +47b574bb4fb4fd507f5ddea9d93e1aa3afefae8b3e80b2b82772945d1bb51afa PkgWebFont-IosevkaFixedSlab-29.0.0.zip +6404776820d507502e0c19b3d4ef5891dcf5d06ffc47d55cc906c631827b9e9d PkgWebFont-IosevkaSS01-29.0.0.zip +796a85ea82980c51d3eb507431d1da2790d1ed31e1e53ec0ee6d9bcc55790a9c PkgWebFont-IosevkaSS02-29.0.0.zip +82f6a50c6ee1fe795f3cfc6f7f6c98c41d87e961bc83f97bed24cec84bcedfa9 PkgWebFont-IosevkaSS03-29.0.0.zip +cb09792e3645dae7f37dc0a9e662fe2af48e8c9ad8c6b335d44d3a6173712c44 PkgWebFont-IosevkaSS04-29.0.0.zip +7c51d6dfd0085559e32fb5144b06458fd4f59bc484b3d64b6dd506e73bb8d58e PkgWebFont-IosevkaSS05-29.0.0.zip +e598aba1fa4686020251f82a4afd76cdd95dfcde9c711f74f38291e75bb95a0a PkgWebFont-IosevkaSS06-29.0.0.zip +92e191187105066101fe346b06bfa77e6b71937d615b7cdfc7c660f074cc61f5 PkgWebFont-IosevkaSS07-29.0.0.zip +ec352919f0e61165ebab640cd1bf50ffad6a58bcc6789a5d3be93a3c22c25bcc PkgWebFont-IosevkaSS08-29.0.0.zip +856fdb88aaad0b5aff5ba5a3da7f2ba5daaf1118d6221fb7fc5d474d862d562a PkgWebFont-IosevkaSS09-29.0.0.zip +d8b04965e230858056b27f635839d2e2373c18d35c6da24944146ea452ac407b PkgWebFont-IosevkaSS10-29.0.0.zip +addbdb79b1c955cbf8277420c97a82d05c6044b70427bdcda548f097a1df15be PkgWebFont-IosevkaSS11-29.0.0.zip +0c4d64df1674bfc4696bc816d4e46eb618632fce6eff85e3fa15daef7c4d97c8 PkgWebFont-IosevkaSS12-29.0.0.zip +642030c5752b72ebdd1f399e3e36e1496c9c8970ee28a551fa19bf66b3c0a5d4 PkgWebFont-IosevkaSS13-29.0.0.zip +211cd363e5c474cf813795e7585232429599c4323d6da7c0dd76e847534012a7 PkgWebFont-IosevkaSS14-29.0.0.zip +a1c0653f7042621e80433f54d7b881aba0e29cb9a402eb48a49bdde56c574056 PkgWebFont-IosevkaSS15-29.0.0.zip +c8da80c3fcc7a7fecc0466dfee4f4640de11bf87e59d65b8da823334ae435352 PkgWebFont-IosevkaSS16-29.0.0.zip +8f69855a940d0341536678917afbd72331a902ded458b5ab8660fb650bc3d720 PkgWebFont-IosevkaSS17-29.0.0.zip +a02b3604563e0b0973d08888fb50068f84a5fd03a5291643c6fef68123f9ce2f PkgWebFont-IosevkaSS18-29.0.0.zip +ff0b8847987c18ea8757e77f37571cadec5e187c0f3a36f359f6acba5d561887 PkgWebFont-IosevkaSlab-29.0.0.zip +27e562d6144d6f66e249c7edef5c72ad4c7be05a508f9891a74d8aa98f801281 PkgWebFont-IosevkaTerm-29.0.0.zip +52e6402ecee33bbeef9db49269b63d956121323b69fff6f35bf98a975b699a83 PkgWebFont-IosevkaTermCurly-29.0.0.zip +d93d92b56854b5dd6c5c282ac430134b49c79a483e508e95c9bcb561c323a3b9 PkgWebFont-IosevkaTermCurlySlab-29.0.0.zip +5142cc52239651e13d1feb3e95b57e55e2ef21e0d6b0791d47c29215c7ceca31 PkgWebFont-IosevkaTermSS01-29.0.0.zip +68687295a613656944ee3a5527337aaa40a2b8b276e77a7f8e12e425f9191df3 PkgWebFont-IosevkaTermSS02-29.0.0.zip +ccdfbde259a80377bfaa1d857e43513e52f30d3b8044ea4878f62cc7a3fe459d PkgWebFont-IosevkaTermSS03-29.0.0.zip +3979f31622a0c59446a6ca1d1ffd375ba8cda853c94ce285d74cee4c2d4dcdb4 PkgWebFont-IosevkaTermSS04-29.0.0.zip +5839ee9808cfa0a52f77478605b0f297329024367a9bc3b361a2affbb68ee488 PkgWebFont-IosevkaTermSS05-29.0.0.zip +374b0ea31cbc9ff62f3ab129167b52367744336af9ec5061c809b74f413bde6a PkgWebFont-IosevkaTermSS06-29.0.0.zip +28bad69c9fad74c582b339aea52943d179ce82f03055f3252a85483348dd6228 PkgWebFont-IosevkaTermSS07-29.0.0.zip +9d67d0dd5fa82bf6efd1948cdd33f651b49e29c3bd240153e90d511e9020d9d7 PkgWebFont-IosevkaTermSS08-29.0.0.zip +d3eb738ad39406420c09eb045026473c74596fe29600a893bb36254a5fd883f4 PkgWebFont-IosevkaTermSS09-29.0.0.zip +39fb74b1e2706c8f44f7c48581554d706c5f6993c861c09c40b7b9b55af70285 PkgWebFont-IosevkaTermSS10-29.0.0.zip +71f07cf23fce7f6b35bc225ed57739f919ce980ca391da2cb0e9fa00fc5e937d PkgWebFont-IosevkaTermSS11-29.0.0.zip +513dc9a7b1629294456962d0af86ae2199ab66f38af4c166d608c083528073b9 PkgWebFont-IosevkaTermSS12-29.0.0.zip +801f6d664697f575317d278a12f6a1deac1e031f5bcc4e8d3bcb16a8ec93eb03 PkgWebFont-IosevkaTermSS13-29.0.0.zip +6a98f3fb12eaf40f84276e1a122573fcf463124451f8fa43edcdb761ca0f30c6 PkgWebFont-IosevkaTermSS14-29.0.0.zip +f78ae83a4649b98dfc2f57545b285e2638f4fee76fcb84d9fac5d5dec7c42a48 PkgWebFont-IosevkaTermSS15-29.0.0.zip +a9877adfcccf69229a35f715bac5dd9fdff4eb96e92b321b9bcb66e2c91c8160 PkgWebFont-IosevkaTermSS16-29.0.0.zip +2732f1d0a4c1e59c946d8eeeb414642d09cac7c9ccb70846743f62730be38310 PkgWebFont-IosevkaTermSS17-29.0.0.zip +5d6cf5c38933218fa4d1f2616826934dbe9ec286eb602eb2a28bbce896bb7c68 PkgWebFont-IosevkaTermSS18-29.0.0.zip +cfe7cbe7f0e832fc7df33a6e82eaf2836f3aeda38fa7cc7330ec8dc2893b0977 PkgWebFont-IosevkaTermSlab-29.0.0.zip +207e21c2ecbbcf2a749d2041c9f435b9f7de1db7be5ec3cce9b04518dea00d98 PkgWebFont-Unhinted-Iosevka-29.0.0.zip +59a918a6a02c1c0b9680281c9ba3814169c16ac54a4ff875c5b421a24267de7f PkgWebFont-Unhinted-IosevkaAile-29.0.0.zip +cb688909740923ce81a67ca841d004185f8908c3b322a2c0704bdaee49e99d50 PkgWebFont-Unhinted-IosevkaCurly-29.0.0.zip +56c51a4ce8bf9e834c0d960d2b072479075f582c703ec7925c018056a4f7e368 PkgWebFont-Unhinted-IosevkaCurlySlab-29.0.0.zip +81385b46ff6102f8afb13c20395e011dc9c186f3f680066b909d20de708df9f8 PkgWebFont-Unhinted-IosevkaEtoile-29.0.0.zip +e83441fff13148ed004d10a2874418ed96f7a351b8e39e508d6c87ffddda405f PkgWebFont-Unhinted-IosevkaFixed-29.0.0.zip +d3d377bdf696eb458cc16468b7df29b4973c6462e826e4288506f31a3cfc962e PkgWebFont-Unhinted-IosevkaFixedCurly-29.0.0.zip +a4a60458dc89c95186ef6f3974e4ac0b8fb25b1ff7b0a1f1e936ce41ff7d9bbd PkgWebFont-Unhinted-IosevkaFixedCurlySlab-29.0.0.zip +4d0736f4efaa8888f5325220b5cd482585b46c42b39663492718eaa3db64037f PkgWebFont-Unhinted-IosevkaFixedSS01-29.0.0.zip +890faa75fd33e7f557d1e096056cf8a4daaa2ad784140aab5ad5ef03eb80596b PkgWebFont-Unhinted-IosevkaFixedSS02-29.0.0.zip +88c89cda44b63ae1e08c880c69209f5b6ef523964216035f1bae87d1a7c804d0 PkgWebFont-Unhinted-IosevkaFixedSS03-29.0.0.zip +5e9623068cf493b6ed5754c8ce2d8bb217e4b0cd857164266f8340183ee46168 PkgWebFont-Unhinted-IosevkaFixedSS04-29.0.0.zip +d60bcb7dea3493bb9a24ea3ff08a27c5c0cf79a13e6046bf147edd11e581dbe4 PkgWebFont-Unhinted-IosevkaFixedSS05-29.0.0.zip +c5c707a711c4a22112bad18fb5aa1fa6b8b2e6b8887dd612945e31dfff82859d PkgWebFont-Unhinted-IosevkaFixedSS06-29.0.0.zip +9fda03215465c3c85a201409db7b32e4d9035e2028d389db3d89394406f8da74 PkgWebFont-Unhinted-IosevkaFixedSS07-29.0.0.zip +db094e69db7eda960502e1b13c628022675bcb41c9168dc16163045d2e59cba1 PkgWebFont-Unhinted-IosevkaFixedSS08-29.0.0.zip +d74ee8c30be73736fd016022a4d2f3fa96e810292293b41f2e368f1e62206da2 PkgWebFont-Unhinted-IosevkaFixedSS09-29.0.0.zip +12e3f14fc296be1ea374f7aa530036d3aa3eaf4d48812cbdf479ab1eb1ec1d43 PkgWebFont-Unhinted-IosevkaFixedSS10-29.0.0.zip +c89be5c790ce66c7f2d03cf8733500c58987e4e8109d4fdebaa88be241fa689d PkgWebFont-Unhinted-IosevkaFixedSS11-29.0.0.zip +ed62c25202b508edd1e0d0e0ae238c62c6c08610b8ecd98d5462ac21866d06f1 PkgWebFont-Unhinted-IosevkaFixedSS12-29.0.0.zip +a3071812fb7f17bd333bbf5e5fe7aaa388b4718a8d0eb5d837ef2153aa19f565 PkgWebFont-Unhinted-IosevkaFixedSS13-29.0.0.zip +be71feed8655d28d5dbedc17dbcb2b15faba5d5d3056701503132cd0114ad3b4 PkgWebFont-Unhinted-IosevkaFixedSS14-29.0.0.zip +520b717e4d8e2cf2a2167c5319c2a7e7053d7c37d3cdfe0e61d77f6dd92e0769 PkgWebFont-Unhinted-IosevkaFixedSS15-29.0.0.zip +4025f8def1a9b0d100789a51f185675dde6b8738edba7d4c93a07b809f7de04d PkgWebFont-Unhinted-IosevkaFixedSS16-29.0.0.zip +28c2c65ed2d8c57d29b0d3d8ee64b6add4dd018722f656f2bface91132203b5b PkgWebFont-Unhinted-IosevkaFixedSS17-29.0.0.zip +598bc9ed0d8dd2ee918c3be19cdcf88df82ecf6d47efa80ecefb3f2e80ccce4a PkgWebFont-Unhinted-IosevkaFixedSS18-29.0.0.zip +42047da1035f0caa591056fd81543755789059b89bc4dfbae4ec3e1d20589481 PkgWebFont-Unhinted-IosevkaFixedSlab-29.0.0.zip +4a4ce517834bfa2655116db9264b034e5f505d7c6640ba321c5cb59d3bf84fcf PkgWebFont-Unhinted-IosevkaSS01-29.0.0.zip +2d7aa15196db1cee45a96ac3614838e166e725a1d0f87a16b974c6e153cca0ec PkgWebFont-Unhinted-IosevkaSS02-29.0.0.zip +cfca378a4368b9a159866cf773009aabd3c152f09dded0853d21d1e7906f3920 PkgWebFont-Unhinted-IosevkaSS03-29.0.0.zip +0e6a152d8924fe88eff01ba2cc3cca4195d61adc3a1be2ecc57a728533122254 PkgWebFont-Unhinted-IosevkaSS04-29.0.0.zip +4dd749d19bead05dd935e501722d5180426f65a72c520fac1163c840360ef015 PkgWebFont-Unhinted-IosevkaSS05-29.0.0.zip +c0d3b33ae19f7e431653f59361e0704eb9cdc00c08d561f3e979e3e2f97ce11e PkgWebFont-Unhinted-IosevkaSS06-29.0.0.zip +b4dd387d697c7652d78179abb4af875cbe2a5c2e4a920e1f8f5f862652c19d3a PkgWebFont-Unhinted-IosevkaSS07-29.0.0.zip +4414078d24709fb55d28559cd2359efcc52f3b8ea1bfb157ed398a1fee2d434e PkgWebFont-Unhinted-IosevkaSS08-29.0.0.zip +9b5697328f0de0a81353373fd83d2ab6d76562699cba1673eed8340ba59dce9a PkgWebFont-Unhinted-IosevkaSS09-29.0.0.zip +20a7345526b5ce1b060c6e4bec34796ba3dba4b1fce580ddb9c5ebd029c128ca PkgWebFont-Unhinted-IosevkaSS10-29.0.0.zip +73e96b5759cb5016dbc4ef272bec24a5f65a4403343acdc21ca1454de53e8a81 PkgWebFont-Unhinted-IosevkaSS11-29.0.0.zip +7dfc3066d49ca083d040aabc206f055eb94f3d6ae4d81bc1ac2056d527bc6e2e PkgWebFont-Unhinted-IosevkaSS12-29.0.0.zip +037100d8f7114307983d237e4595fe6b5bde16b100099a1a73d12006678fed6f PkgWebFont-Unhinted-IosevkaSS13-29.0.0.zip +af30f92acd387b8c555dc2d47a16cf0f1fbb550510b9d726671ff66e71624a94 PkgWebFont-Unhinted-IosevkaSS14-29.0.0.zip +6e215ef092bb688a5ee50c3276c6503b010d3f3128bf4f88fda2f4fd95967b55 PkgWebFont-Unhinted-IosevkaSS15-29.0.0.zip +32ee9782d0d827ac82446f991823bec8995e7796e2eefbed21a52bd869408061 PkgWebFont-Unhinted-IosevkaSS16-29.0.0.zip +db6aca93a048887db2789592a31c331f86ea1d5ee3992eb1e06ae0b7ec58cbe2 PkgWebFont-Unhinted-IosevkaSS17-29.0.0.zip +4c3ec28118d27e52679974fe3e30682ae938714613f4e17e7dc2b69b10abcec5 PkgWebFont-Unhinted-IosevkaSS18-29.0.0.zip +c50c8d77b495fe7cebf8400a9102889266290c88b7e24b72e6da6a6094672b79 PkgWebFont-Unhinted-IosevkaSlab-29.0.0.zip +0780839e6554b6a3fd3d2b7b0d80511e4f41c44af50bf897a1c29585a72822a8 PkgWebFont-Unhinted-IosevkaTerm-29.0.0.zip +46ac547dc083c3491dfe7bee70e0ba886c9320bee1b47e2cb557cc5b3beee16e PkgWebFont-Unhinted-IosevkaTermCurly-29.0.0.zip +581fc549b93d5d77e603666030a0a7c4849d78d37617fc8dbf3db171e08c5065 PkgWebFont-Unhinted-IosevkaTermCurlySlab-29.0.0.zip +395177ca9c00248a75d20744b6632e24e21c1ad8be46e6916975cb2bfe8ac8d7 PkgWebFont-Unhinted-IosevkaTermSS01-29.0.0.zip +f70caa0c3f1480406638aae5bf360438ae4c39e388d7e49550d9a4e9179a9079 PkgWebFont-Unhinted-IosevkaTermSS02-29.0.0.zip +20981d39016170671fda3d644a222a46c81928b8b64ac79029b5cc6e73b6ebca PkgWebFont-Unhinted-IosevkaTermSS03-29.0.0.zip +21b87b027b7eee6c9edcbd002474f05d6d13f70870b0713332ea9472df711cea PkgWebFont-Unhinted-IosevkaTermSS04-29.0.0.zip +fddd3fdd20485367c66e495418b8706134dece33d4a39b26bb28b8df7af11a83 PkgWebFont-Unhinted-IosevkaTermSS05-29.0.0.zip +103bfcb9e1f2c586affa76ff634dafcc6f14bc4c943776aa4b3ed197f65fe125 PkgWebFont-Unhinted-IosevkaTermSS06-29.0.0.zip +a9ece4b88458a85045ee6ee3b8a250793e36ff1d1bb63fc82b9be4dbc0e2e6a1 PkgWebFont-Unhinted-IosevkaTermSS07-29.0.0.zip +43c715c5064a70ece4794d24c4af2460208991bb4ebbf76efb7137feac4c35de PkgWebFont-Unhinted-IosevkaTermSS08-29.0.0.zip +0921ded3fc0d7bc09d4944ef74b99717f50f2a994880ff1172e6f2a8099af6ca PkgWebFont-Unhinted-IosevkaTermSS09-29.0.0.zip +6e57bbbe833e6a7034103595b5fc068a317d80e10051e332bc196a900b8e7b72 PkgWebFont-Unhinted-IosevkaTermSS10-29.0.0.zip +02e864b75f4ab5dbbac78f77c4ccd116d06769ed1b56934a8d135ac53671495c PkgWebFont-Unhinted-IosevkaTermSS11-29.0.0.zip +ab10d32da88dc5ac96b2cae6445fda9dd19f44a38108435cc70f936d4659b438 PkgWebFont-Unhinted-IosevkaTermSS12-29.0.0.zip +7ad01e1de326f6ff6d48f56e98576932156d3eeb69f55bfbb42d812e405f968d PkgWebFont-Unhinted-IosevkaTermSS13-29.0.0.zip +888022e6b691c49ad7eccdc41e8d458022b31376ae7ad8b8343db925236a49e1 PkgWebFont-Unhinted-IosevkaTermSS14-29.0.0.zip +312ce40003f97f1fc4921ec57993d47384c844c8f754d5e0db4b4ee3a8262669 PkgWebFont-Unhinted-IosevkaTermSS15-29.0.0.zip +7bba4d07955517482477a69e7bb2972d8f44d78476dee0fd45e9c2ecfa91037a PkgWebFont-Unhinted-IosevkaTermSS16-29.0.0.zip +092db73994c0fef649f9a7163e09d0110fe03497d62c88a99d4ea5c004d969f8 PkgWebFont-Unhinted-IosevkaTermSS17-29.0.0.zip +7d9647cbb2b94b34b8870a6ab7d2fc14d38161ea4561cdb81607a728f15a8503 PkgWebFont-Unhinted-IosevkaTermSS18-29.0.0.zip +9486cbec3ae8ddf860bb8001a123b1848a8a77a2419fcc53ced785a592ea5de0 PkgWebFont-Unhinted-IosevkaTermSlab-29.0.0.zip +71f85b5955b21e2c1c12a2271117f7e82cf501db3ec611bb239108908beacd19 SuperTTC-Iosevka-29.0.0.zip +5eafbb5c9b11b545ed86a305fe7fe48c3cd77dad6e145a9b3ecf88e19a57e85e SuperTTC-IosevkaAile-29.0.0.zip +9b94ecbb8bcd17b0784d2e65ad30c6bda5acfa9276f421dc7466a259b7fe8124 SuperTTC-IosevkaCurly-29.0.0.zip +bb7464411f5ba62b979b9848c76a3688ab3f5b437ebf9df88cbf92074fc8e44e SuperTTC-IosevkaCurlySlab-29.0.0.zip +d6ff1a9a112b8ad89e709259117d752de9dfb46b15ccd011db3f02ab78a2827a SuperTTC-IosevkaEtoile-29.0.0.zip +ebac4cb8976504c523636565ac2c1f8ba933a5962025a60d468f11ab3cfd6e72 SuperTTC-IosevkaSS01-29.0.0.zip +1cb2abb7fb7d5c7f632dc726ee44ea26645190a897ec1a6af037659b0b024f98 SuperTTC-IosevkaSS02-29.0.0.zip +f141dbe72b8d1fb7d2cfe3e6a419c5985fc7f68de928a8dbcedebb22390deb46 SuperTTC-IosevkaSS03-29.0.0.zip +791c0a3c1c394367b8555a1bb40765fbea54fe776daced24b0c815c3b2551119 SuperTTC-IosevkaSS04-29.0.0.zip +8649c95f068710e1af861899a81d7ed771da8501a52db60da927a06c93ef2b6d SuperTTC-IosevkaSS05-29.0.0.zip +0015cc71c0f1f7cc0442e3b50bf2518265e9812c9d3ed04d4251e4b7baacf493 SuperTTC-IosevkaSS06-29.0.0.zip +cc47a7851d29cfd68f7b0e1886b1fd46a3de6f2bd181a827ea788394214ca00c SuperTTC-IosevkaSS07-29.0.0.zip +a175c0d5a0b21f1c383f98c610f85717d473b1dc9eff5a134092655d2e5ddfd6 SuperTTC-IosevkaSS08-29.0.0.zip +f96a8639ce18f2a32427e763bfa3c5c0b81bc145263cc67c5bf0a8ee94626c92 SuperTTC-IosevkaSS09-29.0.0.zip +4cf11d2542f9698ae1ebc07b58878e227c0d6ae98a9613dcff2a1ecd98459dd8 SuperTTC-IosevkaSS10-29.0.0.zip +7bdcf732ea0533da14a5c577533df506bbd6293e0a8f11fd65bee3f3c9f7c0b2 SuperTTC-IosevkaSS11-29.0.0.zip +ef72ce8be24b2f84cc6d544f81abc2fb7e33ed207e25c450af83bee1b334a71b SuperTTC-IosevkaSS12-29.0.0.zip +1aab14e9d167d8f8cee7077ddff6d79b34bb4c30838e32f9494f6305eccdd724 SuperTTC-IosevkaSS13-29.0.0.zip +69286f227ee7597d2c378bb8de5bef6b14982eb68387fd88da0ad688f06567c0 SuperTTC-IosevkaSS14-29.0.0.zip +a3b8098a8f7e19772eb1b4ec1642bf28cc7116d6e0428dde9a0080274781e523 SuperTTC-IosevkaSS15-29.0.0.zip +c49f7a3ba2e9e50a6f90b42269885646820fe0269d3d8635a0c0ecb6212e6e5a SuperTTC-IosevkaSS16-29.0.0.zip +3ab151927d2d972bdc6390836d816265dc6b73d5dad7b598408e40e02804bdc4 SuperTTC-IosevkaSS17-29.0.0.zip +8d62c763aca05fa0b3dab6f0b1922f793c62a161915b4bfd43130212b5d8c2a1 SuperTTC-IosevkaSS18-29.0.0.zip +bad0baeb50eaaa5d4cb904e5808dd5b236a2025969329b5821496c784d52c954 SuperTTC-IosevkaSlab-29.0.0.zip +d99239a75f8a4bc5803034661c92fa392701fb66973a6bbbcb2d5bc4cc9556fc SuperTTC-SGr-Iosevka-29.0.0.zip +5c11fa13b8d0a4c5ec3afbea527af8bc8369e06c3c22a14866787e57e5da800d SuperTTC-SGr-IosevkaCurly-29.0.0.zip +6078b9ccd960191402640ec8dbb3416a65ba19bf247df758212fd4ae24b0156b SuperTTC-SGr-IosevkaCurlySlab-29.0.0.zip +84c06d97c905c17d3b7632422364c148775b445855e691a441856d139d648c22 SuperTTC-SGr-IosevkaFixed-29.0.0.zip +69c649dfdcd980f975948adf52d1404fbc7371f30d694200a78982f8fcd68310 SuperTTC-SGr-IosevkaFixedCurly-29.0.0.zip +d135b2bb2dbd3f8037edc2049b10e5010aef54e42d6f0eae14ad985c1306a37c SuperTTC-SGr-IosevkaFixedCurlySlab-29.0.0.zip +6f96ef066fde233da006015efbd0ebd7d3012b154bf8f84bcab1efdf67108e5d SuperTTC-SGr-IosevkaFixedSS01-29.0.0.zip +a4ec2d496e7c3a3620663e56ed20b8ade38f4fe88b97235487a2c8b75f636a1f SuperTTC-SGr-IosevkaFixedSS02-29.0.0.zip +b9fed41801196d359f20562b778eea62ccfefc3291f7ef0f3e7bed8c7667c144 SuperTTC-SGr-IosevkaFixedSS03-29.0.0.zip +302a03d84e2acaa7f1962fb376865314efdeb061c4ba8e0768bb60b15b7ec6e4 SuperTTC-SGr-IosevkaFixedSS04-29.0.0.zip +eb56f5ef23a2fddb1b171a481a82b4e5a3a84c2914f27137a72048b2f32ad595 SuperTTC-SGr-IosevkaFixedSS05-29.0.0.zip +5c96d905c36cf383ae4510e4db8a793c9d4e51cd077a45a65d698b6936072b71 SuperTTC-SGr-IosevkaFixedSS06-29.0.0.zip +7460c2c1f331abbaf7040db183c09eb6ea15269acbfe746091d9774ab524b638 SuperTTC-SGr-IosevkaFixedSS07-29.0.0.zip +123775d8516f5d4590395242a64e1184b12a90b1767d2808dfd9eb4d3440b22b SuperTTC-SGr-IosevkaFixedSS08-29.0.0.zip +e7370d346ed45489317c98b15c1864dd40d179ccdc47d2cca3ebfaf2939ec29a SuperTTC-SGr-IosevkaFixedSS09-29.0.0.zip +6d8fc09e74aedea4c1e23a4f9e773d41854997a684b4c7011583886dacadbb1a SuperTTC-SGr-IosevkaFixedSS10-29.0.0.zip +db3a3e31b36423d000598d5d1f84764ad24dc12f23e8d7fd856cd4d6dea5987e SuperTTC-SGr-IosevkaFixedSS11-29.0.0.zip +4a9013166c30eab24710c2910f7f0f15030088656b984f005eeed15d9c7a47b1 SuperTTC-SGr-IosevkaFixedSS12-29.0.0.zip +ef315c611e29afe65e1a7351f7743247068458738288572298692553c651a939 SuperTTC-SGr-IosevkaFixedSS13-29.0.0.zip +1a08cf0bcd4704c2757c06806ee7e20353d174efbc09ea4acef8adddf304c380 SuperTTC-SGr-IosevkaFixedSS14-29.0.0.zip +0a65046ffd8ff805b78c32a2a476e3aaafbf25c6b09033516d7d34d00c8bf151 SuperTTC-SGr-IosevkaFixedSS15-29.0.0.zip +4ee289bbea4b1eaad0a8d82c761d0f89555d729dfbdec97b095f623abde227cd SuperTTC-SGr-IosevkaFixedSS16-29.0.0.zip +4560c1c4d00717590f4da1056c5039a11f474a3d4e2295685d2c4a93499d2850 SuperTTC-SGr-IosevkaFixedSS17-29.0.0.zip +8d60579395c8bc76aa294e3af01531a170a3a97f2219d805238fa2ff980f5123 SuperTTC-SGr-IosevkaFixedSS18-29.0.0.zip +1769eed469210db2cd1654fc80193a785ec8cf0c5907e62b5b054c12bf7d674e SuperTTC-SGr-IosevkaFixedSlab-29.0.0.zip +f725c58d764742f72c1924f9960a91214eb0916db1d6cf640a96f049e3d11948 SuperTTC-SGr-IosevkaSS01-29.0.0.zip +2fb8f082973e9026da33be77ad23a8646b5f351da0185b285dbff37bc8ded645 SuperTTC-SGr-IosevkaSS02-29.0.0.zip +5626205208aa930652331f4d8b2a222041d070a9ef236c2c1df193a6af60d88f SuperTTC-SGr-IosevkaSS03-29.0.0.zip +dd6e0ebae00d463a60352dfd0b3f342ca120ca969b2c9b19b378bed9d977eb8d SuperTTC-SGr-IosevkaSS04-29.0.0.zip +f45500250bd76480263fab38b2d3b73a0409ae43a691c21b5d70103e209fd20d SuperTTC-SGr-IosevkaSS05-29.0.0.zip +d9d6eda3c9a954db5d0249656436efb73b639b21818891f1cd558fdf18a303c3 SuperTTC-SGr-IosevkaSS06-29.0.0.zip +7048174e802944630c782717a804e3acb4e848e0b9eeef3b1963c159aff56156 SuperTTC-SGr-IosevkaSS07-29.0.0.zip +e4ce5beb92df645193c14748b14231d2250c44ec6dee8c26b480d4b8bce343f5 SuperTTC-SGr-IosevkaSS08-29.0.0.zip +f6573431f91bdd6e16726e209c342a3baf277efb8e307d35e4d9be4ea6625347 SuperTTC-SGr-IosevkaSS09-29.0.0.zip +11606404050477d63921107a67f40c17690460e3ae7601fdaf28e65474b3fce1 SuperTTC-SGr-IosevkaSS10-29.0.0.zip +1c5cfe3448480f70318e10fbdd5ed83ec73de320013c209c34e9edf4891e21ba SuperTTC-SGr-IosevkaSS11-29.0.0.zip +6a71b4a410f102bb35c2cc6515f030006dee4c451615451b96da5bc20152c7c1 SuperTTC-SGr-IosevkaSS12-29.0.0.zip +b24af46ba2e1248d4d08eebf6cb23890bc97100b67d06b478b5c6c6a6785fe34 SuperTTC-SGr-IosevkaSS13-29.0.0.zip +7b77537be18a0f782f4dffe78dbf3ca09b3dba43aa6d9ce4211403a09c8fd376 SuperTTC-SGr-IosevkaSS14-29.0.0.zip +4736042e326f87393a90c597259f2484390f903c3c635081b7e47ce9fd9a3f6a SuperTTC-SGr-IosevkaSS15-29.0.0.zip +62f60c68bf9901d89333eaad59ff4e7af8b4094fa2438e0368cda506ce2f21cf SuperTTC-SGr-IosevkaSS16-29.0.0.zip +55788fb250c00d848fe3199b16dd03a6ed0b145316c180bbe2f5e83534f32a12 SuperTTC-SGr-IosevkaSS17-29.0.0.zip +8ba7f40bae6af37e8bf77d9b8f7fa478fdcec841d3b4d2a96ff1ab1ec4a539a7 SuperTTC-SGr-IosevkaSS18-29.0.0.zip +cab07473450adfccdb3f5f169d2768896e301cd7845c316d9219db3e410df881 SuperTTC-SGr-IosevkaSlab-29.0.0.zip +d56d15098b9a3a9ebc5d677b20a6d7baff982bcf5af1bedc26936799332d0edd SuperTTC-SGr-IosevkaTerm-29.0.0.zip +e28443752be80bc13fef3b7f693c3b43e77364d50e2ff7d03c84f32e0cc7a6a4 SuperTTC-SGr-IosevkaTermCurly-29.0.0.zip +dd3e0794b56bffc17407460dae52a0a5c34e36b5ec8bd90328a3239ecf834f54 SuperTTC-SGr-IosevkaTermCurlySlab-29.0.0.zip +9bde66ccfe285f80f9bc83844a8ce3b0770f3afe16e79f1392aefcc76ac0761d SuperTTC-SGr-IosevkaTermSS01-29.0.0.zip +921ff77b0d6e1f71aa94f2f939f05c70f7fae39c7a3dea4aa20ace64e3b002d2 SuperTTC-SGr-IosevkaTermSS02-29.0.0.zip +53e0428a65056e2ef1a5437956182c1d7b994127ec735dd6cca8945a0bd3e47b SuperTTC-SGr-IosevkaTermSS03-29.0.0.zip +a03be2eb0408362696b8a4719ce4ce4f831d5dc7031822ad55a67d43ff05e59c SuperTTC-SGr-IosevkaTermSS04-29.0.0.zip +719ea60cfcd39f2a45fe11915c7d9974e99d709ccf1c4ae5437d5964cc43f950 SuperTTC-SGr-IosevkaTermSS05-29.0.0.zip +b7ac5623f9e796723c5ff5abcbef45ab268e4dff74281f1efceed81523216155 SuperTTC-SGr-IosevkaTermSS06-29.0.0.zip +411c900aa1580b94ffc93022bbb6adea00e1e8ea144d47cdcb193ba0b27fa653 SuperTTC-SGr-IosevkaTermSS07-29.0.0.zip +22c3b6c39e7e768b0f748cbe761a82601de2ee7603f66396382ec0bacd240611 SuperTTC-SGr-IosevkaTermSS08-29.0.0.zip +c8b0af34dad836e09f9235c86c98a0a3afec40ede4cfea82bbed11e9eaca0bee SuperTTC-SGr-IosevkaTermSS09-29.0.0.zip +95c68a38ec96c29faf0a9a4d7a9d275f60eb71679c7f7949470ca92b56468a38 SuperTTC-SGr-IosevkaTermSS10-29.0.0.zip +7a85f4eefdf59f5de7b5b4c6cce2834f72c88633f23c92bd92f29b2a8f0f8717 SuperTTC-SGr-IosevkaTermSS11-29.0.0.zip +f9653e6ad418ef768e79d0cac4297488bb8e81e0c459a1f78627ae062fb67e09 SuperTTC-SGr-IosevkaTermSS12-29.0.0.zip +a4bcae8f2c32548a61207a78be66d606122c7c9add8a3dd451cbdd773baf9746 SuperTTC-SGr-IosevkaTermSS13-29.0.0.zip +01c9adb6296915cf79c56d931a6c18ba583fbe18f9d100faf885cdf11dcd3931 SuperTTC-SGr-IosevkaTermSS14-29.0.0.zip +8678d526ab0c575a84166cd9ae75be4cd0bc2f4161e17bd403a6ace4756022ea SuperTTC-SGr-IosevkaTermSS15-29.0.0.zip +bc4bc4e737703c68836242626f714db601cada859b12e168aafeb7087dbc02d6 SuperTTC-SGr-IosevkaTermSS16-29.0.0.zip +57e5357ed594c2e8cafb29cd8c5c68c2c0c032b79f315b783d8560b9b99e0e6a SuperTTC-SGr-IosevkaTermSS17-29.0.0.zip +b2f03fc870a882d3487ddc159d68c7407640da5c0f32e0b2cd34d183d179ca8a SuperTTC-SGr-IosevkaTermSS18-29.0.0.zip +ca0d581748f4cdfd970571ecc4b439083612d94e33b87a6945e102c0e0008ee5 SuperTTC-SGr-IosevkaTermSlab-29.0.0.zip diff --git a/images/button-customize.dark.svg b/images/button-customize.dark.svg index 475c5bd700..6467162ec7 100644 --- a/images/button-customize.dark.svg +++ b/images/button-customize.dark.svg @@ -7,7 +7,7 @@ - + diff --git a/images/button-customize.light.svg b/images/button-customize.light.svg index 6de71c1c25..8fbd43dc79 100644 --- a/images/button-customize.light.svg +++ b/images/button-customize.light.svg @@ -7,7 +7,7 @@ - + diff --git a/images/button-release.dark.svg b/images/button-release.dark.svg index a5275bf06b..9a02a638b4 100644 --- a/images/button-release.dark.svg +++ b/images/button-release.dark.svg @@ -7,10 +7,9 @@ - + - - + @@ -22,13 +21,13 @@ - + - + \ No newline at end of file diff --git a/images/button-release.light.svg b/images/button-release.light.svg index 699a267bf7..d26cc8f714 100644 --- a/images/button-release.light.svg +++ b/images/button-release.light.svg @@ -7,10 +7,9 @@ - + - - + @@ -22,13 +21,13 @@ - + - + \ No newline at end of file diff --git a/images/button-specimen.dark.svg b/images/button-specimen.dark.svg index 10b2d376b8..007d4ad382 100644 --- a/images/button-specimen.dark.svg +++ b/images/button-specimen.dark.svg @@ -5,7 +5,7 @@ - + diff --git a/images/button-specimen.light.svg b/images/button-specimen.light.svg index f4302d8231..b530378c43 100644 --- a/images/button-specimen.light.svg +++ b/images/button-specimen.light.svg @@ -5,7 +5,7 @@ - + diff --git a/images/cs-block-arrows.dark.svg b/images/cs-block-arrows.dark.svg index 7505a428dc..2487cb0152 100644 --- a/images/cs-block-arrows.dark.svg +++ b/images/cs-block-arrows.dark.svg @@ -39,10 +39,10 @@ - - - - + + + + @@ -109,22 +109,28 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -717,33 +723,33 @@ - + - - + + - - + + - - + + - - + + - - + + @@ -757,83 +763,83 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + \ No newline at end of file diff --git a/images/cs-block-arrows.light.svg b/images/cs-block-arrows.light.svg index 2c896b694a..9c20571e20 100644 --- a/images/cs-block-arrows.light.svg +++ b/images/cs-block-arrows.light.svg @@ -39,10 +39,10 @@ - - - - + + + + @@ -109,22 +109,28 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -717,33 +723,33 @@ - + - - + + - - + + - - + + - - + + - - + + @@ -757,83 +763,83 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + \ No newline at end of file diff --git a/images/cs-block-basic-latin.dark.svg b/images/cs-block-basic-latin.dark.svg index 25a9a72572..b6109b0ef9 100644 --- a/images/cs-block-basic-latin.dark.svg +++ b/images/cs-block-basic-latin.dark.svg @@ -91,8 +91,8 @@ - - + + diff --git a/images/cs-block-basic-latin.light.svg b/images/cs-block-basic-latin.light.svg index 7d221dbbfb..a81ed1c6f1 100644 --- a/images/cs-block-basic-latin.light.svg +++ b/images/cs-block-basic-latin.light.svg @@ -91,8 +91,8 @@ - - + + diff --git a/images/cs-block-box-drawing.dark.svg b/images/cs-block-box-drawing.dark.svg index 49762b9e2b..398fe23dc6 100644 --- a/images/cs-block-box-drawing.dark.svg +++ b/images/cs-block-box-drawing.dark.svg @@ -21,132 +21,132 @@ - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + diff --git a/images/cs-block-box-drawing.light.svg b/images/cs-block-box-drawing.light.svg index 57691f2c60..16a60f570a 100644 --- a/images/cs-block-box-drawing.light.svg +++ b/images/cs-block-box-drawing.light.svg @@ -21,132 +21,132 @@ - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + diff --git a/images/cs-block-combining-diacritical-marks-supplement.dark.svg b/images/cs-block-combining-diacritical-marks-supplement.dark.svg index fc0a927348..cd35353a8d 100644 --- a/images/cs-block-combining-diacritical-marks-supplement.dark.svg +++ b/images/cs-block-combining-diacritical-marks-supplement.dark.svg @@ -72,7 +72,7 @@ - + diff --git a/images/cs-block-combining-diacritical-marks-supplement.light.svg b/images/cs-block-combining-diacritical-marks-supplement.light.svg index b559c4c5cd..4e081c9927 100644 --- a/images/cs-block-combining-diacritical-marks-supplement.light.svg +++ b/images/cs-block-combining-diacritical-marks-supplement.light.svg @@ -72,7 +72,7 @@ - + diff --git a/images/cs-block-combining-diacritical-marks.dark.svg b/images/cs-block-combining-diacritical-marks.dark.svg index 4e83c0e07b..f21d91f675 100644 --- a/images/cs-block-combining-diacritical-marks.dark.svg +++ b/images/cs-block-combining-diacritical-marks.dark.svg @@ -95,13 +95,13 @@ - + - + @@ -115,7 +115,7 @@ - + diff --git a/images/cs-block-combining-diacritical-marks.light.svg b/images/cs-block-combining-diacritical-marks.light.svg index 74d9bf9ece..692d5778ca 100644 --- a/images/cs-block-combining-diacritical-marks.light.svg +++ b/images/cs-block-combining-diacritical-marks.light.svg @@ -95,13 +95,13 @@ - + - + @@ -115,7 +115,7 @@ - + diff --git a/images/cs-block-control-pictures.dark.svg b/images/cs-block-control-pictures.dark.svg index 27d253be8a..6999b2b788 100644 --- a/images/cs-block-control-pictures.dark.svg +++ b/images/cs-block-control-pictures.dark.svg @@ -59,6 +59,7 @@ + @@ -376,8 +377,8 @@ - - + + diff --git a/images/cs-block-control-pictures.light.svg b/images/cs-block-control-pictures.light.svg index 1b75cb82c9..cc033136d6 100644 --- a/images/cs-block-control-pictures.light.svg +++ b/images/cs-block-control-pictures.light.svg @@ -59,6 +59,7 @@ + @@ -376,8 +377,8 @@ - - + + diff --git a/images/cs-block-cyrillic-extended-b.dark.svg b/images/cs-block-cyrillic-extended-b.dark.svg index 3bbcc75dba..a7d9b80746 100644 --- a/images/cs-block-cyrillic-extended-b.dark.svg +++ b/images/cs-block-cyrillic-extended-b.dark.svg @@ -70,7 +70,7 @@ - + diff --git a/images/cs-block-cyrillic-extended-b.light.svg b/images/cs-block-cyrillic-extended-b.light.svg index 529cc06305..e5b68d9ece 100644 --- a/images/cs-block-cyrillic-extended-b.light.svg +++ b/images/cs-block-cyrillic-extended-b.light.svg @@ -70,7 +70,7 @@ - + diff --git a/images/cs-block-cyrillic-extended-d.dark.svg b/images/cs-block-cyrillic-extended-d.dark.svg index 747f0e74b3..2d6bc620e6 100644 --- a/images/cs-block-cyrillic-extended-d.dark.svg +++ b/images/cs-block-cyrillic-extended-d.dark.svg @@ -47,8 +47,8 @@ - - + + @@ -75,7 +75,7 @@ - + @@ -83,7 +83,7 @@ - + diff --git a/images/cs-block-cyrillic-extended-d.light.svg b/images/cs-block-cyrillic-extended-d.light.svg index 10dd6c6388..6ec317aa08 100644 --- a/images/cs-block-cyrillic-extended-d.light.svg +++ b/images/cs-block-cyrillic-extended-d.light.svg @@ -47,8 +47,8 @@ - - + + @@ -75,7 +75,7 @@ - + @@ -83,7 +83,7 @@ - + diff --git a/images/cs-block-cyrillic.dark.svg b/images/cs-block-cyrillic.dark.svg index 00965f53fb..2bc36f814a 100644 --- a/images/cs-block-cyrillic.dark.svg +++ b/images/cs-block-cyrillic.dark.svg @@ -105,9 +105,9 @@ - - - + + + diff --git a/images/cs-block-cyrillic.light.svg b/images/cs-block-cyrillic.light.svg index cd9fe1d094..58f89bb63c 100644 --- a/images/cs-block-cyrillic.light.svg +++ b/images/cs-block-cyrillic.light.svg @@ -105,9 +105,9 @@ - - - + + + diff --git a/images/cs-block-dingbats.dark.svg b/images/cs-block-dingbats.dark.svg index 36d27d8b44..a5fd514c16 100644 --- a/images/cs-block-dingbats.dark.svg +++ b/images/cs-block-dingbats.dark.svg @@ -44,12 +44,12 @@ - - - - - - + + + + + + @@ -74,9 +74,11 @@ - - - + + + + + @@ -1079,28 +1081,28 @@ - - + + - - + + - + - + - + diff --git a/images/cs-block-dingbats.light.svg b/images/cs-block-dingbats.light.svg index 797442cbc1..667554fdb2 100644 --- a/images/cs-block-dingbats.light.svg +++ b/images/cs-block-dingbats.light.svg @@ -44,12 +44,12 @@ - - - - - - + + + + + + @@ -74,9 +74,11 @@ - - - + + + + + @@ -1079,28 +1081,28 @@ - - + + - - + + - + - + - + diff --git a/images/cs-block-enclosed-alphanumerics.dark.svg b/images/cs-block-enclosed-alphanumerics.dark.svg index c74ad5f69d..df6e171ddb 100644 --- a/images/cs-block-enclosed-alphanumerics.dark.svg +++ b/images/cs-block-enclosed-alphanumerics.dark.svg @@ -87,8 +87,8 @@ - - + + @@ -139,8 +139,8 @@ - - + + diff --git a/images/cs-block-enclosed-alphanumerics.light.svg b/images/cs-block-enclosed-alphanumerics.light.svg index e9aba60576..628c61c593 100644 --- a/images/cs-block-enclosed-alphanumerics.light.svg +++ b/images/cs-block-enclosed-alphanumerics.light.svg @@ -87,8 +87,8 @@ - - + + @@ -139,8 +139,8 @@ - - + + diff --git a/images/cs-block-geometric-shapes.dark.svg b/images/cs-block-geometric-shapes.dark.svg index 3d8e415fcd..0f02bbad1d 100644 --- a/images/cs-block-geometric-shapes.dark.svg +++ b/images/cs-block-geometric-shapes.dark.svg @@ -76,7 +76,7 @@ - + diff --git a/images/cs-block-geometric-shapes.light.svg b/images/cs-block-geometric-shapes.light.svg index ff982dc82e..5724afe5f4 100644 --- a/images/cs-block-geometric-shapes.light.svg +++ b/images/cs-block-geometric-shapes.light.svg @@ -76,7 +76,7 @@ - + diff --git a/images/cs-block-greek-and-coptic.dark.svg b/images/cs-block-greek-and-coptic.dark.svg index 3347a71361..b683fa18e6 100644 --- a/images/cs-block-greek-and-coptic.dark.svg +++ b/images/cs-block-greek-and-coptic.dark.svg @@ -128,7 +128,7 @@ - + diff --git a/images/cs-block-greek-and-coptic.light.svg b/images/cs-block-greek-and-coptic.light.svg index 4cd2e55cbf..584d5296d1 100644 --- a/images/cs-block-greek-and-coptic.light.svg +++ b/images/cs-block-greek-and-coptic.light.svg @@ -128,7 +128,7 @@ - + diff --git a/images/cs-block-greek-extended.dark.svg b/images/cs-block-greek-extended.dark.svg index 083c7d9e27..cf3b27b322 100644 --- a/images/cs-block-greek-extended.dark.svg +++ b/images/cs-block-greek-extended.dark.svg @@ -66,12 +66,12 @@ - - - - - - + + + + + + diff --git a/images/cs-block-greek-extended.light.svg b/images/cs-block-greek-extended.light.svg index aa65dc0779..46a6805ec6 100644 --- a/images/cs-block-greek-extended.light.svg +++ b/images/cs-block-greek-extended.light.svg @@ -66,12 +66,12 @@ - - - - - - + + + + + + diff --git a/images/cs-block-ipa-extensions.dark.svg b/images/cs-block-ipa-extensions.dark.svg index e746d48a04..4b4f9e46fa 100644 --- a/images/cs-block-ipa-extensions.dark.svg +++ b/images/cs-block-ipa-extensions.dark.svg @@ -43,7 +43,7 @@ - + diff --git a/images/cs-block-ipa-extensions.light.svg b/images/cs-block-ipa-extensions.light.svg index 6020b4ae83..27e913fd9c 100644 --- a/images/cs-block-ipa-extensions.light.svg +++ b/images/cs-block-ipa-extensions.light.svg @@ -43,7 +43,7 @@ - + diff --git a/images/cs-block-latin-1-supplement.dark.svg b/images/cs-block-latin-1-supplement.dark.svg index 50334cbd47..0bc7b625d8 100644 --- a/images/cs-block-latin-1-supplement.dark.svg +++ b/images/cs-block-latin-1-supplement.dark.svg @@ -93,10 +93,10 @@ - - - - + + + + diff --git a/images/cs-block-latin-1-supplement.light.svg b/images/cs-block-latin-1-supplement.light.svg index 5c84b8b7f2..e00e8418ea 100644 --- a/images/cs-block-latin-1-supplement.light.svg +++ b/images/cs-block-latin-1-supplement.light.svg @@ -93,10 +93,10 @@ - - - - + + + + diff --git a/images/cs-block-latin-extended-a.dark.svg b/images/cs-block-latin-extended-a.dark.svg index 6c08add2fd..8aba9dcf4b 100644 --- a/images/cs-block-latin-extended-a.dark.svg +++ b/images/cs-block-latin-extended-a.dark.svg @@ -60,24 +60,24 @@ - + - + - + - + - + - + - + diff --git a/images/cs-block-latin-extended-a.light.svg b/images/cs-block-latin-extended-a.light.svg index 2f692f3c0b..e69668766b 100644 --- a/images/cs-block-latin-extended-a.light.svg +++ b/images/cs-block-latin-extended-a.light.svg @@ -60,24 +60,24 @@ - + - + - + - + - + - + - + diff --git a/images/cs-block-latin-extended-additional.dark.svg b/images/cs-block-latin-extended-additional.dark.svg index 6a2fccda1c..e135bef8a7 100644 --- a/images/cs-block-latin-extended-additional.dark.svg +++ b/images/cs-block-latin-extended-additional.dark.svg @@ -64,9 +64,9 @@ - + - + @@ -76,9 +76,9 @@ - + - + @@ -220,9 +220,9 @@ - + - + diff --git a/images/cs-block-latin-extended-additional.light.svg b/images/cs-block-latin-extended-additional.light.svg index 267e8663eb..ca1627c291 100644 --- a/images/cs-block-latin-extended-additional.light.svg +++ b/images/cs-block-latin-extended-additional.light.svg @@ -64,9 +64,9 @@ - + - + @@ -76,9 +76,9 @@ - + - + @@ -220,9 +220,9 @@ - + - + diff --git a/images/cs-block-latin-extended-b.dark.svg b/images/cs-block-latin-extended-b.dark.svg index a7e265146f..dadd52f847 100644 --- a/images/cs-block-latin-extended-b.dark.svg +++ b/images/cs-block-latin-extended-b.dark.svg @@ -91,15 +91,15 @@ - - + + - - + + - + @@ -131,7 +131,7 @@ - + @@ -156,9 +156,9 @@ - + - + @@ -220,7 +220,7 @@ - + diff --git a/images/cs-block-latin-extended-b.light.svg b/images/cs-block-latin-extended-b.light.svg index 6a42f08998..05c465c945 100644 --- a/images/cs-block-latin-extended-b.light.svg +++ b/images/cs-block-latin-extended-b.light.svg @@ -91,15 +91,15 @@ - - + + - - + + - + @@ -131,7 +131,7 @@ - + @@ -156,9 +156,9 @@ - + - + @@ -220,7 +220,7 @@ - + diff --git a/images/cs-block-latin-extended-c.dark.svg b/images/cs-block-latin-extended-c.dark.svg index 1c28487a24..3e307405fb 100644 --- a/images/cs-block-latin-extended-c.dark.svg +++ b/images/cs-block-latin-extended-c.dark.svg @@ -47,7 +47,7 @@ - + diff --git a/images/cs-block-latin-extended-c.light.svg b/images/cs-block-latin-extended-c.light.svg index aa1a33aba9..f7f6969de4 100644 --- a/images/cs-block-latin-extended-c.light.svg +++ b/images/cs-block-latin-extended-c.light.svg @@ -47,7 +47,7 @@ - + diff --git a/images/cs-block-latin-extended-d.dark.svg b/images/cs-block-latin-extended-d.dark.svg index 9f349a0d95..41d31e45f3 100644 --- a/images/cs-block-latin-extended-d.dark.svg +++ b/images/cs-block-latin-extended-d.dark.svg @@ -73,7 +73,7 @@ - + @@ -122,7 +122,7 @@ - + diff --git a/images/cs-block-latin-extended-d.light.svg b/images/cs-block-latin-extended-d.light.svg index 5ad4b4bc66..9a19a85f98 100644 --- a/images/cs-block-latin-extended-d.light.svg +++ b/images/cs-block-latin-extended-d.light.svg @@ -73,7 +73,7 @@ - + @@ -122,7 +122,7 @@ - + diff --git a/images/cs-block-mathematical-alphanumeric-symbols.dark.svg b/images/cs-block-mathematical-alphanumeric-symbols.dark.svg index 463881ad0e..fef67ae6a4 100644 --- a/images/cs-block-mathematical-alphanumeric-symbols.dark.svg +++ b/images/cs-block-mathematical-alphanumeric-symbols.dark.svg @@ -53,8 +53,8 @@ - - + + @@ -105,8 +105,8 @@ - - + + @@ -157,8 +157,8 @@ - - + + @@ -278,18 +278,18 @@ - + - + - - + + diff --git a/images/cs-block-mathematical-alphanumeric-symbols.light.svg b/images/cs-block-mathematical-alphanumeric-symbols.light.svg index 533c958396..9aee2da6fa 100644 --- a/images/cs-block-mathematical-alphanumeric-symbols.light.svg +++ b/images/cs-block-mathematical-alphanumeric-symbols.light.svg @@ -53,8 +53,8 @@ - - + + @@ -105,8 +105,8 @@ - - + + @@ -157,8 +157,8 @@ - - + + @@ -278,18 +278,18 @@ - + - + - - + + diff --git a/images/cs-block-miscellaneous-mathematical-symbols-b.dark.svg b/images/cs-block-miscellaneous-mathematical-symbols-b.dark.svg index 82a03417cc..124e569125 100644 --- a/images/cs-block-miscellaneous-mathematical-symbols-b.dark.svg +++ b/images/cs-block-miscellaneous-mathematical-symbols-b.dark.svg @@ -59,19 +59,21 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -714,43 +716,43 @@ - - + + - + - + - + - - + + - + - + - + @@ -760,7 +762,7 @@ - + @@ -815,22 +817,22 @@ - + - + - + - + @@ -845,12 +847,12 @@ - + - + diff --git a/images/cs-block-miscellaneous-mathematical-symbols-b.light.svg b/images/cs-block-miscellaneous-mathematical-symbols-b.light.svg index 468a6b901a..cc246c70c9 100644 --- a/images/cs-block-miscellaneous-mathematical-symbols-b.light.svg +++ b/images/cs-block-miscellaneous-mathematical-symbols-b.light.svg @@ -59,19 +59,21 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -714,43 +716,43 @@ - - + + - + - + - + - - + + - + - + - + @@ -760,7 +762,7 @@ - + @@ -815,22 +817,22 @@ - + - + - + - + @@ -845,12 +847,12 @@ - + - + diff --git a/images/cs-block-miscellaneous-symbols-and-arrows.dark.svg b/images/cs-block-miscellaneous-symbols-and-arrows.dark.svg index e3752f8341..4081716815 100644 --- a/images/cs-block-miscellaneous-symbols-and-arrows.dark.svg +++ b/images/cs-block-miscellaneous-symbols-and-arrows.dark.svg @@ -116,34 +116,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1266,8 +1267,8 @@ - - + + @@ -1277,17 +1278,17 @@ - + - + - + @@ -1317,47 +1318,47 @@ - + - + - + - + - + - + - + - + - + @@ -1367,32 +1368,32 @@ - + - + - + - + - + - + @@ -1417,7 +1418,7 @@ - + @@ -1537,42 +1538,42 @@ - + - + - + - + - + - + - + - + @@ -1657,7 +1658,7 @@ - + diff --git a/images/cs-block-miscellaneous-symbols-and-arrows.light.svg b/images/cs-block-miscellaneous-symbols-and-arrows.light.svg index a033f42ac0..d555213276 100644 --- a/images/cs-block-miscellaneous-symbols-and-arrows.light.svg +++ b/images/cs-block-miscellaneous-symbols-and-arrows.light.svg @@ -116,34 +116,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1266,8 +1267,8 @@ - - + + @@ -1277,17 +1278,17 @@ - + - + - + @@ -1317,47 +1318,47 @@ - + - + - + - + - + - + - + - + - + @@ -1367,32 +1368,32 @@ - + - + - + - + - + - + @@ -1417,7 +1418,7 @@ - + @@ -1537,42 +1538,42 @@ - + - + - + - + - + - + - + - + @@ -1657,7 +1658,7 @@ - + diff --git a/images/cs-block-miscellaneous-symbols-and-pictographs.dark.svg b/images/cs-block-miscellaneous-symbols-and-pictographs.dark.svg index f07fcb7526..8a5b491d41 100644 --- a/images/cs-block-miscellaneous-symbols-and-pictographs.dark.svg +++ b/images/cs-block-miscellaneous-symbols-and-pictographs.dark.svg @@ -1,5 +1,5 @@ - + @@ -54,6 +54,7 @@ + @@ -3593,4 +3594,550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/cs-block-miscellaneous-symbols-and-pictographs.light.svg b/images/cs-block-miscellaneous-symbols-and-pictographs.light.svg index e34182a658..6c5a663a9e 100644 --- a/images/cs-block-miscellaneous-symbols-and-pictographs.light.svg +++ b/images/cs-block-miscellaneous-symbols-and-pictographs.light.svg @@ -1,5 +1,5 @@ - + @@ -54,6 +54,7 @@ + @@ -3593,4 +3594,550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/cs-block-miscellaneous-symbols.dark.svg b/images/cs-block-miscellaneous-symbols.dark.svg index de3f3f2f17..f6c6d18ea4 100644 --- a/images/cs-block-miscellaneous-symbols.dark.svg +++ b/images/cs-block-miscellaneous-symbols.dark.svg @@ -81,14 +81,16 @@ - + - + + + @@ -1506,18 +1508,18 @@ - - + + - - + + - - + + @@ -1562,7 +1564,7 @@ - + diff --git a/images/cs-block-miscellaneous-symbols.light.svg b/images/cs-block-miscellaneous-symbols.light.svg index 81438f585c..6851a30a6b 100644 --- a/images/cs-block-miscellaneous-symbols.light.svg +++ b/images/cs-block-miscellaneous-symbols.light.svg @@ -81,14 +81,16 @@ - + - + + + @@ -1506,18 +1508,18 @@ - - + + - - + + - - + + @@ -1562,7 +1564,7 @@ - + diff --git a/images/cs-block-miscellaneous-technical.dark.svg b/images/cs-block-miscellaneous-technical.dark.svg index c8c610e895..a6c7763531 100644 --- a/images/cs-block-miscellaneous-technical.dark.svg +++ b/images/cs-block-miscellaneous-technical.dark.svg @@ -149,26 +149,27 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -1411,13 +1412,13 @@ - - + + - + @@ -1562,42 +1563,42 @@ - + - + - + - + - + - + - + - + @@ -1632,57 +1633,57 @@ - + - + - + - + - + - + - + - + - + - + - + diff --git a/images/cs-block-miscellaneous-technical.light.svg b/images/cs-block-miscellaneous-technical.light.svg index 4f785661a1..b2a85b2393 100644 --- a/images/cs-block-miscellaneous-technical.light.svg +++ b/images/cs-block-miscellaneous-technical.light.svg @@ -149,26 +149,27 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -1411,13 +1412,13 @@ - - + + - + @@ -1562,42 +1563,42 @@ - + - + - + - + - + - + - + - + @@ -1632,57 +1633,57 @@ - + - + - + - + - + - + - + - + - + - + - + diff --git a/images/cs-block-number-forms.dark.svg b/images/cs-block-number-forms.dark.svg index 47016076e3..9926fd7032 100644 --- a/images/cs-block-number-forms.dark.svg +++ b/images/cs-block-number-forms.dark.svg @@ -51,18 +51,18 @@ - - - - + + + + - - - - + + + + - - + + diff --git a/images/cs-block-number-forms.light.svg b/images/cs-block-number-forms.light.svg index c0a10efa2b..9b75d5ddad 100644 --- a/images/cs-block-number-forms.light.svg +++ b/images/cs-block-number-forms.light.svg @@ -51,18 +51,18 @@ - - - - + + + + - - - - + + + + - - + + diff --git a/images/cs-block-phonetic-extensions-supplement.dark.svg b/images/cs-block-phonetic-extensions-supplement.dark.svg index f8a66df329..2ce2de3256 100644 --- a/images/cs-block-phonetic-extensions-supplement.dark.svg +++ b/images/cs-block-phonetic-extensions-supplement.dark.svg @@ -41,7 +41,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/images/cs-block-phonetic-extensions-supplement.light.svg b/images/cs-block-phonetic-extensions-supplement.light.svg index 6b677beceb..8205170664 100644 --- a/images/cs-block-phonetic-extensions-supplement.light.svg +++ b/images/cs-block-phonetic-extensions-supplement.light.svg @@ -41,7 +41,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/images/cs-block-phonetic-extensions.dark.svg b/images/cs-block-phonetic-extensions.dark.svg index ff97d5e7ff..9458318b21 100644 --- a/images/cs-block-phonetic-extensions.dark.svg +++ b/images/cs-block-phonetic-extensions.dark.svg @@ -28,7 +28,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -116,7 +116,7 @@ - + diff --git a/images/cs-block-phonetic-extensions.light.svg b/images/cs-block-phonetic-extensions.light.svg index 25b919a083..746f03c3d2 100644 --- a/images/cs-block-phonetic-extensions.light.svg +++ b/images/cs-block-phonetic-extensions.light.svg @@ -28,7 +28,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -116,7 +116,7 @@ - + diff --git a/images/cs-block-spacing-modifier-letters.dark.svg b/images/cs-block-spacing-modifier-letters.dark.svg index 610d3700a3..67fe29d5bd 100644 --- a/images/cs-block-spacing-modifier-letters.dark.svg +++ b/images/cs-block-spacing-modifier-letters.dark.svg @@ -21,7 +21,7 @@ - + @@ -37,9 +37,9 @@ - + - + @@ -53,12 +53,12 @@ - - + + - - - + + + diff --git a/images/cs-block-spacing-modifier-letters.light.svg b/images/cs-block-spacing-modifier-letters.light.svg index 6dc669b988..31d41d5e6d 100644 --- a/images/cs-block-spacing-modifier-letters.light.svg +++ b/images/cs-block-spacing-modifier-letters.light.svg @@ -21,7 +21,7 @@ - + @@ -37,9 +37,9 @@ - + - + @@ -53,12 +53,12 @@ - - + + - - - + + + diff --git a/images/cs-block-superscripts-and-subscripts.dark.svg b/images/cs-block-superscripts-and-subscripts.dark.svg index bea76bccd3..7b0cc96e22 100644 --- a/images/cs-block-superscripts-and-subscripts.dark.svg +++ b/images/cs-block-superscripts-and-subscripts.dark.svg @@ -20,7 +20,7 @@ - + diff --git a/images/cs-block-superscripts-and-subscripts.light.svg b/images/cs-block-superscripts-and-subscripts.light.svg index 99b12ddc5b..4d56eea0f8 100644 --- a/images/cs-block-superscripts-and-subscripts.light.svg +++ b/images/cs-block-superscripts-and-subscripts.light.svg @@ -20,7 +20,7 @@ - + diff --git a/images/cs-block-supplemental-arrows-c.dark.svg b/images/cs-block-supplemental-arrows-c.dark.svg index 7238870cd8..3c154a3dd6 100644 --- a/images/cs-block-supplemental-arrows-c.dark.svg +++ b/images/cs-block-supplemental-arrows-c.dark.svg @@ -72,6 +72,15 @@ + + + + + + + + + @@ -1181,48 +1190,48 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/images/cs-block-supplemental-arrows-c.light.svg b/images/cs-block-supplemental-arrows-c.light.svg index cf18931fcf..f353652c36 100644 --- a/images/cs-block-supplemental-arrows-c.light.svg +++ b/images/cs-block-supplemental-arrows-c.light.svg @@ -72,6 +72,15 @@ + + + + + + + + + @@ -1181,48 +1190,48 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/images/cs-block-supplemental-mathematical-operators.dark.svg b/images/cs-block-supplemental-mathematical-operators.dark.svg index b6a4ee90f5..76d0e3e213 100644 --- a/images/cs-block-supplemental-mathematical-operators.dark.svg +++ b/images/cs-block-supplemental-mathematical-operators.dark.svg @@ -48,83 +48,100 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -547,23 +564,23 @@ - - + + - - + + - + - + @@ -578,22 +595,22 @@ - + - + - + - + @@ -683,12 +700,12 @@ - + - + @@ -738,12 +755,12 @@ - + - + @@ -758,22 +775,22 @@ - + - + - + - + @@ -788,52 +805,52 @@ - + - + - + - + - + - + - + - + - + - + @@ -848,22 +865,22 @@ - + - + - + - + @@ -913,17 +930,17 @@ - + - + - + @@ -938,7 +955,7 @@ - + @@ -963,32 +980,32 @@ - + - + - + - + - + - + @@ -1053,32 +1070,32 @@ - + - + - + - + - + - + @@ -1093,12 +1110,12 @@ - + - + @@ -1188,12 +1205,12 @@ - + - + @@ -1208,57 +1225,57 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -1273,12 +1290,12 @@ - + - + @@ -1433,37 +1450,37 @@ - + - + - + - + - + - - + + - - + + @@ -1477,8 +1494,8 @@ - - + + @@ -1487,73 +1504,73 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -1568,37 +1585,37 @@ - + - + - + - + - + - + - + @@ -1628,12 +1645,12 @@ - + - + diff --git a/images/cs-block-supplemental-mathematical-operators.light.svg b/images/cs-block-supplemental-mathematical-operators.light.svg index 5383f37607..b21fdc6e74 100644 --- a/images/cs-block-supplemental-mathematical-operators.light.svg +++ b/images/cs-block-supplemental-mathematical-operators.light.svg @@ -48,83 +48,100 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -547,23 +564,23 @@ - - + + - - + + - + - + @@ -578,22 +595,22 @@ - + - + - + - + @@ -683,12 +700,12 @@ - + - + @@ -738,12 +755,12 @@ - + - + @@ -758,22 +775,22 @@ - + - + - + - + @@ -788,52 +805,52 @@ - + - + - + - + - + - + - + - + - + - + @@ -848,22 +865,22 @@ - + - + - + - + @@ -913,17 +930,17 @@ - + - + - + @@ -938,7 +955,7 @@ - + @@ -963,32 +980,32 @@ - + - + - + - + - + - + @@ -1053,32 +1070,32 @@ - + - + - + - + - + - + @@ -1093,12 +1110,12 @@ - + - + @@ -1188,12 +1205,12 @@ - + - + @@ -1208,57 +1225,57 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -1273,12 +1290,12 @@ - + - + @@ -1433,37 +1450,37 @@ - + - + - + - + - + - - + + - - + + @@ -1477,8 +1494,8 @@ - - + + @@ -1487,73 +1504,73 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -1568,37 +1585,37 @@ - + - + - + - + - + - + - + @@ -1628,12 +1645,12 @@ - + - + diff --git a/images/cs-block-supplemental-punctuation.dark.svg b/images/cs-block-supplemental-punctuation.dark.svg index d4e7f0e378..af66988dcb 100644 --- a/images/cs-block-supplemental-punctuation.dark.svg +++ b/images/cs-block-supplemental-punctuation.dark.svg @@ -21,40 +21,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -207,13 +211,13 @@ - - + + - - + + @@ -248,7 +252,7 @@ - + @@ -278,7 +282,7 @@ - + @@ -288,32 +292,32 @@ - + - + - - + + - - + + - + - + @@ -328,32 +332,32 @@ - + - + - + - + - + - + @@ -368,42 +372,42 @@ - + - + - + - + - + - + - + - + @@ -418,47 +422,47 @@ - + - + - + - + - + - + - + - + - + @@ -508,17 +512,17 @@ - + - + - + @@ -563,7 +567,7 @@ - + @@ -608,7 +612,7 @@ - + diff --git a/images/cs-block-supplemental-punctuation.light.svg b/images/cs-block-supplemental-punctuation.light.svg index c2d7711236..2b221344ad 100644 --- a/images/cs-block-supplemental-punctuation.light.svg +++ b/images/cs-block-supplemental-punctuation.light.svg @@ -21,40 +21,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -207,13 +211,13 @@ - - + + - - + + @@ -248,7 +252,7 @@ - + @@ -278,7 +282,7 @@ - + @@ -288,32 +292,32 @@ - + - + - - + + - - + + - + - + @@ -328,32 +332,32 @@ - + - + - + - + - + - + @@ -368,42 +372,42 @@ - + - + - + - + - + - + - + - + @@ -418,47 +422,47 @@ - + - + - + - + - + - + - + - + - + @@ -508,17 +512,17 @@ - + - + - + @@ -563,7 +567,7 @@ - + @@ -608,7 +612,7 @@ - + diff --git a/images/cs-block-symbols-for-legacy-computing-supplement-purposed.dark.svg b/images/cs-block-symbols-for-legacy-computing-supplement-proposed.dark.svg similarity index 61% rename from images/cs-block-symbols-for-legacy-computing-supplement-purposed.dark.svg rename to images/cs-block-symbols-for-legacy-computing-supplement-proposed.dark.svg index bfc5430f04..c64aceba9b 100644 --- a/images/cs-block-symbols-for-legacy-computing-supplement-purposed.dark.svg +++ b/images/cs-block-symbols-for-legacy-computing-supplement-proposed.dark.svg @@ -1,5 +1,5 @@ - + @@ -20,340 +20,478 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -436,13 +574,13 @@ - + - + @@ -472,2242 +610,3880 @@ - - - - - - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + \ No newline at end of file diff --git a/images/cs-block-symbols-for-legacy-computing-supplement-purposed.light.svg b/images/cs-block-symbols-for-legacy-computing-supplement-proposed.light.svg similarity index 61% rename from images/cs-block-symbols-for-legacy-computing-supplement-purposed.light.svg rename to images/cs-block-symbols-for-legacy-computing-supplement-proposed.light.svg index 2855b5bcce..1c3b42477b 100644 --- a/images/cs-block-symbols-for-legacy-computing-supplement-purposed.light.svg +++ b/images/cs-block-symbols-for-legacy-computing-supplement-proposed.light.svg @@ -1,5 +1,5 @@ - + @@ -20,340 +20,478 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -436,13 +574,13 @@ - + - + @@ -472,2242 +610,3880 @@ - - - - - - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + \ No newline at end of file diff --git a/images/cs-block-symbols-for-legacy-computing.dark.svg b/images/cs-block-symbols-for-legacy-computing.dark.svg index 341732fa74..1100835655 100644 --- a/images/cs-block-symbols-for-legacy-computing.dark.svg +++ b/images/cs-block-symbols-for-legacy-computing.dark.svg @@ -208,9 +208,9 @@ - - - + + + @@ -222,16 +222,39 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1391,17 +1414,17 @@ - + - + - + @@ -1477,8 +1500,8 @@ - - + + @@ -1487,13 +1510,13 @@ - - + + - - + + @@ -1508,83 +1531,83 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1619,23 +1642,23 @@ - - + + - - + + - - + + - - + + @@ -1691,52 +1714,52 @@ - + - + - + - + - + - + - + - + - + - + diff --git a/images/cs-block-symbols-for-legacy-computing.light.svg b/images/cs-block-symbols-for-legacy-computing.light.svg index fdb9b274f8..53402f5657 100644 --- a/images/cs-block-symbols-for-legacy-computing.light.svg +++ b/images/cs-block-symbols-for-legacy-computing.light.svg @@ -208,9 +208,9 @@ - - - + + + @@ -222,16 +222,39 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1391,17 +1414,17 @@ - + - + - + @@ -1477,8 +1500,8 @@ - - + + @@ -1487,13 +1510,13 @@ - - + + - - + + @@ -1508,83 +1531,83 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1619,23 +1642,23 @@ - - + + - - + + - - + + - - + + @@ -1691,52 +1714,52 @@ - + - + - + - + - + - + - + - + - + - + diff --git a/images/cv-capital-z-cursive-with-crossbar.dark.svg b/images/cv-capital-z-cursive-with-crossbar.dark.svg index a91e54c526..46c82514b6 100644 --- a/images/cv-capital-z-cursive-with-crossbar.dark.svg +++ b/images/cv-capital-z-cursive-with-crossbar.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-capital-z-cursive-with-crossbar.light.svg b/images/cv-capital-z-cursive-with-crossbar.light.svg index 2ded630a1f..b7cdd5a22a 100644 --- a/images/cv-capital-z-cursive-with-crossbar.light.svg +++ b/images/cv-capital-z-cursive-with-crossbar.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-capital-z-cursive-with-horizontal-crossbar.dark.svg b/images/cv-capital-z-cursive-with-horizontal-crossbar.dark.svg index 4bb35b5a04..aecf72aa66 100644 --- a/images/cv-capital-z-cursive-with-horizontal-crossbar.dark.svg +++ b/images/cv-capital-z-cursive-with-horizontal-crossbar.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-capital-z-cursive-with-horizontal-crossbar.light.svg b/images/cv-capital-z-cursive-with-horizontal-crossbar.light.svg index 64206bc01c..30b116342a 100644 --- a/images/cv-capital-z-cursive-with-horizontal-crossbar.light.svg +++ b/images/cv-capital-z-cursive-with-horizontal-crossbar.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-capital-z-cursive.dark.svg b/images/cv-capital-z-cursive.dark.svg index 2f10f95dc6..91b8f9fea2 100644 --- a/images/cv-capital-z-cursive.dark.svg +++ b/images/cv-capital-z-cursive.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-capital-z-cursive.light.svg b/images/cv-capital-z-cursive.light.svg index f65c141e3c..0a33e19f19 100644 --- a/images/cv-capital-z-cursive.light.svg +++ b/images/cv-capital-z-cursive.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-diacritic-dot-round.dark.svg b/images/cv-diacritic-dot-round.dark.svg index 3205b41fa0..5e9a33543a 100644 --- a/images/cv-diacritic-dot-round.dark.svg +++ b/images/cv-diacritic-dot-round.dark.svg @@ -1,8 +1,8 @@ - - + + diff --git a/images/cv-diacritic-dot-round.light.svg b/images/cv-diacritic-dot-round.light.svg index fa74afa15d..284a4fdb10 100644 --- a/images/cv-diacritic-dot-round.light.svg +++ b/images/cv-diacritic-dot-round.light.svg @@ -1,8 +1,8 @@ - - + + diff --git a/images/cv-diacritic-dot-square.dark.svg b/images/cv-diacritic-dot-square.dark.svg index ed11754928..b5831a9d3a 100644 --- a/images/cv-diacritic-dot-square.dark.svg +++ b/images/cv-diacritic-dot-square.dark.svg @@ -1,8 +1,8 @@ - - + + diff --git a/images/cv-diacritic-dot-square.light.svg b/images/cv-diacritic-dot-square.light.svg index cab48683c6..540b023828 100644 --- a/images/cv-diacritic-dot-square.light.svg +++ b/images/cv-diacritic-dot-square.light.svg @@ -1,8 +1,8 @@ - - + + diff --git a/images/cv-five-oblique-arched-serifed.dark.svg b/images/cv-five-oblique-arched-serifed.dark.svg new file mode 100644 index 0000000000..820bbcc8db --- /dev/null +++ b/images/cv-five-oblique-arched-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-oblique-arched-serifed.light.svg b/images/cv-five-oblique-arched-serifed.light.svg new file mode 100644 index 0000000000..93c008a53f --- /dev/null +++ b/images/cv-five-oblique-arched-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-oblique-arched.dark.svg b/images/cv-five-oblique-arched-serifless.dark.svg similarity index 100% rename from images/cv-five-oblique-arched.dark.svg rename to images/cv-five-oblique-arched-serifless.dark.svg diff --git a/images/cv-five-oblique-arched.light.svg b/images/cv-five-oblique-arched-serifless.light.svg similarity index 100% rename from images/cv-five-oblique-arched.light.svg rename to images/cv-five-oblique-arched-serifless.light.svg diff --git a/images/cv-five-oblique-flat-serifed.dark.svg b/images/cv-five-oblique-flat-serifed.dark.svg new file mode 100644 index 0000000000..f376451c9f --- /dev/null +++ b/images/cv-five-oblique-flat-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-oblique-flat-serifed.light.svg b/images/cv-five-oblique-flat-serifed.light.svg new file mode 100644 index 0000000000..17e3dd52be --- /dev/null +++ b/images/cv-five-oblique-flat-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-oblique-flat.dark.svg b/images/cv-five-oblique-flat-serifless.dark.svg similarity index 100% rename from images/cv-five-oblique-flat.dark.svg rename to images/cv-five-oblique-flat-serifless.dark.svg diff --git a/images/cv-five-oblique-flat.light.svg b/images/cv-five-oblique-flat-serifless.light.svg similarity index 100% rename from images/cv-five-oblique-flat.light.svg rename to images/cv-five-oblique-flat-serifless.light.svg diff --git a/images/cv-five-upright-arched-serifed.dark.svg b/images/cv-five-upright-arched-serifed.dark.svg new file mode 100644 index 0000000000..3007e23ecb --- /dev/null +++ b/images/cv-five-upright-arched-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-upright-arched-serifed.light.svg b/images/cv-five-upright-arched-serifed.light.svg new file mode 100644 index 0000000000..13aa48716a --- /dev/null +++ b/images/cv-five-upright-arched-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-upright-arched.dark.svg b/images/cv-five-upright-arched-serifless.dark.svg similarity index 100% rename from images/cv-five-upright-arched.dark.svg rename to images/cv-five-upright-arched-serifless.dark.svg diff --git a/images/cv-five-upright-arched.light.svg b/images/cv-five-upright-arched-serifless.light.svg similarity index 100% rename from images/cv-five-upright-arched.light.svg rename to images/cv-five-upright-arched-serifless.light.svg diff --git a/images/cv-five-upright-flat-serifed.dark.svg b/images/cv-five-upright-flat-serifed.dark.svg new file mode 100644 index 0000000000..aaa17c31ef --- /dev/null +++ b/images/cv-five-upright-flat-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-upright-flat-serifed.light.svg b/images/cv-five-upright-flat-serifed.light.svg new file mode 100644 index 0000000000..336214088f --- /dev/null +++ b/images/cv-five-upright-flat-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-five-upright-flat.dark.svg b/images/cv-five-upright-flat-serifless.dark.svg similarity index 100% rename from images/cv-five-upright-flat.dark.svg rename to images/cv-five-upright-flat-serifless.dark.svg diff --git a/images/cv-five-upright-flat.light.svg b/images/cv-five-upright-flat-serifless.light.svg similarity index 100% rename from images/cv-five-upright-flat.light.svg rename to images/cv-five-upright-flat-serifless.light.svg diff --git a/images/cv-four-closed-non-crossing-serifed.dark.svg b/images/cv-four-closed-non-crossing-serifed.dark.svg new file mode 100644 index 0000000000..db116d919d --- /dev/null +++ b/images/cv-four-closed-non-crossing-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-closed-non-crossing-serifed.light.svg b/images/cv-four-closed-non-crossing-serifed.light.svg new file mode 100644 index 0000000000..a1f0202a4d --- /dev/null +++ b/images/cv-four-closed-non-crossing-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-closed-non-crossing.dark.svg b/images/cv-four-closed-non-crossing-serifless.dark.svg similarity index 100% rename from images/cv-four-closed-non-crossing.dark.svg rename to images/cv-four-closed-non-crossing-serifless.dark.svg diff --git a/images/cv-four-closed-non-crossing.light.svg b/images/cv-four-closed-non-crossing-serifless.light.svg similarity index 100% rename from images/cv-four-closed-non-crossing.light.svg rename to images/cv-four-closed-non-crossing-serifless.light.svg diff --git a/images/cv-four-closed-serifed.dark.svg b/images/cv-four-closed-serifed.dark.svg new file mode 100644 index 0000000000..5eceb3db1d --- /dev/null +++ b/images/cv-four-closed-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-closed-serifed.light.svg b/images/cv-four-closed-serifed.light.svg new file mode 100644 index 0000000000..4bdb8dfd5e --- /dev/null +++ b/images/cv-four-closed-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-closed.dark.svg b/images/cv-four-closed-serifless.dark.svg similarity index 100% rename from images/cv-four-closed.dark.svg rename to images/cv-four-closed-serifless.dark.svg diff --git a/images/cv-four-closed.light.svg b/images/cv-four-closed-serifless.light.svg similarity index 100% rename from images/cv-four-closed.light.svg rename to images/cv-four-closed-serifless.light.svg diff --git a/images/cv-four-open-non-crossing-serifed.dark.svg b/images/cv-four-open-non-crossing-serifed.dark.svg new file mode 100644 index 0000000000..c59840116f --- /dev/null +++ b/images/cv-four-open-non-crossing-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-open-non-crossing-serifed.light.svg b/images/cv-four-open-non-crossing-serifed.light.svg new file mode 100644 index 0000000000..93ad88321d --- /dev/null +++ b/images/cv-four-open-non-crossing-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-open-non-crossing.dark.svg b/images/cv-four-open-non-crossing-serifless.dark.svg similarity index 100% rename from images/cv-four-open-non-crossing.dark.svg rename to images/cv-four-open-non-crossing-serifless.dark.svg diff --git a/images/cv-four-open-non-crossing.light.svg b/images/cv-four-open-non-crossing-serifless.light.svg similarity index 100% rename from images/cv-four-open-non-crossing.light.svg rename to images/cv-four-open-non-crossing-serifless.light.svg diff --git a/images/cv-four-open-serifed.dark.svg b/images/cv-four-open-serifed.dark.svg new file mode 100644 index 0000000000..4d83f4dce8 --- /dev/null +++ b/images/cv-four-open-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-open-serifed.light.svg b/images/cv-four-open-serifed.light.svg new file mode 100644 index 0000000000..818fddcfd9 --- /dev/null +++ b/images/cv-four-open-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-open.dark.svg b/images/cv-four-open-serifless.dark.svg similarity index 100% rename from images/cv-four-open.dark.svg rename to images/cv-four-open-serifless.dark.svg diff --git a/images/cv-four-open.light.svg b/images/cv-four-open-serifless.light.svg similarity index 100% rename from images/cv-four-open.light.svg rename to images/cv-four-open-serifless.light.svg diff --git a/images/cv-four-semi-open-non-crossing-serifed.dark.svg b/images/cv-four-semi-open-non-crossing-serifed.dark.svg new file mode 100644 index 0000000000..0e71b47078 --- /dev/null +++ b/images/cv-four-semi-open-non-crossing-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-semi-open-non-crossing-serifed.light.svg b/images/cv-four-semi-open-non-crossing-serifed.light.svg new file mode 100644 index 0000000000..a86ab1a370 --- /dev/null +++ b/images/cv-four-semi-open-non-crossing-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-semi-open-non-crossing.dark.svg b/images/cv-four-semi-open-non-crossing-serifless.dark.svg similarity index 100% rename from images/cv-four-semi-open-non-crossing.dark.svg rename to images/cv-four-semi-open-non-crossing-serifless.dark.svg diff --git a/images/cv-four-semi-open-non-crossing.light.svg b/images/cv-four-semi-open-non-crossing-serifless.light.svg similarity index 100% rename from images/cv-four-semi-open-non-crossing.light.svg rename to images/cv-four-semi-open-non-crossing-serifless.light.svg diff --git a/images/cv-four-semi-open-serifed.dark.svg b/images/cv-four-semi-open-serifed.dark.svg new file mode 100644 index 0000000000..eee4473ec3 --- /dev/null +++ b/images/cv-four-semi-open-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-semi-open-serifed.light.svg b/images/cv-four-semi-open-serifed.light.svg new file mode 100644 index 0000000000..f443fc959f --- /dev/null +++ b/images/cv-four-semi-open-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-four-semi-open.dark.svg b/images/cv-four-semi-open-serifless.dark.svg similarity index 100% rename from images/cv-four-semi-open.dark.svg rename to images/cv-four-semi-open-serifless.dark.svg diff --git a/images/cv-four-semi-open.light.svg b/images/cv-four-semi-open-serifless.light.svg similarity index 100% rename from images/cv-four-semi-open.light.svg rename to images/cv-four-semi-open-serifless.light.svg diff --git a/images/cv-i-diagonal-tailed.dark.svg b/images/cv-i-diagonal-tailed.dark.svg index 00f9cd4ee4..9644df081b 100644 --- a/images/cv-i-diagonal-tailed.dark.svg +++ b/images/cv-i-diagonal-tailed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-diagonal-tailed.light.svg b/images/cv-i-diagonal-tailed.light.svg index 48729be4c1..4d3c3dc3f5 100644 --- a/images/cv-i-diagonal-tailed.light.svg +++ b/images/cv-i-diagonal-tailed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-flat-tailed.dark.svg b/images/cv-i-flat-tailed.dark.svg index 27344ea57a..bd85401151 100644 --- a/images/cv-i-flat-tailed.dark.svg +++ b/images/cv-i-flat-tailed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-flat-tailed.light.svg b/images/cv-i-flat-tailed.light.svg index c0fe3172b5..ef2aa42437 100644 --- a/images/cv-i-flat-tailed.light.svg +++ b/images/cv-i-flat-tailed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-hooky-bottom.dark.svg b/images/cv-i-hooky-bottom.dark.svg index 0b08af1c26..409d6fc4af 100644 --- a/images/cv-i-hooky-bottom.dark.svg +++ b/images/cv-i-hooky-bottom.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-hooky-bottom.light.svg b/images/cv-i-hooky-bottom.light.svg index cdaa9aeb7f..6b42bd5c35 100644 --- a/images/cv-i-hooky-bottom.light.svg +++ b/images/cv-i-hooky-bottom.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-hooky.dark.svg b/images/cv-i-hooky.dark.svg index 7242a16655..575fd146fe 100644 --- a/images/cv-i-hooky.dark.svg +++ b/images/cv-i-hooky.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-hooky.light.svg b/images/cv-i-hooky.light.svg index 20d0d9d468..8e4ccff38b 100644 --- a/images/cv-i-hooky.light.svg +++ b/images/cv-i-hooky.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-semi-tailed.dark.svg b/images/cv-i-semi-tailed.dark.svg index 5fd97beec4..72980ba280 100644 --- a/images/cv-i-semi-tailed.dark.svg +++ b/images/cv-i-semi-tailed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-semi-tailed.light.svg b/images/cv-i-semi-tailed.light.svg index c4fa7b6534..a12414e158 100644 --- a/images/cv-i-semi-tailed.light.svg +++ b/images/cv-i-semi-tailed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-serifed-asymmetric.dark.svg b/images/cv-i-serifed-asymmetric.dark.svg index 742a862b17..e11aec0b29 100644 --- a/images/cv-i-serifed-asymmetric.dark.svg +++ b/images/cv-i-serifed-asymmetric.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-serifed-asymmetric.light.svg b/images/cv-i-serifed-asymmetric.light.svg index 04080a4d5e..99e26596dc 100644 --- a/images/cv-i-serifed-asymmetric.light.svg +++ b/images/cv-i-serifed-asymmetric.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-serifed.dark.svg b/images/cv-i-serifed.dark.svg index 115ab2eeed..0ee7fcf389 100644 --- a/images/cv-i-serifed.dark.svg +++ b/images/cv-i-serifed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-serifed.light.svg b/images/cv-i-serifed.light.svg index 5a76bb7e06..3ba28fcaf7 100644 --- a/images/cv-i-serifed.light.svg +++ b/images/cv-i-serifed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-tailed-serifed.dark.svg b/images/cv-i-tailed-serifed.dark.svg index f1272b0984..922465263c 100644 --- a/images/cv-i-tailed-serifed.dark.svg +++ b/images/cv-i-tailed-serifed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-tailed-serifed.light.svg b/images/cv-i-tailed-serifed.light.svg index 49625fc6a4..ac8f3f0d99 100644 --- a/images/cv-i-tailed-serifed.light.svg +++ b/images/cv-i-tailed-serifed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-tailed.dark.svg b/images/cv-i-tailed.dark.svg index 02930c7984..fb639a9960 100644 --- a/images/cv-i-tailed.dark.svg +++ b/images/cv-i-tailed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-i-tailed.light.svg b/images/cv-i-tailed.light.svg index dfc260ae5e..2845dec9e2 100644 --- a/images/cv-i-tailed.light.svg +++ b/images/cv-i-tailed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-diagonal-tailed-serifed.dark.svg b/images/cv-j-diagonal-tailed-serifed.dark.svg index 07f2046fa2..b1d64379ec 100644 --- a/images/cv-j-diagonal-tailed-serifed.dark.svg +++ b/images/cv-j-diagonal-tailed-serifed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-diagonal-tailed-serifed.light.svg b/images/cv-j-diagonal-tailed-serifed.light.svg index fc57ce29ce..71af9ac2d0 100644 --- a/images/cv-j-diagonal-tailed-serifed.light.svg +++ b/images/cv-j-diagonal-tailed-serifed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-flat-hook-serifed.dark.svg b/images/cv-j-flat-hook-serifed.dark.svg index 242ff638e3..d9abcc1129 100644 --- a/images/cv-j-flat-hook-serifed.dark.svg +++ b/images/cv-j-flat-hook-serifed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-flat-hook-serifed.light.svg b/images/cv-j-flat-hook-serifed.light.svg index 720989ffd5..5ffbd507c7 100644 --- a/images/cv-j-flat-hook-serifed.light.svg +++ b/images/cv-j-flat-hook-serifed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-serifed.dark.svg b/images/cv-j-serifed.dark.svg index 618357f66f..0693a08fef 100644 --- a/images/cv-j-serifed.dark.svg +++ b/images/cv-j-serifed.dark.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-j-serifed.light.svg b/images/cv-j-serifed.light.svg index 2b96a743a7..475eb5ac1a 100644 --- a/images/cv-j-serifed.light.svg +++ b/images/cv-j-serifed.light.svg @@ -1,7 +1,7 @@ - + diff --git a/images/cv-three-flat-top-serifed.dark.svg b/images/cv-three-flat-top-serifed.dark.svg new file mode 100644 index 0000000000..4a1cb00f1e --- /dev/null +++ b/images/cv-three-flat-top-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-three-flat-top-serifed.light.svg b/images/cv-three-flat-top-serifed.light.svg new file mode 100644 index 0000000000..52b9a885c0 --- /dev/null +++ b/images/cv-three-flat-top-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-three-flat-top.dark.svg b/images/cv-three-flat-top-serifless.dark.svg similarity index 100% rename from images/cv-three-flat-top.dark.svg rename to images/cv-three-flat-top-serifless.dark.svg diff --git a/images/cv-three-flat-top.light.svg b/images/cv-three-flat-top-serifless.light.svg similarity index 100% rename from images/cv-three-flat-top.light.svg rename to images/cv-three-flat-top-serifless.light.svg diff --git a/images/cv-two-curly-neck-serifed.dark.svg b/images/cv-two-curly-neck-serifed.dark.svg new file mode 100644 index 0000000000..86cb8189fe --- /dev/null +++ b/images/cv-two-curly-neck-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-two-curly-neck-serifed.light.svg b/images/cv-two-curly-neck-serifed.light.svg new file mode 100644 index 0000000000..930558c31a --- /dev/null +++ b/images/cv-two-curly-neck-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-two-curly-neck.dark.svg b/images/cv-two-curly-neck-serifless.dark.svg similarity index 100% rename from images/cv-two-curly-neck.dark.svg rename to images/cv-two-curly-neck-serifless.dark.svg diff --git a/images/cv-two-curly-neck.light.svg b/images/cv-two-curly-neck-serifless.light.svg similarity index 100% rename from images/cv-two-curly-neck.light.svg rename to images/cv-two-curly-neck-serifless.light.svg diff --git a/images/cv-two-straight-neck-serifed.dark.svg b/images/cv-two-straight-neck-serifed.dark.svg new file mode 100644 index 0000000000..0afcd43748 --- /dev/null +++ b/images/cv-two-straight-neck-serifed.dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-two-straight-neck-serifed.light.svg b/images/cv-two-straight-neck-serifed.light.svg new file mode 100644 index 0000000000..b45036186f --- /dev/null +++ b/images/cv-two-straight-neck-serifed.light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/images/cv-two-straight-neck.dark.svg b/images/cv-two-straight-neck-serifless.dark.svg similarity index 100% rename from images/cv-two-straight-neck.dark.svg rename to images/cv-two-straight-neck-serifless.dark.svg diff --git a/images/cv-two-straight-neck.light.svg b/images/cv-two-straight-neck-serifless.light.svg similarity index 100% rename from images/cv-two-straight-neck.light.svg rename to images/cv-two-straight-neck-serifless.light.svg diff --git a/images/languages.dark.svg b/images/languages.dark.svg index 59ae9360d6..f9044f5be0 100644 --- a/images/languages.dark.svg +++ b/images/languages.dark.svg @@ -5,7 +5,7 @@ - + @@ -20,11 +20,11 @@ - + - + @@ -49,7 +49,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -125,9 +125,9 @@ - + - + @@ -149,14 +149,14 @@ - + - + @@ -233,7 +233,7 @@ - + @@ -244,7 +244,7 @@ - + diff --git a/images/languages.light.svg b/images/languages.light.svg index 94dc567aec..094bccdcc6 100644 --- a/images/languages.light.svg +++ b/images/languages.light.svg @@ -5,7 +5,7 @@ - + @@ -20,11 +20,11 @@ - + - + @@ -49,7 +49,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -125,9 +125,9 @@ - + - + @@ -149,14 +149,14 @@ - + - + @@ -233,7 +233,7 @@ - + @@ -244,7 +244,7 @@ - + diff --git a/images/ligset-IDRS-1.dark.svg b/images/ligset-IDRS-1.dark.svg index e34dd4d617..657279981e 100644 --- a/images/ligset-IDRS-1.dark.svg +++ b/images/ligset-IDRS-1.dark.svg @@ -79,10 +79,10 @@ - + - + diff --git a/images/ligset-IDRS-1.light.svg b/images/ligset-IDRS-1.light.svg index 67c8dd0f86..23ec8c627e 100644 --- a/images/ligset-IDRS-1.light.svg +++ b/images/ligset-IDRS-1.light.svg @@ -79,10 +79,10 @@ - + - + diff --git a/images/ligset-dlig-1.dark.svg b/images/ligset-dlig-1.dark.svg index 324373b990..575e996373 100644 --- a/images/ligset-dlig-1.dark.svg +++ b/images/ligset-dlig-1.dark.svg @@ -83,12 +83,12 @@ - + - - - + + + diff --git a/images/ligset-dlig-1.light.svg b/images/ligset-dlig-1.light.svg index c60e158f51..47d6d7e02a 100644 --- a/images/ligset-dlig-1.light.svg +++ b/images/ligset-dlig-1.light.svg @@ -83,12 +83,12 @@ - + - - - + + + diff --git a/images/package-sample-Iosevka.dark.svg b/images/package-sample-Iosevka.dark.svg index 3bd4a14d74..eb1e983303 100644 --- a/images/package-sample-Iosevka.dark.svg +++ b/images/package-sample-Iosevka.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-Iosevka.light.svg b/images/package-sample-Iosevka.light.svg index 397ec6bcf3..42862799fc 100644 --- a/images/package-sample-Iosevka.light.svg +++ b/images/package-sample-Iosevka.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaAile.dark.svg b/images/package-sample-IosevkaAile.dark.svg index 611ea48301..2abfde2997 100644 --- a/images/package-sample-IosevkaAile.dark.svg +++ b/images/package-sample-IosevkaAile.dark.svg @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -33,27 +33,27 @@ - + - - + + - + - + - + - + - + @@ -71,20 +71,20 @@ - + - + - + - + @@ -96,16 +96,16 @@ - + - + - + - + @@ -116,7 +116,7 @@ - + @@ -124,21 +124,21 @@ - + - + - + - + - + @@ -151,86 +151,86 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - + + + + + + + + @@ -241,53 +241,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -298,123 +298,123 @@ - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/images/package-sample-IosevkaAile.light.svg b/images/package-sample-IosevkaAile.light.svg index 0cbd11c817..9130bafa5e 100644 --- a/images/package-sample-IosevkaAile.light.svg +++ b/images/package-sample-IosevkaAile.light.svg @@ -4,7 +4,7 @@ - + @@ -14,7 +14,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -33,27 +33,27 @@ - + - - + + - + - + - + - + - + @@ -71,20 +71,20 @@ - + - + - + - + @@ -96,16 +96,16 @@ - + - + - + - + @@ -116,7 +116,7 @@ - + @@ -124,21 +124,21 @@ - + - + - + - + - + @@ -151,86 +151,86 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - + + + + + + + + @@ -241,53 +241,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -298,123 +298,123 @@ - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/images/package-sample-IosevkaCurly.dark.svg b/images/package-sample-IosevkaCurly.dark.svg index d25a09dbd4..4624a4b562 100644 --- a/images/package-sample-IosevkaCurly.dark.svg +++ b/images/package-sample-IosevkaCurly.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaCurly.light.svg b/images/package-sample-IosevkaCurly.light.svg index 9d1b693221..6af3b8e6f7 100644 --- a/images/package-sample-IosevkaCurly.light.svg +++ b/images/package-sample-IosevkaCurly.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaCurlySlab.dark.svg b/images/package-sample-IosevkaCurlySlab.dark.svg index 137ecb0531..ee7ac4f4bc 100644 --- a/images/package-sample-IosevkaCurlySlab.dark.svg +++ b/images/package-sample-IosevkaCurlySlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaCurlySlab.light.svg b/images/package-sample-IosevkaCurlySlab.light.svg index 25ead839d8..b3987780df 100644 --- a/images/package-sample-IosevkaCurlySlab.light.svg +++ b/images/package-sample-IosevkaCurlySlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaEtoile.dark.svg b/images/package-sample-IosevkaEtoile.dark.svg index 8dfe68ea05..2f338b76af 100644 --- a/images/package-sample-IosevkaEtoile.dark.svg +++ b/images/package-sample-IosevkaEtoile.dark.svg @@ -4,27 +4,27 @@ - + - + - + - + - + @@ -33,28 +33,28 @@ - + - - + + - - + + - + - + - + @@ -72,20 +72,20 @@ - + - + - + - + @@ -97,16 +97,16 @@ - + - + - + - + @@ -117,7 +117,7 @@ - + @@ -125,21 +125,21 @@ - + - + - + - + - + @@ -152,143 +152,143 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -299,123 +299,123 @@ - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/images/package-sample-IosevkaEtoile.light.svg b/images/package-sample-IosevkaEtoile.light.svg index 418e4f7118..2e1817ec58 100644 --- a/images/package-sample-IosevkaEtoile.light.svg +++ b/images/package-sample-IosevkaEtoile.light.svg @@ -4,27 +4,27 @@ - + - + - + - + - + @@ -33,28 +33,28 @@ - + - - + + - - + + - + - + - + @@ -72,20 +72,20 @@ - + - + - + - + @@ -97,16 +97,16 @@ - + - + - + - + @@ -117,7 +117,7 @@ - + @@ -125,21 +125,21 @@ - + - + - + - + - + @@ -152,143 +152,143 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -299,123 +299,123 @@ - + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/images/package-sample-IosevkaFixed.dark.svg b/images/package-sample-IosevkaFixed.dark.svg index 3bd4a14d74..eb1e983303 100644 --- a/images/package-sample-IosevkaFixed.dark.svg +++ b/images/package-sample-IosevkaFixed.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixed.light.svg b/images/package-sample-IosevkaFixed.light.svg index 397ec6bcf3..42862799fc 100644 --- a/images/package-sample-IosevkaFixed.light.svg +++ b/images/package-sample-IosevkaFixed.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedCurly.dark.svg b/images/package-sample-IosevkaFixedCurly.dark.svg index d25a09dbd4..4624a4b562 100644 --- a/images/package-sample-IosevkaFixedCurly.dark.svg +++ b/images/package-sample-IosevkaFixedCurly.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedCurly.light.svg b/images/package-sample-IosevkaFixedCurly.light.svg index 9d1b693221..6af3b8e6f7 100644 --- a/images/package-sample-IosevkaFixedCurly.light.svg +++ b/images/package-sample-IosevkaFixedCurly.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedCurlySlab.dark.svg b/images/package-sample-IosevkaFixedCurlySlab.dark.svg index 137ecb0531..ee7ac4f4bc 100644 --- a/images/package-sample-IosevkaFixedCurlySlab.dark.svg +++ b/images/package-sample-IosevkaFixedCurlySlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaFixedCurlySlab.light.svg b/images/package-sample-IosevkaFixedCurlySlab.light.svg index 25ead839d8..b3987780df 100644 --- a/images/package-sample-IosevkaFixedCurlySlab.light.svg +++ b/images/package-sample-IosevkaFixedCurlySlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS01.dark.svg b/images/package-sample-IosevkaFixedSS01.dark.svg index b4211b36ce..63b07fbb4e 100644 --- a/images/package-sample-IosevkaFixedSS01.dark.svg +++ b/images/package-sample-IosevkaFixedSS01.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS01.light.svg b/images/package-sample-IosevkaFixedSS01.light.svg index e6c2dfda5a..9ff10c4791 100644 --- a/images/package-sample-IosevkaFixedSS01.light.svg +++ b/images/package-sample-IosevkaFixedSS01.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS02.dark.svg b/images/package-sample-IosevkaFixedSS02.dark.svg index 650f25dae3..164d04c2b5 100644 --- a/images/package-sample-IosevkaFixedSS02.dark.svg +++ b/images/package-sample-IosevkaFixedSS02.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS02.light.svg b/images/package-sample-IosevkaFixedSS02.light.svg index 472dee3bc7..9f4e8f5a25 100644 --- a/images/package-sample-IosevkaFixedSS02.light.svg +++ b/images/package-sample-IosevkaFixedSS02.light.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS03.dark.svg b/images/package-sample-IosevkaFixedSS03.dark.svg index 2924f66578..6961cc57bc 100644 --- a/images/package-sample-IosevkaFixedSS03.dark.svg +++ b/images/package-sample-IosevkaFixedSS03.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS03.light.svg b/images/package-sample-IosevkaFixedSS03.light.svg index 05bc0f66e5..7a9469b087 100644 --- a/images/package-sample-IosevkaFixedSS03.light.svg +++ b/images/package-sample-IosevkaFixedSS03.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS04.dark.svg b/images/package-sample-IosevkaFixedSS04.dark.svg index 5ea3d70c60..5d367630df 100644 --- a/images/package-sample-IosevkaFixedSS04.dark.svg +++ b/images/package-sample-IosevkaFixedSS04.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS04.light.svg b/images/package-sample-IosevkaFixedSS04.light.svg index dfbeb18606..4387d1d703 100644 --- a/images/package-sample-IosevkaFixedSS04.light.svg +++ b/images/package-sample-IosevkaFixedSS04.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS05.dark.svg b/images/package-sample-IosevkaFixedSS05.dark.svg index f2d9e0898e..8a32fec772 100644 --- a/images/package-sample-IosevkaFixedSS05.dark.svg +++ b/images/package-sample-IosevkaFixedSS05.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS05.light.svg b/images/package-sample-IosevkaFixedSS05.light.svg index 5d9721cb03..f69ffccdef 100644 --- a/images/package-sample-IosevkaFixedSS05.light.svg +++ b/images/package-sample-IosevkaFixedSS05.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS06.dark.svg b/images/package-sample-IosevkaFixedSS06.dark.svg index fb224b9681..c949e78702 100644 --- a/images/package-sample-IosevkaFixedSS06.dark.svg +++ b/images/package-sample-IosevkaFixedSS06.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS06.light.svg b/images/package-sample-IosevkaFixedSS06.light.svg index 9f48b2f305..b6fcf3fd5a 100644 --- a/images/package-sample-IosevkaFixedSS06.light.svg +++ b/images/package-sample-IosevkaFixedSS06.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS07.dark.svg b/images/package-sample-IosevkaFixedSS07.dark.svg index 56150f237d..af20478724 100644 --- a/images/package-sample-IosevkaFixedSS07.dark.svg +++ b/images/package-sample-IosevkaFixedSS07.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS07.light.svg b/images/package-sample-IosevkaFixedSS07.light.svg index 91cbc67513..d5486e3312 100644 --- a/images/package-sample-IosevkaFixedSS07.light.svg +++ b/images/package-sample-IosevkaFixedSS07.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS08.dark.svg b/images/package-sample-IosevkaFixedSS08.dark.svg index 092e834954..af35832ecc 100644 --- a/images/package-sample-IosevkaFixedSS08.dark.svg +++ b/images/package-sample-IosevkaFixedSS08.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS08.light.svg b/images/package-sample-IosevkaFixedSS08.light.svg index 4c187728b0..72a8fdcb84 100644 --- a/images/package-sample-IosevkaFixedSS08.light.svg +++ b/images/package-sample-IosevkaFixedSS08.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS09.dark.svg b/images/package-sample-IosevkaFixedSS09.dark.svg index ec6bbb8ec5..745e886ae0 100644 --- a/images/package-sample-IosevkaFixedSS09.dark.svg +++ b/images/package-sample-IosevkaFixedSS09.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS09.light.svg b/images/package-sample-IosevkaFixedSS09.light.svg index 1bdac85c31..ccc8a963c7 100644 --- a/images/package-sample-IosevkaFixedSS09.light.svg +++ b/images/package-sample-IosevkaFixedSS09.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS10.dark.svg b/images/package-sample-IosevkaFixedSS10.dark.svg index d8d9a84e3d..63b770a7e5 100644 --- a/images/package-sample-IosevkaFixedSS10.dark.svg +++ b/images/package-sample-IosevkaFixedSS10.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS10.light.svg b/images/package-sample-IosevkaFixedSS10.light.svg index e1832db008..b3fc070a10 100644 --- a/images/package-sample-IosevkaFixedSS10.light.svg +++ b/images/package-sample-IosevkaFixedSS10.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS11.dark.svg b/images/package-sample-IosevkaFixedSS11.dark.svg index 4ae1a1fe00..bed8978db2 100644 --- a/images/package-sample-IosevkaFixedSS11.dark.svg +++ b/images/package-sample-IosevkaFixedSS11.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS11.light.svg b/images/package-sample-IosevkaFixedSS11.light.svg index 6d02337b89..b6ad0805b0 100644 --- a/images/package-sample-IosevkaFixedSS11.light.svg +++ b/images/package-sample-IosevkaFixedSS11.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS12.dark.svg b/images/package-sample-IosevkaFixedSS12.dark.svg index 27a9acfd34..07a9d6547b 100644 --- a/images/package-sample-IosevkaFixedSS12.dark.svg +++ b/images/package-sample-IosevkaFixedSS12.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS12.light.svg b/images/package-sample-IosevkaFixedSS12.light.svg index d18cdd2edc..370533ed03 100644 --- a/images/package-sample-IosevkaFixedSS12.light.svg +++ b/images/package-sample-IosevkaFixedSS12.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSS13.dark.svg b/images/package-sample-IosevkaFixedSS13.dark.svg index 3fc5333b6b..067e84be47 100644 --- a/images/package-sample-IosevkaFixedSS13.dark.svg +++ b/images/package-sample-IosevkaFixedSS13.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS13.light.svg b/images/package-sample-IosevkaFixedSS13.light.svg index ee4e17250c..963c747386 100644 --- a/images/package-sample-IosevkaFixedSS13.light.svg +++ b/images/package-sample-IosevkaFixedSS13.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS14.dark.svg b/images/package-sample-IosevkaFixedSS14.dark.svg index 32b073d637..5124ee4927 100644 --- a/images/package-sample-IosevkaFixedSS14.dark.svg +++ b/images/package-sample-IosevkaFixedSS14.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS14.light.svg b/images/package-sample-IosevkaFixedSS14.light.svg index 712670920a..7933d02132 100644 --- a/images/package-sample-IosevkaFixedSS14.light.svg +++ b/images/package-sample-IosevkaFixedSS14.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS15.dark.svg b/images/package-sample-IosevkaFixedSS15.dark.svg index 7753656b66..3bfd70ce4a 100644 --- a/images/package-sample-IosevkaFixedSS15.dark.svg +++ b/images/package-sample-IosevkaFixedSS15.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS15.light.svg b/images/package-sample-IosevkaFixedSS15.light.svg index 81ed5a1bd5..82fa991e5b 100644 --- a/images/package-sample-IosevkaFixedSS15.light.svg +++ b/images/package-sample-IosevkaFixedSS15.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS16.dark.svg b/images/package-sample-IosevkaFixedSS16.dark.svg index 93d053cbf6..4b4dfc2eeb 100644 --- a/images/package-sample-IosevkaFixedSS16.dark.svg +++ b/images/package-sample-IosevkaFixedSS16.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS16.light.svg b/images/package-sample-IosevkaFixedSS16.light.svg index 80cba8a1ae..e546336569 100644 --- a/images/package-sample-IosevkaFixedSS16.light.svg +++ b/images/package-sample-IosevkaFixedSS16.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS17.dark.svg b/images/package-sample-IosevkaFixedSS17.dark.svg index e034571c79..6b1d6b66fb 100644 --- a/images/package-sample-IosevkaFixedSS17.dark.svg +++ b/images/package-sample-IosevkaFixedSS17.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS17.light.svg b/images/package-sample-IosevkaFixedSS17.light.svg index 103d157202..3f813bc5d9 100644 --- a/images/package-sample-IosevkaFixedSS17.light.svg +++ b/images/package-sample-IosevkaFixedSS17.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS18.dark.svg b/images/package-sample-IosevkaFixedSS18.dark.svg index e1b1d26c20..f3db574c22 100644 --- a/images/package-sample-IosevkaFixedSS18.dark.svg +++ b/images/package-sample-IosevkaFixedSS18.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSS18.light.svg b/images/package-sample-IosevkaFixedSS18.light.svg index 5739cdaa2f..bef91375dd 100644 --- a/images/package-sample-IosevkaFixedSS18.light.svg +++ b/images/package-sample-IosevkaFixedSS18.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaFixedSlab.dark.svg b/images/package-sample-IosevkaFixedSlab.dark.svg index 4724d26456..d34f0e1ab2 100644 --- a/images/package-sample-IosevkaFixedSlab.dark.svg +++ b/images/package-sample-IosevkaFixedSlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaFixedSlab.light.svg b/images/package-sample-IosevkaFixedSlab.light.svg index 02ea777e46..854e3e494d 100644 --- a/images/package-sample-IosevkaFixedSlab.light.svg +++ b/images/package-sample-IosevkaFixedSlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaSS01.dark.svg b/images/package-sample-IosevkaSS01.dark.svg index b4211b36ce..63b07fbb4e 100644 --- a/images/package-sample-IosevkaSS01.dark.svg +++ b/images/package-sample-IosevkaSS01.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS01.light.svg b/images/package-sample-IosevkaSS01.light.svg index e6c2dfda5a..9ff10c4791 100644 --- a/images/package-sample-IosevkaSS01.light.svg +++ b/images/package-sample-IosevkaSS01.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS02.dark.svg b/images/package-sample-IosevkaSS02.dark.svg index 650f25dae3..164d04c2b5 100644 --- a/images/package-sample-IosevkaSS02.dark.svg +++ b/images/package-sample-IosevkaSS02.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaSS02.light.svg b/images/package-sample-IosevkaSS02.light.svg index 472dee3bc7..9f4e8f5a25 100644 --- a/images/package-sample-IosevkaSS02.light.svg +++ b/images/package-sample-IosevkaSS02.light.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaSS03.dark.svg b/images/package-sample-IosevkaSS03.dark.svg index 2924f66578..6961cc57bc 100644 --- a/images/package-sample-IosevkaSS03.dark.svg +++ b/images/package-sample-IosevkaSS03.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS03.light.svg b/images/package-sample-IosevkaSS03.light.svg index 05bc0f66e5..7a9469b087 100644 --- a/images/package-sample-IosevkaSS03.light.svg +++ b/images/package-sample-IosevkaSS03.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS04.dark.svg b/images/package-sample-IosevkaSS04.dark.svg index 5ea3d70c60..5d367630df 100644 --- a/images/package-sample-IosevkaSS04.dark.svg +++ b/images/package-sample-IosevkaSS04.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS04.light.svg b/images/package-sample-IosevkaSS04.light.svg index dfbeb18606..4387d1d703 100644 --- a/images/package-sample-IosevkaSS04.light.svg +++ b/images/package-sample-IosevkaSS04.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS05.dark.svg b/images/package-sample-IosevkaSS05.dark.svg index f2d9e0898e..8a32fec772 100644 --- a/images/package-sample-IosevkaSS05.dark.svg +++ b/images/package-sample-IosevkaSS05.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS05.light.svg b/images/package-sample-IosevkaSS05.light.svg index 5d9721cb03..f69ffccdef 100644 --- a/images/package-sample-IosevkaSS05.light.svg +++ b/images/package-sample-IosevkaSS05.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS06.dark.svg b/images/package-sample-IosevkaSS06.dark.svg index fb224b9681..c949e78702 100644 --- a/images/package-sample-IosevkaSS06.dark.svg +++ b/images/package-sample-IosevkaSS06.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS06.light.svg b/images/package-sample-IosevkaSS06.light.svg index 9f48b2f305..b6fcf3fd5a 100644 --- a/images/package-sample-IosevkaSS06.light.svg +++ b/images/package-sample-IosevkaSS06.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS07.dark.svg b/images/package-sample-IosevkaSS07.dark.svg index 56150f237d..af20478724 100644 --- a/images/package-sample-IosevkaSS07.dark.svg +++ b/images/package-sample-IosevkaSS07.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaSS07.light.svg b/images/package-sample-IosevkaSS07.light.svg index 91cbc67513..d5486e3312 100644 --- a/images/package-sample-IosevkaSS07.light.svg +++ b/images/package-sample-IosevkaSS07.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaSS08.dark.svg b/images/package-sample-IosevkaSS08.dark.svg index 092e834954..af35832ecc 100644 --- a/images/package-sample-IosevkaSS08.dark.svg +++ b/images/package-sample-IosevkaSS08.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS08.light.svg b/images/package-sample-IosevkaSS08.light.svg index 4c187728b0..72a8fdcb84 100644 --- a/images/package-sample-IosevkaSS08.light.svg +++ b/images/package-sample-IosevkaSS08.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS09.dark.svg b/images/package-sample-IosevkaSS09.dark.svg index ec6bbb8ec5..745e886ae0 100644 --- a/images/package-sample-IosevkaSS09.dark.svg +++ b/images/package-sample-IosevkaSS09.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS09.light.svg b/images/package-sample-IosevkaSS09.light.svg index 1bdac85c31..ccc8a963c7 100644 --- a/images/package-sample-IosevkaSS09.light.svg +++ b/images/package-sample-IosevkaSS09.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS10.dark.svg b/images/package-sample-IosevkaSS10.dark.svg index d8d9a84e3d..63b770a7e5 100644 --- a/images/package-sample-IosevkaSS10.dark.svg +++ b/images/package-sample-IosevkaSS10.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS10.light.svg b/images/package-sample-IosevkaSS10.light.svg index e1832db008..b3fc070a10 100644 --- a/images/package-sample-IosevkaSS10.light.svg +++ b/images/package-sample-IosevkaSS10.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS11.dark.svg b/images/package-sample-IosevkaSS11.dark.svg index 4ae1a1fe00..bed8978db2 100644 --- a/images/package-sample-IosevkaSS11.dark.svg +++ b/images/package-sample-IosevkaSS11.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS11.light.svg b/images/package-sample-IosevkaSS11.light.svg index 6d02337b89..b6ad0805b0 100644 --- a/images/package-sample-IosevkaSS11.light.svg +++ b/images/package-sample-IosevkaSS11.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS12.dark.svg b/images/package-sample-IosevkaSS12.dark.svg index 27a9acfd34..07a9d6547b 100644 --- a/images/package-sample-IosevkaSS12.dark.svg +++ b/images/package-sample-IosevkaSS12.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaSS12.light.svg b/images/package-sample-IosevkaSS12.light.svg index d18cdd2edc..370533ed03 100644 --- a/images/package-sample-IosevkaSS12.light.svg +++ b/images/package-sample-IosevkaSS12.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaSS13.dark.svg b/images/package-sample-IosevkaSS13.dark.svg index 3fc5333b6b..067e84be47 100644 --- a/images/package-sample-IosevkaSS13.dark.svg +++ b/images/package-sample-IosevkaSS13.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS13.light.svg b/images/package-sample-IosevkaSS13.light.svg index ee4e17250c..963c747386 100644 --- a/images/package-sample-IosevkaSS13.light.svg +++ b/images/package-sample-IosevkaSS13.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS14.dark.svg b/images/package-sample-IosevkaSS14.dark.svg index 32b073d637..5124ee4927 100644 --- a/images/package-sample-IosevkaSS14.dark.svg +++ b/images/package-sample-IosevkaSS14.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS14.light.svg b/images/package-sample-IosevkaSS14.light.svg index 712670920a..7933d02132 100644 --- a/images/package-sample-IosevkaSS14.light.svg +++ b/images/package-sample-IosevkaSS14.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS15.dark.svg b/images/package-sample-IosevkaSS15.dark.svg index 7753656b66..3bfd70ce4a 100644 --- a/images/package-sample-IosevkaSS15.dark.svg +++ b/images/package-sample-IosevkaSS15.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS15.light.svg b/images/package-sample-IosevkaSS15.light.svg index 81ed5a1bd5..82fa991e5b 100644 --- a/images/package-sample-IosevkaSS15.light.svg +++ b/images/package-sample-IosevkaSS15.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS16.dark.svg b/images/package-sample-IosevkaSS16.dark.svg index 93d053cbf6..4b4dfc2eeb 100644 --- a/images/package-sample-IosevkaSS16.dark.svg +++ b/images/package-sample-IosevkaSS16.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS16.light.svg b/images/package-sample-IosevkaSS16.light.svg index 80cba8a1ae..e546336569 100644 --- a/images/package-sample-IosevkaSS16.light.svg +++ b/images/package-sample-IosevkaSS16.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS17.dark.svg b/images/package-sample-IosevkaSS17.dark.svg index e034571c79..6b1d6b66fb 100644 --- a/images/package-sample-IosevkaSS17.dark.svg +++ b/images/package-sample-IosevkaSS17.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS17.light.svg b/images/package-sample-IosevkaSS17.light.svg index 103d157202..3f813bc5d9 100644 --- a/images/package-sample-IosevkaSS17.light.svg +++ b/images/package-sample-IosevkaSS17.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS18.dark.svg b/images/package-sample-IosevkaSS18.dark.svg index e1b1d26c20..f3db574c22 100644 --- a/images/package-sample-IosevkaSS18.dark.svg +++ b/images/package-sample-IosevkaSS18.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSS18.light.svg b/images/package-sample-IosevkaSS18.light.svg index 5739cdaa2f..bef91375dd 100644 --- a/images/package-sample-IosevkaSS18.light.svg +++ b/images/package-sample-IosevkaSS18.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaSlab.dark.svg b/images/package-sample-IosevkaSlab.dark.svg index 4724d26456..d34f0e1ab2 100644 --- a/images/package-sample-IosevkaSlab.dark.svg +++ b/images/package-sample-IosevkaSlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaSlab.light.svg b/images/package-sample-IosevkaSlab.light.svg index 02ea777e46..854e3e494d 100644 --- a/images/package-sample-IosevkaSlab.light.svg +++ b/images/package-sample-IosevkaSlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaTerm.dark.svg b/images/package-sample-IosevkaTerm.dark.svg index 3bd4a14d74..eb1e983303 100644 --- a/images/package-sample-IosevkaTerm.dark.svg +++ b/images/package-sample-IosevkaTerm.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTerm.light.svg b/images/package-sample-IosevkaTerm.light.svg index 397ec6bcf3..42862799fc 100644 --- a/images/package-sample-IosevkaTerm.light.svg +++ b/images/package-sample-IosevkaTerm.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermCurly.dark.svg b/images/package-sample-IosevkaTermCurly.dark.svg index d25a09dbd4..4624a4b562 100644 --- a/images/package-sample-IosevkaTermCurly.dark.svg +++ b/images/package-sample-IosevkaTermCurly.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermCurly.light.svg b/images/package-sample-IosevkaTermCurly.light.svg index 9d1b693221..6af3b8e6f7 100644 --- a/images/package-sample-IosevkaTermCurly.light.svg +++ b/images/package-sample-IosevkaTermCurly.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermCurlySlab.dark.svg b/images/package-sample-IosevkaTermCurlySlab.dark.svg index 137ecb0531..ee7ac4f4bc 100644 --- a/images/package-sample-IosevkaTermCurlySlab.dark.svg +++ b/images/package-sample-IosevkaTermCurlySlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaTermCurlySlab.light.svg b/images/package-sample-IosevkaTermCurlySlab.light.svg index 25ead839d8..b3987780df 100644 --- a/images/package-sample-IosevkaTermCurlySlab.light.svg +++ b/images/package-sample-IosevkaTermCurlySlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS01.dark.svg b/images/package-sample-IosevkaTermSS01.dark.svg index b4211b36ce..63b07fbb4e 100644 --- a/images/package-sample-IosevkaTermSS01.dark.svg +++ b/images/package-sample-IosevkaTermSS01.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS01.light.svg b/images/package-sample-IosevkaTermSS01.light.svg index e6c2dfda5a..9ff10c4791 100644 --- a/images/package-sample-IosevkaTermSS01.light.svg +++ b/images/package-sample-IosevkaTermSS01.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS02.dark.svg b/images/package-sample-IosevkaTermSS02.dark.svg index 650f25dae3..164d04c2b5 100644 --- a/images/package-sample-IosevkaTermSS02.dark.svg +++ b/images/package-sample-IosevkaTermSS02.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS02.light.svg b/images/package-sample-IosevkaTermSS02.light.svg index 472dee3bc7..9f4e8f5a25 100644 --- a/images/package-sample-IosevkaTermSS02.light.svg +++ b/images/package-sample-IosevkaTermSS02.light.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS03.dark.svg b/images/package-sample-IosevkaTermSS03.dark.svg index 2924f66578..6961cc57bc 100644 --- a/images/package-sample-IosevkaTermSS03.dark.svg +++ b/images/package-sample-IosevkaTermSS03.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS03.light.svg b/images/package-sample-IosevkaTermSS03.light.svg index 05bc0f66e5..7a9469b087 100644 --- a/images/package-sample-IosevkaTermSS03.light.svg +++ b/images/package-sample-IosevkaTermSS03.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS04.dark.svg b/images/package-sample-IosevkaTermSS04.dark.svg index 5ea3d70c60..5d367630df 100644 --- a/images/package-sample-IosevkaTermSS04.dark.svg +++ b/images/package-sample-IosevkaTermSS04.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS04.light.svg b/images/package-sample-IosevkaTermSS04.light.svg index dfbeb18606..4387d1d703 100644 --- a/images/package-sample-IosevkaTermSS04.light.svg +++ b/images/package-sample-IosevkaTermSS04.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS05.dark.svg b/images/package-sample-IosevkaTermSS05.dark.svg index f2d9e0898e..8a32fec772 100644 --- a/images/package-sample-IosevkaTermSS05.dark.svg +++ b/images/package-sample-IosevkaTermSS05.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS05.light.svg b/images/package-sample-IosevkaTermSS05.light.svg index 5d9721cb03..f69ffccdef 100644 --- a/images/package-sample-IosevkaTermSS05.light.svg +++ b/images/package-sample-IosevkaTermSS05.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS06.dark.svg b/images/package-sample-IosevkaTermSS06.dark.svg index fb224b9681..c949e78702 100644 --- a/images/package-sample-IosevkaTermSS06.dark.svg +++ b/images/package-sample-IosevkaTermSS06.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS06.light.svg b/images/package-sample-IosevkaTermSS06.light.svg index 9f48b2f305..b6fcf3fd5a 100644 --- a/images/package-sample-IosevkaTermSS06.light.svg +++ b/images/package-sample-IosevkaTermSS06.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS07.dark.svg b/images/package-sample-IosevkaTermSS07.dark.svg index 56150f237d..af20478724 100644 --- a/images/package-sample-IosevkaTermSS07.dark.svg +++ b/images/package-sample-IosevkaTermSS07.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS07.light.svg b/images/package-sample-IosevkaTermSS07.light.svg index 91cbc67513..d5486e3312 100644 --- a/images/package-sample-IosevkaTermSS07.light.svg +++ b/images/package-sample-IosevkaTermSS07.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS08.dark.svg b/images/package-sample-IosevkaTermSS08.dark.svg index 092e834954..af35832ecc 100644 --- a/images/package-sample-IosevkaTermSS08.dark.svg +++ b/images/package-sample-IosevkaTermSS08.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS08.light.svg b/images/package-sample-IosevkaTermSS08.light.svg index 4c187728b0..72a8fdcb84 100644 --- a/images/package-sample-IosevkaTermSS08.light.svg +++ b/images/package-sample-IosevkaTermSS08.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS09.dark.svg b/images/package-sample-IosevkaTermSS09.dark.svg index ec6bbb8ec5..745e886ae0 100644 --- a/images/package-sample-IosevkaTermSS09.dark.svg +++ b/images/package-sample-IosevkaTermSS09.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS09.light.svg b/images/package-sample-IosevkaTermSS09.light.svg index 1bdac85c31..ccc8a963c7 100644 --- a/images/package-sample-IosevkaTermSS09.light.svg +++ b/images/package-sample-IosevkaTermSS09.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS10.dark.svg b/images/package-sample-IosevkaTermSS10.dark.svg index d8d9a84e3d..63b770a7e5 100644 --- a/images/package-sample-IosevkaTermSS10.dark.svg +++ b/images/package-sample-IosevkaTermSS10.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS10.light.svg b/images/package-sample-IosevkaTermSS10.light.svg index e1832db008..b3fc070a10 100644 --- a/images/package-sample-IosevkaTermSS10.light.svg +++ b/images/package-sample-IosevkaTermSS10.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS11.dark.svg b/images/package-sample-IosevkaTermSS11.dark.svg index 4ae1a1fe00..bed8978db2 100644 --- a/images/package-sample-IosevkaTermSS11.dark.svg +++ b/images/package-sample-IosevkaTermSS11.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS11.light.svg b/images/package-sample-IosevkaTermSS11.light.svg index 6d02337b89..b6ad0805b0 100644 --- a/images/package-sample-IosevkaTermSS11.light.svg +++ b/images/package-sample-IosevkaTermSS11.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS12.dark.svg b/images/package-sample-IosevkaTermSS12.dark.svg index 27a9acfd34..07a9d6547b 100644 --- a/images/package-sample-IosevkaTermSS12.dark.svg +++ b/images/package-sample-IosevkaTermSS12.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS12.light.svg b/images/package-sample-IosevkaTermSS12.light.svg index d18cdd2edc..370533ed03 100644 --- a/images/package-sample-IosevkaTermSS12.light.svg +++ b/images/package-sample-IosevkaTermSS12.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/package-sample-IosevkaTermSS13.dark.svg b/images/package-sample-IosevkaTermSS13.dark.svg index 3fc5333b6b..067e84be47 100644 --- a/images/package-sample-IosevkaTermSS13.dark.svg +++ b/images/package-sample-IosevkaTermSS13.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS13.light.svg b/images/package-sample-IosevkaTermSS13.light.svg index ee4e17250c..963c747386 100644 --- a/images/package-sample-IosevkaTermSS13.light.svg +++ b/images/package-sample-IosevkaTermSS13.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS14.dark.svg b/images/package-sample-IosevkaTermSS14.dark.svg index 32b073d637..5124ee4927 100644 --- a/images/package-sample-IosevkaTermSS14.dark.svg +++ b/images/package-sample-IosevkaTermSS14.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS14.light.svg b/images/package-sample-IosevkaTermSS14.light.svg index 712670920a..7933d02132 100644 --- a/images/package-sample-IosevkaTermSS14.light.svg +++ b/images/package-sample-IosevkaTermSS14.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS15.dark.svg b/images/package-sample-IosevkaTermSS15.dark.svg index 7753656b66..3bfd70ce4a 100644 --- a/images/package-sample-IosevkaTermSS15.dark.svg +++ b/images/package-sample-IosevkaTermSS15.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS15.light.svg b/images/package-sample-IosevkaTermSS15.light.svg index 81ed5a1bd5..82fa991e5b 100644 --- a/images/package-sample-IosevkaTermSS15.light.svg +++ b/images/package-sample-IosevkaTermSS15.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS16.dark.svg b/images/package-sample-IosevkaTermSS16.dark.svg index 93d053cbf6..4b4dfc2eeb 100644 --- a/images/package-sample-IosevkaTermSS16.dark.svg +++ b/images/package-sample-IosevkaTermSS16.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS16.light.svg b/images/package-sample-IosevkaTermSS16.light.svg index 80cba8a1ae..e546336569 100644 --- a/images/package-sample-IosevkaTermSS16.light.svg +++ b/images/package-sample-IosevkaTermSS16.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS17.dark.svg b/images/package-sample-IosevkaTermSS17.dark.svg index e034571c79..6b1d6b66fb 100644 --- a/images/package-sample-IosevkaTermSS17.dark.svg +++ b/images/package-sample-IosevkaTermSS17.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS17.light.svg b/images/package-sample-IosevkaTermSS17.light.svg index 103d157202..3f813bc5d9 100644 --- a/images/package-sample-IosevkaTermSS17.light.svg +++ b/images/package-sample-IosevkaTermSS17.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS18.dark.svg b/images/package-sample-IosevkaTermSS18.dark.svg index e1b1d26c20..f3db574c22 100644 --- a/images/package-sample-IosevkaTermSS18.dark.svg +++ b/images/package-sample-IosevkaTermSS18.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSS18.light.svg b/images/package-sample-IosevkaTermSS18.light.svg index 5739cdaa2f..bef91375dd 100644 --- a/images/package-sample-IosevkaTermSS18.light.svg +++ b/images/package-sample-IosevkaTermSS18.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/package-sample-IosevkaTermSlab.dark.svg b/images/package-sample-IosevkaTermSlab.dark.svg index 4724d26456..d34f0e1ab2 100644 --- a/images/package-sample-IosevkaTermSlab.dark.svg +++ b/images/package-sample-IosevkaTermSlab.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/package-sample-IosevkaTermSlab.light.svg b/images/package-sample-IosevkaTermSlab.light.svg index 02ea777e46..854e3e494d 100644 --- a/images/package-sample-IosevkaTermSlab.light.svg +++ b/images/package-sample-IosevkaTermSlab.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-off-0.dark.svg b/images/ss-i-off-0.dark.svg index ac12753c27..4ad2a581c2 100644 --- a/images/ss-i-off-0.dark.svg +++ b/images/ss-i-off-0.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-off-0.light.svg b/images/ss-i-off-0.light.svg index fe1a3a8f30..a89136074a 100644 --- a/images/ss-i-off-0.light.svg +++ b/images/ss-i-off-0.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss01-1.dark.svg b/images/ss-i-ss01-1.dark.svg index 353e76436d..8c4756d851 100644 --- a/images/ss-i-ss01-1.dark.svg +++ b/images/ss-i-ss01-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss01-1.light.svg b/images/ss-i-ss01-1.light.svg index 7810adf4e1..f981c58049 100644 --- a/images/ss-i-ss01-1.light.svg +++ b/images/ss-i-ss01-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss02-1.dark.svg b/images/ss-i-ss02-1.dark.svg index 97a05e51b6..e104430087 100644 --- a/images/ss-i-ss02-1.dark.svg +++ b/images/ss-i-ss02-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss02-1.light.svg b/images/ss-i-ss02-1.light.svg index 73645ae992..2d63926618 100644 --- a/images/ss-i-ss02-1.light.svg +++ b/images/ss-i-ss02-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss03-1.dark.svg b/images/ss-i-ss03-1.dark.svg index 5db7fd7d79..ae4e001072 100644 --- a/images/ss-i-ss03-1.dark.svg +++ b/images/ss-i-ss03-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss03-1.light.svg b/images/ss-i-ss03-1.light.svg index 0a2e33fa60..f78b5cc75f 100644 --- a/images/ss-i-ss03-1.light.svg +++ b/images/ss-i-ss03-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss04-1.dark.svg b/images/ss-i-ss04-1.dark.svg index f2e33cd6b4..fcde00c191 100644 --- a/images/ss-i-ss04-1.dark.svg +++ b/images/ss-i-ss04-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss04-1.light.svg b/images/ss-i-ss04-1.light.svg index ddde9220ee..e72e6c4465 100644 --- a/images/ss-i-ss04-1.light.svg +++ b/images/ss-i-ss04-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss05-1.dark.svg b/images/ss-i-ss05-1.dark.svg index 84507c3dc3..44c55cb3a4 100644 --- a/images/ss-i-ss05-1.dark.svg +++ b/images/ss-i-ss05-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss05-1.light.svg b/images/ss-i-ss05-1.light.svg index 54ea870e62..0840baf720 100644 --- a/images/ss-i-ss05-1.light.svg +++ b/images/ss-i-ss05-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss06-1.dark.svg b/images/ss-i-ss06-1.dark.svg index 73b3b29e84..8b35ab9cf1 100644 --- a/images/ss-i-ss06-1.dark.svg +++ b/images/ss-i-ss06-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss06-1.light.svg b/images/ss-i-ss06-1.light.svg index 4f100845f6..755033e04d 100644 --- a/images/ss-i-ss06-1.light.svg +++ b/images/ss-i-ss06-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss07-1.dark.svg b/images/ss-i-ss07-1.dark.svg index 4a3591476c..73a1371f50 100644 --- a/images/ss-i-ss07-1.dark.svg +++ b/images/ss-i-ss07-1.dark.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss07-1.light.svg b/images/ss-i-ss07-1.light.svg index 315179c9ea..7ea7490ee5 100644 --- a/images/ss-i-ss07-1.light.svg +++ b/images/ss-i-ss07-1.light.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss08-1.dark.svg b/images/ss-i-ss08-1.dark.svg index 0e30316293..be349d3ae0 100644 --- a/images/ss-i-ss08-1.dark.svg +++ b/images/ss-i-ss08-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss08-1.light.svg b/images/ss-i-ss08-1.light.svg index daefafc9d6..919efa6876 100644 --- a/images/ss-i-ss08-1.light.svg +++ b/images/ss-i-ss08-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss09-1.dark.svg b/images/ss-i-ss09-1.dark.svg index d6e5520584..97e054e9c8 100644 --- a/images/ss-i-ss09-1.dark.svg +++ b/images/ss-i-ss09-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss09-1.light.svg b/images/ss-i-ss09-1.light.svg index e1a3b73e46..dab3acc0f3 100644 --- a/images/ss-i-ss09-1.light.svg +++ b/images/ss-i-ss09-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss10-1.dark.svg b/images/ss-i-ss10-1.dark.svg index 126f620cfa..db538c3622 100644 --- a/images/ss-i-ss10-1.dark.svg +++ b/images/ss-i-ss10-1.dark.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss10-1.light.svg b/images/ss-i-ss10-1.light.svg index 41fed29cea..cd2016b952 100644 --- a/images/ss-i-ss10-1.light.svg +++ b/images/ss-i-ss10-1.light.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss11-1.dark.svg b/images/ss-i-ss11-1.dark.svg index 3644ceee18..4fe3ecea67 100644 --- a/images/ss-i-ss11-1.dark.svg +++ b/images/ss-i-ss11-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss11-1.light.svg b/images/ss-i-ss11-1.light.svg index 524906c4e4..92bb75216c 100644 --- a/images/ss-i-ss11-1.light.svg +++ b/images/ss-i-ss11-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss12-1.dark.svg b/images/ss-i-ss12-1.dark.svg index 1e3e7dc497..35df8fe4f6 100644 --- a/images/ss-i-ss12-1.dark.svg +++ b/images/ss-i-ss12-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss12-1.light.svg b/images/ss-i-ss12-1.light.svg index b96909af0c..fd6441155c 100644 --- a/images/ss-i-ss12-1.light.svg +++ b/images/ss-i-ss12-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss13-1.dark.svg b/images/ss-i-ss13-1.dark.svg index f0cddf6173..79e04cb31d 100644 --- a/images/ss-i-ss13-1.dark.svg +++ b/images/ss-i-ss13-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss13-1.light.svg b/images/ss-i-ss13-1.light.svg index 8e48f6fc12..85675db9f0 100644 --- a/images/ss-i-ss13-1.light.svg +++ b/images/ss-i-ss13-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss14-1.dark.svg b/images/ss-i-ss14-1.dark.svg index ea0f97b41a..ba5e9f3b4a 100644 --- a/images/ss-i-ss14-1.dark.svg +++ b/images/ss-i-ss14-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss14-1.light.svg b/images/ss-i-ss14-1.light.svg index ed4834ab7d..e327bd2b6f 100644 --- a/images/ss-i-ss14-1.light.svg +++ b/images/ss-i-ss14-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss15-1.dark.svg b/images/ss-i-ss15-1.dark.svg index 1dcbbb5d86..c13b2d5dc1 100644 --- a/images/ss-i-ss15-1.dark.svg +++ b/images/ss-i-ss15-1.dark.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss15-1.light.svg b/images/ss-i-ss15-1.light.svg index dbf4955e89..d5ff8969c2 100644 --- a/images/ss-i-ss15-1.light.svg +++ b/images/ss-i-ss15-1.light.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss16-1.dark.svg b/images/ss-i-ss16-1.dark.svg index 3e45fae45b..c7abc0a768 100644 --- a/images/ss-i-ss16-1.dark.svg +++ b/images/ss-i-ss16-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss16-1.light.svg b/images/ss-i-ss16-1.light.svg index ac08ba59af..af7888d78c 100644 --- a/images/ss-i-ss16-1.light.svg +++ b/images/ss-i-ss16-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss17-1.dark.svg b/images/ss-i-ss17-1.dark.svg index 753ffa4f75..f1f523b37d 100644 --- a/images/ss-i-ss17-1.dark.svg +++ b/images/ss-i-ss17-1.dark.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss17-1.light.svg b/images/ss-i-ss17-1.light.svg index 3a5ca870ae..19b0d88e2f 100644 --- a/images/ss-i-ss17-1.light.svg +++ b/images/ss-i-ss17-1.light.svg @@ -37,7 +37,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss18-1.dark.svg b/images/ss-i-ss18-1.dark.svg index b8e13b8ed6..6e864b83bb 100644 --- a/images/ss-i-ss18-1.dark.svg +++ b/images/ss-i-ss18-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss18-1.light.svg b/images/ss-i-ss18-1.light.svg index 46a2a7bebe..2cdbf63058 100644 --- a/images/ss-i-ss18-1.light.svg +++ b/images/ss-i-ss18-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss20-1.dark.svg b/images/ss-i-ss20-1.dark.svg index d577cd28db..726c5fb016 100644 --- a/images/ss-i-ss20-1.dark.svg +++ b/images/ss-i-ss20-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-i-ss20-1.light.svg b/images/ss-i-ss20-1.light.svg index 2079a71b5d..ab03baa604 100644 --- a/images/ss-i-ss20-1.light.svg +++ b/images/ss-i-ss20-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -85,7 +85,7 @@ - + diff --git a/images/ss-u-off-0.dark.svg b/images/ss-u-off-0.dark.svg index 8fc3b1ec50..b9041489d8 100644 --- a/images/ss-u-off-0.dark.svg +++ b/images/ss-u-off-0.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-off-0.light.svg b/images/ss-u-off-0.light.svg index a8580971a3..e8a6cd232b 100644 --- a/images/ss-u-off-0.light.svg +++ b/images/ss-u-off-0.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss01-1.dark.svg b/images/ss-u-ss01-1.dark.svg index 90a1e86261..de91f14aec 100644 --- a/images/ss-u-ss01-1.dark.svg +++ b/images/ss-u-ss01-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss01-1.light.svg b/images/ss-u-ss01-1.light.svg index c70861c5e7..ad1b142d60 100644 --- a/images/ss-u-ss01-1.light.svg +++ b/images/ss-u-ss01-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss02-1.dark.svg b/images/ss-u-ss02-1.dark.svg index 516be44746..110d817660 100644 --- a/images/ss-u-ss02-1.dark.svg +++ b/images/ss-u-ss02-1.dark.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/ss-u-ss02-1.light.svg b/images/ss-u-ss02-1.light.svg index bded5f5a75..410cbd3262 100644 --- a/images/ss-u-ss02-1.light.svg +++ b/images/ss-u-ss02-1.light.svg @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/images/ss-u-ss03-1.dark.svg b/images/ss-u-ss03-1.dark.svg index 5f47399cfa..70cd09571c 100644 --- a/images/ss-u-ss03-1.dark.svg +++ b/images/ss-u-ss03-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss03-1.light.svg b/images/ss-u-ss03-1.light.svg index 5cf86940d7..487c870cb8 100644 --- a/images/ss-u-ss03-1.light.svg +++ b/images/ss-u-ss03-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss04-1.dark.svg b/images/ss-u-ss04-1.dark.svg index 28f2dc6be0..b5bd423cb1 100644 --- a/images/ss-u-ss04-1.dark.svg +++ b/images/ss-u-ss04-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss04-1.light.svg b/images/ss-u-ss04-1.light.svg index 89084e1426..77dc78d563 100644 --- a/images/ss-u-ss04-1.light.svg +++ b/images/ss-u-ss04-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss05-1.dark.svg b/images/ss-u-ss05-1.dark.svg index 70eb3398e8..c1eda4204d 100644 --- a/images/ss-u-ss05-1.dark.svg +++ b/images/ss-u-ss05-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss05-1.light.svg b/images/ss-u-ss05-1.light.svg index 16479e9c5f..7ffd147beb 100644 --- a/images/ss-u-ss05-1.light.svg +++ b/images/ss-u-ss05-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss06-1.dark.svg b/images/ss-u-ss06-1.dark.svg index 7b74544f29..2f329064da 100644 --- a/images/ss-u-ss06-1.dark.svg +++ b/images/ss-u-ss06-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss06-1.light.svg b/images/ss-u-ss06-1.light.svg index eeb9493471..ed8c49d4e9 100644 --- a/images/ss-u-ss06-1.light.svg +++ b/images/ss-u-ss06-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss07-1.dark.svg b/images/ss-u-ss07-1.dark.svg index bb880dd130..8fa62b83cc 100644 --- a/images/ss-u-ss07-1.dark.svg +++ b/images/ss-u-ss07-1.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/ss-u-ss07-1.light.svg b/images/ss-u-ss07-1.light.svg index 3e04f3ef7a..43b7121b7b 100644 --- a/images/ss-u-ss07-1.light.svg +++ b/images/ss-u-ss07-1.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/ss-u-ss08-1.dark.svg b/images/ss-u-ss08-1.dark.svg index 4b3e6dfe3e..44a1678e68 100644 --- a/images/ss-u-ss08-1.dark.svg +++ b/images/ss-u-ss08-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss08-1.light.svg b/images/ss-u-ss08-1.light.svg index 27790c6848..105934e938 100644 --- a/images/ss-u-ss08-1.light.svg +++ b/images/ss-u-ss08-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss09-1.dark.svg b/images/ss-u-ss09-1.dark.svg index 0addd15c51..672ba712f4 100644 --- a/images/ss-u-ss09-1.dark.svg +++ b/images/ss-u-ss09-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss09-1.light.svg b/images/ss-u-ss09-1.light.svg index 45101f7780..e22912f6c6 100644 --- a/images/ss-u-ss09-1.light.svg +++ b/images/ss-u-ss09-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss10-1.dark.svg b/images/ss-u-ss10-1.dark.svg index 70cc193f97..6c9f1ecba9 100644 --- a/images/ss-u-ss10-1.dark.svg +++ b/images/ss-u-ss10-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss10-1.light.svg b/images/ss-u-ss10-1.light.svg index 04ccb67e53..a59c289fa2 100644 --- a/images/ss-u-ss10-1.light.svg +++ b/images/ss-u-ss10-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss11-1.dark.svg b/images/ss-u-ss11-1.dark.svg index 6ba1188eb5..1edf4a4ae5 100644 --- a/images/ss-u-ss11-1.dark.svg +++ b/images/ss-u-ss11-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss11-1.light.svg b/images/ss-u-ss11-1.light.svg index 80a0931a1b..224be30589 100644 --- a/images/ss-u-ss11-1.light.svg +++ b/images/ss-u-ss11-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss12-1.dark.svg b/images/ss-u-ss12-1.dark.svg index 5c099525f2..21d4b73e7d 100644 --- a/images/ss-u-ss12-1.dark.svg +++ b/images/ss-u-ss12-1.dark.svg @@ -37,7 +37,7 @@ - + diff --git a/images/ss-u-ss12-1.light.svg b/images/ss-u-ss12-1.light.svg index 9bafec3795..46ff406cc2 100644 --- a/images/ss-u-ss12-1.light.svg +++ b/images/ss-u-ss12-1.light.svg @@ -37,7 +37,7 @@ - + diff --git a/images/ss-u-ss13-1.dark.svg b/images/ss-u-ss13-1.dark.svg index 0a78548a7d..34dda47643 100644 --- a/images/ss-u-ss13-1.dark.svg +++ b/images/ss-u-ss13-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss13-1.light.svg b/images/ss-u-ss13-1.light.svg index 08e1fa8b05..9db187814a 100644 --- a/images/ss-u-ss13-1.light.svg +++ b/images/ss-u-ss13-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss14-1.dark.svg b/images/ss-u-ss14-1.dark.svg index 1bbfb7bd1d..973f8261bc 100644 --- a/images/ss-u-ss14-1.dark.svg +++ b/images/ss-u-ss14-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss14-1.light.svg b/images/ss-u-ss14-1.light.svg index 916b749e52..1e19bf5af7 100644 --- a/images/ss-u-ss14-1.light.svg +++ b/images/ss-u-ss14-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss15-1.dark.svg b/images/ss-u-ss15-1.dark.svg index a47cb1c034..eee443f960 100644 --- a/images/ss-u-ss15-1.dark.svg +++ b/images/ss-u-ss15-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss15-1.light.svg b/images/ss-u-ss15-1.light.svg index fcc8608821..8eb16293a9 100644 --- a/images/ss-u-ss15-1.light.svg +++ b/images/ss-u-ss15-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss16-1.dark.svg b/images/ss-u-ss16-1.dark.svg index 1f3f8dfe38..6563ae4ea8 100644 --- a/images/ss-u-ss16-1.dark.svg +++ b/images/ss-u-ss16-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss16-1.light.svg b/images/ss-u-ss16-1.light.svg index 292e67d74a..158fcd2ffb 100644 --- a/images/ss-u-ss16-1.light.svg +++ b/images/ss-u-ss16-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss17-1.dark.svg b/images/ss-u-ss17-1.dark.svg index ff8830a583..f96248f752 100644 --- a/images/ss-u-ss17-1.dark.svg +++ b/images/ss-u-ss17-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss17-1.light.svg b/images/ss-u-ss17-1.light.svg index 69ea506ff6..6ae76d7d18 100644 --- a/images/ss-u-ss17-1.light.svg +++ b/images/ss-u-ss17-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss18-1.dark.svg b/images/ss-u-ss18-1.dark.svg index c263af14ad..b8ab374444 100644 --- a/images/ss-u-ss18-1.dark.svg +++ b/images/ss-u-ss18-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss18-1.light.svg b/images/ss-u-ss18-1.light.svg index 6cf018fe4c..b3f137cd8e 100644 --- a/images/ss-u-ss18-1.light.svg +++ b/images/ss-u-ss18-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss20-1.dark.svg b/images/ss-u-ss20-1.dark.svg index 640d643c75..2ac388b388 100644 --- a/images/ss-u-ss20-1.dark.svg +++ b/images/ss-u-ss20-1.dark.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/ss-u-ss20-1.light.svg b/images/ss-u-ss20-1.light.svg index 11550a7f8e..787203850f 100644 --- a/images/ss-u-ss20-1.light.svg +++ b/images/ss-u-ss20-1.light.svg @@ -36,8 +36,8 @@ - - + + diff --git a/images/weights.dark.svg b/images/weights.dark.svg index 069d110f5b..424611a3ea 100644 --- a/images/weights.dark.svg +++ b/images/weights.dark.svg @@ -11,7 +11,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -116,7 +116,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -151,7 +151,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -200,7 +200,7 @@ - + @@ -221,7 +221,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -256,7 +256,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -291,7 +291,7 @@ - + @@ -305,7 +305,7 @@ - + diff --git a/images/weights.light.svg b/images/weights.light.svg index c505f75930..b57578d7ec 100644 --- a/images/weights.light.svg +++ b/images/weights.light.svg @@ -11,7 +11,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -116,7 +116,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -151,7 +151,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -186,7 +186,7 @@ - + @@ -200,7 +200,7 @@ - + @@ -221,7 +221,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -256,7 +256,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -291,7 +291,7 @@ - + @@ -305,7 +305,7 @@ - + diff --git a/package-lock.json b/package-lock.json index a23dbe5c34..acf139f5ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@iosevka/monorepo", - "version": "28.1.0", + "version": "29.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@iosevka/monorepo", - "version": "28.1.0", + "version": "29.0.0", "workspaces": [ "packages/*", "tools/*" @@ -15,17 +15,17 @@ "@iarna/toml": "^2.2.5", "deep-equal": "^2.2.3", "otb-ttc-bundle": "^1.7.3", - "semver": "^7.5.4", + "semver": "^7.6.0", "uuid": "^9.0.1", "verda": "^1.11.2", "which": "^4.0.0" }, "devDependencies": { - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "patel": "^0.39.0", - "prettier": "^3.1.1" + "patel": "^0.40.0", + "prettier": "^3.2.5" }, "engines": { "node": ">=16.0.0" @@ -93,9 +93,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -812,15 +812,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -849,12 +840,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -879,17 +873,36 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -935,17 +948,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -955,10 +969,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "dev": true, + "bin": { + "astring": "bin/astring" + } + }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1002,13 +1028,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1082,14 +1113,16 @@ "integrity": "sha512-knglhjQX5ihNj/XCIs6zCHrTemdvHY3LPZP9XB2nq2/3igyYMFueFXtfp84baJvEE+f8pO1ZS4UVeEgmLnAprQ==" }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -1204,16 +1237,19 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1250,50 +1286,52 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -1302,6 +1340,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -1322,14 +1385,14 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1362,9 +1425,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -1401,38 +1464,26 @@ "source-map": "~0.6.1" } }, - "node_modules/escope": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escope/-/escope-1.0.3.tgz", - "integrity": "sha512-PgST3E92KAnuUX/4PXwpE9RI8jubyyTGIN73mfhl0XP4H+hiA7JqvhXNfffs+naSk41Eipq/klcmoGsCrjxPlQ==", - "dev": true, - "dependencies": { - "estraverse": "^2.0.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/escope/node_modules/estraverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-2.0.0.tgz", - "integrity": "sha512-3liNs3aDBUmf9Hl3YRLqz7Zop0iiTxWaa/ayuxoVS441zjjTPowZJ/uH3y5yhPcXmrLj2rS6Pvu7tfOC7kT61A==", - "dev": true, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1510,9 +1561,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -1624,149 +1675,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esmangle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esmangle/-/esmangle-1.0.1.tgz", - "integrity": "sha512-+vgj0CirCf7fiZ5Cy1VH7ZovC1qh42mB6GBVN3cxLwZgY1CqIvu9xOdDW8il8Y8ym+fiFLCM3crZFku8rBNLOA==", - "dev": true, - "dependencies": { - "escodegen": "~1.3.2", - "escope": "~1.0.1", - "esprima": "~1.1.1", - "esshorten": "~1.1.0", - "estraverse": "~1.5.0", - "esutils": "~ 1.0.0", - "optionator": "~0.3.0", - "source-map": "~0.1.33" - }, - "bin": { - "esmangle": "bin/esmangle.js" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/esmangle/node_modules/escodegen": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz", - "integrity": "sha512-z9FWgKc48wjMlpzF5ymKS1AF8OIgnKLp9VyN7KbdtyrP/9lndwUFqCtMm+TAJmJf7KJFFYc4cFJfVTTGkKEwsA==", - "dev": true, - "dependencies": { - "esprima": "~1.1.1", - "estraverse": "~1.5.0", - "esutils": "~1.0.0" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.10.0" - }, - "optionalDependencies": { - "source-map": "~0.1.33" - } - }, - "node_modules/esmangle/node_modules/esprima": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz", - "integrity": "sha512-qxxB994/7NtERxgXdFgLHIs9M6bhLXc6qtUmWZ3L8+gTQ9qaoyki2887P2IqAYsoENyr8SUbTutStDniOHSDHg==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esmangle/node_modules/estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esmangle/node_modules/esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esmangle/node_modules/fast-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", - "integrity": "sha512-hYsfI0s4lfQ2rHVFKXwAr/L/ZSbq9TZwgXtZqW7ANcn9o9GKvcbWxOnxx7jykXf/Ezv1V8TvaBEKcGK7DWKX5A==", - "dev": true - }, - "node_modules/esmangle/node_modules/levn": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", - "integrity": "sha512-mvp+NO++YH0B+e8cC/SvJxk6k5Z9Ngd3iXuz7tmT8vZCyQZj/5SI1GkFOiZGGPkm5wWGI9SUrqiAfPq7BJH+0w==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.0", - "type-check": "~0.3.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esmangle/node_modules/optionator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.3.0.tgz", - "integrity": "sha512-qM6AKy0HNNRczFIFciGVSkh6H5yu8kC2hdgqElG8pM6IvQwFYVBd3aUrqjsgZtauuGZr2u/Nf+wLzlZgeCqpSQ==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.2", - "fast-levenshtein": "~1.0.0", - "levn": "~0.2.4", - "prelude-ls": "~1.1.0", - "type-check": "~0.3.1", - "wordwrap": "~0.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esmangle/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esmangle/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esmangle/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -1820,29 +1728,6 @@ "node": ">=4.0" } }, - "node_modules/esshorten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/esshorten/-/esshorten-1.1.1.tgz", - "integrity": "sha512-jvHUQncAuUI/HOzw1a94cGDdgyRUUcVDABU24X2TRb+y4G3ohSllMKjG+ROQVjj5OEVhXYwwsV+OpLOJ63snEA==", - "dev": true, - "dependencies": { - "escope": "~1.0.1", - "estraverse": "~4.1.1", - "esutils": "~2.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/esshorten/node_modules/estraverse": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "integrity": "sha512-r3gEa6vc6lGQdrXfo834EaaqnOzYmik8JPg8VB95acIMZRjqaHI0/WMZFoMBGPtS+HCgylwTLoc4Y5yl0owOHQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -1882,9 +1767,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", - "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1933,9 +1818,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -2008,27 +1893,32 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -2143,20 +2033,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -2201,9 +2091,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -2288,11 +2178,11 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -2316,13 +2206,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2429,9 +2321,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -2487,11 +2379,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2529,6 +2424,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -2786,12 +2682,12 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -2843,15 +2739,16 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.values": { @@ -2996,16 +2893,16 @@ } }, "node_modules/patel": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/patel/-/patel-0.39.0.tgz", - "integrity": "sha512-LUM8AqOCmDmBkIrLEiZ5AEp1zn1IEFuASyOr9HrRLSS9Cruk977jFJ9XDmXAUfGNY8LklhmTaxeNhJp6LusT7w==", + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/patel/-/patel-0.40.0.tgz", + "integrity": "sha512-1ejbpiNxta1sKH1SOVZ/4cKGhAcEeT8Lzvk+E5qBPSGHO/JT6sNYOZZCLQYWOSh/M2B01XPOeJNmGNKrjn6GTw==", "dev": true, "dependencies": { - "escodegen": "^2.0.0", - "esmangle": "^1.0.1", - "patrisika": "^0.25.0", + "astring": "^1.8.6", + "patrisika": "^0.26.0", "resumer": "*", - "yargs": "^16.1.0" + "source-map": "^0.7.4", + "yargs": "^17.7.2" }, "bin": { "patel-c": "bin/patel-c" @@ -3045,9 +2942,9 @@ "dev": true }, "node_modules/patrisika": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/patrisika/-/patrisika-0.25.0.tgz", - "integrity": "sha512-Kevy01SFkhzON30J1nKVzHPdoJmkmRY2HG+OIFeI/IT4eBveQwbrE3Q2beEx9t02HhMyAlnYFXt0z5wNY6mePA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/patrisika/-/patrisika-0.26.0.tgz", + "integrity": "sha512-ZzzasIrsgKFTolnOyyDcMVcYI6RJ+mpUJFv2b6nA6vPe9/ucBqCztQRsPZkDd/FtTwbA6ms/mHNcACcux6AjEQ==", "dev": true, "dependencies": { "patrisika-scopes": "^0.12.0" @@ -3083,6 +2980,14 @@ "nice-napi": "^1.0.2" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3093,9 +2998,9 @@ } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -3137,13 +3042,14 @@ ] }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -3274,13 +3180,13 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -3304,9 +3210,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3330,13 +3236,14 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.1" }, @@ -3345,13 +3252,14 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3379,13 +3287,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3397,12 +3309,12 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/spiro": { @@ -3604,29 +3516,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3636,16 +3549,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3655,23 +3569,29 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typo-geom": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/typo-geom/-/typo-geom-0.14.0.tgz", - "integrity": "sha512-h3KmTEdKHrD+VWrR/Oqfr/NAPyTNaEKqhcIMhpbotNiHyXTrv113NCY//o0sUswwDEpHcTxcagxdG3dm/J9hlA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/typo-geom/-/typo-geom-0.15.0.tgz", + "integrity": "sha512-OFQk86Cx/5xed4KBUyX5dOe61ftwz264sL6FfCxLBSsF9gB8DsBUYauvr1Ow7cQ924KJoG2B+BZjCfwfAX4Vbw==", "dependencies": { "clipper-lib": "^6.4.2", "tslib": "^2.6.2" @@ -3751,19 +3671,6 @@ "node": ">= 14.0.0" } }, - "node_modules/verda/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/verda/node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3783,31 +3690,6 @@ "node": ">= 8" } }, - "node_modules/verda/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/verda/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, "node_modules/wawoff2": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wawoff2/-/wawoff2-2.0.1.tgz", @@ -3881,15 +3763,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -3934,30 +3807,28 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -3974,118 +3845,118 @@ }, "packages/font": { "name": "@iosevka/font", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/font-glyphs": "28.1.0", - "@iosevka/font-otl": "28.1.0", - "@iosevka/geometry": "28.1.0", - "@iosevka/geometry-cache": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/param": "28.1.0", - "@iosevka/util": "28.1.0", + "@iosevka/font-glyphs": "29.0.0", + "@iosevka/font-otl": "29.0.0", + "@iosevka/geometry": "29.0.0", + "@iosevka/geometry-cache": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/param": "29.0.0", + "@iosevka/util": "29.0.0", "harfbuzzjs": "^0.3.4", "ot-builder": "^1.7.3", - "semver": "^7.5.4" + "semver": "^7.6.0" } }, "packages/font-glyphs": { "name": "@iosevka/font-glyphs", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/font-kits": "28.1.0", - "@iosevka/geometry": "28.1.0", - "@iosevka/geometry-cache": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/util": "28.1.0", - "typo-geom": "^0.14.0" + "@iosevka/font-kits": "29.0.0", + "@iosevka/geometry": "29.0.0", + "@iosevka/geometry-cache": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/util": "29.0.0", + "typo-geom": "^0.15.0" } }, "packages/font-kits": { "name": "@iosevka/font-kits", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/geometry": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/util": "28.1.0" + "@iosevka/geometry": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/util": "29.0.0" } }, "packages/font-otl": { "name": "@iosevka/font-otl", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/font-glyphs": "28.1.0", - "@iosevka/glyph": "28.1.0", + "@iosevka/font-glyphs": "29.0.0", + "@iosevka/glyph": "29.0.0", "toposort": "^2.0.2" } }, "packages/geometry": { "name": "@iosevka/geometry", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/util": "28.1.0", + "@iosevka/util": "29.0.0", "spiro": "^3.0.0", - "typo-geom": "^0.14.0" + "typo-geom": "^0.15.0" } }, "packages/geometry-cache": { "name": "@iosevka/geometry-cache", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/geometry": "28.1.0", + "@iosevka/geometry": "29.0.0", "@msgpack/msgpack": "^2.8.0" } }, "packages/glyph": { "name": "@iosevka/glyph", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/geometry": "28.1.0" + "@iosevka/geometry": "29.0.0" } }, "packages/param": { "name": "@iosevka/param", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/util": "28.1.0" + "@iosevka/util": "29.0.0" } }, "packages/util": { "name": "@iosevka/util", - "version": "28.1.0" + "version": "29.0.0" }, "tools/amend-readme": { "name": "@iosevka/amend-readme", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/param": "28.1.0", + "@iosevka/param": "29.0.0", "@unicode/unicode-15.1.0": "^1.5.2" } }, "tools/data-export": { "name": "@iosevka/data-export", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/param": "28.1.0", + "@iosevka/param": "29.0.0", "@unicode/unicode-15.1.0": "^1.5.2", "cldr": "^7.5.0" } }, "tools/generate-samples": { "name": "@iosevka/generate-samples", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/data-export": "28.1.0" + "@iosevka/data-export": "29.0.0" } }, "tools/misc": { "name": "@iosevka/misc", - "version": "28.1.0", + "version": "29.0.0", "dependencies": { - "@iosevka/util": "28.1.0", - "semver": "^7.5.4", + "@iosevka/util": "29.0.0", + "semver": "^7.6.0", "wawoff2": "^2.0.1" } } diff --git a/package.json b/package.json index bed8890e8e..988aa4458e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/monorepo", - "version": "28.1.0", + "version": "29.0.0", "workspaces": [ "packages/*", "tools/*" @@ -15,17 +15,17 @@ "otb-ttc-bundle": "^1.7.3", "@iarna/toml": "^2.2.5", "deep-equal": "^2.2.3", - "semver": "^7.5.4", + "semver": "^7.6.0", "uuid": "^9.0.1", "verda": "^1.11.2", "which": "^4.0.0" }, "devDependencies": { - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "patel": "^0.39.0", - "prettier": "^3.1.1" + "patel": "^0.40.0", + "prettier": "^3.2.5" }, "engines": { "node": ">=16.0.0" diff --git a/packages/font-glyphs/package.json b/packages/font-glyphs/package.json index 3097fb63f2..b790ce8236 100644 --- a/packages/font-glyphs/package.json +++ b/packages/font-glyphs/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/font-glyphs", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", @@ -8,11 +8,11 @@ "./unicode-knowledge": "./src/meta/unicode-knowledge.mjs" }, "dependencies": { - "@iosevka/font-kits": "28.1.0", - "@iosevka/geometry": "28.1.0", - "@iosevka/geometry-cache": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/util": "28.1.0", - "typo-geom": "^0.14.0" + "@iosevka/font-kits": "29.0.0", + "@iosevka/geometry": "29.0.0", + "@iosevka/geometry-cache": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/util": "29.0.0", + "typo-geom": "^0.15.0" } } diff --git a/packages/font-glyphs/src/auto-build/transformed.ptl b/packages/font-glyphs/src/auto-build/transformed.ptl index 72b0a5994f..39e7da72f5 100644 --- a/packages/font-glyphs/src/auto-build/transformed.ptl +++ b/packages/font-glyphs/src/auto-build/transformed.ptl @@ -111,21 +111,6 @@ glyph-block Autobuild-Transformed : begin createSuperscripts 'sup' null : list list 0x00AA 'aSbRsbUnderlineBelow' list 0x00BA 'oSbRsbUnderlineBelow' - list 0x2070 'zero.lnum' - list 0x00B9 'one.lnum' - list 0x00B2 'two.lnum' - list 0x00B3 'three.lnum' - list 0x2074 'four.lnum' - list 0x2075 'five.lnum' - list 0x2076 'six.lnum' - list 0x2077 'seven.lnum' - list 0x2078 'eight.lnum' - list 0x2079 'nine.lnum' - list 0x207A 'plus' - list 0x207B 'minus' - list 0x207C 'equal' - list 0x207D 'parenLeft' - list 0x207E 'parenRight' list 0x02B0 'h' list 0x02B1 'hHookTop' list 0x02B2 'j' @@ -142,8 +127,29 @@ glyph-block Autobuild-Transformed : begin list 0x02E2 's' list 0x02E3 'x' list 0x02E4 'revGlottalStop' - list 0x2071 'i' - list 0x207F 'n' + list 0x1D2C 'A' + list 0x1D2D 'AE' + list 0x1D2E 'B' + list 0x1D2F 'BBar' + list 0x1D30 'D' + list 0x1D31 'E' + list 0x1D32 'revE' + list 0x1D33 'G' + list 0x1D34 'H' + list 0x1D35 'I' + list 0x1D36 'J' + list 0x1D37 'K' + list 0x1D38 'L' + list 0x1D39 'M' + list 0x1D3A 'N' + list 0x1D3B 'NRev' + list 0x1D3C 'O' + list 0x1D3D 'OU' + list 0x1D3E 'P' + list 0x1D3F 'R' + list 0x1D40 'T' + list 0x1D41 'U' + list 0x1D42 'W' list 0x1D43 'a' list 0x1D44 'turna' list 0x1D45 'scripta' @@ -213,30 +219,17 @@ glyph-block Autobuild-Transformed : begin list 0x1DBD 'zCurlyTail' list 0x1DBE 'ezh' list 0x1DBF 'grek/theta' - list 0x1D2C 'A' - list 0x1D2E 'B' - list 0x1D2F 'BBar' - list 0x1D30 'D' - list 0x1D31 'E' - list 0x1D32 'revE' - list 0x1D33 'G' - list 0x1D34 'H' - list 0x1D35 'I' - list 0x1D36 'J' - list 0x1D37 'K' - list 0x1D38 'L' - list 0x1D39 'M' - list 0x1D3A 'N' - list 0x1D3B 'NRev' - list 0x1D3C 'O' - list 0x1D3D 'OU' - list 0x1D3E 'P' - list 0x1D3F 'R' - list 0x1D40 'T' - list 0x1D41 'U' - list 0x1D42 'W' + list 0x2071 'i' + list 0x207A 'plus' + list 0x207B 'minus' + list 0x207C 'equal' + list 0x207D 'parenLeft' + list 0x207E 'parenRight' + list 0x207F 'n' list 0x2C7D 'V' list 0x2E0B 'mathBox' + list 0x2E0C 'multiplyStroke2' + list 0x2E0D 'multiplyStroke1' list 0xA69C 'cyrl/yer' list 0xA69D 'cyrl/yeri' list 0xA702 'subst' @@ -339,6 +332,7 @@ glyph-block Autobuild-Transformed : begin list 0x1E06B 'cyrl/the' list 0x1E06C 'cyrl/yeryBack' list 0x1E06D 'cyrl/uShortKazakh' + list 0x1FBCC 'smallBracketLeft' list null 'S' # there is no superscript S in unicode, but is is used for the SM symbol createSuperscripts 'numerator' NumeratorForm : list @@ -352,24 +346,17 @@ glyph-block Autobuild-Transformed : begin list null 'seven.onum' list null 'eight.onum' list null 'nine.onum' - list null 'zero.lnum' - list null 'one.lnum' - list null 'two.lnum' - list null 'three.lnum' - list null 'four.lnum' - list null 'five.lnum' - list null 'six.lnum' - list null 'seven.lnum' - list null 'eight.lnum' - list null 'nine.lnum' - - do "superscript AE" - define { tnmAHalf jobsAHalf } : createSuperscripts 'sup' null { { null 'AE/AHalf' } } - define { tnmEHalf jobsEHalf } : createSuperscripts 'sup' null { { null 'AE/EHalf' } } - create-glyph 'sup{AE}' 0x1D2D : glyph-proc - include [refer-glyph tnmAHalf.('AE/AHalf')] AS_BASE ALSO_METRICS - include [refer-glyph tnmEHalf.('AE/EHalf')] - CvDecompose.set currentGlyph { tnmAHalf.('AE/AHalf') tnmEHalf.('AE/EHalf') } + list 0x2070 'zero.lnum' + list 0x00B9 'one.lnum' + list 0x00B2 'two.lnum' + list 0x00B3 'three.lnum' + list 0x2074 'four.lnum' + list 0x2075 'five.lnum' + list 0x2076 'six.lnum' + list 0x2077 'seven.lnum' + list 0x2078 'eight.lnum' + list 0x2079 'nine.lnum' + list null 'period' : where : [createSuperscripts prefix gr _records] : begin local {records relSets targetNameMap} : extendRelatedGlyphs prefix _records @@ -394,16 +381,15 @@ glyph-block Autobuild-Transformed : begin do createSubscripts 'sub' null : list - list 0x2080 'zero.lnum' - list 0x2081 'one.lnum' - list 0x2082 'two.lnum' - list 0x2083 'three.lnum' - list 0x2084 'four.lnum' - list 0x2085 'five.lnum' - list 0x2086 'six.lnum' - list 0x2087 'seven.lnum' - list 0x2088 'eight.lnum' - list 0x2089 'nine.lnum' + list 0x1D62 'i' + list 0x1D63 'r' + list 0x1D64 'u' + list 0x1D65 'v' + list 0x1D66 'grek/beta' + list 0x1D67 'grek/gamma' + list 0x1D68 'grek/rho' + list 0x1D69 'grek/phi' + list 0x1D6A 'grek/chi' list 0x208A 'plus' list 0x208B 'minus' list 0x208C 'equal' @@ -422,16 +408,9 @@ glyph-block Autobuild-Transformed : begin list 0x209A 'p' list 0x209B 's' list 0x209C 't' - list 0x1D62 'i' - list 0x1D63 'r' - list 0x1D64 'u' - list 0x1D65 'v' - list 0x1D66 'grek/beta' - list 0x1D67 'grek/gamma' - list 0x1D68 'grek/rho' - list 0x1D69 'grek/phi' - list 0x1D6A 'grek/chi' list 0x2C7C 'j' + list 0x2E1C 'multiplyStroke2' + list 0x2E1D 'multiplyStroke1' list 0xA700 'subst' list 0xA701 'substBarNoRise' list 0xA706 'supst' @@ -475,16 +454,17 @@ glyph-block Autobuild-Transformed : begin list null 'seven.onum' list null 'eight.onum' list null 'nine.onum' - list null 'zero.lnum' - list null 'one.lnum' - list null 'two.lnum' - list null 'three.lnum' - list null 'four.lnum' - list null 'five.lnum' - list null 'six.lnum' - list null 'seven.lnum' - list null 'eight.lnum' - list null 'nine.lnum' + list 0x2080 'zero.lnum' + list 0x2081 'one.lnum' + list 0x2082 'two.lnum' + list 0x2083 'three.lnum' + list 0x2084 'four.lnum' + list 0x2085 'five.lnum' + list 0x2086 'six.lnum' + list 0x2087 'seven.lnum' + list 0x2088 'eight.lnum' + list 0x2089 'nine.lnum' + list null 'period' : where : [createSubscripts prefix gr _records] : begin local {records relSets targetNameMap} : extendRelatedGlyphs prefix _records diff --git a/packages/font-glyphs/src/letter/cyrillic/sha.ptl b/packages/font-glyphs/src/letter/cyrillic/sha.ptl index 841b2dbf8e..7caac5934a 100644 --- a/packages/font-glyphs/src/letter/cyrillic/sha.ptl +++ b/packages/font-glyphs/src/letter/cyrillic/sha.ptl @@ -9,15 +9,17 @@ glyph-block Letter-Cyrillic-Sha : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Shared-Shapes : RightwardTailedBar CyrDescender SerifFrame - define [CyrShaShape top df fInv] : glyph-proc + glyph-block-export CyrShaShape + define [CyrShaShape] : with-params [df top bot [fine Stroke] [doSerif false] [fInv false]] : glyph-proc + local cofine : fine * df.mvs / Stroke include : union - [if fInv HBar.t HBar.b] df.leftSB df.rightSB [if fInv top 0] - VBar.l df.leftSB 0 top df.mvs - VBar.r df.rightSB 0 top df.mvs - VBar.m df.middle 0 top df.mvs + [if fInv HBar.t HBar.b] df.leftSB df.rightSB [if fInv top bot] fine + VBar.l df.leftSB bot top cofine + VBar.r df.rightSB bot top cofine + VBar.m df.middle bot top cofine - if SLAB : begin - local sf : SerifFrame.fromDf df top 0 (swSerif -- df.mvs) + if doSerif : begin + local sf : SerifFrame.fromDf df top bot (swSerif -- cofine) if fInv : then : begin include : composite-proc sf.lt.outer sf.rt.outer @@ -33,31 +35,32 @@ glyph-block Letter-Cyrillic-Sha : begin create-glyph 'cyrl/Sha' 0x428 : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.capital - include : CyrShaShape CAP df false + include : CyrShaShape df CAP 0 (doSerif -- SLAB) create-glyph 'cyrl/sha.upright' : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.e - include : CyrShaShape XH df false + include : CyrShaShape df XH 0 (doSerif -- SLAB) create-glyph 'cyrl/teThreeLeg.upright' : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.e - include : CyrShaShape XH df true + include : CyrShaShape df XH 0 (doSerif -- SLAB) (fInv -- true) alias 'smcpMTurned' 0xA7FA 'cyrl/sha.upright' - define [CyrShchaShape top df] : glyph-proc - include : CyrShaShape top df + define [CyrShchaShape] : with-params [df top bot [fine Stroke] [doSerif false]] : glyph-proc + local cofine : fine * df.mvs / Stroke + include : CyrShaShape df top bot (fine -- fine) (doSerif -- doSerif) #eject-contour 'serifRB' - include : CyrDescender.rSideJut df.rightSB 0 (refSw -- df.mvs) + include : CyrDescender.rSideJut df.rightSB bot (refSw -- cofine) create-glyph 'cyrl/Shcha' 0x429 : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.capital - include : CyrShchaShape CAP df + include : CyrShchaShape df CAP 0 (doSerif -- SLAB) create-glyph 'cyrl/shcha.upright' : glyph-proc local df : include : DivFrame para.diversityM 3 include : df.markSet.e - include : CyrShchaShape XH df + include : CyrShchaShape df XH 0 (doSerif -- SLAB) diff --git a/packages/font-glyphs/src/letter/latin-ext/ezh.ptl b/packages/font-glyphs/src/letter/latin-ext/ezh.ptl index df2d33a171..f147a7e915 100644 --- a/packages/font-glyphs/src/letter/latin-ext/ezh.ptl +++ b/packages/font-glyphs/src/letter/latin-ext/ezh.ptl @@ -28,10 +28,6 @@ glyph-block Letter-Latin-Ezh : begin g4 (RightSB - OX) [mix yMidBar bot pArc] SerifedArcEnd.RtlRhs SB Middle bot Stroke hookDepth - define EZH-SLAB-NONE 0 - define EZH-SLAB-ALWAYS 1 - define EZH-SLAB-AUTO : if SLAB EZH-SLAB-ALWAYS EZH-SLAB-NONE - define [ConventionalStart top bot ezhLeft ezhRight yMidBar] : glyph-proc include : HBar.t SB ezhRight top include : dispiro @@ -54,8 +50,8 @@ glyph-block Letter-Latin-Ezh : begin spiro-outline corner (-Width) bot corner (-Width) (2 * top) - corner (ezhRight - xDiagWidth) (2 * top) - corner (ezhRight - xDiagWidth) (top - yFootHeight) + corner (ezhRight - xDiagWidth + 0.1) (2 * top) + corner (ezhRight - xDiagWidth + 0.1) (top - yFootHeight) corner (ezhLeft + xDiagWidth) yMidBar corner (ezhLeft + xDiagWidth) bot dispiro @@ -65,7 +61,7 @@ glyph-block Letter-Latin-Ezh : begin g2.right.mid (SB + xHookDepth) (top - O) [widths.rhs.heading Stroke Rightward] flat [mix (SB + xMockTailDepth) ezhRight kTop] (top - kTop * yTailDepth) curl [mix (SB + xMockTailDepth) ezhRight 4] (top - 4 * yTailDepth) - + include : VBar.r ezhRight top (top - yFootHeight) (xDiagWidth / HVContrast) include : dispiro corner ezhRight (top - yFootHeight) [widths.rhs (Stroke / HVContrast)] @@ -79,7 +75,7 @@ glyph-block Letter-Latin-Ezh : begin local-parameter : pRight -- 0.925 local-parameter : terminalShape -- StdTerminalShape local-parameter : isCursive -- false - local-parameter : serifShape -- EZH-SLAB-AUTO + local-parameter : isSerifed -- SLAB local yMidBar : [mix bot top [if isCursive 0.5 0.55]] + HalfStroke local ezhLeft : mix SB RightSB pLeft @@ -96,38 +92,34 @@ glyph-block Letter-Latin-Ezh : begin archv terminalShape top bot yMidBar - if serifShape : include : VSerif.dl SB top VJut + if isSerifed : include : VSerif.dl SB top VJut return : object yMidBar - define EzhConfig : SuffixCfg.weave - object # body - straight { false } - cursive { true } - object # serifs - "" { EZH-SLAB-NONE } # For cursive - serifless { EZH-SLAB-NONE } - serifed { EZH-SLAB-ALWAYS } + define EzhConfig : object + straightSerifless { false false } + straightTopSerifed { false true } + cursive { true false } - foreach { suffix { {isCursive} {serifShape} } } [pairs-of EzhConfig] : do + foreach { suffix { isCursive isSerifed } } [pairs-of EzhConfig] : do create-glyph "Ezh.\(suffix)" : glyph-proc include : MarkSet.capital - include : EzhShape CAP 0 (isCursive -- isCursive) (serifShape -- serifShape) + include : EzhShape CAP 0 (isCursive -- isCursive) (isSerifed -- isSerifed) create-glyph "smcpEzh.\(suffix)" : glyph-proc include : MarkSet.e - include : EzhShape XH 0 (isCursive -- isCursive) (serifShape -- serifShape) + include : EzhShape XH 0 (isCursive -- isCursive) (isSerifed -- isSerifed) create-glyph "ezh.\(suffix)" : glyph-proc include : MarkSet.p - include : EzhShape XH Descender (isCursive -- isCursive) (serifShape -- serifShape) + include : EzhShape XH Descender (isCursive -- isCursive) (isSerifed -- isSerifed) create-glyph "ezhTail.\(suffix)" : glyph-proc include : MarkSet.p local b : mix Descender XH 0.25 local [object yMidBar] : include : EzhShape XH b isCursive -- isCursive - serifShape -- serifShape + isSerifed -- isSerifed terminalShape -- [HooklessTerminalShape 0.5] local y : mix yMidBar b 0.5 include : dispiro @@ -147,7 +139,7 @@ glyph-block Letter-Latin-Ezh : begin local p : SmallArchDepthB / (SmallArchDepthA + SmallArchDepthB) local [object yMidBar] : include : EzhShape XH Descender isCursive -- isCursive - serifShape -- serifShape + isSerifed -- isSerifed terminalShape -- [HooklessTerminalShape p] local fine : AdviceStroke2 3 5 (XH - Descender) local rinner : (XH * 0.4 - fine * 1.5) / 2 @@ -163,7 +155,7 @@ glyph-block Letter-Latin-Ezh : begin include : MarkSet.p include : EzhShape XH 0 isCursive -- isCursive - serifShape -- serifShape + isSerifed -- isSerifed terminalShape -- RetroflexConnectionTerminal include : RetroflexHook.l SB 0 (yAttach -- Hook) @@ -226,7 +218,7 @@ glyph-block Letter-Latin-Ezh : begin include : dispiro corner ezhLeft (top - Stroke) [widths.lhs (Stroke / HVContrast)] corner ezhRight yMidBar [widths.rhs (Stroke / HVContrast)] - + include : dispiro widths.lhs flat ezhRight yMidBar [heading Leftward] diff --git a/packages/font-glyphs/src/letter/latin/lower-il.ptl b/packages/font-glyphs/src/letter/latin/lower-il.ptl index 08330ade9a..63480bf393 100644 --- a/packages/font-glyphs/src/letter/latin/lower-il.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-il.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Latin-Lower-I : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Mark-Adjustment : ExtendBelowBaseAnchors + glyph-block-import Mark-Adjustment : LeaningAnchor ExtendBelowBaseAnchors glyph-block-import Letter-Shared : CreateAccentedComposition CreateMultiAccentedComposition glyph-block-import Letter-Shared : CreateCommaCaronComposition CreateOgonekComposition glyph-block-import Letter-Shared : CreateTurnedLetter @@ -16,53 +16,46 @@ glyph-block Letter-Latin-Lower-I : begin glyph-block-import Letter-Shared-Shapes : CurlyTail BeltOverlay PalatalHook glyph-block-import Letter-Shared-Shapes : RetroflexHook LetterBarOverlay RightwardTailedBar - glyph-block-export OverrideILMarks - define [OverrideILMarks df xMiddle yTop] : glyph-proc - set-base-anchor 'above' xMiddle yTop - set-base-anchor 'below' xMiddle 0 - set-base-anchor 'overlay' xMiddle (yTop * OverlayPos) - set-base-anchor 'topRight' (xMiddle + df.rightSB - df.middle) yTop - - glyph-block-export OverrideILMarksSerifed - define [OverrideILMarksSerifed df xMiddle yTop] : glyph-proc - set-base-anchor 'above' xMiddle yTop - set-base-anchor 'below' xMiddle 0 - set-base-anchor 'overlay' [mix df.middle xMiddle 0.5] (yTop * OverlayPos) - set-base-anchor 'topRight' (xMiddle + df.rightSB - df.middle) yTop - - # Support shapes - define [FlatTailedDotlessIXMiddle df addTopSerif] : df.middle - [if addTopSerif 0 : IBalance2 df] - define [TailedDotlessIShift df] : (1 - df.div) * 0.2 - define [TailedDotlessIXMiddle df addTopSerif] : begin - return : mix df.leftSB df.rightSB ([StrokeWidthBlend 0.42 0.46] - [TailedDotlessIShift df]) - ########################################################################################### # Implementations + define [TailedDotlessIShift df] : (1 - df.div) * 0.2 + define XMiddle : namespace + define [FlatTailedImpl df addTopSerif] : df.middle - [if addTopSerif 0 : IBalance2 df] + define [TailedImpl df addTopSerif] : begin + return : mix df.leftSB df.rightSB ([StrokeWidthBlend 0.42 0.46] - [TailedDotlessIShift df]) export : define [Center df] : return df.middle export : define [Hooky df] : df.middle + [IBalance2 df] export : define [HookyBottom df] : df.middle - [IBalance2 df] export : define [Serifed df] : df.middle + [IBalance df] - export : define [Tailed df] : TailedDotlessIXMiddle df false - export : define [TailedSerifed df] : TailedDotlessIXMiddle df true - export : define [FlatTailed df] : FlatTailedDotlessIXMiddle df false - export : define [SerifedFlatTailed df] : FlatTailedDotlessIXMiddle df true + export : define [Tailed df] : TailedImpl df false + export : define [TailedSerifed df] : TailedImpl df true + export : define [FlatTailed df] : FlatTailedImpl df false + export : define [SerifedFlatTailed df] : FlatTailedImpl df true export : define [PhoneticLeft df] : df.leftSB + [HSwToV Stroke] + define Marks : namespace + export : define [Serifless df yTop xMiddle] : glyph-proc + include : LeaningAnchor.Above.At xMiddle + include : LeaningAnchor.Below.At xMiddle + set-base-anchor 'overlay' xMiddle (yTop * OverlayPos) + set-base-anchor 'topRight' (xMiddle + df.rightSB - df.middle) yTop + + export : define [Serifed df yTop xMiddle] : glyph-proc + include : Serifless df yTop xMiddle + include : LeaningAnchor.Above.At [mix df.middle xMiddle 0.75] + define Body : namespace export : define [Serifless df top xMiddle] : glyph-proc - include : OverrideILMarks df xMiddle top include : VBar.m xMiddle 0 top df.mvs export : define [HookyBottom df top xMiddle] : glyph-proc - include : OverrideILMarks df xMiddle top include : VBar.m xMiddle 0 top df.mvs include : tagged 'serifRB' : HSerif.rb xMiddle 0 (LongJut * df.div) Stroke df.mvs set-base-anchor 'trailing' (xMiddle + LongJut * df.div) 0 export : define [Serifed df top xMiddle] : glyph-proc - include : OverrideILMarks df xMiddle top include : VBar.m xMiddle 0 top df.mvs include : tagged 'serifB' HSerif.mb df.middle 0 (LongJut * df.div) @@ -84,7 +77,6 @@ glyph-block Letter-Latin-Lower-I : begin g4 rightTerm hookDepth [widths.lhs fine] local xDot : xMiddle + [StrokeWidthBlend 0.25 0] * TanSlope * df.width - include : OverrideILMarks df xDot top set-base-anchor 'trailing' [mix left rightTerm 0.5] 0 set-base-anchor 'palatalHookMask' [mix left rightTerm 0.5] (HalfStroke + O) @@ -101,7 +93,6 @@ glyph-block Letter-Latin-Lower-I : begin flat (xMiddle + hd.x - [HSwToV : 0.5 * df.mvs]) (0.5 * df.mvs) curl xFinal (0.5 * df.mvs) - include : OverrideILMarks df xMiddle top set-base-anchor 'trailing' xFinal 0 export : define [SemiTailed df top xMiddle] : glyph-proc @@ -118,7 +109,6 @@ glyph-block Letter-Latin-Lower-I : begin g2.right.mid (xMiddle + x0) (0.5 * df.mvs + O) [heading Rightward] g4 (xMiddle + x1) (0.5 * df.mvs + (1 - 2 * hookScaleY) * O) [heading Rightward] - include : OverrideILMarks df xMiddle top set-base-anchor 'trailing' (xMiddle + x0) 0 set-base-anchor 'palatalHookMask' (xMiddle + x0) (HalfStroke + O) @@ -126,8 +116,6 @@ glyph-block Letter-Latin-Lower-I : begin include : RightwardTailedBar (xMiddle + [HSwToV : 0.5 * Stroke]) 0 top export : define [DiagTailed df top xMiddle] : glyph-proc - include : OverrideILMarks df xMiddle top - set-base-anchor 'trailing' (xMiddle + [HSwToV : 0.75 * df.mvs]) 0 set-base-anchor 'palatalHookMask' currentGlyph.baseAnchors.trailing.x (HalfStroke + O) @@ -167,51 +155,54 @@ glyph-block Letter-Latin-Lower-I : begin define SmallILConfig : object # Normal - 'hooky' { Body.Serifless Serifs.Hooky XMiddle.Hooky para.diversityII 0 } - 'zshaped' { Body.HookyBottom Serifs.Hooky XMiddle.Center para.diversityI Stroke } - 'serifless' { Body.Serifless null XMiddle.Center para.diversityII 0 } - 'serifed' { Body.Serifed Serifs.Serifed XMiddle.Serifed para.diversityI Stroke } - 'serifedAsymmetric' { Body.Serifed Serifs.SerifedShort XMiddle.Serifed para.diversityI Stroke } - 'tailed' { Body.Tailed null XMiddle.Tailed para.diversityII Stroke } - 'tailedSerifed' { Body.Tailed Serifs.Hooky XMiddle.TailedSerifed para.diversityI Stroke } - 'flatTailed' { Body.FlatTailed null XMiddle.FlatTailed para.diversityII Stroke } - 'serifedFlatTailed' { Body.FlatTailed Serifs.Hooky XMiddle.SerifedFlatTailed para.diversityI Stroke } - 'diagonalTailed' { Body.DiagTailed null XMiddle.FlatTailed para.diversityII Stroke } - 'serifedDiagonalTailed' { Body.DiagTailed Serifs.Hooky XMiddle.SerifedFlatTailed para.diversityI Stroke } - 'semiTailed' { Body.SemiTailed null XMiddle.FlatTailed para.diversityII Stroke } - 'serifedSemiTailed' { Body.SemiTailed Serifs.Hooky XMiddle.SerifedFlatTailed para.diversityI Stroke } - 'hookyBottom' { Body.HookyBottom null XMiddle.HookyBottom para.diversityII Stroke } + 'serifless' { Body.Serifless null Marks.Serifless XMiddle.Center para.diversityII 0 } + 'hooky' { Body.Serifless Serifs.Hooky Marks.Serifed XMiddle.Hooky para.diversityI 0 } + 'hookyBottom' { Body.HookyBottom null Marks.Serifless XMiddle.HookyBottom para.diversityI Stroke } + 'zshaped' { Body.HookyBottom Serifs.Hooky Marks.Serifed XMiddle.Center para.diversityI Stroke } + 'serifed' { Body.Serifed Serifs.Serifed Marks.Serifed XMiddle.Serifed para.diversityI Stroke } + 'serifedAsymmetric' { Body.Serifed Serifs.SerifedShort Marks.Serifed XMiddle.Serifed para.diversityI Stroke } + 'tailed' { Body.Tailed null Marks.Serifless XMiddle.Tailed para.diversityI Stroke } + 'tailedSerifed' { Body.Tailed Serifs.Hooky Marks.Serifed XMiddle.TailedSerifed para.diversityI Stroke } + 'flatTailed' { Body.FlatTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'serifedFlatTailed' { Body.FlatTailed Serifs.Hooky Marks.Serifed XMiddle.SerifedFlatTailed para.diversityI Stroke } + 'diagonalTailed' { Body.DiagTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'serifedDiagonalTailed' { Body.DiagTailed Serifs.Hooky Marks.Serifed XMiddle.SerifedFlatTailed para.diversityI Stroke } + 'semiTailed' { Body.SemiTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'serifedSemiTailed' { Body.SemiTailed Serifs.Hooky Marks.Serifed XMiddle.SerifedFlatTailed para.diversityI Stroke } # Decompressed - 'hookyDec' { Body.Serifless Serifs.Hooky XMiddle.Hooky para.diversityI 0 } - 'seriflessDec' { Body.Serifless null XMiddle.Center para.diversityI 0 } - 'tailedDec' { Body.Tailed null XMiddle.Tailed para.diversityI Stroke } - 'flatTailedDec' { Body.FlatTailed null XMiddle.FlatTailed para.diversityI Stroke } - 'diagonalTailedDec' { Body.DiagTailed null XMiddle.FlatTailed para.diversityI Stroke } - 'semiTailedDec' { Body.SemiTailed null XMiddle.FlatTailed para.diversityI Stroke } - 'hookyBottomDec' { Body.HookyBottom null XMiddle.HookyBottom para.diversityI Stroke } + 'hookyDec' { Body.Serifless Serifs.Hooky Marks.Serifed XMiddle.Hooky para.diversityI 0 } + 'seriflessDec' { Body.Serifless null Marks.Serifless XMiddle.Center para.diversityI 0 } + 'tailedDec' { Body.Tailed null Marks.Serifless XMiddle.Tailed para.diversityI Stroke } + 'flatTailedDec' { Body.FlatTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'diagonalTailedDec' { Body.DiagTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'semiTailedDec' { Body.SemiTailed null Marks.Serifless XMiddle.FlatTailed para.diversityI Stroke } + 'hookyBottomDec' { Body.HookyBottom null Marks.Serifless XMiddle.HookyBottom para.diversityI Stroke } # R Tail - 'hookyRTail' { Body.Serifless Serifs.Hooky XMiddle.Center para.diversityII 0 } - 'seriflessRTail' { Body.Serifless null XMiddle.HookyBottom para.diversityII 0 } + 'hookyRTail' { Body.Serifless Serifs.Hooky Marks.Serifed XMiddle.Center para.diversityI 0 } + 'seriflessRTail' { Body.Serifless null Marks.Serifless XMiddle.HookyBottom para.diversityI 0 } # R Tail + Decompress - 'hookyRTailDec' { Body.Serifless Serifs.Hooky XMiddle.Center para.diversityI 0 } - 'seriflessRTailDec' { Body.Serifless null XMiddle.HookyBottom para.diversityI 0 } + 'hookyRTailDec' { Body.Serifless Serifs.Hooky Marks.Serifed XMiddle.Center para.diversityI 0 } + 'seriflessRTailDec' { Body.Serifless null Marks.Serifless XMiddle.HookyBottom para.diversityI 0 } # - 'hookyPL' { Body.PhoneticLeft Serifs.Hooky XMiddle.PhoneticLeft 1 0 } - 'seriflessPL' { Body.PhoneticLeft null XMiddle.PhoneticLeft 1 0 } + 'hookyPL' { Body.PhoneticLeft Serifs.Hooky Marks.Serifed XMiddle.PhoneticLeft 1 0 } + 'seriflessPL' { Body.PhoneticLeft null Marks.Serifless XMiddle.PhoneticLeft 1 0 } # Special variants for Tau (which is built using dotlessi) - 'tau/tailless' { Body.Serifless null XMiddle.Center 1 0 } - 'tau/tailed' { Body.Tailed null XMiddle.Tailed 1 Stroke } - 'tau/flatTailed' { Body.FlatTailed null XMiddle.FlatTailed 1 Stroke } - 'tau/diagonalTailed' { Body.DiagTailed null XMiddle.FlatTailed 1 Stroke } - 'tau/semiTailed' { Body.SemiTailed null XMiddle.FlatTailed 1 Stroke } - 'tau/shortTailed' { Body.ShortTailed null XMiddle.Center 1 Stroke } - - foreach { suffix { Body Serif xMiddleT div y0R } } [Object.entries SmallILConfig] : do + 'tau/tailless' { Body.Serifless null Marks.Serifless XMiddle.Center 1 0 } + 'tau/tailed' { Body.Tailed null Marks.Serifless XMiddle.Tailed 1 Stroke } + 'tau/flatTailed' { Body.FlatTailed null Marks.Serifless XMiddle.FlatTailed 1 Stroke } + 'tau/diagonalTailed' { Body.DiagTailed null Marks.Serifless XMiddle.FlatTailed 1 Stroke } + 'tau/semiTailed' { Body.SemiTailed null Marks.Serifless XMiddle.FlatTailed 1 Stroke } + 'tau/shortTailed' { Body.ShortTailed null Marks.Serifless XMiddle.Center 1 Stroke } + + do : foreach { suffix { Body Serif Marks xMiddleTMono div y0R } } [Object.entries SmallILConfig] : begin + define xMiddleT : if para.isQuasiProportional XMiddle.Center xMiddleTMono + create-glyph "dotlessi.\(suffix)" : glyph-proc local df : include : DivFrame div include : df.markSet.e local xMiddle : xMiddleT df include : Body df XH xMiddle + include : Marks df XH xMiddle if Serif : include : tagged 'serifLT' : Serif df XH xMiddle create-glyph "latn/Iota.\(suffix)" : glyph-proc @@ -219,6 +210,7 @@ glyph-block Letter-Latin-Lower-I : begin include : df.markSet.capital local xMiddle : xMiddleT df include : Body df CAP xMiddle + include : Marks df CAP xMiddle if Serif : include : tagged 'serifLT' : Serif df CAP xMiddle create-glyph "l.\(suffix)" : glyph-proc @@ -226,6 +218,7 @@ glyph-block Letter-Latin-Lower-I : begin include : df.markSet.b local xMiddle : xMiddleT df include : Body df Ascender xMiddle + include : Marks df Ascender xMiddle if Serif : include : tagged 'serifLT' : Serif df Ascender xMiddle create-glyph "lDotBase.\(suffix)" : glyph-proc @@ -281,6 +274,7 @@ glyph-block Letter-Latin-Lower-I : begin include : df.markSet.e local xMiddle : xMiddleT df include : Body df XH xMiddle + include : Marks df XH xMiddle include : HBar.t df.leftSB df.rightSB XH currentGlyph.deleteBaseAnchor 'trailing' @@ -288,12 +282,14 @@ glyph-block Letter-Latin-Lower-I : begin create-glyph "cyrl/Twe/middle.\(suffix)" : glyph-proc local df : include : DivFrame div include : Body df CAP [XMiddle.Center df] + include : Marks df CAP [XMiddle.Center df] currentGlyph.deleteBaseAnchor 'trailing' set-mark-anchor 'cvDecompose' (df.width / 2) CAP create-glyph "cyrl/twe/middle.\(suffix)" : glyph-proc local df : include : DivFrame div include : Body df XH [XMiddle.Center df] + include : Marks df XH [XMiddle.Center df] currentGlyph.deleteBaseAnchor 'trailing' set-mark-anchor 'cvDecompose' (df.width / 2) XH diff --git a/packages/font-glyphs/src/letter/latin/lower-j.ptl b/packages/font-glyphs/src/letter/latin/lower-j.ptl index 031ab2b995..4198e6ca69 100644 --- a/packages/font-glyphs/src/letter/latin/lower-j.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-j.ptl @@ -8,7 +8,7 @@ glyph-module glyph-block Letter-Latin-Lower-J : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Mark-Adjustment : ExtendAboveBaseAnchors + glyph-block-import Mark-Adjustment : LeaningAnchor ExtendAboveBaseAnchors glyph-block-import Letter-Shared : CreateAccentedComposition glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth LetterBarOverlay glyph-block-import Letter-Shared-Shapes : DiagTail TopHook @@ -67,7 +67,7 @@ glyph-block Letter-Latin-Lower-J : begin serif -- false export : define [DiagonalTailed df top xMiddle] : glyph-proc - local dfHook : DivFrame [mix para.diversityI para.diversityII 0.5] + local dfHook : DivFrame para.diversityI include : dispiro widths.center flat xMiddle top [heading Downward] @@ -78,23 +78,23 @@ glyph-block Letter-Latin-Lower-J : begin export : define [Long df top xMiddle] : HSerif.lt xMiddle top (LongJut * df.div) define Marks : namespace - export : define [FullHook df top xMiddle fSerifed] : glyph-proc - set-base-anchor 'above' (xMiddle - [if fSerifed 1 0] * Stroke * [HSwToV : 0.166 * df.div]) top - set-base-anchor 'overlay' (xMiddle - [if fSerifed 1 0] * Stroke * [HSwToV : 0.166 * df.div]) (top / 2) + export : define [Serifed df top xMiddle] : glyph-proc + include : Serifless df top xMiddle + include : LeaningAnchor.Above.At [mix df.middle xMiddle (7/8)] - export : define [Straight df top xMiddle fSerifed] : glyph-proc + export : define [Serifless df top xMiddle] : glyph-proc set-base-anchor 'above' xMiddle top set-base-anchor 'overlay' xMiddle (top / 2) define JConfig : object - 'serifless' { "Regular" null XMiddle.Regular Marks.FullHook 1 } - 'serifed' { "Regular" Serifs.Long XMiddle.Regular Marks.FullHook 1 } - 'straightLine' { "Straight" null XMiddle.Straight Marks.Straight para.diversityII } - 'hooky' { "Straight" Serifs.Long XMiddle.Hooky Marks.Straight para.diversityII } - 'flatHookSerifless' { "FlatHook" null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } - 'flatHookSerifed' { "FlatHook" Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } - 'diagonalTailedSerifless' { "DiagonalTailed" null XMiddle.FlatHookSerifless Marks.FullHook para.diversityII } - 'diagonalTailedSerifed' { "DiagonalTailed" Serifs.Long XMiddle.FlatHookSerifed Marks.FullHook para.diversityI } + 'serifless' { "Regular" null XMiddle.Regular Marks.Serifless 1 } + 'serifed' { "Regular" Serifs.Long XMiddle.Regular Marks.Serifed 1 } + 'straightLine' { "Straight" null XMiddle.Straight Marks.Serifless para.diversityII } + 'hooky' { "Straight" Serifs.Long XMiddle.Hooky Marks.Serifed para.diversityI } + 'flatHookSerifless' { "FlatHook" null XMiddle.FlatHookSerifless Marks.Serifless para.diversityII } + 'flatHookSerifed' { "FlatHook" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed para.diversityI } + 'diagonalTailedSerifless' { "DiagonalTailed" null XMiddle.FlatHookSerifless Marks.Serifless para.diversityII } + 'diagonalTailedSerifed' { "DiagonalTailed" Serifs.Long XMiddle.FlatHookSerifed Marks.Serifed para.diversityI } foreach {suffix { shapeId Serif xMiddleT Marks div } } [Object.entries JConfig] : do local df : DivFrame div @@ -105,7 +105,7 @@ glyph-block Letter-Latin-Lower-J : begin include : df.markSet.p include : Body.(shapeId) df XH xMiddle if Serif : include : tagged 'serifLT' : Serif df XH xMiddle - include : Marks df XH xMiddle (!(!Serif)) + include : Marks df XH xMiddle create-glyph "dotlessjBar.\(suffix)" : glyph-proc include [refer-glyph "dotlessj.\(suffix)"] AS_BASE ALSO_METRICS diff --git a/packages/font-glyphs/src/letter/latin/lower-y.ptl b/packages/font-glyphs/src/letter/latin/lower-y.ptl index 01a2200140..da716b6709 100644 --- a/packages/font-glyphs/src/letter/latin/lower-y.ptl +++ b/packages/font-glyphs/src/letter/latin/lower-y.ptl @@ -1,7 +1,7 @@ $$include '../../meta/macros.ptl' import [mix linreg fallback SuffixCfg] from "@iosevka/util" -import [LowerYDotAtBelow Dotless CvDecompose MathSansSerif OgonekTrY] from "@iosevka/glyph/relation" +import [LowerYDotAtBelow Dotless MathSansSerif OgonekTrY] from "@iosevka/glyph/relation" glyph-module diff --git a/packages/font-glyphs/src/letter/latin/s.ptl b/packages/font-glyphs/src/letter/latin/s.ptl index a2083ea8ca..f050ba7465 100644 --- a/packages/font-glyphs/src/letter/latin/s.ptl +++ b/packages/font-glyphs/src/letter/latin/s.ptl @@ -32,111 +32,102 @@ glyph-block Letter-Latin-S : begin local ss : y * 0.22 + 0.12 * strokeFactor + 0.05 * widthFactor return : ss + sign * TanSlope * SmoothAdjust - define [SStrokeDollarInterruptGap deltaX top bot gap stroke refSwEss] : begin - local ess : refSwEss * gap / Stroke - define archDepth : AdviceSArchDepth (top - bot) (-1) stroke - - return : dispiro - g4.down.mid (deltaX + SB - Width) (top - archDepth) [widths.lhs gap] - alsoThru.g2 0.5 0.5 [widths.center ess] - g4.down.mid (deltaX + RightSB - Width - SOBot) (bot + archDepth) [widths.rhs gap] - - define [SCurlyTail sw] : begin + define [SCurlyTail df sw] : begin local fine : AdviceStroke2 3 4 XH local rinner : ((XH * 0.5) - fine * 2 - sw * 0.5) / 4 - local m1 : RightSB - SOBot - [HSwToV sw] - local x2 : RightSB - sw * 0.3 + local m1 : df.rightSB - SOBot - [HSwToV sw] + local x2 : df.rightSB - sw * 0.3 local y2 : -XH * 0.05 - return : CurlyTail fine rinner m1 0 (SB + SOBot) x2 y2 + return : CurlyTail fine rinner m1 0 (df.leftSB + SOBot) x2 y2 - define [SStrokeImpl top bot st sb stroke refSwEss] : begin + define [SStrokeImpl df top bot st sb stroke refSwEss] : begin local ess : refSwEss * stroke / Stroke define archDepth : AdviceSArchDepth (top - bot) (-1) stroke return : dispiro match st - [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs RightSB Middle top stroke Hook + [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs df.rightSB df.middle top stroke Hook [Just SLAB-INWARD] : list - g4 RightSB (top - DToothlessRise) [widths.lhs stroke] - g4 (Middle - CorrectionOMidX * stroke) (top - O) + g4 df.rightSB (top - DToothlessRise) [widths.lhs stroke] + g4 (df.middle - CorrectionOMidX * stroke) (top - O) archv __ : list - g4 RightSB (top - Hook) [widths.lhs stroke] + g4 df.rightSB (top - Hook) [widths.lhs stroke] hookstart (top - O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 SB (top - archDepth) + g4 df.leftSB (top - archDepth) alsoThru.g2 0.5 0.5 [widths.center ess] - g4 (RightSB - SOBot) (bot + archDepth) [widths.rhs stroke] + g4 (df.rightSB - SOBot) (bot + archDepth) [widths.rhs stroke] match sb - [Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs SB Middle bot stroke Hook + [Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs df.leftSB df.middle bot stroke Hook [Just SLAB-INWARD] : list arcvh - g4 (Middle + CorrectionOMidX * stroke) (bot + O) - g4 SB (bot + DToothlessRise) + g4 (df.middle + CorrectionOMidX * stroke) (bot + O) + g4 df.leftSB (bot + DToothlessRise) __ : list hookend (bot + O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 (SB + SOBot) (bot + Hook) + g4 (df.leftSB + SOBot) (bot + Hook) - define [RevSStroke st sb stroke ess] : begin + define [RevSStroke df st sb stroke ess] : begin local archDepth : AdviceSArchDepth CAP 0.5 stroke return : dispiro match st - [Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs SB Middle CAP stroke Hook + [Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs df.leftSB df.middle CAP stroke Hook [Just SLAB-INWARD] : list - g4 SB (CAP - DToothlessRise) [widths.rhs stroke] - g4 (Middle - CorrectionOMidX * stroke) (CAP - O) + g4 df.leftSB (CAP - DToothlessRise) [widths.rhs stroke] + g4 (df.middle - CorrectionOMidX * stroke) (CAP - O) archv __ : list - g4 SB (CAP - Hook) [widths.rhs stroke] + g4 df.leftSB (CAP - Hook) [widths.rhs stroke] hookstart (CAP - O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 RightSB (CAP - archDepth) + g4 df.rightSB (CAP - archDepth) alsoThru.g2 0.5 0.5 [widths.center ess] - g4 (SB + SOBot) archDepth [widths.lhs stroke] + g4 (df.leftSB + SOBot) archDepth [widths.lhs stroke] match sb - [Just SLAB-CLASSICAL] : SerifedArcEnd.LtrLhs RightSB Middle 0 stroke Hook + [Just SLAB-CLASSICAL] : SerifedArcEnd.LtrLhs df.rightSB df.middle 0 stroke Hook [Just SLAB-INWARD] : list arcvh - g4 (Middle + CorrectionOMidX * stroke) O - g4 RightSB DToothlessRise + g4 (df.middle + CorrectionOMidX * stroke) O + g4 df.rightSB DToothlessRise __ : list hookend O (sw -- stroke) (swItalicAdj -- Stroke) - g4 (RightSB + OX - SOBot) Hook + g4 (df.rightSB + OX - SOBot) Hook - define [SmallSStrokeImpl st sb stroke refSwEss] : begin + define [SmallSStrokeImpl df st sb stroke refSwEss] : begin define ess : refSwEss * stroke / Stroke define archDepth : AdviceSArchDepth XH (-1) stroke return : dispiro match st - [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs RightSB Middle XH stroke SHook + [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs df.rightSB df.middle XH stroke SHook [Just SLAB-INWARD] : list - g4 RightSB (XH - DToothlessRise) [widths.lhs stroke] - g4 (Middle - CorrectionOMidX * stroke) (XH - O) + g4 df.rightSB (XH - DToothlessRise) [widths.lhs stroke] + g4 (df.middle - CorrectionOMidX * stroke) (XH - O) archv __ : list - g4 (RightSB + OX) (XH - SHook) [widths.lhs stroke] + g4 (df.rightSB + OX) (XH - SHook) [widths.lhs stroke] hookstart (XH - O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 (SB - OX) (XH - archDepth) + g4 (df.leftSB - OX) (XH - archDepth) alsoThru.g2 0.5 0.5 [widths.center ess] - g4 (RightSB + OX - SOBot) (archDepth) [widths.rhs stroke] + g4 (df.rightSB + OX - SOBot) (archDepth) [widths.rhs stroke] match sb [Just CURLY-TAIL] : list arcvh - SCurlyTail stroke - [Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs SB Middle 0 stroke SHook + SCurlyTail df stroke + [Just SLAB-CLASSICAL] : SerifedArcEnd.RtlRhs df.leftSB df.middle 0 stroke SHook [Just SLAB-INWARD] : list arcvh - g4 (Middle + CorrectionOMidX * stroke) O - g4 SB DToothlessRise + g4 (df.middle + CorrectionOMidX * stroke) O + g4 df.leftSB DToothlessRise __ : list hookend O (sw -- stroke) (swItalicAdj -- Stroke) - g4 (SB - OX + SOBot) SHook + g4 (df.leftSB - OX + SOBot) SHook - define [SStrokeAlt] : with-params [top hook swStart swEnd oXLeftTop offsetLT offsetRB offsetC] : begin + define [SStrokeAlt] : with-params [df top hook swStart swEnd oXLeftTop offsetLT offsetRB offsetC] : begin define stroke : Math.max swStart swEnd define fine : Math.min swStart swEnd define soStart : stroke - swStart @@ -144,83 +135,83 @@ glyph-block Letter-Latin-S : begin define archDepth : AdviceSArchDepth top (-1) stroke return : dispiro widths.lhs fine - g4 (RightSB + OX / 4 - [HSwToV soStart]) (top - hook) + g4 (df.rightSB + OX / 4 - [HSwToV soStart]) (top - hook) hookstart (top - O - soStart) (sw -- fine) (swItalicAdj -- Stroke) (noAdjTerminalY -- true) - g4 (SB + oXLeftTop + offsetLT.x) (top - archDepth + offsetLT.y) + g4 (df.leftSB + oXLeftTop + offsetLT.x) (top - archDepth + offsetLT.y) g2 - offsetC.x + [mix (SB + oXLeftTop + offsetLT.x) (RightSB - SOBot - offsetRB.x) 0.5] + offsetC.x + [mix (df.leftSB + oXLeftTop + offsetLT.x) (df.rightSB - SOBot - offsetRB.x) 0.5] offsetC.y + [mix (top - archDepth) (archDepth) 0.5] widths.center stroke - g4 (RightSB - SOBot - offsetRB.x) (archDepth + offsetRB.y) [widths.rhs fine] + g4 (df.rightSB - SOBot - offsetRB.x) (archDepth + offsetRB.y) [widths.rhs fine] hookend (O + soEnd) (sw -- fine) (swItalicAdj -- Stroke) (noAdjTerminalY -- true) - g4 (SB + SOBot + [HSwToV soEnd]) (hook) [widths.rhs fine] + g4 (df.leftSB + SOBot + [HSwToV soEnd]) (hook) [widths.rhs fine] - define [SmallSStrokePhoneticRight st top] : begin + define [SmallSStrokePhoneticRight df st top] : begin define stroke : AdviceStroke2 2 3 top define ess : AdviceStroke2 2.2 3.2 top define archDepth : AdviceSArchDepth top (-1) stroke return : dispiro match st - [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs RightSB Middle top stroke Hook + [Just SLAB-CLASSICAL] : SerifedArcStart.RtlLhs df.rightSB df.middle top stroke Hook [Just SLAB-INWARD] : list - g4 RightSB (top - DToothlessRise) [widths.lhs stroke] - g4 (Middle - CorrectionOMidX * stroke) (top - O) + g4 df.rightSB (top - DToothlessRise) [widths.lhs stroke] + g4 (df.middle - CorrectionOMidX * stroke) (top - O) archv __ : list - g4 RightSB (top - Hook) [widths.lhs stroke] + g4 df.rightSB (top - Hook) [widths.lhs stroke] hookstart (top - O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 SB (top - archDepth) + g4 df.leftSB (top - archDepth) alsoThru.g2 0.5 0.5 [widths.center ess] - g4 (RightSB - SOBot) (archDepth) [widths.rhs stroke] + g4 (df.rightSB - SOBot) (archDepth) [widths.rhs stroke] arcvh - flat (Middle - CorrectionOMidS) 0 [widths.rhs Stroke] - curl SB 0 + flat (df.middle - CorrectionOMidS) 0 [widths.rhs Stroke] + curl df.leftSB 0 - define [RevSmallSStroke st sb stroke ess] : begin + define [RevSmallSStroke df st sb stroke ess] : begin define archDepth : AdviceSArchDepth XH 0.75 stroke return : dispiro match st - [Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs SB Middle XH stroke SHook + [Just SLAB-CLASSICAL] : SerifedArcStart.LtrRhs df.leftSB df.middle XH stroke SHook [Just SLAB-INWARD] : list - g4 SB (XH - DToothlessRise) [widths.rhs stroke] - g4 (Middle - CorrectionOMidX * stroke) (XH - O) + g4 df.leftSB (XH - DToothlessRise) [widths.rhs stroke] + g4 (df.middle - CorrectionOMidX * stroke) (XH - O) archv __ : list - g4 (SB - OX) (XH - SHook) [widths.rhs stroke] + g4 (df.leftSB - OX) (XH - SHook) [widths.rhs stroke] hookstart (XH - O) (sw -- stroke) (swItalicAdj -- Stroke) - g4 (RightSB + OX) (XH - archDepth) + g4 (df.rightSB + OX) (XH - archDepth) alsoThru.g2 0.5 0.5 [widths.center ess] - g4 (SB - OX + SOBot) (archDepth) [widths.lhs stroke] + g4 (df.leftSB - OX + SOBot) (archDepth) [widths.lhs stroke] match sb - [Just SLAB-CLASSICAL] : SerifedArcEnd.LtrLhs RightSB Middle 0 stroke SHook + [Just SLAB-CLASSICAL] : SerifedArcEnd.LtrLhs df.rightSB df.middle 0 stroke SHook [Just SLAB-INWARD] : list arcvh - g4 (Middle + CorrectionOMidX * stroke) O - g4 RightSB DToothlessRise + g4 (df.middle + CorrectionOMidX * stroke) O + g4 df.rightSB DToothlessRise __ : list hookend O (sw -- stroke) (swItalicAdj -- Stroke) - g4 (RightSB + OX - SOBot) SHook + g4 (df.rightSB + OX - SOBot) SHook glyph-block-export SAutoSlabStart - define [SAutoSlabStart st top sw hook] : match st - [Just SLAB-CLASSICAL] : ArcStartSerif.R RightSB top sw hook - [Just SLAB-INWARD] : ArcStartSerif.InwardR RightSB top sw hook + define [SAutoSlabStart df st top sw hook] : match st + [Just SLAB-CLASSICAL] : ArcStartSerif.R df.rightSB top sw hook + [Just SLAB-INWARD] : ArcStartSerif.InwardR df.rightSB top sw hook __ : glyph-proc glyph-block-export SAutoSlabEnd - define [SAutoSlabEnd st bot sw hook] : match st - [Just SLAB-CLASSICAL] : ArcEndSerif.L SB bot sw hook - [Just SLAB-INWARD] : ArcEndSerif.InwardL SB bot sw hook + define [SAutoSlabEnd df st bot sw hook] : match st + [Just SLAB-CLASSICAL] : ArcEndSerif.L df.leftSB bot sw hook + [Just SLAB-INWARD] : ArcEndSerif.InwardL df.leftSB bot sw hook __ : glyph-proc - define [RevSAutoSlabStart st top sw hook] : match st - [Just SLAB-CLASSICAL] : ArcStartSerif.L SB top sw hook - [Just SLAB-INWARD] : ArcStartSerif.InwardL SB top sw hook + define [RevSAutoSlabStart df st top sw hook] : match st + [Just SLAB-CLASSICAL] : ArcStartSerif.L df.leftSB top sw hook + [Just SLAB-INWARD] : ArcStartSerif.InwardL df.leftSB top sw hook __ : glyph-proc - define [RevSAutoSlabEnd st bot sw hook] : match st - [Just SLAB-CLASSICAL] : ArcEndSerif.R RightSB bot sw hook - [Just SLAB-INWARD] : ArcEndSerif.InwardR RightSB bot sw hook + define [RevSAutoSlabEnd df st bot sw hook] : match st + [Just SLAB-CLASSICAL] : ArcEndSerif.R df.rightSB bot sw hook + [Just SLAB-INWARD] : ArcEndSerif.InwardR df.rightSB bot sw hook __ : glyph-proc define SConfig : object @@ -233,108 +224,122 @@ glyph-block Letter-Latin-S : begin bottomSerifed { SLAB-NONE SLAB-CLASSICAL } hybridSerifed1 { SLAB-INWARD SLAB-CLASSICAL } + define DfCapital : DivFrame 1 + define DfLower : DivFrame 1 + foreach { suffix { doTS doBS } } [Object.entries SConfig] : do create-glyph "S.\(suffix)" : glyph-proc + local df : include DfCapital + include : df.markSet.capital local sw : AdviceStroke2 2 3 CAP - include : MarkSet.capital - include : SStrokeImpl CAP 0 doTS doBS sw EssUpper - include : SAutoSlabStart doTS CAP sw Hook - include : SAutoSlabEnd doBS 0 sw Hook + include : SStrokeImpl df CAP 0 doTS doBS sw EssUpper + include : SAutoSlabStart df doTS CAP sw Hook + include : SAutoSlabEnd df doBS 0 sw Hook create-glyph "smcpS.\(suffix)" : glyph-proc + local df : include DfCapital + include : df.markSet.e local sw : AdviceStroke2 2 3 CAP - include : MarkSet.e - include : SStrokeImpl XH 0 doTS doBS sw EssUpper - include : SAutoSlabStart doTS XH sw Hook - include : SAutoSlabEnd doBS 0 sw Hook + include : SStrokeImpl df XH 0 doTS doBS sw EssUpper + include : SAutoSlabStart df doTS XH sw Hook + include : SAutoSlabEnd df doBS 0 sw Hook create-glyph "S/dollarKernelStd.\(suffix)" : glyph-proc + local df DfCapital set-width 0 - set-mark-anchor 'cvDecompose' Middle (CAP / 2) + set-mark-anchor 'cvDecompose' df.middle (CAP / 2) define top : CAP * 0.95 define bot : CAP * 0.05 local sw : AdviceStroke2 2 3 (top - bot) - include : SStrokeImpl top bot doTS doBS sw EssUpper - include : SAutoSlabStart doTS top sw Hook - include : SAutoSlabEnd doBS bot sw Hook + include : SStrokeImpl df top bot doTS doBS sw EssUpper + include : SAutoSlabStart df doTS top sw Hook + include : SAutoSlabEnd df doBS bot sw Hook create-glyph "S/dollarKernelCap.\(suffix)" : glyph-proc + local df DfCapital set-width 0 - set-mark-anchor 'cvDecompose' Middle (CAP / 2) + set-mark-anchor 'cvDecompose' df.middle (CAP / 2) define top : CAP * 0.88 define bot : CAP * 0.12 local sw : AdviceStroke2 2 3 (top - bot) - include : SStrokeImpl top bot doTS doBS sw EssUpper - include : SAutoSlabStart doTS top sw Hook - include : SAutoSlabEnd doBS bot sw Hook + include : SStrokeImpl df top bot doTS doBS sw EssUpper + include : SAutoSlabStart df doTS top sw Hook + include : SAutoSlabEnd df doBS bot sw Hook create-glyph "s.\(suffix)" : glyph-proc - local sw : AdviceStroke2 2 3 XH - include : MarkSet.e - include : SmallSStrokeImpl doTS doBS sw EssLower - include : SAutoSlabStart doTS XH sw Hook - include : SAutoSlabEnd doBS 0 sw Hook + local df : include DfLower + include : df.markSet.e + local sw : AdviceStroke2 2 3 XH df.div + include : SmallSStrokeImpl df doTS doBS sw EssLower + include : SAutoSlabStart df doTS XH sw Hook + include : SAutoSlabEnd df doBS 0 sw Hook create-glyph "s/phoneticRight.\(suffix)" : glyph-proc + local df : include DfLower + include : df.markSet.e local sw : AdviceStroke2 2 3 XH - include : MarkSet.e - include : SmallSStrokePhoneticRight doTS XH - include : SAutoSlabStart doTS XH sw Hook + include : SmallSStrokePhoneticRight df doTS XH + include : SAutoSlabStart df doTS XH sw Hook create-glyph "revS.\(suffix)" : glyph-proc + local df : include DfCapital + include : df.markSet.capital local sw : AdviceStroke2 2 3 CAP - include : MarkSet.capital - include : RevSStroke doTS doBS sw EssUpper - include : RevSAutoSlabStart doTS CAP sw Hook - include : RevSAutoSlabEnd doBS 0 sw Hook + include : RevSStroke df doTS doBS sw EssUpper + include : RevSAutoSlabStart df doTS CAP sw Hook + include : RevSAutoSlabEnd df doBS 0 sw Hook create-glyph "revs.\(suffix)" : glyph-proc + local df : include DfLower + include : df.markSet.e local sw : AdviceStroke2 2 3 XH - include : MarkSet.e - include : RevSmallSStroke doTS doBS sw EssLower - include : RevSAutoSlabStart doTS XH sw Hook - include : RevSAutoSlabEnd doBS 0 sw Hook - - define [UpperSBaseWithAttach] : glyph-proc - include : SAutoSlabStart doTS CAP Stroke Hook - local stroke : include : SStrokeImpl CAP 0 doTS doBS [AdviceStroke2 2 3 CAP] EssUpper + include : RevSmallSStroke df doTS doBS sw EssLower + include : RevSAutoSlabStart df doTS XH sw Hook + include : RevSAutoSlabEnd df doBS 0 sw Hook + + define [UpperSBaseWithAttach df] : glyph-proc + include : SAutoSlabStart df doTS CAP Stroke Hook + local stroke : include : SStrokeImpl df CAP 0 doTS doBS [AdviceStroke2 2 3 CAP] EssUpper return stroke.lhsKnots.(stroke.lhsKnots.length - 1) - define [LowerSBaseWithAttach] : glyph-proc - include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook - local stroke : include : SmallSStrokeImpl doTS doBS [AdviceStroke2 2 3 XH] EssLower + define [LowerSBaseWithAttach df] : glyph-proc + include : SAutoSlabStart df doTS XH [AdviceStroke2 2 3 XH] Hook + local stroke : include : SmallSStrokeImpl df doTS doBS [AdviceStroke2 2 3 XH] EssLower return stroke.lhsKnots.(stroke.lhsKnots.length - 1) if [not doBS] : create-glyph "SSwash.\(suffix)" : glyph-proc - include : MarkSet.capDesc + local df : include DfCapital + include : df.markSet.capDesc - local start : include : UpperSBaseWithAttach + local start : include : UpperSBaseWithAttach df local sw : AdviceStroke2 2 3 CAP include : dispiro widths.lhs [AdviceStroke 4.5] g4 start.x start.y alsoThru 0.15 0.6 important - flat (RightSB - 1) Descender [widths.lhs sw] - curl RightSB Descender + flat (df.rightSB - 1) Descender [widths.lhs sw] + curl df.rightSB Descender if [not doBS] : create-glyph "sSwash.\(suffix)" : glyph-proc - include : MarkSet.p + local df : include DfLower + include : df.markSet.p - local start : include : LowerSBaseWithAttach + local start : include : LowerSBaseWithAttach df local sw : AdviceStroke2 2 3 XH include : dispiro widths.lhs [AdviceStroke 4.5] g4 start.x start.y alsoThru 0.15 0.6 important - flat (RightSB - 1) Descender [widths.lhs sw] - curl RightSB Descender + flat (df.rightSB - 1) Descender [widths.lhs sw] + curl df.rightSB Descender create-glyph "sCurlyTail.\(suffix)" : glyph-proc - local sw : AdviceStroke2 2 3 XH - include : MarkSet.e - include : SmallSStrokeImpl doTS CURLY-TAIL sw EssLower + local df : include DfLower + include : df.markSet.e + local sw : AdviceStroke2 2 3 XH df.div + include : SmallSStrokeImpl df doTS CURLY-TAIL sw EssLower include : SAutoSlabStart doTS XH sw Hook include : SAutoSlabEnd doBS 0 sw Hook @@ -371,9 +376,9 @@ glyph-block Letter-Latin-S : begin derive-composites 'sRTail' 0x282 's/descBase' RetroflexHook.l SB 0 (yAttach -- DToothlessRise) (refSw -- [AdviceStroke2 2 3 XH]) derive-composites 'cyrl/gheDescender.italic' null 'revs/descBase' - CyrDescender.r RightSB 0 (yAttach -- DToothlessRise) (refSw -- [AdviceStroke2 2 3 XH]) + CyrDescender.r DfLower.rightSB 0 (yAttach -- DToothlessRise) (refSw -- [AdviceStroke2 2 3 XH]) derive-composites 'cyrl/gheDHook.italic' null 'revs/descBase' - PalatalHook.r RightSB 0 (yAttach -- DToothlessRise) (refSw -- [AdviceStroke2 2 3 XH]) + PalatalHook.r DfLower.rightSB 0 (yAttach -- DToothlessRise) (refSw -- [AdviceStroke2 2 3 XH]) derive-composites 'cyrl/ghayn.italic' null 'revs' FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75 @@ -381,7 +386,7 @@ glyph-block Letter-Latin-S : begin FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75 derive-composites 'sPalatalHook' 0x1D8A 's' : PalatalHook.r - x -- [mix (Middle + CorrectionOMidS) RightSB 0.75] + x -- [mix (Middle + CorrectionOMidS) DfLower.rightSB 0.75] y -- 0 yAttach -- [mix O [AdviceSArchDepth XH (-1) [AdviceStroke2 2 3 XH]] : archv.yFromX 0.75] @@ -389,7 +394,7 @@ glyph-block Letter-Latin-S : begin eject-contour 'arcStartSerifR' local sw : ArcStartSerifWidth [AdviceStroke2 2 3 XH] local fine : sw * [mix CThinB 1 0.6] - local hd : FlatHookDepth [DivFrame 1] + local hd : FlatHookDepth DfCapital local yStart : XH - [ArcStartSerifDepth SHook] local neckLength : 0.5 * Stroke local leftExt : 0.3 * (RightSB - SB) - [HSwToV : 0.25 * sw] @@ -407,10 +412,12 @@ glyph-block Letter-Latin-S : begin derive-composites 'sCedilla' 0x15F 's' 'cedillaExtShapeBelowSOArc' create-glyph 'mathbb/S' 0x1D54A : glyph-proc - include : MarkSet.capital + local df : include DfCapital + include : df.markSet.capital define theta : Math.PI / 4 foreach sign [items-of { 1 (-1) }] : begin include : SStrokeAlt + df -- df top -- CAP hook -- Hook swStart -- BBS * [if (sign > 0) CThin 1] @@ -431,10 +438,12 @@ glyph-block Letter-Latin-S : begin } create-glyph 'mathbb/s' 0x1D564 : glyph-proc - include : MarkSet.e + local df : include DfLower + include : df.markSet.e define theta : Math.PI / 5 foreach sign [items-of { 1 (-1) }] : begin include : SStrokeAlt + df -- df top -- XH hook -- SHook swStart -- BBS * [if (sign > 0) CThin 1] diff --git a/packages/font-glyphs/src/letter/latin/upper-j.ptl b/packages/font-glyphs/src/letter/latin/upper-j.ptl index ee13ad8ee7..014a4acbff 100644 --- a/packages/font-glyphs/src/letter/latin/upper-j.ptl +++ b/packages/font-glyphs/src/letter/latin/upper-j.ptl @@ -113,7 +113,7 @@ glyph-block Letter-Latin-Upper-J : begin "" { JFullHookBase [DivFrame 1] [DivFrame 1] } flatHook { JFlatHookBase [DivFrame 1] [DivFrame 1] } descending { JDescendingBase [DivFrame 1] [DivFrame 1] } - descendingFlatHookSerifless { JDescendingFlatHookBase [DivFrame para.diversityII] [DivFrame para.diversityI] } + descendingFlatHookSerifless { JDescendingFlatHookBase [DivFrame para.diversityI] [DivFrame para.diversityI] } descendingFlatHookSerifed { JDescendingFlatHookSerifedBase [DivFrame para.diversityI] [DivFrame para.diversityI] } function [body] : if (body == 'descendingFlatHookSerifless' || body == 'descendingFlatHookSerifed') {."" null} : object serifless null diff --git a/packages/font-glyphs/src/letter/latin/z.ptl b/packages/font-glyphs/src/letter/latin/z.ptl index 72a5b06a2a..d4559d86b7 100644 --- a/packages/font-glyphs/src/letter/latin/z.ptl +++ b/packages/font-glyphs/src/letter/latin/z.ptl @@ -1,7 +1,7 @@ $$include '../../meta/macros.ptl' import [mix SuffixCfg fallback] from "@iosevka/util" -import [CvDecompose MathSansSerif] from "@iosevka/glyph/relation" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -84,8 +84,8 @@ glyph-block Letter-Latin-Z : begin corner SB 0 corner (-Width) 0 corner (-Width) (2 * top) - corner (RightSB - xDiagWidth) (2 * top) - corner (RightSB - xDiagWidth) (top - yFootHeight) + corner (RightSB - xDiagWidth + 0.1) (2 * top) + corner (RightSB - xDiagWidth + 0.1) (top - yFootHeight) dispiro flat (SB + OX) (top - yHookDepth) [widths.rhs.heading hookTerminalWidth Upward] curl (SB + OX) (top - yHookDepth + yHookStraightDepth) [heading Upward] @@ -97,7 +97,7 @@ glyph-block Letter-Latin-Z : begin include : dispiro corner RightSB (top - yFootHeight) [widths.rhs (Stroke / HVContrast)] corner SB [if (mode == MODE-ZSWASH) 0 yFootHeight] [widths.lhs (Stroke / HVContrast)] - + include : VBar.r RightSB top (top - yFootHeight) (xDiagWidth / HVContrast) if (mode != MODE-ZSWASH) : include : VBar.l SB 0 yFootHeight (xDiagWidth / HVContrast) @@ -120,8 +120,8 @@ glyph-block Letter-Latin-Z : begin ([Just MODE-ZDESC] || [Just MODE-ZSWASH]) : no-shape __ : intersection spiro-outline - corner (SB + xDiagWidth) yFootHeight - corner (SB + xDiagWidth) (-top) + corner (SB + xDiagWidth - 0.1) yFootHeight + corner (SB + xDiagWidth - 0.1) (-top) corner (2 * Width) (-top) corner (2 * Width) (top) corner RightSB top diff --git a/packages/font-glyphs/src/meta/aesthetics.ptl b/packages/font-glyphs/src/meta/aesthetics.ptl index 0de4059fd1..b546cf30de 100644 --- a/packages/font-glyphs/src/meta/aesthetics.ptl +++ b/packages/font-glyphs/src/meta/aesthetics.ptl @@ -44,7 +44,7 @@ export : define [calculateMetrics para] : begin define [Rotate angle] : new Transform [Math.cos angle] (-[Math.sin angle]) [Math.sin angle] [Math.cos angle] 0 0 define GlobalTransform : Italify para.slopeAngle - define TanSlope GlobalTransform.yx + define TanSlope GlobalTransform.xy define SinSlope : Math.sin (para.slopeAngle / 180 * Math.PI) define CosSlope : Math.cos (para.slopeAngle / 180 * Math.PI) define HVContrast : Contrast * CosSlope + SinSlope * TanSlope @@ -317,8 +317,8 @@ define [MarksetDiv p sbMul me] : begin define leftSB me.SB define rightSB : me.Width * p - me.SB define [ta anchor] : return : new Anchor - * (anchor.x * me.GlobalTransform.xx + anchor.y * me.TanSlope + me.GlobalTransform.x) - * (anchor.x * me.GlobalTransform.xy + anchor.y * me.GlobalTransform.yy + me.GlobalTransform.y) + me.GlobalTransform.applyX anchor.x anchor.y + me.GlobalTransform.applyY anchor.x anchor.y define [MarkAbove zone] {.baseAnchors {.above [ta : new Anchor middle zone.top]}} define [MarkBelow zone] {.baseAnchors {.below [ta : new Anchor middle zone.bot]}} diff --git a/packages/font-glyphs/src/number/1.ptl b/packages/font-glyphs/src/number/1.ptl index 4daa855855..8517ac2e94 100644 --- a/packages/font-glyphs/src/number/1.ptl +++ b/packages/font-glyphs/src/number/1.ptl @@ -62,6 +62,7 @@ glyph-block Digits-One : begin select-variant 'one.lnum' [CodeLnum '1'] (follow -- 'one') select-variant 'one.onum' [CodeOnum '1'] (follow -- 'one') + link-reduced-variant 'one/sansSerif.lnum' 'one.lnum' MathSansSerif (follow -- 'one/sansSerif') link-reduced-variant 'one/sansSerif.onum' 'one.onum' MathSansSerif (follow -- 'one/sansSerif') diff --git a/packages/font-glyphs/src/number/2.ptl b/packages/font-glyphs/src/number/2.ptl index 73bbb76217..ed733039dd 100644 --- a/packages/font-glyphs/src/number/2.ptl +++ b/packages/font-glyphs/src/number/2.ptl @@ -1,6 +1,7 @@ $$include '../meta/macros.ptl' import [mix linreg clamp fallback] from "@iosevka/util" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -34,38 +35,58 @@ glyph-block Digits-Two : begin flat (SB - offset) 1 [widths.heading sw 0 Downward] curl (SB - offset) 0 [heading Downward] - define [TwoShape top] : glyph-proc + define [TwoShape top slab] : glyph-proc include : TwoArcShapeT dispiro 0 Stroke top include : HBar.b (SB + HalfStroke) RightSB 0 - if SLAB : begin + if slab : begin include : VSerif.ur RightSB 0 VJut - define [TwoStraightNeckShape top] : glyph-proc + define [TwoStraightNeckShape top slab] : glyph-proc include : TwoStraightNeckArcT dispiro 0 Stroke top include : HBar.b SB RightSB 0 - if SLAB : begin + if slab : begin include : VSerif.ur RightSB 0 VJut - create-glyph 'two.lnum.straightNeck' : glyph-proc + create-glyph 'two.lnum.straightNeckSerifless' : glyph-proc include : MarkSet.capital - include : TwoStraightNeckShape CAP + include : TwoStraightNeckShape CAP false - create-glyph 'two.onum.straightNeck' : glyph-proc + create-glyph 'two.onum.straightNeckSerifless' : glyph-proc include : OnumMarks.e - include : TwoStraightNeckShape OnumHeight + include : TwoStraightNeckShape OnumHeight false - create-glyph 'two.lnum.curlyNeck' : glyph-proc + create-glyph 'two.lnum.straightNeckSerifed' : glyph-proc include : MarkSet.capital - include : TwoShape CAP + include : TwoStraightNeckShape CAP true - create-glyph 'two.onum.curlyNeck' : glyph-proc + create-glyph 'two.onum.straightNeckSerifed' : glyph-proc include : OnumMarks.e - include : TwoShape OnumHeight + include : TwoStraightNeckShape OnumHeight true + + create-glyph 'two.lnum.curlyNeckSerifless' : glyph-proc + include : MarkSet.capital + include : TwoShape CAP false + + create-glyph 'two.onum.curlyNeckSerifless' : glyph-proc + include : OnumMarks.e + include : TwoShape OnumHeight false + + create-glyph 'two.lnum.curlyNeckSerifed' : glyph-proc + include : MarkSet.capital + include : TwoShape CAP true + + create-glyph 'two.onum.curlyNeckSerifed' : glyph-proc + include : OnumMarks.e + include : TwoShape OnumHeight true select-variant 'two.lnum' [CodeLnum '2'] (follow -- 'two') select-variant 'two.onum' [CodeOnum '2'] (follow -- 'two') + turned 'turnDigitTwo' 0x218A 'two.lnum' Middle (CAP / 2) + link-reduced-variant 'two/sansSerif.lnum' 'two.lnum' MathSansSerif (follow -- 'two/sansSerif') + link-reduced-variant 'two/sansSerif.onum' 'two.onum' MathSansSerif (follow -- 'two/sansSerif') + glyph-block-import Letter-Blackboard : BBS BBD create-glyph 'mathbb/two' 0x1D7DA : glyph-proc include : MarkSet.capital diff --git a/packages/font-glyphs/src/number/3.ptl b/packages/font-glyphs/src/number/3.ptl index facd8aae36..16c1585750 100644 --- a/packages/font-glyphs/src/number/3.ptl +++ b/packages/font-glyphs/src/number/3.ptl @@ -1,6 +1,7 @@ $$include '../meta/macros.ptl' import [mix linreg clamp fallback] from "@iosevka/util" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -35,16 +36,23 @@ glyph-block Digits-Three : begin create-glyph 'three.lnum.twoArcs' : glyph-proc include : MarkSet.capital include : ThreeShape CAP - create-glyph 'three.lnum.flatTop' : glyph-proc + create-glyph 'three.lnum.flatTopSerifless' : glyph-proc include : MarkSet.capital - include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) + include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) (isSerifed -- false) + create-glyph 'three.lnum.flatTopSerifed' : glyph-proc + include : MarkSet.capital + include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) (isSerifed -- true) create-glyph 'three.onum.twoArcs' : glyph-proc include : OnumMarks.p include : ThreeShape CAP include : ShiftDown - create-glyph 'three.onum.flatTop' : glyph-proc + create-glyph 'three.onum.flatTopSerifless' : glyph-proc + include : OnumMarks.p + include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) (isSerifed -- false) + include : ShiftDown + create-glyph 'three.onum.flatTopSerifed' : glyph-proc include : OnumMarks.p - include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) + include : EzhShape CAP 0 (pLeft -- 0.25) (pRight -- 0.975) (isSerifed -- true) include : ShiftDown select-variant 'three.lnum' [CodeLnum '3'] (follow -- 'three') @@ -52,6 +60,9 @@ glyph-block Digits-Three : begin turned 'turnDigitThree' 0x218B 'three.lnum' Middle (CAP / 2) + link-reduced-variant 'three/sansSerif.lnum' 'three.lnum' MathSansSerif (follow -- 'three/sansSerif') + link-reduced-variant 'three/sansSerif.onum' 'three.onum' MathSansSerif (follow -- 'three/sansSerif') + glyph-block-import Letter-Blackboard : BBS BBD create-glyph 'mathbb/three' 0x1D7DB : glyph-proc include : MarkSet.capital diff --git a/packages/font-glyphs/src/number/4.ptl b/packages/font-glyphs/src/number/4.ptl index 2c6b4fe3df..eaa560ead8 100644 --- a/packages/font-glyphs/src/number/4.ptl +++ b/packages/font-glyphs/src/number/4.ptl @@ -1,6 +1,7 @@ $$include '../meta/macros.ptl' -import [mix linreg clamp fallback] from "@iosevka/util" +import [mix linreg clamp fallback SuffixCfg] from "@iosevka/util" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -9,7 +10,7 @@ glyph-block Digits-Four : begin glyph-block-import Common-Derivatives glyph-block-import Digits-Shared : OnumMarks ShiftDown CodeLnum CodeOnum - define [FourStdShape] : with-params [top open crossing [fine : AdviceStroke 3] [sw Stroke] [bbd 0]] : glyph-proc + define [FourStdShape] : with-params [top open crossing [fine : AdviceStroke 3] [sw Stroke] [bbd 0] [slab SLAB]] : glyph-proc local yBar : top * 0.3 + 0.625 * sw define xVertBar : [mix SB RightSB : if crossing 0.75 0.9125] - (bbd * 0.75) + [if crossing [HSwToV : 0.375 * sw] 0] @@ -35,10 +36,16 @@ glyph-block Digits-Four : begin include : VBar.r (xVertBar + bbd) 0 yVertBarTop sw include : HBar.t xVertBar (xVertBar + bbd) CAP sw include : HBar.b xVertBar (xVertBar + bbd) 0 sw - if (!bbd && SLAB) : begin + if (!bbd && slab) : begin include : HSerif.mb (xVertBar - [HSwToV HalfStroke]) 0 Jut - define [FourOpenShape top crossing] : glyph-proc + define [FourClosedShape top crossing slab] : begin + return : FourStdShape top false crossing (slab -- slab) + + define [FourSemiOpenShape top crossing slab] : begin + return : FourStdShape top true crossing (fine -- [AdviceStroke 2.75]) (slab -- slab) + + define [FourOpenShape top crossing slab] : glyph-proc local yBar (top * 0.4) local fine : AdviceStroke 3 @@ -48,66 +55,37 @@ glyph-block Digits-Four : begin include : HBar.t SB xHBarTerminal yBar include : VBar.r xVertBar 0 [mix (yBar - Stroke) top 0.75] include : VBar.l SB yBar top - if SLAB : begin + if slab : begin include : HSerif.mb (xVertBar - [HSwToV HalfStroke]) 0 Jut - create-glyph 'four.lnum.closed' : glyph-proc - include : MarkSet.capital - include : FourStdShape CAP false true - - create-glyph 'four.lnum.closedNonCrossing' : glyph-proc - include : MarkSet.capital - include : FourStdShape CAP false false - - create-glyph 'four.lnum.semiOpen' : glyph-proc - include : MarkSet.capital - include : FourStdShape CAP true true (fine -- [AdviceStroke 2.75]) - - create-glyph 'four.lnum.semiOpenNonCrossing' : glyph-proc - include : MarkSet.capital - include : FourStdShape CAP true false (fine -- [AdviceStroke 2.75]) - - create-glyph 'four.lnum.open' : glyph-proc - include : MarkSet.capital - include : FourOpenShape CAP true - - create-glyph 'four.lnum.openNonCrossing' : glyph-proc - include : MarkSet.capital - include : FourOpenShape CAP false - - create-glyph 'four.onum.closed' : glyph-proc - include : OnumMarks.p - include : FourStdShape CAP false true - include : ShiftDown - - create-glyph 'four.onum.closedNonCrossing' : glyph-proc - include : OnumMarks.p - include : FourStdShape CAP false false - include : ShiftDown - - create-glyph 'four.onum.semiOpen' : glyph-proc - include : OnumMarks.p - include : FourStdShape CAP true true - include : ShiftDown - - create-glyph 'four.onum.semiOpenNonCrossing' : glyph-proc - include : OnumMarks.p - include : FourStdShape CAP true false - include : ShiftDown - - create-glyph 'four.onum.open' : glyph-proc - include : OnumMarks.p - include : FourOpenShape CAP true - include : ShiftDown - - create-glyph 'four.onum.openNonCrossing' : glyph-proc - include : OnumMarks.p - include : FourOpenShape CAP false - include : ShiftDown + define FourConfig : SuffixCfg.weave + object # body + "closed" FourClosedShape + "semiOpen" FourSemiOpenShape + "open" FourOpenShape + object # crossing + "nonCrossing" false + "crossing" true + object # slab + "serifless" false + "serifed" true + + foreach { suffix { body crossing slab } } [pairs-of FourConfig] : do + create-glyph "four.lnum.\(suffix)" : glyph-proc + include : MarkSet.capital + include : body CAP crossing slab + + create-glyph "four.onum.\(suffix)" : glyph-proc + include : OnumMarks.p + include : body CAP crossing slab + include : ShiftDown select-variant 'four.lnum' [CodeLnum '4'] (follow -- 'four') select-variant 'four.onum' [CodeOnum '4'] (follow -- 'four') + link-reduced-variant 'four/sansSerif.lnum' 'four.lnum' MathSansSerif (follow -- 'four/sansSerif') + link-reduced-variant 'four/sansSerif.onum' 'four.onum' MathSansSerif (follow -- 'four/sansSerif') + glyph-block-import Letter-Blackboard : BBS BBD BBBarCenter create-glyph 'mathbb/four' 0x1D7DC : glyph-proc include : MarkSet.capital diff --git a/packages/font-glyphs/src/number/5.ptl b/packages/font-glyphs/src/number/5.ptl index 429457111b..7e26c533fe 100644 --- a/packages/font-glyphs/src/number/5.ptl +++ b/packages/font-glyphs/src/number/5.ptl @@ -1,6 +1,7 @@ $$include '../meta/macros.ptl' import [mix linreg clamp fallback SuffixCfg] from "@iosevka/util" +import [MathSansSerif] from "@iosevka/glyph/relation" glyph-module @@ -35,7 +36,7 @@ glyph-block Digits-Five : begin define [FiveShape] : with-params [ top bp pBarPosSwAdj [sw Stroke] [bbd 0] [obl 0] [zt 0] - [bottomShape FiveArcStroke] [pXLeft 0.025] + [bottomShape FiveArcStroke] [pXLeft 0.025] [slab SLAB] ] : glyph-proc local t1 : (top * bp + sw * pBarPosSwAdj) * 0.8 local t2 : (top * bp + sw * pBarPosSwAdj) * 1.0 @@ -67,7 +68,7 @@ glyph-block Digits-Five : begin Rect (t2 / 2 + t2 * kGap) (t2 / 2 - t2 * kGap) 0 Middle - if (!bbd && SLAB) : include : VSerif.dr xRight top [Math.min VJut ((top - t2) * 0.8)] + if (!bbd && slab) : include : VSerif.dr xRight top [Math.min VJut ((top - t2) * 0.8)] define FiveConfig : SuffixCfg.weave object # upper-left-bar @@ -76,27 +77,34 @@ glyph-block Digits-Five : begin object # middle "arched" { FiveArcStroke DesignParameters.fiveBarPos 0 0.025 } "flat" { FiveFlatStroke (7 / 8 * DesignParameters.fiveBarPos) (1/3) 0.05 } + object # serifs + "serifless" false + "serifed" true - foreach { suffix { obl { bottomShape pBarPos pBarPosSwAdj pXLeft } } } [pairs-of FiveConfig] : do + foreach { suffix { obl { bottomShape pBarPos pBarPosSwAdj pXLeft } slab } } [pairs-of FiveConfig] : do create-glyph "five.lnum.\(suffix)" : glyph-proc include : MarkSet.capital - include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (obl -- obl) (pXLeft -- pXLeft) + include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (obl -- obl) (pXLeft -- pXLeft) (slab -- slab) create-glyph "five.onum.\(suffix)" : glyph-proc include : OnumMarks.p - include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (obl -- obl) (pXLeft -- pXLeft) + include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (obl -- obl) (pXLeft -- pXLeft) (slab -- slab) include : ShiftDown create-glyph "zhuangToneFive.\(suffix)" : glyph-proc include : MarkSet.capital - include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (zt -- ((RightSB - SB) * 0.05)) (pXLeft -- pXLeft) + include : FiveShape CAP pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (zt -- ((RightSB - SB) * 0.05)) (pXLeft -- pXLeft) (slab -- slab) create-glyph "zhuangtonefive.\(suffix)" : glyph-proc include : MarkSet.e - include : FiveShape XH pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (zt -- ((RightSB - SB) * 0.05)) (pXLeft -- pXLeft) + include : FiveShape XH pBarPos pBarPosSwAdj (bottomShape -- bottomShape) (zt -- ((RightSB - SB) * 0.05)) (pXLeft -- pXLeft) (slab -- slab) select-variant 'five.lnum' [CodeLnum '5'] (follow -- 'five') select-variant 'five.onum' [CodeOnum '5'] (follow -- 'five') + + link-reduced-variant 'five/sansSerif.lnum' 'five.lnum' MathSansSerif (follow -- 'five/sansSerif') + link-reduced-variant 'five/sansSerif.onum' 'five.onum' MathSansSerif (follow -- 'five/sansSerif') + select-variant 'zhuangToneFive' 0x1BC select-variant 'zhuangtonefive' 0x1BD (follow -- 'zhuangToneFive') diff --git a/packages/font-glyphs/src/symbol/arrow.ptl b/packages/font-glyphs/src/symbol/arrow.ptl index 075c2f7846..e9849bcda1 100644 --- a/packages/font-glyphs/src/symbol/arrow.ptl +++ b/packages/font-glyphs/src/symbol/arrow.ptl @@ -37,9 +37,9 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define arrowDiagBot : mix arrowMidX arrowBot diagPropY define arrowDiagTop : mix arrowMidX arrowTop diagPropY - define [ArrowBar x1 y1 x2 y2 halfSw w] : begin + define [ArrowBar x1 y1 x2 y2 halfSw w _offset] : begin return : PointingTo x1 y1 x2 y2 : lambda [mag] : begin - local p : (mag - o - halfSw * [fallback w 1.1]) / mag + local p : (mag - [fallback _offset : o + halfSw * [fallback w 1.1]]) / mag dispiro widths.center (halfSw * 2) flat (mag * (1 - p)) 0 @@ -162,10 +162,39 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 corner length (width - o) corner length (-width + o) + define [TriangleArrowHeadBar x1 y1 x2 y2 width sw _length] : begin + local length : fallback _length width + return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : intersection + spiro-outline + corner o 0 + corner length (width - o) + corner length (-width + o) + Rect width (-width) (0.6 * length - 0.5 * sw) (0.6 * length + 0.5 * sw) + + define [RectangleArrowTail x1 y1 x2 y2 width _length _width2] : begin + local length : fallback _length width + return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : Rect width (-[fallback _width2 width]) 0 length + define [ArrowShape x1 y1 x2 y2 size] : glyph-proc include : ArrowHead x1 y1 x2 y2 size include : ArrowBar x1 y1 x2 y2 halfArrowSw + define [ArrowTailBarShape x1 y1 x2 y2 size sw] : begin + return : PointingTo x1 y1 x2 y2 : lambda [mag] : begin + dispiro + widths.rhs sw + flat mag size + curl mag (-size) + + define [ArrowFromBarShape x1 y1 x2 y2 size] : glyph-proc + local width : Math.abs (x1 - x2) + local height : Math.abs (y1 - y2) + local barShrink : size * [Math.min (width / height) (height / width)] + local p : barShrink / [Math.hypot width height] + include : ArrowHead x1 y1 x2 y2 size + include : ArrowBar [mix x1 x2 p] [mix y1 y2 p] x2 y2 halfArrowSw + include : ArrowTailBarShape [mix x1 x2 p] [mix y1 y2 p] x2 y2 size fine + define [ThinArrowShape x1 y1 x2 y2 size] : glyph-proc include : ArrowHead x1 y1 x2 y2 size include : ArrowBar x1 y1 x2 y2 (0.5 * [mix fine terminal 0.5]) @@ -228,15 +257,27 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 local headLen : MosaicUnitWidth * [Math.sqrt MosaicWidthScalar] * 0.4 local halfBarWidth : headLen / 3 local headWidth : halfBarWidth * 2 - local fine : Math.min [AdviceStroke 5] (halfBarWidth * 0.6) + + local turnWidth : headWidth * 1.5 + local barLen : headLen * 0.2 + fine * 2 + local dotGap : barLen - fine * 2 + local doubleHeadOffset : headLen * 0.4 + local whiteDoubleHeadOffset : headLen * 0.4 + 0.75 * fine + local mag : Math.hypot (y2 - y1) (x2 - x1) local p : (mag - fine) / mag local p2 : (mag - fine * [Math.sqrt 13] / 2) / mag local innerHeaderLengthShrink : fine * (1 + [Math.sqrt 13] / 2) + local p3 : (mag - doubleHeadOffset) / mag + local p4 : (mag - fine * [Math.sqrt 13] / 2 - doubleHeadOffset) / mag + local p3WD : (mag - whiteDoubleHeadOffset) / mag + local p4WD : (mag - fine * [Math.sqrt 13] / 2 - whiteDoubleHeadOffset) / mag local x1a : mix x1 x2 (1 - p) local y1a : mix y1 y2 (1 - p) + local x2FlatA : mix x1 x2 p + local y2FlatA : mix y1 y2 p local x2a : mix x1 x2 p2 local y2a : mix y1 y2 p2 local x1CoA : mix x1 x2 (-0.05) @@ -259,6 +300,55 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 + [Just "white-closing"] : difference + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0 0 + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0 0 + + [Just "whiteDouble"] : difference + union + difference + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + TriangleArrowHead x1a y1a x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + TriangleArrowHead x1 y1 [mix x1 x2 p3WD] [mix y1 y2 p3WD] headWidth headLen + ArrowBar x1 y1 [mix x1 x2 p3WD] [mix y1 y2 p3WD] (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1a y1a [mix x1 x2 p4WD] [mix y1 y2 p4WD] (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1CoA y1CoA [mix x1 x2 p4WD] [mix y1 y2 p4WD] (halfBarWidth - fine / 2) 2 + + [Just "whiteBarred"] : union + difference + union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 + TriangleArrowHeadBar x1 y1 x2 y2 headWidth fine headLen + + [Just "whiteDot"] : difference + union + RectangleArrowTail x1 y1 x2 y2 (halfBarWidth + fine / 2) barLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0 (barLen + dotGap) + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (halfBarWidth - fine / 2) (barLen - fine * 2) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0 (barLen + dotGap) + + [Just "whiteRect"] : difference + union + RectangleArrowTail x1 y1 x2 y2 headWidth barLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0.5 + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (headWidth - fine) (barLen - fine * 2) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0.5 + + [Just "whiteLeftTurn"] : difference + union + RectangleArrowTail x1 y1 x2 y2 (halfBarWidth + fine / 2) (halfBarWidth * 2 + fine * 1.5) turnWidth + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 1 + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (halfBarWidth - fine / 2) (halfBarWidth * 2 - fine / 2) (turnWidth - fine) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 1 + [Just "black"] : union TriangleArrowHead x1 y1 x2 y2 headWidth headLen ArrowBar x1 y1 x2 y2 halfBarWidth 2 @@ -756,6 +846,15 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 DoubleArrow [ThickArrowShape 'white-open'] [MangleName 'uni2B04'] [MangleUnicode 0x2B04] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow [ThickArrowShape 'white-open'] [MangleName 'uni21F3'] [MangleUnicode 0x21F3] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteDot'] [ThickArrowShape 'white-open'] [MangleName 'uni21EA'] [MangleUnicode 0x21EA] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'white-open'] [MangleName 'uni21EB'] [MangleUnicode 0x21EB] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'whiteBarred'] [MangleName 'uni21EC'] [MangleUnicode 0x21EC] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'white-closing'] [ThickArrowShape 'whiteDouble'] [MangleName 'uni21EE'] [MangleUnicode 0x21EE] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'whiteDouble'] [MangleName 'uni21EF'] [MangleUnicode 0x21EF] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'white-open'] [MangleName 'uni21F0'] [MangleUnicode 0x21F0] arrowSB SymbolMid arrowRSB SymbolMid + DoubleArrow2 [ThickArrowShape 'whiteDot'] [ThickArrowShape 'whiteBarred'] [MangleName 'uni2BB8'] [MangleUnicode 0x2BB8] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteLeftTurn'] [ThickArrowShape 'white-open'] [MangleName 'uni23CE'] [MangleUnicode 0x23CE] arrowRSB SymbolMid arrowSB SymbolMid + MkArrow [ThickArrowShape 'black'] [MangleName 'uni2B05'] [MangleUnicode 0x2B05] arrowRSB SymbolMid arrowSB SymbolMid MkArrow [ThickArrowShape 'black'] [MangleName 'uni2B06'] [MangleUnicode 0x2B06] arrowMidX arrowBot arrowMidX arrowTop MkArrow [ThickArrowShape 'black'] [MangleName 'uni27A1'] [MangleUnicode 0x27A1] arrowSB SymbolMid arrowRSB SymbolMid @@ -768,6 +867,12 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0C'] [MangleUnicode 0x2B0C] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0D'] [MangleUnicode 0x2B0D] arrowMidX arrowBot arrowMidX arrowTop + create-glyph [MangleName 'uni21ED'] [MangleUnicode 0x21ED] : composite-proc + refer-glyph : MangleName 'uni21EB' + intersection + refer-glyph : MangleName 'uni2B06' + Rect arrowTop arrowBot (arrowMidX - [AdviceStroke 5] / 2) (arrowMidX + [AdviceStroke 5] / 2) + MkArrow [ThickArrowShape 'blackSemiHookL'] [MangleName 'uni27A5'] [MangleUnicode 0x27A5] arrowSB SymbolMid arrowRSB SymbolMid MkArrow [ThickArrowShape 'blackSemiHookR'] [MangleName 'uni27A6'] [MangleUnicode 0x27A6] arrowSB SymbolMid arrowRSB SymbolMid @@ -844,12 +949,18 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 MkArrow ArrowShape [MangleName 'arrowRightK'] null arrowSB SymbolMid (arrowRSB - fine) SymbolMid MkArrow ArrowShape [MangleName 'arrowUpK'] null arrowMidX arrowBot arrowMidX (arrowTop - fine) MkArrow ArrowShape [MangleName 'arrowDownK'] null arrowMidX arrowTop arrowMidX (arrowBot + fine) - MkArrow ArrowShape [MangleName 'arrowLeftSK'] null (arrowRSB - fine / 2) SymbolMid arrowSB SymbolMid - MkArrow ArrowShape [MangleName 'arrowRightSK'] null (arrowSB + fine / 2) SymbolMid arrowRSB SymbolMid - MkArrow ArrowShape [MangleName 'arrowUpSK'] null arrowMidX (arrowBot + fine / 2) arrowMidX arrowTop - MkArrow ArrowShape [MangleName 'arrowDownSK'] null arrowMidX (arrowTop - fine / 2) arrowMidX arrowBot + MkArrow [ThickArrowShape 'black'] [MangleName 'blackArrowDownK'] null arrowMidX arrowTop arrowMidX (arrowBot + fine) MkArrow ArrowShape [MangleName 'arrowUpLeftTK'] null arrowRSB arrowBot arrowSB (arrowTop - [Math.max (arrowWidth / 8) (fine * 1.5)]) + MkArrow ArrowFromBarShape [MangleName 'barArrowLeft'] [MangleUnicode 0x21A4] arrowRSB SymbolMid arrowSB SymbolMid + MkArrow ArrowFromBarShape [MangleName 'barArrowUp'] [MangleUnicode 0x21A5] arrowMidX arrowBot arrowMidX arrowTop + MkArrow ArrowFromBarShape [MangleName 'barArrowRight'] [MangleUnicode 0x21A6] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow ArrowFromBarShape [MangleName 'barArrowDown'] [MangleUnicode 0x21A7] arrowMidX arrowTop arrowMidX arrowBot + MkArrow ArrowFromBarShape [MangleName 'barArrowUpLeft'] [MangleUnicode 0x1F8B8] arrowDiagRSB arrowDiagBot arrowDiagSB arrowDiagTop + MkArrow ArrowFromBarShape [MangleName 'barArrowUpRight'] [MangleUnicode 0x1F8B9] arrowDiagSB arrowDiagBot arrowDiagRSB arrowDiagTop + MkArrow ArrowFromBarShape [MangleName 'barArrowDownRight'] [MangleUnicode 0x1F8BA] arrowDiagSB arrowDiagTop arrowDiagRSB arrowDiagBot + MkArrow ArrowFromBarShape [MangleName 'barArrowDownLeft'] [MangleUnicode 0x1F8BB] arrowDiagRSB arrowDiagTop arrowDiagSB arrowDiagBot + create-glyph [MangleName 'arrowBarLeft'] [MangleUnicode 0x21E4] : composite-proc refer-glyph : MangleName 'arrowLeftK' VBar.m arrowSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine @@ -862,18 +973,9 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 create-glyph [MangleName 'arrowBarDown'] [MangleUnicode 0x2913] : composite-proc refer-glyph : MangleName 'arrowDownK' HBar.m (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowBot fine - create-glyph [MangleName 'barArrowLeft'] [MangleUnicode 0x21A4] : composite-proc - refer-glyph : MangleName 'arrowLeftSK' - VBar.m arrowRSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine - create-glyph [MangleName 'barArrowRight'] [MangleUnicode 0x21A6] : composite-proc - refer-glyph : MangleName 'arrowRightSK' - VBar.m arrowSB (SymbolMid - arrowHeadSize) (SymbolMid + arrowHeadSize) fine - create-glyph [MangleName 'barArrowUp'] [MangleUnicode 0x21A5] : composite-proc - refer-glyph : MangleName 'arrowUpSK' + create-glyph [MangleName 'blackArrowBarDown'] [MangleUnicode 0x1F8B3] : composite-proc + refer-glyph : MangleName 'blackArrowDownK' HBar.m (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowBot fine - create-glyph [MangleName 'barArrowDown'] [MangleUnicode 0x21A7] : composite-proc - refer-glyph : MangleName 'arrowDownSK' - HBar.m (arrowMidX - arrowHeadSize) (arrowMidX + arrowHeadSize) arrowTop fine MkArrow [HalfArrowShape RHSHalfArrowHead] [MangleName 'arrowLeftHRK'] null arrowRSB SymbolMid (arrowSB + fine) SymbolMid MkArrow [HalfArrowShape LHSHalfArrowHead] [MangleName 'arrowLeftHLK'] null arrowRSB SymbolMid (arrowSB + fine) SymbolMid @@ -1220,7 +1322,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 include : union TriangleArrowHead x3ArrowHeadMock y3 x4 y4 arrowHeadSize ZigZagArrowBar - + do "Lightning" define x1 : mix arrowMidX arrowRSB (0.875 / [Math.sqrt MosaicWidthScalar]) define x2 : mix arrowMidX arrowSB (0.875 / [Math.sqrt MosaicWidthScalar]) diff --git a/packages/font-glyphs/src/symbol/geometric.ptl b/packages/font-glyphs/src/symbol/geometric.ptl index 5196010741..e4a516d3b4 100644 --- a/packages/font-glyphs/src/symbol/geometric.ptl +++ b/packages/font-glyphs/src/symbol/geometric.ptl @@ -12,3 +12,4 @@ export : define [apply] : begin run-glyph-module "./geometric/masked.mjs" run-glyph-module "./geometric/ballot-box.mjs" run-glyph-module "./geometric/corner-shape.mjs" + run-glyph-module "./geometric/square-corners.mjs" diff --git a/packages/font-glyphs/src/symbol/geometric/masked.ptl b/packages/font-glyphs/src/symbol/geometric/masked.ptl index 915f9b2aff..67ec798cea 100644 --- a/packages/font-glyphs/src/symbol/geometric/masked.ptl +++ b/packages/font-glyphs/src/symbol/geometric/masked.ptl @@ -210,6 +210,18 @@ glyph-block Symbol-Geometric-Masked : for-width-kinds WideWidth1 if T [VBar.m Geom.MidX (Geom.MidY + Geom.Size - hv) (Geom.MidY - hv) s] [glyph-proc] if B [VBar.m Geom.MidX (Geom.MidY - Geom.Size + hv) (Geom.MidY + hv) s] [glyph-proc] + do "Three-Dimensional Arrow head" + define arrowHeadParts : list + list 0x27A2 0 1 + list 0x27A3 1 0 + + foreach { u th bh } [items-of arrowHeadParts] : begin + create-glyph [MangleName : NameUni u] [MangleUnicode u] : glyph-proc + set-width Geom.Width + include [refer-glyph : MangleName 'whiteArrowHeadRight'] + if th : include : intersection [UpperHalfMask] [refer-glyph : MangleName 'blackArrowHeadRight'] + if bh : include : intersection [LowerHalfMask] [refer-glyph : MangleName 'blackArrowHeadRight'] + do "Diamond minus white X" create-glyph [MangleName "blackDiamondMinusWhiteX"] [MangleUnicode 0x2756] : glyph-proc set-width Geom.Width diff --git a/packages/font-glyphs/src/symbol/geometric/plain.ptl b/packages/font-glyphs/src/symbol/geometric/plain.ptl index 02593460c3..3bbd51f5ec 100644 --- a/packages/font-glyphs/src/symbol/geometric/plain.ptl +++ b/packages/font-glyphs/src/symbol/geometric/plain.ptl @@ -47,7 +47,7 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 begin 0 local outlines : glyph-proc : begin set this.gizmo : Translate 0 0 - foreach c [items-of : sh.geometry.asContours] : foreach j [range 0 c.length] : begin + foreach c [items-of : sh.geometry.toContours] : foreach j [range 0 c.length] : begin local a c.[if j (j - 1) (c.length - 1)] local b c.(j) include : dispiro @@ -201,14 +201,6 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 StdBlackShape TriangleRTFill 'blackTriangleRT' 0x25E5 ConvexWhitePolygon TriangleRTFill 'whiteTriangleRT' 0x25F9 - create-glyph [MangleName 'squareCorners'] [MangleUnicode 0x26F6] : glyph-proc - set-width Geom.Width - include : difference - refer-glyph : MangleName 'whiteSquare' - union - intersection [MaskBelow (Geom.MidY + Geom.Size / 3)] [MaskAbove (Geom.MidY - Geom.Size / 3)] - intersection [MaskLeft (Geom.MidX + Geom.Size / 3)] [MaskRight (Geom.MidX - Geom.Size / 3)] - define [SquareOverlap name unicode rev square1 square2] : begin create-glyph [MangleName name] [MangleUnicode unicode] : glyph-proc set-width Geom.Width @@ -217,7 +209,7 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 local offsetY : space * 0.45 include : union with-transform [Translate (-offsetX) (-offsetY)] : refer-glyph : MangleName [if square1 'blackMediumSquare' 'whiteMediumSquare'] - with-transform [Translate offsetX offsetY] : refer-glyph : MangleName [if square2 'blackMediumSquare' 'whiteMediumSquare'] + with-transform [Translate offsetX offsetY] : refer-glyph : MangleName [if square2 'blackMediumSquare' 'whiteMediumSquare'] SquareOverlap 'overlapWWSquareRev' 0x29C9 1 0 0 SquareOverlap 'overlapWWSquare' 0x2BBA 0 0 0 @@ -225,25 +217,28 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 SquareOverlap 'overlapBBSquare' 0x2BBC 0 1 1 do "Rectangle" - define [RectangleFill cx cy r] : spiro-outline + define [HoriRectangleFill cx cy r] : spiro-outline corner (cx - r) (cy + r / 1.5) corner (cx + r) (cy + r / 1.5) corner (cx + r) (cy - r / 1.5) corner (cx - r) (cy - r / 1.5) - StdBlackShape RectangleFill 'blackRectangle' 0x25AC - ConvexWhitePolygon RectangleFill 'whiteRectangle' 0x25AD + StdBlackShape HoriRectangleFill 'blackHoriRectangle' 0x25AC + ConvexWhitePolygon HoriRectangleFill 'whiteHoriRectangle' 0x25AD - define [LongRectangleFill cx cy r] : begin - define rs : Geom.TallSize / (r * 1.5) - return : spiro-outline - corner (cx - r * rs) (cy + r * rs * 1.5) - corner (cx + r * rs) (cy + r * rs * 1.5) - corner (cx + r * rs) (cy - r * rs * 1.5) - corner (cx - r * rs) (cy - r * rs * 1.5) + define [VertRectangleFill cx cy r] : spiro-outline + corner (cx - r / 1.5) (cy + r) + corner (cx + r / 1.5) (cy + r) + corner (cx + r / 1.5) (cy - r) + corner (cx - r / 1.5) (cy - r) - StdBlackShape LongRectangleFill 'blackLongRectangle' 0x25AE - ConvexWhitePolygon LongRectangleFill 'whiteLongRectangle' 0x25AF + StdBlackShape VertRectangleFill 'blackVertRectangle' 0x25AE + ConvexWhitePolygon VertRectangleFill 'whiteVertRectangle' 0x25AF + + create-glyph [MangleName 'whiteVertRectangleBar'] [MangleUnicode 0x1CE06] : glyph-proc + set-width Geom.Width + include : refer-glyph : MangleName 'whiteVertRectangle' + include : HBar.m (Geom.MidX - Geom.Size) (Geom.MidX + Geom.Size) Geom.MidY GeometryStroke define [ParallelogramFill cx cy r] : begin define skew : r * 1 / 4 @@ -502,6 +497,27 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 StdBlackShape CircleInvertInnerShape 'blackInvInnerCircle' null StdWhiteShape CircleInvertInnerShape 'whiteInvInnerCircle' null + create-glyph [MangleName 'blackCircleMinusQuarterLeft'] [MangleUnicode 0x1CC6B] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'blackCircle' + spiro-outline [corner (Geom.MidX - Geom.Size) (Geom.MidY + Geom.Size)] [corner Geom.MidX Geom.MidY] [corner (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size)] + create-glyph [MangleName 'blackCircleMinusQuarterUp'] [MangleUnicode 0x1CC6C] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'blackCircle' + spiro-outline [corner (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size)] [corner Geom.MidX Geom.MidY] [corner (Geom.MidX - Geom.Size) (Geom.MidY + Geom.Size)] + create-glyph [MangleName 'blackCircleMinusQuarterRight'] [MangleUnicode 0x1CC6D] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'blackCircle' + spiro-outline [corner (Geom.MidX + Geom.Size) (Geom.MidY - Geom.Size)] [corner Geom.MidX Geom.MidY] [corner (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size)] + create-glyph [MangleName 'blackCircleMinusQuarterDown'] [MangleUnicode 0x1CC6E] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'blackCircle' + spiro-outline [corner (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size)] [corner Geom.MidX Geom.MidY] [corner (Geom.MidX + Geom.Size) (Geom.MidY - Geom.Size)] + do "Ellipse" define [EllipseFillT kx ky] : lambda [cx cy r s] : begin define rOrig : r + s @@ -580,3 +596,4 @@ glyph-block Symbol-Geometric-Plain : for-width-kinds WideWidth1 corner (cx - 0.5 * size) cy StdBlackShape RightArrowHeadShape 'blackArrowHeadRight' 0x27A4 Size.Oblique + StdWhiteShape RightArrowHeadShape 'whiteArrowHeadRight' null Size.Oblique diff --git a/packages/font-glyphs/src/symbol/geometric/square-corners.ptl b/packages/font-glyphs/src/symbol/geometric/square-corners.ptl new file mode 100644 index 0000000000..09b5df004e --- /dev/null +++ b/packages/font-glyphs/src/symbol/geometric/square-corners.ptl @@ -0,0 +1,104 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" +import [DesignParameters] from "../../meta/aesthetics.mjs" + +glyph-module + +glyph-block Symbol-Geometric-Square-Corners : for-width-kinds WideWidth1 + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes + + define Geom : GeometricDim MosaicUnitWidth MosaicWidth + + define lineWidth : Math.min GeometryStroke ((Geom.Size * 2 - GeometryStroke * 2) * 1 / 11) + define aperature : Geom.Size / 3 + + do "squared form" + create-glyph [MangleName 'squareCorners'] [MangleUnicode 0x26F6] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'whiteSquare' + union + intersection [MaskBelow (Geom.MidY + Geom.Size / 3)] [MaskAbove (Geom.MidY - Geom.Size / 3)] + intersection [MaskLeft (Geom.MidX + Geom.Size / 3)] [MaskRight (Geom.MidX - Geom.Size / 3)] + + create-glyph [MangleName 'squareCornersSaltires'] [MangleUnicode 0x1CC89] : glyph-proc + set-width Geom.Width + include : intersection + difference + refer-glyph : MangleName 'blackSquare' + union + intersection [MaskBelow (Geom.MidY + Geom.Size / 3)] [MaskAbove (Geom.MidY - Geom.Size / 3)] + intersection [MaskLeft (Geom.MidX + Geom.Size / 3)] [MaskRight (Geom.MidX - Geom.Size / 3)] + union + dispiro [widths.center lineWidth] [flat Geom.MidX (Geom.MidY + Geom.Size * (4 / 3))] [curl (Geom.MidX + Geom.Size * (4 / 3)) Geom.MidY] + dispiro [widths.center lineWidth] [flat (Geom.MidX + Geom.Size * (4 / 3)) Geom.MidY] [curl Geom.MidX (Geom.MidY - Geom.Size * (4 / 3))] + dispiro [widths.center lineWidth] [flat Geom.MidX (Geom.MidY - Geom.Size * (4 / 3))] [curl (Geom.MidX - Geom.Size * (4 / 3)) Geom.MidY] + dispiro [widths.center lineWidth] [flat (Geom.MidX - Geom.Size * (4 / 3)) Geom.MidY] [curl Geom.MidX (Geom.MidY + Geom.Size * (4 / 3))] + dispiro [widths.center lineWidth] [flat (Geom.MidX - Geom.Size) (Geom.MidY + Geom.Size)] [curl (Geom.MidX + Geom.Size) (Geom.MidY - Geom.Size)] + dispiro [widths.center lineWidth] [flat (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size)] [curl (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size)] + + create-glyph [MangleName 'squareCornersDiagonals'] [MangleUnicode 0x1CC8A] : glyph-proc + set-width Geom.Width + include : intersection + refer-glyph : MangleName 'blackSquare' + union + dispiro [widths.lhs lineWidth] [flat Geom.MidX (Geom.MidY + Geom.Size * (4 / 3))] [curl (Geom.MidX + Geom.Size * (4 / 3)) Geom.MidY] + dispiro [widths.lhs lineWidth] [flat (Geom.MidX + Geom.Size * (4 / 3)) Geom.MidY] [curl Geom.MidX (Geom.MidY - Geom.Size * (4 / 3))] + dispiro [widths.lhs lineWidth] [flat Geom.MidX (Geom.MidY - Geom.Size * (4 / 3))] [curl (Geom.MidX - Geom.Size * (4 / 3)) Geom.MidY] + dispiro [widths.lhs lineWidth] [flat (Geom.MidX - Geom.Size * (4 / 3)) Geom.MidY] [curl Geom.MidX (Geom.MidY + Geom.Size * (4 / 3))] + + create-glyph [MangleName 'squareCornersTriangles'] [MangleUnicode 0x1CC8B] : glyph-proc + set-width Geom.Width + include : difference + refer-glyph : MangleName 'blackSquare' + spiro-outline + corner Geom.MidX (Geom.MidY + Geom.Size * (4 / 3)) + corner (Geom.MidX + Geom.Size * (4 / 3)) Geom.MidY + corner Geom.MidX (Geom.MidY - Geom.Size * (4 / 3)) + corner (Geom.MidX - Geom.Size * (4 / 3)) Geom.MidY + + create-glyph [MangleName 'squareAperature'] [MangleUnicode 0x1CC8C] : glyph-proc + set-width Geom.Width + include : refer-glyph : MangleName 'whiteSquare' + include : intersection + refer-glyph : MangleName 'blackSquare' + union + intersection + spiro-outline + corner (Geom.MidX - Geom.Size - aperature) (Geom.MidY + Geom.Size) + corner (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size) + corner (Geom.MidX + Geom.Size) (Geom.MidY - Geom.Size - aperature) + dispiro + widths.center lineWidth + flat (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size + aperature) + curl (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size + aperature) + intersection + spiro-outline + corner (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size + aperature) + corner (Geom.MidX + Geom.Size) (Geom.MidY - Geom.Size) + corner (Geom.MidX - Geom.Size - aperature) (Geom.MidY - Geom.Size) + dispiro + widths.center lineWidth + flat (Geom.MidX - Geom.Size + aperature) (Geom.MidY + Geom.Size) + curl (Geom.MidX + Geom.Size + aperature) (Geom.MidY - Geom.Size) + intersection + spiro-outline + corner (Geom.MidX + Geom.Size + aperature) (Geom.MidY - Geom.Size) + corner (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size) + corner (Geom.MidX - Geom.Size) (Geom.MidY + Geom.Size + aperature) + dispiro + widths.center lineWidth + flat (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size - aperature) + curl (Geom.MidX + Geom.Size) (Geom.MidY + Geom.Size - aperature) + intersection + spiro-outline + corner (Geom.MidX - Geom.Size) (Geom.MidY - Geom.Size - aperature) + corner (Geom.MidX - Geom.Size) (Geom.MidY + Geom.Size) + corner (Geom.MidX + Geom.Size + aperature) (Geom.MidY + Geom.Size) + dispiro + widths.center lineWidth + flat (Geom.MidX - Geom.Size - aperature) (Geom.MidY + Geom.Size) + curl (Geom.MidX + Geom.Size - aperature) (Geom.MidY - Geom.Size) diff --git a/packages/font-glyphs/src/symbol/geometric/sun-and-gear.ptl b/packages/font-glyphs/src/symbol/geometric/sun-and-gear.ptl index de23a04f5e..a4373a97d2 100644 --- a/packages/font-glyphs/src/symbol/geometric/sun-and-gear.ptl +++ b/packages/font-glyphs/src/symbol/geometric/sun-and-gear.ptl @@ -13,7 +13,8 @@ glyph-block Symbol-Geometric-Sun-And-Gear : for-width-kinds WideWidth1 define Geom : GeometricDim MosaicUnitWidth MosaicWidth define Size : GeometricSizes Geom - define [EightPointingRaysShape r] : glyph-proc + define [EightPointingRaysShape r _r2] : glyph-proc + local r2 : fallback _r2 Geom.Size foreach [n : range 0 8] : begin local theta : n / 8 * Math.PI * 2 local c : Math.cos theta @@ -21,12 +22,16 @@ glyph-block Symbol-Geometric-Sun-And-Gear : for-width-kinds WideWidth1 include : dispiro widths.center rayWidth corner (Geom.MidX + c * r) (Geom.MidY + s * r) - corner (Geom.MidX + c * Geom.Size) (Geom.MidY + s * Geom.Size) + corner (Geom.MidX + c * r2) (Geom.MidY + s * r2) define rayWidth : AdviceStroke 8 [Math.sqrt Geom.Scalar] define rayInnerRadius : Geom.Size * 0.56 define dotRadius : Geom.Size * 0.44 + define gearRingRad : mix rayInnerRadius Geom.Size 0.3 + define handleLength : Geom.Size * 0.5 + define rayInwardShrink : Geom.Size * 0.25 + create-glyph [MangleName 'blackSunWithRays'] [MangleUnicode 0x2600] : glyph-proc set-width Geom.Width include : EightPointingRaysShape rayInnerRadius @@ -35,15 +40,31 @@ glyph-block Symbol-Geometric-Sun-And-Gear : for-width-kinds WideWidth1 set-width Geom.Width include : EightPointingRaysShape rayInnerRadius include : RingStrokeAt Geom.MidX Geom.MidY dotRadius rayWidth - create-glyph [MangleName 'gear'] [MangleUnicode 0x2699] : glyph-proc + create-glyph [MangleName 'gearWithoutHub'] [MangleUnicode 0x26ED] : glyph-proc set-width Geom.Width - local gearRingRad : mix rayInnerRadius Geom.Size 0.4 include : EightPointingRaysShape (gearRingRad - rayWidth / 2) include : RingStrokeAt Geom.MidX Geom.MidY gearRingRad rayWidth + create-glyph [MangleName 'gearWithHandle'] [MangleUnicode 0x26EE] : glyph-proc + set-width Geom.Width + include : refer-glyph : MangleName 'gearWithoutHub' + include : VBar.r (Geom.MidX + Geom.Size) (Geom.MidY - rayWidth / 2) (Geom.MidY + handleLength) rayWidth + include : VBar.l (Geom.MidX - Geom.Size) (Geom.MidY - handleLength) (Geom.MidY + rayWidth / 2) rayWidth + create-glyph [MangleName 'gear'] [MangleUnicode 0x2699] : glyph-proc + set-width Geom.Width + include : refer-glyph : MangleName 'gearWithoutHub' include : RingAt Geom.MidX Geom.MidY (0.4 * (gearRingRad - rayWidth)) + alias [MangleName 'lighthouseSymbol'] [MangleUnicode 0x26EF] [MangleName 'gear'] + create-glyph [MangleName 'helm'] [MangleUnicode 0x2388] : glyph-proc set-width Geom.Width local gearRingRad : mix rayInnerRadius Geom.Size 0.4 include : EightPointingRaysShape 0 include : RingStrokeAt Geom.MidX Geom.MidY gearRingRad rayWidth include : RingAt Geom.MidX Geom.MidY (1.1 * rayWidth) + + create-glyph [MangleName 'raysInward'] [MangleUnicode 0x1CC69] : glyph-proc + set-width Geom.Width + include : EightPointingRaysShape (rayInnerRadius - rayInwardShrink) (Geom.Size - rayInwardShrink) + create-glyph [MangleName 'raysOutward'] [MangleUnicode 0x1CC6A] : glyph-proc + set-width Geom.Width + include : EightPointingRaysShape rayInnerRadius Geom.Size diff --git a/packages/font-glyphs/src/symbol/math/apl.ptl b/packages/font-glyphs/src/symbol/math/apl.ptl index ed495fb92f..5398134bdc 100644 --- a/packages/font-glyphs/src/symbol/math/apl.ptl +++ b/packages/font-glyphs/src/symbol/math/apl.ptl @@ -30,7 +30,7 @@ glyph-block Symbol-Math-APL : begin local corners : new-glyph : glyph-proc set this.gizmo : Translate 0 0 - foreach [c : items-of : overlay.geometry.asContours] : foreach [z : items-of c] : do + foreach [c : items-of : overlay.geometry.toContours] : foreach [z : items-of c] : do if (z.type === Point.Type.Corner) : begin define x z.x define y z.y diff --git a/packages/font-glyphs/src/symbol/math/arith.ptl b/packages/font-glyphs/src/symbol/math/arith.ptl index 15cbb430e7..2e60b883cf 100644 --- a/packages/font-glyphs/src/symbol/math/arith.ptl +++ b/packages/font-glyphs/src/symbol/math/arith.ptl @@ -103,6 +103,12 @@ glyph-block Symbol-Math-Arith : begin flat (Middle - p1 * Size) (SymbolMid + p1 * py * Size) curl (Middle + p2 * Size) (SymbolMid - p2 * py * Size) + create-glyph 'multiplyStroke1' : glyph-proc + include : MultiplyStroke1Shape OperatorStroke 1 1 1 + + create-glyph 'multiplyStroke2' : glyph-proc + include : MultiplyStroke2Shape OperatorStroke 1 1 1 + create-glyph 'multiply' 0xD7 : glyph-proc include : MultiplyStroke1Shape OperatorStroke 1 1 1 include : MultiplyStroke2Shape OperatorStroke 1 1 1 diff --git a/packages/font-glyphs/src/symbol/math/logicals.ptl b/packages/font-glyphs/src/symbol/math/logicals.ptl index 1b951c782d..8e93912e22 100644 --- a/packages/font-glyphs/src/symbol/math/logicals.ptl +++ b/packages/font-glyphs/src/symbol/math/logicals.ptl @@ -7,6 +7,8 @@ glyph-module glyph-block Symbol-Math-Logicals : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Symbol-Math-Relation-Common : IdentHalfSpace + glyph-block-import Mark-Shared-Metrics : markStroke create-glyph 'negate' 0xAC : glyph-proc include : refer-glyph "minus" @@ -21,6 +23,9 @@ glyph-block Symbol-Math-Logicals : begin local top TackTop local bot TackBot + create-glyph 'endOfProof' 0x220E : glyph-proc + include : Rect top bot SB RightSB + create-glyph 'stile' 0x2223 : glyph-proc include : VBar.m Middle bot top OperatorStroke @@ -35,6 +40,12 @@ glyph-block Symbol-Math-Logicals : begin turned 'dashv' 0x22A3 'vdash' Middle SymbolMid + create-glyph 'top' 0x22A4 : glyph-proc + include : HBar.t SB RightSB top OperatorStroke + include : VBar.m Middle top bot OperatorStroke + + turned 'bot' 0x22A5 'top' Middle SymbolMid + create-glyph 'assert' 0x22A6 : glyph-proc local l : mix Middle SB DesignParameters.logic_narrow_shrink local r : mix Middle RightSB DesignParameters.logic_narrow_shrink @@ -62,7 +73,7 @@ glyph-block Symbol-Math-Logicals : begin local m : mix l (r - vs) (3 / 5) include : HBar.m m r SymbolMid OperatorStroke include : VBar.l l top bot vs - include : VBar.m m top bot vs + include : VBar.m m top bot vs create-glyph 'tripleBarForces' 0x22AA : glyph-proc local l : mix Middle SB 1 @@ -82,11 +93,7 @@ glyph-block Symbol-Math-Logicals : begin include : HBar.m m r [mix SymbolMid top (1 / 3)] OperatorStroke include : HBar.m m r [mix SymbolMid bot (1 / 3)] OperatorStroke include : VBar.l l top bot vs - include : VBar.m m top bot vs - - create-glyph 'top' 0x22A4 : glyph-proc - include : HBar.t SB RightSB top OperatorStroke - include : VBar.m Middle top bot OperatorStroke + include : VBar.m m top bot vs create-glyph 'intercalate' 0x22BA : glyph-proc local l : mix Middle SB DesignParameters.logic_narrow_shrink @@ -104,13 +111,89 @@ glyph-block Symbol-Math-Logicals : begin include : VBar.m Middle (mid + w) (mid - w) fine include : OShape (mid + w) (mid - w) (Middle - w) (Middle + w) fine - turned 'bot' 0x22A5 'top' Middle SymbolMid turned 'botring' 0x234E 'topring' Middle SymbolMid create-glyph 'perpendicular' 0x27C2 : glyph-proc include : HBar.b SB RightSB 0 OperatorStroke include : VBar.m Middle (SymbolMid * 2) 0 OperatorStroke + create-glyph 'gleichStark' 0x29E6 : glyph-proc + local l : mix Middle SB 1 + local r : mix Middle RightSB 1 + include : HBar.m l r [mix SymbolMid top (1 / 3)] OperatorStroke + include : HBar.m l r [mix SymbolMid bot (1 / 3)] OperatorStroke + include : VBar.l l top bot OperatorStroke + include : VBar.r r top bot OperatorStroke + + turned 'turnedAssert' 0x2ADE 'assert' Middle SymbolMid + + create-glyph 'shortTop' 0x2ADF : glyph-proc + local t : mix SymbolMid top (5 / 12) + local b : mix SymbolMid bot (5 / 12) + include : HBar.t SB RightSB t OperatorStroke + include : VBar.m Middle t b OperatorStroke + + turned 'shortBot' 0x2AE0 'shortTop' Middle SymbolMid + + create-glyph 'ordinarilySatisfies' 0x2AE2 : glyph-proc + local l : mix Middle SB 1 + local r : mix Middle RightSB 1 + include : HBar.m l r [mix SymbolMid top (1 / 2)] OperatorStroke + include : HBar.m l r SymbolMid OperatorStroke + include : HBar.m l r [mix SymbolMid bot (1 / 2)] OperatorStroke + include : VBar.l l top bot OperatorStroke + + turned 'turnedForces' 0x2AE3 'forces' Middle SymbolMid + turned 'turnedTautology' 0x2AE4 'tautology' Middle SymbolMid + turned 'turnedDoubleForces' 0x2AE5 'doubleForces' Middle SymbolMid + + create-glyph 0x2AE6 : glyph-proc + local l : mix Middle SB 1 + local r : mix Middle RightSB 1 + local vs : AdviceStroke 4 + local m : mix l (r - vs) (3 / 5) + include : HBar.m l r SymbolMid OperatorStroke + include : VBar.l l top bot vs + include : VBar.m m top bot vs + + create-glyph 'shortTopOverbar' 0x2AE7 : glyph-proc + local t : mix SymbolMid top (1 / 4) + local b : mix SymbolMid bot (7 / 12) + local markb : mix SymbolMid top (7 / 12) + include : HBar.t SB RightSB t OperatorStroke + include : VBar.m Middle t b OperatorStroke + include : HBar.b SB RightSB markb markStroke + + turned 'shortBotUnderbar' 0x2AE8 'shortTopOverbar' Middle SymbolMid + + create-glyph 'shortBotOverShortTop' 0x2AE9 : glyph-proc + # local t1 top + local b1 : mix SymbolMid top (1 / 6) + local t2 : mix SymbolMid bot (1 / 6) + # local b2 bot + include : VBar.m Middle b1 top OperatorStroke + include : HBar.b SB RightSB b1 OperatorStroke + include : HBar.t SB RightSB t2 OperatorStroke + include : VBar.m Middle t2 bot OperatorStroke + + create-glyph 'doubleTop' 0x2AEA : glyph-proc + local vs : AdviceStroke 4 + include : VBar.m [mix Middle SB (2 / 5)] top bot vs + include : VBar.m [mix Middle RightSB (2 / 5)] top bot vs + include : HBar.t SB RightSB top OperatorStroke + + turned 'doubleBot' 0x2AEB 'doubleTop' Middle SymbolMid + + create-glyph 'doubleNegate' 0x2AEC : glyph-proc + include : HBar.m SB RightSB (SymbolMid + IdentHalfSpace * 0.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid - IdentHalfSpace * 0.5) OperatorStroke + include : VBar.r RightSB (SymbolMid + IdentHalfSpace * 0.5) (SymbolMid - (RightSB - SB) * 0.55) OperatorStroke + + create-glyph 'revDoubleNegate' 0x2AED : glyph-proc + include : HBar.m SB RightSB (SymbolMid + IdentHalfSpace * 0.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid - IdentHalfSpace * 0.5) OperatorStroke + include : VBar.l SB (SymbolMid + IdentHalfSpace * 0.5) (SymbolMid - (RightSB - SB) * 0.55) OperatorStroke + create-glyph 'barRingAbove' 0x2AEF : glyph-proc local sw : AdviceStroke 4 local radius : (RightSB - SB) / 6 @@ -131,6 +214,3 @@ glyph-block Symbol-Math-Logicals : begin include : VBar.m (Middle - Width * 0.2625) bot top sw include : VBar.m Middle bot top sw include : VBar.m (Middle + Width * 0.2625) bot top sw - - create-glyph 'endOfProof' 0x220E : glyph-proc - include : Rect TackTop TackBot SB RightSB diff --git a/packages/font-glyphs/src/symbol/math/relation.ptl b/packages/font-glyphs/src/symbol/math/relation.ptl index ac25d79a1c..12f53f692c 100644 --- a/packages/font-glyphs/src/symbol/math/relation.ptl +++ b/packages/font-glyphs/src/symbol/math/relation.ptl @@ -16,6 +16,9 @@ glyph-block Symbol-Math-Relation-Common : begin glyph-block-export EqualHalfSpace define EqualHalfSpace : (OperTop - OperBot) * 2 * DesignParameters.equal_wideness + glyph-block-export IdentHalfSpace + define IdentHalfSpace : EqualHalfSpace * 1.5 + glyph-block-export LessSlope define LessSlope : (5 / 13) * (OperTop - OperBot) / (RightSB - SB) @@ -40,7 +43,7 @@ glyph-block Symbol-Math-Relation-Common : begin glyph-block Symbol-Math-Relation-Equal : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace dH EqualHoleWidth + glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace IdentHalfSpace dH EqualHoleWidth glyph-block-export EqualShape EqualHole IdentShape IdentHole glyph-block-export : EqualShape @@ -54,13 +57,13 @@ glyph-block Symbol-Math-Relation-Equal : begin glyph-block-export : IdentShape define [IdentShape left right] : union - HBar.m left right (SymbolMid + EqualHalfSpace * 1.5) OperatorStroke + HBar.m left right (SymbolMid + IdentHalfSpace) OperatorStroke HBar.m left right SymbolMid OperatorStroke - HBar.m left right (SymbolMid - EqualHalfSpace * 1.5) OperatorStroke + HBar.m left right (SymbolMid - IdentHalfSpace) OperatorStroke glyph-block-export : IdentHole define [IdentHole x] - VBar.m x (SymbolMid - EqualHalfSpace * 1.5) (SymbolMid + EqualHalfSpace * 1.5) EqualHoleWidth + VBar.m x (SymbolMid - IdentHalfSpace) (SymbolMid + IdentHalfSpace) EqualHoleWidth create-glyph 'equal' '=' : glyph-proc include : EqualShape SB RightSB @@ -268,7 +271,7 @@ glyph-block Symbol-Math-Relation-Sym : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives glyph-block-import Mark-Above : TildeShape - glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace + glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace IdentHalfSpace glyph-block-import Symbol-Math-Relation-Addons : EqEqBarNegationImpl # Sym parameters @@ -314,14 +317,14 @@ glyph-block Symbol-Math-Relation-Sym : begin include : HBar.m SB RightSB (SymbolMid - approxDist / 2) OperatorStroke create-glyph 'symEqEq' 0x2245 : glyph-proc - local sympShift : approxDist + EqualHalfSpace * 1.5 + local sympShift : approxDist + IdentHalfSpace include [refer-glyph 'sym'] AS_BASE include : ApparentTranslate 0 (sympShift / 2) - include : HBar.m SB RightSB (SymbolMid - sympShift / 2 + EqualHalfSpace * 1.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid - sympShift / 2 + IdentHalfSpace) OperatorStroke include : HBar.m SB RightSB (SymbolMid - sympShift / 2) OperatorStroke create-forked-glyph 'symEqEqBarNegated' 0x2246 : EqEqBarNegationImpl OperatorStroke - SymbolMid - sympShift / 2 + EqualHalfSpace * 1.5 + SymbolMid - sympShift / 2 + IdentHalfSpace SymbolMid - sympShift / 2 create-glyph 'flipSymEq' 0x22CD : glyph-proc @@ -330,10 +333,10 @@ glyph-block Symbol-Math-Relation-Sym : begin include : HBar.m SB RightSB (SymbolMid - approxDist / 2) OperatorStroke create-glyph 'flipSymEqEq' 0x224C : glyph-proc - local sympShift : approxDist + EqualHalfSpace * 1.5 + local sympShift : approxDist + IdentHalfSpace include [refer-glyph 'flipSym'] AS_BASE include : ApparentTranslate 0 (sympShift / 2) - include : HBar.m SB RightSB (SymbolMid - sympShift / 2 + EqualHalfSpace * 1.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid - sympShift / 2 + IdentHalfSpace) OperatorStroke include : HBar.m SB RightSB (SymbolMid - sympShift / 2) OperatorStroke WithDotVariants 'oneDotSym' 0x2A6A : function [DrawAt kr ov] : composite-proc @@ -353,7 +356,7 @@ glyph-block Symbol-Math-Relation-Sym : begin WithDotVariants 'oneDotSymEqEq' 0x2A6D : function [DrawAt kr ov] : composite-proc refer-glyph 'symEqEq' - DrawAt Middle (PlusTop + EqualHalfSpace * 1.5) (DotRadius * kr * OperatorStroke / Stroke - ov) + DrawAt Middle (PlusTop + IdentHalfSpace) (DotRadius * kr * OperatorStroke / Stroke - ov) create-glyph 'approxCircumflex' 0x2A6F : composite-proc refer-glyph 'approx' @@ -364,14 +367,14 @@ glyph-block Symbol-Math-Relation-Sym : begin create-glyph 'approxEqEq' 0x2A70 : glyph-proc include : symWave (SymbolMid + approxDist * 1.375) 1 include : symWave (SymbolMid + approxDist * 0.375) 1 - include : HBar.m SB RightSB (SymbolMid - approxDist * 1.5 + EqualHalfSpace * 1.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid - approxDist * 1.5 + IdentHalfSpace) OperatorStroke include : HBar.m SB RightSB (SymbolMid - approxDist * 1.5) OperatorStroke create-glyph 'eqEqSym' 0x2A73 : glyph-proc - local sympShift : approxDist + EqualHalfSpace * 1.5 + local sympShift : approxDist + IdentHalfSpace include [refer-glyph 'sym'] AS_BASE include : ApparentTranslate 0 (-sympShift / 2) - include : HBar.m SB RightSB (SymbolMid + sympShift / 2 - EqualHalfSpace * 1.5) OperatorStroke + include : HBar.m SB RightSB (SymbolMid + sympShift / 2 - IdentHalfSpace) OperatorStroke include : HBar.m SB RightSB (SymbolMid + sympShift / 2) OperatorStroke glyph-block Symbol-Math-Relation-Inequality : begin @@ -851,7 +854,7 @@ glyph-block Symbol-Math-Relation-Subset : begin glyph-block Symbol-Math-Relation-Precedes-Succeeds-Prefix-Suffix : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives - glyph-block-import Symbol-Math-Relation-Common : dSH dHSubstSimple lessEqDist dHElem + glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace dSH dHSubstSimple lessEqDist dHElem glyph-block-import Symbol-Math-Relation-Addon-Glyphs define [PrefixShape top bot sw] : union @@ -882,6 +885,14 @@ glyph-block Symbol-Math-Relation-Precedes-Succeeds-Prefix-Suffix : begin include : PrefixShape (SymbolMid + dHElem) (SymbolMid - dHElem) include : HBar.m (SB + HalfStroke) RightSB SymbolMid + create-glyph 'leftInteriorProduct' 0x2A3C : glyph-proc + include : HBar.m SB RightSB (SymbolMid - EqualHalfSpace) OperatorStroke + include : VBar.r RightSB (SymbolMid - EqualHalfSpace) (SymbolMid + EqualHalfSpace) OperatorStroke + + create-glyph 'rightInteriorProduct' 0x2A3D : glyph-proc + include : HBar.m SB RightSB (SymbolMid - EqualHalfSpace) OperatorStroke + include : VBar.l SB (SymbolMid - EqualHalfSpace) (SymbolMid + EqualHalfSpace) OperatorStroke + glyph-block Symbol-Math-Relation-Between : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives diff --git a/packages/font-glyphs/src/symbol/math/v-and-cup.ptl b/packages/font-glyphs/src/symbol/math/v-and-cup.ptl index a848bd3b7e..c63492f851 100644 --- a/packages/font-glyphs/src/symbol/math/v-and-cup.ptl +++ b/packages/font-glyphs/src/symbol/math/v-and-cup.ptl @@ -9,6 +9,7 @@ glyph-block Symbol-Math-VAndCup : begin glyph-block-import Common-Derivatives glyph-block-import Letter-Latin-U : UShape glyph-block-import Letter-Greek-Pi : PiShape + glyph-block-import Letter-Cyrillic-Sha : CyrShaShape glyph-block-import Symbol-Arrow : ArrowShape glyph-block-import Symbol-Math-Relation-Common : EqualHalfSpace glyph-block-import NotGlyphFn : NotGlyphSw @@ -230,3 +231,7 @@ glyph-block Symbol-Math-VAndCup : begin include : PiShape [DivFrame 1] OperTop OperBot (shrinkRate -- 0) (fine -- OperatorStroke) (doSerif -- false) turned 'squareCup' 0x2294 'squareCap' Middle SymbolMid + + create-glyph 'shuffleProduct' 0x29E2 : glyph-proc + local df : DivFrame para.diversityM 3 + include : CyrShaShape df OperTop OperBot (fine -- OperatorStroke) (doSerif -- false) diff --git a/packages/font-glyphs/src/symbol/mosaic.ptl b/packages/font-glyphs/src/symbol/mosaic.ptl index 6dab9551dd..9db20e5d75 100644 --- a/packages/font-glyphs/src/symbol/mosaic.ptl +++ b/packages/font-glyphs/src/symbol/mosaic.ptl @@ -1,1309 +1,12 @@ -###### Teletext symbols $$include '../meta/macros.ptl' -import [mix linreg clamp fallback] from "@iosevka/util" - -glyph-module - -glyph-block Symbol-Mosaic : begin - glyph-block-import CommonShapes - glyph-block-import Common-Derivatives - - define MosaicTop fontMetrics.os2.sTypoAscender - define MosaicBottom fontMetrics.os2.sTypoDescender - - for-width-kinds WideWidth4 - - define top MosaicTop - define bottom MosaicBottom - define left 0 - define right MosaicWidth - - # Corner numbers - # 1 2 3 - # 4 5 - # 6 7 - # 8 9 0 - define [PatternCorner23 bit] : match bit - 1 : corner [mix left right (0 / 2)] [mix top bottom (0 / 3)] - 2 : corner [mix left right (1 / 2)] [mix top bottom (0 / 3)] - 3 : corner [mix left right (2 / 2)] [mix top bottom (0 / 3)] - 4 : corner [mix left right (0 / 2)] [mix top bottom (1 / 3)] - 5 : corner [mix left right (2 / 2)] [mix top bottom (1 / 3)] - 6 : corner [mix left right (0 / 2)] [mix top bottom (2 / 3)] - 7 : corner [mix left right (2 / 2)] [mix top bottom (2 / 3)] - 8 : corner [mix left right (0 / 2)] [mix top bottom (3 / 3)] - 9 : corner [mix left right (1 / 2)] [mix top bottom (3 / 3)] - 0 : corner [mix left right (2 / 2)] [mix top bottom (3 / 3)] - - # Corner numbers - # 1 2 3 - # 4 5 6 - # 7 8 9 - define [PatternCorner22 bit] : match bit - 1 : corner [mix left right (0 / 2)] [mix top bottom (0 / 2)] - 2 : corner [mix left right (1 / 2)] [mix top bottom (0 / 2)] - 3 : corner [mix left right (2 / 2)] [mix top bottom (0 / 2)] - 4 : corner [mix left right (0 / 2)] [mix top bottom (1 / 2)] - 5 : corner [mix left right (1 / 2)] [mix top bottom (1 / 2)] - 6 : corner [mix left right (2 / 2)] [mix top bottom (1 / 2)] - 7 : corner [mix left right (0 / 2)] [mix top bottom (2 / 2)] - 8 : corner [mix left right (1 / 2)] [mix top bottom (2 / 2)] - 9 : corner [mix left right (2 / 2)] [mix top bottom (2 / 2)] - define [PatternPolygon22 bits] : spiro-outline : bits.map : x => [PatternCorner22 (x - 0)] - - define [BEGlyphName unicode] : MangleName ('be' + [unicode.toString 16 :.toUpperCase]) - define [BMGlyphName unicode] : MangleName ('blockMosaic/' + [unicode.toString 16 :.toUpperCase]) - define [BdGlyphName unicode] : MangleName ('bd' + [unicode.toString 16 :.toUpperCase]) - - ### Block mosaic - do "Block Mosaic" : begin - define [BlockMosaicTile w h id] : glyph-proc - local column : id % w - local row : Math.floor (id / w) - define cw : (right - left) / w - define ch : (top - bottom) / h - include : spiro-outline - corner (column * cw) (top - row * ch) - corner ((column + 1) * cw) (top - row * ch) - corner ((column + 1) * cw) (top - (row + 1) * ch) - corner (column * cw) (top - (row + 1) * ch) - - define [BlockMosaicPattern w h bits] : glyph-proc - if (bits.length > 0) : include : union - BlockMosaicTile w h bits.0 - BlockMosaicPattern w h : bits.slice 1 - - define [BlockMosaic23 unicode pattern] : begin - create-glyph [BMGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : BlockMosaicPattern 2 3 : [pattern.split ''].map : x => x - 1 - - define [BlockMosaic24 unicode pattern] : begin - create-glyph [BMGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : BlockMosaicPattern 2 4 : [pattern.split ''].map : x => x - 1 - - define [BlockMosaic unicode w h pattern] : begin - create-glyph [BMGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : BlockMosaicPattern w h pattern - - BlockMosaic23 0x1FB00 '1' - BlockMosaic23 0x1FB01 '2' - BlockMosaic23 0x1FB02 '12' - BlockMosaic23 0x1FB03 '3' - BlockMosaic23 0x1FB04 '13' - BlockMosaic23 0x1FB05 '23' - BlockMosaic23 0x1FB06 '123' - BlockMosaic23 0x1FB07 '4' - BlockMosaic23 0x1FB08 '14' - BlockMosaic23 0x1FB09 '24' - BlockMosaic23 0x1FB0A '124' - BlockMosaic23 0x1FB0B '34' - BlockMosaic23 0x1FB0C '134' - BlockMosaic23 0x1FB0D '234' - BlockMosaic23 0x1FB0E '1234' - BlockMosaic23 0x1FB0F '5' - BlockMosaic23 0x1FB10 '15' - BlockMosaic23 0x1FB11 '25' - BlockMosaic23 0x1FB12 '125' - BlockMosaic23 0x1FB13 '35' - BlockMosaic23 0x1FB14 '235' - BlockMosaic23 0x1FB15 '1235' - BlockMosaic23 0x1FB16 '45' - BlockMosaic23 0x1FB17 '145' - BlockMosaic23 0x1FB18 '245' - BlockMosaic23 0x1FB19 '1245' - BlockMosaic23 0x1FB1A '345' - BlockMosaic23 0x1FB1B '1345' - BlockMosaic23 0x1FB1C '2345' - BlockMosaic23 0x1FB1D '12345' - BlockMosaic23 0x1FB1E '6' - BlockMosaic23 0x1FB1F '16' - BlockMosaic23 0x1FB20 '26' - BlockMosaic23 0x1FB21 '126' - BlockMosaic23 0x1FB22 '36' - BlockMosaic23 0x1FB23 '136' - BlockMosaic23 0x1FB24 '236' - BlockMosaic23 0x1FB25 '1236' - BlockMosaic23 0x1FB26 '46' - BlockMosaic23 0x1FB27 '146' - BlockMosaic23 0x1FB28 '1246' - BlockMosaic23 0x1FB29 '346' - BlockMosaic23 0x1FB2A '1346' - BlockMosaic23 0x1FB2B '2346' - BlockMosaic23 0x1FB2C '12346' - BlockMosaic23 0x1FB2D '56' - BlockMosaic23 0x1FB2E '156' - BlockMosaic23 0x1FB2F '256' - BlockMosaic23 0x1FB30 '1256' - BlockMosaic23 0x1FB31 '356' - BlockMosaic23 0x1FB32 '1356' - BlockMosaic23 0x1FB33 '2356' - BlockMosaic23 0x1FB34 '12356' - BlockMosaic23 0x1FB35 '456' - BlockMosaic23 0x1FB36 '1456' - BlockMosaic23 0x1FB37 '2456' - BlockMosaic23 0x1FB38 '12456' - BlockMosaic23 0x1FB39 '3456' - BlockMosaic23 0x1FB3A '13456' - BlockMosaic23 0x1FB3B '23456' - - BlockMosaic24 0x1CD00 '3' - BlockMosaic24 0x1CD01 '23' - BlockMosaic24 0x1CD02 '123' - BlockMosaic24 0x1CD03 '4' - BlockMosaic24 0x1CD04 '14' - BlockMosaic24 0x1CD05 '124' - BlockMosaic24 0x1CD06 '34' - BlockMosaic24 0x1CD07 '134' - BlockMosaic24 0x1CD08 '234' - BlockMosaic24 0x1CD09 '5' - BlockMosaic24 0x1CD0A '15' - BlockMosaic24 0x1CD0B '25' - BlockMosaic24 0x1CD0C '125' - BlockMosaic24 0x1CD0D '135' - BlockMosaic24 0x1CD0E '235' - BlockMosaic24 0x1CD0F '1235' - BlockMosaic24 0x1CD10 '45' - BlockMosaic24 0x1CD11 '145' - BlockMosaic24 0x1CD12 '245' - BlockMosaic24 0x1CD13 '1245' - BlockMosaic24 0x1CD14 '345' - BlockMosaic24 0x1CD15 '1345' - BlockMosaic24 0x1CD16 '2345' - BlockMosaic24 0x1CD17 '12345' - BlockMosaic24 0x1CD18 '6' - BlockMosaic24 0x1CD19 '16' - BlockMosaic24 0x1CD1A '26' - BlockMosaic24 0x1CD1B '126' - BlockMosaic24 0x1CD1C '36' - BlockMosaic24 0x1CD1D '136' - BlockMosaic24 0x1CD1E '236' - BlockMosaic24 0x1CD1F '1236' - BlockMosaic24 0x1CD20 '146' - BlockMosaic24 0x1CD21 '246' - BlockMosaic24 0x1CD22 '1246' - BlockMosaic24 0x1CD23 '346' - BlockMosaic24 0x1CD24 '1346' - BlockMosaic24 0x1CD25 '2346' - BlockMosaic24 0x1CD26 '12346' - BlockMosaic24 0x1CD27 '56' - BlockMosaic24 0x1CD28 '156' - BlockMosaic24 0x1CD29 '256' - BlockMosaic24 0x1CD2A '1256' - BlockMosaic24 0x1CD2B '356' - BlockMosaic24 0x1CD2C '1356' - BlockMosaic24 0x1CD2D '2356' - BlockMosaic24 0x1CD2E '12356' - BlockMosaic24 0x1CD2F '456' - BlockMosaic24 0x1CD30 '1456' - BlockMosaic24 0x1CD31 '2456' - BlockMosaic24 0x1CD32 '12456' - BlockMosaic24 0x1CD33 '3456' - BlockMosaic24 0x1CD34 '13456' - BlockMosaic24 0x1CD35 '23456' - BlockMosaic24 0x1CD36 '17' - BlockMosaic24 0x1CD37 '27' - BlockMosaic24 0x1CD38 '127' - BlockMosaic24 0x1CD39 '37' - BlockMosaic24 0x1CD3A '137' - BlockMosaic24 0x1CD3B '237' - BlockMosaic24 0x1CD3C '1237' - BlockMosaic24 0x1CD3D '47' - BlockMosaic24 0x1CD3E '147' - BlockMosaic24 0x1CD3F '247' - BlockMosaic24 0x1CD40 '1247' - BlockMosaic24 0x1CD41 '347' - BlockMosaic24 0x1CD42 '1347' - BlockMosaic24 0x1CD43 '2347' - BlockMosaic24 0x1CD44 '12347' - BlockMosaic24 0x1CD45 '157' - BlockMosaic24 0x1CD46 '257' - BlockMosaic24 0x1CD47 '1257' - BlockMosaic24 0x1CD48 '357' - BlockMosaic24 0x1CD49 '2357' - BlockMosaic24 0x1CD4A '12357' - BlockMosaic24 0x1CD4B '457' - BlockMosaic24 0x1CD4C '1457' - BlockMosaic24 0x1CD4D '12457' - BlockMosaic24 0x1CD4E '3457' - BlockMosaic24 0x1CD4F '13457' - BlockMosaic24 0x1CD50 '23457' - BlockMosaic24 0x1CD51 '67' - BlockMosaic24 0x1CD52 '167' - BlockMosaic24 0x1CD53 '267' - BlockMosaic24 0x1CD54 '1267' - BlockMosaic24 0x1CD55 '367' - BlockMosaic24 0x1CD56 '1367' - BlockMosaic24 0x1CD57 '2367' - BlockMosaic24 0x1CD58 '12367' - BlockMosaic24 0x1CD59 '467' - BlockMosaic24 0x1CD5A '1467' - BlockMosaic24 0x1CD5B '2467' - BlockMosaic24 0x1CD5C '12467' - BlockMosaic24 0x1CD5D '3467' - BlockMosaic24 0x1CD5E '13467' - BlockMosaic24 0x1CD5F '23467' - BlockMosaic24 0x1CD60 '123467' - BlockMosaic24 0x1CD61 '567' - BlockMosaic24 0x1CD62 '1567' - BlockMosaic24 0x1CD63 '2567' - BlockMosaic24 0x1CD64 '12567' - BlockMosaic24 0x1CD65 '3567' - BlockMosaic24 0x1CD66 '13567' - BlockMosaic24 0x1CD67 '23567' - BlockMosaic24 0x1CD68 '123567' - BlockMosaic24 0x1CD69 '4567' - BlockMosaic24 0x1CD6A '14567' - BlockMosaic24 0x1CD6B '24567' - BlockMosaic24 0x1CD6C '124567' - BlockMosaic24 0x1CD6D '34567' - BlockMosaic24 0x1CD6E '134567' - BlockMosaic24 0x1CD6F '234567' - BlockMosaic24 0x1CD70 '1234567' - BlockMosaic24 0x1CD71 '18' - BlockMosaic24 0x1CD72 '28' - BlockMosaic24 0x1CD73 '128' - BlockMosaic24 0x1CD74 '38' - BlockMosaic24 0x1CD75 '138' - BlockMosaic24 0x1CD76 '238' - BlockMosaic24 0x1CD77 '1238' - BlockMosaic24 0x1CD78 '48' - BlockMosaic24 0x1CD79 '148' - BlockMosaic24 0x1CD7A '248' - BlockMosaic24 0x1CD7B '1248' - BlockMosaic24 0x1CD7C '348' - BlockMosaic24 0x1CD7D '1348' - BlockMosaic24 0x1CD7E '2348' - BlockMosaic24 0x1CD7F '12348' - BlockMosaic24 0x1CD80 '58' - BlockMosaic24 0x1CD81 '158' - BlockMosaic24 0x1CD82 '258' - BlockMosaic24 0x1CD83 '1258' - BlockMosaic24 0x1CD84 '358' - BlockMosaic24 0x1CD85 '1358' - BlockMosaic24 0x1CD86 '2358' - BlockMosaic24 0x1CD87 '12358' - BlockMosaic24 0x1CD88 '458' - BlockMosaic24 0x1CD89 '1458' - BlockMosaic24 0x1CD8A '2458' - BlockMosaic24 0x1CD8B '12458' - BlockMosaic24 0x1CD8C '3458' - BlockMosaic24 0x1CD8D '13458' - BlockMosaic24 0x1CD8E '23458' - BlockMosaic24 0x1CD8F '123458' - BlockMosaic24 0x1CD90 '168' - BlockMosaic24 0x1CD91 '268' - BlockMosaic24 0x1CD92 '1268' - BlockMosaic24 0x1CD93 '368' - BlockMosaic24 0x1CD94 '2368' - BlockMosaic24 0x1CD95 '12368' - BlockMosaic24 0x1CD96 '468' - BlockMosaic24 0x1CD97 '1468' - BlockMosaic24 0x1CD98 '12468' - BlockMosaic24 0x1CD99 '3468' - BlockMosaic24 0x1CD9A '13468' - BlockMosaic24 0x1CD9B '23468' - BlockMosaic24 0x1CD9C '568' - BlockMosaic24 0x1CD9D '1568' - BlockMosaic24 0x1CD9E '2568' - BlockMosaic24 0x1CD9F '12568' - BlockMosaic24 0x1CDA0 '3568' - BlockMosaic24 0x1CDA1 '13568' - BlockMosaic24 0x1CDA2 '23568' - BlockMosaic24 0x1CDA3 '123568' - BlockMosaic24 0x1CDA4 '4568' - BlockMosaic24 0x1CDA5 '14568' - BlockMosaic24 0x1CDA6 '24568' - BlockMosaic24 0x1CDA7 '124568' - BlockMosaic24 0x1CDA8 '34568' - BlockMosaic24 0x1CDA9 '134568' - BlockMosaic24 0x1CDAA '234568' - BlockMosaic24 0x1CDAB '1234568' - BlockMosaic24 0x1CDAC '178' - BlockMosaic24 0x1CDAD '278' - BlockMosaic24 0x1CDAE '1278' - BlockMosaic24 0x1CDAF '378' - BlockMosaic24 0x1CDB0 '1378' - BlockMosaic24 0x1CDB1 '2378' - BlockMosaic24 0x1CDB2 '12378' - BlockMosaic24 0x1CDB3 '478' - BlockMosaic24 0x1CDB4 '1478' - BlockMosaic24 0x1CDB5 '2478' - BlockMosaic24 0x1CDB6 '12478' - BlockMosaic24 0x1CDB7 '3478' - BlockMosaic24 0x1CDB8 '13478' - BlockMosaic24 0x1CDB9 '23478' - BlockMosaic24 0x1CDBA '123478' - BlockMosaic24 0x1CDBB '578' - BlockMosaic24 0x1CDBC '1578' - BlockMosaic24 0x1CDBD '2578' - BlockMosaic24 0x1CDBE '12578' - BlockMosaic24 0x1CDBF '3578' - BlockMosaic24 0x1CDC0 '13578' - BlockMosaic24 0x1CDC1 '23578' - BlockMosaic24 0x1CDC2 '123578' - BlockMosaic24 0x1CDC3 '4578' - BlockMosaic24 0x1CDC4 '14578' - BlockMosaic24 0x1CDC5 '24578' - BlockMosaic24 0x1CDC6 '124578' - BlockMosaic24 0x1CDC7 '34578' - BlockMosaic24 0x1CDC8 '134578' - BlockMosaic24 0x1CDC9 '234578' - BlockMosaic24 0x1CDCA '1234578' - BlockMosaic24 0x1CDCB '678' - BlockMosaic24 0x1CDCC '1678' - BlockMosaic24 0x1CDCD '2678' - BlockMosaic24 0x1CDCE '12678' - BlockMosaic24 0x1CDCF '3678' - BlockMosaic24 0x1CDD0 '13678' - BlockMosaic24 0x1CDD1 '23678' - BlockMosaic24 0x1CDD2 '123678' - BlockMosaic24 0x1CDD3 '4678' - BlockMosaic24 0x1CDD4 '14678' - BlockMosaic24 0x1CDD5 '24678' - BlockMosaic24 0x1CDD6 '124678' - BlockMosaic24 0x1CDD7 '34678' - BlockMosaic24 0x1CDD8 '134678' - BlockMosaic24 0x1CDD9 '234678' - BlockMosaic24 0x1CDDA '1234678' - BlockMosaic24 0x1CDDB '15678' - BlockMosaic24 0x1CDDC '25678' - BlockMosaic24 0x1CDDD '125678' - BlockMosaic24 0x1CDDE '35678' - BlockMosaic24 0x1CDDF '235678' - BlockMosaic24 0x1CDE0 '1235678' - BlockMosaic24 0x1CDE1 '45678' - BlockMosaic24 0x1CDE2 '145678' - BlockMosaic24 0x1CDE3 '1245678' - BlockMosaic24 0x1CDE4 '1345678' - BlockMosaic24 0x1CDE5 '2345678' - - BlockMosaic 0x1FB95 4 4 {0 2 5 7 8 10 13 15} - BlockMosaic 0x1FB96 4 4 {1 3 4 6 9 11 12 14} - BlockMosaic 0x1FB97 4 4 {4 5 6 7 12 13 14 15} - - do "ArchDepth Mosaic" : begin - define [SmoothMosaic23 unicode pattern] : begin - create-glyph [MangleName ('blockMosaicSmooth23/' + pattern)] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - define corners : [pattern.split ''].map : x => [PatternCorner23 (x - 0)] - include : spiro-outline corners - - SmoothMosaic23 0x1FB3C '689' - SmoothMosaic23 0x1FB3D '680' - SmoothMosaic23 0x1FB3E '489' - SmoothMosaic23 0x1FB3F '480' - SmoothMosaic23 0x1FB40 '189' - SmoothMosaic23 0x1FB41 '42308' - SmoothMosaic23 0x1FB42 '4308' - SmoothMosaic23 0x1FB43 '62308' - SmoothMosaic23 0x1FB44 '6308' - SmoothMosaic23 0x1FB45 '2308' - SmoothMosaic23 0x1FB46 '6508' - SmoothMosaic23 0x1FB47 '970' - SmoothMosaic23 0x1FB48 '870' - SmoothMosaic23 0x1FB49 '950' - SmoothMosaic23 0x1FB4A '850' - SmoothMosaic23 0x1FB4B '930' - SmoothMosaic23 0x1FB4C '25081' - SmoothMosaic23 0x1FB4D '5081' - SmoothMosaic23 0x1FB4E '27081' - SmoothMosaic23 0x1FB4F '7081' - SmoothMosaic23 0x1FB50 '2081' - SmoothMosaic23 0x1FB51 '7084' - SmoothMosaic23 0x1FB52 '69031' - SmoothMosaic23 0x1FB53 '6031' - SmoothMosaic23 0x1FB54 '49031' - SmoothMosaic23 0x1FB55 '4031' - SmoothMosaic23 0x1FB56 '9031' - SmoothMosaic23 0x1FB57 '142' - SmoothMosaic23 0x1FB58 '143' - SmoothMosaic23 0x1FB59 '162' - SmoothMosaic23 0x1FB5A '163' - SmoothMosaic23 0x1FB5B '182' - SmoothMosaic23 0x1FB5C '1653' - SmoothMosaic23 0x1FB5D '18973' - SmoothMosaic23 0x1FB5E '1873' - SmoothMosaic23 0x1FB5F '18953' - SmoothMosaic23 0x1FB60 '1853' - SmoothMosaic23 0x1FB61 '1893' - SmoothMosaic23 0x1FB62 '235' - SmoothMosaic23 0x1FB63 '135' - SmoothMosaic23 0x1FB64 '237' - SmoothMosaic23 0x1FB65 '137' - SmoothMosaic23 0x1FB66 '230' - SmoothMosaic23 0x1FB67 '1473' - - define [SmoothMosaic22 unicode pattern] : begin - create-glyph [MangleName ('blockMosaicSmooth22/' + pattern)] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - define corners : [pattern.split ''].map : x => [PatternCorner22 (x - 0)] - include : spiro-outline corners - - SmoothMosaic22 0x1FB68 '15793' - SmoothMosaic22 0x1FB69 '17935' - SmoothMosaic22 0x1FB6A '17953' - SmoothMosaic22 0x1FB6B '17593' - SmoothMosaic22 0x1FB6C '175' - SmoothMosaic22 0x1FB6D '315' - SmoothMosaic22 0x1FB6E '359' - SmoothMosaic22 0x1FB6F '579' - SmoothMosaic22 0x1FB9A '1379' - SmoothMosaic22 0x1FB9B '1739' - - ### Large Type Pieces - do 'Large Type Pieces' - local stemleft : mix 0 MosaicWidth (1 / 3) - local stemright : mix 0 MosaicWidth (2 / 3) - local stemmid : mix 0 MosaicWidth 0.5 - define [yPart n] : return : mix top bottom (n / 5) - - define [Stem start end] : spiro-outline - corner stemleft [yPart start] - corner stemright [yPart start] - corner stemright [yPart (end + 1)] - corner stemleft [yPart (end + 1)] - - define [TopBit] : spiro-outline - corner stemleft top - corner stemright top - corner stemmid [mix top bottom 0.1] - - define [BottomBit] : spiro-outline - corner stemmid [mix top bottom 0.9] - corner stemleft bottom - corner stemright bottom - - define [Arm yStart yEnd left right] : spiro-outline - corner left [yPart yStart] - corner right [yPart yEnd] - corner right [yPart (yEnd + 1)] - corner left [yPart (yStart + 1)] - - define [Arc yHori yVert fRight] : spiro-outline - corner [if fRight MosaicWidth 0] [yPart [if fRight yHori (yHori + 1)]] - corner [if fRight MosaicWidth 0] [yPart [if fRight (yHori + 1) yHori]] - corner [if (yHori < yVert) stemright stemleft] [yPart [if (yHori < yVert) (yVert + 1) yVert]] - corner [if (yHori < yVert) stemleft stemright] [yPart [if (yHori < yVert) (yVert + 1) yVert]] - - define [MakePiece unicode shape] : begin - create-glyph [MangleName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include shape - - MakePiece 0x1CE1A : union [Stem 4 4] [Arc 2 3 1] - MakePiece 0x1CE1B : union [Stem 2 4] [Arm 2 2 stemright MosaicWidth] - MakePiece 0x1CE1C : union [Stem 2 4] - MakePiece 0x1CE1D : union [Stem 2 4] [Arm 2 3 stemright MosaicWidth] - MakePiece 0x1CE1E : union [Arm 2 2 stemleft MosaicWidth] - MakePiece 0x1CE1F : union [Arm 2 2 0 MosaicWidth] - MakePiece 0x1CE20 : union [Stem 2 4] [Arm 2 2 0 MosaicWidth] - MakePiece 0x1CE21 : union [Arc 3 4 0] [Arc 3 4 1] - MakePiece 0x1CE22 : union [Arc 3 4 0] - MakePiece 0x1CE23 : union [Stem 4 4] - MakePiece 0x1CE24 : union [Stem 4 4] [Arc 2 3 0] - MakePiece 0x1CE25 : union [Arm 2 2 0 stemright] - MakePiece 0x1CE26 : union [Stem 2 4] [Arm 3 2 0 stemleft] - MakePiece 0x1CE27 : union [Stem 2 4] [Arm 2 2 0 stemleft] - MakePiece 0x1CE28 : union [Stem 0 4] [Arm 2 2 stemright MosaicWidth] - MakePiece 0x1CE29 : union [Stem 0 4] - MakePiece 0x1CE2A : union [Arc 1 0 1] [Arc 3 4 1] - MakePiece 0x1CE2B : union [Arc 1 0 1] - MakePiece 0x1CE2C : union [Arc 3 4 1] - MakePiece 0x1CE2D : union [Stem 0 0] - MakePiece 0x1CE2E : union [Stem 0 0] [Stem 4 4] [Arc 2 1 1] [Arc 2 3 1] - MakePiece 0x1CE2F : union [Arm 2 2 0 stemmid] [Arm 2 1 stemmid MosaicWidth] [Arm 2 3 stemmid MosaicWidth] - MakePiece 0x1CE30 : union [TopBit] - MakePiece 0x1CE31 : union [BottomBit] - MakePiece 0x1CE32 : union [Arm 1 3 0 MosaicWidth] [Arm 3 1 0 MosaicWidth] - MakePiece 0x1CE33 : union [Stem 3 4] [Arc 1 2 0] [Arc 1 2 1] - MakePiece 0x1CE34 : union [Arm 2 2 0 MosaicWidth] [Arm 3 1 0 MosaicWidth] - MakePiece 0x1CE35 : union [Stem 3 4] [Arc 1 2 1] - MakePiece 0x1CE36 : union [Stem 0 4] [Arm 2 2 0 stemleft] - MakePiece 0x1CE37 : union [Stem 0 0] [Stem 4 4] [Arc 2 1 0] [Arc 2 3 0] - MakePiece 0x1CE38 : union [Arc 1 0 0] [Arc 3 4 0] - MakePiece 0x1CE39 : union [Stem 0 4] [Arm 1 2 0 stemleft] - MakePiece 0x1CE3A : union [Stem 0 4] [Arm 2 2 0 MosaicWidth] - MakePiece 0x1CE3B : union [Arc 0 1 0] - MakePiece 0x1CE3C : union [Stem 0 2] - MakePiece 0x1CE3D : union [Stem 0 2] [Arm 2 2 stemright MosaicWidth] - MakePiece 0x1CE3E : union [Stem 0 0] [Arc 2 1 1] - MakePiece 0x1CE3F : union [Stem 0 2] [Arm 2 1 stemright MosaicWidth] - MakePiece 0x1CE40 : union [Stem 0 2] [Arm 2 2 0 MosaicWidth] - MakePiece 0x1CE41 : union [Arm 1 2.5 0 stemmid] [Arm 2.5 1 stemmid MosaicWidth] - MakePiece 0x1CE42 : union [Arc 1 0 0] [Arc 1 0 1] - MakePiece 0x1CE43 : union [Stem 0 0] [Arc 2 1 0] - MakePiece 0x1CE44 : union [Stem 0 2] [Arm 2 2 0 stemleft] - MakePiece 0x1CE45 : union [Stem 0 0] [Arc 2 1 0] [Arm 0 2 0 stemright] - MakePiece 0x1CE46 : union [Stem 0 2] [Arm 1 2 0 stemleft] - MakePiece 0x1CE47 : union [Stem 3 4] - MakePiece 0x1CE48 : union [Stem 1 4] - MakePiece 0x1CE49 : union [Stem 3 3] - MakePiece 0x1CE4A : union [Stem 2 3] - MakePiece 0x1CE4B : union [Stem 1 3] - MakePiece 0x1CE4C : union [Stem 0 3] - MakePiece 0x1CE4D : union [Stem 2 2] - MakePiece 0x1CE4E : union [Stem 1 2] - MakePiece 0x1CE4F : union [Stem 1 1] - MakePiece 0x1CE50 : union [Stem 0 1] - - ### Blocks - do 'Block Shapes' - define [FillBlock hStart hEnd vStart vEnd] : spiro-outline - corner [mix left right hStart] [mix bottom top vStart] - corner [mix left right hStart] [mix bottom top vEnd] - corner [mix left right hEnd] [mix bottom top vEnd] - corner [mix left right hEnd] [mix bottom top vStart] - - define [BlockElementGlyph unicode hStart hEnd vStart vEnd] : begin - create-glyph [BEGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : FillBlock hStart hEnd vStart vEnd - - define [BlockElementGlyph2 unicode hStart1 hEnd1 vStart1 vEnd1 hStart2 hEnd2 vStart2 vEnd2] : begin - create-glyph [BEGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : union - FillBlock hStart1 hEnd1 vStart1 vEnd1 - FillBlock hStart2 hEnd2 vStart2 vEnd2 - - BlockElementGlyph 0x2588 0 1 0 1 - BlockElementGlyph 0x1FB86 0 1 (1 / 8) 1 - BlockElementGlyph 0x1FB85 0 1 (2 / 8) 1 - BlockElementGlyph 0x1FB84 0 1 (3 / 8) 1 - BlockElementGlyph 0x2580 0 1 (1 / 2) 1 - BlockElementGlyph 0x1FB83 0 1 (5 / 8) 1 - BlockElementGlyph 0x1FB82 0 1 (6 / 8) 1 - BlockElementGlyph 0x2594 0 1 (7 / 8) 1 - BlockElementGlyph 0x2595 (7 / 8) 1 0 1 - BlockElementGlyph 0x1FB87 (6 / 8) 1 0 1 - BlockElementGlyph 0x1FB88 (5 / 8) 1 0 1 - BlockElementGlyph 0x2590 (1 / 2) 1 0 1 - BlockElementGlyph 0x1FB89 (3 / 8) 1 0 1 - BlockElementGlyph 0x1FB8A (2 / 8) 1 0 1 - BlockElementGlyph 0x1FB8B (1 / 8) 1 0 1 - - foreach [fill : range 1 8] : begin - BlockElementGlyph (0x2580 + fill) 0 1 0 (fill / 8) - BlockElementGlyph (0x2590 - fill) 0 (fill / 8) 0 1 - if (fill >= 2 && fill <= 7) : begin - BlockElementGlyph (0x1FB70 - 2 + fill) ((fill - 1) / 8) (fill / 8) 0 1 - BlockElementGlyph (0x1FB76 - 2 + fill) 0 1 (1 - (fill - 1) / 8) (1 - fill / 8) - - BlockElementGlyph2 0x1FB7C 0 (1 / 8) 0 1 0 1 0 (1 / 8) - BlockElementGlyph2 0x1FB7D 0 (1 / 8) 0 1 0 1 (7 / 8) 1 - BlockElementGlyph2 0x1FB7E (7 / 8) 1 0 1 0 1 (7 / 8) 1 - BlockElementGlyph2 0x1FB7F (7 / 8) 1 0 1 0 1 0 (1 / 8) - BlockElementGlyph2 0x1FB80 0 1 (7 / 8) 1 0 1 0 (1 / 8) - create-glyph [BEGlyphName 0x1FB81] [MangleUnicode 0x1FB81] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : union - FillBlock 0 1 (7 / 8) 1 - FillBlock 0 1 (5 / 8) (6 / 8) - FillBlock 0 1 (3 / 8) (4 / 8) - FillBlock 0 1 0 (1 / 8) - - create-glyph [BEGlyphName 0x1FBB5] [MangleUnicode 0x1FBB5] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : MangleName "arrowLeft" - include : refer-glyph : BEGlyphName 0x1FB80 - - create-glyph [BEGlyphName 0x1FBB6] [MangleUnicode 0x1FBB6] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : MangleName "arrowRight" - include : refer-glyph : BEGlyphName 0x1FB80 - - create-glyph [BEGlyphName 0x1FBB7] [MangleUnicode 0x1FBB7] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : MangleName "arrowDown" - include : refer-glyph : BEGlyphName 0x2595 - - create-glyph [BEGlyphName 0x1FBB8] [MangleUnicode 0x1FBB8] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : MangleName "arrowUp" - include : refer-glyph : BEGlyphName 0x2595 - - create-glyph [BEGlyphName 0x1FBBC] [MangleUnicode 0x1FBBC] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : MangleName "blackSmallCircle" - include : refer-glyph : BEGlyphName 0x2595 - include : refer-glyph : BEGlyphName 0x1FB80 - - define [Shade _steps fill box] : glyph-proc - local steps : Math.abs _steps - local sign : if (_steps >= 0) 1 (-1) - local sw : (top - bottom) / steps * fill - local skew : [Math.round (MosaicWidth / Width)] * (top - bottom) / 2 - include : ForceUpright - include : intersection - glyph-proc - foreach j [range (-steps * 4 - 2) (steps * 4 + 2)] : begin - local y0 : mix top bottom (j / steps) - local y1 : y0 + sign * skew - include : spiro-outline - corner 0 (y0 - sw / 2) - corner MosaicWidth (y1 - sw / 2) - corner MosaicWidth (y1 + sw / 2) - corner 0 (y0 + sw / 2) - fallback box [FillBlock 0 1 0 1] - - define FillLight (1 / 8) - define FillMedium (1 / 4) - define FillHeavy (1 / 2) - - create-glyph [MangleName 'lightShade'] [MangleUnicode 0x2591] : glyph-proc - set-width MosaicWidth - include : Shade 4 FillLight - - create-glyph [MangleName 'denseShade'] : glyph-proc - set-width MosaicWidth - include : Shade 16 FillHeavy - - define [MediumShade unicode bits] : begin - create-glyph [BEGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : Shade 8 FillMedium : PatternPolygon22 bits - - define [InverseMediumShade unicode bits] : begin - create-glyph [BEGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : Shade (-8) (1 - FillMedium) : PatternPolygon22 bits - include : difference - FillBlock 0 1 0 1 - PatternPolygon22 bits - - MediumShade 0x2592 {1 3 9 7} - MediumShade 0x1FB8C {1 2 8 7} - MediumShade 0x1FB8D {2 3 9 8} - MediumShade 0x1FB8E {1 3 6 4} - MediumShade 0x1FB8F {4 6 9 7} - InverseMediumShade 0x1FB90 {1 3 9 7} - InverseMediumShade 0x1FB94 {1 2 8 7} - # InverseMediumShade 0x1FB93 {2 3 9 8} - InverseMediumShade 0x1FB92 {1 3 6 4} - InverseMediumShade 0x1FB91 {4 6 9 7} - MediumShade 0x1FB9C {1 3 7} - MediumShade 0x1FB9D {1 3 9} - MediumShade 0x1FB9E {3 7 9} - MediumShade 0x1FB9F {1 7 9} - - create-glyph [MangleName 'heavyShade'] [MangleUnicode 0x2593] : glyph-proc - set-width MosaicWidth - include : Shade 8 FillHeavy - - create-glyph [MangleName 'upperLeftToLowerRightFill'] [MangleUnicode 0x1FB98] : glyph-proc - set-width MosaicWidth - include : Shade (-4) FillHeavy - - create-glyph [MangleName 'upperRightToLowerLeftFill'] [MangleUnicode 0x1FB99] : glyph-proc - set-width MosaicWidth - include : Shade 4 FillHeavy - - define filldata : list - list 0x2596 0 0 1 0 - list 0x2597 0 0 0 1 - list 0x2598 1 0 0 0 - list 0x2599 1 0 1 1 - list 0x259A 1 0 0 1 - list 0x259B 1 1 1 0 - list 0x259C 1 1 0 1 - list 0x259D 0 1 0 0 - list 0x259E 0 1 1 0 - list 0x259F 0 1 1 1 - foreach [{unicode lt rt lb rb} : items-of filldata] : begin - create-glyph [BEGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - define t top - define b bottom - define l 0 - define r MosaicWidth - local mx : mix l r 0.5 - local my : mix b t 0.5 - if lt : include : spiro-outline - corner l t - corner l my - corner mx my - corner mx t - if rt : include : spiro-outline - corner mx t - corner mx my - corner r my - corner r t - if lb : include : spiro-outline - corner l my - corner l b - corner mx b - corner mx my - if rb : include : spiro-outline - corner mx my - corner mx b - corner r b - corner r my - - ### Box drawing glyphs - do "Box Drawing" - local light : AdviceStroke 3.5 - local heavy : Math.max (light * 2) (Width * 0.15) - local midx : MosaicWidth / 2 - - # Add a little overshoot to the lines to make them join vertically - local verticalOvershoot 1.02 - local topy : mix bottom top verticalOvershoot - local boty : mix top bottom verticalOvershoot - local midy : mix boty topy 0.5 - - define [hline unicode pos] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local posy : mix (bottom + light / 2) (top - light / 2) pos - include : HBar.m 0 MosaicWidth posy light - - define [vline unicode pos] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local posx : mix (light / 2) (MosaicWidth - light / 2) pos - include : VBar.m posx bottom top light - - # Scan Lines - vline 0x23B8 0 - vline 0x23B9 1 - hline 0x23BA 1 - hline 0x23BB (3 / 4) - hline 0x23BC (1 / 4) - hline 0x23BD 0 - - # Split Dashed Lines - create-glyph [BdGlyphName 0x1CE0D] [MangleUnicode 0x1CE0D] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : HBar.m 0 (MosaicWidth / 3) midy light - include : HBar.m (MosaicWidth * 2 / 3) MosaicWidth midy light - - create-glyph [BdGlyphName 0x1CE0E] [MangleUnicode 0x1CE0E] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : HBar.m (MosaicWidth / 3) (MosaicWidth * 2 / 3) midy light - - define [hlinetick unicode a b c] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : HBar.m 0 MosaicWidth midy light - if a : include : VBar.r (MosaicWidth / 3) [mix bottom midy 0.5] midy light - if b : include : VBar.r (MosaicWidth * 2 / 3) [mix bottom midy 0.5] midy light - if c : include : VBar.r MosaicWidth [mix bottom midy 0.5] midy light - - define [vlinetick unicode a b c d rev] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : VBar.m midx [if d bottom boty] [if c top topy] light - local tickleft : if rev midx 0 - local tickright : if rev MosaicWidth midx - if a : include : HBar.t tickleft tickright [mix bottom top (1 / 3)] light - if b : include : HBar.t tickleft tickright [mix bottom top (2 / 3)] light - if c : include : HBar.t tickleft tickright top light - if d : include : HBar.b tickleft tickright bottom light - - # Box Drawing with Ticks - hlinetick 0x1CE0F 0 0 1 - hlinetick 0x1CE10 0 1 0 - hlinetick 0x1CE11 1 0 1 - hlinetick 0x1CE12 1 1 1 - vlinetick 0x1CE13 0 1 0 0 0 - vlinetick 0x1CE14 1 0 1 0 0 - vlinetick 0x1CE15 1 1 1 0 0 - vlinetick 0x1CE16 0 0 1 0 1 - vlinetick 0x1CE17 0 0 0 1 1 - vlinetick 0x1CE18 0 0 1 0 0 - vlinetick 0x1CE19 0 0 0 1 0 - - define [boxdraw unicode u d l r] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local stopH : [Math.max u d] / 2 - local stopV : [Math.max l r] / 2 - if l : include : HBar.m 0 (midx + stopH) midy l - if r : include : HBar.m (midx - stopH) MosaicWidth midy r - if d : include : VBar.m midx boty (midy + stopV) d - if u : include : VBar.m midx (midy - stopV) topy u - - define [dlboxdraw unicode u d l r] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local stopH : [Math.max u d] - light * 1 - [HSwToV : 0.5 * light] - local stopV : [Math.max l r] - light * 1.5 - local capH : [Math.max u d] - light * 1 - local capV : [Math.max l r] - light * 1 - if l : begin - include : HBar.m 0 (midx - stopH) (midy + (l - light)) light - if (l > light) : include : HBar.m 0 (midx - stopH) (midy - (l - light)) light - if r : begin - include : HBar.m (midx + stopH) MosaicWidth (midy + (r - light)) light - if (r > light) : include : HBar.m (midx + stopH) MosaicWidth (midy - (r - light)) light - if d : begin - include : VBar.m (midx + (d - light)) boty (midy - stopV) light - if (d > light) : include : VBar.m (midx - (d - light)) boty (midy - stopV) light - if u : begin - include : VBar.m (midx + (u - light)) (midy + stopV) topy light - if (u > light) : include : VBar.m (midx - (u - light)) (midy + stopV) topy light - if (stopH > 0 && [not u]) : include : HBar.m (midx - stopH - [HSwToV light]) (midx + stopH + [HSwToV light]) (midy + capV) light - if (stopH > 0 && [not d]) : include : HBar.m (midx - stopH - [HSwToV light]) (midx + stopH + [HSwToV light]) (midy - capV) light - if (stopV > 0 && [not l]) : include : VBar.m (midx - capH) (midy - stopV - light) (midy + stopV + light) light - if (stopV > 0 && [not r]) : include : VBar.m (midx + capH) (midy - stopV - light) (midy + stopV + light) light - - define [complexBoxDraw unicodeStart U D L R fn dl] : begin - local order { - {light light light light} - {light light heavy light} - {light light light heavy} - {light light heavy heavy} - {heavy light light light} - {light heavy light light} - {heavy heavy light light} - {heavy light heavy light} - {heavy light light heavy} - {light heavy heavy light} - {light heavy light heavy} - {heavy light heavy heavy} - {light heavy heavy heavy} - {heavy heavy heavy light} - {heavy heavy light heavy} - {heavy heavy heavy heavy} - } - local existings {} - local n 0 - foreach {u d l r} [items-of order] : begin - local newcome true - local masked {(U * u) (D * d) (L * l) (R * r)} - foreach existing [items-of existings] : if ('' + existing === '' + masked) : set newcome false - if newcome : begin - if ([not dl] - || ([not masked.0] || [not masked.1] || (masked.0 === masked.1)) - && ([not masked.2] || [not masked.3] || (masked.2 === masked.3)) - && (masked.0 > light || masked.1 > light || masked.2 > light || masked.3 > light) - ) : begin - [fallback fn boxdraw].apply null {(unicodeStart + n) :: masked} - inc n - existings.push masked - - # Straight - boxdraw 0x2500 0 0 light light - boxdraw 0x2501 0 0 heavy heavy - boxdraw 0x2502 light light 0 0 - boxdraw 0x2503 heavy heavy 0 0 - boxdraw 0x2574 0 0 light 0 - boxdraw 0x2575 light 0 0 0 - boxdraw 0x2576 0 0 0 light - boxdraw 0x2577 0 light 0 0 - boxdraw 0x2578 0 0 heavy 0 - boxdraw 0x2579 heavy 0 0 0 - boxdraw 0x257A 0 0 0 heavy - boxdraw 0x257B 0 heavy 0 0 - boxdraw 0x257C 0 0 light heavy - boxdraw 0x257D light heavy 0 0 - boxdraw 0x257E 0 0 heavy light - boxdraw 0x257F heavy light 0 0 - dlboxdraw 0x2550 0 0 heavy heavy - dlboxdraw 0x2551 heavy heavy 0 0 - - # Complex - complexBoxDraw 0x250C 0 1 0 1 - complexBoxDraw 0x2510 0 1 1 0 - complexBoxDraw 0x2514 1 0 0 1 - complexBoxDraw 0x2518 1 0 1 0 - complexBoxDraw 0x251C 1 1 0 1 - complexBoxDraw 0x2524 1 1 1 0 - complexBoxDraw 0x252C 0 1 1 1 - complexBoxDraw 0x2534 1 0 1 1 - complexBoxDraw 0x253C 1 1 1 1 - complexBoxDraw 0x2552 0 1 0 1 dlboxdraw 1 - complexBoxDraw 0x2555 0 1 1 0 dlboxdraw 1 - complexBoxDraw 0x2558 1 0 0 1 dlboxdraw 1 - complexBoxDraw 0x255B 1 0 1 0 dlboxdraw 1 - complexBoxDraw 0x255E 1 1 0 1 dlboxdraw 1 - complexBoxDraw 0x2561 1 1 1 0 dlboxdraw 1 - complexBoxDraw 0x2564 0 1 1 1 dlboxdraw 1 - complexBoxDraw 0x2567 1 0 1 1 dlboxdraw 1 - complexBoxDraw 0x256A 1 1 1 1 dlboxdraw 1 - - # Dashed - define [hDashed unicode segments weight] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - foreach j [range 0 segments] : include : HBar.m [mix (MosaicWidth * j / segments) (MosaicWidth * (j + 1) / segments) 0.2] [mix (MosaicWidth * j / segments) (MosaicWidth * (j + 1) / segments) 0.8] midy weight - - define [vDashed unicode segments weight] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - set-width MosaicWidth - include : ForceUpright - foreach j [range 0 segments] : include : VBar.m - begin midx - mix [mix boty topy (j / segments)] [mix boty topy ((j + 1) / segments)] 0.2 - mix [mix boty topy (j / segments)] [mix boty topy ((j + 1) / segments)] 0.8 - begin weight - - hDashed 0x2504 3 light - hDashed 0x2505 3 heavy - hDashed 0x2508 4 light - hDashed 0x2509 4 heavy - hDashed 0x254C 2 light - hDashed 0x254D 2 heavy - vDashed 0x2506 3 light - vDashed 0x2507 3 heavy - vDashed 0x250A 4 light - vDashed 0x250B 4 heavy - vDashed 0x254E 2 light - vDashed 0x254F 2 heavy - - # Arcs - local bdArcRadius : Math.min (midx + O * 2) ((midy - boty) / 2) - create-glyph [BdGlyphName 0x256D] [MangleUnicode 0x256D] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat midx boty [heading Upward] - curl midx (midy - bdArcRadius) [heading Upward] - arcvh - flat (midx + bdArcRadius) midy [heading Rightward] - curl MosaicWidth midy [heading Rightward] - - create-glyph [BdGlyphName 0x256E] [MangleUnicode 0x256E] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat midx boty [heading Upward] - curl midx (midy - bdArcRadius) [heading Upward] - arcvh - flat (midx - bdArcRadius) midy [heading Leftward] - curl 0 midy [heading Leftward] - - create-glyph [BdGlyphName 0x256F] [MangleUnicode 0x256F] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat midx topy [heading Downward] - curl midx (midy + bdArcRadius) [heading Downward] - arcvh - flat (midx - bdArcRadius) midy [heading Leftward] - curl 0 midy [heading Leftward] - - create-glyph [BdGlyphName 0x2570] [MangleUnicode 0x2570] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat midx topy [heading Downward] - curl midx (midy + bdArcRadius) [heading Downward] - arcvh - flat (midx + bdArcRadius) midy [heading Rightward] - curl MosaicWidth midy [heading Rightward] - - create-glyph [BdGlyphName 0x2571] [MangleUnicode 0x2571] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat MosaicWidth topy - curl 0 boty - - create-glyph [BdGlyphName 0x2572] [MangleUnicode 0x2572] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : dispiro - widths.center light - flat 0 topy - curl MosaicWidth boty - - create-glyph [BdGlyphName 0x2573] [MangleUnicode 0x2573] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph : BdGlyphName 0x2571 - include : refer-glyph : BdGlyphName 0x2572 - - # Diamond - define [DiamondBarRaw hStart vStart hEnd vEnd] : begin - define zStartX : mix left right hStart - define zStartY : mix bottom top vStart - define zEndX : mix left right hEnd - define zEndY : mix bottom top vEnd - return : dispiro - widths.center light - corner [mix zStartX zEndX (-1)] [mix zStartY zEndY (-1)] - corner [mix zStartX zEndX (+2)] [mix zStartY zEndY (+2)] - - define [DiamondMask] : spiro-outline - corner [mix left right 0] [mix bottom top 0] - corner [mix left right 0] [mix bottom top 1] - corner [mix left right 1] [mix bottom top 1] - corner [mix left right 1] [mix bottom top 0] - - define [DiamondBoxDrawing unicode a b c d] : begin - create-glyph [BdGlyphName unicode] [MangleUnicode unicode] : glyph-proc - local candidates {} - if a : candidates.push [DiamondBarRaw 0.5 1 0 0.5] - if b : candidates.push [DiamondBarRaw 1 0.5 0.5 1] - if c : candidates.push [DiamondBarRaw 0 0.5 0.5 0] - if d : candidates.push [DiamondBarRaw 0.5 0 1 0.5] - - set-width MosaicWidth - include : ForceUpright - include : intersection - DiamondMask - union.apply null candidates - - DiamondBoxDrawing 0x1FBA0 1 0 0 0 - DiamondBoxDrawing 0x1FBA1 0 1 0 0 - DiamondBoxDrawing 0x1FBA2 0 0 1 0 - DiamondBoxDrawing 0x1FBA3 0 0 0 1 - DiamondBoxDrawing 0x1FBA4 1 0 1 0 - DiamondBoxDrawing 0x1FBA5 0 1 0 1 - DiamondBoxDrawing 0x1FBA6 0 0 1 1 - DiamondBoxDrawing 0x1FBA7 1 1 0 0 - DiamondBoxDrawing 0x1FBA8 1 0 0 1 - DiamondBoxDrawing 0x1FBA9 0 1 1 0 - DiamondBoxDrawing 0x1FBAA 0 1 1 1 - DiamondBoxDrawing 0x1FBAB 1 0 1 1 - DiamondBoxDrawing 0x1FBAC 1 1 0 1 - DiamondBoxDrawing 0x1FBAD 1 1 1 0 - DiamondBoxDrawing 0x1FBAE 1 1 1 1 - - - create-glyph [BEGlyphName 0x1FBBD] [MangleUnicode 0x1FBBD] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : difference - glyph-proc : include : refer-glyph : BEGlyphName 0x2588 - glyph-proc : include : refer-glyph : BdGlyphName 0x2573 - - create-glyph [BEGlyphName 0x1FBBE] [MangleUnicode 0x1FBBE] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : difference - glyph-proc : include : refer-glyph : BEGlyphName 0x2588 - glyph-proc : include : refer-glyph : BdGlyphName 0x1FBA3 - - create-glyph [BdGlyphName 0x1FBBF] [MangleUnicode 0x1FBBF] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : difference - glyph-proc : include : refer-glyph : BEGlyphName 0x2588 - glyph-proc : include : refer-glyph : BdGlyphName 0x1FBAE - - create-glyph [BdGlyphName 0x1FBAF] [MangleUnicode 0x1FBAF] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : intersection - glyph-proc : include : refer-glyph : BdGlyphName 0x253C - Rect [mix bottom top 0.35] [mix bottom top 0.65] 0 MosaicWidth - - -glyph-block Symbol-Mosaic-Powerline : begin - glyph-block-import CommonShapes - glyph-block-import Common-Derivatives : refer-glyph - - define MosaicTop fontMetrics.os2.sTypoAscender - define MosaicBottom fontMetrics.os2.sTypoDescender - - for-width-kinds WideWidth4 - local pwlMidOrig : (MosaicTop + MosaicBottom) / 2 - local pwlTop : (MosaicTop - pwlMidOrig) * para.powerlineScaleY + para.powerlineShiftY + pwlMidOrig - local pwlBot : (MosaicBottom - pwlMidOrig) * para.powerlineScaleY + para.powerlineShiftY + pwlMidOrig - local pwlMid : mix pwlBot pwlTop (1 / 2) - local pwlNear : 0 * para.powerlineScaleX + para.powerlineShiftX - local pwlFar : MosaicWidth * para.powerlineScaleX + para.powerlineShiftX - - define [RotatedPowerline gidNew unicodeNew gidSource] : begin - create-glyph [MangleName gidNew] [MangleUnicode unicodeNew] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : refer-glyph [MangleName gidSource] - include : FlipAround (MosaicWidth / 2) pwlMid - - create-glyph [MangleName 'powerline/triangleRight'] [MangleUnicode 0xE0B0] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : spiro-outline - corner (pwlNear + O) pwlTop - corner pwlNear pwlTop - corner pwlFar pwlMid - corner pwlNear pwlBot - corner (pwlNear + O) pwlBot - - create-glyph [MangleName 'powerline/angleRight'] [MangleUnicode 0xE0B1] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : intersection - spiro-outline - corner (pwlNear - MosaicWidth) pwlTop - corner pwlNear pwlTop - corner pwlFar pwlMid - corner pwlNear pwlBot - corner (pwlNear - MosaicWidth) pwlBot - union - dispiro - widths.rhs fine - flat pwlNear pwlTop - curl pwlFar pwlMid - dispiro - widths.rhs fine - flat pwlFar pwlMid - curl pwlNear pwlBot - - RotatedPowerline 'powerline/triangleLeft' 0xE0B2 'powerline/triangleRight' - RotatedPowerline 'powerline/angleLeft' 0xE0B3 'powerline/angleRight' - - create-glyph [MangleName 'powerline/hemiCircleRight'] [MangleUnicode 0xE0B4] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : spiro-outline - corner (pwlNear + O) pwlTop - g4 pwlNear pwlTop - g4.down.mid pwlFar pwlMid - g4 pwlNear pwlBot - corner (pwlNear + O) pwlBot - - create-glyph [MangleName 'powerline/arcRight'] [MangleUnicode 0xE0B5] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : dispiro - widths.rhs fine - corner (pwlNear + O) pwlTop [heading Rightward] - g4 pwlNear pwlTop [heading Rightward] - g4.down.mid pwlFar pwlMid [heading Downward] - g4 pwlNear pwlBot [heading Leftward] - corner (pwlNear + O) pwlBot [heading Leftward] - - RotatedPowerline 'powerline/hemiCircleLeft' 0xE0B6 'powerline/hemiCircleRight' - RotatedPowerline 'powerline/arcLeft' 0xE0B7 'powerline/arcRight' - - create-glyph [MangleName 'powerline/underline'] [MangleUnicode 0xE0AE] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : HBar.b 0 MosaicWidth pwlBot - - create-glyph [MangleName 'powerline/overline'] [MangleUnicode 0xE0AF] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : HBar.t 0 MosaicWidth pwlTop - - create-glyph [MangleName 'powerline/cornerBottomLeft'] [MangleUnicode 0xE0B8] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : spiro-outline - corner (pwlNear + O) pwlTop - corner pwlNear pwlTop - corner pwlFar pwlBot - corner (pwlNear + O) pwlBot - - create-glyph [MangleName 'powerline/slashBottomLeft'] [MangleUnicode 0xE0B9] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : dispiro - widths.rhs fine - flat pwlNear pwlTop - curl pwlFar pwlBot - - create-glyph [MangleName 'powerline/cornerTopLeft'] [MangleUnicode 0xE0BC] : glyph-proc - set-width MosaicWidth - include : ForceUpright - include : spiro-outline - corner (pwlNear + O) pwlTop - corner pwlNear pwlTop - corner pwlFar pwlTop - corner (pwlNear + O) pwlBot - - create-glyph [MangleName 'powerline/slashTopLeft'] [MangleUnicode 0xE0BD] : glyph-proc - set-width MosaicWidth - include : ForceUpright - local fine : AdviceStroke 4 - include : dispiro - widths.rhs fine - flat pwlNear pwlBot - curl pwlFar pwlTop - - RotatedPowerline 'powerline/cornerBottomRight' 0xE0BA 'powerline/cornerTopLeft' - RotatedPowerline 'powerline/slashBottomRight' 0xE0BB 'powerline/slashTopLeft' - RotatedPowerline 'powerline/cornerTopRight' 0xE0BE 'powerline/cornerBottomLeft' - RotatedPowerline 'powerline/slashTopRight' 0xE0BF 'powerline/slashBottomLeft' - - -glyph-block Symbol-Mosaic-NotDef : begin - glyph-block-import CommonShapes : Rect - glyph-block-import Common-Derivatives : refer-glyph - - create-glyph '.notdef' : glyph-proc - define sw : AdviceStroke 8 - include : union - intersection - glyph-proc : include : refer-glyph "be2592.NWID" - Rect CAP 0 SB RightSB - difference - Rect CAP 0 SB RightSB - Rect (CAP - sw) (0 + sw) (SB + sw) (RightSB - sw) - set currentGlyph.glyphRank (9999) - -glyph-block Symbol-Geometric-Mosaic-Inverted : for-width-kinds WideWidth1 - glyph-block-import CommonShapes - glyph-block-import Common-Derivatives - glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes - - define MosaicTop fontMetrics.os2.sTypoAscender - define MosaicBottom fontMetrics.os2.sTypoDescender - - create-glyph [MangleName 'uni25D8'] [MangleUnicode 0x25D8] : glyph-proc - set-width MosaicWidth - include : difference - refer-glyph : MangleName 'be2588' - refer-glyph : MangleName 'blackCircle' - include : difference - refer-glyph : MangleName 'be2588' - refer-glyph : MangleName 'blackCircle' - - create-glyph [MangleName 'uni25DA'] [MangleUnicode 0x25DA] : glyph-proc - set-width MosaicWidth - include : difference - refer-glyph : MangleName 'be2580' - refer-glyph : MangleName 'whiteCircle' - - create-glyph [MangleName 'uni25DB'] [MangleUnicode 0x25DB] : glyph-proc - set-width MosaicWidth - include : difference - refer-glyph : MangleName 'be2584' - refer-glyph : MangleName 'whiteCircle' - - create-glyph [MangleName 'uni25D9'] [MangleUnicode 0x25D9] : glyph-proc - set-width MosaicWidth - include : refer-glyph : MangleName 'uni25DA' - include : refer-glyph : MangleName 'uni25DB' +export : define [apply] : begin + define $$Capture$$ this + run-glyph-module "./mosaic/block.mjs" + run-glyph-module "./mosaic/teletext.mjs" + run-glyph-module "./mosaic/smooth.mjs" + run-glyph-module "./mosaic/box-drawing.mjs" + run-glyph-module "./mosaic/large-type.mjs" + run-glyph-module "./mosaic/powerline.mjs" + run-glyph-module "./mosaic/notdef.mjs" + run-glyph-module "./mosaic/inverted.mjs" diff --git a/packages/font-glyphs/src/symbol/mosaic/block.ptl b/packages/font-glyphs/src/symbol/mosaic/block.ptl new file mode 100644 index 0000000000..80606842e5 --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/block.ptl @@ -0,0 +1,254 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" + +glyph-module + +glyph-block Symbol-Mosaic-Block : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + + for-width-kinds WideWidth4 + + define top fontMetrics.os2.sTypoAscender + define bottom fontMetrics.os2.sTypoDescender + define left 0 + define right MosaicWidth + + # Corner numbers + # 1 2 3 + # 4 5 6 + # 7 8 9 + define [PatternCorner22 bit] : match bit + 1 : corner [mix left right (0 / 2)] [mix top bottom (0 / 2)] + 2 : corner [mix left right (1 / 2)] [mix top bottom (0 / 2)] + 3 : corner [mix left right (2 / 2)] [mix top bottom (0 / 2)] + 4 : corner [mix left right (0 / 2)] [mix top bottom (1 / 2)] + 5 : corner [mix left right (1 / 2)] [mix top bottom (1 / 2)] + 6 : corner [mix left right (2 / 2)] [mix top bottom (1 / 2)] + 7 : corner [mix left right (0 / 2)] [mix top bottom (2 / 2)] + 8 : corner [mix left right (1 / 2)] [mix top bottom (2 / 2)] + 9 : corner [mix left right (2 / 2)] [mix top bottom (2 / 2)] + + define [PatternPolygon22 bits] : spiro-outline : bits.map : x => [PatternCorner22 (x - 0)] + + + define [FillBlock hStart hEnd vStart vEnd] : spiro-outline + corner [mix left right hStart] [mix bottom top vStart] + corner [mix left right hStart] [mix bottom top vEnd] + corner [mix left right hEnd] [mix bottom top vEnd] + corner [mix left right hEnd] [mix bottom top vStart] + + define [BlockElementGlyph unicode hStart hEnd vStart vEnd] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : FillBlock hStart hEnd vStart vEnd + + define [BlockElementGlyph2 unicode hStart1 hEnd1 vStart1 vEnd1 hStart2 hEnd2 vStart2 vEnd2] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : union + FillBlock hStart1 hEnd1 vStart1 vEnd1 + FillBlock hStart2 hEnd2 vStart2 vEnd2 + + BlockElementGlyph 0x2588 0 1 0 1 + BlockElementGlyph 0x1FB86 0 1 (1 / 8) 1 + BlockElementGlyph 0x1FB85 0 1 (2 / 8) 1 + BlockElementGlyph 0x1FB84 0 1 (3 / 8) 1 + BlockElementGlyph 0x2580 0 1 (1 / 2) 1 + BlockElementGlyph 0x1FB83 0 1 (5 / 8) 1 + BlockElementGlyph 0x1FB82 0 1 (6 / 8) 1 + BlockElementGlyph 0x2594 0 1 (7 / 8) 1 + BlockElementGlyph 0x2595 (7 / 8) 1 0 1 + BlockElementGlyph 0x1FB87 (6 / 8) 1 0 1 + BlockElementGlyph 0x1FB88 (5 / 8) 1 0 1 + BlockElementGlyph 0x2590 (1 / 2) 1 0 1 + BlockElementGlyph 0x1FB89 (3 / 8) 1 0 1 + BlockElementGlyph 0x1FB8A (2 / 8) 1 0 1 + BlockElementGlyph 0x1FB8B (1 / 8) 1 0 1 + + foreach [fill : range 1 8] : begin + BlockElementGlyph (0x2580 + fill) 0 1 0 (fill / 8) + BlockElementGlyph (0x2590 - fill) 0 (fill / 8) 0 1 + if (fill >= 2 && fill <= 7) : begin + BlockElementGlyph (0x1FB70 - 2 + fill) ((fill - 1) / 8) (fill / 8) 0 1 + BlockElementGlyph (0x1FB76 - 2 + fill) 0 1 (1 - (fill - 1) / 8) (1 - fill / 8) + + foreach [pos : range 0 16] : begin + local xCoord : (pos % 4) / 4 + local yCoord : 1 - [Math.floor (pos / 4)] / 4 + BlockElementGlyph (0x1CE90 + pos) xCoord (xCoord + 0.25) (yCoord - 0.25) yCoord + + foreach [index : range 0 4] : begin + local lower : [Math.max 0 (index - 1)] / 4 + local upper : [Math.min 4 (index + 2)] / 4 + BlockElementGlyph (0x1CEA0 + index) (1 - upper) (1 - lower) 0 (1 / 4) + BlockElementGlyph (0x1CEA4 + index) 0 (1 / 4) lower upper + BlockElementGlyph (0x1CEA8 + index) lower upper (3 / 4) 1 + BlockElementGlyph (0x1CEAC + index) (3 / 4) 1 (1 - upper) (1 - lower) + + BlockElementGlyph 0x1FBCE 0 (2 / 3) 0 1 + BlockElementGlyph 0x1FBCF 0 (1 / 3) 0 1 + BlockElementGlyph 0x1FBE4 (1 / 4) (3 / 4) (1 / 2) 1 + BlockElementGlyph 0x1FBE5 (1 / 4) (3 / 4) 0 (1 / 2) + BlockElementGlyph 0x1FBE6 0 (1 / 2) (1 / 4) (3 / 4) + BlockElementGlyph 0x1FBE7 (1 / 2) 1 (1 / 4) (3 / 4) + + BlockElementGlyph2 0x1FB7C 0 (1 / 8) 0 1 0 1 0 (1 / 8) + BlockElementGlyph2 0x1FB7D 0 (1 / 8) 0 1 0 1 (7 / 8) 1 + BlockElementGlyph2 0x1FB7E (7 / 8) 1 0 1 0 1 (7 / 8) 1 + BlockElementGlyph2 0x1FB7F (7 / 8) 1 0 1 0 1 0 (1 / 8) + BlockElementGlyph2 0x1FB80 0 1 (7 / 8) 1 0 1 0 (1 / 8) + create-glyph [MangleName : NameUni 0x1FB81] [MangleUnicode 0x1FB81] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : union + FillBlock 0 1 (7 / 8) 1 + FillBlock 0 1 (5 / 8) (6 / 8) + FillBlock 0 1 (3 / 8) (4 / 8) + FillBlock 0 1 0 (1 / 8) + + create-glyph [MangleName : NameUni 0x1FBB5] [MangleUnicode 0x1FBB5] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName "arrowLeft" + include : refer-glyph : MangleName : NameUni 0x1FB80 + + create-glyph [MangleName : NameUni 0x1FBB6] [MangleUnicode 0x1FBB6] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName "arrowRight" + include : refer-glyph : MangleName : NameUni 0x1FB80 + + create-glyph [MangleName : NameUni 0x1FBB7] [MangleUnicode 0x1FBB7] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName "arrowDown" + include : refer-glyph : MangleName : NameUni 0x2595 + + create-glyph [MangleName : NameUni 0x1FBB8] [MangleUnicode 0x1FBB8] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName "arrowUp" + include : refer-glyph : MangleName : NameUni 0x2595 + + create-glyph [MangleName : NameUni 0x1FBBC] [MangleUnicode 0x1FBBC] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName "blackSmallCircle" + include : refer-glyph : MangleName : NameUni 0x2595 + include : refer-glyph : MangleName : NameUni 0x1FB80 + + define [Shade _steps fill box] : glyph-proc + local steps : Math.abs _steps + local sign : if (_steps >= 0) 1 (-1) + local sw : (top - bottom) / steps * fill + local skew : [Math.round (MosaicWidth / Width)] * (top - bottom) / 2 + include : ForceUpright + include : intersection + glyph-proc + foreach j [range (-steps * 4 - 2) (steps * 4 + 2)] : begin + local y0 : mix top bottom (j / steps) + local y1 : y0 + sign * skew + include : spiro-outline + corner 0 (y0 - sw / 2) + corner MosaicWidth (y1 - sw / 2) + corner MosaicWidth (y1 + sw / 2) + corner 0 (y0 + sw / 2) + fallback box [FillBlock 0 1 0 1] + + define FillLight (1 / 8) + define FillMedium (1 / 4) + define FillHeavy (1 / 2) + + create-glyph [MangleName 'lightShade'] [MangleUnicode 0x2591] : glyph-proc + set-width MosaicWidth + include : Shade 4 FillLight + + create-glyph [MangleName 'denseShade'] : glyph-proc + set-width MosaicWidth + include : Shade 16 FillHeavy + + define [MediumShade unicode bits] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : Shade 8 FillMedium : PatternPolygon22 bits + + define [InverseMediumShade unicode bits] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : Shade (-8) (1 - FillMedium) : PatternPolygon22 bits + include : difference + FillBlock 0 1 0 1 + PatternPolygon22 bits + + MediumShade 0x2592 {1 3 9 7} + MediumShade 0x1FB8C {1 2 8 7} + MediumShade 0x1FB8D {2 3 9 8} + MediumShade 0x1FB8E {1 3 6 4} + MediumShade 0x1FB8F {4 6 9 7} + InverseMediumShade 0x1FB90 {1 3 9 7} + InverseMediumShade 0x1FB94 {1 2 8 7} + # InverseMediumShade 0x1FB93 {2 3 9 8} + InverseMediumShade 0x1FB92 {1 3 6 4} + InverseMediumShade 0x1FB91 {4 6 9 7} + MediumShade 0x1FB9C {1 3 7} + MediumShade 0x1FB9D {1 3 9} + MediumShade 0x1FB9E {3 7 9} + MediumShade 0x1FB9F {1 7 9} + + create-glyph [MangleName 'heavyShade'] [MangleUnicode 0x2593] : glyph-proc + set-width MosaicWidth + include : Shade 8 FillHeavy + + create-glyph [MangleName 'upperLeftToLowerRightFill'] [MangleUnicode 0x1FB98] : glyph-proc + set-width MosaicWidth + include : Shade (-4) FillHeavy + + create-glyph [MangleName 'upperRightToLowerLeftFill'] [MangleUnicode 0x1FB99] : glyph-proc + set-width MosaicWidth + include : Shade 4 FillHeavy + + define filldata : list + list 0x2596 0 0 1 0 + list 0x2597 0 0 0 1 + list 0x2598 1 0 0 0 + list 0x2599 1 0 1 1 + list 0x259A 1 0 0 1 + list 0x259B 1 1 1 0 + list 0x259C 1 1 0 1 + list 0x259D 0 1 0 0 + list 0x259E 0 1 1 0 + list 0x259F 0 1 1 1 + foreach [{unicode lt rt lb rb} : items-of filldata] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + define t top + define b bottom + define l 0 + define r MosaicWidth + local mx : mix l r 0.5 + local my : mix b t 0.5 + if lt : include : spiro-outline + corner l t + corner l my + corner mx my + corner mx t + if rt : include : spiro-outline + corner mx t + corner mx my + corner r my + corner r t + if lb : include : spiro-outline + corner l my + corner l b + corner mx b + corner mx my + if rb : include : spiro-outline + corner mx my + corner mx b + corner r b + corner r my diff --git a/packages/font-glyphs/src/symbol/mosaic/box-drawing.ptl b/packages/font-glyphs/src/symbol/mosaic/box-drawing.ptl new file mode 100644 index 0000000000..908ab6299c --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/box-drawing.ptl @@ -0,0 +1,538 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" + +glyph-module + +glyph-block Symbol-Mosaic-Box-Drawing : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + + for-width-kinds WideWidth4 + + define top fontMetrics.os2.sTypoAscender + define bottom fontMetrics.os2.sTypoDescender + define left 0 + define right MosaicWidth + + local light : AdviceStroke 3.5 + local heavy : Math.max (light * 2) (Width * 0.15) + local midx : mix left right 0.5 + local midy : mix bottom top 0.5 + + define [hline unicode pos] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local posy : mix (bottom + light / 2) (top - light / 2) pos + include : HBar.m left right posy light + + define [vline unicode pos] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local posx : mix (left + light / 2) (right - light / 2) pos + include : VBar.m posx bottom top light + + # Scan Lines + vline 0x23B8 0 + vline 0x23B9 1 + hline 0x23BA 1 + hline 0x23BB (3 / 4) + hline 0x23BC (1 / 4) + hline 0x23BD 0 + + create-glyph [MangleName : NameUni 0x1CC1B] [MangleUnicode 0x1CC1B] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m left right midy light + include : VBar.r right midy top light + + create-glyph [MangleName : NameUni 0x1CC1C] [MangleUnicode 0x1CC1C] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m left right midy light + include : VBar.r right bottom midy light + + create-glyph [MangleName : NameUni 0x1CC1D] [MangleUnicode 0x1CC1D] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.t left right top light + include : VBar.l left (midy - 0.5 * light) top light + + create-glyph [MangleName : NameUni 0x1CC1E] [MangleUnicode 0x1CC1E] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.b left right bottom light + include : VBar.l left bottom (midy + 0.5 * light) light + + # Split Dashed Lines + create-glyph [MangleName : NameUni 0x1CE0D] [MangleUnicode 0x1CE0D] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m left [mix left right (1 / 3)] midy light + include : HBar.m [mix left right (2 / 3)] right midy light + + create-glyph [MangleName : NameUni 0x1CE0E] [MangleUnicode 0x1CE0E] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m [mix left right (1 / 3)] [mix left right (2 / 3)] midy light + + define [hlinetick unicode a b c] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m left right midy light + local tickbot : mix bottom midy 0.5 + local ticktop midy + if a : include : VBar.r [mix left right (1 / 3)] tickbot ticktop light + if b : include : VBar.r [mix left right (2 / 3)] tickbot ticktop light + if c : include : VBar.r right tickbot ticktop light + + define [vlinetick unicode a b c d rev] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : VBar.m midx [if d bottom bottom] [if c top top] light + local tickleft : if rev midx left + local tickright : if rev right midx + if a : include : HBar.t tickleft tickright [mix bottom top (1 / 3)] light + if b : include : HBar.t tickleft tickright [mix bottom top (2 / 3)] light + if c : include : HBar.t tickleft tickright top light + if d : include : HBar.b tickleft tickright bottom light + + # Box Drawing with Ticks + hlinetick 0x1CE0F 0 0 1 + hlinetick 0x1CE10 0 1 0 + hlinetick 0x1CE11 1 0 1 + hlinetick 0x1CE12 1 1 1 + vlinetick 0x1CE13 0 1 0 0 0 + vlinetick 0x1CE14 1 0 1 0 0 + vlinetick 0x1CE15 1 1 1 0 0 + vlinetick 0x1CE16 0 0 1 0 1 + vlinetick 0x1CE17 0 0 0 1 1 + vlinetick 0x1CE18 0 0 1 0 0 + vlinetick 0x1CE19 0 0 0 1 0 + + create-glyph [MangleName : NameUni 0x1CC90] [MangleUnicode 0x1CC90] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : VBar.m midx bottom top light + local tickleft : mix left right (1 / 4) + local tickright : mix left right (3 / 4) + foreach i [range 0 4] : begin + include : HBar.t tickleft tickright [mix bottom top ((i + 1) / 4)] light + + create-glyph [MangleName : NameUni 0x1CC91] [MangleUnicode 0x1CC91] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : HBar.m left right midy light + local tickbot : mix bottom midy 0.75 + local ticktop : mix midy top 0.25 + foreach i [range 0 4] : begin + include : VBar.l [mix left right (i / 4)] tickbot ticktop light + + create-glyph [MangleName : NameUni 0x1CC05] [MangleUnicode 0x1CC05] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : VBar.m [mix left right (6.5 / 8)] bottom [mix bottom top (3 / 8)] light + include : HBar.m left right [mix bottom top (1.5 / 8)] light + + create-glyph [MangleName : NameUni 0x1CC06] [MangleUnicode 0x1CC06] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : VBar.m [mix left right (6.5 / 8)] bottom top light + include : HBar.m [mix left right (5 / 8)] right [mix bottom top (1.5 / 8)] light + + create-glyph [MangleName : NameUni 0x1CC07] [MangleUnicode 0x1CC07] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : VBar.m [mix left right (6.5 / 8)] bottom top light + include : HBar.m left right [mix bottom top (1.5 / 8)] light + + define [boxdraw unicode u d l r] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local stopH : [Math.max u d] / 2 + local stopV : [Math.max l r] / 2 + if l : include : HBar.m left (midx + stopH) midy l + if r : include : HBar.m (midx - stopH) right midy r + if d : include : VBar.m midx bottom (midy + stopV) d + if u : include : VBar.m midx (midy - stopV) top u + + define [dlboxdraw unicode u d l r] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local stopH : [Math.max u d] - light * 1 - [HSwToV : 0.5 * light] + local stopV : [Math.max l r] - light * 1.5 + local capH : [Math.max u d] - light * 1 + local capV : [Math.max l r] - light * 1 + if l : begin + include : HBar.m left (midx - stopH) (midy + (l - light)) light + if (l > light) : include : HBar.m left (midx - stopH) (midy - (l - light)) light + if r : begin + include : HBar.m (midx + stopH) right (midy + (r - light)) light + if (r > light) : include : HBar.m (midx + stopH) right (midy - (r - light)) light + if d : begin + include : VBar.m (midx + (d - light)) bottom (midy - stopV) light + if (d > light) : include : VBar.m (midx - (d - light)) bottom (midy - stopV) light + if u : begin + include : VBar.m (midx + (u - light)) (midy + stopV) top light + if (u > light) : include : VBar.m (midx - (u - light)) (midy + stopV) top light + if (stopH > 0 && [not u]) : include : HBar.m (midx - stopH - [HSwToV light]) (midx + stopH + [HSwToV light]) (midy + capV) light + if (stopH > 0 && [not d]) : include : HBar.m (midx - stopH - [HSwToV light]) (midx + stopH + [HSwToV light]) (midy - capV) light + if (stopV > 0 && [not l]) : include : VBar.m (midx - capH) (midy - stopV - light) (midy + stopV + light) light + if (stopV > 0 && [not r]) : include : VBar.m (midx + capH) (midy - stopV - light) (midy + stopV + light) light + + define [complexBoxDraw unicodeStart U D L R fn dl] : begin + local order { + {light light light light} + {light light heavy light} + {light light light heavy} + {light light heavy heavy} + {heavy light light light} + {light heavy light light} + {heavy heavy light light} + {heavy light heavy light} + {heavy light light heavy} + {light heavy heavy light} + {light heavy light heavy} + {heavy light heavy heavy} + {light heavy heavy heavy} + {heavy heavy heavy light} + {heavy heavy light heavy} + {heavy heavy heavy heavy} + } + local existings {} + local n 0 + foreach {u d l r} [items-of order] : begin + local newcome true + local masked {(U * u) (D * d) (L * l) (R * r)} + foreach existing [items-of existings] : if ('' + existing === '' + masked) : set newcome false + if newcome : begin + if ([not dl] + || ([not masked.0] || [not masked.1] || (masked.0 === masked.1)) + && ([not masked.2] || [not masked.3] || (masked.2 === masked.3)) + && (masked.0 > light || masked.1 > light || masked.2 > light || masked.3 > light) + ) : begin + [fallback fn boxdraw].apply null {(unicodeStart + n) :: masked} + inc n + existings.push masked + + # Straight + boxdraw 0x2500 0 0 light light + boxdraw 0x2501 0 0 heavy heavy + boxdraw 0x2502 light light 0 0 + boxdraw 0x2503 heavy heavy 0 0 + boxdraw 0x2574 0 0 light 0 + boxdraw 0x2575 light 0 0 0 + boxdraw 0x2576 0 0 0 light + boxdraw 0x2577 0 light 0 0 + boxdraw 0x2578 0 0 heavy 0 + boxdraw 0x2579 heavy 0 0 0 + boxdraw 0x257A 0 0 0 heavy + boxdraw 0x257B 0 heavy 0 0 + boxdraw 0x257C 0 0 light heavy + boxdraw 0x257D light heavy 0 0 + boxdraw 0x257E 0 0 heavy light + boxdraw 0x257F heavy light 0 0 + dlboxdraw 0x2550 0 0 heavy heavy + dlboxdraw 0x2551 heavy heavy 0 0 + + # Complex + complexBoxDraw 0x250C 0 1 0 1 + complexBoxDraw 0x2510 0 1 1 0 + complexBoxDraw 0x2514 1 0 0 1 + complexBoxDraw 0x2518 1 0 1 0 + complexBoxDraw 0x251C 1 1 0 1 + complexBoxDraw 0x2524 1 1 1 0 + complexBoxDraw 0x252C 0 1 1 1 + complexBoxDraw 0x2534 1 0 1 1 + complexBoxDraw 0x253C 1 1 1 1 + complexBoxDraw 0x2552 0 1 0 1 dlboxdraw 1 + complexBoxDraw 0x2555 0 1 1 0 dlboxdraw 1 + complexBoxDraw 0x2558 1 0 0 1 dlboxdraw 1 + complexBoxDraw 0x255B 1 0 1 0 dlboxdraw 1 + complexBoxDraw 0x255E 1 1 0 1 dlboxdraw 1 + complexBoxDraw 0x2561 1 1 1 0 dlboxdraw 1 + complexBoxDraw 0x2564 0 1 1 1 dlboxdraw 1 + complexBoxDraw 0x2567 1 0 1 1 dlboxdraw 1 + complexBoxDraw 0x256A 1 1 1 1 dlboxdraw 1 + + # Dashed + define [hDashed unicode segments weight] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + foreach j [range 0 segments] : include : HBar.m [mix (MosaicWidth * j / segments) (MosaicWidth * (j + 1) / segments) 0.2] [mix (MosaicWidth * j / segments) (MosaicWidth * (j + 1) / segments) 0.8] midy weight + + define [vDashed unicode segments weight] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + foreach j [range 0 segments] : include : VBar.m + begin midx + mix [mix bottom top (j / segments)] [mix bottom top ((j + 1) / segments)] 0.2 + mix [mix bottom top (j / segments)] [mix bottom top ((j + 1) / segments)] 0.8 + begin weight + + hDashed 0x2504 3 light + hDashed 0x2505 3 heavy + hDashed 0x2508 4 light + hDashed 0x2509 4 heavy + hDashed 0x254C 2 light + hDashed 0x254D 2 heavy + vDashed 0x2506 3 light + vDashed 0x2507 3 heavy + vDashed 0x250A 4 light + vDashed 0x250B 4 heavy + vDashed 0x254E 2 light + vDashed 0x254F 2 heavy + + # Arcs + local bdArcRadius : Math.min (midx + O * 2) ((midy - bottom) / 2) + create-glyph [MangleName : NameUni 0x256D] [MangleUnicode 0x256D] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat midx bottom [heading Upward] + curl midx (midy - bdArcRadius) [heading Upward] + arcvh + flat (midx + bdArcRadius) midy [heading Rightward] + curl right midy [heading Rightward] + + create-glyph [MangleName : NameUni 0x256E] [MangleUnicode 0x256E] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat midx bottom [heading Upward] + curl midx (midy - bdArcRadius) [heading Upward] + arcvh + flat (midx - bdArcRadius) midy [heading Leftward] + curl left midy [heading Leftward] + + create-glyph [MangleName : NameUni 0x256F] [MangleUnicode 0x256F] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat midx top [heading Downward] + curl midx (midy + bdArcRadius) [heading Downward] + arcvh + flat (midx - bdArcRadius) midy [heading Leftward] + curl left midy [heading Leftward] + + create-glyph [MangleName : NameUni 0x2570] [MangleUnicode 0x2570] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat midx top [heading Downward] + curl midx (midy + bdArcRadius) [heading Downward] + arcvh + flat (midx + bdArcRadius) midy [heading Rightward] + curl right midy [heading Rightward] + + # Corner Diagonals + create-glyph [MangleName : NameUni 0x2571] [MangleUnicode 0x2571] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat right top + curl left bottom + + create-glyph [MangleName : NameUni 0x2572] [MangleUnicode 0x2572] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : dispiro + widths.center light + flat left top + curl right bottom + + create-glyph [MangleName : NameUni 0x2573] [MangleUnicode 0x2573] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x2571 + include : refer-glyph : MangleName : NameUni 0x2572 + + create-glyph [MangleName : NameUni 0x1FBD8] [MangleUnicode 0x1FBD8] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection [MaskRight midx] : refer-glyph : MangleName : NameUni 0x2571 + include : intersection [MaskLeft midx] : refer-glyph : MangleName : NameUni 0x2572 + + create-glyph [MangleName : NameUni 0x1FBD9] [MangleUnicode 0x1FBD9] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection [MaskAbove midy] : refer-glyph : MangleName : NameUni 0x2571 + include : intersection [MaskBelow midy] : refer-glyph : MangleName : NameUni 0x2572 + + create-glyph [MangleName : NameUni 0x1FBDA] [MangleUnicode 0x1FBDA] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection [MaskLeft midx] : refer-glyph : MangleName : NameUni 0x2571 + include : intersection [MaskRight midx] : refer-glyph : MangleName : NameUni 0x2572 + + create-glyph [MangleName : NameUni 0x1FBDB] [MangleUnicode 0x1FBDB] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection [MaskBelow midy] : refer-glyph : MangleName : NameUni 0x2571 + include : intersection [MaskAbove midy] : refer-glyph : MangleName : NameUni 0x2572 + + # Diamond + define [DiamondBarRaw hStart vStart hEnd vEnd] : begin + define zStartX : mix left right hStart + define zStartY : mix bottom top vStart + define zEndX : mix left right hEnd + define zEndY : mix bottom top vEnd + return : dispiro + widths.center light + corner [mix zStartX zEndX (-1)] [mix zStartY zEndY (-1)] + corner [mix zStartX zEndX (+2)] [mix zStartY zEndY (+2)] + + define [DiamondMask] : spiro-outline + corner [mix left right 0] [mix bottom top 0] + corner [mix left right 0] [mix bottom top 1] + corner [mix left right 1] [mix bottom top 1] + corner [mix left right 1] [mix bottom top 0] + + define [DiamondBoxDrawing unicode a b c d] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + local candidates {} + if a : candidates.push [DiamondBarRaw 0.5 1 0 0.5] + if b : candidates.push [DiamondBarRaw 1 0.5 0.5 1] + if c : candidates.push [DiamondBarRaw 0 0.5 0.5 0] + if d : candidates.push [DiamondBarRaw 0.5 0 1 0.5] + + set-width MosaicWidth + include : ForceUpright + include : intersection + DiamondMask + union.apply null candidates + + DiamondBoxDrawing 0x1FBA0 1 0 0 0 + DiamondBoxDrawing 0x1FBA1 0 1 0 0 + DiamondBoxDrawing 0x1FBA2 0 0 1 0 + DiamondBoxDrawing 0x1FBA3 0 0 0 1 + DiamondBoxDrawing 0x1FBA4 1 0 1 0 + DiamondBoxDrawing 0x1FBA5 0 1 0 1 + DiamondBoxDrawing 0x1FBA6 0 0 1 1 + DiamondBoxDrawing 0x1FBA7 1 1 0 0 + DiamondBoxDrawing 0x1FBA8 1 0 0 1 + DiamondBoxDrawing 0x1FBA9 0 1 1 0 + DiamondBoxDrawing 0x1FBAA 0 1 1 1 + DiamondBoxDrawing 0x1FBAB 1 0 1 1 + DiamondBoxDrawing 0x1FBAC 1 1 0 1 + DiamondBoxDrawing 0x1FBAD 1 1 1 0 + DiamondBoxDrawing 0x1FBAE 1 1 1 1 + + create-glyph [MangleName : NameUni 0x1CE09] [MangleUnicode 0x1CE09] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBA7 + include : refer-glyph : MangleName : NameUni 0x1FBDA + + create-glyph [MangleName : NameUni 0x1CE0A] [MangleUnicode 0x1CE0A] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBA6 + include : refer-glyph : MangleName : NameUni 0x1FBD8 + + # Corner-to-Edge Diagonal + define [VDiagonal unicode sx sy] : begin + local fUpwards : sy === bottom + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection + if fUpwards [MaskBelow top] [MaskAbove bottom] + dispiro + widths.center light + flat sx sy + curl [mix sx midx 1.5] [mix sy [if fUpwards top bottom] 1.5] + + define [HDiagonal unicode sx sy] : begin + local fRightwards : sx === left + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection + if fRightwards [MaskLeft right] [MaskRight left] + dispiro + widths.center light + flat sx sy + curl [mix sx [if fRightwards right left] 1.5] [mix sy midy 1.5] + + HDiagonal 0x1FBD0 left bottom + HDiagonal 0x1FBD1 right top + HDiagonal 0x1FBD2 left top + HDiagonal 0x1FBD3 right bottom + VDiagonal 0x1FBD4 left top + VDiagonal 0x1FBD5 right bottom + VDiagonal 0x1FBD6 right top + VDiagonal 0x1FBD7 left bottom + + create-glyph [MangleName : NameUni 0x1FBDC] [MangleUnicode 0x1FBDC] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBD4 + include : refer-glyph : MangleName : NameUni 0x1FBD6 + + create-glyph [MangleName : NameUni 0x1FBDD] [MangleUnicode 0x1FBDD] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBD1 + include : refer-glyph : MangleName : NameUni 0x1FBD3 + + create-glyph [MangleName : NameUni 0x1FBDE] [MangleUnicode 0x1FBDE] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBD5 + include : refer-glyph : MangleName : NameUni 0x1FBD7 + + create-glyph [MangleName : NameUni 0x1FBDF] [MangleUnicode 0x1FBDF] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph : MangleName : NameUni 0x1FBD0 + include : refer-glyph : MangleName : NameUni 0x1FBD2 + + # Double Diagonals + create-glyph [MangleName : NameUni 0x1CC1F] [MangleUnicode 0x1CC1F] : glyph-proc + set-width MosaicWidth + include : ForceUpright + define offset : (top - bottom) / 4 + include : intersection [DiamondMask] : union + dispiro + widths.center light + flat right (top + offset) + curl [mix right left 1.5] ([mix top bottom 1.5] + offset) + dispiro + widths.center light + flat [mix left right 1.5] ([mix bottom top 1.5] - offset) + curl left (bottom - offset) + + create-glyph [MangleName : NameUni 0x1CC20] [MangleUnicode 0x1CC20] : glyph-proc + set-width MosaicWidth + include : ForceUpright + define offset : (top - bottom) / 4 + include : intersection [DiamondMask] : union + dispiro + widths.center light + flat left (top + offset) + curl [mix left right 1.5] ([mix top bottom 1.5] + offset) + dispiro + widths.center light + flat [mix right left 1.5] ([mix bottom top 1.5] - offset) + curl right (bottom - offset) + + create-glyph [MangleName : NameUni 0x1FBAF] [MangleUnicode 0x1FBAF] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : intersection + glyph-proc : include : refer-glyph : MangleName : NameUni 0x253C + Rect [mix bottom top 0.35] [mix bottom top 0.65] 0 MosaicWidth diff --git a/packages/font-glyphs/src/symbol/mosaic/inverted.ptl b/packages/font-glyphs/src/symbol/mosaic/inverted.ptl new file mode 100644 index 0000000000..e25a6ca153 --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/inverted.ptl @@ -0,0 +1,109 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" +import as Gr from "@iosevka/glyph/relation" + +glyph-module + +glyph-block Symbol-Geometric-Mosaic-Inverted : for-width-kinds WideWidth1 + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes + + define MosaicTop fontMetrics.os2.sTypoAscender + define MosaicBottom fontMetrics.os2.sTypoDescender + + create-glyph [MangleName : NameUni 0x25D8] [MangleUnicode 0x25D8] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'blackCircle' + + create-glyph [MangleName : NameUni 0x25DA] [MangleUnicode 0x25DA] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2580 + refer-glyph : MangleName 'whiteCircle' + + create-glyph [MangleName : NameUni 0x25DB] [MangleUnicode 0x25DB] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2584 + refer-glyph : MangleName 'whiteCircle' + + create-glyph [MangleName : NameUni 0x25D9] [MangleUnicode 0x25D9] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'whiteCircle' + + create-glyph [MangleName 'negBlackDiamond'] [MangleUnicode 0x1CC8D] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName 'uni2588' + refer-glyph : MangleName 'blackDiamond' + + # create-glyph [MangleName 'negBlackDiamond.mosc'] : glyph-proc + # set-width MosaicWidth + # include : ForceUpright + # include : difference + # refer-glyph : MangleName 'uni2588' + # refer-glyph : MangleName 'blockMosaicSmooth22/2486' + # Gr.linkSingleGlyphPairGr glyphStore [MangleName 'negBlackDiamond'] [MangleName 'negBlackDiamond.mosc'] Gr.MosaicForm + + create-glyph [MangleName : NameUni 0x1CC8E] [MangleUnicode 0x1CC8E] : glyph-proc + set-width MosaicWidth + include : refer-glyph : MangleName : NameUni 0x1FB7D + include : with-transform [ApparentTranslate (MosaicWidth / 16) ((MosaicBottom - MosaicTop) / 16)] : refer-glyph : MangleName 'blackSmallSquare' + + create-glyph [MangleName : NameUni 0x1CC8F] [MangleUnicode 0x1CC8F] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + with-transform [ApparentTranslate (MosaicWidth / 16) ((MosaicBottom - MosaicTop) / 16)] : refer-glyph : MangleName 'blackSmallSquare' + + create-glyph [MangleName : NameUni 0x1F8B4] [MangleUnicode 0x1F8B4] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'arrowLeft' + + create-glyph [MangleName : NameUni 0x1F8B5] [MangleUnicode 0x1F8B5] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'arrowUp' + + create-glyph [MangleName : NameUni 0x1F8B6] [MangleUnicode 0x1F8B6] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'arrowRight' + + create-glyph [MangleName : NameUni 0x1F8B7] [MangleUnicode 0x1F8B7] : glyph-proc + set-width MosaicWidth + include : difference + refer-glyph : MangleName : NameUni 0x2588 + refer-glyph : MangleName 'arrowDown' + + # Box Drawing + create-glyph [MangleName : NameUni 0x1FBBD] [MangleUnicode 0x1FBBD] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : difference + glyph-proc : include : refer-glyph : MangleName : NameUni 0x2588 + glyph-proc : include : refer-glyph : MangleName : NameUni 0x2573 + + create-glyph [MangleName : NameUni 0x1FBBE] [MangleUnicode 0x1FBBE] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : difference + glyph-proc : include : refer-glyph : MangleName : NameUni 0x2588 + glyph-proc : include : refer-glyph : MangleName : NameUni 0x1FBA3 + + create-glyph [MangleName : NameUni 0x1FBBF] [MangleUnicode 0x1FBBF] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : difference + glyph-proc : include : refer-glyph : MangleName : NameUni 0x2588 + glyph-proc : include : refer-glyph : MangleName : NameUni 0x1FBAE diff --git a/packages/font-glyphs/src/symbol/mosaic/large-type.ptl b/packages/font-glyphs/src/symbol/mosaic/large-type.ptl new file mode 100644 index 0000000000..db86adab7f --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/large-type.ptl @@ -0,0 +1,111 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" + +glyph-module + +glyph-block Symbol-Mosaic-Large-Type : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + + for-width-kinds WideWidth4 + + define top fontMetrics.os2.sTypoAscender + define bottom fontMetrics.os2.sTypoDescender + define left 0 + define right MosaicWidth + + local stemleft : mix left right (1 / 3) + local stemright : mix left right (2 / 3) + local stemmid : mix left right 0.5 + define [yPart n] : return : mix top bottom (n / 5) + + define [Stem start end] : spiro-outline + corner stemleft [yPart start] + corner stemright [yPart start] + corner stemright [yPart (end + 1)] + corner stemleft [yPart (end + 1)] + + define [TopBit] : spiro-outline + corner stemleft top + corner stemright top + corner stemmid [mix top bottom 0.1] + + define [BottomBit] : spiro-outline + corner stemmid [mix top bottom 0.9] + corner stemleft bottom + corner stemright bottom + + define [Arm yStart yEnd left right] : spiro-outline + corner left [yPart yStart] + corner right [yPart yEnd] + corner right [yPart (yEnd + 1)] + corner left [yPart (yStart + 1)] + + define [Arc yHori yVert fRight] : spiro-outline + corner [if fRight right left] [yPart [if fRight yHori (yHori + 1)]] + corner [if fRight right left] [yPart [if fRight (yHori + 1) yHori]] + corner [if (yHori < yVert) stemright stemleft] [yPart [if (yHori < yVert) (yVert + 1) yVert]] + corner [if (yHori < yVert) stemleft stemright] [yPart [if (yHori < yVert) (yVert + 1) yVert]] + + define [MakePiece unicode shape] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include shape + + MakePiece 0x1CE1A : union [Stem 4 4] [Arc 2 3 1] + MakePiece 0x1CE1B : union [Stem 2 4] [Arm 2 2 stemright right] + MakePiece 0x1CE1C : union [Stem 2 4] + MakePiece 0x1CE1D : union [Stem 2 4] [Arm 2 3 stemright right] + MakePiece 0x1CE1E : union [Arm 2 2 stemleft right] + MakePiece 0x1CE1F : union [Arm 2 2 left right] + MakePiece 0x1CE20 : union [Stem 2 4] [Arm 2 2 left right] + MakePiece 0x1CE21 : union [Arc 3 4 0] [Arc 3 4 1] + MakePiece 0x1CE22 : union [Arc 3 4 0] + MakePiece 0x1CE23 : union [Stem 4 4] + MakePiece 0x1CE24 : union [Stem 4 4] [Arc 2 3 0] + MakePiece 0x1CE25 : union [Arm 2 2 0 stemright] + MakePiece 0x1CE26 : union [Stem 2 4] [Arm 3 2 left stemleft] + MakePiece 0x1CE27 : union [Stem 2 4] [Arm 2 2 left stemleft] + MakePiece 0x1CE28 : union [Stem 0 4] [Arm 2 2 stemright right] + MakePiece 0x1CE29 : union [Stem 0 4] + MakePiece 0x1CE2A : union [Arc 1 0 1] [Arc 3 4 1] + MakePiece 0x1CE2B : union [Arc 1 0 1] + MakePiece 0x1CE2C : union [Arc 3 4 1] + MakePiece 0x1CE2D : union [Stem 0 0] + MakePiece 0x1CE2E : union [Stem 0 0] [Stem 4 4] [Arc 2 1 1] [Arc 2 3 1] + MakePiece 0x1CE2F : union [Arm 2 2 left stemmid] [Arm 2 1 stemmid right] [Arm 2 3 stemmid right] + MakePiece 0x1CE30 : union [TopBit] + MakePiece 0x1CE31 : union [BottomBit] + MakePiece 0x1CE32 : union [Arm 1 3 left right] [Arm 3 1 left right] + MakePiece 0x1CE33 : union [Stem 3 4] [Arc 1 2 0] [Arc 1 2 1] + MakePiece 0x1CE34 : union [Arm 2 2 left right] [Arm 3 1 left right] + MakePiece 0x1CE35 : union [Stem 3 4] [Arc 1 2 1] + MakePiece 0x1CE36 : union [Stem 0 4] [Arm 2 2 left stemleft] + MakePiece 0x1CE37 : union [Stem 0 0] [Stem 4 4] [Arc 2 1 0] [Arc 2 3 0] + MakePiece 0x1CE38 : union [Arc 1 0 0] [Arc 3 4 0] + MakePiece 0x1CE39 : union [Stem 0 4] [Arm 1 2 left stemleft] + MakePiece 0x1CE3A : union [Stem 0 4] [Arm 2 2 left right] + MakePiece 0x1CE3B : union [Arc 1 0 0] + MakePiece 0x1CE3C : union [Stem 0 2] + MakePiece 0x1CE3D : union [Stem 0 2] [Arm 2 2 stemright right] + MakePiece 0x1CE3E : union [Stem 0 0] [Arc 2 1 1] + MakePiece 0x1CE3F : union [Stem 0 2] [Arm 2 1 stemright right] + MakePiece 0x1CE40 : union [Stem 0 2] [Arm 2 2 0 right] + MakePiece 0x1CE41 : union [Arm 1 2.5 left stemmid] [Arm 2.5 1 stemmid right] + MakePiece 0x1CE42 : union [Arc 1 0 0] [Arc 1 0 1] + MakePiece 0x1CE43 : union [Stem 0 0] [Arc 2 1 0] + MakePiece 0x1CE44 : union [Stem 0 2] [Arm 2 2 left stemleft] + MakePiece 0x1CE45 : union [Stem 0 0] [Arc 2 1 0] [Arm 0 2 left stemright] + MakePiece 0x1CE46 : union [Stem 0 2] [Arm 1 2 left stemleft] + MakePiece 0x1CE47 : union [Stem 3 4] + MakePiece 0x1CE48 : union [Stem 1 4] + MakePiece 0x1CE49 : union [Stem 3 3] + MakePiece 0x1CE4A : union [Stem 2 3] + MakePiece 0x1CE4B : union [Stem 1 3] + MakePiece 0x1CE4C : union [Stem 0 3] + MakePiece 0x1CE4D : union [Stem 2 2] + MakePiece 0x1CE4E : union [Stem 1 2] + MakePiece 0x1CE4F : union [Stem 1 1] + MakePiece 0x1CE50 : union [Stem 0 1] diff --git a/packages/font-glyphs/src/symbol/mosaic/notdef.ptl b/packages/font-glyphs/src/symbol/mosaic/notdef.ptl new file mode 100644 index 0000000000..810e787ac1 --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/notdef.ptl @@ -0,0 +1,20 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" + +glyph-module + +glyph-block Symbol-Mosaic-NotDef : begin + glyph-block-import CommonShapes : Rect + glyph-block-import Common-Derivatives : refer-glyph + + create-glyph '.notdef' : glyph-proc + define sw : AdviceStroke 8 + include : union + intersection + glyph-proc : include : refer-glyph "uni2592.NWID" + Rect CAP 0 SB RightSB + difference + Rect CAP 0 SB RightSB + Rect (CAP - sw) (0 + sw) (SB + sw) (RightSB - sw) + set currentGlyph.glyphRank (9999) diff --git a/packages/font-glyphs/src/symbol/mosaic/powerline.ptl b/packages/font-glyphs/src/symbol/mosaic/powerline.ptl new file mode 100644 index 0000000000..c778b668bf --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/powerline.ptl @@ -0,0 +1,146 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" +import as Gr from "@iosevka/glyph/relation" + +glyph-module + +glyph-block Symbol-Mosaic-Powerline : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives : refer-glyph + + define MosaicTop fontMetrics.os2.sTypoAscender + define MosaicBottom fontMetrics.os2.sTypoDescender + + for-width-kinds WideWidth4 + local pwlMidOrig : (MosaicTop + MosaicBottom) / 2 + local pwlTop : (MosaicTop - pwlMidOrig) * para.powerlineScaleY + para.powerlineShiftY + pwlMidOrig + local pwlBot : (MosaicBottom - pwlMidOrig) * para.powerlineScaleY + para.powerlineShiftY + pwlMidOrig + local pwlMid : mix pwlBot pwlTop (1 / 2) + local pwlNear : 0 * para.powerlineScaleX + para.powerlineShiftX + local pwlFar : MosaicWidth * para.powerlineScaleX + para.powerlineShiftX + + define [RotatedPowerline gidNew unicodeNew gidSource] : begin + create-glyph [MangleName gidNew] [MangleUnicode unicodeNew] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : refer-glyph [MangleName gidSource] + include : FlipAround (MosaicWidth / 2) pwlMid + + create-glyph [MangleName 'powerline/triangleRight'] [MangleUnicode 0xE0B0] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : spiro-outline + corner (pwlNear + O) pwlTop + corner pwlNear pwlTop + corner pwlFar pwlMid + corner pwlNear pwlBot + corner (pwlNear + O) pwlBot + + create-glyph [MangleName 'powerline/angleRight'] [MangleUnicode 0xE0B1] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : intersection + spiro-outline + corner (pwlNear - MosaicWidth) pwlTop + corner pwlNear pwlTop + corner pwlFar pwlMid + corner pwlNear pwlBot + corner (pwlNear - MosaicWidth) pwlBot + union + dispiro + widths.rhs fine + flat pwlNear pwlTop + curl pwlFar pwlMid + dispiro + widths.rhs fine + flat pwlFar pwlMid + curl pwlNear pwlBot + + RotatedPowerline 'powerline/triangleLeft' 0xE0B2 'powerline/triangleRight' + RotatedPowerline 'powerline/angleLeft' 0xE0B3 'powerline/angleRight' + + create-glyph [MangleName 'powerline/hemiCircleRight'] [MangleUnicode 0xE0B4] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : spiro-outline + corner (pwlNear + O) pwlTop + g4 pwlNear pwlTop + g4.down.mid pwlFar pwlMid + g4 pwlNear pwlBot + corner (pwlNear + O) pwlBot + + create-glyph [MangleName 'powerline/arcRight'] [MangleUnicode 0xE0B5] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : dispiro + widths.rhs fine + corner (pwlNear + O) pwlTop [heading Rightward] + g4 pwlNear pwlTop [heading Rightward] + g4.down.mid pwlFar pwlMid [heading Downward] + g4 pwlNear pwlBot [heading Leftward] + corner (pwlNear + O) pwlBot [heading Leftward] + + RotatedPowerline 'powerline/hemiCircleLeft' 0xE0B6 'powerline/hemiCircleRight' + RotatedPowerline 'powerline/arcLeft' 0xE0B7 'powerline/arcRight' + + create-glyph [MangleName 'powerline/underline'] [MangleUnicode 0xE0AE] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : HBar.b 0 MosaicWidth pwlBot + + create-glyph [MangleName 'powerline/overline'] [MangleUnicode 0xE0AF] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : HBar.t 0 MosaicWidth pwlTop + + create-glyph [MangleName 'powerline/cornerBottomLeft'] [MangleUnicode 0xE0B8] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : spiro-outline + corner (pwlNear + O) pwlTop + corner pwlNear pwlTop + corner pwlFar pwlBot + corner (pwlNear + O) pwlBot + + create-glyph [MangleName 'powerline/slashBottomLeft'] [MangleUnicode 0xE0B9] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : dispiro + widths.rhs fine + flat pwlNear pwlTop + curl pwlFar pwlBot + + create-glyph [MangleName 'powerline/cornerTopLeft'] [MangleUnicode 0xE0BC] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : spiro-outline + corner (pwlNear + O) pwlTop + corner pwlNear pwlTop + corner pwlFar pwlTop + corner (pwlNear + O) pwlBot + + create-glyph [MangleName 'powerline/slashTopLeft'] [MangleUnicode 0xE0BD] : glyph-proc + set-width MosaicWidth + include : ForceUpright + local fine : AdviceStroke 4 + include : dispiro + widths.rhs fine + flat pwlNear pwlBot + curl pwlFar pwlTop + + RotatedPowerline 'powerline/cornerBottomRight' 0xE0BA 'powerline/cornerTopLeft' + RotatedPowerline 'powerline/slashBottomRight' 0xE0BB 'powerline/slashTopLeft' + RotatedPowerline 'powerline/cornerTopRight' 0xE0BE 'powerline/cornerBottomLeft' + RotatedPowerline 'powerline/slashTopRight' 0xE0BF 'powerline/slashBottomLeft' + + + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleRB'] [MangleName 'powerline/cornerBottomRight'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleLB'] [MangleName 'powerline/cornerBottomLeft'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleLT'] [MangleName 'powerline/cornerTopLeft'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleRT'] [MangleName 'powerline/cornerTopRight'] Gr.MosaicForm diff --git a/packages/font-glyphs/src/symbol/mosaic/smooth.ptl b/packages/font-glyphs/src/symbol/mosaic/smooth.ptl new file mode 100644 index 0000000000..284a5bf930 --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/smooth.ptl @@ -0,0 +1,132 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" +import as Gr from "@iosevka/glyph/relation" + +glyph-module + +glyph-block Symbol-Mosaic-Smooth : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + + for-width-kinds WideWidth4 + + define top fontMetrics.os2.sTypoAscender + define bottom fontMetrics.os2.sTypoDescender + define left 0 + define right MosaicWidth + + # Corner numbers + # 1 2 3 + # 4 5 + # 6 7 + # 8 9 0 + define [PatternCorner23 bit] : match bit + 1 : corner [mix left right (0 / 2)] [mix top bottom (0 / 3)] + 2 : corner [mix left right (1 / 2)] [mix top bottom (0 / 3)] + 3 : corner [mix left right (2 / 2)] [mix top bottom (0 / 3)] + 4 : corner [mix left right (0 / 2)] [mix top bottom (1 / 3)] + 5 : corner [mix left right (2 / 2)] [mix top bottom (1 / 3)] + 6 : corner [mix left right (0 / 2)] [mix top bottom (2 / 3)] + 7 : corner [mix left right (2 / 2)] [mix top bottom (2 / 3)] + 8 : corner [mix left right (0 / 2)] [mix top bottom (3 / 3)] + 9 : corner [mix left right (1 / 2)] [mix top bottom (3 / 3)] + 0 : corner [mix left right (2 / 2)] [mix top bottom (3 / 3)] + + # Corner numbers + # 1 2 3 + # 4 5 6 + # 7 8 9 + define [PatternCorner22 bit] : match bit + 1 : corner [mix left right (0 / 2)] [mix top bottom (0 / 2)] + 2 : corner [mix left right (1 / 2)] [mix top bottom (0 / 2)] + 3 : corner [mix left right (2 / 2)] [mix top bottom (0 / 2)] + 4 : corner [mix left right (0 / 2)] [mix top bottom (1 / 2)] + 5 : corner [mix left right (1 / 2)] [mix top bottom (1 / 2)] + 6 : corner [mix left right (2 / 2)] [mix top bottom (1 / 2)] + 7 : corner [mix left right (0 / 2)] [mix top bottom (2 / 2)] + 8 : corner [mix left right (1 / 2)] [mix top bottom (2 / 2)] + 9 : corner [mix left right (2 / 2)] [mix top bottom (2 / 2)] + + define [PatternPolygon22 bits] : spiro-outline : bits.map : x => [PatternCorner22 (x - 0)] + + define [SmoothMosaic23 unicode pattern] : begin + create-glyph [MangleName ('blockMosaicSmooth23/' + pattern)] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + define corners : [pattern.split ''].map : x => [PatternCorner23 (x - 0)] + include : spiro-outline corners + + SmoothMosaic23 0x1FB3C '689' + SmoothMosaic23 0x1FB3D '680' + SmoothMosaic23 0x1FB3E '489' + SmoothMosaic23 0x1FB3F '480' + SmoothMosaic23 0x1FB40 '189' + SmoothMosaic23 0x1FB41 '42308' + SmoothMosaic23 0x1FB42 '4308' + SmoothMosaic23 0x1FB43 '62308' + SmoothMosaic23 0x1FB44 '6308' + SmoothMosaic23 0x1FB45 '2308' + SmoothMosaic23 0x1FB46 '6508' + SmoothMosaic23 0x1FB47 '970' + SmoothMosaic23 0x1FB48 '870' + SmoothMosaic23 0x1FB49 '950' + SmoothMosaic23 0x1FB4A '850' + SmoothMosaic23 0x1FB4B '930' + SmoothMosaic23 0x1FB4C '25081' + SmoothMosaic23 0x1FB4D '5081' + SmoothMosaic23 0x1FB4E '27081' + SmoothMosaic23 0x1FB4F '7081' + SmoothMosaic23 0x1FB50 '2081' + SmoothMosaic23 0x1FB51 '7084' + SmoothMosaic23 0x1FB52 '69031' + SmoothMosaic23 0x1FB53 '6031' + SmoothMosaic23 0x1FB54 '49031' + SmoothMosaic23 0x1FB55 '4031' + SmoothMosaic23 0x1FB56 '9031' + SmoothMosaic23 0x1FB57 '142' + SmoothMosaic23 0x1FB58 '143' + SmoothMosaic23 0x1FB59 '162' + SmoothMosaic23 0x1FB5A '163' + SmoothMosaic23 0x1FB5B '182' + SmoothMosaic23 0x1FB5C '1653' + SmoothMosaic23 0x1FB5D '18973' + SmoothMosaic23 0x1FB5E '1873' + SmoothMosaic23 0x1FB5F '18953' + SmoothMosaic23 0x1FB60 '1853' + SmoothMosaic23 0x1FB61 '1893' + SmoothMosaic23 0x1FB62 '235' + SmoothMosaic23 0x1FB63 '135' + SmoothMosaic23 0x1FB64 '237' + SmoothMosaic23 0x1FB65 '137' + SmoothMosaic23 0x1FB66 '230' + SmoothMosaic23 0x1FB67 '1473' + + define [SmoothMosaic22 unicode pattern] : begin + create-glyph [MangleName ('blockMosaicSmooth22/' + pattern)] [if unicode [MangleUnicode unicode] null] : glyph-proc + set-width MosaicWidth + include : ForceUpright + define corners : [pattern.split ''].map : x => [PatternCorner22 (x - 0)] + include : spiro-outline corners + + SmoothMosaic22 0x1FB68 '15793' + SmoothMosaic22 0x1FB69 '17935' + SmoothMosaic22 0x1FB6A '17953' + SmoothMosaic22 0x1FB6B '17593' + SmoothMosaic22 0x1FB6C '175' + SmoothMosaic22 0x1FB6D '315' + SmoothMosaic22 0x1FB6E '359' + SmoothMosaic22 0x1FB6F '579' + SmoothMosaic22 0x1FB9A '1379' + SmoothMosaic22 0x1FB9B '1739' + + SmoothMosaic22 null '138' + SmoothMosaic22 null '167' + SmoothMosaic22 null '279' + SmoothMosaic22 null '349' + # SmoothMosaic22 null '2486' + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleUp'] [MangleName 'blockMosaicSmooth22/279'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleDown'] [MangleName 'blockMosaicSmooth22/138'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleLeft'] [MangleName 'blockMosaicSmooth22/349'] Gr.MosaicForm + Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackTriangleRight'] [MangleName 'blockMosaicSmooth22/167'] Gr.MosaicForm + # Gr.linkSingleGlyphPairGr glyphStore [MangleName 'blackDiamond'] [MangleName 'blockMosaicSmooth22/2486'] Gr.MosaicForm diff --git a/packages/font-glyphs/src/symbol/mosaic/teletext.ptl b/packages/font-glyphs/src/symbol/mosaic/teletext.ptl new file mode 100644 index 0000000000..9c9d442f86 --- /dev/null +++ b/packages/font-glyphs/src/symbol/mosaic/teletext.ptl @@ -0,0 +1,360 @@ +$$include '../../meta/macros.ptl' + +import [mix linreg clamp fallback] from "@iosevka/util" +import [maskBit] from "@iosevka/util/mask-bit" + +glyph-module + +glyph-block Symbol-Mosaic-Teletext : begin + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + + for-width-kinds WideWidth4 + + define top fontMetrics.os2.sTypoAscender + define bottom fontMetrics.os2.sTypoDescender + define left 0 + define right MosaicWidth + + define gap : 0.05 * (top - bottom) + + define [BlockMosaicTile w h id kgap] : glyph-proc + local column : id % w + local row : Math.floor (id / w) + define cw : (right - left) / w + define ch : (top - bottom) / h + include : spiro-outline + corner (column * cw + kgap * gap) (top - row * ch - kgap * gap) + corner ((column + 1) * cw - kgap * gap) (top - row * ch - kgap * gap) + corner ((column + 1) * cw - kgap * gap) (top - (row + 1) * ch + kgap * gap) + corner (column * cw + kgap * gap) (top - (row + 1) * ch + kgap * gap) + + define [BlockMosaicPattern w h bits] : glyph-proc + if (bits.length > 0) : include : union + BlockMosaicTile w h bits.0 0 + BlockMosaicPattern w h : bits.slice 1 + + define [BlockMosaic23 unicode pattern] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : BlockMosaicPattern 2 3 : [pattern.split ''].map : x => x - 1 + + define [BlockMosaic24 unicode pattern] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : BlockMosaicPattern 2 4 : [pattern.split ''].map : x => x - 1 + + define [BlockMosaic unicode w h pattern] : begin + create-glyph [MangleName : NameUni unicode] [MangleUnicode unicode] : glyph-proc + set-width MosaicWidth + include : ForceUpright + include : BlockMosaicPattern w h pattern + + define [MakeGappedBlockMosaic w h su] : foreach [offset : range 1 [Math.pow 2 (w * h)]] : begin + create-glyph [MangleName : NameUni (su + offset)] [MangleUnicode (su + offset)] : glyph-proc + set-width MosaicWidth + include : ForceUpright + foreach [bit : range 0 (w * h)] : if [maskBit offset bit] + include : BlockMosaicTile w h bit 1 + + MakeGappedBlockMosaic 2 2 0x1CC20 + MakeGappedBlockMosaic 2 3 0x1CE50 + + BlockMosaic23 0x1FB00 '1' + BlockMosaic23 0x1FB01 '2' + BlockMosaic23 0x1FB02 '12' + BlockMosaic23 0x1FB03 '3' + BlockMosaic23 0x1FB04 '13' + BlockMosaic23 0x1FB05 '23' + BlockMosaic23 0x1FB06 '123' + BlockMosaic23 0x1FB07 '4' + BlockMosaic23 0x1FB08 '14' + BlockMosaic23 0x1FB09 '24' + BlockMosaic23 0x1FB0A '124' + BlockMosaic23 0x1FB0B '34' + BlockMosaic23 0x1FB0C '134' + BlockMosaic23 0x1FB0D '234' + BlockMosaic23 0x1FB0E '1234' + BlockMosaic23 0x1FB0F '5' + BlockMosaic23 0x1FB10 '15' + BlockMosaic23 0x1FB11 '25' + BlockMosaic23 0x1FB12 '125' + BlockMosaic23 0x1FB13 '35' + BlockMosaic23 0x1FB14 '235' + BlockMosaic23 0x1FB15 '1235' + BlockMosaic23 0x1FB16 '45' + BlockMosaic23 0x1FB17 '145' + BlockMosaic23 0x1FB18 '245' + BlockMosaic23 0x1FB19 '1245' + BlockMosaic23 0x1FB1A '345' + BlockMosaic23 0x1FB1B '1345' + BlockMosaic23 0x1FB1C '2345' + BlockMosaic23 0x1FB1D '12345' + BlockMosaic23 0x1FB1E '6' + BlockMosaic23 0x1FB1F '16' + BlockMosaic23 0x1FB20 '26' + BlockMosaic23 0x1FB21 '126' + BlockMosaic23 0x1FB22 '36' + BlockMosaic23 0x1FB23 '136' + BlockMosaic23 0x1FB24 '236' + BlockMosaic23 0x1FB25 '1236' + BlockMosaic23 0x1FB26 '46' + BlockMosaic23 0x1FB27 '146' + BlockMosaic23 0x1FB28 '1246' + BlockMosaic23 0x1FB29 '346' + BlockMosaic23 0x1FB2A '1346' + BlockMosaic23 0x1FB2B '2346' + BlockMosaic23 0x1FB2C '12346' + BlockMosaic23 0x1FB2D '56' + BlockMosaic23 0x1FB2E '156' + BlockMosaic23 0x1FB2F '256' + BlockMosaic23 0x1FB30 '1256' + BlockMosaic23 0x1FB31 '356' + BlockMosaic23 0x1FB32 '1356' + BlockMosaic23 0x1FB33 '2356' + BlockMosaic23 0x1FB34 '12356' + BlockMosaic23 0x1FB35 '456' + BlockMosaic23 0x1FB36 '1456' + BlockMosaic23 0x1FB37 '2456' + BlockMosaic23 0x1FB38 '12456' + BlockMosaic23 0x1FB39 '3456' + BlockMosaic23 0x1FB3A '13456' + BlockMosaic23 0x1FB3B '23456' + + BlockMosaic24 0x1CD00 '3' + BlockMosaic24 0x1CD01 '23' + BlockMosaic24 0x1CD02 '123' + BlockMosaic24 0x1CD03 '4' + BlockMosaic24 0x1CD04 '14' + BlockMosaic24 0x1CD05 '124' + BlockMosaic24 0x1CD06 '34' + BlockMosaic24 0x1CD07 '134' + BlockMosaic24 0x1CD08 '234' + BlockMosaic24 0x1CD09 '5' + BlockMosaic24 0x1CD0A '15' + BlockMosaic24 0x1CD0B '25' + BlockMosaic24 0x1CD0C '125' + BlockMosaic24 0x1CD0D '135' + BlockMosaic24 0x1CD0E '235' + BlockMosaic24 0x1CD0F '1235' + BlockMosaic24 0x1CD10 '45' + BlockMosaic24 0x1CD11 '145' + BlockMosaic24 0x1CD12 '245' + BlockMosaic24 0x1CD13 '1245' + BlockMosaic24 0x1CD14 '345' + BlockMosaic24 0x1CD15 '1345' + BlockMosaic24 0x1CD16 '2345' + BlockMosaic24 0x1CD17 '12345' + BlockMosaic24 0x1CD18 '6' + BlockMosaic24 0x1CD19 '16' + BlockMosaic24 0x1CD1A '26' + BlockMosaic24 0x1CD1B '126' + BlockMosaic24 0x1CD1C '36' + BlockMosaic24 0x1CD1D '136' + BlockMosaic24 0x1CD1E '236' + BlockMosaic24 0x1CD1F '1236' + BlockMosaic24 0x1CD20 '146' + BlockMosaic24 0x1CD21 '246' + BlockMosaic24 0x1CD22 '1246' + BlockMosaic24 0x1CD23 '346' + BlockMosaic24 0x1CD24 '1346' + BlockMosaic24 0x1CD25 '2346' + BlockMosaic24 0x1CD26 '12346' + BlockMosaic24 0x1CD27 '56' + BlockMosaic24 0x1CD28 '156' + BlockMosaic24 0x1CD29 '256' + BlockMosaic24 0x1CD2A '1256' + BlockMosaic24 0x1CD2B '356' + BlockMosaic24 0x1CD2C '1356' + BlockMosaic24 0x1CD2D '2356' + BlockMosaic24 0x1CD2E '12356' + BlockMosaic24 0x1CD2F '456' + BlockMosaic24 0x1CD30 '1456' + BlockMosaic24 0x1CD31 '2456' + BlockMosaic24 0x1CD32 '12456' + BlockMosaic24 0x1CD33 '3456' + BlockMosaic24 0x1CD34 '13456' + BlockMosaic24 0x1CD35 '23456' + BlockMosaic24 0x1CD36 '17' + BlockMosaic24 0x1CD37 '27' + BlockMosaic24 0x1CD38 '127' + BlockMosaic24 0x1CD39 '37' + BlockMosaic24 0x1CD3A '137' + BlockMosaic24 0x1CD3B '237' + BlockMosaic24 0x1CD3C '1237' + BlockMosaic24 0x1CD3D '47' + BlockMosaic24 0x1CD3E '147' + BlockMosaic24 0x1CD3F '247' + BlockMosaic24 0x1CD40 '1247' + BlockMosaic24 0x1CD41 '347' + BlockMosaic24 0x1CD42 '1347' + BlockMosaic24 0x1CD43 '2347' + BlockMosaic24 0x1CD44 '12347' + BlockMosaic24 0x1CD45 '157' + BlockMosaic24 0x1CD46 '257' + BlockMosaic24 0x1CD47 '1257' + BlockMosaic24 0x1CD48 '357' + BlockMosaic24 0x1CD49 '2357' + BlockMosaic24 0x1CD4A '12357' + BlockMosaic24 0x1CD4B '457' + BlockMosaic24 0x1CD4C '1457' + BlockMosaic24 0x1CD4D '12457' + BlockMosaic24 0x1CD4E '3457' + BlockMosaic24 0x1CD4F '13457' + BlockMosaic24 0x1CD50 '23457' + BlockMosaic24 0x1CD51 '67' + BlockMosaic24 0x1CD52 '167' + BlockMosaic24 0x1CD53 '267' + BlockMosaic24 0x1CD54 '1267' + BlockMosaic24 0x1CD55 '367' + BlockMosaic24 0x1CD56 '1367' + BlockMosaic24 0x1CD57 '2367' + BlockMosaic24 0x1CD58 '12367' + BlockMosaic24 0x1CD59 '467' + BlockMosaic24 0x1CD5A '1467' + BlockMosaic24 0x1CD5B '2467' + BlockMosaic24 0x1CD5C '12467' + BlockMosaic24 0x1CD5D '3467' + BlockMosaic24 0x1CD5E '13467' + BlockMosaic24 0x1CD5F '23467' + BlockMosaic24 0x1CD60 '123467' + BlockMosaic24 0x1CD61 '567' + BlockMosaic24 0x1CD62 '1567' + BlockMosaic24 0x1CD63 '2567' + BlockMosaic24 0x1CD64 '12567' + BlockMosaic24 0x1CD65 '3567' + BlockMosaic24 0x1CD66 '13567' + BlockMosaic24 0x1CD67 '23567' + BlockMosaic24 0x1CD68 '123567' + BlockMosaic24 0x1CD69 '4567' + BlockMosaic24 0x1CD6A '14567' + BlockMosaic24 0x1CD6B '24567' + BlockMosaic24 0x1CD6C '124567' + BlockMosaic24 0x1CD6D '34567' + BlockMosaic24 0x1CD6E '134567' + BlockMosaic24 0x1CD6F '234567' + BlockMosaic24 0x1CD70 '1234567' + BlockMosaic24 0x1CD71 '18' + BlockMosaic24 0x1CD72 '28' + BlockMosaic24 0x1CD73 '128' + BlockMosaic24 0x1CD74 '38' + BlockMosaic24 0x1CD75 '138' + BlockMosaic24 0x1CD76 '238' + BlockMosaic24 0x1CD77 '1238' + BlockMosaic24 0x1CD78 '48' + BlockMosaic24 0x1CD79 '148' + BlockMosaic24 0x1CD7A '248' + BlockMosaic24 0x1CD7B '1248' + BlockMosaic24 0x1CD7C '348' + BlockMosaic24 0x1CD7D '1348' + BlockMosaic24 0x1CD7E '2348' + BlockMosaic24 0x1CD7F '12348' + BlockMosaic24 0x1CD80 '58' + BlockMosaic24 0x1CD81 '158' + BlockMosaic24 0x1CD82 '258' + BlockMosaic24 0x1CD83 '1258' + BlockMosaic24 0x1CD84 '358' + BlockMosaic24 0x1CD85 '1358' + BlockMosaic24 0x1CD86 '2358' + BlockMosaic24 0x1CD87 '12358' + BlockMosaic24 0x1CD88 '458' + BlockMosaic24 0x1CD89 '1458' + BlockMosaic24 0x1CD8A '2458' + BlockMosaic24 0x1CD8B '12458' + BlockMosaic24 0x1CD8C '3458' + BlockMosaic24 0x1CD8D '13458' + BlockMosaic24 0x1CD8E '23458' + BlockMosaic24 0x1CD8F '123458' + BlockMosaic24 0x1CD90 '168' + BlockMosaic24 0x1CD91 '268' + BlockMosaic24 0x1CD92 '1268' + BlockMosaic24 0x1CD93 '368' + BlockMosaic24 0x1CD94 '2368' + BlockMosaic24 0x1CD95 '12368' + BlockMosaic24 0x1CD96 '468' + BlockMosaic24 0x1CD97 '1468' + BlockMosaic24 0x1CD98 '12468' + BlockMosaic24 0x1CD99 '3468' + BlockMosaic24 0x1CD9A '13468' + BlockMosaic24 0x1CD9B '23468' + BlockMosaic24 0x1CD9C '568' + BlockMosaic24 0x1CD9D '1568' + BlockMosaic24 0x1CD9E '2568' + BlockMosaic24 0x1CD9F '12568' + BlockMosaic24 0x1CDA0 '3568' + BlockMosaic24 0x1CDA1 '13568' + BlockMosaic24 0x1CDA2 '23568' + BlockMosaic24 0x1CDA3 '123568' + BlockMosaic24 0x1CDA4 '4568' + BlockMosaic24 0x1CDA5 '14568' + BlockMosaic24 0x1CDA6 '24568' + BlockMosaic24 0x1CDA7 '124568' + BlockMosaic24 0x1CDA8 '34568' + BlockMosaic24 0x1CDA9 '134568' + BlockMosaic24 0x1CDAA '234568' + BlockMosaic24 0x1CDAB '1234568' + BlockMosaic24 0x1CDAC '178' + BlockMosaic24 0x1CDAD '278' + BlockMosaic24 0x1CDAE '1278' + BlockMosaic24 0x1CDAF '378' + BlockMosaic24 0x1CDB0 '1378' + BlockMosaic24 0x1CDB1 '2378' + BlockMosaic24 0x1CDB2 '12378' + BlockMosaic24 0x1CDB3 '478' + BlockMosaic24 0x1CDB4 '1478' + BlockMosaic24 0x1CDB5 '2478' + BlockMosaic24 0x1CDB6 '12478' + BlockMosaic24 0x1CDB7 '3478' + BlockMosaic24 0x1CDB8 '13478' + BlockMosaic24 0x1CDB9 '23478' + BlockMosaic24 0x1CDBA '123478' + BlockMosaic24 0x1CDBB '578' + BlockMosaic24 0x1CDBC '1578' + BlockMosaic24 0x1CDBD '2578' + BlockMosaic24 0x1CDBE '12578' + BlockMosaic24 0x1CDBF '3578' + BlockMosaic24 0x1CDC0 '13578' + BlockMosaic24 0x1CDC1 '23578' + BlockMosaic24 0x1CDC2 '123578' + BlockMosaic24 0x1CDC3 '4578' + BlockMosaic24 0x1CDC4 '14578' + BlockMosaic24 0x1CDC5 '24578' + BlockMosaic24 0x1CDC6 '124578' + BlockMosaic24 0x1CDC7 '34578' + BlockMosaic24 0x1CDC8 '134578' + BlockMosaic24 0x1CDC9 '234578' + BlockMosaic24 0x1CDCA '1234578' + BlockMosaic24 0x1CDCB '678' + BlockMosaic24 0x1CDCC '1678' + BlockMosaic24 0x1CDCD '2678' + BlockMosaic24 0x1CDCE '12678' + BlockMosaic24 0x1CDCF '3678' + BlockMosaic24 0x1CDD0 '13678' + BlockMosaic24 0x1CDD1 '23678' + BlockMosaic24 0x1CDD2 '123678' + BlockMosaic24 0x1CDD3 '4678' + BlockMosaic24 0x1CDD4 '14678' + BlockMosaic24 0x1CDD5 '24678' + BlockMosaic24 0x1CDD6 '124678' + BlockMosaic24 0x1CDD7 '34678' + BlockMosaic24 0x1CDD8 '134678' + BlockMosaic24 0x1CDD9 '234678' + BlockMosaic24 0x1CDDA '1234678' + BlockMosaic24 0x1CDDB '15678' + BlockMosaic24 0x1CDDC '25678' + BlockMosaic24 0x1CDDD '125678' + BlockMosaic24 0x1CDDE '35678' + BlockMosaic24 0x1CDDF '235678' + BlockMosaic24 0x1CDE0 '1235678' + BlockMosaic24 0x1CDE1 '45678' + BlockMosaic24 0x1CDE2 '145678' + BlockMosaic24 0x1CDE3 '1245678' + BlockMosaic24 0x1CDE4 '1345678' + BlockMosaic24 0x1CDE5 '2345678' + + BlockMosaic 0x2429 4 8 {0 2 5 7 8 10 13 15 16 18 21 23 24 26 29 31} + BlockMosaic 0x1FB95 4 4 {0 2 5 7 8 10 13 15} + BlockMosaic 0x1FB96 4 4 {1 3 4 6 9 11 12 14} + BlockMosaic 0x1FB97 4 4 {4 5 6 7 12 13 14 15} diff --git a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl index f447b51c3a..845fc90a3b 100644 --- a/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/checking-marks.ptl @@ -61,17 +61,17 @@ glyph-block Symbol-Pictograph-Checking-Marks : begin do "Ext angle brackets" define Geom : GeometricDim Width Width - define lightSw : UnicodeWeightGrade 3 Geom.Scalar define mediumSw : UnicodeWeightGrade 5 Geom.Scalar define heavySw : UnicodeWeightGrade 9 Geom.Scalar + define xHeavySw : UnicodeWeightGrade 11 Geom.Scalar define ExtBracketConfig : list - list 0x276C lightSw 1 - list 0x276D lightSw 0 - list 0x276E mediumSw 1 - list 0x276F mediumSw 0 - list 0x2770 heavySw 1 - list 0x2771 heavySw 0 + list 0x276C mediumSw 1 + list 0x276D mediumSw 0 + list 0x276E heavySw 1 + list 0x276F heavySw 0 + list 0x2770 xHeavySw 1 + list 0x2771 xHeavySw 0 foreach {unicode sw op} [items-of ExtBracketConfig] : begin create-glyph [NameUni unicode] unicode : glyph-proc local cor : DiagCor (PictTop - PictBot) (2 * (RightSB - SB)) diff --git a/packages/font-glyphs/src/symbol/pictograph/faces.ptl b/packages/font-glyphs/src/symbol/pictograph/faces.ptl index 2fd9dacb8f..b60425d4a0 100644 --- a/packages/font-glyphs/src/symbol/pictograph/faces.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/faces.ptl @@ -62,6 +62,12 @@ glyph-block Symbol-Pictograph-Faces : begin FaceRing OShape SmileFace 0 : 0.6 * (faceWidth - faceStroke * 2) + create-glyph [MangleName 'blackNeutralFace'] [MangleUnicode 0x1CC6F] : glyph-proc + set-width MosaicWidth + include : difference + FaceRing OShapeOutline + SmileFace 0 : 0.6 * (faceWidth - faceStroke * 2) + create-glyph [MangleName 'mouthlessFace'] [MangleUnicode 0x1F636] : glyph-proc set-width MosaicWidth include : union diff --git a/packages/font-glyphs/src/symbol/pictograph/powerline-and-gui.ptl b/packages/font-glyphs/src/symbol/pictograph/powerline-and-gui.ptl index 7f020facfa..175d37f891 100644 --- a/packages/font-glyphs/src/symbol/pictograph/powerline-and-gui.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/powerline-and-gui.ptl @@ -153,8 +153,8 @@ glyph-block Symbol-Pictograph-Powerline-And-GUI : begin MosaicWidthMask RunningManBody (-MosaicWidth) - define [FolderBody xOffset] : begin - local Kit : StickFigureKit [BoxN 2] [Translate xOffset 0] [AdviceStroke 4] + define [FolderBody xOffset box] : begin + local Kit : StickFigureKit box [Translate xOffset 0] [AdviceStroke 4] return : union Kit.RoundSeg (0 / 16) (1 / 8) (0 / 16) (11 / 16) Kit.RoundSeg (0 / 16) (11 / 16) (3 / 16) (7 / 8) 1 1 @@ -168,13 +168,22 @@ glyph-block Symbol-Pictograph-Powerline-And-GUI : begin set-width MosaicWidth include : intersection MosaicWidthMask - FolderBody 0 + FolderBody 0 [BoxN 2] create-glyph [MangleName 'folderRight'] [MangleUnicode 0x1FBBA] : glyph-proc set-width MosaicWidth include : intersection MosaicWidthMask - FolderBody (-MosaicWidth) + FolderBody (-MosaicWidth) [BoxN 2] + + create-glyph [MangleName 'folder'] [MangleUnicode 0x1F5C0] : glyph-proc + set-width MosaicWidth + local hbox : new Box + mix SymbolMid uiFigTop (0.5 * MosaicWidthScalar) + mix SymbolMid uiFigBot (0.5 * MosaicWidthScalar) + SB * (0.5 * MosaicWidthScalar) + MosaicWidth - SB * (0.5 * MosaicWidthScalar) + include : FolderBody 0 hbox define [PointingHandBody xOffset] : begin return : PointingHandShape [BoxN 3] [Translate xOffset 0] [AdviceStroke 4] @@ -202,6 +211,7 @@ glyph-block Symbol-Pictograph-Powerline-And-GUI : begin set scaffold.top uiFigTop set scaffold.bot uiFigBot set scaffold.xMiddle : MosaicWidth / 2 + set scaffold.yMiddle : mix uiFigBot uiFigTop 0.5 set scaffold.headSize : (uiFigTop - uiFigBot) / 2.5 set scaffold.legSize : (Middle - SB) * 2 set scaffold.armSize : (Middle - SB / 2) * 2 @@ -356,6 +366,7 @@ glyph-block Symbol-Pictograph-Powerline-And-GUI : begin set scaffold.width : (Middle - SB) * 2 * [Math.pow (MosaicWidth / Width) 0.5] set scaffold.left : (MosaicWidth / 2) - scaffold.width / 2 + scaffold.stroke / 2 set scaffold.right : (MosaicWidth / 2) + scaffold.width / 2 - scaffold.stroke / 2 + define [StrokeV x yt yb] : spiro-outline corner x (yt - scaffold.gap) corner (x + scaffold.stroke) (yt - scaffold.gap - scaffold.stroke) diff --git a/packages/font-glyphs/src/symbol/punctuation/brackets.ptl b/packages/font-glyphs/src/symbol/punctuation/brackets.ptl index b879822d44..810949d037 100644 --- a/packages/font-glyphs/src/symbol/punctuation/brackets.ptl +++ b/packages/font-glyphs/src/symbol/punctuation/brackets.ptl @@ -164,7 +164,7 @@ glyph-block Symbol-Punctuation-Brackets : begin create-glyph 'ligExtBracketLeft' : glyph-proc Joining.set currentGlyph Joining.Classes.Right - include : Bracket.Shape ParenTop ParenBot (Middle - [HSwToV HalfStroke]) [mix SB RightSB DesignParameters.bracketInside] + include : Bracket.Shape ParenTop ParenBot (Middle - [HSwToV HalfStroke]) Width create-glyph 'bracketLeftUpper' 0x23A1 : glyph-proc include : ForceUpright @@ -204,6 +204,8 @@ glyph-block Symbol-Punctuation-Brackets : begin HBar.m hDim.l hDim.r [mix ParenBot ParenTop 0.5] VBar.l hDim.l ParenBot ParenTop + create-glyph 'smallBracketLeft' null : Bracket.Shape (XH / CAP * ParenTop) (XH / CAP * ParenBot) + turned 'bracketRight' ']' 'bracketLeft' Middle SymbolMid turned 'bracketRightUHalf' 0x2E23 'bracketLeftLHalf' Middle SymbolMid turned 'bracketRightLHalf' 0x2E25 'bracketLeftUHalf' Middle SymbolMid @@ -227,12 +229,12 @@ glyph-block Symbol-Punctuation-Brackets : begin (ParenTop - SymbolMid - Stroke * 1.5) / 2 return : object parenCenter radius - export : define [UpperHalfShape top bottom sw pExt] : glyph-proc + export : define [UpperHalfShape top bottom sw ext] : glyph-proc define [object parenCenter radius] : Dim define xIns : mix SB RightSB DesignParameters.braceInside define xTip : mix SB RightSB DesignParameters.braceOutside include : dispiro - flat ((1 + [fallback pExt 0]) * xIns) top [widths.center.heading sw Leftward] + flat (xIns + [fallback ext 0]) top [widths.center.heading sw Leftward] curl (xIns - 0.1) top [heading Leftward] archv flat parenCenter (top - radius) [heading Downward] @@ -240,12 +242,12 @@ glyph-block Symbol-Punctuation-Brackets : begin arcvh straight.left.end xTip bottom [heading Leftward] - export : define [LowerHalfShape top bottom sw pExt] : glyph-proc + export : define [LowerHalfShape top bottom sw ext] : glyph-proc define [object parenCenter radius] : Dim define xIns : mix SB RightSB DesignParameters.braceInside define xTip : mix SB RightSB DesignParameters.braceOutside include : dispiro - flat ((1 + [fallback pExt 0]) * xIns) bottom [widths.center.heading sw Leftward] + flat (xIns + [fallback ext 0]) bottom [widths.center.heading sw Leftward] curl (xIns - 0.1) bottom [heading Leftward] archv flat parenCenter (bottom + radius) [heading Upward] @@ -278,7 +280,7 @@ glyph-block Symbol-Punctuation-Brackets : begin ###### - export : define [CurlyShape sw pFlatIn pFlatOut pExt] : glyph-proc + export : define [CurlyShape sw pFlatIn pFlatOut ext] : glyph-proc local hs : sw / 2 local xIns : mix SB RightSB DesignParameters.braceInside local xOus : mix SB RightSB DesignParameters.braceOutside @@ -296,7 +298,7 @@ glyph-block Symbol-Punctuation-Brackets : begin local fine : sw * CThin include : dispiro - flat (xIns * (1 + pExt)) (top - hs) [widths.center.heading sw Leftward] + flat (xIns + [fallback ext 0]) (top - hs) [widths.center.heading sw Leftward] curl (xIns - flatLengthIn) (top - hs) [heading Leftward] archv.superness (2.2 + pFlatIn) g4.down.mid m1 (top - radius1) [heading Downward] @@ -307,7 +309,7 @@ glyph-block Symbol-Punctuation-Brackets : begin curl xOus (SymbolMid + (sw - fine) / 2) [heading Leftward] include : dispiro - flat (xIns * (1 + pExt)) (bot + hs) [widths.center.heading sw Leftward] + flat (xIns + [fallback ext 0]) (bot + hs) [widths.center.heading sw Leftward] curl (xIns - flatLengthIn) (bot + hs) [heading Leftward] archv.superness (2.2 + pFlatIn) g4.up.mid m1 (bot + radius1) [heading Upward] @@ -330,8 +332,8 @@ glyph-block Symbol-Punctuation-Brackets : begin create-glyph 'ligExtBraceLeft.straight' : glyph-proc Joining.set currentGlyph Joining.Classes.Right - include : Brace.UpperHalfShape top SymbolMid Stroke 1 - include : Brace.LowerHalfShape SymbolMid bot Stroke 1 + include : Brace.UpperHalfShape top SymbolMid Stroke Width + include : Brace.LowerHalfShape SymbolMid bot Stroke Width create-glyph 'ligExtBraceRight.straight' : glyph-proc include [refer-glyph 'ligExtBraceLeft.straight'] AS_BASE ALSO_METRICS include : FlipAround Middle SymbolMid @@ -380,12 +382,12 @@ glyph-block Symbol-Punctuation-Brackets : begin curlyFlatBoundary { 0.25 0.05 } foreach { suffix { pFlatIn pFlatOut } } [Object.entries CurlyBraceConfig] : do - create-glyph "braceLeft.\(suffix)" : Brace.CurlyShape Stroke pFlatIn pFlatOut 0 + create-glyph "braceLeft.\(suffix)" : Brace.CurlyShape Stroke pFlatIn pFlatOut turned "braceRight.\(suffix)" null "braceLeft.\(suffix)" Middle SymbolMid create-glyph "ligExtBraceLeft.\(suffix)" : glyph-proc Joining.set currentGlyph Joining.Classes.Right - include : Brace.CurlyShape Stroke pFlatIn pFlatOut 1 + include : Brace.CurlyShape Stroke pFlatIn pFlatOut Width create-glyph "ligExtBraceRight.\(suffix)" : glyph-proc include [refer-glyph "ligExtBraceLeft.\(suffix)"] AS_BASE ALSO_METRICS include : FlipAround Middle SymbolMid @@ -396,7 +398,7 @@ glyph-block Symbol-Punctuation-Brackets : begin local xIns : mix SB RightSB DesignParameters.braceInside local top : mix SymbolMid ParenTop (1 + DesignParameters.braceOvershoot) local bot : mix SymbolMid ParenBot (1 + DesignParameters.braceOvershoot) - include : Brace.CurlyShape fine pFlatIn pFlatOut 0 + include : Brace.CurlyShape fine pFlatIn pFlatOut include : VBar.r xIns (bot + fine / 2) (top - fine / 2) fine turned "whiteBraceRight.\(suffix)" null "whiteBraceLeft.\(suffix)" Middle SymbolMid diff --git a/packages/font-kits/package.json b/packages/font-kits/package.json index b7d2313873..fca3b3dccb 100644 --- a/packages/font-kits/package.json +++ b/packages/font-kits/package.json @@ -1,14 +1,14 @@ { "name": "@iosevka/font-kits", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { "./boole-kit": "./src/boole-kit.mjs", "./spiro-kit": "./src/spiro-kit.mjs" }, "dependencies": { - "@iosevka/geometry": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/util": "28.1.0" + "@iosevka/geometry": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/util": "29.0.0" } } diff --git a/packages/font-kits/src/boole-kit.mjs b/packages/font-kits/src/boole-kit.mjs index 584148c289..c0c5284926 100644 --- a/packages/font-kits/src/boole-kit.mjs +++ b/packages/font-kits/src/boole-kit.mjs @@ -22,8 +22,8 @@ class BooleImpl { return glyph.includeGeometry( new TransformedGeometry( new BooleanGeometry(this.operator, operandGeometries), - forwardGizmo - ) + forwardGizmo, + ), ); } } @@ -37,6 +37,6 @@ export function SetupBuilders(bindings) { return { union: union, intersection: intersection, - difference: difference + difference: difference, }; } diff --git a/packages/font-kits/src/spiro-kit.mjs b/packages/font-kits/src/spiro-kit.mjs index ff6dcb04b6..89a4d656e6 100644 --- a/packages/font-kits/src/spiro-kit.mjs +++ b/packages/font-kits/src/spiro-kit.mjs @@ -1,9 +1,9 @@ import { DiSpiroGeometry, SpiroGeometry } from "@iosevka/geometry"; import { BiKnotCollector, - ControlKnot, + UserControlKnot, Interpolator, - TerminateInstruction + TerminateInstruction, } from "@iosevka/geometry/spiro-control"; import { bez3, fallback, mix } from "@iosevka/util"; @@ -44,7 +44,11 @@ class SpiroOutlineImpl extends SpiroImplBase { applyToGlyph(glyph) { const { gizmo, collector } = this.createCollector(glyph); return glyph.includeGeometry( - new SpiroGeometry(gizmo, collector.closed, collector.controls) + new SpiroGeometry( + gizmo, + collector.closed, + collector.controls.map(k => k.toMono()), + ), ); } } @@ -54,7 +58,7 @@ class DiSpiroProxy { gizmo, collector.contrast, collector.closed, - collector.controls + collector.controls, ); this.m_origKnots = collector.controls; } @@ -75,7 +79,7 @@ export function SetupBuilders(bindings) { return (x, y, f) => { if (!isFinite(x)) throw new TypeError("NaN detected for X"); if (!isFinite(y)) throw new TypeError("NaN detected for Y"); - return new ControlKnot(type, x, y, f); + return new UserControlKnot(type, x, y, f); }; } const g4 = KnotType("g4"); @@ -91,18 +95,18 @@ export function SetupBuilders(bindings) { { name: "up", x: 0, y: 1 }, { name: "down", x: 0, y: -1 }, { name: "left", x: -1, y: 0 }, - { name: "right", x: 1, y: 0 } + { name: "right", x: 1, y: 0 }, ]; let adhesions = [ { name: "start", l: 0, r: 0.01 }, { name: "mid", l: -0.005, r: 0.005 }, - { name: "end", l: -0.01, r: 0 } + { name: "end", l: -0.01, r: 0 }, ]; let knotTypes = [ [g4, g4, g4], [g2, g2, g2], [corner, corner, corner], - [straight, flat, curl] + [straight, flat, curl], ]; for (const [sink, kl, kr] of knotTypes) { for (const d of directions) { @@ -110,7 +114,7 @@ export function SetupBuilders(bindings) { for (const a of adhesions) { sink[d.name][a.name] = (x, y, af) => [ kl(x + d.x * a.l, y + d.y * a.l, af), - kr(x + d.x * a.r, y + d.y * a.r, af) + kr(x + d.x * a.r, y + d.y * a.r, af), ]; sink[d.name][a.name].l = (x, y, af) => kl(x + d.x * a.l, y + d.y * a.l, af); sink[d.name][a.name].r = (x, y, af) => kr(x + d.x * a.r, y + d.y * a.r, af); @@ -206,21 +210,21 @@ export function SetupBuilders(bindings) { return g4( mix(before.x, after.x, args.rx), mix(before.y, after.y, args.ry), - fallback(args.raf, unimportant) + fallback(args.raf, unimportant), ); } function afInterpolateDelta(before, after, args) { return g4( mix(before.x, after.x, args.rx) + args.deltaX, mix(before.y, after.y, args.ry) + args.deltaY, - fallback(args.raf, unimportant) + fallback(args.raf, unimportant), ); } function afInterpolateG2(before, after, args) { return g2( mix(before.x, after.x, args.rx), mix(before.y, after.y, args.ry), - fallback(args.raf, unimportant) + fallback(args.raf, unimportant), ); } function afInterpolateThem(before, after, args) { @@ -233,9 +237,9 @@ export function SetupBuilders(bindings) { args.raf && args.raf.blend && rt !== void 0 ? args.raf.blend(rt) : args.raf - ? args.raf - : unimportant - ) + ? args.raf + : unimportant, + ), ); } return innerKnots; @@ -250,9 +254,9 @@ export function SetupBuilders(bindings) { args.raf && args.raf.blend && rt !== void 0 ? args.raf.blend(rt) : args.raf - ? args.raf - : unimportant - ) + ? args.raf + : unimportant, + ), ); } return innerKnots; @@ -264,8 +268,8 @@ export function SetupBuilders(bindings) { fallback(args.ty, g2)( mix(before.x, after.x, args.raf.rx(rt)) + args.raf.deltaX(rt), mix(before.y, after.y, args.raf.ry(rt)) + args.raf.deltaY(rt), - args.raf.modifier(rt) - ) + args.raf.modifier(rt), + ), ); } return innerKnots; @@ -296,7 +300,7 @@ export function SetupBuilders(bindings) { rs.push([ bez3(0, x1, x2, 1, j / samples), bez3(0, y1, y2, 1, j / samples), - j / samples + j / samples, ]); return alsoThruThem(rs, raf); } @@ -310,7 +314,7 @@ export function SetupBuilders(bindings) { mix(1, x1, 2 / 3), mix(1, y1, 2 / 3), fallback(_samples, 3), - raf + raf, ); } @@ -428,6 +432,6 @@ export function SetupBuilders(bindings) { arcvh, dispiro, "spiro-outline": spiroOutline, - CursiveBuilder + CursiveBuilder, }; } diff --git a/packages/font-otl/package.json b/packages/font-otl/package.json index 329d304fc3..987c190898 100644 --- a/packages/font-otl/package.json +++ b/packages/font-otl/package.json @@ -1,13 +1,13 @@ { "name": "@iosevka/font-otl", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs" }, "dependencies": { - "@iosevka/font-glyphs": "28.1.0", - "@iosevka/glyph": "28.1.0", + "@iosevka/font-glyphs": "29.0.0", + "@iosevka/glyph": "29.0.0", "toposort": "^2.0.2" } } diff --git a/packages/font-otl/src/gsub-frac.ptl b/packages/font-otl/src/gsub-frac.ptl index 9e5c899bcb..77b46dc3a8 100644 --- a/packages/font-otl/src/gsub-frac.ptl +++ b/packages/font-otl/src/gsub-frac.ptl @@ -9,10 +9,6 @@ export : define [buildFrac gsub glyphStore] : begin define frac : gsub.addCommonFeature : gsub.createFeature 'frac' define { chain-rule reverse-rule } : gsub.ChainRuleBuilder - define subSolidus : gsub.createLookup : object - .type 'gsub_single' - .substitutions : object ['solidus' 'fractionBar'] ['slash' 'fractionBar'] - define digitSet { } define numSet { } define denSet { } @@ -25,6 +21,11 @@ export : define [buildFrac gsub glyphStore] : begin numSet.push numForm denSet.push denForm + define subSolidus : gsub.createLookup : object + .type 'gsub_chaining' + .rules : list + chain-rule digitSet ({'solidus' 'slash'} ~> {'fractionBar' 'fractionBar'}) digitSet + define subDen : gsub.createLookup : object .type 'gsub_chaining' .rules : list diff --git a/packages/font-otl/src/gsub-gr.ptl b/packages/font-otl/src/gsub-gr.ptl index cef79e4aee..be6fe9b9aa 100644 --- a/packages/font-otl/src/gsub-gr.ptl +++ b/packages/font-otl/src/gsub-gr.ptl @@ -3,9 +3,8 @@ export : define [createGsubLookupFromGr gsub glyphStore gr] : begin foreach { gnSrc glyph } [glyphStore.namedEntries] : begin local gnDst : gr.get glyph local glyphDst : glyphStore.queryByName gnDst - if (glyphDst && ([glyphStore.queryUnicodeOf glyph] || [glyphStore.queryUnicodeOf glyphDst])) - set mapping.(gnSrc) gnDst - + if glyphDst : set mapping.(gnSrc) gnDst + return : gsub.createLookup {.type 'gsub_single' .substitutions mapping} export : define [buildGrFeature gsub glyphStore gr] : begin diff --git a/packages/font-otl/src/gsub-ligation.ptl b/packages/font-otl/src/gsub-ligation.ptl index 11beeafbaf..f3301b5d5a 100644 --- a/packages/font-otl/src/gsub-ligation.ptl +++ b/packages/font-otl/src/gsub-ligation.ptl @@ -976,12 +976,20 @@ define [buildLigationsImpl gsub para $LigGroup$] : begin # [| |] {| |} LigGroup "Bracket and bar" : begin CreateLigationLookup : list + if [hasLG 'brack-bar'] : chain-rule + {'bracketLeft'} ~> advance + {'bar'} ~> advance + {'bracketRight'} ~> advance if [hasLG 'brack-bar'] : chain-rule {'bracketLeft'} ~> {'ligExtBracketLeft'} {'bar'} ~> {'ligBarInsideBracketLeft'} if [hasLG 'brack-bar'] : chain-rule {'bar'} ~> {'ligBarInsideBracketRight'} {'bracketRight'} ~> {'ligExtBracketRight'} + if [hasLG 'brace-bar'] : chain-rule + {'braceLeft'} ~> advance + {'bar'} ~> advance + {'braceRight'} ~> advance if [hasLG 'brace-bar'] : chain-rule {'braceLeft'} ~> {'ligExtBraceLeft'} {'bar'} ~> {'ligBarInsideBracketLeft'} diff --git a/packages/font-otl/src/index.ptl b/packages/font-otl/src/index.ptl index 1304406691..ce8f6c833e 100644 --- a/packages/font-otl/src/index.ptl +++ b/packages/font-otl/src/index.ptl @@ -32,6 +32,9 @@ define [buildGSUB para glyphStore markGlyphs] : begin buildGrFeature gsub glyphStore Gr.Lnum buildGrFeature gsub glyphStore Gr.Onum + # Mosaic form + buildGrFeature gsub glyphStore Gr.MosaicForm + # zero is handled inside the CV/SS feature builder # As it is a cv/ss "cherry picking". diff --git a/packages/font/package.json b/packages/font/package.json index cf0b46f620..0e6a422e44 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/font", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", @@ -10,15 +10,15 @@ }, "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/font-glyphs": "28.1.0", - "@iosevka/font-otl": "28.1.0", - "@iosevka/geometry": "28.1.0", - "@iosevka/geometry-cache": "28.1.0", - "@iosevka/glyph": "28.1.0", - "@iosevka/param": "28.1.0", - "@iosevka/util": "28.1.0", + "@iosevka/font-glyphs": "29.0.0", + "@iosevka/font-otl": "29.0.0", + "@iosevka/geometry": "29.0.0", + "@iosevka/geometry-cache": "29.0.0", + "@iosevka/glyph": "29.0.0", + "@iosevka/param": "29.0.0", + "@iosevka/util": "29.0.0", "harfbuzzjs": "^0.3.4", "ot-builder": "^1.7.3", - "semver": "^7.5.4" + "semver": "^7.6.0" } } diff --git a/packages/font/src/derive-spacing.mjs b/packages/font/src/derive-spacing.mjs index 0ed815c836..85775d72cb 100644 --- a/packages/font/src/derive-spacing.mjs +++ b/packages/font/src/derive-spacing.mjs @@ -36,6 +36,7 @@ async function main(argv) { case "fontconfig-mono": case "fixed": CliProc.gcFont(font, Ot.ListGlyphStoreFactory); + validateFontConfigMono(font); await saveTTF(argv.o, font); break; default: @@ -68,18 +69,24 @@ async function deriveTerm(font) { } } -// In FontConfig, a font is considered "monospace" if and only if all encoded non-combining -// characters (AW > 0) have the same width. We use this method to validate whether our -// "Fixed" subfamilies are properly built. +// Drop the following "long" characters. async function deriveFixed_DropWideChars(font) { - const unitWidth = font.os2.xAvgCharWidth; - for (const [ch, g] of [...font.cmap.unicode.entries()]) { - const advanceWidth = g.horizontal.end - g.horizontal.start; - if (!(advanceWidth === 0 || advanceWidth === unitWidth)) font.cmap.unicode.delete(ch); - } - for (const [ch, vs, g] of [...font.cmap.vs.entries()]) { - const advanceWidth = g.horizontal.end - g.horizontal.start; - if (!(advanceWidth === 0 || advanceWidth === unitWidth)) font.cmap.vs.delete(ch, vs); + const longCharCodes = [ + 0x27f5, // LONG LEFTWARDS ARROW + 0x27f6, // LONG RIGHTWARDS ARROW + 0x27f7, // LONG LEFT RIGHT ARROW + 0x27f8, // LONG LEFTWARDS DOUBLE ARROW + 0x27f9, // LONG RIGHTWARDS DOUBLE ARROW + 0x27fa, // LONG LEFT RIGHT DOUBLE ARROW + 0x27fb, // LONG LEFTWARDS ARROW FROM BAR + 0x27fc, // LONG RIGHTWARDS ARROW FROM BAR + 0x27fd, // LONG LEFTWARDS DOUBLE ARROW FROM BAR + 0x27fe, // LONG RIGHTWARDS DOUBLE ARROW FROM BAR + 0x27ff, // LONG RIGHTWARDS SQUIGGLE ARROW + 0x2b33, // LONG LEFTWARDS SQUIGGLE ARROW + ]; + for (const ch of longCharCodes) { + font.cmap.unicode.delete(ch); } } @@ -105,3 +112,21 @@ async function deriveFixed_DropFeatures(font, argv, fFixed) { } } } + +// In FontConfig, a font is considered "monospace" if and only if all encoded non-combining +// characters (AW > 0) have the same width. We use this method to validate whether our +// "Fixed" subfamilies are properly built. +function validateFontConfigMono(font) { + let awSet = new Set(); + for (const [ch, g] of [...font.cmap.unicode.entries()]) { + const aw = g.horizontal.end - g.horizontal.start; + if (aw > 0) awSet.add(aw); + } + for (const [ch, vs, g] of [...font.cmap.vs.entries()]) { + const aw = g.horizontal.end - g.horizontal.start; + if (aw > 0) awSet.add(aw); + } + if (awSet.size > 1) { + console.error("Fixed variant has wide characters"); + } +} diff --git a/packages/font/src/finalize/gc.mjs b/packages/font/src/finalize/gc.mjs index 063b9e1524..e22afd7cf6 100644 --- a/packages/font/src/finalize/gc.mjs +++ b/packages/font/src/finalize/gc.mjs @@ -72,7 +72,7 @@ function sweepFeatures(table, accessibleLookupsIds) { const featureFiltered = { name: feature.name, tag: feature.tag, - lookups: [] + lookups: [], }; for (const l of feature.lookups) { if (accessibleLookupsIds.has(l)) featureFiltered.lookups.push(l); @@ -242,7 +242,7 @@ function analyzeReferenceGraph(glyphStore, markedGlyphs) { function traverseReferenceTree(depthMap, aliasMap, g, d) { depthMapSet(depthMap, g, d); - let refs = g.geometry.asReferences(); + let refs = g.geometry.toReferences(); if (!refs) return; for (const sr of refs) { @@ -282,7 +282,7 @@ function collectAliasMap(aliasMap) { if (!m) { m = { representative: null, - aliases: new Map() + aliases: new Map(), }; aliasResolution.set(terminal.glyph, m); } @@ -319,7 +319,7 @@ function alterGeometryAndOptimize(collection) { cluster.representative.glyph.geometry = new Geometry.TransformedGeometry( gT.geometry, - Transform.Translate(cluster.representative.x, cluster.representative.y) + Transform.Translate(cluster.representative.x, cluster.representative.y), ); for (const [g, tf] of cluster.aliases) { @@ -327,12 +327,12 @@ function alterGeometryAndOptimize(collection) { g.geometry = new Geometry.ReferenceGeometry( cluster.representative.glyph, tf.x - cluster.representative.x, - tf.y - cluster.representative.y + tf.y - cluster.representative.y, ); optimized.set(g, { glyph: cluster.representative.glyph, x: tf.x - cluster.representative.x, - y: tf.y - cluster.representative.y + y: tf.y - cluster.representative.y, }); } } @@ -359,7 +359,7 @@ function rectifyGlyphAndMarkComponents(glyphStore, aliasMap, markedGlyphs, memo, if (memo.has(g)) return; memo.add(g); - let refs = g.geometry.asReferences(); + let refs = g.geometry.toReferences(); if (refs) { let parts = []; for (let sr of refs) { @@ -385,7 +385,7 @@ function rectifyGlyphAndMarkComponents(glyphStore, aliasMap, markedGlyphs, memo, markedGlyphs, memo, sr.glyph, - d + 0x10000 + d + 0x10000, ); parts.push(new Geometry.ReferenceGeometry(sr.glyph, sr.x, sr.y)); } diff --git a/packages/font/src/finalize/glyphs.mjs b/packages/font/src/finalize/glyphs.mjs index 45803a1d04..7dafc6c8be 100644 --- a/packages/font/src/finalize/glyphs.mjs +++ b/packages/font/src/finalize/glyphs.mjs @@ -29,7 +29,7 @@ function regulateGlyphStore(cache, skew, glyphStore) { function regulateCompositeGlyph(glyphStore, memo, g) { if (memo.has(g)) return memo.get(g); - let refs = g.geometry.asReferences(); + let refs = g.geometry.toReferences(); if (!refs) return memoSet(memo, g, false); for (const sr of refs) { @@ -65,13 +65,13 @@ function flattenSimpleGlyph(cache, skew, g) { const tfForward = g.gizmo ? g.gizmo : new Transform(1, +skew, 0, 1, 0, 0); gSimplified = new Geom.TransformedGeometry( new Geom.SimplifyGeometry(new Geom.TransformedGeometry(g.geometry, tfBack)), - tfForward + tfForward, ); } else { gSimplified = new Geom.SimplifyGeometry(g.geometry); } - const cs = gSimplified.asContours(); + const cs = gSimplified.toContours(); g.clearGeometry(); g.includeContours(cs); if (ck) cache.saveGF(ck, cs); diff --git a/packages/font/src/finalize/index.mjs b/packages/font/src/finalize/index.mjs index dc68812aed..e360bc949f 100644 --- a/packages/font/src/finalize/index.mjs +++ b/packages/font/src/finalize/index.mjs @@ -3,6 +3,15 @@ import { Nwid, Wwid } from "@iosevka/glyph/relation"; import { gcFont } from "./gc.mjs"; import { finalizeGlyphs } from "./glyphs.mjs"; +export function finalizeFont(cache, para, glyphStore, excludedCodePoints, restFont) { + assignGrAndCodeRank(glyphStore, Wwid, Nwid); + assignSubRank(glyphStore); + glyphStore = gcFont(glyphStore, excludedCodePoints, restFont); + glyphStore = finalizeGlyphs(cache, para, glyphStore); + validateMonospace(para, glyphStore); + return glyphStore; +} + function assignGrAndCodeRank(glyphStore, ...flatteners) { for (const g of glyphStore.glyphs()) { g.codeRank = 0xffffffff; @@ -32,11 +41,3 @@ function validateMonospace(para, glyphStore) { throw new Error("Unreachable! Building monospace with more than 2 character widths"); } } -export function finalizeFont(cache, para, glyphStore, excludedCodePoints, restFont) { - assignGrAndCodeRank(glyphStore, Nwid, Wwid); - assignSubRank(glyphStore); - glyphStore = gcFont(glyphStore, excludedCodePoints, restFont); - glyphStore = finalizeGlyphs(cache, para, glyphStore); - validateMonospace(para, glyphStore); - return glyphStore; -} diff --git a/packages/font/src/font-io/index.mjs b/packages/font/src/font-io/index.mjs index 286136d072..0e20b40179 100644 --- a/packages/font/src/font-io/index.mjs +++ b/packages/font/src/font-io/index.mjs @@ -9,7 +9,7 @@ export function CreateEmptyFont(argv) { os2: new Ot.Os2.Table(4), post: new Ot.Post.Table(argv.featureControl.exportGlyphNames ? 2 : 3, 0), maxp: Ot.Maxp.Table.TrueType(), - name: new Ot.Name.Table() + name: new Ot.Name.Table(), }; if (process.env.SOURCE_DATE_EPOCH) { font.head.created = new Date(process.env.SOURCE_DATE_EPOCH * 1000); @@ -34,7 +34,7 @@ export function parseTTF(buf) { export function buildTTF(font) { const sfnt = FontIo.writeFont(font, { glyphStore: { statOs2XAvgCharWidth: false }, - generateDummyDigitalSignature: true + generateDummyDigitalSignature: true, }); const buf = FontIo.writeSfntOtf(sfnt); return buf; diff --git a/packages/font/src/hb-compat-ligature/index.mjs b/packages/font/src/hb-compat-ligature/index.mjs index 1ce887e54e..a341eec8da 100644 --- a/packages/font/src/hb-compat-ligature/index.mjs +++ b/packages/font/src/hb-compat-ligature/index.mjs @@ -46,8 +46,8 @@ export async function buildCompatLigatures(para, font) { ligature.geometry.items.push( new Ot.Glyph.TtReference( glyphList.at(component.g), - Ot.Glyph.Transform2X3.Translate(x, y) - ) + Ot.Glyph.Transform2X3.Translate(x, y), + ), ); xCursor += component.ax; diff --git a/packages/font/src/index.mjs b/packages/font/src/index.mjs index 4f73e65aac..4af82f1416 100644 --- a/packages/font/src/index.mjs +++ b/packages/font/src/index.mjs @@ -50,7 +50,7 @@ async function getParameters(argv) { await tryParseToml(WEIGHTS_TOML), await tryParseToml(WIDTHS_TOML), await tryParseToml(SLOPES_TOML), - fs.existsSync(PRIVATE_TOML) ? await tryParseToml(PRIVATE_TOML) : {} + fs.existsSync(PRIVATE_TOML) ? await tryParseToml(PRIVATE_TOML) : {}, ); const rawVariantsData = await tryParseToml(VARIANTS_TOML); const rawLigationData = await tryParseToml(LIGATIONS_TOML); @@ -63,7 +63,7 @@ async function getParameters(argv) { if (argv.metricOverride) applyMetricOverride(para, argv.metricOverride, argv); para.naming = { miscNames: para.naming, - ...createNamingDictFromArgv(argv) + ...createNamingDictFromArgv(argv), }; return para; } @@ -83,7 +83,7 @@ async function tryParseToml(str) { return Toml.parse(await fs.promises.readFile(str, "utf-8")); } catch (e) { throw new Error( - `Failed to parse configuration file ${str}.\nPlease validate whether there's syntax error.\n${e}` + `Failed to parse configuration file ${str}.\nPlease validate whether there's syntax error.\n${e}`, ); } } @@ -98,7 +98,7 @@ async function saveCharMap(argv, glyphStore) { charMap.push([ gn, Array.from(glyphStore.queryUnicodeOfName(gn) || []), - ...createGrDisplaySheet(glyphStore, gn) + ...createGrDisplaySheet(glyphStore, gn), ]); } await fs.promises.writeFile(argv.oCharMap, zlib.gzipSync(encode(charMap))); diff --git a/packages/font/src/naming/index.mjs b/packages/font/src/naming/index.mjs index d259e4c8be..b21eaa2674 100644 --- a/packages/font/src/naming/index.mjs +++ b/packages/font/src/naming/index.mjs @@ -7,7 +7,7 @@ export function createNamingDictFromArgv(argv) { version: argv.menu.version, weight: argv.menu.weight - 0, width: argv.menu.width - 0, - slope: argv.menu.slope + slope: argv.menu.slope, }; } @@ -105,7 +105,7 @@ export function assignFontNames(font, naming, isQuasiProportional) { [Ot.Head.Flags.LeftSidebearingAtX0, true], [Ot.Head.Flags.InstructionsMayDependOnPointSize, true], [Ot.Head.Flags.ForcePpemToBeInteger, true], - [Ot.Head.Flags.InstructionMayAlterAdvanceWidth, true] + [Ot.Head.Flags.InstructionMayAlterAdvanceWidth, true], ); } @@ -139,7 +139,7 @@ function getStyleLinkedStyles(weight, width, slope) { return { style: getStyle(linkWeight, 5, linkSlope), familySuffix: getStyle(nameSuffixWeight, nameSuffixWidth, nameSuffixSlope), - familySuffixShort: getShortStyle(nameSuffixWeight, nameSuffixWidth, nameSuffixSlope) + familySuffixShort: getShortStyle(nameSuffixWeight, nameSuffixWidth, nameSuffixSlope), }; } @@ -185,7 +185,7 @@ const weightToMenuStyleMap = { 600: "Semibold", 700: "Bold", 800: "Extrabold", - 900: "Heavy" + 900: "Heavy", }; const widthToMenuStyleMap = { 1: "Ultra-Condensed", @@ -196,12 +196,12 @@ const widthToMenuStyleMap = { 6: "Semi-Extended", 7: "Extended", 8: "Extra-Extended", - 9: "Ultra-Extended" + 9: "Ultra-Extended", }; const slopeToMenuStyleMap = { normal: "", italic: "Italic", - oblique: "Oblique" + oblique: "Oblique", }; const weightToMenuStyleMapShort = { 100: "Th", @@ -214,7 +214,7 @@ const weightToMenuStyleMapShort = { 600: "SmBd", 700: "Bd", 800: "XBd", - 900: "Hv" + 900: "Hv", }; const widthToMenuStyleMapShort = { 1: "UltCn", @@ -225,12 +225,12 @@ const widthToMenuStyleMapShort = { 6: "SmEx", 7: "Ex", 8: "XEx", - 9: "UltEx" + 9: "UltEx", }; const slopeToMenuStyleMapShort = { normal: "", italic: "It", - oblique: "Obl" + oblique: "Obl", }; ///////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/font/src/otd-conv/glyph-name.mjs b/packages/font/src/otd-conv/glyph-name.mjs index 06427d0abf..c0c8e2d9b1 100644 --- a/packages/font/src/otd-conv/glyph-name.mjs +++ b/packages/font/src/otd-conv/glyph-name.mjs @@ -257,7 +257,7 @@ const ApplePostNames = new Map([ [0x107, "cacute"], [0x10c, "Ccaron"], [0x10d, "ccaron"], - [0x111, "dcroat"] + [0x111, "dcroat"], /* spell-checker: enable */ ]); diff --git a/packages/font/src/otd-conv/glyphs.mjs b/packages/font/src/otd-conv/glyphs.mjs index 6b16c97fe0..b8722c3a36 100644 --- a/packages/font/src/otd-conv/glyphs.mjs +++ b/packages/font/src/otd-conv/glyphs.mjs @@ -5,14 +5,36 @@ import { Ot } from "ot-builder"; import * as GlyphName from "./glyph-name.mjs"; -function byRank([gna, a], [gnb, b]) { - return ( - b.glyphRank - a.glyphRank || - a.grRank - b.grRank || - a.codeRank - b.codeRank || - a.subRank - b.subRank - ); +export function convertGlyphs(gsOrig) { + const sortedEntries = Array.from(gsOrig.namedEntries(Gr.Nwid, Gr.Wwid)).sort(byRank); + const gs = new MappedGlyphStore(); + const cmap = new Ot.Cmap.Table(); + + // initialize + for (const [name, gSrc] of sortedEntries) { + gs.declare(name, gSrc); + const us = gsOrig.queryUnicodeOf(gSrc); + if (us) { + for (const u of us) { + if (!(isFinite(u - 0) && u)) continue; + cmap.unicode.set(u, gs.queryBySourceGlyph(gSrc)); + gs.setPrimaryUnicode(gSrc, u); + } + } + } + + // fill geometry + for (const [name, gSrc] of sortedEntries) gs.fill(name, gSrc); + + // fill VS + addVsLinks(gsOrig, gs, cmap, Gr.VS01, 0xfe00); + + // fill glyph names + gs.fillOtGlyphNames(); + + return { glyphs: gs, cmap }; } + class MappedGlyphStore { constructor() { this.m_nameMapping = new Map(); @@ -48,11 +70,11 @@ class MappedGlyphStore { // Fill Geometry if (source.geometry.measureComplexity() & Geom.CPLX_NON_EMPTY) { - const rs = source.geometry.asReferences(); + const rs = source.geometry.toReferences(); if (rs) { this.fillReferences(g, rs); } else { - this.fillContours(g, source.geometry.asContours()); + this.fillContours(g, source.geometry.toContours()); } } } @@ -61,7 +83,7 @@ class MappedGlyphStore { let rev = new Map(); for (const [u, g] of this.m_primaryUnicodeMapping) rev.set(g, u); const glyphsInBuildOrder = Array.from(this.m_mapping).sort( - ([a], [b]) => a.subRank - b.subRank + ([a], [b]) => a.subRank - b.subRank, ); for (const [gSrc, gOt] of glyphsInBuildOrder) gOt.name = undefined; @@ -79,7 +101,7 @@ class MappedGlyphStore { gSrcBase, gOtBase, this.m_nameMapping, - conflictSet + conflictSet, ); } } while (nNewNames > 0); @@ -92,7 +114,7 @@ class MappedGlyphStore { gSrcBase, gOtBase, this.m_nameMapping, - conflictSet + conflictSet, ); } } while (nNewNames > 0); @@ -140,8 +162,8 @@ class MappedGlyphStore { z.y, z.type === Point.Type.Quadratic ? Ot.Glyph.PointType.Quad - : Ot.Glyph.PointType.Corner - ) + : Ot.Glyph.PointType.Corner, + ), ); } cs.contours.push(c1); @@ -150,36 +172,6 @@ class MappedGlyphStore { } } -export function convertGlyphs(gsOrig) { - const sortedEntries = Array.from(gsOrig.namedEntries(Gr.Nwid, Gr.Wwid)).sort(byRank); - const gs = new MappedGlyphStore(); - const cmap = new Ot.Cmap.Table(); - - // initialize - for (const [name, gSrc] of sortedEntries) { - gs.declare(name, gSrc); - const us = gsOrig.queryUnicodeOf(gSrc); - if (us) { - for (const u of us) { - if (!(isFinite(u - 0) && u)) continue; - cmap.unicode.set(u, gs.queryBySourceGlyph(gSrc)); - gs.setPrimaryUnicode(gSrc, u); - } - } - } - - // fill geometry - for (const [name, gSrc] of sortedEntries) gs.fill(name, gSrc); - - // fill VS - addVsLinks(gsOrig, gs, cmap, Gr.VS01, 0xfe00); - - // fill glyph names - gs.fillOtGlyphNames(); - - return { glyphs: gs, cmap }; -} - function addVsLinks(gsOrig, gs, cmap, gr, vs) { for (const gSrc of gsOrig.glyphs()) { const us = gsOrig.queryUnicodeOf(gSrc); @@ -200,3 +192,12 @@ function addVsLinks(gsOrig, gs, cmap, gr, vs) { } } } + +function byRank([gna, a], [gnb, b]) { + return ( + b.glyphRank - a.glyphRank || + a.grRank - b.grRank || + a.codeRank - b.codeRank || + a.subRank - b.subRank + ); +} diff --git a/packages/font/src/otd-conv/layout.mjs b/packages/font/src/otd-conv/layout.mjs index 0621e3b7f1..5340a8e201 100644 --- a/packages/font/src/otd-conv/layout.mjs +++ b/packages/font/src/otd-conv/layout.mjs @@ -89,7 +89,7 @@ class ScriptLanguageStore { } return { requiredFeature: this.featureStore.query(data.requiredFeature) || null, - features: features + features: features, }; } } @@ -162,7 +162,7 @@ const GsubSingleHandler = { const to = store.glyphs.queryByName(st[k]); if (from && to) dst.mapping.set(from, to); } - } + }, }; const GsubMultipleHandler = { init() { @@ -176,13 +176,13 @@ const GsubMultipleHandler = { if (!from || !to) continue; dst.mapping.set(from, to); } - } + }, }; const GsubAlternateHandler = { init() { return new Ot.Gsub.Alternate(); }, - fill: GsubMultipleHandler.fill + fill: GsubMultipleHandler.fill, }; const GsubLigatureHandler = { init() { @@ -196,7 +196,7 @@ const GsubLigatureHandler = { if (!from || !to) continue; dst.mapping.push({ from, to }); } - } + }, }; const GsubChainingHandler = { init() { @@ -221,7 +221,7 @@ const GsubChainingHandler = { } dst.rules.push({ match, inputBegins, inputEnds, applications }); } - } + }, }; const GsubReverseHandler = { init() { @@ -257,7 +257,7 @@ const GsubReverseHandler = { } dst.rules.push({ match, doSubAt, replacement }); } - } + }, }; function mapGlyphListAll(gl, store) { @@ -285,7 +285,7 @@ const GsubHandlers = { gsub_alternate: GsubAlternateHandler, gsub_ligature: GsubLigatureHandler, gsub_chaining: GsubChainingHandler, - gsub_reverse: GsubReverseHandler + gsub_reverse: GsubReverseHandler, }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -298,7 +298,7 @@ const GposMarkToBaseHandler = { const mm = collectClassMap(src.marks); dst.marks = convertMarkRecords(src.marks, mm, store); dst.bases = convertBaseRecords(src.bases, mm, store); - } + }, }; const GposMarkToMarkHandler = { init() { @@ -308,7 +308,7 @@ const GposMarkToMarkHandler = { const mm = collectClassMap(src.marks); dst.marks = convertMarkRecords(src.marks, mm, store); dst.baseMarks = convertBaseRecords(src.bases, mm, store); - } + }, }; function collectClassMap(marks) { let n = 0; @@ -350,5 +350,5 @@ function convertBaseRecords(bases, mm, store) { } const GposHandlers = { gpos_mark_to_base: GposMarkToBaseHandler, - gpos_mark_to_mark: GposMarkToMarkHandler + gpos_mark_to_mark: GposMarkToMarkHandler, }; diff --git a/packages/font/src/ttfa-controls/index.mjs b/packages/font/src/ttfa-controls/index.mjs index 0e1255baaf..5c816d33f3 100644 --- a/packages/font/src/ttfa-controls/index.mjs +++ b/packages/font/src/ttfa-controls/index.mjs @@ -68,7 +68,7 @@ class Alignment { Gr.Texture.ExtLR, Gr.Texture.ShrL, Gr.Texture.ShrR, - Gr.Texture.ShrLR + Gr.Texture.ShrLR, ]; for (const gr of cvs) { const gnLinked = gr.get(go); diff --git a/packages/geometry-cache/package.json b/packages/geometry-cache/package.json index 96a4df326b..2f710c3e3b 100644 --- a/packages/geometry-cache/package.json +++ b/packages/geometry-cache/package.json @@ -1,12 +1,12 @@ { "name": "@iosevka/geometry-cache", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs" }, "dependencies": { - "@iosevka/geometry": "28.1.0", + "@iosevka/geometry": "29.0.0", "@msgpack/msgpack": "^2.8.0" } } diff --git a/packages/geometry-cache/src/index.mjs b/packages/geometry-cache/src/index.mjs index b0885a0d44..e3a920b956 100644 --- a/packages/geometry-cache/src/index.mjs +++ b/packages/geometry-cache/src/index.mjs @@ -4,7 +4,7 @@ import zlib from "zlib"; import * as CurveUtil from "@iosevka/geometry/curve-util"; import { encode, decode } from "@msgpack/msgpack"; -const Edition = 33; +const Edition = 36; const MAX_AGE = 16; class GfEntry { constructor(age, value) { @@ -42,7 +42,7 @@ class Cache { return { version: version + "@" + Edition, ageKeys: mergedAgeKeys, - gf: gfRep + gf: gfRep, }; } isEmpty() { diff --git a/packages/geometry/package.json b/packages/geometry/package.json index acae86ac59..f5e64ed09f 100644 --- a/packages/geometry/package.json +++ b/packages/geometry/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/geometry", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", @@ -13,8 +13,8 @@ "./spiro-control": "./src/spiro-control.mjs" }, "dependencies": { - "@iosevka/util": "28.1.0", + "@iosevka/util": "29.0.0", "spiro": "^3.0.0", - "typo-geom": "^0.14.0" + "typo-geom": "^0.15.0" } } diff --git a/packages/geometry/src/anchor.mjs b/packages/geometry/src/anchor.mjs index 46aa62989f..e3478116f9 100644 --- a/packages/geometry/src/anchor.mjs +++ b/packages/geometry/src/anchor.mjs @@ -7,8 +7,6 @@ export class Anchor { return Anchor.transform(tfm, this); } static transform(tfm, a) { - const x = a.x * tfm.xx + a.y * tfm.yx + tfm.x; - const y = a.x * tfm.xy + a.y * tfm.yy + tfm.y; - return new Anchor(x, y); + return new Anchor(tfm.applyX(a.x, a.y), tfm.applyY(a.x, a.y)); } } diff --git a/packages/geometry/src/curve-util.mjs b/packages/geometry/src/curve-util.mjs index d2d77f8e2f..c72636233d 100644 --- a/packages/geometry/src/curve-util.mjs +++ b/packages/geometry/src/curve-util.mjs @@ -1,8 +1,8 @@ +import { mix } from "@iosevka/util"; import * as TypoGeom from "typo-geom"; import { Point, Vec2 } from "./point.mjs"; import { Transform } from "./transform.mjs"; -import { mix } from "@iosevka/util"; function contourToRep(contour) { let c = []; @@ -30,8 +30,8 @@ function convertContourToArcs(contour) { z0, Point.from(Point.Type.CubicStart, z1), Point.from(Point.Type.CubicEnd, z2), - Point.from(Point.Type.Corner, z3) - ) + Point.from(Point.Type.Corner, z3), + ), ); z0 = z3; j += 2; @@ -47,8 +47,8 @@ function convertContourToArcs(contour) { z0, Point.from(Point.Type.CubicStart, z0).mix(2 / 3, zc), Point.from(Point.Type.CubicEnd, zf).mix(2 / 3, zc), - Point.from(Point.Type.Corner, zf) - ) + Point.from(Point.Type.Corner, zf), + ), ); z0 = zf; if (zfIsCorner) j++; @@ -57,8 +57,8 @@ function convertContourToArcs(contour) { default: { newContour.push( TypoGeom.Arcs.Bez3.fromStraightSegment( - new TypoGeom.Arcs.StraightSegment(z0, Point.from(Point.Type.Corner, z)) - ) + new TypoGeom.Arcs.StraightSegment(z0, Point.from(Point.Type.Corner, z)), + ), ); z0 = z; break; @@ -88,7 +88,7 @@ export function derivativeFromFiniteDifference(c, t) { (2 / 3) * backward1.y + (2 / 3) * forward1.y - (1 / 12) * forward2.y) / - DELTA + DELTA, ); } @@ -104,7 +104,7 @@ export class OffsetCurve { const absD = Math.hypot(d.x, d.y); return { x: c.x - (d.y / absD) * this.offset * this.contrast, - y: c.y + (d.x / absD) * this.offset + y: c.y + (d.x / absD) * this.offset, }; } derivative(t) { @@ -189,7 +189,7 @@ export class RoundCapCurve { return { x: centerX + r * Math.cos(theta) * this.contrast, - y: centerY + r * Math.sin(theta) + y: centerY + r * Math.sin(theta), }; } diff --git a/packages/geometry/src/index.mjs b/packages/geometry/src/index.mjs index 405da88504..4f88f0ed4e 100644 --- a/packages/geometry/src/index.mjs +++ b/packages/geometry/src/index.mjs @@ -1,15 +1,15 @@ import crypto from "crypto"; import * as Format from "@iosevka/util/formatter"; -import * as SpiroJs from "spiro"; import * as TypoGeom from "typo-geom"; import * as CurveUtil from "./curve-util.mjs"; import { Point } from "./point.mjs"; import { QuadifySink } from "./quadify.mjs"; import { SpiroExpander } from "./spiro-expand.mjs"; -import { Transform } from "./transform.mjs"; +import { spiroToOutline } from "./spiro-to-outline.mjs"; import { strokeArcs } from "./stroke.mjs"; +import { Transform } from "./transform.mjs"; export const CPLX_NON_EMPTY = 0x01; // A geometry tree that is not empty export const CPLX_NON_SIMPLE = 0x02; // A geometry tree that contains non-simple contours @@ -17,10 +17,10 @@ export const CPLX_BROKEN = 0x04; // A geometry tree that contains broken contour export const CPLX_UNKNOWN = 0xff; export class GeometryBase { - asContours() { + toContours() { throw new Error("Unimplemented"); } - asReferences() { + toReferences() { throw new Error("Unimplemented"); } getDependencies() { @@ -47,10 +47,10 @@ export class ContourSetGeometry extends GeometryBase { super(); this.m_contours = contours; } - asContours() { + toContours() { return this.m_contours; } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -71,7 +71,7 @@ export class ContourSetGeometry extends GeometryBase { toShapeStringOrNull() { return Format.struct( `ContourSetGeometry`, - Format.list(this.m_contours.map(c => Format.list(c.map(Format.typedPoint)))) + Format.list(this.m_contours.map(c => Format.list(c.map(Format.typedPoint)))), ); } } @@ -79,27 +79,17 @@ export class ContourSetGeometry extends GeometryBase { export class SpiroGeometry extends GeometryBase { constructor(gizmo, closed, knots) { super(); - this.m_knots = []; - for (const k of knots) { - this.m_knots.push({ type: k.type, x: k.x, y: k.y }); - } + this.m_knots = knots; this.m_closed = closed; this.m_gizmo = gizmo; this.m_cachedContours = null; } - asContours() { + toContours() { if (this.m_cachedContours) return this.m_cachedContours; - const s = new CurveUtil.BezToContoursSink(this.m_gizmo); - SpiroJs.spiroToBezierOnContext( - this.m_knots, - this.m_closed, - s, - CurveUtil.GEOMETRY_PRECISION - ); - this.m_cachedContours = s.contours; + this.m_cachedContours = spiroToOutline(this.m_knots, this.m_closed, this.m_gizmo); return this.m_cachedContours; } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -120,7 +110,7 @@ export class SpiroGeometry extends GeometryBase { "SpiroGeometry", Format.gizmo(this.m_gizmo), this.m_closed, - Format.list(this.m_knots.map(Format.typedPoint)) + Format.list(this.m_knots.map(k => k.toShapeString())), ); } } @@ -135,25 +125,28 @@ export class DiSpiroGeometry extends GeometryBase { this.m_cachedExpansionResults = null; this.m_cachedContours = null; } - asContours() { + toContours() { if (this.m_cachedContours) return this.m_cachedContours; const expandResult = this.expand(); const lhs = [...expandResult.lhsUntransformed]; const rhs = [...expandResult.rhsUntransformed]; + // Reverse the RHS + for (const k of rhs) k.reverseType(); + rhs.reverse(); - let rawGeometry; + let outlineGeometry; if (this.m_closed) { - rawGeometry = new CombineGeometry([ + outlineGeometry = new CombineGeometry([ new SpiroGeometry(this.m_gizmo, true, lhs), - new SpiroGeometry(this.m_gizmo, true, rhs.reverse()) + new SpiroGeometry(this.m_gizmo, true, rhs), ]); } else { lhs[0].type = lhs[lhs.length - 1].type = "corner"; rhs[0].type = rhs[rhs.length - 1].type = "corner"; - const allKnots = lhs.concat(rhs.reverse()); - rawGeometry = new SpiroGeometry(this.m_gizmo, true, allKnots); + const allKnots = lhs.concat(rhs); + outlineGeometry = new SpiroGeometry(this.m_gizmo, true, allKnots); } - this.m_cachedContours = rawGeometry.asContours(); + this.m_cachedContours = outlineGeometry.toContours(); return this.m_cachedContours; } expand() { @@ -162,7 +155,7 @@ export class DiSpiroGeometry extends GeometryBase { this.m_gizmo, this.m_contrast, this.m_closed, - this.m_biKnots + this.m_biKnots, ); expander.initializeNormals(); expander.iterateNormals(); @@ -172,7 +165,7 @@ export class DiSpiroGeometry extends GeometryBase { this.m_cachedExpansionResults = expander.expand(); return this.m_cachedExpansionResults; } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -194,7 +187,7 @@ export class DiSpiroGeometry extends GeometryBase { Format.gizmo(this.m_gizmo), Format.n(this.m_contrast), this.m_closed, - Format.list(this.m_biKnots.map(z => z.toShapeString())) + Format.list(this.m_biKnots.map(z => z.toShapeString())), ); } } @@ -210,14 +203,19 @@ export class ReferenceGeometry extends GeometryBase { unwrap() { return new TransformedGeometry( this.m_glyph.geometry, - Transform.Translate(this.m_x, this.m_y) + Transform.Translate(this.m_x, this.m_y), ); } - asContours() { - return this.unwrap().asContours(); + toContours() { + return this.unwrap().toContours(); } - asReferences() { - return [{ glyph: this.m_glyph, x: this.m_x, y: this.m_y }]; + toReferences() { + if (this.m_glyph.geometry.measureComplexity() & CPLX_NON_EMPTY) { + return [{ glyph: this.m_glyph, x: this.m_x, y: this.m_y }]; + } else { + // A reference to a space is meaningless, thus return nothing + return []; + } } getDependencies() { return [this.m_glyph]; @@ -244,11 +242,11 @@ export class TaggedGeometry extends GeometryBase { this.m_geom = g; this.m_tag = tag; } - asContours() { - return this.m_geom.asContours(); + toContours() { + return this.m_geom.toContours(); } - asReferences() { - return this.m_geom.asReferences(); + toReferences() { + return this.m_geom.toReferences(); } getDependencies() { return this.m_geom.getDependencies(); @@ -274,22 +272,22 @@ export class TransformedGeometry extends GeometryBase { this.m_geom = g; this.m_transform = tfm; } - asContours() { + toContours() { let result = []; - for (const c of this.m_geom.asContours()) { + for (const c of this.m_geom.toContours()) { let c1 = []; for (const z of c) c1.push(Point.transformed(this.m_transform, z)); result.push(c1); } return result; } - asReferences() { + toReferences() { if (!Transform.isTranslate(this.m_transform)) return null; - const rs = this.m_geom.asReferences(); + const rs = this.m_geom.toReferences(); if (!rs) return null; let result = []; for (const { glyph, x, y } of rs) - result.push({ glyph, x: x + this.m_transform.x, y: y + this.m_transform.y }); + result.push({ glyph, x: x + this.m_transform.tx, y: y + this.m_transform.ty }); return result; } getDependencies() { @@ -318,9 +316,9 @@ export class TransformedGeometry extends GeometryBase { return new TransformedGeometry( unwrapped.m_geom, Transform.Translate( - this.m_transform.x + unwrapped.m_transform.x, - this.m_transform.y + unwrapped.m_transform.y - ) + this.m_transform.tx + unwrapped.m_transform.tx, + this.m_transform.ty + unwrapped.m_transform.ty, + ), ); } else { return new TransformedGeometry(unwrapped, this.m_transform); @@ -338,10 +336,10 @@ export class RadicalGeometry extends GeometryBase { super(); this.m_geom = g; } - asContours() { - return this.m_geom.asContours(); + toContours() { + return this.m_geom.toContours(); } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -377,19 +375,19 @@ export class CombineGeometry extends GeometryBase { return new CombineGeometry([...this.m_parts, g]); } } - asContours() { + toContours() { let results = []; for (const part of this.m_parts) { - for (const c of part.asContours()) { + for (const c of part.toContours()) { results.push(c); } } return results; } - asReferences() { + toReferences() { let results = []; for (const part of this.m_parts) { - const rs = part.asReferences(); + const rs = part.toReferences(); if (!rs) return null; for (const c of rs) { results.push(c); @@ -449,7 +447,7 @@ export class BooleanGeometry extends GeometryBase { this.m_operands = operands; this.m_resolved = null; } - asContours() { + toContours() { if (this.m_resolved) return this.m_resolved; this.m_resolved = this.asContoursImpl(); return this.m_resolved; @@ -469,7 +467,7 @@ export class BooleanGeometry extends GeometryBase { sink.push({ type: "operand", fillType: TypoGeom.Boolean.PolyFillType.pftNonZero, - shape: [] + shape: [], }); return; } @@ -482,14 +480,14 @@ export class BooleanGeometry extends GeometryBase { sink.push({ type: "operand", fillType: TypoGeom.Boolean.PolyFillType.pftNonZero, - shape: CurveUtil.convertShapeToArcs(operand.asContours()) + shape: CurveUtil.convertShapeToArcs(operand.toContours()), }); } // Push operator if i > 0 if (i > 0) sink.push({ type: "operator", operator: this.m_operator }); } } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -544,13 +542,13 @@ export class StrokeGeometry extends GeometryBase { this.m_fInside = fInside; } - asContours() { + toContours() { // Produce simplified arcs const nonTransformedGeometry = new TransformedGeometry(this.m_geom, this.m_gizmo.inverse()); let arcs = TypoGeom.Boolean.removeOverlap( - CurveUtil.convertShapeToArcs(nonTransformedGeometry.asContours()), + CurveUtil.convertShapeToArcs(nonTransformedGeometry.toContours()), TypoGeom.Boolean.PolyFillType.pftNonZero, - CurveUtil.BOOLE_RESOLUTION + CurveUtil.BOOLE_RESOLUTION, ); // Fairize to get get some arcs that are simple enough @@ -561,7 +559,7 @@ export class StrokeGeometry extends GeometryBase { fairizedArcs, this.m_radius, this.m_contrast, - this.m_fInside + this.m_fInside, ); // Convert to Iosevka format @@ -570,7 +568,7 @@ export class StrokeGeometry extends GeometryBase { return sink.contours; } - asReferences() { + toReferences() { return null; } getDependencies() { @@ -582,7 +580,7 @@ export class StrokeGeometry extends GeometryBase { this.m_gizmo, this.m_radius, this.m_contrast, - this.m_fInside + this.m_fInside, ); } filterTag(fn) { @@ -591,7 +589,7 @@ export class StrokeGeometry extends GeometryBase { this.m_gizmo, this.m_radius, this.m_contrast, - this.m_fInside + this.m_fInside, ); } measureComplexity() { @@ -606,7 +604,7 @@ export class StrokeGeometry extends GeometryBase { Format.gizmo(this.m_gizmo), Format.n(this.m_radius), Format.n(this.m_contrast), - this.m_fInside + this.m_fInside, ); } } @@ -617,14 +615,14 @@ export class SimplifyGeometry extends GeometryBase { super(); this.m_geom = g; } - asContours() { + toContours() { // Produce simplified arcs - let arcs = CurveUtil.convertShapeToArcs(this.m_geom.asContours()); + let arcs = CurveUtil.convertShapeToArcs(this.m_geom.toContours()); if (this.m_geom.measureComplexity() & CPLX_NON_SIMPLE) { arcs = TypoGeom.Boolean.removeOverlap( arcs, TypoGeom.Boolean.PolyFillType.pftNonZero, - CurveUtil.BOOLE_RESOLUTION + CurveUtil.BOOLE_RESOLUTION, ); } @@ -633,11 +631,11 @@ export class SimplifyGeometry extends GeometryBase { TypoGeom.ShapeConv.transferGenericShape( TypoGeom.Fairize.fairizeBezierShape(arcs), sink, - CurveUtil.GEOMETRY_PRECISION + CurveUtil.GEOMETRY_PRECISION, ); return sink.contours; } - asReferences() { + toReferences() { return null; } getDependencies() { diff --git a/packages/geometry/src/point.mjs b/packages/geometry/src/point.mjs index 706816da55..ddf07a8dbe 100644 --- a/packages/geometry/src/point.mjs +++ b/packages/geometry/src/point.mjs @@ -33,7 +33,7 @@ export class Point { return new Point( this.type, this.x + scale * (z2.x - this.x), - this.y + scale * (z2.y - this.y) + this.y + scale * (z2.y - this.y), ); } scale(t) { @@ -61,11 +61,7 @@ export class Point { return Point.transformedXY(tfm, z.type, z.x, z.y); } static transformedXY(tfm, type, x, y) { - return new Point( - type, - x * tfm.xx + y * tfm.yx + tfm.x || 0, - x * tfm.xy + y * tfm.yy + tfm.y || 0 - ); + return new Point(type, tfm.applyX(x, y), tfm.applyY(x, y)); } static translated(z, dx, dy) { return new Point(z.type, z.x + dx || 0, z.y + dy || 0); @@ -78,5 +74,5 @@ Point.Type = { Corner: 0, CubicStart: 1, CubicEnd: 2, - Quadratic: 3 + Quadratic: 3, }; diff --git a/packages/geometry/src/spiro-control.mjs b/packages/geometry/src/spiro-control.mjs index 24df788ab5..b2eee591c0 100644 --- a/packages/geometry/src/spiro-control.mjs +++ b/packages/geometry/src/spiro-control.mjs @@ -20,7 +20,7 @@ export class BiKnotCollector { c.call(this); } else if (Array.isArray(c)) { for (const item of c) this.add(item); - } else if (c instanceof ControlKnot) { + } else if (c instanceof UserControlKnot) { this.afterPreFunction = true; this.pushKnot(c); } else if (c instanceof TerminateInstruction) { @@ -102,6 +102,33 @@ export class BiKnotCollector { } } +/////////////////////////////////////////////////////////////////////////////////////////////////// + +export class MonoKnot { + constructor(type, unimportant, x, y) { + this.type = type; + this.x = x; + this.y = y; + this.unimportant = unimportant; + } + clone() { + const k1 = new MonoKnot(this.type, this.x, this.y, this.unimportant); + return k1; + } + toShapeString() { + return Format.tuple(this.type, this.unimportant, Format.n(this.x), Format.n(this.y)); + } + reverseType() { + if (this.type === "left") { + this.type = "right"; + } else if (this.type === "right") { + this.type = "left"; + } + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + class BiKnot { constructor(type, x, y, d1, d2) { this.type = type; @@ -141,9 +168,12 @@ class BiKnot { this.d2 == null ? "" : Format.n(this.d2), this.proposedNormal ? Format.tuple(Format.n(this.proposedNormal.x), Format.n(this.proposedNormal.y)) - : "" + : "", ); } + toMono() { + return new MonoKnot(this.type, this.unimportant, this.x, this.y); + } } function nCyclic(p, n) { @@ -152,7 +182,7 @@ function nCyclic(p, n) { /////////////////////////////////////////////////////////////////////////////////////////////////// -export class ControlKnot { +export class UserControlKnot { constructor(type, x, y, af) { this.type = type; this.x = x; @@ -185,10 +215,3 @@ export function Interpolator(blender, restParameters) { for (const prop in restParameters) interpolator[prop] = restParameters[prop]; return interpolator; } - -export class ImportanceControlKnot extends ControlKnot { - constructor(type, x, y, unimportant) { - super(type, x, y, null); - this.unimportant = unimportant; - } -} diff --git a/packages/geometry/src/spiro-expand.mjs b/packages/geometry/src/spiro-expand.mjs index 7a41988829..57b4f85557 100644 --- a/packages/geometry/src/spiro-expand.mjs +++ b/packages/geometry/src/spiro-expand.mjs @@ -2,7 +2,7 @@ import { linreg, mix } from "@iosevka/util"; import * as SpiroJs from "spiro"; import { Vec2 } from "./point.mjs"; -import { ControlKnot } from "./spiro-control.mjs"; +import { MonoKnot } from "./spiro-control.mjs"; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -30,26 +30,27 @@ export class SpiroExpander { for (let j = 0; j < this.m_biKnotsT.length; j++) { const lhs = expanded.lhs[j]; const rhs = expanded.rhs[j]; - middles[j] = new ControlKnot( + middles[j] = new MonoKnot( this.m_biKnotsT[j].type, + this.m_biKnotsT[j].unimportant, mix(lhs.x, rhs.x, 0.5), - mix(lhs.y, rhs.y, 0.5) + mix(lhs.y, rhs.y, 0.5), ); } return middles; } expand() { - const lhs = [], - rhs = [], - lhsUntransformed = [], - rhsUntransformed = []; + const lhsT = [], // transformed LHS + rhsT = [], // transformed RHS + lhsU = [], // untransformed LHS + rhsU = []; // untransformed RHS for (let j = 0; j < this.m_biKnotsT.length; j++) { - const knot = this.m_biKnotsT[j]; - lhs[j] = new ControlKnot(knot.type, 0, 0); - rhs[j] = new ControlKnot(reverseKnotType(knot.type), 0, 0); - lhsUntransformed[j] = new ControlKnot(knot.type, 0, 0); - rhsUntransformed[j] = new ControlKnot(reverseKnotType(knot.type), 0, 0); + const bk = this.m_biKnotsT[j]; + lhsT[j] = new MonoKnot(bk.type, bk.unimportant, 0, 0); + rhsT[j] = new MonoKnot(bk.type, bk.unimportant, 0, 0); + lhsU[j] = new MonoKnot(bk.type, bk.unimportant, 0, 0); + rhsU[j] = new MonoKnot(bk.type, bk.unimportant, 0, 0); } for (let j = 0; j < this.m_biKnotsT.length; j++) { @@ -63,17 +64,17 @@ export class SpiroExpander { dx = normalX(knotT.origTangent, this.m_contrast); dy = normalY(knotT.origTangent, this.m_contrast); } - lhs[j].x = knotT.x + knotT.d1 * dx; - lhs[j].y = knotT.y + knotT.d1 * dy; - rhs[j].x = knotT.x - knotT.d2 * dx; - rhs[j].y = knotT.y - knotT.d2 * dy; + lhsT[j].x = knotT.x + knotT.d1 * dx; + lhsT[j].y = knotT.y + knotT.d1 * dy; + rhsT[j].x = knotT.x - knotT.d2 * dx; + rhsT[j].y = knotT.y - knotT.d2 * dy; - this.m_gizmo.unapplyToSink(lhs[j], lhsUntransformed[j]); - this.m_gizmo.unapplyToSink(rhs[j], rhsUntransformed[j]); + this.m_gizmo.unapplyToSink(lhsT[j], lhsU[j]); + this.m_gizmo.unapplyToSink(rhsT[j], rhsU[j]); } - this.interpolateUnimportantKnots(lhs, rhs, lhsUntransformed, rhsUntransformed); - return { lhs, rhs, lhsUntransformed, rhsUntransformed }; + this.interpolateUnimportantKnots(lhsT, rhsT, lhsU, rhsU); + return { lhs: lhsT, rhs: rhsT, lhsUntransformed: lhsU, rhsUntransformed: rhsU }; } interpolateUnimportantKnots(lhsT, rhsT, lhsU, rhsU) { for (let j = 0; j < this.m_biKnotsU.length; j++) { @@ -143,9 +144,6 @@ function normalY(tangent) { return tangent.x / Math.hypot(tangent.x, tangent.y); } -function reverseKnotType(ty) { - return ty === "left" ? "right" : ty === "right" ? "left" : ty; -} function cyNth(a, j) { return a[j % a.length]; } diff --git a/packages/geometry/src/spiro-to-outline.mjs b/packages/geometry/src/spiro-to-outline.mjs new file mode 100644 index 0000000000..b3ee643084 --- /dev/null +++ b/packages/geometry/src/spiro-to-outline.mjs @@ -0,0 +1,9 @@ +import * as SpiroJs from "spiro"; + +import * as CurveUtil from "./curve-util.mjs"; + +export function spiroToOutline(knots, fClosed, gizmo) { + const s = new CurveUtil.BezToContoursSink(gizmo); + SpiroJs.spiroToBezierOnContext(knots, fClosed, s, CurveUtil.GEOMETRY_PRECISION); + return s.contours; +} diff --git a/packages/geometry/src/stroke.mjs b/packages/geometry/src/stroke.mjs index ced2de37a3..d3e0e43d6b 100644 --- a/packages/geometry/src/stroke.mjs +++ b/packages/geometry/src/stroke.mjs @@ -1,11 +1,11 @@ import * as TypoGeom from "typo-geom"; + import { BOOLE_RESOLUTION, - Bez3FromHermite, GEOMETRY_PRECISION, OCCURRENT_PRECISION, OffsetCurve, - RoundCapCurve + RoundCapCurve, } from "./curve-util.mjs"; export function strokeArcs(arcs, radius, contrast, fInside) { @@ -24,7 +24,7 @@ export function strokeArcs(arcs, radius, contrast, fInside) { bezs, TypoGeom.Boolean.PolyFillType.pftNonZero, TypoGeom.Boolean.PolyFillType.pftNonZero, - BOOLE_RESOLUTION + BOOLE_RESOLUTION, ); } } @@ -37,7 +37,7 @@ export function strokeArcs(arcs, radius, contrast, fInside) { currentArcs, TypoGeom.Boolean.PolyFillType.pftNonZero, TypoGeom.Boolean.PolyFillType.pftNonZero, - BOOLE_RESOLUTION + BOOLE_RESOLUTION, ); } else { return currentArcs; @@ -72,8 +72,8 @@ function offsetContour(arcs, distance, contrast) { prevOffsetedArc.derivative(1), currentOffsetedArc.bone.eval(0), currentStart, - currentOffsetedArc.derivative(0) - ) + currentOffsetedArc.derivative(0), + ), ); // offsetArcs.push(Bez3FromHermite(prevEnd, dPrevEnd, currentStart, dCurrentStart)); } @@ -101,7 +101,7 @@ function createCap( dPrevEnd, // Previous offseted curve's end point's derivative currentStartNoOffset, // Current non-offseted curve's start point currentStart, // Current offseted curve's start point - dCurrentStart // Current offseted curve's start point's derivative + dCurrentStart, // Current offseted curve's start point's derivative ) { return new RoundCapCurve( side, @@ -109,6 +109,6 @@ function createCap( prevEndNoOffset, prevEnd, currentStartNoOffset, - currentStart + currentStart, ); } diff --git a/packages/geometry/src/transform.mjs b/packages/geometry/src/transform.mjs index 49172ccf55..3ce281b762 100644 --- a/packages/geometry/src/transform.mjs +++ b/packages/geometry/src/transform.mjs @@ -1,13 +1,13 @@ import { Vec2 } from "./point.mjs"; export class Transform { - constructor(xx, yx, xy, yy, x, y) { + constructor(xx, xy, yx, yy, tx, ty) { this.xx = xx; - this.yx = yx; this.xy = xy; + this.yx = yx; this.yy = yy; - this.x = x; - this.y = y; + this.tx = tx; + this.ty = ty; } static Id() { return new Transform(1, 0, 0, 1, 0, 0); @@ -17,10 +17,10 @@ export class Transform { } applyX(x, y) { - return x * this.xx + y * this.yx + this.x; + return x * this.xx + y * this.xy + this.tx; } applyY(x, y) { - return x * this.xy + y * this.yy + this.y; + return x * this.yx + y * this.yy + this.ty; } applyXY(x, y) { return new Vec2(this.applyX(x, y), this.applyY(x, y)); @@ -38,17 +38,17 @@ export class Transform { } applyOffsetXY(deltaX, deltaY) { return { - x: deltaX * this.xx + deltaY * this.yx, - y: deltaX * this.xy + deltaY * this.yy + x: deltaX * this.xx + deltaY * this.xy, + y: deltaX * this.yx + deltaY * this.yy, }; } unapplyToSink(pt, sink) { - const xx = pt.x - this.x; - const yy = pt.y - this.y; - const denom = this.xx * this.yy - this.xy * this.yx; - sink.x = (xx * this.yy - yy * this.yx) / denom; - sink.y = (yy * this.xx - xx * this.xy) / denom; + const xx = pt.x - this.tx; + const yy = pt.y - this.ty; + const denom = this.xx * this.yy - this.yx * this.xy; + sink.x = (xx * this.yy - yy * this.xy) / denom; + sink.y = (yy * this.xx - xx * this.yx) / denom; } unapply(pt) { let sink = new Vec2(0, 0); @@ -60,25 +60,25 @@ export class Transform { else return null; } inverse() { - const denom = this.xx * this.yy - this.xy * this.yx; + const denom = this.xx * this.yy - this.yx * this.xy; return new Transform( this.yy / denom, - -this.yx / denom, -this.xy / denom, + -this.yx / denom, this.xx / denom, - -(this.x * this.yy - this.y * this.yx) / denom, - -(-this.x * this.xy + this.y * this.xx) / denom + -(this.tx * this.yy - this.ty * this.xy) / denom, + -(-this.tx * this.yx + this.ty * this.xx) / denom, ); } toString() { - return `[[${this.xx} ${this.xy}] [${this.yx} ${this.yy}]] + [[${this.x}] [${this.y}]]`; + return `[[${this.xx} ${this.yx}] [${this.xy} ${this.yy}]] + [[${this.tx}] [${this.ty}]]`; } static isTranslate(tfm) { return tfm.xx === 1 && tfm.yy === 1 && tfm.xy === 0 && tfm.yx === 0; } static isIdentity(tfm) { - return this.isTranslate(tfm) && tfm.x === 0 && tfm.y === 0; + return this.isTranslate(tfm) && tfm.tx === 0 && tfm.ty === 0; } static isPositive(tfm) { return tfm.xx * tfm.yy - tfm.xy * tfm.yx > 0; @@ -98,7 +98,7 @@ export class Transform { z10.y - z00.y, z01.y - z00.y, z00.x, - z00.y + z00.y, ); } } diff --git a/packages/glyph/package.json b/packages/glyph/package.json index 2303cfa787..e7a69c526e 100644 --- a/packages/glyph/package.json +++ b/packages/glyph/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/glyph", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/glyph.mjs", @@ -9,6 +9,6 @@ "./relation": "./src/relation.mjs" }, "dependencies": { - "@iosevka/geometry": "28.1.0" + "@iosevka/geometry": "29.0.0" } } diff --git a/packages/glyph/src/glyph.mjs b/packages/glyph/src/glyph.mjs index c2d2b6e842..766182ce7c 100644 --- a/packages/glyph/src/glyph.mjs +++ b/packages/glyph/src/glyph.mjs @@ -118,7 +118,7 @@ export class Glyph { this.includeGeometry(new Geom.ReferenceGeometry(g, shiftX, shiftY)); } else { this.includeGeometry( - new Geom.TransformedGeometry(g.geometry, Transform.Translate(shiftX, shiftY)) + new Geom.TransformedGeometry(g.geometry, Transform.Translate(shiftX, shiftY)), ); } } @@ -172,7 +172,7 @@ export class Glyph { const baseDerived = g.baseAnchors[m2]; this.baseAnchors[m2] = new Anchor( shift.x + baseDerived.x, - shift.y + baseDerived.y + shift.y + baseDerived.y, ); } } diff --git a/packages/glyph/src/relation.mjs b/packages/glyph/src/relation.mjs index 64070ebee1..7128269740 100644 --- a/packages/glyph/src/relation.mjs +++ b/packages/glyph/src/relation.mjs @@ -13,7 +13,7 @@ export const Dotless = { }, amendName(name) { return name + ".dotless"; - } + }, }; export const LowerYDotAtBelow = LinkedGlyphProp("LowerYDotAtBelow"); @@ -27,9 +27,9 @@ export const LeaningMarkSpacer = LinkedGlyphProp("LeaningMarkSpacer"); export const LocalizedForm = { SRB: { Upright: LinkedGlyphProp("SerbianLocUpright"), - Italic: LinkedGlyphProp("SerbianLocItalic") + Italic: LinkedGlyphProp("SerbianLocItalic"), }, - BGR: LinkedGlyphProp("BulgarianLoc") + BGR: LinkedGlyphProp("BulgarianLoc"), }; export const Texture = { @@ -38,7 +38,7 @@ export const Texture = { ExtLR: LinkedGlyphProp("TextureExtLR"), ShrL: LinkedGlyphProp("TextureShrL"), ShrR: LinkedGlyphProp("TextureShrR"), - ShrLR: LinkedGlyphProp("TextureShrLR") + ShrLR: LinkedGlyphProp("TextureShrLR"), }; function LinkedGlyphProp(key) { @@ -58,7 +58,7 @@ function LinkedGlyphProp(key) { }, amendOtName(name) { return `${name}.${key}`; - } + }, }; } @@ -67,6 +67,7 @@ export const Wwid = OtlTaggedProp("Wwid", "WWID", "Narrow cell"); export const Lnum = OtlTaggedProp("Lnum", "lnum", "Lining number"); export const Onum = OtlTaggedProp("Onum", "onum", "Old-style number"); export const Zero = OtlTaggedProp("Zero", "zero", "Slashed zero"); +export const MosaicForm = OtlTaggedProp("MosaicForm", "MOSC", "Mosaic form"); export const AplForm = OtlTaggedProp("AplForm", "APLF", "APL form"); export const NumeratorForm = OtlTaggedProp("Numerator", "numr"); export const DenominatorForm = OtlTaggedProp("Denominator", "dnom"); @@ -89,7 +90,7 @@ function DecompositionProp(key) { }, amendOtName(baseName, index) { return `${baseName}.d${index}`; - } + }, }; } @@ -102,7 +103,7 @@ export const TieGlyph = { if (!glyph.related) glyph.related = {}; glyph.related.TieGlyph = true; Joining.or(glyph, Joining.Classes.Mid); - } + }, }; function BoolProp(id) { @@ -114,7 +115,7 @@ function BoolProp(id) { set(glyph) { if (!glyph.related) glyph.related = {}; glyph.related[id] = true; - } + }, }; } export const Radical = BoolProp("Radical"); @@ -151,8 +152,8 @@ export const Joining = { Classes: { Left: 1, Right: 2, - Mid: 3 - } + Mid: 3, + }, }; export const HintClass = { @@ -163,7 +164,7 @@ export const HintClass = { set(glyph, script, style) { if (!glyph.related) glyph.related = {}; glyph.related.hintClass = [script, style]; - } + }, }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -172,7 +173,7 @@ export const DotlessOrNot = { query(glyph) { if (Dotless.get(glyph)) return [Dotless]; return null; - } + }, }; export const AnyLocalizedForm = { @@ -183,7 +184,7 @@ export const AnyLocalizedForm = { if (LocalizedForm.BGR.get(glyph)) grs.push(LocalizedForm.BGR); if (grs.length) return grs; return null; - } + }, }; export const AnyCv = { @@ -202,7 +203,7 @@ export const AnyCv = { if (ua < ub) return -1; if (ua > ub) return 1; return a.rank - b.rank; - } + }, }; export const AnyDerivingCv = { @@ -222,7 +223,7 @@ export const AnyDerivingCv = { return glyph.related.preventCvDeriving.size > 0; } return false; - } + }, }; export const AnyCvOrCherryPicking = { @@ -230,7 +231,7 @@ export const AnyCvOrCherryPicking = { let ret = AnyCv.query(glyph); if (Zero.get(glyph)) ret.push(Zero); return ret; - } + }, }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -330,6 +331,7 @@ export function createGrDisplaySheet(glyphStore, gn) { displayQueryPairFeatures(glyph, "Width", Nwid, Wwid, typographicFeatures); displayQueryPairFeatures(glyph, "Number Form", Lnum, Onum, typographicFeatures); displayQuerySingleFeature(glyph, AplForm, typographicFeatures); + displayQuerySingleFeature(glyph, MosaicForm, typographicFeatures); for (const gr of CvCherryPickingGrs) displayQuerySingleFeature(glyph, gr, typographicFeatures); // Query selected character variants @@ -368,9 +370,9 @@ function displayQueryPairFeatures(g, name, grCis, grTrans, sink) { FeatureSeries(name, [ [ { css: `'${grCis.otlTag}' 1`, description: grCis.description }, - { css: `'${grTrans.otlTag}' 1`, description: grTrans.description } - ] - ]) + { css: `'${grTrans.otlTag}' 1`, description: grTrans.description }, + ], + ]), ); } } @@ -380,9 +382,9 @@ function displayQuerySingleFeature(g, grCis, sink) { FeatureSeries(grCis.description, [ [ { css: `'${grCis.otlTag}' 0`, description: grCis.description + " disabled" }, - { css: `'${grCis.otlTag}' 1`, description: grCis.description + " enabled" } - ] - ]) + { css: `'${grCis.otlTag}' 1`, description: grCis.description + " enabled" }, + ], + ]), ); } } @@ -412,7 +414,7 @@ function queryCvFeatureTagsOf(sink, gid, glyph, tagSet) { const featureApp = { css: `'${gr.tag}' ${String(gr.rank).padStart(2)}`, - description: gr.description + description: gr.description, }; if (!series.groups[gr.groupRank]) series.groups[gr.groupRank] = []; series.groups[gr.groupRank].push(featureApp); @@ -447,6 +449,14 @@ export function linkSuffixPairGr(gs, tagCis, tagTrans, grCis, grTrans) { } } +export function linkSingleGlyphPairGr(gs, fromName, toName, gr) { + const gFrom = gs.queryByName(fromName); + if (!gFrom) return; + const gTo = gs.queryByName(toName); + if (!gTo) return; + gr.set(gFrom, toName); +} + /////////////////////////////////////////////////////////////////////////////////////////////////// export function hashCv(g) { @@ -464,7 +474,7 @@ export const SvInheritableRelations = [ Joining, NeqLigationSlashDotted, OgonekTrY, - ScheduleLeaningMark + ScheduleLeaningMark, ]; export const CvCherryPickingGrs = [Zero]; diff --git a/packages/param/package.json b/packages/param/package.json index 39d1f1896a..bf23902ce7 100644 --- a/packages/param/package.json +++ b/packages/param/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/param", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", @@ -9,6 +9,6 @@ "./metric-override": "./src/metric-override.mjs" }, "dependencies": { - "@iosevka/util": "28.1.0" + "@iosevka/util": "29.0.0" } } diff --git a/packages/param/src/ligation.mjs b/packages/param/src/ligation.mjs index e8f43e51e0..76c303b089 100644 --- a/packages/param/src/ligation.mjs +++ b/packages/param/src/ligation.mjs @@ -18,7 +18,7 @@ export function applyLigationData(data, para, argv) { } para.ligation = { defaultBuildup, - caltBuildup: [] + caltBuildup: [], }; if (argv.ligations) { if (argv.ligations.inherits) @@ -27,13 +27,13 @@ export function applyLigationData(data, para, argv) { Parameters.apply( para.ligation, hives, - argv.ligations.disables.map(x => `ligset-disable-${x}`) + argv.ligations.disables.map(x => `ligset-disable-${x}`), ); if (argv.ligations.enables) Parameters.apply( para.ligation, hives, - argv.ligations.enables.map(x => `ligset-enable-${x}`) + argv.ligations.enables.map(x => `ligset-enable-${x}`), ); } } diff --git a/packages/param/src/metric-override.mjs b/packages/param/src/metric-override.mjs index e69726f35e..99f7bc1344 100644 --- a/packages/param/src/metric-override.mjs +++ b/packages/param/src/metric-override.mjs @@ -45,7 +45,7 @@ const validMetricOverrideFields = new Set([ "essRatioQuestion", "essRatio", "archDepth", - "smallArchDepth" + "smallArchDepth", ]); /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/param/src/variant.mjs b/packages/param/src/variant.mjs index edd94af421..74f231feed 100644 --- a/packages/param/src/variant.mjs +++ b/packages/param/src/variant.mjs @@ -21,7 +21,7 @@ export function apply(data, para, argv) { para.variants = { selectorTree: parsed.selectorTree, primes: parsed.primes, - composites: parsed.composites + composites: parsed.composites, }; para.variantSelector = variantSelector; } @@ -167,7 +167,7 @@ class Prime { ligatureSampler: this.ligatureSampler, descSampleText: this.descSampleText, hotChars: this.hotChars, - variants: [] + variants: [], }; for (const variant of this.variants.values()) { gr.variants.push({ @@ -175,7 +175,7 @@ class Prime { rank: variant.rank, groupRank: variant.groupRank, description: variant.description, - snapshotFeatureApplication: variant.snapshotFeatureApplication + snapshotFeatureApplication: variant.snapshotFeatureApplication, }); } gr.variants.sort((a, b) => (a.rank || 0x7fffffff) - (b.rank || 0x7fffffff)); @@ -249,7 +249,7 @@ class Composite { design: slabOverrideCfg.design, override: slabOverrideCfg.upright || slabOverrideCfg["upright-oblique"], oblique: slabOverrideCfg.oblique || slabOverrideCfg["upright-oblique"], - italic: slabOverrideCfg.italic + italic: slabOverrideCfg.italic, }; } decompose(para, selTree) { @@ -259,7 +259,7 @@ class Composite { this.design, this.decomposeSlope(this, para), !para.slab ? {} : this.slabOverride.design, - !para.slab ? {} : this.decomposeSlope(this.slabOverride, para) + !para.slab ? {} : this.decomposeSlope(this.slabOverride, para), ); for (const [k, v] of Object.entries(cfg)) { const pv = selTree.get(k, v); @@ -308,7 +308,7 @@ class VariantBuilder { globalState.sink.sort( (a, b) => a.nonBreakingVariantAdditionPriority - b.nonBreakingVariantAdditionPriority || - a.rank - b.rank + a.rank - b.rank, ); let ans = {}; @@ -398,7 +398,7 @@ class VbStageAlternative { ans.addDescription( this.mode, this.evalValue(this.descriptionJoiner, localState), - this.evalValue(this.descriptionAffix, localState) + this.evalValue(this.descriptionAffix, localState), ); } if (this.selectorAffix) { @@ -563,7 +563,7 @@ class VbLocalState { rank: this.rank, groupRank: this.groupRank, description: this.produceDescription(), - selector: Object.fromEntries(this.selector) + selector: Object.fromEntries(this.selector), }; } } diff --git a/packages/util/package.json b/packages/util/package.json index 92c2dbac62..61db0392d7 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/util", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", diff --git a/packages/util/src/formatter.mjs b/packages/util/src/formatter.mjs index ddf9442469..fb06f3b52a 100644 --- a/packages/util/src/formatter.mjs +++ b/packages/util/src/formatter.mjs @@ -14,5 +14,5 @@ export function typedPoint(z) { return tuple(z.type, n(z.x), n(z.y)); } export function gizmo(g) { - return tuple(n(g.xx), n(g.xy), n(g.yx), n(g.yy), n(g.x), n(g.y)); + return tuple(n(g.xx), n(g.xy), n(g.yx), n(g.yy), n(g.tx), n(g.ty)); } diff --git a/packages/util/src/index.mjs b/packages/util/src/index.mjs index 33bd612819..a2ab3cd006 100644 --- a/packages/util/src/index.mjs +++ b/packages/util/src/index.mjs @@ -69,7 +69,7 @@ export const SuffixCfg = { if (pair) ans[pair.left] = pair.right; } return ans; - } + }, }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -98,7 +98,7 @@ export const MatchUtil = { }, either(a, b) { return x => a(x) || b(x); - } + }, }; export function constant(x) { return () => x; @@ -136,5 +136,5 @@ export const ArrayUtil = { } return ranges; - } + }, }; diff --git a/params/parameters.toml b/params/parameters.toml index 93c2b44112..cc4debe4ed 100644 --- a/params/parameters.toml +++ b/params/parameters.toml @@ -125,15 +125,15 @@ forceMonospace = true [spacing-quasi-proportional] spacing = 3 isQuasiProportional = true -diversityM = 1.25 -diversityF = 0.75 -diversityI = 0.75 -diversityII = 0.50 +diversityM = 1.3333333333333 # 4/3 +diversityF = 0.8333333333333 # 5/6 +diversityI = 0.6666666666666 # 2/3 +diversityII = 0.5 # 1/2 [spacing-quasi-proportional-extension-only] spacing = 3 isQuasiProportional = true -diversityM = 1.25 +diversityM = 1.3333333333333 # 4/3 diversityF = 1.00 diversityI = 1.00 diversityII = 1.00 diff --git a/params/variants.toml b/params/variants.toml index f1ccf42a19..f67aab7050 100644 --- a/params/variants.toml +++ b/params/variants.toml @@ -440,16 +440,16 @@ selector."cyrl/Nje/leftHalf/reduced" = "serifedExceptBottomRight" sampler = "I" tagKind = "letter" -[prime.capital-i.variants.serifed] +[prime.capital-i.variants.serifless] rank = 1 -description = "I with standard (long) serifs" -selector.I = "serifed" +description = "I without serifs, like a straight bar" +selector.I = "serifless" selector."I/sansSerif" = "serifless" -[prime.capital-i.variants.serifless] +[prime.capital-i.variants.serifed] rank = 2 -description = "I without serifs, like a straight bar" -selector.I = "serifless" +description = "I with standard (long) serifs" +selector.I = "serifed" selector."I/sansSerif" = "serifless" [prime.capital-i.variants.short-serifed] @@ -1108,22 +1108,22 @@ selectorAffix.U = "serifless" selectorAffix."U/noTopLeftSerif" = "serifless" selectorAffix."U/sansSerif" = "serifless" -[prime.capital-u.variants-buildup.stages.serifs.motion-serifed] -rank = 2 -disableIf = [{ body = "toothless-corner" }, { body = "toothless-rounded" }] -descriptionAffix = "motion serifs at top-left and bottom-right" -selectorAffix.U = "unilateralMotionSerifed" -selectorAffix."U/noTopLeftSerif" = "serifless" -selectorAffix."U/sansSerif" = "serifless" - [prime.capital-u.variants-buildup.stages.serifs.bottom-right-serifed] -rank = 3 +rank = 2 disableIf = [{ body = "NOT toothed" }] descriptionAffix = "serif at bottom-right" selectorAffix.U = "bottomRightSerifed" selectorAffix."U/noTopLeftSerif" = "bottomRightSerifed" selectorAffix."U/sansSerif" = "serifless" +[prime.capital-u.variants-buildup.stages.serifs.motion-serifed] +rank = 3 +disableIf = [{ body = "toothless-corner" }, { body = "toothless-rounded" }] +descriptionAffix = "motion serifs at top-left and bottom-right" +selectorAffix.U = "unilateralMotionSerifed" +selectorAffix."U/noTopLeftSerif" = "serifless" +selectorAffix."U/sansSerif" = "serifless" + [prime.capital-u.variants-buildup.stages.serifs.unilateral-motion-serifed] rank = 4 disableIf = [{ body = "toothed" }, { body = "tailed" }] @@ -1457,16 +1457,16 @@ selectorAffix.ZDesc = "serifless" selectorAffix."ZDesc/reduced" = "serifless" selectorAffix.Ezh = "serifless" -[prime.capital-z.variants-buildup.stages.serifs.serifed] +[prime.capital-z.variants-buildup.stages.serifs.top-serifed] rank = 2 -descriptionAffix = "serifs" -selectorAffix.Z = "serifed" +descriptionAffix = "serifs at top" +selectorAffix.Z = "topSerifed" selectorAffix."Z/sansSerif" = "serifless" -selectorAffix."Z/reduced" = "serifed" +selectorAffix."Z/reduced" = "topSerifed" selectorAffix."Z/reduced/sansSerif" = "serifless" selectorAffix.ZDesc = "topSerifed" selectorAffix."ZDesc/reduced" = "topSerifed" -selectorAffix.Ezh = "serifed" +selectorAffix.Ezh = "topSerifed" [prime.capital-z.variants-buildup.stages.serifs.bottom-serifed] rank = 3 @@ -1479,16 +1479,16 @@ selectorAffix.ZDesc = "serifless" selectorAffix."ZDesc/reduced" = "serifless" selectorAffix.Ezh = "serifless" -[prime.capital-z.variants-buildup.stages.serifs.top-serifed] +[prime.capital-z.variants-buildup.stages.serifs.serifed] rank = 4 -descriptionAffix = "serifs at top" -selectorAffix.Z = "topSerifed" +descriptionAffix = "serifs" +selectorAffix.Z = "serifed" selectorAffix."Z/sansSerif" = "serifless" -selectorAffix."Z/reduced" = "topSerifed" +selectorAffix."Z/reduced" = "serifed" selectorAffix."Z/reduced/sansSerif" = "serifless" selectorAffix.ZDesc = "topSerifed" selectorAffix."ZDesc/reduced" = "topSerifed" -selectorAffix.Ezh = "serifed" +selectorAffix.Ezh = "topSerifed" [prime.capital-z.variants-buildup.stages.overlay.no-overlay] rank = 1 @@ -2325,17 +2325,8 @@ selectorAffix.heng = "serifed" sampler = "i" tagKind = "letter" -[prime.i.variants.serifed] -rank = 1 -groupRank = 1 -description = "Serifed `i`" -selector.dotlessi = "serifed" -selector."dotlessi/sansSerif" = "serifless" -selector."dotlessi/compLigRight" = "serifed" -selector."dotlessi/tailed" = "serifedFlatTailed" - [prime.i.variants.serifless] -rank = 2 +rank = 1 groupRank = 1 description = "`i` like a straight line" selector.dotlessi = "serifless" @@ -2344,7 +2335,7 @@ selector."dotlessi/compLigRight" = "hooky" selector."dotlessi/tailed" = "flatTailed" [prime.i.variants.hooky] -rank = 3 +rank = 2 groupRank = 1 description = "Hooky `i`" selector.dotlessi = "hooky" @@ -2353,7 +2344,7 @@ selector."dotlessi/compLigRight" = "hooky" selector."dotlessi/tailed" = "serifedFlatTailed" [prime.i.variants.hooky-bottom] -rank = 4 +rank = 3 groupRank = 1 description = "`i` with a sharp-turning horizontal tail" selector.dotlessi = "hookyBottom" @@ -2362,7 +2353,7 @@ selector."dotlessi/compLigRight" = "zshaped" selector."dotlessi/tailed" = "flatTailed" [prime.i.variants.zshaped] -rank = 5 +rank = 4 groupRank = 1 description = "Z-shaped `i`" selector.dotlessi = "zshaped" @@ -2370,6 +2361,15 @@ selector."dotlessi/sansSerif" = "serifless" selector."dotlessi/compLigRight" = "zshaped" selector."dotlessi/tailed" = "serifedFlatTailed" +[prime.i.variants.serifed] +rank = 5 +groupRank = 1 +description = "Serifed `i`" +selector.dotlessi = "serifed" +selector."dotlessi/sansSerif" = "serifless" +selector."dotlessi/compLigRight" = "serifed" +selector."dotlessi/tailed" = "serifedFlatTailed" + [prime.i.variants.serifed-asymmetric] rank = 6 groupRank = 1 @@ -2657,22 +2657,8 @@ selectorAffix."grek/kappa/sansSerif" = "serifless" sampler = "l" tagKind = "letter" -[prime.l.variants.serifed] -rank = 1 -groupRank = 1 -description = "Serifed `l`" -selector.l = "serifed" -selector."l/sansSerif" = "serifless" -selector."l/compLigRight" = "serifed" -selector."l/reduced/decompress" = "serifed" -selector."l/reduced/rtail" = "hookyRTail" -selector."l/reduced/rtailDec" = "hookyRTailDec" -selector."l/phoneticLeft" = "hookyPL" -selector.lCurlyTail = "hooky" -selector.lyogh = "hooky" - [prime.l.variants.serifless] -rank = 2 +rank = 1 groupRank = 1 description = "`l` like a straight line" selector.l = "serifless" @@ -2686,7 +2672,7 @@ selector.lCurlyTail = "serifless" selector.lyogh = "serifless" [prime.l.variants.hooky] -rank = 3 +rank = 2 groupRank = 1 description = "Hooky `l`" selector.l = "hooky" @@ -2700,7 +2686,7 @@ selector.lCurlyTail = "hooky" selector.lyogh = "hooky" [prime.l.variants.hooky-bottom] -rank = 4 +rank = 3 groupRank = 1 description = "`l` with a straight sharp-turning horizontal tail" selector.l = "hookyBottom" @@ -2714,7 +2700,7 @@ selector.lCurlyTail = "serifless" selector.lyogh = "serifless" [prime.l.variants.zshaped] -rank = 5 +rank = 4 groupRank = 1 description = "Z-shaped `l`" selector.l = "zshaped" @@ -2727,6 +2713,20 @@ selector."l/phoneticLeft" = "hookyPL" selector.lCurlyTail = "hooky" selector.lyogh = "hooky" +[prime.l.variants.serifed] +rank = 5 +groupRank = 1 +description = "Serifed `l`" +selector.l = "serifed" +selector."l/sansSerif" = "serifless" +selector."l/compLigRight" = "serifed" +selector."l/reduced/decompress" = "serifed" +selector."l/reduced/rtail" = "hookyRTail" +selector."l/reduced/rtailDec" = "hookyRTailDec" +selector."l/phoneticLeft" = "hookyPL" +selector.lCurlyTail = "hooky" +selector.lyogh = "hooky" + [prime.l.variants.serifed-asymmetric] rank = 6 groupRank = 1 @@ -3833,29 +3833,8 @@ selectorAffix."cyrl/tse.italic" = "serifless" selectorAffix."ue/u" = "serifless" selectorAffix."au/u" = "serifless" -[prime.u.variants-buildup.stages.serifs.motion-serifed] -rank = 2 -descriptionAffix = "motion serifs at top-left and bottom-right" -selectorAffix.u = "motionSerifed" -selectorAffix."u/sansSerif" = "serifless" -selectorAffix."u/uRTailBase" = "motionSerifed" -selectorAffix.uHookLeft = {if = [{body = "toothed"}], then = "bottomRightSerifed", else = "serifless"} -selectorAffix.turnh = "motionSerifed" -selectorAffix.turnhHookLeft = "bottomRightSerifed" -selectorAffix.turnhHookLeftRTail = "serifless" -selectorAffix.turnm = "motionSerifed" -selectorAffix.turnmLeg = "motionSerifed" -selectorAffix."cyrl/i.italic" = "motionSerifed" -selectorAffix."cyrl/i.italic/descBase" = "motionSerifed" -selectorAffix."cyrl/sha.italic" = "motionSerifed" -selectorAffix."cyrl/shcha.italic" = "motionSerifed" -selectorAffix."cyrl/dzhe.italic" = "motionSerifed" -selectorAffix."cyrl/tse.italic" = "motionSerifed" -selectorAffix."ue/u" = "serifed" -selectorAffix."au/u" = {if = [{body = "toothed"}], then = "bottomRightSerifed", else = "serifless"} - [prime.u.variants-buildup.stages.serifs.bottom-right-serifed] -rank = 3 +rank = 2 disableIf = [{ body = "NOT toothed" }] descriptionAffix = "serif at bottom-right" selectorAffix.u = "bottomRightSerifed" @@ -3874,6 +3853,27 @@ selectorAffix."cyrl/shcha.italic" = "serifless" selectorAffix."cyrl/dzhe.italic" = "bottomRightSerifed" selectorAffix."cyrl/tse.italic" = "serifless" selectorAffix."ue/u" = "serifless" +selectorAffix."au/u" = "bottomRightSerifed" + +[prime.u.variants-buildup.stages.serifs.motion-serifed] +rank = 3 +descriptionAffix = "motion serifs at top-left and bottom-right" +selectorAffix.u = "motionSerifed" +selectorAffix."u/sansSerif" = "serifless" +selectorAffix."u/uRTailBase" = "motionSerifed" +selectorAffix.uHookLeft = {if = [{body = "toothed"}], then = "bottomRightSerifed", else = "serifless"} +selectorAffix.turnh = "motionSerifed" +selectorAffix.turnhHookLeft = "bottomRightSerifed" +selectorAffix.turnhHookLeftRTail = "serifless" +selectorAffix.turnm = "motionSerifed" +selectorAffix.turnmLeg = "motionSerifed" +selectorAffix."cyrl/i.italic" = "motionSerifed" +selectorAffix."cyrl/i.italic/descBase" = "motionSerifed" +selectorAffix."cyrl/sha.italic" = "motionSerifed" +selectorAffix."cyrl/shcha.italic" = "motionSerifed" +selectorAffix."cyrl/dzhe.italic" = "motionSerifed" +selectorAffix."cyrl/tse.italic" = "motionSerifed" +selectorAffix."ue/u" = "serifed" selectorAffix."au/u" = {if = [{body = "toothed"}], then = "bottomRightSerifed", else = "serifless"} [prime.u.variants-buildup.stages.serifs.serifed] @@ -4263,7 +4263,6 @@ next = "serifs" [prime.z.variants-buildup.stages.body.straight] rank = 1 -groupRank = 10 descriptionAffix = "straight body shape" selectorAffix.z = "straight" selectorAffix."z/sansSerif" = "straight" @@ -4274,7 +4273,6 @@ selectorAffix.ezh = "straight" [prime.z.variants-buildup.stages.body.curly] rank = 2 -groupRank = 20 descriptionAffix = "curly body shape" selectorAffix.z = "curly" selectorAffix."z/sansSerif" = "curly" @@ -4285,7 +4283,6 @@ selectorAffix.ezh = "straight" [prime.z.variants-buildup.stages.body.cursive] rank = 3 -groupRank = 30 next = "overlay" descriptionAffix = "cursive body shape" selectorAffix.z = "cursive" @@ -4300,7 +4297,6 @@ next = "overlay" [prime.z.variants-buildup.stages.serifs.serifless] rank = 1 -groupRank = 1 descriptionAffix = "serifs" descriptionJoiner = "without" selectorAffix.z = "serifless" @@ -4310,20 +4306,18 @@ selectorAffix.zDesc = "serifless" selectorAffix."zDesc/reduced" = "serifless" selectorAffix.ezh = "serifless" -[prime.z.variants-buildup.stages.serifs.serifed] +[prime.z.variants-buildup.stages.serifs.top-serifed] rank = 2 -groupRank = 1 -descriptionAffix = "serifs" -selectorAffix.z = "serifed" +descriptionAffix = "serifs at top" +selectorAffix.z = "topSerifed" selectorAffix."z/sansSerif" = "serifless" -selectorAffix."z/reduced" = "serifed" +selectorAffix."z/reduced" = "topSerifed" selectorAffix.zDesc = "topSerifed" selectorAffix."zDesc/reduced" = "topSerifed" -selectorAffix.ezh = "serifed" +selectorAffix.ezh = "topSerifed" [prime.z.variants-buildup.stages.serifs.bottom-serifed] rank = 3 -groupRank = 2 descriptionAffix = "serifs at bottom" selectorAffix.z = "bottomSerifed" selectorAffix."z/sansSerif" = "serifless" @@ -4332,16 +4326,15 @@ selectorAffix.zDesc = "serifless" selectorAffix."zDesc/reduced" = "serifless" selectorAffix.ezh = "serifless" -[prime.z.variants-buildup.stages.serifs.top-serifed] +[prime.z.variants-buildup.stages.serifs.serifed] rank = 4 -groupRank = 2 -descriptionAffix = "serifs at top" -selectorAffix.z = "topSerifed" +descriptionAffix = "serifs" +selectorAffix.z = "serifed" selectorAffix."z/sansSerif" = "serifless" -selectorAffix."z/reduced" = "topSerifed" +selectorAffix."z/reduced" = "serifed" selectorAffix.zDesc = "topSerifed" selectorAffix."zDesc/reduced" = "topSerifed" -selectorAffix.ezh = "serifed" +selectorAffix.ezh = "topSerifed" [prime.z.variants-buildup.stages.overlay.no-overlay] rank = 1 @@ -5017,19 +5010,19 @@ descriptionJoiner = "without" selectorAffix."grek/mu" = "serifless" selectorAffix."grek/mu/sansSerif" = "serifless" -[prime.lower-mu.variants-buildup.stages.serifs.motion-serifed] -rank = 2 -descriptionAffix = "motion serifs at top-left and bottom-right" -selectorAffix."grek/mu" = "motionSerifed" -selectorAffix."grek/mu/sansSerif" = "serifless" - [prime.lower-mu.variants-buildup.stages.serifs.bottom-right-serifed] -rank = 3 +rank = 2 disableIf = [{ body = "NOT toothed" }] descriptionAffix = "serif at bottom-right" selectorAffix."grek/mu" = "bottomRightSerifed" selectorAffix."grek/mu/sansSerif" = "serifless" +[prime.lower-mu.variants-buildup.stages.serifs.motion-serifed] +rank = 3 +descriptionAffix = "motion serifs at top-left and bottom-right" +selectorAffix."grek/mu" = "motionSerifed" +selectorAffix."grek/mu/sansSerif" = "serifless" + [prime.lower-mu.variants-buildup.stages.serifs.serifed] rank = 4 descriptionAffix = "serifs" @@ -6467,15 +6460,37 @@ selector."one/sansSerif" = "noBaseTopCut" sampler = "2" tagKind = "digit" -[prime.two.variants.straight-neck] +[prime.two.variants-buildup] +entry = "body" +descriptionLeader = "`2`" + +[prime.two.variants-buildup.stages.body."*"] +next = "serifs" + +[prime.two.variants-buildup.stages.body.straight-neck] +rank = 1 +descriptionAffix = "straight neck" +selectorAffix.two = "straightNeck" +selectorAffix."two/sansSerif" = "straightNeck" + +[prime.two.variants-buildup.stages.body.curly-neck] +rank = 2 +descriptionAffix = "curly neck" +selectorAffix.two = "curlyNeck" +selectorAffix."two/sansSerif" = "curlyNeck" + +[prime.two.variants-buildup.stages.serifs.serifless] rank = 1 -description = "`2` with straight neck" -selector.two = "straightNeck" +descriptionJoiner = "without" +descriptionAffix = "serifs" +selectorAffix.two = "serifless" +selectorAffix."two/sansSerif" = "serifless" -[prime.two.variants.curly-neck] +[prime.two.variants-buildup.stages.serifs.serifed] rank = 2 -description = "`2` with curly neck" -selector.two = "curlyNeck" +descriptionAffix = "serifs" +selectorAffix.two = "serifed" +selectorAffix."two/sansSerif" = "serifless" @@ -6483,15 +6498,38 @@ selector.two = "curlyNeck" sampler = "3" tagKind = "digit" -[prime.three.variants.flat-top] +[prime.three.variants-buildup] +entry = "body" +descriptionLeader = "`3`" + +[prime.three.variants-buildup.stages.body."*"] +next = "serifs" + +[prime.three.variants-buildup.stages.body.flat-top] rank = 1 -description = "Flat top `3` (Like Museo Sans / Montserrat)" -selector.three = "flatTop" +descriptionAffix = "flat top (Like Museo Sans / Montserrat)" +selectorAffix.three = "flatTop" +selectorAffix."three/sansSerif" = "flatTop" -[prime.three.variants.two-arcs] +[prime.three.variants-buildup.stages.body.two-arcs] rank = 2 -description = "Arched top `3`" -selector.three = "twoArcs" +next = "END" +descriptionAffix = "arched top" +selectorAffix.three = "twoArcs" +selectorAffix."three/sansSerif" = "twoArcs" + +[prime.three.variants-buildup.stages.serifs.serifless] +rank = 1 +descriptionJoiner = "without" +descriptionAffix = "serifs" +selectorAffix.three = "serifless" +selectorAffix."three/sansSerif" = "serifless" + +[prime.three.variants-buildup.stages.serifs.serifed] +rank = 2 +descriptionAffix = "serifs" +selectorAffix.three = "serifed" +selectorAffix."three/sansSerif" = "serifless" @@ -6499,35 +6537,58 @@ selector.three = "twoArcs" sampler = "4" tagKind = "digit" -[prime.four.variants.closed] +[prime.four.variants-buildup] +entry = "openness" +descriptionLeader = "`4`" + +[prime.four.variants-buildup.stages.openness."*"] +next = "horizontal-bar" + +[prime.four.variants-buildup.stages.openness.closed] rank = 1 -description = "`4` with closed contour" -selector.four = "closed" +descriptionAffix = "closed contour" +selectorAffix.four = "closed" +selectorAffix."four/sansSerif" = "closed" -[prime.four.variants.closed-non-crossing] +[prime.four.variants-buildup.stages.openness.semi-open] rank = 2 -description = "`4` with closed contour but the horizontal bar does not overflow the vertical bar" -selector.four = "closedNonCrossing" +descriptionAffix = "semi-open contour" +selectorAffix.four = "semiOpen" +selectorAffix."four/sansSerif" = "semiOpen" -[prime.four.variants.semi-open] +[prime.four.variants-buildup.stages.openness.open] rank = 3 -description = "`4` with semi-open contour" -selector.four = "semiOpen" +descriptionAffix = "open contour" +selectorAffix.four = "open" +selectorAffix."four/sansSerif" = "open" -[prime.four.variants.semi-open-non-crossing] -rank = 4 -description = "`4` with semi-open contour but the horizontal bar does not overflow the vertical bar" -selector.four = "semiOpenNonCrossing" +[prime.four.variants-buildup.stages.horizontal-bar."*"] +next = "serifs" -[prime.four.variants.open] -rank = 5 -description = "`4` with open contour" -selector.four = "open" +[prime.four.variants-buildup.stages.horizontal-bar.crossing] +rank = 1 +keyAffix = "" +selectorAffix.four = "crossing" +selectorAffix."four/sansSerif" = "crossing" -[prime.four.variants.open-non-crossing] -rank = 6 -description = "`4` with open contour but the horizontal bar does not overflow the vertical bar" -selector.four = "openNonCrossing" +[prime.four.variants-buildup.stages.horizontal-bar.non-crossing] +rank = 2 +descriptionAffix = "horizontal bar that does not overflow the vertical bar" +selectorAffix.four = "nonCrossing" +selectorAffix."four/sansSerif" = "nonCrossing" + +[prime.four.variants-buildup.stages.serifs.serifless] +rank = 1 +descriptionJoiner = "without" +descriptionAffix = "serifs" +selectorAffix.four = "serifless" +selectorAffix."four/sansSerif" = "serifless" + +[prime.four.variants-buildup.stages.serifs.serifed] +rank = 2 +descriptionAffix = "serifs" +selectorAffix.four = "serifed" +selectorAffix."four/sansSerif" = "serifless" @@ -6546,26 +6607,48 @@ next = "middle" rank = 1 descriptionAffix = "upright upper-left bar" selectorAffix.five = "upright" +selectorAffix."five/sansSerif" = "upright" selectorAffix.zhuangToneFive = "upright" [prime.five.variants-buildup.stages.upper-left-bar.oblique] rank = 2 description = "oblique upper-left bar" selectorAffix.five = "oblique" +selectorAffix."five/sansSerif" = "oblique" selectorAffix.zhuangToneFive = "upright" +[prime.five.variants-buildup.stages.middle."*"] +next = "serifs" + [prime.five.variants-buildup.stages.middle.arched] rank = 1 descriptionAffix = "arched middle part" selectorAffix.five = "arched" +selectorAffix."five/sansSerif" = "arched" selectorAffix.zhuangToneFive = "arched" [prime.five.variants-buildup.stages.middle.flat] rank = 2 descriptionAffix = "flat middle part" selectorAffix.five = "flat" +selectorAffix."five/sansSerif" = "flat" selectorAffix.zhuangToneFive = "flat" +[prime.five.variants-buildup.stages.serifs.serifless] +rank = 1 +descriptionJoiner = "without" +descriptionAffix = "serifs" +selectorAffix.five = "serifless" +selectorAffix."five/sansSerif" = "serifless" +selectorAffix.zhuangToneFive = "serifless" + +[prime.five.variants-buildup.stages.serifs.serifed] +rank = 2 +descriptionAffix = "serifs" +selectorAffix.five = "serifed" +selectorAffix."five/sansSerif" = "serifless" +selectorAffix.zhuangToneFive = "serifed" + [prime.six] @@ -7334,17 +7417,17 @@ descriptionAffix = "serifs" descriptionJoiner = "without" selectorAffix."micro" = "serifless" -[prime.micro-sign.variants-buildup.stages.serifs.motion-serifed] -rank = 2 -descriptionAffix = "motion serifs at top-left and bottom-right" -selectorAffix."micro" = "motionSerifed" - [prime.micro-sign.variants-buildup.stages.serifs.bottom-right-serifed] -rank = 3 +rank = 2 disableIf = [{ body = "NOT toothed" }] descriptionAffix = "serif at bottom-right" selectorAffix."micro" = "bottomRightSerifed" +[prime.micro-sign.variants-buildup.stages.serifs.motion-serifed] +rank = 3 +descriptionAffix = "motion serifs at top-left and bottom-right" +selectorAffix."micro" = "motionSerifed" + [prime.micro-sign.variants-buildup.stages.serifs.serifed] rank = 4 descriptionAffix = "serifs" @@ -7454,7 +7537,6 @@ selector."lig-hyphen" = "withoutNotch" sampler = "++ " samplerExplain = "Plus ligations" tagKind = "ligature" -nonBreakingTagForNewVariantSelector = "VXAA" [prime.lig-plus-chain.variants.with-notch] rank = 1 @@ -7631,10 +7713,10 @@ cyrl-ya = "straight-serifless" # Digits zero = "slashed" one = "no-base" -two = "curly-neck" +two = "curly-neck-serifless" three = "two-arcs" -four = "semi-open" -five = "upright-arched" +four = "semi-open-serifless" +five = "upright-arched-serifless" six = "straight-bar" seven = "straight-serifless" eight = "crossing" @@ -7764,6 +7846,9 @@ cyrl-ef = "serifed" cyrl-capital-ya = "straight-serifed" cyrl-ya = "straight-serifed" one = "base" +two = "curly-neck-serifed" +four = "semi-open-serifed" +five = "upright-arched-serifed" seven = "straight-serifed" micro-sign = "toothed-serifed" @@ -7842,8 +7927,8 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "dotted" one = "base" -two = "straight-neck" -four = "closed" +two = "straight-neck-serifless" +four = "closed-serifless" six = "closed-contour" nine = "closed-contour" asterisk = "hex-mid" @@ -7890,6 +7975,8 @@ cyrl-em = "flat-bottom-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" +two = "straight-neck-serifed" +four = "closed-serifed" micro-sign = "toothed-serifed" @@ -7940,8 +8027,8 @@ cyrl-ef = "split-serifless" cyrl-yeri = "corner" cyrl-yery = "corner" one = "base" -two = "straight-neck" -four = "closed" +two = "straight-neck-serifed" +four = "closed-serifed" six = "closed-contour" seven = "bend-serifed" eight = "two-circles" @@ -8017,8 +8104,8 @@ cyrl-capital-u = "straight-turn-serifless" cyrl-u = "straight-turn-serifless" cyrl-ef = "serifless" one = "base" -two = "straight-neck" -four = "closed" +two = "straight-neck-serifless" +four = "closed-serifless" six = "closed-contour" nine = "closed-contour" asterisk = "hex-mid" @@ -8066,6 +8153,8 @@ cyrl-em = "slanted-sides-hanging-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +two = "straight-neck-serifed" +four = "closed-serifed" micro-sign = "tailed-serifed" [composite.ss03.slab-override.italic] @@ -8120,8 +8209,8 @@ cyrl-ef = "serifless" cyrl-yeri = "corner" cyrl-yery = "corner" one = "base" -two = "straight-neck" -four = "closed" +two = "straight-neck-serifless" +four = "closed-serifless" six = "closed-contour" eight = "two-circles" nine = "closed-contour" @@ -8168,6 +8257,8 @@ cyrl-ka = "straight-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +two = "straight-neck-serifed" +four = "closed-serifed" micro-sign = "tailed-serifed" @@ -8207,7 +8298,7 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "oval-dotted" one = "base" -two = "straight-neck" +two = "straight-neck-serifless" six = "closed-contour" eight = "crossing-asymmetric" nine = "open-contour" @@ -8256,6 +8347,7 @@ cyrl-em = "slanted-sides-hanging-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" +two = "straight-neck-serifed" micro-sign = "toothed-serifed" @@ -8292,8 +8384,8 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "dotted" one = "base" -four = "closed" -five = "oblique-arched" +four = "closed-serifless" +five = "oblique-arched-serifless" six = "closed-contour" seven = "bend-serifless" eight = "two-circles" @@ -8341,6 +8433,8 @@ cyrl-em = "flat-bottom-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +four = "closed-serifed" +five = "oblique-arched-serifed" seven = "bend-serifed" micro-sign = "toothed-serifed" @@ -8381,7 +8475,7 @@ cyrl-ef = "serifless" cyrl-yeri = "corner" cyrl-yery = "corner" one = "base" -four = "closed" +four = "closed-serifless" six = "closed-contour" seven = "curly-serifless" nine = "closed-contour" @@ -8426,6 +8520,7 @@ cyrl-ka = "symmetric-connected-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +four = "closed-serifed" seven = "curly-serifed" micro-sign = "toothed-serifed" @@ -8482,8 +8577,8 @@ cyrl-ef = "serifless" cyrl-capital-ya = "curly-serifless" cyrl-ya = "curly-serifless" zero = "diamond-reverse-slashed-split" -four = "closed" -five = "upright-flat" +four = "closed-serifless" +five = "upright-flat-serifless" six = "closed-contour" seven = "curly-serifless" nine = "closed-contour" @@ -8540,6 +8635,8 @@ cyrl-u = "curly-serifed" cyrl-ef = "serifed" cyrl-capital-ya = "curly-serifed" cyrl-ya = "curly-serifed" +four = "closed-serifed" +five = "upright-flat-serifed" seven = "bend-serifed" micro-sign = "toothed-serifed" @@ -8588,9 +8685,9 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "oval-dotted" one = "base-flat-top-serif" -two = "straight-neck" -four = "closed" -five = "oblique-arched" +two = "straight-neck-serifless" +four = "closed-serifless" +five = "oblique-arched-serifless" six = "closed-contour" seven = "bend-serifless" eight = "crossing-asymmetric" @@ -8628,6 +8725,9 @@ cyrl-em = "flat-bottom-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" +two = "straight-neck-serifed" +four = "closed-serifed" +five = "oblique-arched-serifed" seven = "bend-serifed" micro-sign = "tailed-serifed" @@ -8670,7 +8770,7 @@ lower-iota = "serifed-flat-tailed" lower-lambda = "straight" lower-tau = "flat-tailed" one = "base-flat-top-serif" -four = "closed" +four = "closed-serifless" eight = "two-circles" underscore = "low" guillemet = "straight" @@ -8700,6 +8800,7 @@ long-s = "flat-hook-double-serifed" eszet = "sulzbacher-bottom-serifed" cyrl-capital-u = "straight-serifed" cyrl-u = "straight-serifed" +four = "closed-serifed" micro-sign = "toothless-rounded-serifed" [composite.ss10.slab-override.italic] @@ -8721,9 +8822,9 @@ description = "X Window Style" [composite.ss11.design] zero = "oval-unslashed" one = "base" -two = "straight-neck" -three = "flat-top" -four = "closed" +two = "straight-neck-serifless" +three = "flat-top-serifless" +four = "closed-serifless" six = "closed-contour" eight = "two-circles" nine = "closed-contour" @@ -8736,6 +8837,11 @@ dollar = "through-cap" cent = "through-cap" percent = "rings-continuous-slash" +[composite.ss11.slab-override.design] +two = "straight-neck-serifed" +three = "flat-top-serifed" +four = "closed-serifed" + [composite.ss12] @@ -8780,8 +8886,8 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "oval-dotted" one = "base" -four = "closed" -five = "oblique-arched" +four = "closed-serifless" +five = "oblique-arched-serifless" six = "open-contour" seven = "bend-serifless" eight = "crossing-asymmetric" @@ -8834,6 +8940,8 @@ cyrl-em = "slanted-sides-hanging-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +four = "closed-serifed" +five = "oblique-arched-serifed" seven = "bend-serifed" micro-sign = "toothless-corner-serifed" @@ -8888,7 +8996,7 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "oval-unslashed" one = "base" -four = "closed" +four = "closed-serifless" six = "closed-contour" seven = "bend-serifless" eight = "crossing-asymmetric" @@ -8937,6 +9045,7 @@ cyrl-em = "flat-bottom-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" +four = "closed-serifed" seven = "bend-serifed" micro-sign = "toothed-serifed" @@ -8975,10 +9084,10 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "dotted" one = "base" -two = "straight-neck" -three = "flat-top" -four = "semi-open-non-crossing" -five = "upright-flat" +two = "straight-neck-serifless" +three = "flat-top-serifless" +four = "semi-open-non-crossing-serifless" +five = "upright-flat-serifless" seven = "straight-serifed" eight = "two-circles" asterisk = "penta-low" @@ -9019,6 +9128,10 @@ lower-alpha = "barred-double-serifed" lower-mu = "toothed-serifed" cyrl-capital-u = "straight-serifed" cyrl-u = "straight-serifed" +two = "straight-neck-serifed" +three = "flat-top-serifed" +four = "semi-open-non-crossing-serifed" +five = "upright-flat-serifed" micro-sign = "toothed-serifed" [composite.ss14.slab-override.italic] @@ -9071,9 +9184,9 @@ cyrl-capital-ya = "straight-motion-serifed" cyrl-ya = "straight-motion-serifed" zero = "dotted" one = "base" -two = "straight-neck" -four = "closed" -five = "oblique-arched" +two = "straight-neck-serifless" +four = "closed-serifless" +five = "oblique-arched-serifless" six = "open-contour" seven = "straight-serifed" eight = "two-circles" @@ -9127,6 +9240,9 @@ cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" cyrl-capital-ya = "straight-serifed" cyrl-ya = "straight-serifed" +two = "straight-neck-serifed" +four = "closed-serifed" +five = "oblique-arched-serifed" micro-sign = "toothed-serifed" [composite.ss15.slab-override.italic] @@ -9190,9 +9306,9 @@ cyrl-yeri = "corner" cyrl-yery = "corner" cyrl-ya = "straight-motion-serifed" one = "base" -two = "straight-neck" -three = "flat-top" -four = "closed" +two = "straight-neck-serifless" +three = "flat-top-serifless" +four = "closed-serifless" six = "open-contour" eight = "crossing-asymmetric" nine = "open-contour" @@ -9232,6 +9348,9 @@ cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "split-serifed" cyrl-ya = "straight-serifed" +two = "straight-neck-serifed" +three = "flat-top-serifed" +four = "closed-serifed" micro-sign = "toothed-serifed" @@ -9276,8 +9395,7 @@ cyrl-capital-u = "straight-turn-serifless" cyrl-u = "straight-turn-serifless" cyrl-capital-ya = "straight-motion-serifed" one = "base" -four = "semi-open" -five = "oblique-arched" +five = "oblique-arched-serifless" six = "closed-contour" seven = "straight-serifed" nine = "closed-contour" @@ -9345,6 +9463,7 @@ cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-capital-ya = "straight-serifed" cyrl-ya = "straight-serifed" +five = "oblique-arched-serifed" micro-sign = "tailed-serifed" [composite.ss17.slab-override.italic] @@ -9393,8 +9512,8 @@ cyrl-yeri = "corner" cyrl-yery = "corner" zero = "dotted" one = "base" -four = "closed" -five = "upright-flat" +four = "closed-serifless" +five = "upright-flat-serifless" six = "closed-contour" seven = "bend-serifless" eight = "two-circles" @@ -9431,6 +9550,8 @@ lower-alpha = "barred-tailed-serifed" cyrl-capital-u = "straight-turn-serifed" cyrl-u = "straight-turn-serifed" cyrl-ef = "serifed" +four = "closed-serifed" +five = "upright-flat-serifed" seven = "bend-serifed" micro-sign = "tailed-serifed" diff --git a/tools/amend-readme/package.json b/tools/amend-readme/package.json index 8f7528f0be..638c1ff2bf 100644 --- a/tools/amend-readme/package.json +++ b/tools/amend-readme/package.json @@ -1,13 +1,13 @@ { "name": "@iosevka/amend-readme", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs" }, "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/param": "28.1.0", + "@iosevka/param": "29.0.0", "@unicode/unicode-15.1.0": "^1.5.2" } } diff --git a/tools/amend-readme/src/generate-release-note.mjs b/tools/amend-readme/src/generate-release-note.mjs index f206363c0c..cc6172af1e 100644 --- a/tools/amend-readme/src/generate-release-note.mjs +++ b/tools/amend-readme/src/generate-release-note.mjs @@ -46,7 +46,7 @@ export default async function main(argv) { `
` + `Package hashes (SHA-256)` + `
` + - `` + ``, ); await fs.promises.writeFile(argv.outputPath, out.data); } diff --git a/tools/amend-readme/src/index.mjs b/tools/amend-readme/src/index.mjs index 00c123099c..f7f3918a29 100644 --- a/tools/amend-readme/src/index.mjs +++ b/tools/amend-readme/src/index.mjs @@ -21,7 +21,7 @@ async function main(argv) { let readme = await fs.promises.readFile(argv.mdFilePath, "utf-8"); const dirs = { images: path.posix.relative(path.dirname(argv.mdFilePath), "images"), - fragments: path.resolve(__dirname, "fragments") + fragments: path.resolve(__dirname, "fragments"), }; readme = (await processSsOt(argv, dirs)).apply(readme); readme = (await processCherryPickingStyles(argv, dirs)).apply(readme); @@ -30,10 +30,10 @@ async function main(argv) { readme = (await processLigSetCherryPicking(argv, dirs)).apply(readme); readme = (await processLigSetPreDef(argv, dirs)).apply(readme); readme = (await processLigSetOt(argv, dirs, 1, g => !isLanguageSpecificLigTag(g.tag))).apply( - readme + readme, ); readme = (await processLigSetOt(argv, dirs, 2, g => isLanguageSpecificLigTag(g.tag))).apply( - readme + readme, ); readme = (await processLangList(argv)).apply(readme); readme = (await processPrivateBuildPlans(argv, dirs)).apply(readme); diff --git a/tools/amend-readme/src/md-format-tools.mjs b/tools/amend-readme/src/md-format-tools.mjs index 15d983de36..be3aa9f3ef 100644 --- a/tools/amend-readme/src/md-format-tools.mjs +++ b/tools/amend-readme/src/md-format-tools.mjs @@ -4,7 +4,7 @@ export class MdCol { this.sectionName = sectionName; this.matchRegex = new RegExp( `^([ \\t]*)\\n[\\s\\S]*?\\n`, - `m` + `m`, ); } log(...s) { diff --git a/tools/amend-readme/src/sections/cherry-picking-styles.mjs b/tools/amend-readme/src/sections/cherry-picking-styles.mjs index a0a6fb80b5..22e4bb5083 100644 --- a/tools/amend-readme/src/sections/cherry-picking-styles.mjs +++ b/tools/amend-readme/src/sections/cherry-picking-styles.mjs @@ -21,7 +21,7 @@ export default async function processCherryPickingStyles(argv, dirs) { const info = { introMD: cv.description || `Styles for ${sampleText + explainText}`, sampleImageCountEm: sampleImageCountEmOfCv(cv), - alternatives: [] + alternatives: [], }; const defaults = figureOutDefaults(variantsData, cv); for (const cvv of cv.variants) { @@ -31,14 +31,14 @@ export default async function processCherryPickingStyles(argv, dirs) { imageId: `${cv.key}-${cvv.key}`, selectors: [`${cv.key} = '${cvv.key}'`, `${cv.tag} = ${cvv.rank}`], description: - formatDescription(cvv.description) + formatDefaults(cvv.key, defaults) + formatDescription(cvv.description) + formatDefaults(cvv.key, defaults), }); } else { info.alternatives.push({ imageId: `${cv.key}-${cvv.key}`, selectors: [`${cv.key} = '${cvv.key}'`], description: - formatDescription(cvv.description) + formatDefaults(cvv.key, defaults) + formatDescription(cvv.description) + formatDefaults(cvv.key, defaults), }); } } @@ -96,26 +96,26 @@ function figureOutDefaults(variantsData, gr) { desc: "Sans Upright", mask: 1, result: null, - composition: { ...variantsData.defaults.sans.upright } + composition: { ...variantsData.defaults.sans.upright }, }, { desc: "Sans Italic", mask: 2, result: null, - composition: { ...variantsData.defaults.sans.italic } + composition: { ...variantsData.defaults.sans.italic }, }, { desc: "Slab Upright", mask: 4, result: null, - composition: { ...variantsData.defaults.slab.upright } + composition: { ...variantsData.defaults.slab.upright }, }, { desc: "Slab Italic", mask: 8, result: null, - composition: { ...variantsData.defaults.slab.italic } - } + composition: { ...variantsData.defaults.slab.italic }, + }, ]; for (const variant of gr.variants) { for (const dc of defaultConfigs) { diff --git a/tools/amend-readme/src/sections/cv-influences.mjs b/tools/amend-readme/src/sections/cv-influences.mjs index ebe56346d3..833aae6e52 100644 --- a/tools/amend-readme/src/sections/cv-influences.mjs +++ b/tools/amend-readme/src/sections/cv-influences.mjs @@ -6,12 +6,12 @@ export default async function processCvInfluences(argv) { const cl = await getCharMapAndSupportedLanguageList( argv.charMapPath, argv.charMapItalicPath, - argv.charMapObliquePath + argv.charMapObliquePath, ); let m = { upright: new Map(), - italic: new Map() + italic: new Map(), }; for (const block of cl.unicodeCoverage) { diff --git a/tools/amend-readme/src/sections/cv-ot.mjs b/tools/amend-readme/src/sections/cv-ot.mjs index 9f32076d2d..04846bb916 100644 --- a/tools/amend-readme/src/sections/cv-ot.mjs +++ b/tools/amend-readme/src/sections/cv-ot.mjs @@ -19,7 +19,7 @@ export default async function processCvOt(argv, dirs) { for (let rid = 0; rid < rowsNeeded; rid++) { const entriesInThisRow = Math.min( entriesPerRow, - effVariants.length - rid * entriesPerRow + effVariants.length - rid * entriesPerRow, ); const tailBlankColumnsCount = TableColumns - entryWidth * entriesInThisRow; // Image row diff --git a/tools/amend-readme/src/sections/lang-list.mjs b/tools/amend-readme/src/sections/lang-list.mjs index 228814f434..6c368532d2 100644 --- a/tools/amend-readme/src/sections/lang-list.mjs +++ b/tools/amend-readme/src/sections/lang-list.mjs @@ -6,7 +6,7 @@ export default async function processLangList(argv) { const cl = await getCharMapAndSupportedLanguageList( argv.charMapPath, argv.charMapItalicPath, - argv.charMapObliquePath + argv.charMapObliquePath, ); const md = new MdCol("Section-Language-List"); md.log(`${cl.languages.length} Supported Languages: \n`); diff --git a/tools/amend-readme/src/sections/package-list.mjs b/tools/amend-readme/src/sections/package-list.mjs index c1dd12a5a6..cd05bebb1b 100644 --- a/tools/amend-readme/src/sections/package-list.mjs +++ b/tools/amend-readme/src/sections/package-list.mjs @@ -35,7 +35,7 @@ export default async function processPackageList(argv, dirs) { ttcCells = [ `
Super\u00A0TTC`, `TTC`, - ` ` + ` `, ]; } @@ -43,7 +43,7 @@ export default async function processPackageList(argv, dirs) { ``, `📦 ${familyName} — ${desc}`, ...ttcCells, - `` + ``, ); md.log( ``, @@ -51,7 +51,7 @@ export default async function processPackageList(argv, dirs) { `Spacing`, `Ligatures`, `Downloads`, - `` + ``, ); let lastSubGroupID = null; for (const [subGroupID, subGr] of Object.entries(gr.subGroups)) { @@ -78,7 +78,7 @@ export default async function processPackageList(argv, dirs) { `(${createLink("Unhinted", "PkgTTF-Unhinted")})`, `${createLink("WebFont", "PkgWebFont")} ` + `(${createLink("Unhinted", "PkgWebFont-Unhinted")})`, - `` + ``, ); } md.log(``, `${img}`, ``); @@ -98,7 +98,7 @@ const Spacings = { type: ["Default", true], term: ["Terminal", true], fixed: ["Fixed", false], - "quasi-proportional": ["Default", false] + "quasi-proportional": ["Default", false], }; function flag(f) { return f ? "Yes" : "No"; diff --git a/tools/amend-readme/src/sections/ss-ot.mjs b/tools/amend-readme/src/sections/ss-ot.mjs index 28b4d55ee3..38da711dfa 100644 --- a/tools/amend-readme/src/sections/ss-ot.mjs +++ b/tools/amend-readme/src/sections/ss-ot.mjs @@ -18,7 +18,7 @@ export default async function processSsOt(argv, dirs) { ``, `${ImgX(`${dirs.images}/ss-u-${ss.tag}-${ss.rank}`)}`, `${ImgX(`${dirs.images}/ss-i-${ss.tag}-${ss.rank}`)}`, - `` + ``, ); } } diff --git a/tools/data-export/package.json b/tools/data-export/package.json index 97d2366602..b7c4032324 100644 --- a/tools/data-export/package.json +++ b/tools/data-export/package.json @@ -1,6 +1,6 @@ { "name": "@iosevka/data-export", - "version": "28.1.0", + "version": "29.0.0", "private": true, "exports": { ".": "./src/index.mjs", @@ -10,7 +10,7 @@ }, "dependencies": { "@iarna/toml": "^2.2.5", - "@iosevka/param": "28.1.0", + "@iosevka/param": "29.0.0", "@unicode/unicode-15.1.0": "^1.5.2", "cldr": "^7.5.0" } diff --git a/tools/data-export/src/coverage-export/additional-char-data.txt b/tools/data-export/src/coverage-export/additional-char-data.txt index c54035a5d6..5db6e10337 100644 --- a/tools/data-export/src/coverage-export/additional-char-data.txt +++ b/tools/data-export/src/coverage-export/additional-char-data.txt @@ -1,7 +1,7 @@ # Additional characters for legacy computing # Copied from https://www.unicode.org/L2/L2021/21235r-terminals-supplement.pdf # DELETE THIS DATA AFTER UNICODE 16 IS RELEASED -! NameSuffix; (Purposed by L2/21-235R) +! NameSuffix; (Proposed by L2/21-235R) 2427;SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; 2428;SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; 2429;SYMBOL FOR DELETE MEDIUM SHADE FORM;So;0;ON;;;;;N;;;;; diff --git a/tools/data-export/src/coverage-export/block-data.mjs b/tools/data-export/src/coverage-export/block-data.mjs index c59688c12d..5b4b841fb4 100644 --- a/tools/data-export/src/coverage-export/block-data.mjs +++ b/tools/data-export/src/coverage-export/block-data.mjs @@ -5,7 +5,7 @@ export async function collectBlockData() { [[0xe0a0, 0xe0df], "Private Use Area — Powerline"], [[0xee00, 0xee0f], "Private Use Area — Progress Bar"], [[0xef10, 0xef1f], "Private Use Area — Iosevka Private Dingbats"], - [[0x1cc00, 0x1ceaf], "Symbols for Legacy Computing Supplement (Purposed)"] + [[0x1cc00, 0x1ceaf], "Symbols for Legacy Computing Supplement (Proposed)"], ]; for (const id of UnicodeDataIndex.Block) { diff --git a/tools/data-export/src/coverage-export/char-data.mjs b/tools/data-export/src/coverage-export/char-data.mjs index 12f7dfa7ae..3faf941710 100644 --- a/tools/data-export/src/coverage-export/char-data.mjs +++ b/tools/data-export/src/coverage-export/char-data.mjs @@ -18,7 +18,7 @@ class CharDataLookup { } else { return { gc: ugc.get(lch), - charName: ucdNames.get(lch) + charName: ucdNames.get(lch), }; } } @@ -29,7 +29,7 @@ export async function createCharDataLookup() { const additionalDataTxt = await fs.promises.readFile( path.join(__dirname, "additional-char-data.txt"), - "utf-8" + "utf-8", ); let nameSuffix = ""; diff --git a/tools/data-export/src/coverage-export/gather-coverage-data.mjs b/tools/data-export/src/coverage-export/gather-coverage-data.mjs index 1479158cca..3c569be0b7 100644 --- a/tools/data-export/src/coverage-export/gather-coverage-data.mjs +++ b/tools/data-export/src/coverage-export/gather-coverage-data.mjs @@ -48,7 +48,7 @@ export async function gatherCoverageData(covUpright, covItalic, covOblique) { ...putFeatSeries(featureSeriesStore, "typographicFeatureSets", typoFs), ...putFeatSeries(featureSeriesStore, "cvFeatureSetsUpright", uprightFs), ...putFeatSeries(featureSeriesStore, "cvFeatureSetsItalic", italicFs), - ...putFeatSeries(featureSeriesStore, "cvFeatureSetsOblique", obliqueFs) + ...putFeatSeries(featureSeriesStore, "cvFeatureSetsOblique", obliqueFs), }); } else { blockResults.push({ lch, gc, charName, inFont: false, glyphName: undefined }); @@ -57,7 +57,7 @@ export async function gatherCoverageData(covUpright, covItalic, covOblique) { if (blockResults.length) { unicodeCoverage.push({ name: block, - characters: blockResults.sort((a, b) => a.lch - b.lch) + characters: blockResults.sort((a, b) => a.lch - b.lch), }); } } diff --git a/tools/data-export/src/index.mjs b/tools/data-export/src/index.mjs index b8d1e6eb41..a829ea6a61 100644 --- a/tools/data-export/src/index.mjs +++ b/tools/data-export/src/index.mjs @@ -11,7 +11,7 @@ async function main(argv) { const cl = await getCharMapAndSupportedLanguageList( argv.charMapPath, argv.charMapItalicPath, - argv.charMapObliquePath + argv.charMapObliquePath, ); await fs.promises.writeFile( argv.exportPathMeta, @@ -22,15 +22,15 @@ async function main(argv) { ligationData: { cherry: ligationData.cherry, samplesNarrow: ligationData.samplesNarrow, - nonMergeSets: ligationData.nonMergeSets - } + nonMergeSets: ligationData.nonMergeSets, + }, }, null, - 2 - ) + 2, + ), ); await fs.promises.writeFile( argv.exportPathCov, - JSON.stringify({ version: argv.version, ...cl }, null, 2) + JSON.stringify({ version: argv.version, ...cl }, null, 2), ); } diff --git a/tools/data-export/src/ligation-data.mjs b/tools/data-export/src/ligation-data.mjs index d6f25a0847..a785a30829 100644 --- a/tools/data-export/src/ligation-data.mjs +++ b/tools/data-export/src/ligation-data.mjs @@ -19,7 +19,7 @@ const ligationSamplesNarrow = [ "--->", "->-", ">-", - ">>-" + ">>-", ], [ "=<<", @@ -35,7 +35,7 @@ const ligationSamplesNarrow = [ "===>", "=>=", ">=", - ">>=" + ">>=", ], ["<->", "<-->", "<--->", "<---->", "<=>", "<==>", "<===>", "<====>", "::", ":::", "__"], [ @@ -53,7 +53,7 @@ const ligationSamplesNarrow = [ "!==", "!===", "=/=", - "=!=" + "=!=", ], [ "<:", @@ -72,7 +72,7 @@ const ligationSamplesNarrow = [ "+*", "=*", "=:", - ":>" + ":>", ], [ "(*", @@ -90,13 +90,13 @@ const ligationSamplesNarrow = [ "|-", "-|", "