Compare commits
76 commits
Author | SHA1 | Date | |
---|---|---|---|
34cced2a12 | |||
ef565289eb | |||
40fc56fc4e | |||
f70e21b6e5 | |||
2b2de1d7a0 | |||
525f223010 | |||
ea1a77ce75 | |||
6dfa7e2385 | |||
122cf42d40 | |||
747fab5be7 | |||
f064e54c06 | |||
ba21c00cdf | |||
6f05dc2018 | |||
5de1abb167 | |||
ee125da078 | |||
a47db68a73 | |||
79b02adef1 | |||
20f11a21e0 | |||
f61975c306 | |||
b94cc3e0de | |||
db910e4cd6 | |||
22c5754289 | |||
63976dd129 | |||
a696ca56b0 | |||
f7a8ac72f2 | |||
a03fb501d3 | |||
e19f63e0e9 | |||
9f01d4d376 | |||
ab2aaf3e73 | |||
4cabdfdfb3 | |||
aaafcd3702 | |||
4926aeac29 | |||
c9d4324d90 | |||
3b2506cd31 | |||
caf00206a7 | |||
16de164e66 | |||
a0130c91fa | |||
c44df2bc5f | |||
db40758747 | |||
ad43187d10 | |||
2a95184394 | |||
022693f6f0 | |||
164956350f | |||
7b20ec1e3b | |||
ab6e682f93 | |||
d80b0f07f1 | |||
390c41cc94 | |||
31adb247e5 | |||
82180459c9 | |||
8f4cc97fd5 | |||
a712db6f47 | |||
a258200a13 | |||
37855f9cf8 | |||
4488dc4a66 | |||
dc096591b0 | |||
383835769c | |||
f1725b4b4a | |||
e4d1280121 | |||
2c78d18533 | |||
8c616ac0dd | |||
f2fa4431b8 | |||
e6d6ecfcdf | |||
54f1c04b68 | |||
6d3291e32f | |||
b95464577a | |||
7b29086fd2 | |||
894d462c02 | |||
9f66ca846f | |||
6462d0d3d3 | |||
f2b14f6dd8 | |||
5b90f15c94 | |||
3de2fda715 | |||
1ecbc3ac56 | |||
4c21593495 | |||
6cdf4a0583 | |||
0d88d99bb1 |
4
.github/workflows/build.yml
vendored
|
@ -14,12 +14,12 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
container: tonsky/firacode:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- if: startsWith(github.ref, 'refs/tags/')
|
||||
run: python3 ./script/update_version.py
|
||||
- run: ./script/build.sh
|
||||
- run: echo "hash=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Fira_Code_${{ env.hash }}
|
||||
path: distr
|
||||
|
|
19
.gitignore
vendored
|
@ -1,18 +1,19 @@
|
|||
*.zip
|
||||
FiraCode_liga.glyphs
|
||||
FiraCode_mess.glyphs
|
||||
target
|
||||
clojure/*.edn
|
||||
FiraCode\ (Autosaved).glyphs
|
||||
FiraCode_VF.glyphs
|
||||
.cpcache
|
||||
.repl-port
|
||||
master_ufo
|
||||
instance_ufo
|
||||
venv
|
||||
.DS_Store
|
||||
*.numbers
|
||||
distr/ttf
|
||||
distr/otf
|
||||
distr/woff
|
||||
distr/woff2
|
||||
distr/variable_ttf
|
||||
|
||||
distr/*/
|
||||
|
||||
*.glyphs
|
||||
!FiraCode.glyphs
|
||||
|
||||
.idea
|
||||
.fleet
|
||||
*.iml
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
### 7.0
|
||||
|
||||
- Fixed overlap in U+2573 ╳ #1414
|
||||
|
||||
### 6.2
|
||||
|
||||
- Fixed monospaced property #1325
|
||||
|
@ -21,7 +25,7 @@ Unicode:
|
|||
- Added U+220E End of Proof `∎` #1115
|
||||
- Added U+FFFD Replacement Character `<60>` #1137, thanks @gjvnq
|
||||
- Added U+EE00..U+EE0B Progress Bar `` #1182
|
||||
- Added U+2237 Propotion `∷` #1219
|
||||
- Added U+2237 Proportion `∷` #1219
|
||||
- Added U+21AA Rightwards Arrow with Hook `↪` #1307
|
||||
|
||||
Changed:
|
||||
|
@ -265,7 +269,7 @@ Removed 44 individual arrow ligatures, replaced with four universal, combinative
|
|||
|
||||
#### 1.102
|
||||
|
||||
- Support for IntelliJ-based IDEs ([instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions))
|
||||
- Support for IntelliJ-based IDEs ([instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions))
|
||||
- Turned on autohinting
|
||||
|
||||
#### 1.101
|
||||
|
|
26507
FiraCode.glyphs
240
LEEME.md
Normal file
|
@ -0,0 +1,240 @@
|
|||
## Fira Code: la fuente monoespaciada con ligaduras gratuita para programación
|
||||
|
||||
![Fira Code](./extras/logo.svg)
|
||||
|
||||
Leer en [English](./README.md) | [简体中文](./README_CN.md) | [日本語](./README_JA.md)
|
||||
|
||||
### El problema
|
||||
|
||||
Los programadores usamos muchos símbolos, frecuentemente codificados con varios caracteres. Para el cerebro humano, sucesiones como `->`, `<=` o `:=` son unidades lógicas individuales, incluso si requieren dos o más caracteres en pantalla. Nuestros ojos utilizan una cantidad no nula de energía para leer, analizar y unir caracteres mútiples en una sola unidad lógica. Idealmente, todos los lenguajes de programación deberían estar diseñados para representar los operadores con símbolos Unicode; pero ese no es el caso aún.
|
||||
|
||||
### La solución
|
||||
|
||||
Fira Code es una fuente monoespaciada gratuita que contiene ligaduras para combinaciones multicaracter comunes en programación. Esta es simplemente una característica del renderizado de la fuente: el código subyacente permanece compatible con el estándar ASCII. Esto ayuda a leer y comprender más rápido el código. Para algunas sucesiones comunes, como `..` o `//`, las ligaduras nos permiten hacer correcciones en el espaciado.
|
||||
|
||||
### Descarga e instalación
|
||||
|
||||
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - Diciembre 6 de 2021 - 2.5 MB" src="./extras/download_es.png" width="520" height="130"></a>
|
||||
|
||||
Recursos adicionales (en inglés):
|
||||
|
||||
- [Cómo instalar](https://github.com/tonsky/FiraCode/wiki)
|
||||
- [Resolución de problemas](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
|
||||
- [Noticias e información](https://twitter.com/FiraCode)
|
||||
|
||||
### Contribuyendo
|
||||
|
||||
<a href="https://github.com/sponsors/tonsky" target="_blank"><img alt="Contribuye" src="./extras/sponsor_es.png"></a>
|
||||
|
||||
Fira Code es un proyecto personal desarrollado en mi tiempo libre, sin financiamiento y con una enorme [lista de solicitudes](https://github.com/tonsky/FiraCode/issues). Si el resultado es de tu agrado, por favor considera apoyar a su desarrollo por medio de [GitHub Sponsors](https://github.com/sponsors/tonsky) o [Patreon](https://patreon.com/tonsky). ¡Cualquier ayuda cuenta!
|
||||
|
||||
### ¿Qué ofrece?
|
||||
|
||||
Izquierda: ligaduras renderizadas en Fira Code. Derecha: las mismas secuencias de caracteres sin ligaduras.
|
||||
|
||||
<img src="./extras/ligatures_es.png" width="812" height="1326">
|
||||
|
||||
Fira Code viene con una gran variedad de flechas. Mejor aun, ¡estas pueden hacerse tan largas como se desee y se pueden combinar los fragmentos incial/medio/final de la forma que se quiera!
|
||||
|
||||
<img src="./extras/arrows_es.png" width="754" height="799">
|
||||
|
||||
Fira Code no solo se trata de las ligaduras. Algunos ajustes se han hecho a la puntuación y a pares de letras frecuentes.
|
||||
|
||||
<img src="./extras/typographics_es.png" width="754" height="649">
|
||||
|
||||
Fira Code viene con algunas variantes de caracteres, de manera que cada uno puede escoger lo que mejor le convenga. [Cómo activar (en inglés)](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
|
||||
|
||||
<img src="./extras/character_variants_es.png" width="754" height="391">
|
||||
|
||||
Algunas ligaduras pueden alterarse o activarse usando conjuntos estilísticos/variantes de caracteres:
|
||||
|
||||
<img src="./extras/ligature_variants_es.png" width="754" height="561">
|
||||
|
||||
Siendo una fuente para programación, Fira Code tiene un soporte fantástico para dibujos ASCII/de cajas, powerline y otras formas de interfaz de usuario para terminal:
|
||||
|
||||
<img src="./extras/console_es.png" width="754" height="459">
|
||||
|
||||
Fira Code es la primera fuente para programación en ofrecer glifos dedicados al dibujo de barras de progreso:
|
||||
|
||||
<img src="./extras/progress.png" width="754" height="282">
|
||||
|
||||
En acción:
|
||||
|
||||
<img src="./extras/progress_es.gif" width="594" height="181">
|
||||
|
||||
Esperamos que más fuentes adopten esta convención y definan sus propias versiones.
|
||||
|
||||
La covertura del estándar Unicode hace de Fira Code una gran elección para la escritura matemática:
|
||||
|
||||
<img src="./extras/math_es.png" width="754" height="323">
|
||||
|
||||
### ¿Cómo luce?
|
||||
|
||||
<img src="./extras/samples.png" width="754" height="1068">
|
||||
<img src="./extras/samples2.png" width="754" height="1257">
|
||||
|
||||
### Lista de compatibilidad con editores
|
||||
|
||||
| Funciona | No funciona |
|
||||
|----------|-------------|
|
||||
| **Abricotine** | **Arduino IDE** |
|
||||
| **Android Studio** (2.3+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** |
|
||||
| **Anjuta** (excepto con EOF) | **Delphi IDE** |
|
||||
| **AppCode** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Emacs** por sí solo ([solución alternativa](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
|
||||
| **Atom** 1.1 o más nuevo ([instrucciones](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **Godot** ([reporte](https://github.com/godotengine/godot/issues/9961)) |
|
||||
| **BBEdit** (14.6+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **IDLE** |
|
||||
| **Brackets** (con [este plugin](https://github.com/polo2ro/firacode-in-brackets)) | **KDevelop 4** |
|
||||
| **Chocolat** | **Monkey Studio IDE** |
|
||||
| **CLion** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **UltraEdit** |
|
||||
| **Cloud9** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
|
||||
| **Coda 2** |
|
||||
| **CodeLite** |
|
||||
| **CodeRunner** |
|
||||
| **CotEditor** |
|
||||
| **Eclipse** |
|
||||
| **elementary Code** |
|
||||
| **Geany** (1.37+) |
|
||||
| **gEdit / Pluma** |
|
||||
| **GNOME Builder** |
|
||||
| **GoormIDE** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
|
||||
| **gVim** ([Windows](https://github.com/tonsky/FiraCode/issues/462), [GTK](https://vimhelp.org/options.txt.html#%27guiligatures%27)) |
|
||||
| **IntelliJ IDEA** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **Kate, KWrite** |
|
||||
| **KDevelop 5+** |
|
||||
| **Komodo** |
|
||||
| **Leafpad** |
|
||||
| **LibreOffice** |
|
||||
| **LightTable** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/LightTable-instructions)) |
|
||||
| **LINQPad** |
|
||||
| **MacVim** 7.4 o más nuevo ([instrucciones](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
|
||||
| **Mancy** |
|
||||
| **MATLAB** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/MATLAB-for-Windows-Instructions)) |
|
||||
| **Meld** |
|
||||
| **Mousepad** |
|
||||
| **NeoVim-gtk** |
|
||||
| **NetBeans** |
|
||||
| **Notepad** (Windows) |
|
||||
| **Notepad++** (con una [solución alternativa](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) |
|
||||
| **Notepad3** ([instrucciones](https://github.com/rizonesoft/Notepad3/issues/361#issuecomment-365977420))|
|
||||
| **Nova** |
|
||||
| **PhpStorm** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **PyCharm** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **QOwnNotes** (21.16.6+) |
|
||||
| **QtCreator** |
|
||||
| **Rider** |
|
||||
| **RStudio** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
|
||||
| **RubyMine** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **Scratch** |
|
||||
| **Scribus** (1.5.3+) |
|
||||
| **SublimeText** (3146+) |
|
||||
| **Spyder IDE** (solamente con Qt5) |
|
||||
| **SuperCollider 3** |
|
||||
| **TeXShop** |
|
||||
| **TextAdept** (Linux, macOS) |
|
||||
| **TextEdit** |
|
||||
| **TextMate 2** |
|
||||
| **VimR** ([instrucciones](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
||||
| **Visual Studio** (2015+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
|
||||
| **Visual Studio Code** ([instrucciones](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
|
||||
| **WebStorm** (2016.2+, [instrucciones](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **Xamarin Studio/Monodevelop** |
|
||||
| **Xcode** (8.0+, alternativamente con [este plugin](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
||||
| **Xi** |
|
||||
| Probablemente: **Smultron, Vico** | En duda: **Code::Blocks IDE** |
|
||||
|
||||
### Lista de compatibilidad con terminales
|
||||
|
||||
| Plataforma | Funciona | No funciona |
|
||||
|----------------|----------|-------------|
|
||||
| macOS | Hyper (ver [#3607](https://github.com/vercel/hyper/issues/3607))<br>iTerm 2<br>Kitty<br>Terminal.app<br>ZOC | Alacritty |
|
||||
| Windows | Hyper (ver [#3607](https://github.com/vercel/hyper/issues/3607))<br>Mintty<br>Token2Shell<br>Windows Terminal | Alacritty<br>Cmder<br>ConEmu<br>PuTTY<br>Windows Console<br>ZOC |
|
||||
| Linux | Hyper (ver [#3607](https://github.com/vercel/hyper/issues/3607))<br>Kitty<br>Konsole<br>QTerminal<br>Termux<br>st ([parche](https://st.suckless.org/patches/ligatures/)) | Alacritty<br>GNOME Terminal<br>Terminales basadas en libvte ([reporte](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)): <ul><li>gtkterm<li>guake<li>LXTerminal<li> sakura<li>Terminator<li>xfce4-terminal</ul>mate-terminal<br>rxvt<br>terminology<br>xterm
|
||||
| ChromeOS | crosh ([instrucciones](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | |
|
||||
|
||||
### Soporte en el navegador web
|
||||
|
||||
```html
|
||||
<!-- HTML -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css">
|
||||
```
|
||||
|
||||
```css
|
||||
/* CSS */
|
||||
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
|
||||
```
|
||||
|
||||
```css
|
||||
/* Especificar en el CSS */
|
||||
code { font-family: 'Fira Code', monospace; }
|
||||
|
||||
@supports (font-variation-settings: normal) {
|
||||
code { font-family: 'Fira Code VF', monospace; }
|
||||
}
|
||||
```
|
||||
|
||||
- IE 10+, Edge Legacy: activar con `font-feature-settings: "calt";`
|
||||
- Firefox
|
||||
- Safari
|
||||
- Navegadores basados en Chromium (Chrome, Opera)
|
||||
- ACE
|
||||
- CodeMirror (activar con `font-variant-ligatures: contextual;`)
|
||||
|
||||
### Proyectos que usan Fira Code
|
||||
|
||||
- [CodePen](https://codepen.io/)
|
||||
- [Blink Shell](http://www.blink.sh/)
|
||||
- [Klipse](http://app.klipse.tech/)
|
||||
- [IlyaBirman.net](http://ilyabirman.net/)
|
||||
- [EvilMartians.com](https://evilmartians.com/)
|
||||
- [Web Maker](https://webmakerapp.com/)
|
||||
- [FromScratch](https://fromscratch.rocks/)
|
||||
- [PEP20.org](https://pep20.org/)
|
||||
|
||||
### Alternativas
|
||||
|
||||
Fuentes monoespaciadas con ligaduras gratuitas:
|
||||
|
||||
- [Hasklig](https://github.com/i-tu/Hasklig)
|
||||
- [Monoid](http://larsenwork.com/monoid/)
|
||||
- [Fixedsys Excelsior](https://github.com/kika/fixedsys)
|
||||
- [Iosevka](https://be5invis.github.io/Iosevka/)
|
||||
- [DejaVu Sans Code](https://github.com/SSNikolaevich/DejaVuSansCode)
|
||||
- [Victor Mono](https://rubjo.github.io/victor-mono/)
|
||||
- [Cascadia Code](https://github.com/microsoft/cascadia-code)
|
||||
- [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono)
|
||||
|
||||
Fuentes monoespaciadas con ligaduras no gratuitas:
|
||||
|
||||
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
|
||||
- [Mono Lisa](https://www.monolisa.dev/)
|
||||
|
||||
### Compilando Fira Code localmente
|
||||
|
||||
En caso que se quiera modificar el código en FiraCode.glyphs y compilar archivos OTF/TTF/WOFF propios, estas son las instrucciones que uso en macOS:
|
||||
|
||||
```bash
|
||||
# instalar las herramientas requeridas para la compilación
|
||||
./script/bootstrap_macos.sh
|
||||
|
||||
# compilar los archivos de la fuente
|
||||
./script/build.sh
|
||||
|
||||
# instalar los OTFs en ~/Library/Fonts
|
||||
cp distr/otf/*.otf ~/Library/Fonts
|
||||
```
|
||||
|
||||
Alternativamnete, se puede compilar Fira Code usando Docker:
|
||||
|
||||
```bash
|
||||
# instalar las dependencias en un contenedor y compilar los archivos de la fuente
|
||||
make
|
||||
|
||||
# comprimir los archivos de la fuente en dist/ a un zip
|
||||
make package
|
||||
```
|
||||
|
||||
### Créditos
|
||||
|
||||
- Autor: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky)
|
||||
- Basado en: [Fira Mono](https://github.com/mozilla/Fira)
|
||||
- Inspirado por: [Hasklig](https://github.com/i-tu/Hasklig)
|
7
Makefile
|
@ -1,10 +1,7 @@
|
|||
all: dep build
|
||||
|
||||
dep:
|
||||
docker build -t fira:latest .
|
||||
all: build
|
||||
|
||||
build:
|
||||
docker run --rm -v ${PWD}:/opt fira:latest ./script/build.sh
|
||||
docker run --rm -v ${PWD}:/opt tonsky/firacode:latest ./script/build.sh
|
||||
|
||||
package:
|
||||
./script/package.sh
|
||||
|
|
128
README.md
|
@ -2,6 +2,8 @@
|
|||
|
||||
![Fira Code](./extras/logo.svg)
|
||||
|
||||
Read in [Español](./LEEME.md) | [简体中文](./README_CN.md) | [日本語](./README_JA.md)
|
||||
|
||||
### Problem
|
||||
|
||||
Programmers use a lot of symbols, often encoded with several characters. For the human brain, sequences like `->`, `<=` or `:=` are single logical tokens, even if they take two or three characters on the screen. Your eye spends a non-zero amount of energy to scan, parse and join multiple characters into a single logical one. Ideally, all programming languages should be designed with full-fledged Unicode symbols for operators, but that’s not the case yet.
|
||||
|
@ -12,7 +14,7 @@ Fira Code is a free monospaced font containing ligatures for common programming
|
|||
|
||||
### Download & Install
|
||||
|
||||
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB" src="./extras/download.png" width="520" height="130"></a>
|
||||
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB" src="./extras/download.png" width="520"></a>
|
||||
|
||||
Then:
|
||||
|
||||
|
@ -20,83 +22,100 @@ Then:
|
|||
- [Troubleshooting](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
|
||||
- [News & Updates](https://twitter.com/FiraCode)
|
||||
|
||||
### Support
|
||||
|
||||
<a href="https://github.com/sponsors/tonsky" target="_blank"><img alt="Sponsor" src="./extras/sponsor.png"></a>
|
||||
### Sponsors
|
||||
|
||||
Fira Code is a personal, free-time project with no funding and a huge [feature request backlog](https://github.com/tonsky/FiraCode/issues). If you love it, consider supporting its development via [GitHub Sponsors](https://github.com/sponsors/tonsky) or [Patreon](https://patreon.com/tonsky). Any help counts!
|
||||
|
||||
Huge thanks to:
|
||||
|
||||
<table>
|
||||
<td align="center">
|
||||
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=firacode&utm_source=github">
|
||||
<div>
|
||||
<img src="https://user-images.githubusercontent.com/629429/151508669-efb4c3b3-8fe3-45eb-8e47-e9510b5f0af1.svg" width="290" alt="WorkOS">
|
||||
</div>
|
||||
<b>Your app, enterprise-ready.</b>
|
||||
<div>
|
||||
<sub>Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months.</sup>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</table>
|
||||
|
||||
### What’s in the box?
|
||||
|
||||
Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.
|
||||
|
||||
<img src="./extras/ligatures.png" width="754" height="1326">
|
||||
<img src="./extras/ligatures.png" width="754">
|
||||
|
||||
Fira Code comes with a huge variety of arrows. Even better: you can make them as long as you like and combine start/middle/end fragments however you want!
|
||||
|
||||
<img src="./extras/arrows.png" width="754" height="799">
|
||||
<img src="./extras/arrows.png" width="754">
|
||||
|
||||
Fira Code is not only about ligatures. Some fine-tuning is done for punctuation and frequent letter pairs.
|
||||
|
||||
<img src="./extras/typographics.png" width="754" height="649">
|
||||
<img src="./extras/typographics.png" width="754">
|
||||
|
||||
Fira Code comes with a few different character variants, so that everyone can choose what’s best for them. [How to enable](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
|
||||
Fira Code comes with a few different character variants (`cv01`, `cv02`, etc), stylistic sets (`ss01`, `ss02` , etc) and other font features (`zero`, `onum`, `calt`, etc), so that everyone can choose what’s best for them. [How to enable](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
|
||||
|
||||
<img src="./extras/character_variants.png" width="754" height="391">
|
||||
<img src="./extras/character_variants.png" width="754">
|
||||
|
||||
Some ligatures can be altered or enabled using stylistic sets/character variants:
|
||||
|
||||
<img src="./extras/ligature_variants.png" width="754" height="561">
|
||||
<img src="./extras/ligature_variants.png" width="754">
|
||||
|
||||
Being a programming font, Fira Code has fantastic support for ASCII/box drawing, powerline and other forms of console UIs:
|
||||
|
||||
<img src="./extras/console.png" width="754" height="459">
|
||||
<img src="./extras/console.png" width="754">
|
||||
|
||||
Fira Code is the first programming font to offer dedicated glyphs to render progress bars:
|
||||
|
||||
<img src="./extras/progress.png" width="754" height="282">
|
||||
<img src="./extras/progress.png" width="754">
|
||||
|
||||
In action:
|
||||
|
||||
<img src="./extras/progress.gif" width="560" height="181">
|
||||
<img src="./extras/progress.gif" width="560">
|
||||
|
||||
We hope more programming fonts will adopt this convention and ship their own versions.
|
||||
|
||||
Unicode coverage makes Fira Code a great choice for mathematical writing:
|
||||
|
||||
<img src="./extras/math.png" width="754" height="323">
|
||||
<img src="./extras/math.png" width="754">
|
||||
|
||||
### How does it look?
|
||||
|
||||
<img src="./extras/samples.png" width="754" height="1068">
|
||||
<img src="./extras/samples2.png" width="754" height="1257">
|
||||
<img src="./extras/samples.png" width="754">
|
||||
<img src="./extras/samples2.png" width="754">
|
||||
|
||||
### Editor compatibility list
|
||||
|
||||
| Works | Doesn’t work |
|
||||
|-------|----------------|
|
||||
| **Abricotine** | **Arduino IDE** |
|
||||
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** |
|
||||
| **Anjuta** (unless at the EOF) | **Delphi IDE** |
|
||||
| **AppCode** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | Standalone **Emacs** ([workaround](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
|
||||
| **Atom** 1.1 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **Godot** ([issue](https://github.com/godotengine/godot/issues/9961)) |
|
||||
| **BBEdit/TextWrangler** (v. 11 only, [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **IDLE** |
|
||||
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) | **KDevelop 4** |
|
||||
| **Chocolat** | **Monkey Studio IDE** |
|
||||
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **UltraEdit** |
|
||||
| **Arduino IDE** (2.0+,same instructions as [vscode](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) | **Adobe Dreamweaver** |
|
||||
| **Abricotine** | **Delphi IDE** |
|
||||
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | Standalone **Emacs** ([workaround](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
|
||||
| **Anjuta** (unless at the EOF) | **IDLE** |
|
||||
| **AppCode** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | **KDevelop 4** |
|
||||
| **Atom** 1.1 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **Monkey Studio IDE** |
|
||||
| **BBEdit** (14.6+ [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **UltraEdit** (Windows) |
|
||||
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) |
|
||||
| **Chocolat** |
|
||||
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
|
||||
| **Coda 2** |
|
||||
| **CodeLite** |
|
||||
| **CodeRunner** |
|
||||
| **Comma** (Under: Preferences > Editor > Font) |
|
||||
| **CotEditor** |
|
||||
| **Eclipse** |
|
||||
| **elementary Code** |
|
||||
| **Geany** (1.37+) |
|
||||
| **gEdit / Pluma** |
|
||||
| **GNOME Builder** |
|
||||
| **Godot** |
|
||||
| **GoormIDE** ([instructions](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
|
||||
| **gVim** ([Windows](https://github.com/tonsky/FiraCode/issues/462), [GTK](https://vimhelp.org/options.txt.html#%27guiligatures%27)) |
|
||||
| **IntelliJ IDEA** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **IntelliJ IDEA** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Kate, KWrite** |
|
||||
| **KDevelop 5+** |
|
||||
| **Komodo** |
|
||||
|
@ -112,28 +131,30 @@ Unicode coverage makes Fira Code a great choice for mathematical writing:
|
|||
| **NeoVim-gtk** |
|
||||
| **NetBeans** |
|
||||
| **Notepad** (Windows) |
|
||||
| **Notepad++** (with a [workaround](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) |
|
||||
| **Notepad++** ([instructions](https://github.com/tonsky/FiraCode/issues/1555)) |
|
||||
| **Notepad3** ([instructions](https://github.com/rizonesoft/Notepad3/issues/361#issuecomment-365977420))|
|
||||
| **Nova** |
|
||||
| **PhpStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **PyCharm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **PhpStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **PyCharm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **QOwnNotes** (21.16.6+) |
|
||||
| **QtCreator** |
|
||||
| **Rider** |
|
||||
| **RStudio** ([instructions](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
|
||||
| **RubyMine** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **RubyMine** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Scratch** |
|
||||
| **Scribus** (1.5.3+) |
|
||||
| **SublimeText** (3146+) |
|
||||
| **Spyder IDE** (only with Qt5) |
|
||||
| **SuperCollider 3** |
|
||||
| **TeXShop**|
|
||||
| **TextAdept** (Linux, macOS) |
|
||||
| **TextEdit** |
|
||||
| **TextMate 2** |
|
||||
| **UltraEdit (UEX)** (Linux) |
|
||||
| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
||||
| **Visual Studio** (2015+, [instructions](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
|
||||
| **Visual Studio Code** ([instructions](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
|
||||
| **WebStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
|
||||
| **WebStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Xamarin Studio/Monodevelop** |
|
||||
| **Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
||||
| **Xi** |
|
||||
|
@ -141,12 +162,28 @@ Unicode coverage makes Fira Code a great choice for mathematical writing:
|
|||
|
||||
### Terminal compatibility list
|
||||
|
||||
| Platform | Works | Doesn’t work |
|
||||
|----------------|-------|--------------|
|
||||
| macOS | Hyper (see [#3607](https://github.com/vercel/hyper/issues/3607))<br>iTerm 2<br>Kitty<br>Terminal.app<br>ZOC | Alacritty |
|
||||
| Windows | Hyper (see [#3607](https://github.com/vercel/hyper/issues/3607))<br>Mintty<br>Token2Shell<br>Windows Terminal | Alacritty<br>Cmder<br>ConEmu<br>PuTTY<br>Windows Console<br>ZOC |
|
||||
| Linux | Hyper (see [#3607](https://github.com/vercel/hyper/issues/3607))<br>Kitty<br>Konsole<br>QTerminal<br>Termux<br>st ([patch](https://st.suckless.org/patches/ligatures/)) | Alacritty<br>GNOME Terminal<br>libvte-based terminals ([bug report](https://bugzilla.gnome.org/show_bug.cgi?id=584160)): <ul><li>gtkterm<li>guake<li>LXTerminal<li> sakura<li>Terminator<li>xfce4-terminal</ul>mate-terminal<br>rxvt<br>terminology<br>xterm
|
||||
| ChromeOS | crosh ([instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | |
|
||||
| Works | Doesn’t work |
|
||||
|-------|--------------|
|
||||
| crosh ([instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | Alacritty |
|
||||
| Hyper (see [#3607](https://github.com/vercel/hyper/issues/3607)) | Asbru Connection Manager |
|
||||
| iTerm 2 | Cmder |
|
||||
| Kitty | ConEmu |
|
||||
| Konsole | GNOME Terminal ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/192)) |
|
||||
| Mintty | gtkterm ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| QTerminal | guake ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| st ([patch](https://st.suckless.org/patches/ligatures/)) | LXTerminal ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Tabby | mate-terminal |
|
||||
| Terminal.app | PuTTY |
|
||||
| Termux | rxvt |
|
||||
| Token2Shell | sakura ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Wez’s terminal | SecureCRT
|
||||
| Windows Terminal | Terminator ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| ZOC (macOS) | terminology |
|
||||
| | Tilix |
|
||||
| | Windows Console |
|
||||
| | xfce4-terminal ([ticket](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| | xterm |
|
||||
| | ZOC (Windows) |
|
||||
|
||||
### Browser support
|
||||
|
||||
|
@ -230,6 +267,23 @@ make
|
|||
make package
|
||||
```
|
||||
|
||||
If you want to *permanently enable* certain style sets or character variations, maybe because your editor of choice does not allow you to toggle these individually, you can provide the desired features as a comma separated list to the build script via the `-f / --features` flag.<br>Default: none.
|
||||
|
||||
To separate different versions of your font you can specify the desired font family name with the `-n / --family-name` flag. The special value 'features' will append a sorted, space separated list of enabled features to the default family name.<br>Default: "Fira Code"
|
||||
|
||||
You can also limit the font weights that will be created with the `-w / --weights` option.<br>Default: "Light,Regular,Retina,Medium,SemiBold,Bold"
|
||||
|
||||
```bash
|
||||
# locally in your shell
|
||||
./script/build.sh --features "ss02,ss08,ss10,cv03,cv07,cv14" --family-name "Fira Code straight" --weights "Regular,Bold"
|
||||
|
||||
# or via a docker container (creates the family name 'Fira Code cv01 cv02 cv06 cv31 onum ss01 ss03 ss04 zero')
|
||||
docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "cv01,cv02,cv06,ss01,zero,onum,ss03,ss04,cv31" -n "features"
|
||||
|
||||
# in Git Bash from Git for Windows, or any other MSYS2 based shell, you might need to disable path conversion
|
||||
MSYS2_ARG_CONV_EXCL="*" docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "ss02,ss03,ss04,ss05,ss06,ss07"
|
||||
```
|
||||
|
||||
### Credits
|
||||
|
||||
- Author: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky)
|
||||
|
|
284
README_CN.md
Normal file
|
@ -0,0 +1,284 @@
|
|||
## Fira Code: 免费的编程连字等宽字体
|
||||
|
||||
![Fira Code](./extras/logo.svg)
|
||||
|
||||
### 问题
|
||||
|
||||
开发者们使用的多标记,通常都是用几个字符编码。对于人的大脑来说,像`->`、`<=`或`:=`这样的序列是单一的逻辑标记,即使它们在屏幕上显示两到三个字符。您的眼睛并非无消耗的来扫描、解析并将多个字符连接到一个逻辑字符中。理想情况下,所有编程语言都应该为操作符设计成熟的Unicode符号,但现在还不是这样。
|
||||
|
||||
### 解决方案
|
||||
|
||||
Fira Code是一种免费的等宽字体,包含常用的编程语言中多种字符组合的连字。这只是一个字体呈现功能,底层代码仍然与ASCII兼容。这有助于更快地阅读和理解代码。对于一些常见的序列,如`..`或`//`,连字允许我们纠正间距。
|
||||
|
||||
### 下载和安装
|
||||
|
||||
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB" src="./extras/download.png" width="520"></a>
|
||||
|
||||
下一步:
|
||||
|
||||
- [如何安装](https://github.com/tonsky/FiraCode/wiki)
|
||||
- [疑难解答](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
|
||||
- [相关新闻](https://twitter.com/FiraCode)
|
||||
|
||||
### 赞助商
|
||||
|
||||
<a href="https://github.com/sponsors/tonsky" target="_blank"><img alt="Sponsor" src="./extras/sponsor.png"></a>
|
||||
|
||||
Fira Code 是个人的空闲时间进行的项目,缺乏资金但有大量的 [功能请求积压](https://github.com/tonsky/FiraCode/issues)。如果你也热爱这个项目, 请考虑通过 [GitHub Sponsors](https://github.com/sponsors/tonsky) 或 [Patreon](https://patreon.com/tonsky) 来支持它的发展。任何帮助都很重要!
|
||||
|
||||
非常感谢:
|
||||
|
||||
<table>
|
||||
<td align="center">
|
||||
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=firacode&utm_source=github">
|
||||
<div>
|
||||
<img src="https://user-images.githubusercontent.com/629429/151508669-efb4c3b3-8fe3-45eb-8e47-e9510b5f0af1.svg" width="290" alt="WorkOS">
|
||||
</div>
|
||||
<b>Your app, enterprise-ready.</b>
|
||||
<div>
|
||||
<sub>Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months.</sup>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</table>
|
||||
|
||||
### 字体里都有哪些特征?
|
||||
|
||||
左侧:Fira Code中呈现的连字。右侧:没有连字的相同字符序列。
|
||||
|
||||
<img src="./extras/ligatures.png" width="754">
|
||||
|
||||
Fira Code 带有种类繁多的箭头。更棒的是:您可以随心所欲地制作它们,并根据需要组合开始/中间/结束片段!
|
||||
|
||||
<img src="./extras/arrows.png" width="754">
|
||||
|
||||
Fira Code 不仅与连字有关,还对标点符号和频繁的字母对进行了一些微调。
|
||||
|
||||
<img src="./extras/typographics.png" width="754">
|
||||
|
||||
Fira Code 带有各种各样的箭头,更棒的是,您可以随心所欲地制作它们,并且可以任意组合开始/中间/结束片段![如何启用](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
|
||||
|
||||
<img src="./extras/character_variants.png" width="754">
|
||||
|
||||
可以使用样式集/字符变体更改或启用某些连字:
|
||||
|
||||
<img src="./extras/ligature_variants.png" width="754">
|
||||
|
||||
作为一种编程字体,Fira Code 对 ASCII/框绘图、powerline和其他形式的控制台 UI 具有出色的支持:
|
||||
|
||||
<img src="./extras/console.png" width="754">
|
||||
|
||||
Fira Code 是第一个提供专用字形来渲染进度条的编程字体:
|
||||
|
||||
<img src="./extras/progress.png" width="754">
|
||||
|
||||
在运行中:
|
||||
|
||||
<img src="./extras/progress.gif" width="560">
|
||||
|
||||
我们希望更多的编程字体能够采用这个约定并发布自己的版本。
|
||||
|
||||
Unicode 覆盖使 Fira Code 成为数学写作的绝佳选择:
|
||||
|
||||
<img src="./extras/math.png" width="754">
|
||||
|
||||
### 它看起来怎样?
|
||||
|
||||
<img src="./extras/samples.png" width="754">
|
||||
<img src="./extras/samples2.png" width="754">
|
||||
|
||||
### 编辑器兼容性列表
|
||||
|
||||
| 支持 | 不支持 |
|
||||
|-------|----------------|
|
||||
| **Abricotine** | **Arduino IDE** |
|
||||
| **Android Studio** (2.3+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | **Adobe Dreamweaver** |
|
||||
| **Anjuta** (除非在 EOF) | **Delphi IDE** |
|
||||
| **AppCode** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | Standalone **Emacs** ([解决方法](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) | **IDLE** |
|
||||
| **Atom** 1.1 或更新版本 ([说明](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **KDevelop 4** |
|
||||
| **BBEdit** (14.6+, [说明](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **Monkey Studio IDE** |
|
||||
| **Brackets** (使用 [此插件](https://github.com/polo2ro/firacode-in-brackets)) |
|
||||
| **Chocolat** | **UltraEdit** |
|
||||
| **CLion** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Cloud9** ([说明](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
|
||||
| **Coda 2** |
|
||||
| **CodeLite** |
|
||||
| **CodeRunner** |
|
||||
| **Comma** (在 首选项 > 编辑器 > 字体 中) |
|
||||
| **CotEditor** |
|
||||
| **Eclipse** |
|
||||
| **elementary Code** |
|
||||
| **Geany** (1.37+) |
|
||||
| **gEdit / Pluma** |
|
||||
| **GNOME Builder** |
|
||||
| **Godot** |
|
||||
| **GoormIDE** ([说明](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
|
||||
| **gVim** ([Windows](https://github.com/tonsky/FiraCode/issues/462), [GTK](https://vimhelp.org/options.txt.html#%27guiligatures%27)) |
|
||||
| **IntelliJ IDEA** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Kate, KWrite** |
|
||||
| **KDevelop 5+** |
|
||||
| **Komodo** |
|
||||
| **Leafpad** |
|
||||
| **LibreOffice** |
|
||||
| **LightTable** ([说明](https://github.com/tonsky/FiraCode/wiki/LightTable-instructions)) |
|
||||
| **LINQPad** |
|
||||
| **MacVim** 7.4 或更新版本 ([说明](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
|
||||
| **Mancy** |
|
||||
| **MATLAB** ([说明](https://github.com/tonsky/FiraCode/wiki/MATLAB-for-Windows-Instructions)) |
|
||||
| **Meld** |
|
||||
| **Mousepad** |
|
||||
| **NeoVim-gtk** |
|
||||
| **NetBeans** |
|
||||
| **Notepad** (Windows) |
|
||||
| **Notepad++** ([解决方法](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) |
|
||||
| **Notepad3** ([说明](https://github.com/rizonesoft/Notepad3/issues/361#issuecomment-365977420))|
|
||||
| **Nova** |
|
||||
| **PhpStorm** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **PyCharm** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **QOwnNotes** (21.16.6+) |
|
||||
| **QtCreator** |
|
||||
| **Rider** |
|
||||
| **RStudio** ([说明](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
|
||||
| **RubyMine** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Scratch** |
|
||||
| **Scribus** (1.5.3+) |
|
||||
| **SublimeText** (3146+) |
|
||||
| **Spyder IDE** (仅适用于 Qt5) |
|
||||
| **SuperCollider 3** |
|
||||
| **TeXShop**|
|
||||
| **TextAdept** (Linux, macOS) |
|
||||
| **TextEdit** |
|
||||
| **TextMate 2** |
|
||||
| **VimR** ([说明](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
||||
| **Visual Studio** (2015+, [说明](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
|
||||
| **Visual Studio Code** ([说明](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
|
||||
| **WebStorm** (2016.2+, [说明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Xamarin Studio/Monodevelop** |
|
||||
| **Xcode** (8.0+, 否则 [使用插件](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
||||
| **Xi** |
|
||||
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
|
||||
|
||||
### 终端兼容性列表
|
||||
|
||||
| 支持 | 不支持 |
|
||||
|-------|--------------|
|
||||
| crosh ([说明](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | Alacritty |
|
||||
| Hyper (参见 [#3607](https://github.com/vercel/hyper/issues/3607)) | Cmder |
|
||||
| iTerm 2 | ConEmu |
|
||||
| Kitty | GNOME Terminal |
|
||||
| Konsole | gtkterm ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Mintty | guake ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| QTerminal | LXTerminal ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| st ([补丁](https://st.suckless.org/patches/ligatures/)) | mate-terminal |
|
||||
| Terminal.app | PuTTY |
|
||||
| Termux | rxvt |
|
||||
| Token2Shell | sakura ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Wez’s terminal | Terminator ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Windows Terminal | terminology |
|
||||
| ZOC (macOS) | Windows Console |
|
||||
| | xfce4-terminal ([需求](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| | xterm |
|
||||
| | ZOC (Windows) |
|
||||
|
||||
### 浏览器支持
|
||||
|
||||
```html
|
||||
<!-- HTML -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css">
|
||||
```
|
||||
|
||||
```css
|
||||
/* CSS */
|
||||
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
|
||||
```
|
||||
|
||||
```css
|
||||
/* Specify in CSS */
|
||||
code { font-family: 'Fira Code', monospace; }
|
||||
|
||||
@supports (font-variation-settings: normal) {
|
||||
code { font-family: 'Fira Code VF', monospace; }
|
||||
}
|
||||
```
|
||||
|
||||
- IE 10+, Edge Legacy: 启用 `font-feature-settings: "calt";`
|
||||
- Firefox
|
||||
- Safari
|
||||
- Chromium-based browsers (Chrome, Opera)
|
||||
- ACE
|
||||
- CodeMirror (enable with `font-variant-ligatures: contextual;`)
|
||||
|
||||
### 使用 Fira Code的项目
|
||||
|
||||
- [CodePen](https://codepen.io/)
|
||||
- [Blink Shell](http://www.blink.sh/)
|
||||
- [Klipse](http://app.klipse.tech/)
|
||||
- [IlyaBirman.net](http://ilyabirman.net/)
|
||||
- [EvilMartians.com](https://evilmartians.com/)
|
||||
- [Web Maker](https://webmakerapp.com/)
|
||||
- [FromScratch](https://fromscratch.rocks/)
|
||||
- [PEP20.org](https://pep20.org/)
|
||||
|
||||
### 备选方案
|
||||
|
||||
带连字的免费等宽字体:
|
||||
|
||||
- [Hasklig](https://github.com/i-tu/Hasklig)
|
||||
- [Monoid](http://larsenwork.com/monoid/)
|
||||
- [Fixedsys Excelsior](https://github.com/kika/fixedsys)
|
||||
- [Iosevka](https://be5invis.github.io/Iosevka/)
|
||||
- [DejaVu Sans Code](https://github.com/SSNikolaevich/DejaVuSansCode)
|
||||
- [Victor Mono](https://rubjo.github.io/victor-mono/)
|
||||
- [Cascadia Code](https://github.com/microsoft/cascadia-code)
|
||||
- [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono)
|
||||
|
||||
带连字的付费等宽字体:
|
||||
|
||||
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
|
||||
- [Mono Lisa](https://www.monolisa.dev/)
|
||||
|
||||
### 在本地构建 Fira Code
|
||||
|
||||
如果您想更改 FiraCode.glyphs 并自己构建 OTF / TTF / WOFF 文件,这是我在 macOS 上使用的设置:
|
||||
|
||||
```bash
|
||||
# 安装所有编译需要的工具
|
||||
./script/bootstrap_macos.sh
|
||||
|
||||
# 编译字体文件
|
||||
./script/build.sh
|
||||
|
||||
# 将otf文件安装到 ~/Library/Fonts
|
||||
cp distr/otf/*.otf ~/Library/Fonts
|
||||
```
|
||||
|
||||
或者,您可以使用 Docker 构建 Fira Code:
|
||||
|
||||
```bash
|
||||
# install dependencies in a container and build the font files
|
||||
make
|
||||
|
||||
# package the font files from dist/ into a zip
|
||||
make package
|
||||
```
|
||||
|
||||
如果你想要*永久开启*某个特定的文体集或者字符变种,但你的编辑器有可能不允许你单独开启它们,你可以将你想要的功能作为一个用逗号分隔的列表,通过 `-f / --features` 标志来加入到编译脚本中。<br>默认:无。
|
||||
|
||||
要分隔不同的字体版本的话,你可以用 `-n / --family-name` 标志来指定你所需的字体系列名称。特殊值 'features' 将在默认的系列名称后面添加一个有序的、空格分隔的列表,列表内为已经启用的功能。<br>默认:"Fira Code"
|
||||
|
||||
你也可以用 `-w / --weights` 选项来限制将要被编译的字体的重量。<br>默认:"Light,Regular,Retina,Medium,SemiBold,Bold"
|
||||
|
||||
```bash
|
||||
# 在你本地的shell中
|
||||
./script/build.sh --features "ss02,ss08,ss10,cv03,cv07,cv14" --family-name "Fira Code straight" --weights "Regular,Bold"
|
||||
|
||||
# 或者通过一个docker容器 (创建系列名为:'Fira Code cv01 cv02 cv06 cv31 onum ss01 ss03 ss04 zero')
|
||||
docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "cv01,cv02,cv06,ss01,zero,onum,ss03,ss04,cv31" -n "features"
|
||||
```
|
||||
|
||||
### 制作人员
|
||||
|
||||
- 作者: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky)
|
||||
- 基于此项目: [Fira Mono](https://github.com/mozilla/Fira)
|
||||
- 灵感来源: [Hasklig](https://github.com/i-tu/Hasklig)
|
||||
- 翻译:墨抒颖[@moshuying](https://github.com/moshuying)
|
291
README_JA.md
Normal file
|
@ -0,0 +1,291 @@
|
|||
## Fira Code: プログラミング合字のフリー等幅フォント
|
||||
|
||||
![Fira Code](./extras/logo.svg)
|
||||
|
||||
[English](./README.md) | [Español](./LEEME.md) | [简体中文](./README_CN.md) で読む
|
||||
|
||||
### 問題点
|
||||
|
||||
プログラマは多くの記号を使用し、しばしば数文字で符号化されます。人間の脳にとって`->`、`<=`、`:=`といったシーケンスは、たとえ画面上で 2 文字や 3 文字になったとしても、単一の論理トークンである。あなたの目は、複数の文字をスキャンし、解析し、1 つの論理的なものに結合するために、ゼロではない量のエネルギーを費やしているのです。理想を言えば、すべてのプログラミング言語が演算子のための本格的なユニコード記号を備えて設計されるべきですが、まだそうではありません。
|
||||
|
||||
### 解決法
|
||||
|
||||
Fira Code は、一般的なプログラミングの複数文字の組み合わせのための合字を含む無料の等幅フォントです。これは単にフォントのレンダリング機能であり、基礎となるコードは ASCII 互換のままです。これによりコードをより速く読み、理解することができます。`...` や `//` のような頻度の高い文字列は、合字によって間隔を修正することができます。
|
||||
|
||||
### ダウンロードとインストール
|
||||
|
||||
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB" src="./extras/download.png" width="520"></a>
|
||||
|
||||
次は:
|
||||
|
||||
- [インストール方法](https://github.com/tonsky/FiraCode/wiki)
|
||||
- [トラブルシューティング](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
|
||||
- [ニュースとアップデート](https://twitter.com/FiraCode)
|
||||
|
||||
### スポンサー
|
||||
|
||||
Fira Code は個人的なフリータイムのプロジェクトで、資金はなく膨大な[機能リクエストバックログ](https://github.com/tonsky/FiraCode/issues)を抱えています。もし気に入っていただけたなら、[GitHub Sponsors](https://github.com/sponsors/tonsky) または [Patreon](https://patreon.com/tonsky) で開発をサポートすることを検討してください。どんな支援でもかまいません!
|
||||
|
||||
大いに感謝します:
|
||||
|
||||
<table>
|
||||
<td align="center">
|
||||
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=firacode&utm_source=github">
|
||||
<div>
|
||||
<img src="https://user-images.githubusercontent.com/629429/151508669-efb4c3b3-8fe3-45eb-8e47-e9510b5f0af1.svg" width="290" alt="WorkOS">
|
||||
</div>
|
||||
<b>Your app, enterprise-ready.</b>
|
||||
<div>
|
||||
<sub>Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months.</sup>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</table>
|
||||
|
||||
### 何が入っているのでしょうか?
|
||||
|
||||
左: Fira Code で描画される合字。右: 合字のない同じ文字列。
|
||||
|
||||
<img src="./extras/ligatures.png" width="754">
|
||||
|
||||
Fira Code には、膨大な種類の矢印が用意されています。さらに、好きな長さにしたり、始点・中間・終点の断片を自由に組み合わせたりすることができます!
|
||||
|
||||
<img src="./extras/arrows.png" width="754">
|
||||
|
||||
Fira Code は合字だけではありません。句読点や頻度の高い文字ペアについても、いくつかの微調整が行われています。
|
||||
|
||||
<img src="./extras/typographics.png" width="754">
|
||||
|
||||
Fira Code には、数種類の文字バリエーション(`cv01`、`cv02` など)、スタイルセット(`ss01`、`ss02` など)、その他のフォント機能(`zero`、`onum`、`calt` など)があり、誰もが自分に最適なものを選ぶことができます。[有効にする方法](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
|
||||
|
||||
<img src="./extras/character_variants.png" width="754">
|
||||
|
||||
一部の合字は、スタイルセット/文字バリアントを使用して変更または有効にすることができます:
|
||||
|
||||
<img src="./extras/ligature_variants.png" width="754">
|
||||
|
||||
プログラミング用フォントである Fira Code は、ASCII/ボックスドローイング、パワーライン、その他の形式のコンソール UI に素晴らしい対応をしています:
|
||||
|
||||
<img src="./extras/console.png" width="754">
|
||||
|
||||
Fira Code は、プログレスバーを描画するための専用グリフを提供する最初のプログラミングフォントです:
|
||||
|
||||
<img src="./extras/progress.png" width="754">
|
||||
|
||||
動作すると:
|
||||
|
||||
<img src="./extras/progress.gif" width="560">
|
||||
|
||||
より多くのプログラミング用フォントがこの規約を採用し、独自のバージョンを出荷することを望んでいます。
|
||||
|
||||
ユニコード対応により、Fira Code は数学の記述に最適です:
|
||||
|
||||
<img src="./extras/math.png" width="754">
|
||||
|
||||
### どのように見えるのでしょうか?
|
||||
|
||||
<img src="./extras/samples.png" width="754">
|
||||
<img src="./extras/samples2.png" width="754">
|
||||
|
||||
### エディタ互換性リスト
|
||||
|
||||
| サポート | 非サポート |
|
||||
|-------|----------------|
|
||||
| **Arduino IDE** (2.0+,same instructions as [vscode](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) | **Adobe Dreamweaver** |
|
||||
| **Abricotine** | **Delphi IDE** |
|
||||
| **Android Studio** (2.3+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | Standalone **Emacs** ([回避方法](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
|
||||
| **Anjuta** (unless at the EOF) | **IDLE** |
|
||||
| **AppCode** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | **KDevelop 4** |
|
||||
| **Atom** 1.1 or newer ([説明](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **Monkey Studio IDE** |
|
||||
| **BBEdit** (14.6+ [説明](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **UltraEdit** (Windows) |
|
||||
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) |
|
||||
| **Chocolat** |
|
||||
| **CLion** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Cloud9** ([説明](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
|
||||
| **Coda 2** |
|
||||
| **CodeLite** |
|
||||
| **CodeRunner** |
|
||||
| **Comma** (Under: Preferences > Editor > Font) |
|
||||
| **CotEditor** |
|
||||
| **Eclipse** |
|
||||
| **elementary Code** |
|
||||
| **Geany** (1.37+) |
|
||||
| **gEdit / Pluma** |
|
||||
| **GNOME Builder** |
|
||||
| **Godot** |
|
||||
| **GoormIDE** ([説明](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
|
||||
| **gVim** ([Windows](https://github.com/tonsky/FiraCode/issues/462), [GTK](https://vimhelp.org/options.txt.html#%27guiligatures%27)) |
|
||||
| **IntelliJ IDEA** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Kate, KWrite** |
|
||||
| **KDevelop 5+** |
|
||||
| **Komodo** |
|
||||
| **Leafpad** |
|
||||
| **LibreOffice** |
|
||||
| **LightTable** ([説明](https://github.com/tonsky/FiraCode/wiki/LightTable-instructions)) |
|
||||
| **LINQPad** |
|
||||
| **MacVim** 7.4 or newer ([説明](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
|
||||
| **Mancy** |
|
||||
| **MATLAB** ([説明](https://github.com/tonsky/FiraCode/wiki/MATLAB-for-Windows-Instructions)) |
|
||||
| **Meld** |
|
||||
| **Mousepad** |
|
||||
| **NeoVim-gtk** |
|
||||
| **NetBeans** |
|
||||
| **Notepad** (Windows) |
|
||||
| **Notepad++** ([回避方法](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) |
|
||||
| **Notepad3** ([説明](https://github.com/rizonesoft/Notepad3/issues/361#issuecomment-365977420))|
|
||||
| **Nova** |
|
||||
| **PhpStorm** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **PyCharm** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **QOwnNotes** (21.16.6+) |
|
||||
| **QtCreator** |
|
||||
| **Rider** |
|
||||
| **RStudio** ([説明](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
|
||||
| **RubyMine** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Scratch** |
|
||||
| **Scribus** (1.5.3+) |
|
||||
| **SublimeText** (3146+) |
|
||||
| **Spyder IDE** (Qt5 のみ) |
|
||||
| **SuperCollider 3** |
|
||||
| **TeXShop**|
|
||||
| **TextAdept** (Linux, macOS) |
|
||||
| **TextEdit** |
|
||||
| **TextMate 2** |
|
||||
| **UltraEdit (UEX)** (Linux) |
|
||||
| **VimR** ([説明](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
||||
| **Visual Studio** (2015+, [説明](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
|
||||
| **Visual Studio Code** ([説明](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
|
||||
| **WebStorm** (2016.2+, [説明](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
||||
| **Xamarin Studio/Monodevelop** |
|
||||
| **Xcode** (8.0+, それ以外は[プラグイン付き](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
||||
| **Xi** |
|
||||
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
|
||||
|
||||
### ターミナル互換性リスト
|
||||
|
||||
| サポート | 非サポート |
|
||||
|-------|--------------|
|
||||
| crosh ([説明](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | Alacritty |
|
||||
| Hyper ([#3607](https://github.com/vercel/hyper/issues/3607) を確認) | Asbru Connection Manager |
|
||||
| iTerm 2 | Cmder |
|
||||
| Kitty | ConEmu |
|
||||
| Konsole | GNOME Terminal |
|
||||
| Mintty | gtkterm ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| QTerminal | guake ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| st ([パッチ](https://st.suckless.org/patches/ligatures/)) | LXTerminal ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Tabby | mate-terminal |
|
||||
| Terminal.app | PuTTY |
|
||||
| Termux | rxvt |
|
||||
| Token2Shell | sakura ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| Wez’s terminal | SecureCRT
|
||||
| Windows Terminal | Terminator ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| ZOC (macOS) | terminology |
|
||||
| | Tilix |
|
||||
| | Windows Console |
|
||||
| | xfce4-terminal ([チケット](https://gitlab.gnome.org/GNOME/vte/-/issues/1661)) |
|
||||
| | xterm |
|
||||
| | ZOC (Windows) |
|
||||
|
||||
### ブラウザサポート
|
||||
|
||||
```html
|
||||
<!-- HTML -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css">
|
||||
```
|
||||
|
||||
```css
|
||||
/* CSS */
|
||||
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
|
||||
```
|
||||
|
||||
```css
|
||||
/* Specify in CSS */
|
||||
code { font-family: 'Fira Code', monospace; }
|
||||
|
||||
@supports (font-variation-settings: normal) {
|
||||
code { font-family: 'Fira Code VF', monospace; }
|
||||
}
|
||||
```
|
||||
|
||||
- IE 10+, Edge Legacy: `font-feature-settings: "calt";` で有効にします
|
||||
- Firefox
|
||||
- Safari
|
||||
- Chromium-based browsers (Chrome, Opera)
|
||||
- ACE
|
||||
- CodeMirror (`font-variant-ligatures: contextual;` で有効にします)
|
||||
|
||||
### Fira Code を使用したプロジェクト
|
||||
|
||||
- [CodePen](https://codepen.io/)
|
||||
- [Blink Shell](http://www.blink.sh/)
|
||||
- [Klipse](http://app.klipse.tech/)
|
||||
- [IlyaBirman.net](http://ilyabirman.net/)
|
||||
- [EvilMartians.com](https://evilmartians.com/)
|
||||
- [Web Maker](https://webmakerapp.com/)
|
||||
- [FromScratch](https://fromscratch.rocks/)
|
||||
- [PEP20.org](https://pep20.org/)
|
||||
|
||||
### 代替品
|
||||
|
||||
合字のある無料等幅フォント:
|
||||
|
||||
- [Hasklig](https://github.com/i-tu/Hasklig)
|
||||
- [Monoid](http://larsenwork.com/monoid/)
|
||||
- [Fixedsys Excelsior](https://github.com/kika/fixedsys)
|
||||
- [Iosevka](https://be5invis.github.io/Iosevka/)
|
||||
- [DejaVu Sans Code](https://github.com/SSNikolaevich/DejaVuSansCode)
|
||||
- [Victor Mono](https://rubjo.github.io/victor-mono/)
|
||||
- [Cascadia Code](https://github.com/microsoft/cascadia-code)
|
||||
- [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono)
|
||||
|
||||
合字のある有償等幅フォント:
|
||||
|
||||
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
|
||||
- [Mono Lisa](https://www.monolisa.dev/)
|
||||
|
||||
### Fira Code をローカルでビルドする
|
||||
|
||||
FiraCode.glyphs を変更し、OTF/TTF/WOFF ファイルを自分でビルドしたい場合、私が macOS で使用している設定は次のとおりです:
|
||||
|
||||
```bash
|
||||
# 必要なビルドツールをすべてインストール
|
||||
./script/bootstrap_macos.sh
|
||||
|
||||
# フォントファイルのビルド
|
||||
./script/build.sh
|
||||
|
||||
# OTF を ~/Library/Fonts にインストール
|
||||
cp distr/otf/*.otf ~/Library/Fonts
|
||||
```
|
||||
|
||||
または、Docker を使用して Fira Code を構築することもできます:
|
||||
|
||||
```bash
|
||||
# コンテナ内に依存関係をインストールし、フォントファイルをビルド
|
||||
make
|
||||
|
||||
# dist/ のフォントファイルを zip にまとめる
|
||||
make package
|
||||
```
|
||||
|
||||
特定のスタイルセットやキャラクタバリエーションを *永久的に* 有効にしたい場合、おそらくあなたの選んだエディタではこれらを個別に切り替えることができないため、`-f / --features` フラグでビルドスクリプトにカンマ区切りリストとして希望の機能を提供することができます。<br>デフォルト: なし。
|
||||
|
||||
異なるバージョンのフォントを分けるために、`-n / --family-name` フラグで希望のフォントファミリー名を指定することができます。特別な値 'features' を指定すると、有効な機能をソートしてスペースで区切ったリストをデフォルトのファミリー名に追加します。<br>デフォルト: "Fira Code"
|
||||
|
||||
また、`-w / --weights` オプションで、作成されるフォントのウェイトを制限することができます。<br>デフォルト: "Light,Regular,Retina,Medium,SemiBold,Bold"
|
||||
|
||||
```bash
|
||||
# ローカルでシェル内
|
||||
./script/build.sh --features "ss02,ss08,ss10,cv03,cv07,cv14" --family-name "Fira Code straight" --weights "Regular,Bold"
|
||||
|
||||
# または Docker コンテナ経由(ファミリー名 'Fira Code cv01 cv02 cv06 cv31 onum ss01 ss03 ss04 zero' を作成)
|
||||
docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "cv01,cv02,cv06,ss01,zero,onum,ss03,ss04,cv31" -n "features"
|
||||
|
||||
# Git for Windows の Git Bash やその他の MSYS2 ベースのシェルで使用する場合は、パス変換を無効にする必要があるかもしれません
|
||||
MSYS2_ARG_CONV_EXCL="*" docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "ss02,ss03,ss04,ss05,ss06,ss07"
|
||||
```
|
||||
|
||||
### クレジット
|
||||
|
||||
- 作者: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky)
|
||||
- 基にした: [Fira Mono](https://github.com/mozilla/Fira)
|
||||
- インスパイアされた: [Hasklig](https://github.com/i-tu/Hasklig)
|
|
@ -20,12 +20,10 @@
|
|||
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
|
||||
code (slurp file)
|
||||
[_ notes code'] (re-matches #"(?s)#([^\n]+)\n(.*)" code)
|
||||
feature (if notes
|
||||
{:code (str/trim code')
|
||||
:name name
|
||||
:notes (str/trim notes)}
|
||||
{:code (str/trim code)
|
||||
:name name})]
|
||||
feature (cond-> {:code (str/trim (or code' code))
|
||||
:name name}
|
||||
notes
|
||||
(assoc :notes (str/trim notes)))]
|
||||
(glyphs/set-feature font name feature)))
|
||||
|
||||
|
||||
|
|
72
clojure/user.clj
Normal file
|
@ -0,0 +1,72 @@
|
|||
(ns user
|
||||
(:require
|
||||
[clojure.core.server :as server]
|
||||
[clojure.java.io :as io]
|
||||
[clojure.tools.namespace.repl :as ns]
|
||||
[clojure.tools.namespace.track :as track]))
|
||||
|
||||
(ns/disable-reload!)
|
||||
|
||||
(ns/set-refresh-dirs "clojure")
|
||||
|
||||
(def *reloaded
|
||||
(atom nil))
|
||||
|
||||
(add-watch #'ns/refresh-tracker ::watch
|
||||
(fn [_ _ old new]
|
||||
(when (empty? (::track/load new))
|
||||
(reset! *reloaded (::track/load old)))))
|
||||
|
||||
(defn after-reload []
|
||||
(let [cnt (count @*reloaded)]
|
||||
(str "Reloaded " cnt " namespace" (when (> cnt 1) "s"))))
|
||||
|
||||
(defn reload []
|
||||
(set! *warn-on-reflection* true)
|
||||
; (set! *unchecked-math* :warn-on-boxed)
|
||||
(let [res (ns/refresh :after 'user/after-reload)]
|
||||
(if (instance? Throwable res)
|
||||
(throw res)
|
||||
res)))
|
||||
|
||||
(def p-lock
|
||||
(Object.))
|
||||
|
||||
(defn p-pos []
|
||||
(let [trace (->> (Thread/currentThread)
|
||||
(.getStackTrace)
|
||||
(seq))
|
||||
el ^StackTraceElement (nth trace 4)]
|
||||
(str "[" (clojure.lang.Compiler/demunge (.getClassName el)) " " (.getFileName el) ":" (.getLineNumber el) "]")))
|
||||
|
||||
(defn p-impl [position form res]
|
||||
(let [form (clojure.walk/postwalk
|
||||
(fn [form]
|
||||
(if (and
|
||||
(list? form)
|
||||
(= 'user/p-impl (first form)))
|
||||
(clojure.lang.TaggedLiteral/create 'p (nth form 3))
|
||||
form))
|
||||
form)]
|
||||
(locking p-lock
|
||||
(println (str position " #p " form " => " (pr-str res))))
|
||||
res))
|
||||
|
||||
(defn p [form]
|
||||
`(p-impl (p-pos) '~form ~form))
|
||||
|
||||
(defn -main [& args]
|
||||
;; setup repl
|
||||
(let [args (apply array-map args)
|
||||
port (or
|
||||
(some-> (get args "--port") parse-long)
|
||||
(+ 1024 (rand-int 64512)))
|
||||
file (io/file ".repl-port")]
|
||||
(println "Started Server Socket REPL on port" port)
|
||||
(spit file port)
|
||||
(.deleteOnExit file)
|
||||
(server/start-server
|
||||
{:name "repl"
|
||||
:port port
|
||||
:accept 'clojure.core.server/repl
|
||||
:server-daemon false})))
|
12
deps.edn
|
@ -1,9 +1,5 @@
|
|||
{:paths ["clojure"]
|
||||
:deps {org.clojure/clojure {:mvn/version "1.10.1"}
|
||||
org.flatland/ordered {:mvn/version "1.5.7"}
|
||||
fipp/fipp {:mvn/version "0.6.18"}}
|
||||
:aliases {
|
||||
:nrepl {
|
||||
:extra-deps {
|
||||
nrepl/nrepl {:mvn/version "0.8.3"}
|
||||
}}}}
|
||||
:deps {org.clojure/clojure {:mvn/version "1.11.1"}
|
||||
org.flatland/ordered {:mvn/version "1.5.7"}
|
||||
fipp/fipp {:mvn/version "0.6.18"}
|
||||
org.clojure/tools.namespace {:mvn/version "1.3.0"}}}
|
||||
|
|
|
@ -155,14 +155,11 @@ Additionally, if a Color Scheme is selected:
|
|||
4. Select Fira Code as "Primary font" under Settings → Editor → Color Scheme → Color Scheme Font
|
||||
|
||||
|
||||
BBEdit, TextWrangler
|
||||
--------------------
|
||||
BBEdit
|
||||
------
|
||||
|
||||
Run in your terminal:
|
||||
|
||||
defaults write com.barebones.bbedit "EnableFontLigatures_Fira Code" -bool YES
|
||||
|
||||
Source: https://www.barebones.com/support/bbedit/ExpertPreferences.html
|
||||
1. Install FiraCode as per the [macOS installation instructions](https://github.com/tonsky/FiraCode/wiki/Installing#macos)
|
||||
2. Open BBEdit preferences, Editor Defaults, assign Fira Code as the Default font
|
||||
|
||||
|
||||
Brackets
|
||||
|
@ -476,7 +473,7 @@ In a workspace:
|
|||
font-family: 'Fira Code';
|
||||
}
|
||||
|
||||
4. Click Aplly or OK
|
||||
4. Click Apply or OK
|
||||
5. Happy coding!
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Light.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Light.woff") format("woff");
|
||||
url('woff/FiraCode-Light.woff') format('woff');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Regular.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Regular.woff") format("woff");
|
||||
url('woff/FiraCode-Regular.woff') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Medium.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Medium.woff") format("woff");
|
||||
url('woff/FiraCode-Medium.woff') format('woff');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -25,7 +25,7 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-SemiBold.woff2') format('woff2'),
|
||||
url("woff/FiraCode-SemiBold.woff") format("woff");
|
||||
url('woff/FiraCode-SemiBold.woff') format('woff');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -33,7 +33,7 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Bold.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Bold.woff") format("woff");
|
||||
url('woff/FiraCode-Bold.woff') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -41,8 +41,8 @@
|
|||
@font-face {
|
||||
font-family: 'Fira Code VF';
|
||||
src: url('woff2/FiraCode-VF.woff2') format('woff2-variations'),
|
||||
url('woff/FiraCode-VF.woff') format('woff-variations');
|
||||
url('woff/FiraCode-VF.woff') format('woff-variations');
|
||||
/* font-weight requires a range: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide#Using_a_variable_font_font-face_changes */
|
||||
font-weight: 300 700;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
|
BIN
extras/arrows_es.png
Normal file
After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 46 KiB |
BIN
extras/character_variants_es.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
extras/console_es.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
extras/download_es.png
Normal file
After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 62 KiB |
BIN
extras/ligature_variants_es.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
extras/ligatures_es.png
Normal file
After Width: | Height: | Size: 259 KiB |
BIN
extras/math_es.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
extras/progress_es.gif
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
extras/sponsor_es.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
extras/typographics_es.png
Normal file
After Width: | Height: | Size: 86 KiB |
|
@ -1,4 +1,4 @@
|
|||
### Logical conjuntion/disjunction #738
|
||||
### Logical conjunction/disjunction #738
|
||||
|
||||
lookup slash_backslash {
|
||||
ignore sub @NotSpace slash' backslash;
|
||||
|
|
12
features/cv01.fea
Normal file
|
@ -0,0 +1,12 @@
|
|||
# alternate lowercase a
|
||||
|
||||
sub a by a.cv01;
|
||||
sub aacute by aacute.cv01;
|
||||
sub abreve by abreve.cv01;
|
||||
sub acircumflex by acircumflex.cv01;
|
||||
sub adieresis by adieresis.cv01;
|
||||
sub agrave by agrave.cv01;
|
||||
sub amacron by amacron.cv01;
|
||||
sub aogonek by aogonek.cv01;
|
||||
sub aring by aring.cv01;
|
||||
sub atilde by atilde.cv01;
|
7
features/cv02.fea
Normal file
|
@ -0,0 +1,7 @@
|
|||
# single storey lowercase g
|
||||
|
||||
sub g by g.cv02;
|
||||
sub gbreve by gbreve.cv02;
|
||||
sub gcircumflex by gcircumflex.cv02;
|
||||
sub gcommaaccent by gcommaaccent.cv02;
|
||||
sub gdotaccent by gdotaccent.cv02;
|
13
features/cv03.fea
Normal file
|
@ -0,0 +1,13 @@
|
|||
# lowercase I without any horizontal decorations
|
||||
|
||||
sub i by i.cv03;
|
||||
sub idotless by idotless.cv03;
|
||||
sub iacute by iacute.cv03;
|
||||
sub ibreve by ibreve.cv03;
|
||||
sub icircumflex by icircumflex.cv03;
|
||||
sub idieresis by idieresis.cv03;
|
||||
sub idotaccent by idotaccent.cv03;
|
||||
sub igrave by igrave.cv03;
|
||||
sub imacron by imacron.cv03;
|
||||
sub iogonek by iogonek.cv03;
|
||||
sub itilde by itilde.cv03;
|
13
features/cv04.fea
Normal file
|
@ -0,0 +1,13 @@
|
|||
# lowercase I with horizontal left line at the top
|
||||
|
||||
sub i by i.cv04;
|
||||
sub idotless by idotless.cv04;
|
||||
sub iacute by iacute.cv04;
|
||||
sub ibreve by ibreve.cv04;
|
||||
sub icircumflex by icircumflex.cv04;
|
||||
sub idieresis by idieresis.cv04;
|
||||
sub idotaccent by idotaccent.cv04;
|
||||
sub igrave by igrave.cv04;
|
||||
sub imacron by imacron.cv04;
|
||||
sub iogonek by iogonek.cv04;
|
||||
sub itilde by itilde.cv04;
|
13
features/cv05.fea
Normal file
|
@ -0,0 +1,13 @@
|
|||
# lowercase I with horizontal left line at the top and right line at the bottom
|
||||
|
||||
sub i by i.cv05;
|
||||
sub idotless by idotless.cv05;
|
||||
sub iacute by iacute.cv05;
|
||||
sub ibreve by ibreve.cv05;
|
||||
sub icircumflex by icircumflex.cv05;
|
||||
sub idieresis by idieresis.cv05;
|
||||
sub idotaccent by idotaccent.cv05;
|
||||
sub igrave by igrave.cv05;
|
||||
sub imacron by imacron.cv05;
|
||||
sub iogonek by iogonek.cv05;
|
||||
sub itilde by itilde.cv05;
|
13
features/cv06.fea
Normal file
|
@ -0,0 +1,13 @@
|
|||
# lowercase I with horizontal left line at the top and curved right hook at the bottom
|
||||
|
||||
sub i by i.cv06;
|
||||
sub idotless by idotless.cv06;
|
||||
sub iacute by iacute.cv06;
|
||||
sub ibreve by ibreve.cv06;
|
||||
sub icircumflex by icircumflex.cv06;
|
||||
sub idieresis by idieresis.cv06;
|
||||
sub idotaccent by idotaccent.cv06;
|
||||
sub igrave by igrave.cv06;
|
||||
sub imacron by imacron.cv06;
|
||||
sub iogonek by iogonek.cv06;
|
||||
sub itilde by itilde.cv06;
|
8
features/cv07.fea
Normal file
|
@ -0,0 +1,8 @@
|
|||
# lowercase L without any horizontal decorations
|
||||
|
||||
sub l by l.cv07;
|
||||
sub lacute by lacute.cv07;
|
||||
sub lcaron by lcaron.cv07;
|
||||
sub lcommaaccent by lcommaaccent.cv07;
|
||||
sub ldot by ldot.cv07;
|
||||
sub lslash by lslash.cv07;
|
8
features/cv08.fea
Normal file
|
@ -0,0 +1,8 @@
|
|||
# lowercase L with horizontal left line at the top
|
||||
|
||||
sub l by l.cv08;
|
||||
sub lacute by lacute.cv08;
|
||||
sub lcaron by lcaron.cv08;
|
||||
sub lcommaaccent by lcommaaccent.cv08;
|
||||
sub ldot by ldot.cv08;
|
||||
sub lslash by lslash.cv08;
|
8
features/cv09.fea
Normal file
|
@ -0,0 +1,8 @@
|
|||
# lowercase L with horizontal left line at the top and right line at the bottom
|
||||
|
||||
sub l by l.cv09;
|
||||
sub lacute by lacute.cv09;
|
||||
sub lcaron by lcaron.cv09;
|
||||
sub lcommaaccent by lcommaaccent.cv09;
|
||||
sub ldot by ldot.cv09;
|
||||
sub lslash by lslash.cv09;
|
8
features/cv10.fea
Normal file
|
@ -0,0 +1,8 @@
|
|||
# lowercase L with horizontal left line at the top and horizontal base
|
||||
|
||||
sub l by l.cv10;
|
||||
sub lacute by lacute.cv10;
|
||||
sub lcaron by lcaron.cv10;
|
||||
sub lcommaaccent by lcommaaccent.cv10;
|
||||
sub ldot by ldot.cv10;
|
||||
sub lslash by lslash.cv10;
|
4
features/cv11.fea
Normal file
|
@ -0,0 +1,4 @@
|
|||
# zero without anything inside
|
||||
|
||||
sub zero by zero.cv11;
|
||||
sub zero.tosf by zero.tosf.cv11;
|
4
features/cv12.fea
Normal file
|
@ -0,0 +1,4 @@
|
|||
# zero with a backslash inside
|
||||
|
||||
sub zero by zero.cv12;
|
||||
sub zero.tosf by zero.tosf.cv12;
|
4
features/cv13.fea
Normal file
|
@ -0,0 +1,4 @@
|
|||
# zero with a vertical line inside
|
||||
|
||||
sub zero by zero.cv13;
|
||||
sub zero.tosf by zero.tosf.cv13;
|
8
features/cv14.fea
Normal file
|
@ -0,0 +1,8 @@
|
|||
# 3 with straight lines for the top half
|
||||
|
||||
sub three by three.cv14;
|
||||
sub three.tosf by three.tosf.cv14;
|
||||
sub threeinferior by threeinferior.cv14;
|
||||
sub three.dnom by three.dnom.cv14;
|
||||
sub three.numr by three.numr.cv14;
|
||||
sub threesuperior by threesuperior.cv14;
|
|
@ -1,4 +1,4 @@
|
|||
# Name: Top-aligned asterisk
|
||||
# Top-aligned asterisk
|
||||
|
||||
sub [asterisk asterisk.lc] by asterisk.cv15;
|
||||
sub [asteriskmath asteriskmath.lc] by asteriskmath.cv15;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: Hexagonal asterisk
|
||||
# Hexagonal asterisk
|
||||
|
||||
sub [asterisk asterisk.lc asterisk.cv15 asteriskmath asteriskmath.lc asteriskmath.cv15]
|
||||
by [asteriskmath asteriskmath.lc asteriskmath.cv15 asterisk asterisk.lc asterisk.cv15];
|
||||
|
|
3
features/cv17.fea
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Top-aligned tilde
|
||||
|
||||
sub asciitilde by asciitilde.cv17;
|
5
features/cv18.fea
Normal file
|
@ -0,0 +1,5 @@
|
|||
# percent sign with dots instead of hollow circles
|
||||
|
||||
sub percent by percent.cv18;
|
||||
sub perthousand by perthousand.cv18;
|
||||
sub percent_percent.liga by percent_percent.liga.cv18;
|
|
@ -1,3 +1,3 @@
|
|||
# Name: Less Than + Equal with horizontal bar
|
||||
# Less Than + Equal with horizontal bar
|
||||
|
||||
sub less_equal.liga by less_equal.ss02;
|
|
@ -1,4 +1,4 @@
|
|||
# Name: Less Than + Equal as an arrow
|
||||
# Less Than + Equal as an arrow
|
||||
|
||||
lookup less_equal_cv20 {
|
||||
sub less_equal_start.seq less_equal.liga' by equal_end.seq;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: =<
|
||||
# =<
|
||||
|
||||
lookup equal_less_cv21 {
|
||||
ignore sub equal equal' less;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: =< with horizontal bar
|
||||
# =< with horizontal bar
|
||||
|
||||
lookup equal_less_cv22 {
|
||||
ignore sub equal equal' less;
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Name: >= with horizontal bar
|
||||
# >= with horizontal bar
|
||||
|
||||
sub greater_equal.liga by greater_equal.ss02;
|
|
@ -1,4 +1,4 @@
|
|||
# Name: /= as not equal
|
||||
# /= as not equal
|
||||
|
||||
lookup slash_equal_as_not_equal {
|
||||
sub slash.spacer equal_end.seq' by exclam_equal.liga;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Name: .- as ligature
|
||||
# .- as ligature
|
||||
|
||||
lookup period_hyphen {
|
||||
ignore sub period period' hyphen;
|
||||
ignore sub period' hyphen hyphen;
|
||||
sub period.spacer hyphen' by period_hyphen.cv32;
|
||||
sub period.spacer hyphen' by period_hyphen.cv25;
|
||||
sub period' hyphen by period.spacer;
|
||||
} period_hyphen;
|
||||
} period_hyphen;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: :- as ligature
|
||||
# :- as ligature
|
||||
|
||||
lookup colon_hyphen {
|
||||
ignore sub colon colon' hyphen;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: [] as ligature
|
||||
# [] as ligature
|
||||
|
||||
lookup bracketleft_bracketright {
|
||||
sub bracketleft.spacer bracketright' by bracketleft_bracketright.cv27;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Name: {. .} as ligature
|
||||
# {. .} as ligature
|
||||
|
||||
sub braceleft period' by bullet;
|
||||
sub period' braceright by bullet;
|
5
features/cv29.fea
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Rounded curly braces {}
|
||||
|
||||
sub braceleft by braceleft.cv29;
|
||||
sub braceright by braceright.cv29;
|
||||
sub numbersign_braceleft.liga by numbersign_braceleft.liga.cv29;
|
18
features/cv30.fea
Normal file
|
@ -0,0 +1,18 @@
|
|||
# longer pipe symbol
|
||||
|
||||
sub bar by bar.cv30;
|
||||
sub bar_bar.liga by bar_bar.liga.cv30;
|
||||
sub bar_bar_bar.liga by bar_bar_bar.liga.cv30;
|
||||
sub bar_bar_equal_middle.seq by bar_bar_equal_middle.seq.cv30;
|
||||
sub bar_equal_middle.seq by bar_equal_middle.seq.cv30;
|
||||
sub bar_bar_equal_end.seq by bar_bar_equal_end.seq.cv30;
|
||||
sub bar_bar_equal_start.seq by bar_bar_equal_start.seq.cv30;
|
||||
sub bar_bar_hyphen_middle.seq by bar_bar_hyphen_middle.seq.cv30;
|
||||
sub bar_hyphen_middle.seq by bar_hyphen_middle.seq.cv30;
|
||||
sub bar_bar_hyphen_end.seq by bar_bar_hyphen_end.seq.cv30;
|
||||
sub bar_bar_hyphen_start.seq by bar_bar_hyphen_start.seq.cv30;
|
||||
sub bar_equal_end.seq by bar_equal_end.seq.cv30;
|
||||
sub bar_equal_start.seq by bar_equal_start.seq.cv30;
|
||||
sub bar_hyphen_end.seq by bar_hyphen_end.seq.cv30;
|
||||
sub bar_hyphen_start.seq by bar_hyphen_start.seq.cv30;
|
||||
sub bar_underscore_middle.seq by bar_underscore_middle.seq.cv30;
|
4
features/cv31.fea
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Circular parentheses
|
||||
|
||||
sub parenleft by parenleft.cv31;
|
||||
sub parenright by parenright.cv31;
|
|
@ -1,8 +1,8 @@
|
|||
# Name: .= as ligature
|
||||
# .= as ligature
|
||||
|
||||
lookup period_equal {
|
||||
ignore sub period period' equal;
|
||||
ignore sub period' equal equal;
|
||||
sub period.spacer equal' by period_equal.cv25;
|
||||
sub period.spacer equal' by period_equal.cv32;
|
||||
sub period' equal by period.spacer;
|
||||
} period_equal;
|
||||
} period_equal;
|
||||
|
|
4
features/zero.fea
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Zero with a dot inside
|
||||
|
||||
sub zero by zero.zero;
|
||||
sub zero.tosf by zero.tosf.zero;
|
|
@ -53,7 +53,7 @@ Fontbakery version: 0.7.1
|
|||
<summary>🍞 <b>PASS:</b> Check METADATA.pb parse correctly. </summary>
|
||||
|
||||
* [com.google.fonts/check/metadata/parses](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/parses)
|
||||
* 🍞 **PASS** METADATA.pb parsed successfuly.
|
||||
* 🍞 **PASS** METADATA.pb parsed successfully.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -331,7 +331,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -564,7 +564,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -703,7 +703,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<details>
|
||||
<summary>🍞 <b>PASS:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 🍞 **PASS** Font styles are named canonically.
|
||||
|
||||
</details>
|
||||
|
@ -777,7 +777,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Check name table: POSTSCRIPT_NAME entries. </summary>
|
||||
|
||||
* [com.google.fonts/check/name/postscriptname](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/postscriptname)
|
||||
* 🍞 **PASS** POSTCRIPT_NAME entries are all good.
|
||||
* 🍞 **PASS** POSTSCRIPT_NAME entries are all good.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -25,7 +25,7 @@ Fontbakery version: 0.7.1
|
|||
<summary>🍞 <b>PASS:</b> Fonts have equal numbers of glyphs?</summary>
|
||||
|
||||
* [com.google.fonts/check/family/equal_numbers_of_glyphs](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/equal_numbers_of_glyphs)
|
||||
* 🍞 **PASS** All font files in this family have an equal total ammount of glyphs.
|
||||
* 🍞 **PASS** All font files in this family have an equal total amount of glyphs.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -261,7 +261,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
<summary>⚠ <b>WARN:</b> Check if each glyph has the recommended amount of contours.</summary>
|
||||
|
||||
* [com.google.fonts/check/contour_count](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/contour_count)
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
|
||||
The following glyphs do not have the recommended number of contours:
|
||||
|
||||
|
@ -491,7 +491,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
<details>
|
||||
<summary>💤 <b>SKIP:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: font_metadata
|
||||
|
||||
</details>
|
||||
|
@ -503,7 +503,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -792,7 +792,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -858,7 +858,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Check name table: POSTSCRIPT_NAME entries. </summary>
|
||||
|
||||
* [com.google.fonts/check/name/postscriptname](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/postscriptname)
|
||||
* 🍞 **PASS** POSTCRIPT_NAME entries are all good.
|
||||
* 🍞 **PASS** POSTSCRIPT_NAME entries are all good.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -25,7 +25,7 @@ Fontbakery version: 0.7.1
|
|||
<summary>🍞 <b>PASS:</b> Fonts have equal numbers of glyphs?</summary>
|
||||
|
||||
* [com.google.fonts/check/family/equal_numbers_of_glyphs](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/equal_numbers_of_glyphs)
|
||||
* 🍞 **PASS** All font files in this family have an equal total ammount of glyphs.
|
||||
* 🍞 **PASS** All font files in this family have an equal total amount of glyphs.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -261,7 +261,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
<summary>⚠ <b>WARN:</b> Check if each glyph has the recommended amount of contours.</summary>
|
||||
|
||||
* [com.google.fonts/check/contour_count](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/contour_count)
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
|
||||
The following glyphs do not have the recommended number of contours:
|
||||
|
||||
|
@ -498,7 +498,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
<details>
|
||||
<summary>💤 <b>SKIP:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: font_metadata
|
||||
|
||||
</details>
|
||||
|
@ -510,7 +510,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -799,7 +799,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -865,7 +865,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Check name table: POSTSCRIPT_NAME entries. </summary>
|
||||
|
||||
* [com.google.fonts/check/name/postscriptname](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/postscriptname)
|
||||
* 🍞 **PASS** POSTCRIPT_NAME entries are all good.
|
||||
* 🍞 **PASS** POSTSCRIPT_NAME entries are all good.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -25,7 +25,7 @@ Fontbakery version: 0.7.1
|
|||
<summary>🍞 <b>PASS:</b> Fonts have equal numbers of glyphs?</summary>
|
||||
|
||||
* [com.google.fonts/check/family/equal_numbers_of_glyphs](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/equal_numbers_of_glyphs)
|
||||
* 🍞 **PASS** All font files in this family have an equal total ammount of glyphs.
|
||||
* 🍞 **PASS** All font files in this family have an equal total amount of glyphs.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -261,7 +261,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
<summary>⚠ <b>WARN:</b> Check if each glyph has the recommended amount of contours.</summary>
|
||||
|
||||
* [com.google.fonts/check/contour_count](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/contour_count)
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
|
||||
The following glyphs do not have the recommended number of contours:
|
||||
|
||||
|
@ -506,7 +506,7 @@ This happens a lot when points are not extremes, which is usually bad. However,
|
|||
<details>
|
||||
<summary>💤 <b>SKIP:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: font_metadata
|
||||
|
||||
</details>
|
||||
|
@ -518,7 +518,7 @@ This happens a lot when points are not extremes, which is usually bad. However,
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -807,7 +807,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -873,7 +873,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Check name table: POSTSCRIPT_NAME entries. </summary>
|
||||
|
||||
* [com.google.fonts/check/name/postscriptname](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/postscriptname)
|
||||
* 🍞 **PASS** POSTCRIPT_NAME entries are all good.
|
||||
* 🍞 **PASS** POSTSCRIPT_NAME entries are all good.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -25,7 +25,7 @@ Fontbakery version: 0.7.1
|
|||
<summary>🍞 <b>PASS:</b> Fonts have equal numbers of glyphs?</summary>
|
||||
|
||||
* [com.google.fonts/check/family/equal_numbers_of_glyphs](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/equal_numbers_of_glyphs)
|
||||
* 🍞 **PASS** All font files in this family have an equal total ammount of glyphs.
|
||||
* 🍞 **PASS** All font files in this family have an equal total amount of glyphs.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -261,7 +261,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
<summary>⚠ <b>WARN:</b> Check if each glyph has the recommended amount of contours.</summary>
|
||||
|
||||
* [com.google.fonts/check/contour_count](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/contour_count)
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
|
||||
The following glyphs do not have the recommended number of contours:
|
||||
|
||||
|
@ -490,7 +490,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
<details>
|
||||
<summary>💤 <b>SKIP:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: font_metadata
|
||||
|
||||
</details>
|
||||
|
@ -502,7 +502,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -791,7 +791,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
@ -857,7 +857,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Check name table: POSTSCRIPT_NAME entries. </summary>
|
||||
|
||||
* [com.google.fonts/check/name/postscriptname](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/postscriptname)
|
||||
* 🍞 **PASS** POSTCRIPT_NAME entries are all good.
|
||||
* 🍞 **PASS** POSTSCRIPT_NAME entries are all good.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -268,7 +268,7 @@ But instead we have got: 'Copyright 2012-2015 The Fira Code Project Authors (htt
|
|||
<summary>⚠ <b>WARN:</b> Check if each glyph has the recommended amount of contours.</summary>
|
||||
|
||||
* [com.google.fonts/check/contour_count](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/contour_count)
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
* ⚠ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.
|
||||
|
||||
The following glyphs do not have the recommended number of contours:
|
||||
|
||||
|
@ -511,7 +511,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
<details>
|
||||
<summary>💤 <b>SKIP:</b> METADATA.pb: Font styles are named canonically?</summary>
|
||||
|
||||
* [com.google.fonts/check/metatada/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metatada/canonical_style_names)
|
||||
* [com.google.fonts/check/metadata/canonical_style_names](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/canonical_style_names)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: font_metadata
|
||||
|
||||
</details>
|
||||
|
@ -523,7 +523,7 @@ Glyph name: uni2158 Contours detected: 3 Expected: 4
|
|||
|
||||
</details>
|
||||
<details>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similiar to Google Fonts version?</summary>
|
||||
<summary>💤 <b>SKIP:</b> Glyphs are similar to Google Fonts version?</summary>
|
||||
|
||||
* [com.google.fonts/check/production_glyphs_similarity](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/production_glyphs_similarity)
|
||||
* 💤 **SKIP** Unfulfilled Conditions: api_gfonts_ttFont
|
||||
|
@ -868,7 +868,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||
<summary>🍞 <b>PASS:</b> Are there non-ASCII characters in ASCII-only NAME table entries?</summary>
|
||||
|
||||
* [com.google.fonts/check/name/ascii_only_entries](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/name/ascii_only_entries)
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
|
||||
* 🍞 **PASS** None of the ASCII-only NAME table entries contain non-ASCII characters.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
|
|
|
@ -128,7 +128,7 @@ But instead we have got: 'Copyright 2012-2015 The Mozilla Foundation, Telefonica
|
|||
- [x] uncheck "Retina" instance as `is active` instance
|
||||
- [x] file issue with FontBakery to ask Dave/Marc about this `450` weight "Retina" instance (https://github.com/googlefonts/fontbakery/issues/2420)-
|
||||
- [x] change if you find a better approach to keep Retina without disrupting builds / Regular weight
|
||||
- To set up the instance in GlyhpsApp such that it exports a font as expected: "Retina" gets a custom parameter of `weightClass: 450`, and a glyphs menu-weight of "Normal." Tested in axis-praxis, it seems to work well. All instances have a `weightClass` custom parameter.
|
||||
- To set up the instance in GlyphsApp such that it exports a font as expected: "Retina" gets a custom parameter of `weightClass: 450`, and a glyphs menu-weight of "Normal." Tested in axis-praxis, it seems to work well. All instances have a `weightClass` custom parameter.
|
||||
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@ Straightened in Bold & Reg:
|
|||
|
||||
### betaSymbol
|
||||
|
||||
These lines are't supposed to intersect:
|
||||
These lines aren't supposed to intersect:
|
||||
|
||||
![](assets/2019-03-28-14-20-11.png)
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
# USAGE:
|
||||
# Install requirements with `pip install -U -r googlefonts-qa/requirements.txt`
|
||||
#
|
||||
# call this script from the root of your fira code repo, with the absolute path your your local google/fonts repo
|
||||
# call this script from the root of your fira code repo, with the absolute path to your local google/fonts repo
|
||||
# `move-check <your_username>/<path>/fonts`
|
||||
|
||||
set -ex
|
||||
|
|
28
script/bake_in_features.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
|
||||
|
||||
code_blocks=()
|
||||
|
||||
for feat in "$@"; do
|
||||
|
||||
file="features/${feat}.fea"
|
||||
if [ ! -f "${file}" ]; then
|
||||
echo "Error: No file for feature ${feat} found!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# don't grab the "lookup" surroundings or comments or whitespace lines
|
||||
code="$(grep -v '^[[:space:]]*lookup\|^[[:space:]]*}\|^[[:space:]]*#\|^[[:space:]]*$' "${file}")" \
|
||||
|| { echo "Error: No code for feature ${feat} found!" >&2; exit 1; }
|
||||
|
||||
code_blocks+=("$(tr '\n' ' ' <<< "${code}")")
|
||||
done
|
||||
|
||||
# code block is one line above name declaration
|
||||
linenum=$(sed -n "/name = calt;/=" "${glyphs_file}")
|
||||
linenum=$((linenum - 1))
|
||||
# replace end of line (";) with code on specified line number
|
||||
sed -i -e "${linenum}s@\";\$@\n${code_blocks[*]}\";@" "${glyphs_file}"
|
102
script/build.sh
|
@ -1,8 +1,102 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "`dirname $0`"
|
||||
set -o errexit -o pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
./build_ttf.sh
|
||||
features=()
|
||||
weights=()
|
||||
gen_glyphs_file_only=0
|
||||
use_features_for_family_name=0
|
||||
export FIRACODE_FAMILY_NAME="Fira Code"
|
||||
|
||||
########### Parsing inputs ########### {{{
|
||||
check_required_args()
|
||||
{
|
||||
if [ -z "$2" ] || [ "${2:0:1}" = "-" ]; then
|
||||
echo "Error: Missing argument for '$1'" >&2
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
while [ $# -gt 0 ]; do
|
||||
# split parameters like '-f="1,2,3"' into '-f "1,2,3"'
|
||||
[[ "$1" == -*=* ]] && set -- "${1%%=*}" "${1#*=}" "${@:2}"
|
||||
case "$1" in
|
||||
-f | --features)
|
||||
check_required_args "$1" "$2" || exit 1
|
||||
# turn comma separated list into sorted array
|
||||
IFS=',' read -r -a features <<< "$(echo "$2" | tr ',' '\n' | sort -u | tr '\n' ',')"
|
||||
shift 2 # remove two params (flag + arg)
|
||||
;;
|
||||
-w | --weights)
|
||||
check_required_args "$1" "$2" || exit 1
|
||||
IFS=',' read -r -a weights <<< "$2"
|
||||
shift 2 # remove two params (flag + arg)
|
||||
;;
|
||||
-n | --family-name)
|
||||
check_required_args "$1" "$2" || exit 1
|
||||
if [ "$2" = "features" ]; then
|
||||
use_features_for_family_name=1
|
||||
else
|
||||
FIRACODE_FAMILY_NAME=$2
|
||||
fi
|
||||
shift 2 # remove two params (flag + arg)
|
||||
;;
|
||||
-g | --generate-glyphs-only)
|
||||
gen_glyphs_file_only=1
|
||||
shift 1
|
||||
;;
|
||||
-*) # unsupported flags
|
||||
echo "Error: Unsupported flag '$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
*) # positional parameters
|
||||
echo "Error: No use case for positional paramter '$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
########### ############## ########### }}}
|
||||
|
||||
# Create a temporary file that can be manipulated without messing with the original
|
||||
FIRACODE_GLYPHS_FILE=$(mktemp)
|
||||
mv "${FIRACODE_GLYPHS_FILE}" "${FIRACODE_GLYPHS_FILE}.glyphs"
|
||||
FIRACODE_GLYPHS_FILE="${FIRACODE_GLYPHS_FILE}.glyphs"
|
||||
export FIRACODE_GLYPHS_FILE
|
||||
cp ../FiraCode.glyphs "${FIRACODE_GLYPHS_FILE}"
|
||||
|
||||
feat_string=""
|
||||
if [ -n "${features[*]}" ]; then
|
||||
echo "Creating font with these features: ${features[*]}"
|
||||
./bake_in_features.sh "${features[@]}"
|
||||
|
||||
feat_string=" ${features[*]}"
|
||||
fi
|
||||
|
||||
if [ "${use_features_for_family_name}" -ne 0 ]; then
|
||||
FIRACODE_FAMILY_NAME=${FIRACODE_FAMILY_NAME}${feat_string}
|
||||
fi
|
||||
|
||||
if [ "${FIRACODE_FAMILY_NAME}" != "Fira Code" ]; then
|
||||
tmp_glyphs=$(mktemp)
|
||||
echo "Creating font with family name: ${FIRACODE_FAMILY_NAME}"
|
||||
|
||||
awk '/familyName = "Fira Code";/ {$0=nc}1' nc="familyName = \"${FIRACODE_FAMILY_NAME}\";" \
|
||||
"${FIRACODE_GLYPHS_FILE}" > "${tmp_glyphs}"
|
||||
|
||||
mv "${tmp_glyphs}" "${FIRACODE_GLYPHS_FILE}"
|
||||
fi
|
||||
|
||||
cp "${FIRACODE_GLYPHS_FILE}" "../${FIRACODE_FAMILY_NAME}.glyphs"
|
||||
echo "Generated glyphs file: ${FIRACODE_FAMILY_NAME}.glyphs"
|
||||
|
||||
if [ "${gen_glyphs_file_only}" -ne 0 ]; then
|
||||
echo "Custom .glyphs file created. Exiting here!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
./build_ttf.sh "${weights[@]}"
|
||||
./build_variable.sh
|
||||
./build_woff2.sh
|
||||
./build_woff.sh
|
||||
./build_woff.sh
|
||||
|
||||
rm -f "${FIRACODE_GLYPHS_FILE}"
|
||||
|
|
|
@ -1,25 +1,31 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "`dirname $0`/.."
|
||||
cd "$(dirname "$0")/.."
|
||||
[ -d venv ] && source venv/bin/activate
|
||||
mkdir -p distr/ttf
|
||||
rm -rf distr/ttf/*
|
||||
|
||||
family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
|
||||
glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
|
||||
|
||||
dir="distr/ttf/${family_name}"
|
||||
|
||||
mkdir -p "${dir}"
|
||||
rm -rf "${dir:?}/"*
|
||||
|
||||
args=( "$@" )
|
||||
default_weights=( "Light" "Regular" "Retina" "Medium" "SemiBold" "Bold" )
|
||||
weights=( "${args[@]:-"${default_weights[@]}"}" )
|
||||
|
||||
for weight in "${weights[@]}"; do
|
||||
file=distr/ttf/FiraCode-${weight}.ttf
|
||||
|
||||
echo "Making " ${file}
|
||||
rm -rf ${file}
|
||||
fontmake -g FiraCode.glyphs -o ttf --output-dir distr/ttf -i "Fira Code ${weight}"
|
||||
file="${dir}/FiraCode-${weight}.ttf"
|
||||
|
||||
echo "Fixing DSIG in " ${file}
|
||||
gftools fix-dsig --autofix ${file}
|
||||
echo "=============="
|
||||
echo
|
||||
echo " [i] Creating ${file}"
|
||||
echo
|
||||
|
||||
echo "TTFautohint " ${file}
|
||||
ttfautohint --no-info --ignore-restrictions ${file} ${file}.hinted
|
||||
mv ${file}.hinted ${file}
|
||||
fontmake -g "${glyphs_file}" -o ttf --output-path "${file}" -i ".* ${weight}"
|
||||
|
||||
echo " [i] TTFautohint ${file}"
|
||||
ttfautohint --no-info --ignore-restrictions "${file}" "${file}.hinted"
|
||||
mv "${file}.hinted" "${file}"
|
||||
done
|
||||
|
|
|
@ -1,34 +1,41 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "`dirname $0`/.."
|
||||
cd "$(dirname "$0")/.."
|
||||
[ -d venv ] && source venv/bin/activate
|
||||
mkdir -p distr/variable_ttf
|
||||
rm -rf distr/variable_ttf/*
|
||||
|
||||
FILE=FiraCode-VF.ttf
|
||||
family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
|
||||
glyphs_file=${FIRACODE_GLYPHS_FILE:-"FiraCode.glyphs"}
|
||||
|
||||
awk '/name = Retina;/ { print; print "exports = 0;"; next }1' FiraCode.glyphs > FiraCode_VF.glyphs
|
||||
fontmake -g FiraCode_VF.glyphs -o variable --output-dir distr/variable_ttf
|
||||
rm FiraCode_VF.glyphs
|
||||
dir="distr/variable_ttf/${family_name}"
|
||||
file="${dir}/FiraCode-VF.ttf"
|
||||
|
||||
pushd distr/variable_ttf
|
||||
echo "=============="
|
||||
echo
|
||||
echo " [i] Creating variable font file!"
|
||||
echo
|
||||
|
||||
# fix variable font metadata – very important
|
||||
gftools fix-vf-meta $FILE
|
||||
mv $FILE.fix $FILE
|
||||
mkdir -p "${dir}"
|
||||
rm -rf "${dir:?}/"*
|
||||
|
||||
# make a temporary file here to avoid parallel runs from stepping on each other's toes
|
||||
vf_glyphs=$(mktemp)
|
||||
mv ${vf_glyphs} ${vf_glyphs}.glyphs
|
||||
vf_glyphs=${vf_glyphs}.glyphs
|
||||
|
||||
awk '/name = Retina;/ { print; print "exports = 0;"; next }1' \
|
||||
"${glyphs_file}" > "${vf_glyphs}"
|
||||
|
||||
fontmake -g "${vf_glyphs}" -o variable --output-path "${file}"
|
||||
rm -f "${vf_glyphs}"
|
||||
|
||||
# other fixes for metadata and hinting
|
||||
gftools fix-nonhinting $FILE $FILE.fix
|
||||
mv $FILE.fix $FILE
|
||||
gftools fix-nonhinting "${file}" "${file}.fix"
|
||||
mv "${file}.fix" "${file}"
|
||||
|
||||
gftools fix-gasp --autofix $FILE
|
||||
mv $FILE.fix $FILE
|
||||
|
||||
gftools fix-dsig --autofix $FILE
|
||||
gftools fix-gasp --autofix "${file}"
|
||||
mv "${file}.fix" "${file}"
|
||||
|
||||
# cleanup of temp files
|
||||
rm -rf *-gasp.ttf
|
||||
rm -rf "${dir}/"*-gasp.ttf
|
||||
|
||||
# TODO (late 2019?): use TTFautohint-VF for variable font (current support is minimal)
|
||||
|
||||
popd
|
|
@ -1,18 +1,27 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "`dirname $0`/.."
|
||||
cd "$(dirname "$0")/.."
|
||||
[ -d venv ] && source venv/bin/activate
|
||||
mkdir -p distr/woff
|
||||
rm -rf distr/woff/*
|
||||
|
||||
family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
|
||||
|
||||
ttf_dir="distr/ttf/${family_name}"
|
||||
woff_dir="distr/woff/${family_name}"
|
||||
|
||||
echo "=============="
|
||||
echo
|
||||
echo " [i] Creating .woff files!"
|
||||
echo
|
||||
|
||||
mkdir -p "${woff_dir}"
|
||||
rm -rf "${woff_dir:?}/"*
|
||||
|
||||
# requires sfnt2woff-zopfli (get from https://github.com/bramstein/homebrew-webfonttools)
|
||||
|
||||
ttfs=$(ls distr/*/*.ttf)
|
||||
for ttf in $ttfs; do
|
||||
echo "sfnt2woff-zopfli $ttf"
|
||||
sfnt2woff-zopfli $ttf
|
||||
for ttf in "${ttf_dir}/"*.ttf; do
|
||||
echo "sfnt2woff-zopfli ${ttf}"
|
||||
sfnt2woff-zopfli "${ttf}"
|
||||
done
|
||||
|
||||
mkdir -p distr/woff
|
||||
mv distr/*/*.woff distr/woff
|
||||
rm distr/woff/FiraCode-Retina.woff
|
||||
mv "${ttf_dir}/"*.woff "${woff_dir}"
|
||||
rm -f "${woff_dir}/FiraCode-Retina.woff"
|
||||
|
|
|
@ -1,17 +1,27 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
cd "`dirname $0`/.."
|
||||
cd "$(dirname "$0")/.."
|
||||
[ -d venv ] && source venv/bin/activate
|
||||
mkdir -p distr/woff2
|
||||
rm -rf distr/woff2/*
|
||||
|
||||
family_name=${FIRACODE_FAMILY_NAME:-"Fira Code"}
|
||||
|
||||
ttf_dir="distr/ttf/${family_name}"
|
||||
woff_dir="distr/woff2/${family_name}"
|
||||
|
||||
echo "=============="
|
||||
echo
|
||||
echo " [i] Creating .woff2 files!"
|
||||
echo
|
||||
|
||||
mkdir -p "${woff_dir}"
|
||||
rm -rf "${woff_dir:?}/"*
|
||||
|
||||
# requires woff2_compress (get from https://github.com/bramstein/homebrew-webfonttools)
|
||||
|
||||
ttfs=$(ls distr/*/*.ttf)
|
||||
for ttf in $ttfs; do
|
||||
woff2_compress $ttf
|
||||
for ttf in "${ttf_dir}/"*.ttf; do
|
||||
echo "woff2_compress ${ttf}"
|
||||
woff2_compress "${ttf}"
|
||||
done
|
||||
|
||||
mkdir -p distr/woff2
|
||||
mv distr/*/*.woff2 distr/woff2
|
||||
rm -f distr/woff2/FiraCode-Retina.woff2
|
||||
mv "${ttf_dir}/"*.woff2 "${woff_dir}"
|
||||
rm -f "${woff_dir}/FiraCode-Retina.woff2"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/zsh -euo pipefail
|
||||
|
||||
clojure -m fira-code.checks
|
||||
clojure -m fira-code.checks $@
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
clj -A:nrepl -M -m nrepl.cmdline --interactive
|
6
script/repl.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
set -o errexit -o nounset -o pipefail
|
||||
dir=`dirname $0`
|
||||
cd $dir/..
|
||||
|
||||
clojure -M -m user
|