diff --git a/.gitignore b/.gitignore
index 478a9385..bceed29a 100755
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,10 @@ Thumbs.db
######################
node_modules
+# Python #
+######################
+.venv
+
# Full font files for analysis only #
#####################################
fonts/resources/monolisa/monolisa.ttf
diff --git a/Makefile b/Makefile
index 4a8082da..7d842523 100644
--- a/Makefile
+++ b/Makefile
@@ -2,19 +2,21 @@ default: install lint test fonts/stylesheets/stylesheet.css
install:
npm install
+ cd tools && python3 -m venv .venv
+ cd tools && .venv/bin/python -m pip --require-virtualenv install -r requirements.txt
lint:
npx eslint *.js modules/*.js
test:
npx jsonschema validate fonts-schema.json fonts.json
- node validate.js
+ cd tools && .venv/bin/python validate.py
fonts/stylesheets/stylesheet.css: fonts/stylesheets/fonts.less
npx lessc $^ $@
list:
- python3 listing.py
+ cd tools && .venv/bin/python listing.py
serve:
open "http://localhost:8000"
diff --git a/README.md b/README.md
index 5bfb0417..963256e6 100755
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Please feel free to make a little donation via to keep this labour of love runni
- Which adheres to [a schema](https://github.com/braver/programmingfonts/blob/gh-pages/fonts-schema.json).
- Font files are stored in [fonts/resources](https://github.com/braver/programmingfonts/tree/gh-pages/fonts/resources).
- We store only 4 variants (if available), in `.woff2` format: regular, italic, bold, bold+italic.
- - If you don't have a `.woff2` you can use `convert.py` to create them off the ttf/otf file.
+ - If you don't have a `.woff2` you can use `tools/convert.py` to create them off the ttf/otf file.
- All font files (and directories) are normalized to lowercase, without `-mono` unless it's really part of the name.
- Each font lives in a directory named after its alias, and the variant files within follow a consistent naming scheme based on that alias:
- regular: no suffix, e.g. `iosevka/iosevka.woff2`
@@ -34,8 +34,8 @@ Please feel free to make a little donation via to keep this labour of love runni
- Running `make` installs dependencies, lints, validates `fonts.json` (against [fonts-schema.json](https://github.com/braver/programmingfonts/blob/gh-pages/fonts-schema.json) and `validate.js`), and builds the stylesheet.
- The stylesheet [stylesheet.css](https://github.com/braver/programmingfonts/blob/gh-pages/fonts/stylesheets/stylesheet.css) is generated from `fonts.less` via `npx lessc` — don't edit it by hand; edit `fonts.less` and rebuild.
- Run `make serve` to preview the site locally (`python3 -m http.server`).
-- Run `make list` (or `python3 listing.py`) to print an updated list of all the fonts, be sure to update this README with your addition.
-- Run `python3 info.py --name yourfont` to add glyph, character and language counts.
+- Run `make list` to print an updated list of all the fonts, be sure to update this README with your addition.
+- Run `python3 tools/info.py --name yourfont` to add glyph, character and language counts.
## Limitations of this project
@@ -109,12 +109,6 @@ Some bitmap fonts are only available in (Windows) FON files. Sometimes conversio
For "the world's biggest collection of classic text mode fonts, system fonts and BIOS fonts from DOS-era IBM PCs and compatibles", please have a look here: https://int10h.org/oldschool-pc-fonts/.
-### Mixed fonts
-
-These fonts combine different fonts, that are mostly already featured on this website, to create a complete set of characters for both latin script, and CJK:
-- Ricty Diminished: https://github.com/edihbrandon/RictyDiminished (combines Inconsolata for Latin script with M+ for others)
-- Sarasa-Gothic: https://github.com/be5invis/Sarasa-Gothic A CJK programming font based on Iosevka and Source Han Sans.
-
The PICO-8 project combines and tweaks several fonts for PICO-8 programming: https://github.com/juanitogan/p8-programming-fonts
## All the fonts
@@ -145,7 +139,8 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [CamingoCode](http://www.janfromm.de/typefaces/camingomono/camingocode) _CC BY-ND 3.0_ ([view](https://www.programmingfonts.org/#camingocode))
- [Cartograph](https://connary.com/cartograph.html) _commercial_ ([view](https://www.programmingfonts.org/#cartograph))
- [Cascadia Code](https://github.com/microsoft/cascadia-code) _SIL OFL_ ([view](https://www.programmingfonts.org/#cascadia-code))
-- [Chivo Mono](https://www.omnibus-type.com/variable-fonts/#chivo-mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#chivo))
+- [Chivo Mono](https://www.omnibus-type.com/fonts/chivo/) _SIL OFL_ ([view](https://www.programmingfonts.org/#chivo))
+- [Cilantro Code Mono](https://github.com/DraftingDreamer/FontCilantroCode) _SIL OFL_ ([view](https://www.programmingfonts.org/#cilantro-code-mono))
- [Computer Modern Unicode Typewriter](https://cm-unicode.sourceforge.io) _SIL OFL_ ([view](https://www.programmingfonts.org/#cm-unicode))
- [Code New Roman](https://fontlibrary.org/en/font/code-new-roman) _SIL OFL_ ([view](https://www.programmingfonts.org/#code-new-roman))
- [Comic Mono](https://dtinth.github.io/comic-mono-font/) _MIT_ ([view](https://www.programmingfonts.org/#comic-mono))
@@ -153,7 +148,11 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [Commit Mono](https://commitmono.com) _SIL OFL_ ([view](https://www.programmingfonts.org/#commit-mono))
- [Consola Mono](http://openfontlibrary.org/en/font/consolamono) _SIL OFL_ ([view](https://www.programmingfonts.org/#consolamono))
- [IBM Courier](https://github.com/dse/font-og-courier) _permissive_ ([view](https://www.programmingfonts.org/#courier-ibm))
+- [IBM Courier (dot)](https://github.com/dse/font-og-courier) _permissive_ ([view](https://www.programmingfonts.org/#courier-ibm-dotted))
+- [IBM Courier (slash)](https://github.com/dse/font-og-courier) _permissive_ ([view](https://www.programmingfonts.org/#courier-ibm-slashed))
- [Courier Prime](https://quoteunquoteapps.com/courierprime) _SIL OFL_ ([view](https://www.programmingfonts.org/#courier-prime))
+- [Courier Prime Code](https://quoteunquoteapps.com/courierprime) _SIL OFL_ ([view](https://www.programmingfonts.org/#courier-prime-code))
+- [Courier Prime Sans](https://quoteunquoteapps.com/courierprime) _SIL OFL_ ([view](https://www.programmingfonts.org/#courier-prime-sans))
- [Cousine](http://www.fontsquirrel.com/fonts/cousine) _Apache_ ([view](https://www.programmingfonts.org/#cousine))
- [Cozette](https://github.com/slavfox/Cozette) _MIT_ ([view](https://www.programmingfonts.org/#cozette))
- [Cutive Mono](https://fonts.google.com/specimen/Cutive+Mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#cutive))
@@ -171,9 +170,13 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [Eirian](https://ggbot.itch.io/eirian-font) _SIL OFL_ ([view](https://www.programmingfonts.org/#eirian))
- [Ellograph CF](https://connary.com/ellograph.html) _commercial_ ([view](https://www.programmingfonts.org/#ellograph))
- [Envy Code B](https://damieng.com/blog/2006/11/06/envy-code-b-font-available-in-ttf-format/) _none_ ([view](https://www.programmingfonts.org/#envy-code-b))
-- [Envy Code R](https://damieng.com/blog/2008/05/26/envy-code-r-preview-7-coding-font-released) _SIL OFL_ ([view](https://www.programmingfonts.org/#envy-code-r))
+- [Envy Code R](https://damieng.com/blog/2008/envy-code-r-preview-7-coding-font-released/) _SIL OFL_ ([view](https://www.programmingfonts.org/#envy-code-r))
- [Fairfax](http://www.kreativekorp.com/software/fonts/fairfax.shtml) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax))
+- [Fairfax Hax](http://www.kreativekorp.com/software/fonts/fairfax.shtml) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax-hax))
- [Fairfax HD](http://www.kreativekorp.com/software/fonts/fairfaxhd.shtml) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax-hd))
+- [Fairfax Hax HD](http://www.kreativekorp.com/software/fonts/fairfaxhd.shtml) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax-hd-hax))
+- [Fairfax Serif](https://www.kreativekorp.com/software/fonts/fairfax/) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax-serif))
+- [Fairfax Serif Hax](https://www.kreativekorp.com/software/fonts/fairfax/) _SIL OFL_ ([view](https://www.programmingfonts.org/#fairfax-serif-hax))
- [Fantasque Sans Mono](https://github.com/belluzj/fantasque-sans) _SIL OFL_ ([view](https://www.programmingfonts.org/#fantasque-sans))
- [Fifteen](http://openfontlibrary.org/en/font/fifteen) _SIL OFL_ ([view](https://www.programmingfonts.org/#fifteen))
- [Fira Mono](https://github.com/mozilla/Fira) _SIL OFL_ ([view](https://www.programmingfonts.org/#fira))
@@ -199,10 +202,18 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [IBM VGA 9x16](https://int10h.org/oldschool-pc-fonts/fontlist/font?ibm_vga_9x16) _CC BY-SA 4.0_ ([view](https://www.programmingfonts.org/#ibm-vga))
- [Inconsolata](https://levien.com/type/myfonts/inconsolata.html) _SIL OFL_ ([view](https://www.programmingfonts.org/#inconsolata))
- [Inconsolata-g](http://leonardo-m.livejournal.com/77079.html) _SIL OFL_ ([view](https://www.programmingfonts.org/#inconsolata-g))
+- [InconsolataGo](https://levien.com/type/myfonts/inconsolata.html) _SIL OFL_ ([view](https://www.programmingfonts.org/#inconsolata-go))
+- [Inconsolata OTF](https://levien.com/type/myfonts/inconsolata.html) _SIL OFL_ ([view](https://www.programmingfonts.org/#inconsolata-otf))
- [Indicate Mono](https://jonastype.com/indicate-mono) _commercial_ ([view](https://www.programmingfonts.org/#indicate))
- [Input Mono](https://input.djr.com) _commercial_ ([view](https://www.programmingfonts.org/#input))
+- [Input Mono Compressed](https://input.djr.com) _commercial_ ([view](https://www.programmingfonts.org/#input-compressed))
+- [Input Mono Condensed](https://input.djr.com) _commercial_ ([view](https://www.programmingfonts.org/#input-condensed))
+- [Input Mono Narrow](https://input.djr.com) _commercial_ ([view](https://www.programmingfonts.org/#input-narrow))
- [Intel One Mono](https://github.com/intel/intel-one-mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#intel-one-mono))
- [Iosevka](http://be5invis.github.io/Iosevka/) _SIL OFL_ ([view](https://www.programmingfonts.org/#iosevka))
+- [Iosevka Extended](http://be5invis.github.io/Iosevka/) _SIL OFL_ ([view](https://www.programmingfonts.org/#iosevka-extended))
+- [Iosevka Slab](http://be5invis.github.io/Iosevka/) _SIL OFL_ ([view](https://www.programmingfonts.org/#iosevka-slab))
+- [Iosevka Slab Extended](http://be5invis.github.io/Iosevka/) _SIL OFL_ ([view](https://www.programmingfonts.org/#iosevka-slab-extended))
- [Ioskeley Mono](https://github.com/ahatem/IoskeleyMono) _SIL OFL_ ([view](https://www.programmingfonts.org/#ioskeley))
- [JetBrains Mono](https://www.jetbrains.com/lp/mono/) _SIL OFL_ ([view](https://www.programmingfonts.org/#jetbrainsmono))
- [JuliaMono](https://juliamono.netlify.app) _SIL OFL_ ([view](https://www.programmingfonts.org/#julia-mono))
@@ -239,7 +250,7 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [Nanum Gothic Coding](https://github.com/naver/nanumfont) _SIL OFL_ ([view](https://www.programmingfonts.org/#nanum-gothic-coding))
- [Nimbus Mono PS](https://www.fontsquirrel.com/fonts/nimbus-mono) _GNU GPL_ ([view](https://www.programmingfonts.org/#nimbus-mono))
- [NK57 Monospace](https://www.dafont.com/nk57-monospace.font) _public domain_ ([view](https://www.programmingfonts.org/#nk57))
-- [Nordwand Mono](https://github.com/tywr/Nordwand-Mono) _public domain_ ([view](https://www.programmingfonts.org/#nordwand-mono))
+- [Nordwand Mono](https://github.com/tywr/Nordwand-Mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#nordwand-mono))
- [NotCourierSans](http://www.fontsquirrel.com/fonts/NotCourierSans) _GNU GPL_ ([view](https://www.programmingfonts.org/#notcouriersans))
- [Noto Sans Mono](https://www.google.com/get/noto/) _SIL OFL_ ([view](https://www.programmingfonts.org/#noto))
- [Nova Mono](https://fonts.google.com/specimen/Nova+Mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#nova))
@@ -261,7 +272,10 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [Recursive](https://www.recursive.design) _SIL OFL_ ([view](https://www.programmingfonts.org/#recursive-mono-linear))
- [Reddit Mono](https://redditsans.s-ings.com) _SIL OFL_ ([view](https://www.programmingfonts.org/#reddit-sans))
- [Red Hat Mono](https://www.redhat.com/en/about/brand/standards/typography) _SIL OFL_ ([view](https://www.programmingfonts.org/#redhat))
+- [Ricty Diminished](https://rictyfonts.github.io/diminished) _SIL OFL_ ([view](https://www.programmingfonts.org/#ricty-diminished))
- [Roboto Mono](https://fonts.google.com/specimen/Roboto+Mono) _Apache_ ([view](https://www.programmingfonts.org/#roboto))
+- [Sarasa Mono](https://github.com/be5invis/Sarasa-Gothic) _SIL OFL_ ([view](https://www.programmingfonts.org/#sarasa-mono))
+- [Sarasa Mono Slab](https://github.com/be5invis/Sarasa-Gothic) _SIL OFL_ ([view](https://www.programmingfonts.org/#sarasa-mono-slab))
- [saxMono](http://www.fontsquirrel.com/fonts/saxMono) _freeware_ ([view](https://www.programmingfonts.org/#sax))
- [Scientifica](https://github.com/nerdypepper/scientifica) _SIL OFL_ ([view](https://www.programmingfonts.org/#scientifica))
- [Sergamon](https://sgmonda.com/sergamon) _SIL OFL_ ([view](https://www.programmingfonts.org/#sergamon))
@@ -272,7 +286,7 @@ The PICO-8 project combines and tweaks several fonts for PICO-8 programming: htt
- [Sk-Modernist](https://seankanedesign.gumroad.com/l/sk-modernist) _commercial_ ([view](https://www.programmingfonts.org/#sk-modernist))
- [Sligoil Micro](https://velvetyne.fr/fonts/sligoil/) _SIL OFL_ ([view](https://www.programmingfonts.org/#sligoil))
- [Sometype Mono](http://monospacedfont.com/) _SIL OFL_ ([view](https://www.programmingfonts.org/#sometype-mono))
-- [Sono](https://etceteratype.co/sono) _SIL OFL_ ([view](https://www.programmingfonts.org/#sono))
+- [Sono](https://etceteratype.co/pages/sono) _SIL OFL_ ([view](https://www.programmingfonts.org/#sono))
- [Source Code Pro](https://github.com/adobe-fonts/source-code-pro) _SIL OFL_ ([view](https://www.programmingfonts.org/#source-code-pro))
- [Space Mono](https://fonts.google.com/specimen/Space+Mono) _SIL OFL_ ([view](https://www.programmingfonts.org/#space))
- [Spleen](https://www.cambus.net/spleen-monospaced-bitmap-fonts/) _BSD-2-Clause_ ([view](https://www.programmingfonts.org/#spleen))
diff --git a/fonts-schema.json b/fonts-schema.json
index 125af10a..9cc981c4 100644
--- a/fonts-schema.json
+++ b/fonts-schema.json
@@ -18,13 +18,26 @@
{ "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" }
]
},
- "name": { "type": "string" },
"author": { "type": "string" },
+ "bitmap size": {
+ "type": "number"
+ },
+ "bitmap height": {
+ "type": "number"
+ },
+ "characters": { "type": "integer" },
"description": { "type": "string" },
- "year": { "type": "integer" },
- "website": {
+ "glyphs": { "type": "integer" },
+ "group": {
"type": "string",
- "format": "uri"
+ "pattern": "^[a-z][a-z0-9-]+$"
+ },
+ "huge": { "type": "boolean" },
+ "languages": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z]+$": { "type": "integer" }
+ }
},
"license": {
"type": "string",
@@ -50,27 +63,14 @@
]
},
"ligatures": { "type": "boolean" },
- "style": {
- "type": "string",
- "enum": ["serif", "sans"]
- },
+ "name": { "type": "string" },
"rendering": {
"type": "string",
"enum": ["bitmap", "vector"]
},
- "bitmap size": {
- "type": "number"
- },
- "bitmap height": {
- "type": "number"
- },
- "zerostyle": {
- "type": "string",
- "enum": ["empty", "slashed", "dotted"]
- },
- "group": {
+ "style": {
"type": "string",
- "pattern": "^[a-z][a-z0-9-]+$"
+ "enum": ["serif", "sans"]
},
"variants": {
"oneOf": [
@@ -87,13 +87,14 @@
}
]
},
- "glyphs": { "type": "integer" },
- "characters": { "type": "integer" },
- "languages": {
- "type": "object",
- "patternProperties": {
- "^[a-zA-Z]+$": { "type": "integer" }
- }
+ "website": {
+ "type": "string",
+ "format": "uri"
+ },
+ "year": { "type": "integer" },
+ "zerostyle": {
+ "type": "string",
+ "enum": ["empty", "slashed", "dotted"]
}
},
"additionalProperties": false,
@@ -101,6 +102,7 @@
"added",
"author",
"description",
+ "glyphs",
"license",
"ligatures",
"name",
@@ -108,8 +110,7 @@
"style",
"variants",
"website",
- "year",
- "glyphs"
+ "year"
]
}
}
diff --git a/fonts.json b/fonts.json
index f6f8b4b9..e9456bf5 100644
--- a/fonts.json
+++ b/fonts.json
@@ -20,10 +20,10 @@
"glyphs": 8818,
"characters": 7559,
"languages": {
- "Latin": 502,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
}
},
"agave": {
@@ -44,7 +44,7 @@
"glyphs": 1958,
"characters": 1949,
"languages": {
- "Latin": 502,
+ "Latin": 509,
"Cyrillic": 91,
"Greek": 2
}
@@ -85,7 +85,7 @@
"glyphs": 766,
"characters": 728,
"languages": {
- "Latin": 365
+ "Latin": 370
}
},
"anonymous-pro": {
@@ -110,7 +110,7 @@
"characters": 623,
"languages": {
"Latin": 289,
- "Cyrillic": 12,
+ "Cyrillic": 13,
"Greek": 1
}
},
@@ -158,6 +158,7 @@
"added": "2026-01-21",
"author": "Protesilaos Stavrou",
"description": "A customised build of the Iosevka that optimises for inter-glyph and inter-style consistency within the overarching constraint of usability at small point sizes.",
+ "group": "aporetic-sans",
"license": "SIL OFL",
"ligatures": false,
"name": "Aporetic Sans Mono",
@@ -175,16 +176,18 @@
"glyphs": 33898,
"characters": 7466,
"languages": {
- "Latin": 502,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"aporetic-serif": {
"added": "2026-01-21",
"author": "Protesilaos Stavrou",
"description": "A customised build of the Iosevka that optimises for inter-glyph and inter-style consistency within the overarching constraint of usability at small point sizes.",
+ "group": "aporetic-sans",
"license": "SIL OFL",
"ligatures": false,
"name": "Aporetic Serif Mono",
@@ -202,11 +205,12 @@
"glyphs": 33901,
"characters": 7466,
"languages": {
- "Latin": 502,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"atkinson-hyperlegible": {
"added": "2025-02-18",
@@ -224,7 +228,7 @@
"glyphs": 365,
"characters": 346,
"languages": {
- "Latin": 260
+ "Latin": 261
}
},
"audio-link": {
@@ -287,9 +291,9 @@
"glyphs": 4177,
"characters": 4160,
"languages": {
- "Latin": 502,
+ "Latin": 510,
"Cyrillic": 92,
- "Arabic": 33,
+ "Arabic": 38,
"Hebrew": 5,
"Greek": 2,
"Armenian": 2,
@@ -312,7 +316,7 @@
"glyphs": 645,
"characters": 433,
"languages": {
- "Latin": 294
+ "Latin": 296
}
},
"b612-mono": {
@@ -441,8 +445,8 @@
"glyphs": 907,
"characters": 871,
"languages": {
- "Latin": 309,
- "Cyrillic": 75,
+ "Latin": 310,
+ "Cyrillic": 78,
"Greek": 1
}
},
@@ -488,10 +492,10 @@
"glyphs": 3296,
"characters": 3244,
"languages": {
- "Latin": 510,
- "Cyrillic": 72,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 524,
+ "Cyrillic": 80,
+ "Greek": 2,
+ "Armenian": 2
}
},
"bront-ubuntu": {
@@ -578,10 +582,10 @@
"glyphs": 3199,
"characters": 1860,
"languages": {
- "Latin": 418,
- "Cyrillic": 49,
+ "Latin": 421,
+ "Cyrillic": 50,
"Arabic": 40,
- "Greek": 1
+ "Greek": 2
}
},
"chivo": {
@@ -600,13 +604,13 @@
"glyphs": 873,
"characters": 642,
"languages": {
- "Latin": 351
+ "Latin": 354
}
},
"cilantro-code-mono": {
"added": "2026-08-09",
"author": "DraftingDreamer",
- "description": "A Traditional Chinese (Taiwan) monospace coding font with exact 2:1 duospace metrics: 2 Latin characters occupy 1 Han character cell. Han glyphs from Iansui, Latin from Red Hat Mono.",
+ "description": "A Traditional Chinese (Taiwan) monospace coding font where 2 Latin characters (from Red Hat Mono) fit 1 Han character (from Iansui).",
"license": "SIL OFL",
"ligatures": false,
"name": "Cilantro Code Mono",
@@ -622,9 +626,11 @@
"glyphs": 15618,
"characters": 12762,
"languages": {
- "Latin": 325,
- "Cyrillic": 7
- }
+ "Latin": 329,
+ "Cyrillic": 8,
+ "Greek": 1
+ },
+ "huge": true
},
"cm-unicode": {
"added": "2024-01-07",
@@ -650,9 +656,9 @@
"glyphs": 1868,
"characters": 1832,
"languages": {
- "Latin": 387,
- "Cyrillic": 63,
- "Greek": 1
+ "Latin": 390,
+ "Cyrillic": 64,
+ "Greek": 2
}
},
"code-new-roman": {
@@ -673,9 +679,9 @@
"glyphs": 2740,
"characters": 2220,
"languages": {
- "Latin": 510,
- "Cyrillic": 78,
- "Greek": 1
+ "Latin": 521,
+ "Cyrillic": 88,
+ "Greek": 2
}
},
"comic-mono": {
@@ -759,7 +765,7 @@
"glyphs": 1465,
"characters": 1462,
"languages": {
- "Latin": 470,
+ "Latin": 476,
"Cyrillic": 90,
"Greek": 2
}
@@ -933,10 +939,10 @@
"glyphs": 2385,
"characters": 2274,
"languages": {
- "Latin": 498,
- "Cyrillic": 81,
+ "Latin": 530,
+ "Cyrillic": 91,
"Hebrew": 5,
- "Greek": 1
+ "Greek": 2
}
},
"cozette": {
@@ -1002,11 +1008,12 @@
"glyphs": 26188,
"characters": 19966,
"languages": {
- "Latin": 304,
- "Cyrillic": 70,
- "Hangul": 1,
- "Greek": 1
- }
+ "Latin": 308,
+ "Cyrillic": 78,
+ "Greek": 2,
+ "Hangul": 1
+ },
+ "huge": true
},
"daddytimemono": {
"added": "2019-01-22",
@@ -1047,10 +1054,10 @@
"glyphs": 3377,
"characters": 3322,
"languages": {
- "Latin": 513,
- "Cyrillic": 72,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 527,
+ "Cyrillic": 80,
+ "Greek": 3,
+ "Armenian": 2
}
},
"dejavu-markup": {
@@ -1074,10 +1081,10 @@
"glyphs": 3369,
"characters": 3314,
"languages": {
- "Latin": 513,
- "Cyrillic": 72,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 527,
+ "Cyrillic": 80,
+ "Greek": 2,
+ "Armenian": 2
}
},
"departure-mono": {
@@ -1098,7 +1105,7 @@
"glyphs": 775,
"characters": 682,
"languages": {
- "Latin": 443
+ "Latin": 455
}
},
"dm-mono": {
@@ -1117,7 +1124,7 @@
"glyphs": 411,
"characters": 381,
"languages": {
- "Latin": 287
+ "Latin": 288
}
},
"dpsdbeyond": {
@@ -1158,7 +1165,7 @@
"glyphs": 597,
"characters": 470,
"languages": {
- "Latin": 300
+ "Latin": 302
}
},
"droid-sans": {
@@ -1249,7 +1256,7 @@
"glyphs": 613,
"characters": 613,
"languages": {
- "Latin": 445
+ "Latin": 459
}
},
"ellograph": {
@@ -1338,7 +1345,7 @@
"glyphs": 26946,
"characters": 25827,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1370,7 +1377,7 @@
"glyphs": 26946,
"characters": 25827,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1399,7 +1406,7 @@
"glyphs": 26633,
"characters": 25516,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1427,7 +1434,7 @@
"glyphs": 26633,
"characters": 25516,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1456,7 +1463,7 @@
"glyphs": 26946,
"characters": 25827,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1486,7 +1493,7 @@
"glyphs": 26946,
"characters": 25827,
"languages": {
- "Latin": 527,
+ "Latin": 536,
"Cyrillic": 93,
"Hebrew": 5,
"Greek": 3,
@@ -1517,9 +1524,9 @@
"glyphs": 1046,
"characters": 1042,
"languages": {
- "Latin": 301,
- "Cyrillic": 77,
- "Greek": 1
+ "Latin": 304,
+ "Cyrillic": 87,
+ "Greek": 2
}
},
"fifteen": {
@@ -1565,9 +1572,9 @@
"glyphs": 1485,
"characters": 1350,
"languages": {
- "Latin": 301,
- "Cyrillic": 83,
- "Greek": 1
+ "Latin": 302,
+ "Cyrillic": 91,
+ "Greek": 2
}
},
"firacode": {
@@ -1593,9 +1600,9 @@
"glyphs": 2030,
"characters": 1586,
"languages": {
- "Latin": 301,
- "Cyrillic": 90,
- "Greek": 1
+ "Latin": 302,
+ "Cyrillic": 91,
+ "Greek": 2
}
},
"fixedsys": {
@@ -1641,8 +1648,8 @@
"glyphs": 6012,
"characters": 5997,
"languages": {
- "Latin": 484,
- "Cyrillic": 52,
+ "Latin": 498,
+ "Cyrillic": 54,
"Armenian": 2,
"Geʽez": 4,
"Arabic": 4,
@@ -1695,7 +1702,7 @@
"glyphs": 707,
"characters": 487,
"languages": {
- "Latin": 283
+ "Latin": 285
}
},
"generic": {
@@ -1735,8 +1742,8 @@
"glyphs": 833,
"characters": 652,
"languages": {
- "Latin": 323,
- "Cyrillic": 45
+ "Latin": 325,
+ "Cyrillic": 48
}
},
"gintronic": {
@@ -1768,7 +1775,7 @@
"glyphs": 1001,
"characters": 917,
"languages": {
- "Latin": 308
+ "Latin": 310
}
},
"gnu-freefont": {
@@ -1792,13 +1799,13 @@
"glyphs": 4177,
"characters": 4160,
"languages": {
- "Latin": 485,
- "Cyrillic": 82,
- "Arabic": 30,
+ "Latin": 510,
+ "Cyrillic": 92,
+ "Arabic": 38,
+ "Hebrew": 5,
+ "Greek": 2,
"Armenian": 2,
- "Hebrew": 2,
- "Kayah Li": 2,
- "Greek": 1
+ "Kayah Li": 2
}
},
"go-mono": {
@@ -1887,7 +1894,7 @@
"glyphs": 687,
"characters": 670,
"languages": {
- "Latin": 329
+ "Latin": 332
}
},
"hack": {
@@ -1941,7 +1948,7 @@
"characters": 1548,
"languages": {
"Latin": 306,
- "Cyrillic": 70,
+ "Cyrillic": 73,
"Armenian": 2,
"Greek": 1
}
@@ -1962,9 +1969,9 @@
"glyphs": 1629,
"characters": 1373,
"languages": {
- "Latin": 353,
- "Cyrillic": 52,
- "Greek": 1
+ "Latin": 356,
+ "Cyrillic": 55,
+ "Greek": 2
}
},
"hermit": {
@@ -1983,7 +1990,7 @@
"glyphs": 393,
"characters": 390,
"languages": {
- "Latin": 278
+ "Latin": 279
}
},
"heterodox-mono": {
@@ -2024,8 +2031,8 @@
"glyphs": 850,
"characters": 746,
"languages": {
- "Latin": 327,
- "Cyrillic": 63
+ "Latin": 328,
+ "Cyrillic": 68
}
},
"ibm-vga": {
@@ -2069,7 +2076,7 @@
"glyphs": 964,
"characters": 882,
"languages": {
- "Latin": 339
+ "Latin": 341
}
},
"inconsolata-g": {
@@ -2156,7 +2163,7 @@
"glyphs": 304,
"characters": 300,
"languages": {
- "Latin": 275
+ "Latin": 277
}
},
"input": {
@@ -2272,7 +2279,7 @@
"glyphs": 684,
"characters": 622,
"languages": {
- "Latin": 342
+ "Latin": 346
}
},
"iosevka": {
@@ -2292,11 +2299,12 @@
"glyphs": 46818,
"characters": 7571,
"languages": {
- "Latin": 505,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"iosevka-extended": {
"added": "2026-06-12",
@@ -2315,11 +2323,12 @@
"glyphs": 46821,
"characters": 7571,
"languages": {
- "Latin": 505,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"iosevka-slab": {
"added": "2026-06-12",
@@ -2338,11 +2347,12 @@
"glyphs": 46821,
"characters": 7571,
"languages": {
- "Latin": 505,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"iosevka-slab-extended": {
"added": "2026-06-12",
@@ -2361,11 +2371,12 @@
"glyphs": 46822,
"characters": 7571,
"languages": {
- "Latin": 505,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
- }
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
+ },
+ "huge": true
},
"ioskeley": {
"added": "2025-09-20",
@@ -2396,10 +2407,10 @@
"glyphs": 11552,
"characters": 7515,
"languages": {
- "Latin": 502,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
}
},
"jetbrainsmono": {
@@ -2427,9 +2438,9 @@
"glyphs": 1743,
"characters": 1363,
"languages": {
- "Latin": 326,
- "Cyrillic": 23,
- "Greek": 1
+ "Latin": 331,
+ "Cyrillic": 25,
+ "Greek": 2
}
},
"julia-mono": {
@@ -2441,27 +2452,25 @@
"name": "JuliaMono",
"rendering": "vector",
"style": "sans",
- "variants": [
- "black",
- "bold",
- "extrabold",
- "light",
- "medium",
- "regular"
- ],
+ "variants": "7 weights, all with italics.",
"website": "https://juliamono.netlify.app",
"year": 2020,
"zerostyle": "dotted",
- "glyphs": 9216,
- "characters": 8585,
+ "glyphs": 12337,
+ "characters": 11191,
"languages": {
- "Latin": 504,
- "Cyrillic": 86,
+ "Latin": 536,
+ "Georgian": 4,
+ "Cyrillic": 93,
+ "Arabic": 32,
"Cree": 1,
+ "Hebrew": 5,
+ "Greek": 3,
+ "Armenian": 2,
"Ojibwe Syllabics": 1,
- "Inuktitut Syllabics": 1,
- "Greek": 1
- }
+ "Inuktitut Syllabics": 1
+ },
+ "huge": true
},
"latin-modern": {
"added": "bc",
@@ -2550,10 +2559,10 @@
"glyphs": 2392,
"characters": 2274,
"languages": {
- "Latin": 498,
- "Cyrillic": 81,
+ "Latin": 530,
+ "Cyrillic": 91,
"Hebrew": 5,
- "Greek": 1
+ "Greek": 2
}
},
"lilex": {
@@ -2572,9 +2581,9 @@
"glyphs": 1434,
"characters": 1073,
"languages": {
- "Latin": 330,
- "Cyrillic": 64,
- "Greek": 1
+ "Latin": 333,
+ "Cyrillic": 70,
+ "Greek": 2
}
},
"lotion": {
@@ -2663,10 +2672,10 @@
"glyphs": 12156,
"characters": 7561,
"languages": {
- "Latin": 502,
- "Cyrillic": 83,
- "Armenian": 2,
- "Greek": 1
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2
}
},
"maple": {
@@ -2722,7 +2731,7 @@
"glyphs": 557,
"characters": 503,
"languages": {
- "Latin": 329,
+ "Latin": 331,
"Cyrillic": 11
}
},
@@ -2742,7 +2751,7 @@
"glyphs": 742,
"characters": 703,
"languages": {
- "Latin": 413
+ "Latin": 418
}
},
"mensch": {
@@ -2763,7 +2772,7 @@
"glyphs": 2708,
"characters": 2684,
"languages": {
- "Latin": 513,
+ "Latin": 515,
"Cyrillic": 76,
"Greek": 2
}
@@ -2789,7 +2798,7 @@
"glyphs": 2708,
"characters": 2684,
"languages": {
- "Latin": 513,
+ "Latin": 515,
"Cyrillic": 76,
"Greek": 2
}
@@ -2833,9 +2842,9 @@
"glyphs": 3570,
"characters": 2460,
"languages": {
- "Latin": 336,
- "Cyrillic": 27,
- "Greek": 1
+ "Latin": 338,
+ "Cyrillic": 28,
+ "Greek": 2
}
},
"monaspace-krypton": {
@@ -2854,9 +2863,9 @@
"glyphs": 3490,
"characters": 2459,
"languages": {
- "Latin": 336,
- "Cyrillic": 27,
- "Greek": 1
+ "Latin": 338,
+ "Cyrillic": 28,
+ "Greek": 2
}
},
"monaspace-neon": {
@@ -2875,9 +2884,9 @@
"glyphs": 3606,
"characters": 2460,
"languages": {
- "Latin": 336,
- "Cyrillic": 27,
- "Greek": 1
+ "Latin": 338,
+ "Cyrillic": 28,
+ "Greek": 2
}
},
"monaspace-radon": {
@@ -2896,9 +2905,9 @@
"glyphs": 3552,
"characters": 2460,
"languages": {
- "Latin": 336,
- "Cyrillic": 27,
- "Greek": 1
+ "Latin": 338,
+ "Cyrillic": 28,
+ "Greek": 2
}
},
"monaspace-xenon": {
@@ -2917,9 +2926,9 @@
"glyphs": 3818,
"characters": 2460,
"languages": {
- "Latin": 336,
- "Cyrillic": 27,
- "Greek": 1
+ "Latin": 338,
+ "Cyrillic": 28,
+ "Greek": 2
}
},
"mona-sans-mono": {
@@ -2938,7 +2947,7 @@
"glyphs": 768,
"characters": 547,
"languages": {
- "Latin": 310
+ "Latin": 311
}
},
"monocraft": {
@@ -3012,9 +3021,9 @@
"glyphs": 1122,
"characters": 1077,
"languages": {
- "Latin": 297,
- "Cyrillic": 16,
- "Greek": 1
+ "Latin": 300,
+ "Cyrillic": 17,
+ "Greek": 2
}
},
"monofur": {
@@ -3036,7 +3045,7 @@
"characters": 660,
"languages": {
"Latin": 282,
- "Cyrillic": 12,
+ "Cyrillic": 13,
"Greek": 1
}
},
@@ -3056,9 +3065,9 @@
"glyphs": 780,
"characters": 616,
"languages": {
- "Latin": 311,
- "Cyrillic": 15,
- "Greek": 1
+ "Latin": 315,
+ "Cyrillic": 17,
+ "Greek": 2
}
},
"monolisa": {
@@ -3077,9 +3086,9 @@
"glyphs": 1651,
"characters": 1330,
"languages": {
- "Latin": 470,
- "Cyrillic": 86,
- "Greek": 1
+ "Latin": 488,
+ "Cyrillic": 88,
+ "Greek": 2
}
},
"mononoki": {
@@ -3143,7 +3152,7 @@
"glyphs": 6747,
"characters": 6463,
"languages": {
- "Latin": 327
+ "Latin": 330
}
},
"nanum-gothic-coding": {
@@ -3275,9 +3284,9 @@
"glyphs": 3787,
"characters": 3367,
"languages": {
- "Latin": 524,
- "Cyrillic": 92,
- "Greek": 2
+ "Latin": 536,
+ "Cyrillic": 93,
+ "Greek": 3
}
},
"nova": {
@@ -3318,7 +3327,7 @@
"glyphs": 496,
"characters": 433,
"languages": {
- "Latin": 286
+ "Latin": 287
}
},
"old-timey": {
@@ -3341,9 +3350,9 @@
"glyphs": 2233,
"characters": 2031,
"languages": {
- "Latin": 343,
- "Cyrillic": 22,
- "Greek": 1
+ "Latin": 351,
+ "Cyrillic": 24,
+ "Greek": 3
}
},
"opendyslexic": {
@@ -3451,7 +3460,7 @@
"glyphs": 562,
"characters": 484,
"languages": {
- "Latin": 310
+ "Latin": 311
}
},
"plex-mono": {
@@ -3598,9 +3607,9 @@
"glyphs": 1418,
"characters": 1075,
"languages": {
- "Latin": 330,
- "Cyrillic": 65,
- "Greek": 1
+ "Latin": 333,
+ "Cyrillic": 70,
+ "Greek": 2
}
},
"pt": {
@@ -3623,7 +3632,7 @@
"characters": 788,
"languages": {
"Latin": 271,
- "Cyrillic": 75
+ "Cyrillic": 78
}
},
"quinze": {
@@ -3663,7 +3672,7 @@
"glyphs": 1256,
"characters": 723,
"languages": {
- "Latin": 342
+ "Latin": 345
}
},
"reddit-sans": {
@@ -3685,7 +3694,7 @@
"glyphs": 1080,
"characters": 724,
"languages": {
- "Latin": 339
+ "Latin": 342
}
},
"redhat": {
@@ -3707,6 +3716,35 @@
"Latin": 296
}
},
+ "ricty-diminished": {
+ "added": "2026-08-25",
+ "author": "Yasunori Yusa",
+ "description": "は Linux 環境での研究・開発を想定したプログラミング用フォントです. It combines Inconsolata and Circle M+ 1m",
+ "license": "SIL OFL",
+ "ligatures": false,
+ "name": "Ricty Diminished",
+ "rendering": "vector",
+ "style": "sans",
+ "variants": [
+ "bold",
+ "bold-italic",
+ "italic",
+ "regular"
+ ],
+ "website": "https://rictyfonts.github.io/diminished",
+ "year": 2012,
+ "zerostyle": "slashed",
+ "glyphs": 7466,
+ "characters": 7158,
+ "languages": {
+ "Latin": 467,
+ "Cyrillic": 24,
+ "Greek": 2,
+ "Katakana": 3,
+ "Kanji": 1,
+ "Hiragana": 2
+ }
+ },
"roboto": {
"added": "2015-06-27",
"author": "Christian Robertson",
@@ -3728,6 +3766,88 @@
"Greek": 1
}
},
+ "sarasa-mono": {
+ "added": "2026-08-25",
+ "author": "Renzhi Li",
+ "description": "A CJK composite font based on Inter, Iosevka and Source Han Sans.",
+ "group": "sarasa-mono",
+ "license": "SIL OFL",
+ "ligatures": false,
+ "name": "Sarasa Mono",
+ "rendering": "vector",
+ "style": "sans",
+ "variants": [
+ "bold",
+ "bold-italic",
+ "semi-bold",
+ "semi-bold-italic",
+ "light",
+ "light-italic",
+ "extra-light",
+ "extra-light-italic",
+ "italic",
+ "regular"
+ ],
+ "website": "https://github.com/be5invis/Sarasa-Gothic",
+ "year": 2015,
+ "zerostyle": "slashed",
+ "glyphs": 56699,
+ "characters": 51074,
+ "languages": {
+ "Latin": 537,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2,
+ "Chinese": 7,
+ "Katakana": 3,
+ "Kanji": 1,
+ "Hiragana": 2,
+ "Hangul": 1,
+ "Hanja": 1
+ },
+ "huge": true
+ },
+ "sarasa-mono-slab": {
+ "added": "2026-08-25",
+ "author": "Renzhi Li",
+ "description": "A CJK composite font based on Inter, Iosevka and Source Han Sans.",
+ "group": "sarasa-mono",
+ "license": "SIL OFL",
+ "ligatures": false,
+ "name": "Sarasa Mono Slab",
+ "rendering": "vector",
+ "style": "serif",
+ "variants": [
+ "bold",
+ "bold-italic",
+ "semi-bold",
+ "semi-bold-italic",
+ "light",
+ "light-italic",
+ "extra-light",
+ "extra-light-italic",
+ "italic",
+ "regular"
+ ],
+ "website": "https://github.com/be5invis/Sarasa-Gothic",
+ "year": 2015,
+ "zerostyle": "slashed",
+ "glyphs": 56699,
+ "characters": 51074,
+ "languages": {
+ "Latin": 537,
+ "Cyrillic": 93,
+ "Greek": 3,
+ "Armenian": 2,
+ "Chinese": 7,
+ "Katakana": 3,
+ "Kanji": 1,
+ "Hiragana": 2,
+ "Hangul": 1,
+ "Hanja": 1
+ },
+ "huge": true
+ },
"sax": {
"added": "bc",
"author": "Robert Norton",
@@ -3792,12 +3912,13 @@
"glyphs": 4227,
"characters": 4226,
"languages": {
- "Latin": 465,
+ "Latin": 467,
"Cyrillic": 84,
+ "Arabic": 37,
"Devanagari": 12,
+ "Hebrew": 5,
"Greek": 2,
"Armenian": 2,
- "Hebrew": 2,
"Thai": 1
}
},
@@ -3912,7 +4033,7 @@
"glyphs": 529,
"characters": 491,
"languages": {
- "Latin": 306
+ "Latin": 307
}
},
"sligoil": {
@@ -3933,7 +4054,7 @@
"glyphs": 457,
"characters": 400,
"languages": {
- "Latin": 285
+ "Latin": 287
}
},
"sometype-mono": {
@@ -3959,7 +4080,7 @@
"glyphs": 567,
"characters": 458,
"languages": {
- "Latin": 300
+ "Latin": 301
}
},
"sono": {
@@ -3978,7 +4099,7 @@
"glyphs": 750,
"characters": 576,
"languages": {
- "Latin": 318
+ "Latin": 319
}
},
"source-code-pro": {
@@ -3997,9 +4118,9 @@
"glyphs": 1568,
"characters": 1335,
"languages": {
- "Latin": 353,
- "Cyrillic": 52,
- "Greek": 1
+ "Latin": 356,
+ "Cyrillic": 55,
+ "Greek": 2
}
},
"space": {
@@ -4064,9 +4185,9 @@
"glyphs": 1680,
"characters": 1454,
"languages": {
- "Latin": 442,
- "Cyrillic": 35,
- "Greek": 1
+ "Latin": 446,
+ "Cyrillic": 36,
+ "Greek": 2
}
},
"terminus-consoleet": {
@@ -4281,19 +4402,21 @@
"glyphs": 58911,
"characters": 58910,
"languages": {
- "Latin": 502,
- "Georgian": 2,
- "Cyrillic": 83,
+ "Latin": 537,
+ "Georgian": 4,
+ "Cyrillic": 93,
"Devanagari": 15,
- "Bengali": 6,
- "Arabic": 33,
+ "Bengali": 8,
+ "Arabic": 48,
"Cree": 1,
"Hebrew": 5,
"Lao": 1,
+ "Greek": 3,
"Armenian": 2,
"Chinese": 7,
"Geʽez": 7,
"Buginese": 1,
+ "Syriac": 1,
"Burmese": 4,
"Gujarati": 2,
"Sinhala": 1,
@@ -4305,6 +4428,7 @@
"Tham": 1,
"Modern Yi": 1,
"Kayah Li": 2,
+ "Katakana": 3,
"Tibetan": 3,
"Malayalam": 1,
"Vai": 1,
@@ -4314,16 +4438,15 @@
"Cherokee": 1,
"Kanji": 1,
"Hiragana": 2,
- "Katakana": 2,
"Hangul": 1,
"Hanja": 1,
- "Greek": 1,
"Tamil": 1,
"Telugu": 1,
"Bamum": 1,
"Kannada": 1,
"Hanunoo": 1
- }
+ },
+ "huge": true
},
"unifontex": {
"added": "2023-09-17",
@@ -4344,20 +4467,21 @@
"glyphs": 65439,
"characters": 65436,
"languages": {
- "Latin": 512,
- "Georgian": 3,
- "Cyrillic": 88,
+ "Latin": 537,
+ "Georgian": 4,
+ "Cyrillic": 93,
"Devanagari": 15,
- "Bengali": 6,
- "Arabic": 33,
+ "Bengali": 8,
+ "Arabic": 48,
"Cree": 1,
"Hebrew": 5,
"Lao": 1,
- "Greek": 2,
+ "Greek": 3,
"Armenian": 2,
"Chinese": 7,
"Geʽez": 7,
"Buginese": 1,
+ "Syriac": 1,
"Burmese": 4,
"Gujarati": 2,
"Sinhala": 1,
@@ -4387,7 +4511,8 @@
"Chakma": 1,
"Kannada": 1,
"Hanunoo": 1
- }
+ },
+ "huge": true
},
"verily": {
"added": "2014-11-23",
@@ -4426,9 +4551,9 @@
"glyphs": 1435,
"characters": 1267,
"languages": {
- "Latin": 315,
- "Cyrillic": 80,
- "Greek": 1
+ "Latin": 319,
+ "Cyrillic": 88,
+ "Greek": 2
}
},
"vt323": {
diff --git a/fonts/resources/julia-mono/juliamono-bolditalic.woff2 b/fonts/resources/julia-mono/julia-mono-bold-italic.woff2
similarity index 100%
rename from fonts/resources/julia-mono/juliamono-bolditalic.woff2
rename to fonts/resources/julia-mono/julia-mono-bold-italic.woff2
diff --git a/fonts/resources/julia-mono/julia-mono-bold.woff2 b/fonts/resources/julia-mono/julia-mono-bold.woff2
index ef799e2b..25860433 100644
Binary files a/fonts/resources/julia-mono/julia-mono-bold.woff2 and b/fonts/resources/julia-mono/julia-mono-bold.woff2 differ
diff --git a/fonts/resources/julia-mono/juliamono-italic.woff2 b/fonts/resources/julia-mono/julia-mono-italic.woff2
similarity index 100%
rename from fonts/resources/julia-mono/juliamono-italic.woff2
rename to fonts/resources/julia-mono/julia-mono-italic.woff2
diff --git a/fonts/resources/julia-mono/julia-mono.woff2 b/fonts/resources/julia-mono/julia-mono.woff2
index 0401a757..3eeeeaaf 100644
Binary files a/fonts/resources/julia-mono/julia-mono.woff2 and b/fonts/resources/julia-mono/julia-mono.woff2 differ
diff --git a/fonts/resources/julia-mono/juliamono-bold.woff2 b/fonts/resources/julia-mono/juliamono-bold.woff2
deleted file mode 100644
index 25860433..00000000
Binary files a/fonts/resources/julia-mono/juliamono-bold.woff2 and /dev/null differ
diff --git a/fonts/resources/julia-mono/juliamono.woff2 b/fonts/resources/julia-mono/juliamono.woff2
deleted file mode 100644
index 3eeeeaaf..00000000
Binary files a/fonts/resources/julia-mono/juliamono.woff2 and /dev/null differ
diff --git a/fonts/resources/ricty-diminished/ricty-diminished-bold-italic.woff2 b/fonts/resources/ricty-diminished/ricty-diminished-bold-italic.woff2
new file mode 100644
index 00000000..a817785b
Binary files /dev/null and b/fonts/resources/ricty-diminished/ricty-diminished-bold-italic.woff2 differ
diff --git a/fonts/resources/ricty-diminished/ricty-diminished-bold.woff2 b/fonts/resources/ricty-diminished/ricty-diminished-bold.woff2
new file mode 100644
index 00000000..5e9537ad
Binary files /dev/null and b/fonts/resources/ricty-diminished/ricty-diminished-bold.woff2 differ
diff --git a/fonts/resources/ricty-diminished/ricty-diminished-italic.woff2 b/fonts/resources/ricty-diminished/ricty-diminished-italic.woff2
new file mode 100644
index 00000000..95a4ce7c
Binary files /dev/null and b/fonts/resources/ricty-diminished/ricty-diminished-italic.woff2 differ
diff --git a/fonts/resources/ricty-diminished/ricty-diminished.woff2 b/fonts/resources/ricty-diminished/ricty-diminished.woff2
new file mode 100644
index 00000000..635b814a
Binary files /dev/null and b/fonts/resources/ricty-diminished/ricty-diminished.woff2 differ
diff --git a/fonts/resources/sarasa-mono-slab/LICENSE.txt b/fonts/resources/sarasa-mono-slab/LICENSE.txt
new file mode 100644
index 00000000..aa33b7a8
--- /dev/null
+++ b/fonts/resources/sarasa-mono-slab/LICENSE.txt
@@ -0,0 +1,113 @@
+Copyright (c) 2015-2025, Renzhi Li (aka. Belleve Invis, belleve@typeof.net).
+Portions Copyright (c) 2016 The Inter Project Authors.
+Portions Copyright (c) 2014-2021 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.
+Portions Copyright (c) 2012 Google Inc.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+--------------------------
+
+
+SIL Open Font License v1.1
+====================================================
+
+
+Preamble
+----------
+
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+
+Definitions
+-------------
+
+`"Font Software"` refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+`"Reserved Font Name"` refers to any names specified as such after the
+copyright statement(s).
+
+`"Original Version"` refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+`"Modified Version"` refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+`"Author"` refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+
+Permission & Conditions
+------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1. Neither the Font Software nor any of its individual components,
+ in Original or Modified Versions, may be sold by itself.
+
+2. Original or Modified Versions of the Font Software may be bundled,
+ redistributed and/or sold with any software, provided that each copy
+ contains the above copyright notice and this license. These can be
+ included either as stand-alone text files, human-readable headers or
+ in the appropriate machine-readable metadata fields within text or
+ binary files as long as those fields can be easily viewed by the user.
+
+3. No Modified Version of the Font Software may use the Reserved Font
+ Name(s) unless explicit written permission is granted by the corresponding
+ Copyright Holder. This restriction only applies to the primary font name as
+ presented to the users.
+
+4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+ Software shall not be used to promote, endorse or advertise any
+ Modified Version, except to acknowledge the contribution(s) of the
+ Copyright Holder(s) and the Author(s) or with their explicit written
+ permission.
+
+5. The Font Software, modified or unmodified, in part or in whole,
+ must be distributed entirely under this license, and must not be
+ distributed under any other license. The requirement for fonts to
+ remain under this license does not apply to any document created
+ using the Font Software.
+
+
+
+Termination
+-----------
+
+This license becomes null and void if any of the above conditions are
+not met.
+
+
+ DISCLAIMER
+
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+ OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold-italic.woff2 b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold-italic.woff2
new file mode 100644
index 00000000..4d3694db
Binary files /dev/null and b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold-italic.woff2 differ
diff --git a/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold.woff2 b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold.woff2
new file mode 100644
index 00000000..19b47b2e
Binary files /dev/null and b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-bold.woff2 differ
diff --git a/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-italic.woff2 b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-italic.woff2
new file mode 100644
index 00000000..44254aa0
Binary files /dev/null and b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab-italic.woff2 differ
diff --git a/fonts/resources/sarasa-mono-slab/sarasa-mono-slab.woff2 b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab.woff2
new file mode 100644
index 00000000..bdc43421
Binary files /dev/null and b/fonts/resources/sarasa-mono-slab/sarasa-mono-slab.woff2 differ
diff --git a/fonts/resources/sarasa-mono/LICENSE.txt b/fonts/resources/sarasa-mono/LICENSE.txt
new file mode 100644
index 00000000..aa33b7a8
--- /dev/null
+++ b/fonts/resources/sarasa-mono/LICENSE.txt
@@ -0,0 +1,113 @@
+Copyright (c) 2015-2025, Renzhi Li (aka. Belleve Invis, belleve@typeof.net).
+Portions Copyright (c) 2016 The Inter Project Authors.
+Portions Copyright (c) 2014-2021 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.
+Portions Copyright (c) 2012 Google Inc.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+--------------------------
+
+
+SIL Open Font License v1.1
+====================================================
+
+
+Preamble
+----------
+
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+
+Definitions
+-------------
+
+`"Font Software"` refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+`"Reserved Font Name"` refers to any names specified as such after the
+copyright statement(s).
+
+`"Original Version"` refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+`"Modified Version"` refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+`"Author"` refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+
+Permission & Conditions
+------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1. Neither the Font Software nor any of its individual components,
+ in Original or Modified Versions, may be sold by itself.
+
+2. Original or Modified Versions of the Font Software may be bundled,
+ redistributed and/or sold with any software, provided that each copy
+ contains the above copyright notice and this license. These can be
+ included either as stand-alone text files, human-readable headers or
+ in the appropriate machine-readable metadata fields within text or
+ binary files as long as those fields can be easily viewed by the user.
+
+3. No Modified Version of the Font Software may use the Reserved Font
+ Name(s) unless explicit written permission is granted by the corresponding
+ Copyright Holder. This restriction only applies to the primary font name as
+ presented to the users.
+
+4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+ Software shall not be used to promote, endorse or advertise any
+ Modified Version, except to acknowledge the contribution(s) of the
+ Copyright Holder(s) and the Author(s) or with their explicit written
+ permission.
+
+5. The Font Software, modified or unmodified, in part or in whole,
+ must be distributed entirely under this license, and must not be
+ distributed under any other license. The requirement for fonts to
+ remain under this license does not apply to any document created
+ using the Font Software.
+
+
+
+Termination
+-----------
+
+This license becomes null and void if any of the above conditions are
+not met.
+
+
+ DISCLAIMER
+
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+ OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/fonts/resources/sarasa-mono/sarasa-mono-bold-italic.woff2 b/fonts/resources/sarasa-mono/sarasa-mono-bold-italic.woff2
new file mode 100644
index 00000000..7df508d5
Binary files /dev/null and b/fonts/resources/sarasa-mono/sarasa-mono-bold-italic.woff2 differ
diff --git a/fonts/resources/sarasa-mono/sarasa-mono-bold.woff2 b/fonts/resources/sarasa-mono/sarasa-mono-bold.woff2
new file mode 100644
index 00000000..c996492b
Binary files /dev/null and b/fonts/resources/sarasa-mono/sarasa-mono-bold.woff2 differ
diff --git a/fonts/resources/sarasa-mono/sarasa-mono-italic.woff2 b/fonts/resources/sarasa-mono/sarasa-mono-italic.woff2
new file mode 100644
index 00000000..103dc5cc
Binary files /dev/null and b/fonts/resources/sarasa-mono/sarasa-mono-italic.woff2 differ
diff --git a/fonts/resources/sarasa-mono/sarasa-mono.woff2 b/fonts/resources/sarasa-mono/sarasa-mono.woff2
new file mode 100644
index 00000000..6a5305cd
Binary files /dev/null and b/fonts/resources/sarasa-mono/sarasa-mono.woff2 differ
diff --git a/fonts/stylesheets/fonts.less b/fonts/stylesheets/fonts.less
index 6dac40ed..2386ead4 100755
--- a/fonts/stylesheets/fonts.less
+++ b/fonts/stylesheets/fonts.less
@@ -375,8 +375,10 @@
.font( 'jetbrainsmono', bold, normal, 'jetbrainsmono/jetbrainsmono-bold.woff2');
.font( 'jetbrainsmono', bold, italic, 'jetbrainsmono/jetbrainsmono-bold-italic.woff2');
-.font( 'julia-mono', bold, normal, 'julia-mono/julia-mono-bold.woff2' );
-.font( 'julia-mono', normal, normal, 'julia-mono/julia-mono.woff2' );
+.font( 'julia-mono', normal, normal, 'julia-mono/julia-mono.woff2');
+.font( 'julia-mono', normal, italic, 'julia-mono/julia-mono-italic.woff2');
+.font( 'julia-mono', bold, normal, 'julia-mono/julia-mono-bold.woff2');
+.font( 'julia-mono', bold, italic, 'julia-mono/julia-mono-bold-italic.woff2');
.font( 'latin-modern', normal, italic, 'latin-modern/latin-modern-italic.woff2' );
.font( 'latin-modern', normal, normal, 'latin-modern/latin-modern.woff2' );
@@ -571,11 +573,26 @@
.font( 'redhat', normal, italic, 'redhat/redhat-italic.woff2' );
.font( 'redhat', normal, normal, 'redhat/redhat.woff2' );
+.font( 'ricty-diminished', bold, italic, 'ricty-diminished/ricty-diminished-bold-italic.woff2' );
+.font( 'ricty-diminished', bold, normal, 'ricty-diminished/ricty-diminished-bold.woff2' );
+.font( 'ricty-diminished', normal, italic, 'ricty-diminished/ricty-diminished-italic.woff2' );
+.font( 'ricty-diminished', normal, normal, 'ricty-diminished/ricty-diminished.woff2' );
+
.font( 'roboto', bold, italic, 'roboto/roboto-bold-italic.woff2' );
.font( 'roboto', bold, normal, 'roboto/roboto-bold.woff2' );
.font( 'roboto', normal, italic, 'roboto/roboto-italic.woff2' );
.font( 'roboto', normal, normal, 'roboto/roboto.woff2' );
+.font( 'sarasa-mono', bold, italic, 'sarasa-mono/sarasa-mono-bold-italic.woff2' );
+.font( 'sarasa-mono', bold, normal, 'sarasa-mono/sarasa-mono-bold.woff2' );
+.font( 'sarasa-mono', normal, italic, 'sarasa-mono/sarasa-mono-italic.woff2' );
+.font( 'sarasa-mono', normal, normal, 'sarasa-mono/sarasa-mono.woff2' );
+
+.font( 'sarasa-mono-slab', bold, italic, 'sarasa-mono-slab/sarasa-mono-slab-bold-italic.woff2' );
+.font( 'sarasa-mono-slab', bold, normal, 'sarasa-mono-slab/sarasa-mono-slab-bold.woff2' );
+.font( 'sarasa-mono-slab', normal, italic, 'sarasa-mono-slab/sarasa-mono-slab-italic.woff2' );
+.font( 'sarasa-mono-slab', normal, normal, 'sarasa-mono-slab/sarasa-mono-slab.woff2' );
+
.font( 'sax', normal, normal, 'sax/sax.woff2' );
.font( 'scientifica', normal, normal, 'scientifica/scientifica.woff2' );
diff --git a/fonts/stylesheets/stylesheet.css b/fonts/stylesheets/stylesheet.css
index c4c3ed8d..f85fb20a 100644
--- a/fonts/stylesheets/stylesheet.css
+++ b/fonts/stylesheets/stylesheet.css
@@ -1632,15 +1632,27 @@
}
@font-face {
font-family: 'julia-mono';
- font-weight: bold;
+ font-weight: normal;
font-style: normal;
- src: url('../resources/julia-mono/julia-mono-bold.woff2');
+ src: url('../resources/julia-mono/julia-mono.woff2');
}
@font-face {
font-family: 'julia-mono';
font-weight: normal;
+ font-style: italic;
+ src: url('../resources/julia-mono/julia-mono-italic.woff2');
+}
+@font-face {
+ font-family: 'julia-mono';
+ font-weight: bold;
font-style: normal;
- src: url('../resources/julia-mono/julia-mono.woff2');
+ src: url('../resources/julia-mono/julia-mono-bold.woff2');
+}
+@font-face {
+ font-family: 'julia-mono';
+ font-weight: bold;
+ font-style: italic;
+ src: url('../resources/julia-mono/julia-mono-bold-italic.woff2');
}
@font-face {
font-family: 'latin-modern';
@@ -2488,6 +2500,30 @@
font-style: normal;
src: url('../resources/redhat/redhat.woff2');
}
+@font-face {
+ font-family: 'ricty-diminished';
+ font-weight: bold;
+ font-style: italic;
+ src: url('../resources/ricty-diminished/ricty-diminished-bold-italic.woff2');
+}
+@font-face {
+ font-family: 'ricty-diminished';
+ font-weight: bold;
+ font-style: normal;
+ src: url('../resources/ricty-diminished/ricty-diminished-bold.woff2');
+}
+@font-face {
+ font-family: 'ricty-diminished';
+ font-weight: normal;
+ font-style: italic;
+ src: url('../resources/ricty-diminished/ricty-diminished-italic.woff2');
+}
+@font-face {
+ font-family: 'ricty-diminished';
+ font-weight: normal;
+ font-style: normal;
+ src: url('../resources/ricty-diminished/ricty-diminished.woff2');
+}
@font-face {
font-family: 'roboto';
font-weight: bold;
@@ -2512,6 +2548,54 @@
font-style: normal;
src: url('../resources/roboto/roboto.woff2');
}
+@font-face {
+ font-family: 'sarasa-mono';
+ font-weight: bold;
+ font-style: italic;
+ src: url('../resources/sarasa-mono/sarasa-mono-bold-italic.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono';
+ font-weight: bold;
+ font-style: normal;
+ src: url('../resources/sarasa-mono/sarasa-mono-bold.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono';
+ font-weight: normal;
+ font-style: italic;
+ src: url('../resources/sarasa-mono/sarasa-mono-italic.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono';
+ font-weight: normal;
+ font-style: normal;
+ src: url('../resources/sarasa-mono/sarasa-mono.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono-slab';
+ font-weight: bold;
+ font-style: italic;
+ src: url('../resources/sarasa-mono-slab/sarasa-mono-slab-bold-italic.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono-slab';
+ font-weight: bold;
+ font-style: normal;
+ src: url('../resources/sarasa-mono-slab/sarasa-mono-slab-bold.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono-slab';
+ font-weight: normal;
+ font-style: italic;
+ src: url('../resources/sarasa-mono-slab/sarasa-mono-slab-italic.woff2');
+}
+@font-face {
+ font-family: 'sarasa-mono-slab';
+ font-weight: normal;
+ font-style: normal;
+ src: url('../resources/sarasa-mono-slab/sarasa-mono-slab.woff2');
+}
@font-face {
font-family: 'sax';
font-weight: normal;
diff --git a/index.js b/index.js
index 2e5c4a1e..65dae6da 100644
--- a/index.js
+++ b/index.js
@@ -130,7 +130,6 @@ window.toggleFavorite = (alias) => {
}
window.location.hash = alias
renderSelectList()
- return false
}
window.onhashchange = () => {
@@ -169,6 +168,6 @@ window.addEventListener('DOMContentLoaded', () => {
})
renderSelectList()
- new Filters(data, () => {renderSelectList(true)}).init()
+ new Filters(data, () => {renderSelectList()}).init()
})
})
diff --git a/modules/util.js b/modules/util.js
index 1d5320e2..810f6bb2 100644
--- a/modules/util.js
+++ b/modules/util.js
@@ -133,11 +133,16 @@ export function setDetails (data) {
const box = document.querySelector('.info-wrapper')
box.querySelector('h2 .name').textContent = data.name
box.querySelector('h2 .license').textContent = data.license
- box.querySelector('.info').textContent = data.description ?? ''
box.querySelector('.variants + dd').textContent = writeVariants(data.variants)
box.querySelector('.coverage + dd').innerHTML = writeCoverage(data)
box.querySelector('.website + dd a').href = data.website
box.querySelector('.website + dd a').textContent = data.website
+
+ let desc = data.description ?? ''
+ if (data.huge ?? false) {
+ desc += '
Note: this font is very large and might take a while to load.'
+ }
+ box.querySelector('.info').innerHTML = desc
}
// ProgrammingFonts font selector
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 21fae3e8..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-fonttools
-hyperglot
-brotli
diff --git a/404.py b/tools/404.py
similarity index 91%
rename from 404.py
rename to tools/404.py
index 27124c9e..6e2ec418 100644
--- a/404.py
+++ b/tools/404.py
@@ -10,7 +10,7 @@ def check_url_status(url, name):
return print('ERROR - {}'.format(name))
-with open('fonts.json') as user_file:
+with open('../fonts.json') as user_file:
file_contents = user_file.read()
data = json.loads(file_contents)
diff --git a/convert.py b/tools/convert.py
similarity index 94%
rename from convert.py
rename to tools/convert.py
index 8fdd27e9..5c9a3da4 100644
--- a/convert.py
+++ b/tools/convert.py
@@ -31,7 +31,7 @@ def convert_extension(file):
return re.sub(r'\.(ttf|otf|woff)$', '.woff2', file)
-with open('fonts.json', 'r+') as user_file:
+with open('../fonts.json', 'r+') as user_file:
file_contents = user_file.read()
data = json.loads(file_contents)
@@ -42,7 +42,7 @@ def convert_extension(file):
if not args.name and key in skip:
continue
- dir = path.join('.', 'fonts', 'resources', key)
+ dir = path.join('..', 'fonts', 'resources', key)
font_files = []
for variant in ['', '-bold', '-italic', '-bold-italic']:
for ext in ['.ttf', '.otf', '.woff']:
diff --git a/info.py b/tools/info.py
similarity index 69%
rename from info.py
rename to tools/info.py
index 6eaeb147..c9c94d1b 100644
--- a/info.py
+++ b/tools/info.py
@@ -1,6 +1,7 @@
import json
import argparse
from os import path, unlink
+import hyperglot as hyp
from hyperglot.checker import FontChecker
from fontTools.ttLib import TTFont, woff2
@@ -70,7 +71,7 @@
}
-with open('fonts.json', 'r+') as user_file:
+with open('../fonts.json', 'r+') as user_file:
file_contents = user_file.read()
data = json.loads(file_contents)
@@ -82,9 +83,9 @@
continue
print('')
- print('---------- ' + key + '----------')
+ print(f'---------- {key} ----------')
- dir = path.join('.', 'fonts', 'resources', key)
+ dir = path.join('..', 'fonts', 'resources', key)
font_file = None
for ext in ['.ttf', '.otf', '.woff', '.woff2']:
if path.isfile(path.join(dir, key + ext)):
@@ -95,23 +96,10 @@
print('No font file found')
continue
- font = TTFont(font_file)
- print(font["name"].getBestFullName())
- # this isn't always the name we take, but useful to check the diff:
- # data[key]['name'] = font["name"].getBestFullName()
-
- print(font["name"].getName(1, 3, 1)) # 1 family name
- print(font["name"].getName(8, 3, 1)) # 8 manufacturer name
- print(font["name"].getName(0, 3, 1)) # 0 copyright
-
- designer = font["name"].getName(9, 3, 1) # 9 designer
- print(designer)
- # this isn't always the author we take, but useful to check the diff:
- # if designer:
- # data[key]['author'] = str(designer)
-
- print(font['maxp'].numGlyphs)
- data[key]['glyphs'] = int(font['maxp'].numGlyphs)
+ size = path.getsize(font_file)
+ print(f'filesize: {size}')
+ if size > 1000000:
+ data[key]['huge'] = True
'''
name table:
@@ -119,21 +107,37 @@
platform 1 = macos, 3 = windows
encoding 0 = roman, 1 = unicode
'''
+ font = TTFont(font_file)
+ print(f'name: {font["name"].getBestFullName()}')
+ # this isn't always the name we take, but useful to check
+
+ print(f'family: {font["name"].getName(1, 3, 1)}') # 1 family name
+ print(f'manufacturer: {font["name"].getName(8, 3, 1)}') # 8 manufacturer name
+ print(f'copyright: {font["name"].getName(0, 3, 1)}') # 0 copyright
+ print(f'designer: {font["name"].getName(9, 3, 1)}') # 9 designer
+ # this isn't always the author we take, but useful to check
+ glyph_count = font['maxp'].numGlyphs
+ print(f'glyphs: {glyph_count}')
+ data[key]['glyphs'] = int(glyph_count)
+
+ print(f'hyperglot: {hyp.__version__}')
try:
woff2.decompress(font_file, 'tmp.otf')
checker = FontChecker('tmp.otf')
- print(len(checker.characters)) # encoded characters
- data[key]['characters'] = len(checker.characters)
- print('langs:')
- langs = checker.get_supported_languages()
+ encoded_chars = len(checker.characters)
+ print(f'characters: {encoded_chars}')
+ data[key]['characters'] = encoded_chars
+
+ print('languages:')
+ langs = checker.get_supported_languages(shaping=False)
data[key]['languages'] = {}
for lang in langs:
- print(lang, len(langs[lang]), lang_count[lang])
+ print(f' {lang}: {len(langs[lang])} of {lang_count[lang]}')
data[key]['languages'][str(lang)] = len(langs[lang])
unlink('tmp.otf')
except Exception:
- print('language support could not be detected')
+ print('Language support could not be detected')
user_file.seek(0) # roll back to start of file
json.dump(data, user_file, indent=4, ensure_ascii=False) # insert the new data
diff --git a/listing.py b/tools/listing.py
similarity index 91%
rename from listing.py
rename to tools/listing.py
index 8688b182..f0cd9604 100644
--- a/listing.py
+++ b/tools/listing.py
@@ -2,7 +2,7 @@
TEMPLATE = "- [{name}]({url}) _{license}_ ([view](https://www.programmingfonts.org/#{key}))"
-with open('fonts.json') as user_file:
+with open('../fonts.json') as user_file:
file_contents = user_file.read()
data = json.loads(file_contents)
diff --git a/tools/requirements.txt b/tools/requirements.txt
new file mode 100644
index 00000000..cebab383
--- /dev/null
+++ b/tools/requirements.txt
@@ -0,0 +1,3 @@
+brotli==1.2.0
+fonttools==4.63.0
+hyperglot==0.8.1
diff --git a/tools/validate.py b/tools/validate.py
new file mode 100644
index 00000000..eec6a903
--- /dev/null
+++ b/tools/validate.py
@@ -0,0 +1,35 @@
+import json
+import sys
+
+with open('../fonts.json', 'r') as f:
+ data = json.load(f)
+
+ok = True
+
+for alias, font in data.items():
+ if 'group' not in font or not font['group']:
+ continue
+
+ # Self-reference is valid — this font is a parent
+ if font['group'] == alias:
+ continue
+
+ # Group key must exist
+ if font['group'] not in data:
+ print(
+ f'{alias}: group "{font["group"]}" does not match any font key',
+ file=sys.stderr,
+ )
+ ok = False
+ continue
+
+ # Target must be a parent (self-referencing), not another child — no two-level nesting
+ if data[font['group']].get('group') != font['group']:
+ print(
+ f'{alias}: group "{font["group"]}" is not a parent (a parent must have group equal to its own key)',
+ file=sys.stderr,
+ )
+ ok = False
+
+if not ok:
+ sys.exit(1)
diff --git a/validate.js b/validate.js
deleted file mode 100644
index a92f0e38..00000000
--- a/validate.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const data = require("./fonts.json");
-let ok = true;
-
-for (const [alias, font] of Object.entries(data)) {
- if (!font.group) continue;
-
- // Self-reference is valid — this font is a parent
- if (font.group === alias) continue;
-
- // Group key must exist
- if (!data[font.group]) {
- console.error(
- `${alias}: group "${font.group}" does not match any font key`,
- );
- ok = false;
- continue;
- }
-
- // Target must be a parent (self-referencing), not another child — no two-level nesting
- if (data[font.group].group !== font.group) {
- console.error(
- `${alias}: group "${font.group}" is not a parent (a parent must have group equal to its own key)`,
- );
- ok = false;
- }
-}
-
-if (!ok) process.exit(1);