Compare commits
No commits in common. "master" and "3" have entirely different histories.
2
.github/FUNDING.yml
vendored
|
@ -1,3 +1,3 @@
|
||||||
github: [tonsky]
|
github: [tonsky]
|
||||||
patreon: tonsky
|
patreon: tonsky
|
||||||
custom: https://paypal.me/nikitaprokopov
|
custom: https://paypal.me/nikitonsky
|
||||||
|
|
27
.github/workflows/build.yml
vendored
|
@ -1,27 +0,0 @@
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '*'
|
|
||||||
tags:
|
|
||||||
- '[0-9]+.[0-9]+'
|
|
||||||
paths:
|
|
||||||
- '.github/workflows/**'
|
|
||||||
- 'FiraCode.glyphs'
|
|
||||||
- 'script/**'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: tonsky/firacode:latest
|
|
||||||
steps:
|
|
||||||
- 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@v3
|
|
||||||
with:
|
|
||||||
name: Fira_Code_${{ env.hash }}
|
|
||||||
path: distr
|
|
||||||
- if: startsWith(github.ref, 'refs/tags/')
|
|
||||||
run: python3 ./script/release.py
|
|
13
.gitignore
vendored
|
@ -1,19 +1,12 @@
|
||||||
*.zip
|
*.zip
|
||||||
|
FiraCode_liga.glyphs
|
||||||
|
FiraCode_mess.glyphs
|
||||||
target
|
target
|
||||||
clojure/*.edn
|
clojure/*.edn
|
||||||
|
FiraCode\ (Autosaved).glyphs
|
||||||
.cpcache
|
.cpcache
|
||||||
.repl-port
|
|
||||||
master_ufo
|
master_ufo
|
||||||
instance_ufo
|
instance_ufo
|
||||||
venv
|
venv
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.numbers
|
*.numbers
|
||||||
|
|
||||||
distr/*/
|
|
||||||
|
|
||||||
*.glyphs
|
|
||||||
!FiraCode.glyphs
|
|
||||||
|
|
||||||
.idea
|
|
||||||
.fleet
|
|
||||||
*.iml
|
|
2
AUTHORS
|
@ -7,4 +7,4 @@
|
||||||
|
|
||||||
Mozilla Foundation (https://www.mozilla.org/en-US/contact/)
|
Mozilla Foundation (https://www.mozilla.org/en-US/contact/)
|
||||||
Telefonica S.A.
|
Telefonica S.A.
|
||||||
Nikita Prokopov (niki@tonsky.me) github.com/tonsky
|
Nikita Prokopov (prokopov@gmail.com) github.com/tonsky
|
||||||
|
|
113
CHANGELOG.md
|
@ -2,114 +2,7 @@
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
### 7.0
|
#### 3.0
|
||||||
|
|
||||||
- Fixed overlap in U+2573 ╳ #1414
|
|
||||||
|
|
||||||
### 6.2
|
|
||||||
|
|
||||||
- Fixed monospaced property #1325
|
|
||||||
|
|
||||||
### 6.1
|
|
||||||
|
|
||||||
- Fixed hinting settings to match Glyphs export #1315
|
|
||||||
|
|
||||||
### 6.0
|
|
||||||
|
|
||||||
Unicode:
|
|
||||||
|
|
||||||
- Fixed height of `∑` U+2211 N-ARY SUMMATION #1083
|
|
||||||
- Added U+2241..U+224B `≁ ≂ ≃ ≄ ≅ ≆ ≇ ≉ ≊ ≋` #1090
|
|
||||||
- Added new enclosed characters from Unicode 13 U+0229C `⊜`, U+1F10D `🄍`, U+1F10E `🄎`, U+1F10F `🄏`, U+1F16D `🅭`, U+1F16E `🅮`, U+1F16F `🅯`, U+1F1AD `🆭` #1070
|
|
||||||
- Redrew U+27F0..U+27FF Supplemental Arrows-A to be strict monospace `⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿` #1109 #1123
|
|
||||||
- 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 Proportion `∷` #1219
|
|
||||||
- Added U+21AA Rightwards Arrow with Hook `↪` #1307
|
|
||||||
|
|
||||||
Changed:
|
|
||||||
|
|
||||||
- Fixed weird look of `::<` `::>` `<::` `>::` #1145
|
|
||||||
- `---` now makes a line #1190
|
|
||||||
|
|
||||||
Removed:
|
|
||||||
|
|
||||||
- C-style compound assignment `>>=` `<<=` `||=` `|=` are not combined with equal sign by default. Old behavior is moved into `ss09` #974
|
|
||||||
- Restored short `|` by default, long one moved to `cv30` #843 #1160
|
|
||||||
- Moved `.-` into `cv25` #670 #860 #1103
|
|
||||||
- Moved `.=` into `cv32` #670
|
|
||||||
- Removed named “Retina” instance from FiraCode-VF.ttf (you can still get it by setting `wght=450`) #1318
|
|
||||||
|
|
||||||
Added (variants):
|
|
||||||
|
|
||||||
- Alternative `a` `cv01` #949
|
|
||||||
- Alternative `g` `cv02` #886
|
|
||||||
- Alternative `i` `cv03`-`cv06`
|
|
||||||
- Alternative `l` `cv07`-`cv10` #899
|
|
||||||
- Alternative `0` `cv11`-`cv13`
|
|
||||||
- Alternative `3` `cv14`
|
|
||||||
- Top-aligned `*` `cv15`
|
|
||||||
- Hexagonal `*` `cv16` #708 #1134
|
|
||||||
- Top-aligned `~` `cv17`
|
|
||||||
- Alternative `%` `cv18`
|
|
||||||
- `<=` with a horizontal bar `cv19`
|
|
||||||
- `<=` as an arrow `cv20` #34 #696 #858
|
|
||||||
- `=<` as less than or equal `cv21` #34
|
|
||||||
- `=<` as less than or equal with horizontal bar `cv22` #34
|
|
||||||
- `>=` with a horizontal bar `cv23`
|
|
||||||
- `/=` as not equals `cv24` #125
|
|
||||||
- Added `:-` to `cv26` #790
|
|
||||||
- Returned `[]` as `cv27`
|
|
||||||
- Returned `{. .}` as `cv28` #875 #635 #409 #279 #264 #214
|
|
||||||
- Alternative `{}` `cv29`
|
|
||||||
- Returned full ligatures for `Fl` `Tl` `fi` `fj` `fl` `ft` as `ss10`
|
|
||||||
- Alternative `()` `cv31` #1198
|
|
||||||
|
|
||||||
#### 5.2 (June 12, 2020)
|
|
||||||
|
|
||||||
- Fixed hinting problems caused by build_ttf #1075
|
|
||||||
|
|
||||||
#### 5.1 (June 10, 2020)
|
|
||||||
|
|
||||||
- Fixed monospace property broken by adding threeemdash #1073
|
|
||||||
|
|
||||||
#### 5.0 (June 8, 2020)
|
|
||||||
|
|
||||||
- Fixed Box drawing diagonal lines U+2571 `╱` U+2572 `╲` U+2573 `╳` #929
|
|
||||||
- Added U+2236 Ratio `∶` #926
|
|
||||||
- Added U+2E3A 2-em dash `⸺`, U+2E3B 3-em dash `⸻` #1019
|
|
||||||
- Fixed arrows next to lowercase letters #1049 #1059
|
|
||||||
- Vertically-aligned colons, greater/less signs #980 #1061
|
|
||||||
- Make U+2388 Helm Symbol `⎈` single-width #1036
|
|
||||||
- Disable `=/` because of conflicts with paths `PATH=/...` #1056
|
|
||||||
- Fixed STAT table in FiraCode-VF.ttf #770 #1054
|
|
||||||
- Added `//=` `=//` `=//=` #816
|
|
||||||
- Added U+21B0..U+21B3 `↰ ↱ ↲ ↳`, U+2770..U+2771 `❰ ❱` #1032
|
|
||||||
- Fixed U+27F8 `⟸` U+27F9 `⟹` U+27FA `⟺` U+27FD `⟽` U+27FE `⟾` U+27FF `⟿` that were broken in v4 #1067
|
|
||||||
- Added `ss08` that adds gaps to `==` `===` `!=` `!==` #187 #383
|
|
||||||
- Removed OTF from distr to avoid confusion #939
|
|
||||||
|
|
||||||
#### 4.0 (May 18, 2020)
|
|
||||||
|
|
||||||
Removed 44 individual arrow ligatures, replaced with four universal, combinative substitutions. 100-150% faster shaping performance, infinite amount of arrow combinations.
|
|
||||||
|
|
||||||
- Arbitrary-long combinative hyphen-based arrows #346 #494 #713 #826 #968 #983 #1029
|
|
||||||
- Arbitrary-long combinative equal-based arrows #229 #234 #346 #494 #698 #826 #919 #931 #946 #948 #968 #1016 #1018 #1022
|
|
||||||
- Arbitrary-long underscores #120 #269 #346 #494
|
|
||||||
- Arbitrary-long numbersign sequences #1014
|
|
||||||
- Fixed descender in U+040F `Џ`
|
|
||||||
- Undid #995 and properly fixed U+04CB `Ӌ`, U+04CC `ӌ` #1001 and U+0449 `щ` #1007
|
|
||||||
- Added `|||` to prevent partial ligatures in `|||-|||` `|||=|||` #346
|
|
||||||
|
|
||||||
#### 3.1 (April 15, 2020)
|
|
||||||
|
|
||||||
- Fixed width of Germandbls, cornerbracketleft, cornerbracketleft, negativeAcknowledge-control, cornerbracketleft.half, cornerbracketright.half [#1000]
|
|
||||||
- Fixed misplaced descenders on U+04B3 `ҳ` U+04CB `Ӌ` and U+04CC `ӌ` [#995]
|
|
||||||
- Fixed U+03F4 `ϴ` [#996]
|
|
||||||
- Fixed U+0314 COMBINING REVERSED COMMA ABOVE [#997]
|
|
||||||
|
|
||||||
#### 3.0 (April 9, 2020)
|
|
||||||
|
|
||||||
- Disabled ligatures in progress bars `[-> [--> [---> [=> [==> [===>` [#968]
|
- Disabled ligatures in progress bars `[-> [--> [---> [=> [==> [===>` [#968]
|
||||||
- Added set letters U+2102 `ℂ` U+210D `ℍ` U+2115 `ℕ` U+2119 `ℙ` U+211A `ℚ` U+211D `ℝ` U+2124 `ℤ` and U+1D539 `𝔹` [#841]
|
- Added set letters U+2102 `ℂ` U+210D `ℍ` U+2115 `ℕ` U+2119 `ℙ` U+211A `ℚ` U+211D `ℝ` U+2124 `ℤ` and U+1D539 `𝔹` [#841]
|
||||||
|
@ -187,7 +80,7 @@ Removed 44 individual arrow ligatures, replaced with four universal, combinative
|
||||||
- Alternatives (stylistic sets):
|
- Alternatives (stylistic sets):
|
||||||
- Lowercase `r` (ss01) [#601]
|
- Lowercase `r` (ss01) [#601]
|
||||||
- Less than/greater than `<=` `>=` (ss02) [#263] [#617]
|
- Less than/greater than `<=` `>=` (ss02) [#263] [#617]
|
||||||
- Ampersand `&` (ss03) [#371] [#617]
|
- Ampersand `&` (ss03) [#617]
|
||||||
- Dollar sign `$` (ss04) [#617]
|
- Dollar sign `$` (ss04) [#617]
|
||||||
- At sign `@` (ss05) [#617] [#748] [#817]
|
- At sign `@` (ss05) [#617] [#748] [#817]
|
||||||
- Thin backslash (ss06) [#577 #720 #825]
|
- Thin backslash (ss06) [#577 #720 #825]
|
||||||
|
@ -269,7 +162,7 @@ Removed 44 individual arrow ligatures, replaced with four universal, combinative
|
||||||
|
|
||||||
#### 1.102
|
#### 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
|
- Turned on autohinting
|
||||||
|
|
||||||
#### 1.101
|
#### 1.101
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
FROM python:3
|
|
||||||
|
|
||||||
WORKDIR /opt
|
|
||||||
|
|
||||||
RUN pip install --upgrade Pillow==5.4.1 idna==2.8 requests==2.21.0 urllib3==1.24.1 pycairo==1.20.1 gftools==0.7.4 fontmake==2.4.0 fontbakery==0.8.0
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y ttfautohint && \
|
|
||||||
apt-get install -y woff2 && \
|
|
||||||
apt-get install -y sfnt2woff-zopfli
|
|
71350
FiraCode.glyphs
240
LEEME.md
|
@ -1,240 +0,0 @@
|
||||||
## 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,7 +0,0 @@
|
||||||
all: build
|
|
||||||
|
|
||||||
build:
|
|
||||||
docker run --rm -v ${PWD}:/opt tonsky/firacode:latest ./script/build.sh
|
|
||||||
|
|
||||||
package:
|
|
||||||
./script/package.sh
|
|
226
README.md
|
@ -1,8 +1,6 @@
|
||||||
## Fira Code: free monospaced font with programming ligatures
|
## Fira Code: free monospaced font with programming ligatures
|
||||||
|
|
||||||
![Fira Code](./extras/logo.svg)
|
<img src="./extras/logo.svg">
|
||||||
|
|
||||||
Read in [Español](./LEEME.md) | [简体中文](./README_CN.md) | [日本語](./README_JA.md)
|
|
||||||
|
|
||||||
### Problem
|
### Problem
|
||||||
|
|
||||||
|
@ -14,108 +12,114 @@ Fira Code is a free monospaced font containing ligatures for common programming
|
||||||
|
|
||||||
### Download & Install
|
### 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"></a>
|
**<a href="https://github.com/tonsky/FiraCode/releases/download/3/FiraCode_3.zip">Download Fira Code v3</a>**
|
||||||
|
|
||||||
Then:
|
Then:
|
||||||
|
|
||||||
- [How to Install](https://github.com/tonsky/FiraCode/wiki)
|
- <a href="https://github.com/tonsky/FiraCode/wiki">How to Install</a>
|
||||||
- [Troubleshooting](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
|
- <a href="https://github.com/tonsky/FiraCode/wiki#troubleshooting">Troubleshooting</a>
|
||||||
- [News & Updates](https://twitter.com/FiraCode)
|
- <a href="https://twitter.com/FiraCode">News & Updates</a>
|
||||||
|
|
||||||
### Sponsors
|
### Support
|
||||||
|
|
||||||
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!
|
<a href="https://github.com/sponsors/tonsky" target="_blank"><img src="./extras/sponsor.png"></a>
|
||||||
|
|
||||||
Huge thanks to:
|
Fira Code is a personal, free-time project with no funding and 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!
|
||||||
|
|
||||||
<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?
|
### What’s in the box?
|
||||||
|
|
||||||
Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.
|
Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.
|
||||||
|
|
||||||
<img src="./extras/ligatures.png" width="754">
|
<img src="./showcases/v3/all_ligatures.png">
|
||||||
|
|
||||||
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!
|
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)
|
||||||
|
|
||||||
<img src="./extras/arrows.png" width="754">
|
<img src="./showcases/v3/stylistic_sets.png">
|
||||||
|
|
||||||
Fira Code is not only about ligatures. Some fine-tuning is done for punctuation and frequent letter pairs.
|
In addition to that, Fira Code contains huge variety of Unicode characters well-suited for technical writing, math formulas and terminal UIs.
|
||||||
|
|
||||||
<img src="./extras/typographics.png" width="754">
|
<img src="./showcases/v3/unicode.png">
|
||||||
|
|
||||||
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)
|
### Code examples
|
||||||
|
|
||||||
<img src="./extras/character_variants.png" width="754">
|
Ruby:
|
||||||
|
|
||||||
Some ligatures can be altered or enabled using stylistic sets/character variants:
|
<img src="./showcases/v3/ruby.png">
|
||||||
|
|
||||||
<img src="./extras/ligature_variants.png" width="754">
|
JavaScript:
|
||||||
|
|
||||||
Being a programming font, Fira Code has fantastic support for ASCII/box drawing, powerline and other forms of console UIs:
|
<img src="./showcases/v3/javascript.png">
|
||||||
|
|
||||||
<img src="./extras/console.png" width="754">
|
PHP:
|
||||||
|
|
||||||
Fira Code is the first programming font to offer dedicated glyphs to render progress bars:
|
<img src="./showcases/v3/php.png">
|
||||||
|
|
||||||
<img src="./extras/progress.png" width="754">
|
Erlang:
|
||||||
|
|
||||||
In action:
|
<img src="./showcases/v3/erlang.png">
|
||||||
|
|
||||||
<img src="./extras/progress.gif" width="560">
|
Elixir:
|
||||||
|
|
||||||
We hope more programming fonts will adopt this convention and ship their own versions.
|
<img src="/showcases/v3/elixir.png">
|
||||||
|
|
||||||
Unicode coverage makes Fira Code a great choice for mathematical writing:
|
Go:
|
||||||
|
|
||||||
<img src="./extras/math.png" width="754">
|
<img src="./showcases/v3/go.png">
|
||||||
|
|
||||||
### How does it look?
|
LiveScript:
|
||||||
|
|
||||||
<img src="./extras/samples.png" width="754">
|
<img src="./showcases/v3/livescript.png">
|
||||||
<img src="./extras/samples2.png" width="754">
|
|
||||||
|
Clojure:
|
||||||
|
|
||||||
|
<img src="./showcases/v3/clojure.png">
|
||||||
|
|
||||||
|
Swift:
|
||||||
|
|
||||||
|
<img src="./showcases/v3/swift.png">
|
||||||
|
|
||||||
|
### Terminal compatibility list
|
||||||
|
|
||||||
|
| Works | Doesn’t work |
|
||||||
|
| ------------------ | ------------------ |
|
||||||
|
| **Butterfly** | **Alacritty** |
|
||||||
|
| **crosh** (ChromeOS, [instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | **Windows Console (conhost.exe)** |
|
||||||
|
| **Hyper.app** | **Cmder** |
|
||||||
|
| **iTerm 2** ([3.1+](https://gitlab.com/gnachman/iterm2/issues/3568#note_13118332)) | **ConEmu** |
|
||||||
|
| **Kitty** | **GNOME Terminal** |
|
||||||
|
| **Konsole** | **mate-terminal** |
|
||||||
|
| **mintty** (partial support [2.8.3+](https://github.com/mintty/mintty/issues/601))| **PuTTY** |
|
||||||
|
| **QTerminal** | **rxvt** |
|
||||||
|
| **Terminal.app** | **xterm** |
|
||||||
|
| **Termux** | **ZOC** (Windows) |
|
||||||
|
| **Token2Shell/MD** | **gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal,** and other libvte-based terminals ([bug report](https://bugzilla.gnome.org/show_bug.cgi?id=584160)) |
|
||||||
|
| **upterm** |
|
||||||
|
| **Windows Terminal** |
|
||||||
|
| **ZOC** (macOS) |
|
||||||
|
|
||||||
### Editor compatibility list
|
### Editor compatibility list
|
||||||
|
|
||||||
| Works | Doesn’t work |
|
| Works | Doesn’t work |
|
||||||
|-------|----------------|
|
| ----- | -------------- |
|
||||||
| **Arduino IDE** (2.0+,same instructions as [vscode](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) | **Adobe Dreamweaver** |
|
| **Abricotine** | **Arduino IDE** |
|
||||||
| **Abricotine** | **Delphi IDE** |
|
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** |
|
||||||
| **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) | **Delphi IDE** |
|
||||||
| **Anjuta** (unless at the EOF) | **IDLE** |
|
| **AppCode** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Eclipse** (Windows, [vote here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=398656)) |
|
||||||
| **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)) | 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)) | **Monkey Studio IDE** |
|
| **BBEdit/TextWrangler** (v. 11 only, [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **Geany** (Windows) |
|
||||||
| **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)) | **gVim** (Windows [workaround](https://github.com/tonsky/FiraCode/issues/462)) |
|
||||||
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) |
|
| **Chocolat** | **IDLE** |
|
||||||
| **Chocolat** |
|
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **KDevelop 4** |
|
||||||
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) | **MATLAB** |
|
||||||
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
|
| **Coda 2** | **Monkey Studio IDE** |
|
||||||
| **Coda 2** |
|
| **CodeLite** | **UltraEdit** |
|
||||||
| **CodeLite** |
|
| **Eclipse** (macOS 4.7+, Linux) | |
|
||||||
| **CodeRunner** |
|
| **elementary Code** | |
|
||||||
| **Comma** (Under: Preferences > Editor > Font) |
|
| **Geany** (macOS) |
|
||||||
| **CotEditor** |
|
|
||||||
| **Eclipse** |
|
|
||||||
| **elementary Code** |
|
|
||||||
| **Geany** (1.37+) |
|
|
||||||
| **gEdit / Pluma** |
|
| **gEdit / Pluma** |
|
||||||
| **GNOME Builder** |
|
| **GNOME Builder** |
|
||||||
| **Godot** |
|
|
||||||
| **GoormIDE** ([instructions](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
|
| **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** |
|
| **Kate, KWrite** |
|
||||||
| **KDevelop 5+** |
|
| **KDevelop 5+** |
|
||||||
| **Komodo** |
|
| **Komodo** |
|
||||||
|
@ -125,76 +129,45 @@ Unicode coverage makes Fira Code a great choice for mathematical writing:
|
||||||
| **LINQPad** |
|
| **LINQPad** |
|
||||||
| **MacVim** 7.4 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
|
| **MacVim** 7.4 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
|
||||||
| **Mancy** |
|
| **Mancy** |
|
||||||
| **MATLAB** ([instructions](https://github.com/tonsky/FiraCode/wiki/MATLAB-for-Windows-Instructions)) |
|
|
||||||
| **Meld** |
|
| **Meld** |
|
||||||
| **Mousepad** |
|
| **Mousepad** |
|
||||||
| **NeoVim-gtk** |
|
| **NeoVim-gtk** |
|
||||||
| **NetBeans** |
|
| **NetBeans** |
|
||||||
| **Notepad** (Windows) |
|
| **Notepad** (Windows) |
|
||||||
| **Notepad++** ([instructions](https://github.com/tonsky/FiraCode/issues/1555)) |
|
| **Notepad++** (with a [workaround](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) |
|
||||||
| **Notepad3** ([instructions](https://github.com/rizonesoft/Notepad3/issues/361#issuecomment-365977420))|
|
| **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)) |
|
||||||
| **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)) |
|
||||||
| **PyCharm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
|
|
||||||
| **QOwnNotes** (21.16.6+) |
|
|
||||||
| **QtCreator** |
|
| **QtCreator** |
|
||||||
| **Rider** |
|
| **Rider** |
|
||||||
| **RStudio** ([instructions](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
|
| **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** |
|
| **Scratch** |
|
||||||
| **Scribus** (1.5.3+) |
|
| **Scribus** (1.5.3+) |
|
||||||
| **SublimeText** (3146+) |
|
| **SublimeText** (3146+) |
|
||||||
| **Spyder IDE** (only with Qt5) |
|
| **Spyder IDE** (only with Qt5) |
|
||||||
| **SuperCollider 3** |
|
| **SuperCollider 3** |
|
||||||
| **TeXShop**|
|
|
||||||
| **TextAdept** (Linux, macOS) |
|
| **TextAdept** (Linux, macOS) |
|
||||||
| **TextEdit** |
|
| **TextEdit** |
|
||||||
| **TextMate 2** |
|
| **TextMate 2** |
|
||||||
| **UltraEdit (UEX)** (Linux) |
|
|
||||||
| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) |
|
||||||
| **Visual Studio** (2015+, [instructions](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
|
| **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)) |
|
| **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** |
|
| **Xamarin Studio/Monodevelop** |
|
||||||
| **Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
| **Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin)) |
|
||||||
| **Xi** |
|
|
||||||
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
|
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
|
||||||
|
|
||||||
### Terminal compatibility list
|
|
||||||
|
|
||||||
| 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
|
### Browser support
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<!-- HTML -->
|
<!-- HTML -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@2/distr/fira_code.css">
|
||||||
```
|
```
|
||||||
|
|
||||||
```css
|
```css
|
||||||
/* CSS */
|
/* CSS */
|
||||||
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
|
@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@2/distr/fira_code.css);
|
||||||
```
|
```
|
||||||
|
|
||||||
```css
|
```css
|
||||||
|
@ -206,6 +179,7 @@ code { font-family: 'Fira Code', monospace; }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
- IE 10+, Edge Legacy: enable with `font-feature-settings: "calt";`
|
- IE 10+, Edge Legacy: enable with `font-feature-settings: "calt";`
|
||||||
- Firefox
|
- Firefox
|
||||||
- Safari
|
- Safari
|
||||||
|
@ -215,6 +189,7 @@ code { font-family: 'Fira Code', monospace; }
|
||||||
|
|
||||||
### Projects using Fira Code
|
### Projects using Fira Code
|
||||||
|
|
||||||
|
- All [JetBrains products](https://www.jetbrains.com/)
|
||||||
- [CodePen](https://codepen.io/)
|
- [CodePen](https://codepen.io/)
|
||||||
- [Blink Shell](http://www.blink.sh/)
|
- [Blink Shell](http://www.blink.sh/)
|
||||||
- [Klipse](http://app.klipse.tech/)
|
- [Klipse](http://app.klipse.tech/)
|
||||||
|
@ -226,7 +201,7 @@ code { font-family: 'Fira Code', monospace; }
|
||||||
|
|
||||||
### Alternatives
|
### Alternatives
|
||||||
|
|
||||||
Free monospaced fonts with ligatures:
|
Other free monospaced fonts with ligatures:
|
||||||
|
|
||||||
- [Hasklig](https://github.com/i-tu/Hasklig)
|
- [Hasklig](https://github.com/i-tu/Hasklig)
|
||||||
- [Monoid](http://larsenwork.com/monoid/)
|
- [Monoid](http://larsenwork.com/monoid/)
|
||||||
|
@ -240,48 +215,21 @@ Free monospaced fonts with ligatures:
|
||||||
Paid monospaced fonts with ligatures:
|
Paid monospaced fonts with ligatures:
|
||||||
|
|
||||||
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
|
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
|
||||||
- [Mono Lisa](https://www.monolisa.dev/)
|
- [Mono Lisa](https://monolisa.dev/)
|
||||||
|
|
||||||
### Building Fira Code locally
|
### Building Fira Code locally
|
||||||
|
|
||||||
In case you want to alter FiraCode.glyphs and build OTF/TTF/WOFF files yourself, this is the setup I use on macOS:
|
In case you want to alter FiraCode.glyphs and build OTF/TTF/WOFF files yourself, this is setup I use on macOS:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# install all required build tools
|
# install all required build tools
|
||||||
./script/bootstrap_macos.sh
|
./script/bootstrap
|
||||||
|
|
||||||
# build the font files
|
# build the font files
|
||||||
./script/build.sh
|
./script/build
|
||||||
|
|
||||||
# install OTFs to ~/Library/Fonts
|
# install OTFs to ~/Library/Fonts
|
||||||
cp distr/otf/*.otf ~/Library/Fonts
|
./script/install
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, you can build Fira Code using Docker:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# install dependencies in a container and build the font files
|
|
||||||
make
|
|
||||||
|
|
||||||
# package the font files from dist/ into a zip
|
|
||||||
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
|
### Credits
|
||||||
|
|
284
README_CN.md
|
@ -1,284 +0,0 @@
|
||||||
## 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
|
@ -1,291 +0,0 @@
|
||||||
## 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)
|
|
|
@ -1 +0,0 @@
|
||||||
bracketright braceright parenright
|
|
|
@ -1,13 +0,0 @@
|
||||||
zero
|
|
||||||
zero.zero
|
|
||||||
one
|
|
||||||
two
|
|
||||||
twoTurned
|
|
||||||
threeTurned
|
|
||||||
three
|
|
||||||
four
|
|
||||||
five
|
|
||||||
six
|
|
||||||
seven
|
|
||||||
eight
|
|
||||||
nine
|
|
|
@ -1,12 +0,0 @@
|
||||||
zero.tosf
|
|
||||||
zero.tosf.zero
|
|
||||||
zero.zero.tosf
|
|
||||||
one.tosf
|
|
||||||
two.tosf
|
|
||||||
three.tosf
|
|
||||||
four.tosf
|
|
||||||
five.tosf
|
|
||||||
six.tosf
|
|
||||||
seven.tosf
|
|
||||||
eight.tosf
|
|
||||||
nine.tosf
|
|
|
@ -1 +0,0 @@
|
||||||
a b c d e f A B C D E F
|
|
|
@ -1 +0,0 @@
|
||||||
bracketleft braceleft parenleft
|
|
|
@ -1 +0,0 @@
|
||||||
@Uppercase zero one two twoTurned threeTurned three four five six seven eight nine @OpeningBracket @ClosingBracket bar
|
|
|
@ -33,31 +33,8 @@
|
||||||
";\n"))))
|
";\n"))))
|
||||||
|
|
||||||
|
|
||||||
(def priorities
|
|
||||||
{;; <|>
|
|
||||||
["less" "bar" "greater"] 0
|
|
||||||
|
|
||||||
;; |||> ||> |> <| <|| <|||
|
|
||||||
["bar" "bar" "bar" "greater"] 1
|
|
||||||
["bar" "bar" "greater"] 1
|
|
||||||
["bar" "greater"] 1
|
|
||||||
["less" "bar" "bar" "bar"] 1
|
|
||||||
["less" "bar" "bar"] 1
|
|
||||||
["less" "bar"] 1
|
|
||||||
|
|
||||||
;; #346 We need << <<< >> >>> || ||| substituted before -- --- == ===
|
|
||||||
;; so that `ignore [less greater bar] hyphen hyphen` would not trigger
|
|
||||||
["less" "less"] 2
|
|
||||||
["less" "less" "less"] 2
|
|
||||||
["greater" "greater"] 2
|
|
||||||
["greater" "greater" "greater"] 2
|
|
||||||
["bar" "bar"] 2
|
|
||||||
["bar" "bar" "bar"] 2})
|
|
||||||
|
|
||||||
|
|
||||||
(def ignores
|
(def ignores
|
||||||
(coll/multimap-by str
|
{ ["slash" "asterisk"]
|
||||||
["slash" "asterisk"]
|
|
||||||
(str
|
(str
|
||||||
" ignore sub slash' asterisk slash;\n"
|
" ignore sub slash' asterisk slash;\n"
|
||||||
" ignore sub asterisk slash' asterisk;\n")
|
" ignore sub asterisk slash' asterisk;\n")
|
||||||
|
@ -77,15 +54,6 @@
|
||||||
" ignore sub slash asterisk' asterisk asterisk;\n"
|
" ignore sub slash asterisk' asterisk asterisk;\n"
|
||||||
" ignore sub asterisk' asterisk asterisk slash;\n")
|
" ignore sub asterisk' asterisk asterisk slash;\n")
|
||||||
|
|
||||||
;; #1061
|
|
||||||
["colon" "colon"]
|
|
||||||
(str " ignore sub colon' colon [less greater];\n"
|
|
||||||
" ignore sub [less greater] colon' colon;\n")
|
|
||||||
|
|
||||||
["colon" "colon" "colon"]
|
|
||||||
(str " ignore sub colon' colon colon [less greater];\n"
|
|
||||||
" ignore sub [less greater] colon' colon colon;\n")
|
|
||||||
|
|
||||||
;; #621 <||>
|
;; #621 <||>
|
||||||
["less" "bar" "bar"]
|
["less" "bar" "bar"]
|
||||||
" ignore sub less' bar bar greater;\n"
|
" ignore sub less' bar bar greater;\n"
|
||||||
|
@ -93,6 +61,17 @@
|
||||||
["bar" "bar" "greater"]
|
["bar" "bar" "greater"]
|
||||||
" ignore sub less bar' bar greater;\n"
|
" ignore sub less bar' bar greater;\n"
|
||||||
|
|
||||||
|
;; #574 :>=
|
||||||
|
["colon" "greater"]
|
||||||
|
" ignore sub colon' greater equal;\n"
|
||||||
|
|
||||||
|
;; #548 >=<
|
||||||
|
["greater" "equal"]
|
||||||
|
" ignore sub greater' equal less;\n"
|
||||||
|
|
||||||
|
["equal" "less"]
|
||||||
|
" ignore sub greater equal' less;\n"
|
||||||
|
|
||||||
;; #593 {|}
|
;; #593 {|}
|
||||||
["braceleft" "bar"]
|
["braceleft" "bar"]
|
||||||
" ignore sub braceleft' bar braceright;\n"
|
" ignore sub braceleft' bar braceright;\n"
|
||||||
|
@ -109,99 +88,60 @@
|
||||||
|
|
||||||
;; #410 <*>> <+>> <$>>
|
;; #410 <*>> <+>> <$>>
|
||||||
["greater" "greater"]
|
["greater" "greater"]
|
||||||
" ignore sub [asterisk plus dollar] greater' greater;\n"
|
(str " ignore sub asterisk greater' greater;\n"
|
||||||
|
" ignore sub plus greater' greater;\n"
|
||||||
|
" ignore sub dollar greater' greater;\n")
|
||||||
|
|
||||||
;; #410 <*>>> <+>>> <$>>>
|
;; #410 <*>>> <+>>> <$>>>
|
||||||
["greater" "greater" "greater"]
|
["greater" "greater" "greater"]
|
||||||
" ignore sub [asterisk plus dollar] greater' greater greater;\n"
|
(str " ignore sub asterisk greater' greater greater;\n"
|
||||||
|
" ignore sub plus greater' greater greater;\n"
|
||||||
|
" ignore sub dollar greater' greater greater;\n")
|
||||||
|
|
||||||
;; #410 <<*> <<+> <<$>
|
;; #410 <<*> <<+> <<$>
|
||||||
["less" "less"]
|
["less" "less"]
|
||||||
" ignore sub less' less [asterisk plus dollar];\n"
|
(str " ignore sub less' less asterisk;\n"
|
||||||
|
" ignore sub less' less plus;\n"
|
||||||
|
" ignore sub less' less dollar;\n")
|
||||||
|
|
||||||
;; #410 <<<*> <<<+> <<<$>
|
;; #410 <<<*> <<<+> <<<$>
|
||||||
["less" "less" "less"]
|
["less" "less" "less"]
|
||||||
" ignore sub less' less less [asterisk plus dollar];\n"
|
(str " ignore sub less' less less asterisk;\n"
|
||||||
|
" ignore sub less' less less plus;\n"
|
||||||
|
" ignore sub less' less less dollar;\n")
|
||||||
|
|
||||||
|
;; #713 |-|
|
||||||
|
["bar" "hyphen"]
|
||||||
|
" ignore sub bar' hyphen bar;\n"
|
||||||
|
|
||||||
|
["hyphen" "bar"]
|
||||||
|
" ignore sub bar hyphen' bar;\n"
|
||||||
|
|
||||||
|
;; #968 [-> [--> [==> [=>
|
||||||
|
["equal" "greater"]
|
||||||
|
" ignore sub bracketleft equal' greater;\n"
|
||||||
|
|
||||||
|
["equal" "equal" "greater"]
|
||||||
|
" ignore sub bracketleft equal' equal greater;\n"
|
||||||
|
|
||||||
;; #948 [==[ ]==]
|
|
||||||
;; #968 [== ==]
|
|
||||||
["equal" "equal"]
|
["equal" "equal"]
|
||||||
(str " ignore sub bracketleft equal' equal;\n"
|
" ignore sub bracketleft equal' equal;\n"
|
||||||
" ignore sub equal' equal bracketright;\n")
|
|
||||||
|
|
||||||
;; #948 [===[ ]===]
|
|
||||||
;; #968 [=== ===]
|
|
||||||
["equal" "equal" "equal"]
|
["equal" "equal" "equal"]
|
||||||
(str " ignore sub bracketleft equal' equal equal;\n"
|
" ignore sub bracketleft equal' equal equal;\n"
|
||||||
" ignore sub equal' equal equal bracketright;\n")
|
|
||||||
|
|
||||||
;; #346 =:=
|
["hyphen" "greater"]
|
||||||
["colon" "equal"]
|
" ignore sub bracketleft hyphen' greater;\n"
|
||||||
" ignore sub equal colon' equal;\n"
|
|
||||||
|
|
||||||
;; #346 =!=
|
["hyphen" "hyphen" "greater"]
|
||||||
["exclam" "equal"]
|
" ignore sub bracketleft hyphen' hyphen greater;\n"
|
||||||
" ignore sub equal exclam' equal;\n"
|
|
||||||
;; #346 =!==
|
|
||||||
["exclam" "equal" "equal"]
|
|
||||||
" ignore sub equal exclam' equal equal;\n"
|
|
||||||
|
|
||||||
;; #346 =<= <=< <=> <=| <=: <=! <=/
|
|
||||||
["less" "equal"]
|
|
||||||
(str " ignore sub equal less' equal;\n"
|
|
||||||
" ignore sub less' equal [less greater bar colon exclam slash];\n")
|
|
||||||
|
|
||||||
;; #548 >=<
|
|
||||||
;; #346 =>= >=> >=< >=| >=: >=! >=/
|
|
||||||
["greater" "equal"]
|
|
||||||
(str " ignore sub equal greater' equal;\n"
|
|
||||||
" ignore sub greater' equal [less greater bar colon exclam slash];\n")
|
|
||||||
|
|
||||||
;; #346 >>->> >>=>>
|
|
||||||
;; #974 keep >>=
|
|
||||||
["greater" "greater"]
|
|
||||||
(str " ignore sub [hyphen equal] greater' greater;\n"
|
|
||||||
" ignore sub greater' greater hyphen;\n"
|
|
||||||
" ignore sub greater' greater equal [equal less greater bar colon exclam slash];\n")
|
|
||||||
|
|
||||||
;; #346 <<-<< <<=<<
|
|
||||||
;; #974 keep <<=
|
|
||||||
["less" "less"]
|
|
||||||
(str " ignore sub [hyphen equal] less' less;\n"
|
|
||||||
" ignore sub less' less hyphen;\n"
|
|
||||||
" ignore sub less' less equal [equal less greater bar colon exclam slash];\n")
|
|
||||||
|
|
||||||
;; #346 ||-|| ||=||
|
|
||||||
;; #974 keep ||=
|
|
||||||
["bar" "bar"]
|
|
||||||
(str " ignore sub [hyphen equal] bar' bar;\n"
|
|
||||||
" ignore sub bar' bar hyphen;\n"
|
|
||||||
" ignore sub bar' bar equal [equal less greater bar colon exclam slash];\n")
|
|
||||||
|
|
||||||
;; #816 //=
|
|
||||||
["slash" "slash"]
|
|
||||||
(str " ignore sub equal slash' slash;\n"
|
|
||||||
" ignore sub slash' slash equal;\n")
|
|
||||||
|
|
||||||
;; #346 <--> >--< |--|
|
|
||||||
["hyphen" "hyphen"]
|
["hyphen" "hyphen"]
|
||||||
(str " ignore sub [less greater bar] hyphen' hyphen;\n"
|
" ignore sub bracketleft hyphen' hyphen;\n"
|
||||||
" ignore sub hyphen' hyphen [less greater bar];\n")
|
|
||||||
|
|
||||||
;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!=
|
["hyphen" "hyphen" "hyphen"]
|
||||||
["equal" "equal"]
|
" ignore sub bracketleft hyphen' hyphen hyphen;\n"
|
||||||
(str " ignore sub equal [colon exclam] equal' equal;\n"
|
})
|
||||||
" ignore sub [less greater bar slash] equal' equal;\n"
|
|
||||||
" ignore sub equal' equal [less greater bar slash] ;\n"
|
|
||||||
" ignore sub equal' equal [colon exclam] equal;\n")
|
|
||||||
|
|
||||||
;; #346 <===> >===< |===| /===/ =:=== =!=== ===:= ===!=
|
|
||||||
["equal" "equal" "equal"]
|
|
||||||
(str " ignore sub equal [colon exclam] equal' equal equal;\n"
|
|
||||||
" ignore sub [less greater bar slash] equal' equal equal;\n"
|
|
||||||
" ignore sub equal' equal equal [less greater bar slash];\n"
|
|
||||||
" ignore sub equal' equal equal [colon exclam] equal;\n")
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
||||||
;; DO NOT generate ignores at all
|
;; DO NOT generate ignores at all
|
||||||
|
@ -210,6 +150,8 @@
|
||||||
["less" "asterisk" "greater"]
|
["less" "asterisk" "greater"]
|
||||||
["less" "plus" "greater"]
|
["less" "plus" "greater"]
|
||||||
["less" "dollar" "greater"]
|
["less" "dollar" "greater"]
|
||||||
|
;; #795
|
||||||
|
["f" "l"] ["F" "l"] ["T" "l"]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,16 +235,10 @@
|
||||||
|
|
||||||
|
|
||||||
(defn compare-ligas [l1 l2]
|
(defn compare-ligas [l1 l2]
|
||||||
(let [p1 (priorities l1 Long/MAX_VALUE)
|
|
||||||
p2 (priorities l2 Long/MAX_VALUE)
|
|
||||||
pc (compare p1 p2)
|
|
||||||
c1 (count l1)
|
|
||||||
c2 (count l2)
|
|
||||||
cc (compare c1 c2)]
|
|
||||||
(cond
|
(cond
|
||||||
(not= 0 pc) pc ;; lower priority first
|
(> (count l1) (count l2)) -1
|
||||||
(not= 0 cc) (- cc) ;; longer first
|
(< (count l1) (count l2)) 1
|
||||||
:else (compare l1 l2)))) ;; alphabetical
|
:else (compare l1 l2)))
|
||||||
|
|
||||||
|
|
||||||
(defn replace-calt [font ligas]
|
(defn replace-calt [font ligas]
|
||||||
|
@ -315,15 +251,6 @@
|
||||||
glyphs (map #(str (str/join "_" %) ".liga") ligas')
|
glyphs (map #(str (str/join "_" %) ".liga") ligas')
|
||||||
counts (coll/group-by-to count count ligas')]
|
counts (coll/group-by-to count count ligas')]
|
||||||
|
|
||||||
(when-some [unused (not-empty (reduce dissoc ignores ligas'))]
|
|
||||||
(println " WARN Unused ignores" (str/join " " (keys unused))))
|
|
||||||
|
|
||||||
(when-some [unused (not-empty (reduce disj skip-ignores? ligas'))]
|
|
||||||
(println " WARN Unused skip-ignores?" (str/join " " unused)))
|
|
||||||
|
|
||||||
(when-some [unused (not-empty (reduce disj manual? ligas))]
|
|
||||||
(println " WARN Unused manual?" (str/join " " unused)))
|
|
||||||
|
|
||||||
(println " generated calt:"
|
(println " generated calt:"
|
||||||
; (str/join " " glyphs)
|
; (str/join " " glyphs)
|
||||||
(str
|
(str
|
||||||
|
@ -332,4 +259,7 @@
|
||||||
(get counts 4) " quadruples, "
|
(get counts 4) " quadruples, "
|
||||||
(count ligas') " total" #_")"))
|
(count ligas') " total" #_")"))
|
||||||
|
|
||||||
(glyphs/update-code font :features "calt" (constantly calt))))
|
(glyphs/update-code font :features "calt"
|
||||||
|
#(str/replace %
|
||||||
|
#"### start of generated calt\n[^#]+\n### end of generated calt\n"
|
||||||
|
(str "### start of generated calt\n" calt "\n### end of generated calt\n")))))
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
(ns fira-code.checks
|
|
||||||
(:require
|
|
||||||
[clojure.string :as str]
|
|
||||||
[fira-code.coll :as coll]
|
|
||||||
[fira-code.glyphs :as glyphs]))
|
|
||||||
|
|
||||||
(defn width-ok? [w]
|
|
||||||
(#{"0" 0 1200} w))
|
|
||||||
|
|
||||||
(defn widths [font]
|
|
||||||
(doseq [g (:glyphs font)
|
|
||||||
:when (not= "0" (:export g))
|
|
||||||
:let [[w & _ :as ws] (mapv :width (:layers g))]]
|
|
||||||
(when-not (apply = ws)
|
|
||||||
(println (str "WARN glyph '" (:glyphname g) "' has different widths=" (pr-str ws))))
|
|
||||||
(when-not (width-ok? w)
|
|
||||||
(println (str "WARN glyph '" (:glyphname g) "' has unexpected width=" (pr-str w)))))
|
|
||||||
font)
|
|
||||||
|
|
||||||
(defn -main [& args]
|
|
||||||
(let [path (or (first args) "FiraCode.glyphs")
|
|
||||||
font (glyphs/load path)]
|
|
||||||
(widths font)))
|
|
|
@ -1,18 +0,0 @@
|
||||||
(ns fira-code.classes
|
|
||||||
(:require
|
|
||||||
[clojure.java.io :as io]
|
|
||||||
[clojure.string :as str]
|
|
||||||
[fira-code.glyphs :as glyphs]
|
|
||||||
[fira-code.files :as files]))
|
|
||||||
|
|
||||||
|
|
||||||
(defn fill-class [font file]
|
|
||||||
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
|
|
||||||
code (slurp file)
|
|
||||||
class {:code (str/trim code)
|
|
||||||
:name name}]
|
|
||||||
(glyphs/set-class font name class)))
|
|
||||||
|
|
||||||
|
|
||||||
(defn fill-all [font]
|
|
||||||
(reduce fill-class font (files/find "classes" #"classes/[^/]+\.fea")))
|
|
|
@ -3,9 +3,8 @@
|
||||||
|
|
||||||
(defn index-of [pred xs]
|
(defn index-of [pred xs]
|
||||||
(let [res (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)]
|
(let [res (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)]
|
||||||
(if (>= res (count xs))
|
(assert (< res (count xs)) "Nothing found")
|
||||||
-1
|
res))
|
||||||
res)))
|
|
||||||
|
|
||||||
|
|
||||||
(defn group-by-to [key-fn value-fn xs]
|
(defn group-by-to [key-fn value-fn xs]
|
||||||
|
@ -14,12 +13,3 @@
|
||||||
(assoc m k (value-fn vs)))
|
(assoc m k (value-fn vs)))
|
||||||
{}
|
{}
|
||||||
(group-by key-fn xs)))
|
(group-by key-fn xs)))
|
||||||
|
|
||||||
|
|
||||||
(defn multimap-by [f & kvs]
|
|
||||||
(reduce
|
|
||||||
(fn [m [k v]]
|
|
||||||
(if (contains? m k)
|
|
||||||
(update m k f v)
|
|
||||||
(assoc m k v)))
|
|
||||||
{} (partition 2 kvs)))
|
|
|
@ -1,37 +0,0 @@
|
||||||
(ns fira-code.features
|
|
||||||
(:require
|
|
||||||
[clojure.java.io :as io]
|
|
||||||
[clojure.string :as str]
|
|
||||||
[fira-code.glyphs :as glyphs]
|
|
||||||
[fira-code.files :as files]))
|
|
||||||
|
|
||||||
|
|
||||||
(defn append-calt [font]
|
|
||||||
(let [features (->> (files/find "features/calt" #"features/calt/[^/]+\.fea")
|
|
||||||
(map slurp)
|
|
||||||
(map str/trim)
|
|
||||||
(str/join "\n\n"))]
|
|
||||||
(println " appending to feature calt" (glyphs/lines features) "lines")
|
|
||||||
(glyphs/update-code font :features "calt"
|
|
||||||
#(str % "\n\n" features))))
|
|
||||||
|
|
||||||
|
|
||||||
(defn fill-feature [font file]
|
|
||||||
(let [[_ name] (re-matches #"([^.]+)\.fea" (.getName file))
|
|
||||||
code (slurp file)
|
|
||||||
[_ notes code'] (re-matches #"(?s)#([^\n]+)\n(.*)" code)
|
|
||||||
feature (cond-> {:code (str/trim (or code' code))
|
|
||||||
:name name}
|
|
||||||
notes
|
|
||||||
(assoc :notes (str/trim notes)))]
|
|
||||||
(glyphs/set-feature font name feature)))
|
|
||||||
|
|
||||||
|
|
||||||
(defn fill-features [font]
|
|
||||||
(reduce fill-feature font (files/find "features" #"features/[^/]+\.fea")))
|
|
||||||
|
|
||||||
|
|
||||||
(defn fill-all [font]
|
|
||||||
(-> font
|
|
||||||
(append-calt)
|
|
||||||
(fill-features)))
|
|
|
@ -1,12 +0,0 @@
|
||||||
(ns fira-code.files
|
|
||||||
(:refer-clojure :exclude [find])
|
|
||||||
(:require
|
|
||||||
[clojure.java.io :as io]
|
|
||||||
[clojure.string :as str]))
|
|
||||||
|
|
||||||
|
|
||||||
(defn find [path re]
|
|
||||||
(->> (file-seq (io/file path))
|
|
||||||
(next) ;; skip directory itself
|
|
||||||
(filter #(re-matches re (.getPath %)))
|
|
||||||
(sort-by #(.getPath %))))
|
|
|
@ -154,51 +154,18 @@
|
||||||
|
|
||||||
(defn update-code [font key name f & args]
|
(defn update-code [font key name f & args]
|
||||||
(let [idx (coll/index-of #(= (:name %) name) (get font key))]
|
(let [idx (coll/index-of #(= (:name %) name) (get font key))]
|
||||||
(assert (>= idx 0) (str "Can’t find " key "[name=\"" name "\"], got " (str/join ", " (map :name (get font key)))))
|
|
||||||
(apply update-in font [key idx :code] f args)))
|
(apply update-in font [key idx :code] f args)))
|
||||||
|
|
||||||
|
|
||||||
(defn lines [s]
|
|
||||||
(inc (count (re-seq #"\n" s))))
|
|
||||||
|
|
||||||
|
|
||||||
(defn words [s]
|
|
||||||
(count (re-seq #"[^\s]+" s)))
|
|
||||||
|
|
||||||
|
|
||||||
(defn set-feature [font name feature]
|
|
||||||
(let [idx (coll/index-of #(= (:name %) name) (:features font))]
|
|
||||||
(if (pos? idx)
|
|
||||||
(do
|
|
||||||
(println " replacing feature" name "with" (lines (:code feature)) "lines")
|
|
||||||
(assoc-in font [:features idx] feature))
|
|
||||||
(do
|
|
||||||
(println " appending to feature" name (lines (:code feature)) "lines")
|
|
||||||
(update font :features conj feature)))))
|
|
||||||
|
|
||||||
|
|
||||||
(defn set-class [font name class]
|
|
||||||
(let [idx (coll/index-of #(= (:name %) name) (:classes font))]
|
|
||||||
(if (pos? idx)
|
|
||||||
(do
|
|
||||||
(println " replacing class" name "with" (words (:code class)) "entries")
|
|
||||||
(assoc-in font [:classes idx] class))
|
|
||||||
(do
|
|
||||||
(println " appending to class" name (words (:code class)) "entries")
|
|
||||||
(update font :classes conj class)))))
|
|
||||||
|
|
||||||
|
|
||||||
(def weights
|
(def weights
|
||||||
{:Light "B67F0F2D-EC95-4CB8-966E-23AE86958A69"
|
{:Light "B67F0F2D-EC95-4CB8-966E-23AE86958A69"
|
||||||
:Regular "UUID0"
|
:Regular "UUID0"
|
||||||
:Bold "4B7A3BAF-EAD8-4024-9BEA-BB1DE86CFCFA"})
|
:Bold "4B7A3BAF-EAD8-4024-9BEA-BB1DE86CFCFA"})
|
||||||
|
|
||||||
|
|
||||||
(defn layer [l]
|
(defn layer [l]
|
||||||
{ :id (condp = (:layerId l)
|
{ :id (case (:layerId l)
|
||||||
(:Light weights) "Light"
|
((:Regular weights)) "Regular"
|
||||||
(:Regular weights) "Regular"
|
((:Bold weights)) "Bold"
|
||||||
(:Bold weights) "Bold"
|
|
||||||
(:layerId l))
|
(:layerId l))
|
||||||
:width (:width l) })
|
:width (:width l) })
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,6 @@
|
||||||
[clojure.string :as str]
|
[clojure.string :as str]
|
||||||
[fira-code.calt :as calt]
|
[fira-code.calt :as calt]
|
||||||
[fira-code.coll :as coll]
|
[fira-code.coll :as coll]
|
||||||
[fira-code.checks :as checks]
|
|
||||||
[fira-code.classes :as classes]
|
|
||||||
[fira-code.features :as features]
|
|
||||||
[fira-code.glyphs :as glyphs]
|
[fira-code.glyphs :as glyphs]
|
||||||
[fira-code.not-space :as not-space]
|
[fira-code.not-space :as not-space]
|
||||||
[fira-code.spacers :as spacers]
|
[fira-code.spacers :as spacers]
|
||||||
|
@ -24,10 +21,7 @@
|
||||||
(str/split liga #"_")) ;; [ ["dash" "greater" "greater"] ... ]
|
(str/split liga #"_")) ;; [ ["dash" "greater" "greater"] ... ]
|
||||||
font' (-> font
|
font' (-> font
|
||||||
(calt/replace-calt ligas)
|
(calt/replace-calt ligas)
|
||||||
(classes/fill-all)
|
|
||||||
(features/fill-all)
|
|
||||||
(spacers/add-spacers ligas)
|
(spacers/add-spacers ligas)
|
||||||
(not-space/regen-not-space)
|
(not-space/regen-not-space))]
|
||||||
(checks/widths))]
|
|
||||||
(glyphs/save! path font')
|
(glyphs/save! path font')
|
||||||
(println)))
|
(println)))
|
|
@ -1,72 +0,0 @@
|
||||||
(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})))
|
|
5
deps.edn
|
@ -1,5 +1,4 @@
|
||||||
{:paths ["clojure"]
|
{:paths ["clojure"]
|
||||||
:deps {org.clojure/clojure {:mvn/version "1.11.1"}
|
:deps {org.clojure/clojure {:mvn/version "1.10.1"}
|
||||||
org.flatland/ordered {:mvn/version "1.5.7"}
|
org.flatland/ordered {:mvn/version "1.5.7"}
|
||||||
fipp/fipp {:mvn/version "0.6.18"}
|
fipp/fipp {:mvn/version "0.6.18"}}}
|
||||||
org.clojure/tools.namespace {:mvn/version "1.3.0"}}}
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ OR
|
||||||
Use http://brew.sh:
|
Use http://brew.sh:
|
||||||
|
|
||||||
`brew tap homebrew/cask-fonts`
|
`brew tap homebrew/cask-fonts`
|
||||||
`brew install font-fira-code`
|
`brew cask install font-fira-code`
|
||||||
|
|
||||||
|
|
||||||
Ubuntu Zesty (17.04), Debian Stretch (9) or newer
|
Ubuntu Zesty (17.04), Debian Stretch (9) or newer
|
||||||
|
@ -40,7 +40,7 @@ Ubuntu Zesty (17.04), Debian Stretch (9) or newer
|
||||||
Arch Linux
|
Arch Linux
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Fira Code package is available in the official repository: https://www.archlinux.org/packages/community/any/ttf-fira-code/.
|
Fira Code package is available in the official repository: https://www.archlinux.org/packages/community/any/otf-fira-code/.
|
||||||
|
|
||||||
Variant of Fira Code package is available in the AUR: https://aur.archlinux.org/packages/otf-fira-code-git/.
|
Variant of Fira Code package is available in the AUR: https://aur.archlinux.org/packages/otf-fira-code-git/.
|
||||||
|
|
||||||
|
@ -54,8 +54,11 @@ Gentoo
|
||||||
Fedora
|
Fedora
|
||||||
------
|
------
|
||||||
|
|
||||||
|
A Fedora copr repository is available: https://copr.fedorainfracloud.org/coprs/evana/fira-code-fonts/. Package sources https://gitlab.com/evana11/fira-code-fonts-fedora.
|
||||||
|
|
||||||
To install, perform the following commands:
|
To install, perform the following commands:
|
||||||
|
|
||||||
|
dnf copr enable evana/fira-code-fonts
|
||||||
dnf install fira-code-fonts
|
dnf install fira-code-fonts
|
||||||
|
|
||||||
|
|
||||||
|
@ -155,18 +158,21 @@ Additionally, if a Color Scheme is selected:
|
||||||
4. Select Fira Code as "Primary font" under Settings → Editor → Color Scheme → Color Scheme Font
|
4. Select Fira Code as "Primary font" under Settings → Editor → Color Scheme → Color Scheme Font
|
||||||
|
|
||||||
|
|
||||||
BBEdit
|
BBEdit, TextWrangler
|
||||||
------
|
--------------------
|
||||||
|
|
||||||
1. Install FiraCode as per the [macOS installation instructions](https://github.com/tonsky/FiraCode/wiki/Installing#macos)
|
Run in your terminal:
|
||||||
2. Open BBEdit preferences, Editor Defaults, assign Fira Code as the Default font
|
|
||||||
|
defaults write com.barebones.bbedit "EnableFontLigatures_Fira Code" -bool YES
|
||||||
|
|
||||||
|
Source: https://www.barebones.com/support/bbedit/ExpertPreferences.html
|
||||||
|
|
||||||
|
|
||||||
Brackets
|
Brackets
|
||||||
--------
|
--------
|
||||||
|
|
||||||
1. From the `View` menu choose `Themes....`
|
1. From the `View` menu choose `Themes....`
|
||||||
2. Paste `'Fira Code'`, at the beginning of `Font Family`
|
2. Paste `'Fira Code'`, at the begining of `Font Family`
|
||||||
|
|
||||||
|
|
||||||
Emacs
|
Emacs
|
||||||
|
@ -473,7 +479,7 @@ In a workspace:
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
}
|
}
|
||||||
|
|
||||||
4. Click Apply or OK
|
4. Click Aplly or OK
|
||||||
5. Happy coding!
|
5. Happy coding!
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
src: url('woff2/FiraCode-Light.woff2') format('woff2'),
|
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-weight: 300;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
src: url('woff2/FiraCode-Regular.woff2') format('woff2'),
|
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-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
src: url('woff2/FiraCode-Medium.woff2') format('woff2'),
|
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-weight: 500;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
src: url('woff2/FiraCode-SemiBold.woff2') format('woff2'),
|
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-weight: 600;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
src: url('woff2/FiraCode-Bold.woff2') format('woff2'),
|
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-weight: 700;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
BIN
distr/otf/FiraCode-Bold.otf
Normal file
BIN
distr/otf/FiraCode-Light.otf
Normal file
BIN
distr/otf/FiraCode-Medium.otf
Normal file
BIN
distr/otf/FiraCode-Regular.otf
Normal file
BIN
distr/otf/FiraCode-Retina.otf
Normal file
BIN
distr/otf/FiraCode-SemiBold.otf
Normal file
|
@ -1,5 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
@ -36,60 +36,60 @@
|
||||||
|
|
||||||
<div class="code light"><b># Fira Code Light</b>
|
<div class="code light"><b># Fira Code Light</b>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="code regular"><b># Fira Code Regular</b>
|
<div class="code regular"><b># Fira Code Regular</b>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="code medium"><b># Fira Code Medium</b>
|
<div class="code medium"><b># Fira Code Medium</b>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="code semibold"><b># Fira Code SemiBold</b>
|
<div class="code semibold"><b># Fira Code SemiBold</b>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="code bold"><b># Fira Code Bold</b>
|
<div class="code bold"><b># Fira Code Bold</b>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
||||||
<div id="code_variable" class="code variable"><b># Fira Code Variable</b>
|
<div id="code_variable" class="code variable"><b># Fira Code Variable</b>
|
||||||
|
|
||||||
<input type="range" min="300" max="700" value="400" step="10" style="width: 300px;" oninput="onWeightChange(this.value)" onchange="onWeightChange(this.value)"> <span id="span_wght">400</span>
|
<input type="range" min="300" max="700" value="400" step="10" style="width: 300px;" oninput="onWeightChange(this.value)" onchange="onWeightChange(this.value)"> <span id="span_wght">400</span>
|
||||||
|
|
||||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||||
| n <i><=</i> 0 <i>=></i> []
|
| n <i><=</i> 0 <i>=></i> []
|
||||||
| empty list <i>=></i> []
|
| empty list <i>=></i> []
|
||||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||||
|
|
||||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||||
|
|
BIN
distr/ttf/FiraCode-Bold.ttf
Normal file
BIN
distr/ttf/FiraCode-Light.ttf
Normal file
BIN
distr/ttf/FiraCode-Medium.ttf
Normal file
BIN
distr/ttf/FiraCode-Regular.ttf
Normal file
BIN
distr/ttf/FiraCode-Retina.ttf
Normal file
BIN
distr/ttf/FiraCode-SemiBold.ttf
Normal file
BIN
distr/variable_ttf/FiraCode-VF.ttf
Normal file
BIN
distr/variable_ttf/FiraCodeGX.ttf
Normal file
BIN
distr/woff/FiraCode-Bold.woff
Normal file
BIN
distr/woff/FiraCode-Light.woff
Normal file
BIN
distr/woff/FiraCode-Medium.woff
Normal file
BIN
distr/woff/FiraCode-Regular.woff
Normal file
BIN
distr/woff/FiraCode-SemiBold.woff
Normal file
BIN
distr/woff/FiraCode-VF.woff
Normal file
BIN
distr/woff2/FiraCode-Bold.woff2
Normal file
BIN
distr/woff2/FiraCode-Light.woff2
Normal file
BIN
distr/woff2/FiraCode-Medium.woff2
Normal file
BIN
distr/woff2/FiraCode-Regular.woff2
Normal file
BIN
distr/woff2/FiraCode-SemiBold.woff2
Normal file
BIN
distr/woff2/FiraCode-VF.woff2
Normal file
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 259 KiB |
BIN
extras/math.png
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 168 KiB |
|
@ -1,376 +0,0 @@
|
||||||
.= ..= := ::= =:= __
|
|
||||||
== != === !== =/= =!=
|
|
||||||
|
|
||||||
<-< <<- <-- <- <-> -> --> ->> >->
|
|
||||||
<=< <== <<->> <=> => ==> =>> >=>
|
|
||||||
>>- >- <~> -< -<< =<<
|
|
||||||
<-| <=| /\ \/ |-> |=>
|
|
||||||
<~~ <~ ~~ ~> ~~>
|
|
||||||
|
|
||||||
<<< << <= <> >= >> >>>
|
|
||||||
{. {| [| |] |} .}
|
|
||||||
<:> >:< >:> <:< :>: :<: :> :< >: <:
|
|
||||||
<||| <|| <| <|> |> ||> |||>
|
|
||||||
|
|
||||||
<$ <$> $>
|
|
||||||
<+ <+> +>
|
|
||||||
<* <*> *>
|
|
||||||
|
|
||||||
\n \\ /* */ /// //
|
|
||||||
</ <!-- </> --> />
|
|
||||||
0xF www Fl Tl Il fi fj
|
|
||||||
|
|
||||||
;; :: ::: !! ?? %% &&
|
|
||||||
|| .. ... ..< .? ?.
|
|
||||||
-- --- ++ +++ ** ***
|
|
||||||
|
|
||||||
=~ !~ ~- -~ ~@
|
|
||||||
^= ?= /= /==
|
|
||||||
-| _|_ |- ||-
|
|
||||||
#! #= ## ### ####
|
|
||||||
#{ #[ ]# #( #? #_ #_(
|
|
||||||
|
|
||||||
# Context-aware alignment
|
|
||||||
|
|
||||||
fii fjj
|
|
||||||
a*b a*A B*b A*B *a *A a* A*
|
|
||||||
a-b a-A B-b A-B -a -A a- A-
|
|
||||||
a+b a+A B+b A+B +a +A a+ A+
|
|
||||||
a:b a:A B:b A:B :a :A a: A:
|
|
||||||
|
|
||||||
# Powerline
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Stylistic sets
|
|
||||||
|
|
||||||
r 0 123456789 & && $ <$ <$> $> @ <= >=
|
|
||||||
|
|
||||||
# Unicode
|
|
||||||
|
|
||||||
|
|
||||||
⌀ ⌃ ⌄ ⌅ ⌆ ⌘ ⌤ ⌥ ⎇ ⎋ ⏏ ⎈ ✓ ⌂ ⇪ ⌧ ⌫ ⌦ ⌨ ⏎ <20>
|
|
||||||
☐ ☑ ☒ ■ □ ▢ ▣ ▤ ▦ ▧ ▨ ▩ ◧ ◨ ◩ ◪ ◫ ◰ ◱ ◲ ◳
|
|
||||||
⊜ 🄍 🄎 🄏 🅭 🅮 🅯 🆭
|
|
||||||
⟲ ⟳ ⟰ ⟱ ⟴ ⟵ ⟶ ⟷ ⟸ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿ ↩ ↪ ⇞ ⇟ ⇤ ⇥ ↰ ↱ ↲ ↳ ❰ ❱
|
|
||||||
|
|
||||||
|
|
||||||
≢ ẞ ᐅ ᐊ ∴ ∵ ⎈ ‖ ∧ ∨ ⊢ ⊣ ⊤ ⊥ ⊦ ⊧ ⊨ ⊩ ⊪ ⊫ ⊬ ⊭ ⊮ ⊯
|
|
||||||
⟲ ⟳ ⟰ ⟱ ⟴ ⟵ ⟶ ⟷ ⟸ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿
|
|
||||||
↩ ⇞ ⇟ ⇤ ⇥ ⌀ ⌃ ⌄ ⌅ ⌆ ⌘ ⌤ ⌥ ⎇ ⎋ ⏏ ✓ ☐ ☑ ☒ ▤ ▦ ▧ ▨ ▩
|
|
||||||
␆ ␈ ␇ ␣ ␢ ␘ ␍ ␐ ␡ ␥ ␔ ␑ ␓ ␒ ␙ ␃ ␄ ␗ ␅ ␛ ␜ ␌ ␝ ␉ ␊ ␕  ␀ ␞ ␏ ␎ ␠ ␁ ␂ ␚ ␦ ␖ ␟ ␋
|
|
||||||
ℂ ℍ ℕ ℙ ℚ ℝ ℤ 𝔹 ∀ ∃ ∄ ∅ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊊ ⊋ ∈ ∉ ∊ ∋ ∌ ∍ ∪ ∩
|
|
||||||
☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ 「a」 「a」
|
|
||||||
|
|
||||||
# Box drawing
|
|
||||||
|
|
||||||
╭╌╌╌╌╮ ╭┄┄┄┄╮ ╭┈┈┈┈╮
|
|
||||||
╎ ╏ ┆ ┇ ┊ ┋
|
|
||||||
╎ ╏ ┆ ┇ ┊ ┋
|
|
||||||
╰╍╍╍╍╯ ╰┅┅┅┅╯ ╰┉┉┉┉╯
|
|
||||||
|
|
||||||
┌─┬─┐ ╔╦═╗ ┏━┳┓ ╒═╤═╗ ╭─┰─╮ ○ ○ ◆ ◆
|
|
||||||
├─┼─┤ ╠╬═╣ ┣━╋┫ ├─┼─╢ ┝━╋━┥ ╲ ╱ ╳
|
|
||||||
└─┴─┘ ╚╩═╝ ┗━┻┛ ╘═╧═╝ ╰─┸─╯ ■ ◆ ◆
|
|
||||||
|
|
||||||
# Blocks
|
|
||||||
|
|
||||||
|███ | 50%
|
|
||||||
|
|
||||||
▖ ▗ ▙ ▚ ▛ ▜ ▞ ▟
|
|
||||||
|
|
||||||
▁▂▃▄▅▆▇█▀▔
|
|
||||||
▏
|
|
||||||
▎
|
|
||||||
▍
|
|
||||||
▌
|
|
||||||
▋
|
|
||||||
▊
|
|
||||||
▉
|
|
||||||
▐
|
|
||||||
▕
|
|
||||||
|
|
||||||
# Multi-line brackets
|
|
||||||
|
|
||||||
⎛ 1 ⎞ ⎡ a ⎤ ⎧ x ⎫
|
|
||||||
⎜ 2 ⎟ ⎢ b ⎥ ⎪ y ⎪
|
|
||||||
⎜ 3 ⎟ ⎢ c ⎥ ⎨ z ⎬
|
|
||||||
⎜ 4 ⎟ ⎢ d ⎥ ⎪ y ⎪
|
|
||||||
⎝ 5 ⎠ ⎣ e ⎦ ⎩ x ⎭
|
|
||||||
|
|
||||||
# Stylistic sets
|
|
||||||
|
|
||||||
cv01 a
|
|
||||||
cv02 g
|
|
||||||
cv03..06 i
|
|
||||||
cv07..10 l
|
|
||||||
ss01 r
|
|
||||||
zero, cv11..13 0
|
|
||||||
cv14 3
|
|
||||||
onum 0123456789
|
|
||||||
cv17 ~
|
|
||||||
ss05 @
|
|
||||||
ss04 $
|
|
||||||
cv18 %
|
|
||||||
ss03 &
|
|
||||||
cv15..16 *
|
|
||||||
cv31 ()
|
|
||||||
cv29 {}
|
|
||||||
cv30 |
|
|
||||||
|
|
||||||
ss02 <= >=
|
|
||||||
cv19..20 <=
|
|
||||||
cv23 >=
|
|
||||||
cv21..22 =<
|
|
||||||
ss08 == === != !==
|
|
||||||
cv24 /=
|
|
||||||
ss09 >>= <<= ||= |=
|
|
||||||
cv25 .-
|
|
||||||
cv26 :-
|
|
||||||
cv32 .=
|
|
||||||
cv27 []
|
|
||||||
cv28 {. .}
|
|
||||||
ss06 \\
|
|
||||||
ss07 =~ !~
|
|
||||||
ss10 Fl Tl fi fj fl ft
|
|
||||||
|
|
||||||
# Arbitrary-length arrows #346
|
|
||||||
|
|
||||||
<---------------------------------------------<<
|
|
||||||
<- <-- <--- <---- ----> ---> --> ->
|
|
||||||
>- >-- >--- >---- ----< ---< --< -<
|
|
||||||
|- |-- |--- |---- ----| ---| --| -|
|
|
||||||
<<- <<-- <<--- <<---- ---->> --->> -->> ->>
|
|
||||||
>>- >>-- >>--- >>---- ----<< ---<< --<< -<<
|
|
||||||
||- ||-- ||--- ||---- ----|| ---|| --|| -||
|
|
||||||
----- ----< ---<< ----> --->> ----| ---||
|
|
||||||
<---- <---< <--<< <---> <-->> <---| <--|| --<--
|
|
||||||
<<--- <<--< <<-<< <<--> <<->> <<--| <<-|| -<<-
|
|
||||||
>---- >---< >--<< >---> >-->> >---| >--|| -->--
|
|
||||||
>>--- >>--< >>-<< >>--> >>->> >>--| >>-|| ->>-
|
|
||||||
|---- |---< |--<< |---> |-->> |---| |--|| --|--
|
|
||||||
||--- ||--< ||-<< ||--> ||->> ||--| ||-|| -||-
|
|
||||||
|-<-<<->>->-|-||-|
|
|
||||||
|--<--<<-->>-->--|--||--|
|
|
||||||
|---<---<<--->>--->---|---||---|
|
|
||||||
|
|
||||||
< -< --< ---< ----<
|
|
||||||
<- -<- --<- ---<- ----<-
|
|
||||||
<-- -<-- --<-- ---<-- ----<--
|
|
||||||
<--- -<--- --<--- ---<--- ----<---
|
|
||||||
<---- -<---- --<---- ---<---- ----<----
|
|
||||||
|
|
||||||
> -> --> ---> ---->
|
|
||||||
>- ->- -->- --->- ---->-
|
|
||||||
>-- ->-- -->-- --->-- ---->--
|
|
||||||
>--- ->--- -->--- --->--- ---->---
|
|
||||||
>---- ->---- -->---- --->---- ---->----
|
|
||||||
|
|
||||||
| -| --| ---| ----|
|
|
||||||
|- -|- --|- ---|- ----|-
|
|
||||||
|-- -|-- --|-- ---|-- ----|--
|
|
||||||
|--- -|--- --|--- ---|--- ----|---
|
|
||||||
|---- -|---- --|---- ---|---- ----|----
|
|
||||||
|
|
||||||
<< -<< --<< ---<< ----<<
|
|
||||||
<<- -<<- --<<- ---<<- ----<<-
|
|
||||||
<<-- -<<-- --<<-- ---<<-- ----<<--
|
|
||||||
<<--- -<<--- --<<--- ---<<--- ----<<---
|
|
||||||
<<---- -<<---- --<<---- ---<<---- ----<<----
|
|
||||||
|
|
||||||
>> ->> -->> --->> ---->>
|
|
||||||
>>- ->>- -->>- --->>- ---->>-
|
|
||||||
>>-- ->>-- -->>-- --->>-- ---->>--
|
|
||||||
>>--- ->>--- -->>--- --->>--- ---->>---
|
|
||||||
>>---- ->>---- -->>---- --->>---- ---->>----
|
|
||||||
|
|
||||||
|| -|| --|| ---|| ----||
|
|
||||||
||- -||- --||- ---||- ----||-
|
|
||||||
||-- -||-- --||-- ---||-- ----||--
|
|
||||||
||--- -||--- --||--- ---||--- ----||---
|
|
||||||
||---- -||---- --||---- ---||---- ----||----
|
|
||||||
|
|
||||||
<<< -<<< --<<< ---<<< ----<<<
|
|
||||||
<<<- -<<<- --<<<- ---<<<- ----<<<-
|
|
||||||
<<<-- -<<<-- --<<<-- ---<<<-- ----<<<--
|
|
||||||
<<<--- -<<<--- --<<<--- ---<<<--- ----<<<---
|
|
||||||
<<<---- -<<<---- --<<<---- ---<<<---- ----<<<----
|
|
||||||
|
|
||||||
>>> ->>> -->>> --->>> ---->>>
|
|
||||||
>>>- ->>>- -->>>- --->>>- ---->>>-
|
|
||||||
>>>-- ->>>-- -->>>-- --->>>-- ---->>>--
|
|
||||||
>>>--- ->>>--- -->>>--- --->>>--- ---->>>---
|
|
||||||
>>>---- ->>>---- -->>>---- --->>>---- ---->>>----
|
|
||||||
|
|
||||||
||| -||| --||| ---||| ----|||
|
|
||||||
|||- -|||- --|||- ---|||- ----|||-
|
|
||||||
|||-- -|||-- --|||-- ---|||-- ----|||--
|
|
||||||
|||--- -|||--- --|||--- ---|||--- ----|||---
|
|
||||||
|||---- -|||---- --|||---- ---|||---- ----|||----
|
|
||||||
|
|
||||||
# Equal-based arrows
|
|
||||||
|
|
||||||
<====================================================<<
|
|
||||||
<= <== <=== <==== ====> ===> ==> =>
|
|
||||||
>= >== >=== >==== ====< ===< ==< =<
|
|
||||||
|= |== |=== |==== ====| ===| ==| =|
|
|
||||||
<<= <<== <<=== <<==== ====>> ===>> ==>> =>>
|
|
||||||
>>= >>== >>=== >>==== ====<< ===<< ==<< =<<
|
|
||||||
||= ||== ||=== ||==== ====|| ===|| ==|| =||
|
|
||||||
===== ====< ===<< ====> ===>> ====| ===|| ====/
|
|
||||||
<==== <===< <==<< <===> <==>> <===| <==|| <===/ ==<==
|
|
||||||
<<=== <<==< <<=<< <<==> <<=>> <<==| <<=|| <<==/ =<<=
|
|
||||||
>==== >===< >==<< >===> >==>> >===| >==|| >===/ ==>==
|
|
||||||
>>=== >>==< >>=<< >>==> >>=>> >>==| >>=|| >>==/ =>>=
|
|
||||||
|==== |===< |==<< |===> |==>> |===| |==|| |===/ ==|==
|
|
||||||
||=== ||==< ||=<< ||==> ||=>> ||==| ||=|| ||==/ =||=
|
|
||||||
/==== /===< /==<< /===> /==>> /===| /==|| /===/ ==/==
|
|
||||||
|=<=<<=>>=>=|=||=/=:=!=|
|
|
||||||
|==<==<<==>>==>==|==||==/==:==!==|
|
|
||||||
|===<===<<===>>===>===|===||===/===:===!===|
|
|
||||||
|
|
||||||
< =< ==< ===< ====<
|
|
||||||
<= =<= ==<= ===<= ====<=
|
|
||||||
<== =<== ==<== ===<== ====<==
|
|
||||||
<=== =<=== ==<=== ===<=== ====<===
|
|
||||||
<==== =<==== ==<==== ===<==== ====<====
|
|
||||||
|
|
||||||
> => ==> ===> ====>
|
|
||||||
>= =>= ==>= ===>= ====>=
|
|
||||||
>== =>== ==>== ===>== ====>==
|
|
||||||
>=== =>=== ==>=== ===>=== ====>===
|
|
||||||
>==== =>==== ==>==== ===>==== ====>====
|
|
||||||
|
|
||||||
| =| ==| ===| ====|
|
|
||||||
|= =|= ==|= ===|= ====|=
|
|
||||||
|== =|== ==|== ===|== ====|==
|
|
||||||
|=== =|=== ==|=== ===|=== ====|===
|
|
||||||
|==== =|==== ==|==== ===|==== ====|====
|
|
||||||
|
|
||||||
/ =/ ==/ ===/ ====/
|
|
||||||
/= =/= ==/= ===/= ====/=
|
|
||||||
/== =/== ==/== ===/== ====/==
|
|
||||||
/=== =/=== ==/=== ===/=== ====/===
|
|
||||||
/==== =/==== ==/==== ===/==== ====/====
|
|
||||||
|
|
||||||
: =: ==: ===: ====:
|
|
||||||
:= =:= ==:= ===:= ====:=
|
|
||||||
:== =:== ==:== ===:== ====:==
|
|
||||||
:=== =:=== ==:=== ===:=== ====:===
|
|
||||||
:==== =:==== ==:==== ===:==== ====:====
|
|
||||||
|
|
||||||
! =! ==! ===! ====!
|
|
||||||
!= =!= ==!= ===!= ====!=
|
|
||||||
!== =!== ==!== ===!== ====!==
|
|
||||||
!=== =!=== ==!=== ===!=== ====!===
|
|
||||||
!==== =!==== ==!==== ===!==== ====!====
|
|
||||||
|
|
||||||
<< =<< ==<< ===<< ====<<
|
|
||||||
<<= =<<= ==<<= ===<<= ====<<=
|
|
||||||
<<== =<<== ==<<== ===<<== ====<<==
|
|
||||||
<<=== =<<=== ==<<=== ===<<=== ====<<===
|
|
||||||
<<==== =<<==== ==<<==== ===<<==== ====<<====
|
|
||||||
|
|
||||||
>> =>> ==>> ===>> ====>>
|
|
||||||
>>= =>>= ==>>= ===>>= ====>>=
|
|
||||||
>>== =>>== ==>>== ===>>== ====>>==
|
|
||||||
>>=== =>>=== ==>>=== ===>>=== ====>>===
|
|
||||||
>>==== =>>==== ==>>==== ===>>==== ====>>====
|
|
||||||
|
|
||||||
|| =|| ==|| ===|| ====||
|
|
||||||
||= =||= ==||= ===||= ====||=
|
|
||||||
||== =||== ==||== ===||== ====||==
|
|
||||||
||=== =||=== ==||=== ===||=== ====||===
|
|
||||||
||==== =||==== ==||==== ===||==== ====||====
|
|
||||||
|
|
||||||
// =// ==// ===// ====//
|
|
||||||
//= =//= ==//= ===//= ====//=
|
|
||||||
//== =//== ==//== ===//== ====//==
|
|
||||||
//=== =//=== ==//=== ===//=== ====//===
|
|
||||||
//==== =//==== ==//==== ===//==== ====//====
|
|
||||||
|
|
||||||
:: =:: ==:: ===:: ====::
|
|
||||||
::= =::= ==::= ===::= ====::=
|
|
||||||
::== =::== ==::== ===::== ====::==
|
|
||||||
::=== =::=== ==::=== ===::=== ====::===
|
|
||||||
::==== =::==== ==::==== ===::==== ====::====
|
|
||||||
|
|
||||||
!! =!! ==!! ===!! ====!!
|
|
||||||
!!= =!!= ==!!= ===!!= ====!!=
|
|
||||||
!!== =!!== ==!!== ===!!== ====!!==
|
|
||||||
!!=== =!!=== ==!!=== ===!!=== ====!!===
|
|
||||||
!!==== =!!==== ==!!==== ===!!==== ====!!====
|
|
||||||
|
|
||||||
<<< =<<< ==<<< ===<<< ====<<<
|
|
||||||
<<<= =<<<= ==<<<= ===<<<= ====<<<=
|
|
||||||
<<<== =<<<== ==<<<== ===<<<== ====<<<==
|
|
||||||
<<<=== =<<<=== ==<<<=== ===<<<=== ====<<<===
|
|
||||||
<<<==== =<<<==== ==<<<==== ===<<<==== ====<<<====
|
|
||||||
|
|
||||||
>>> =>>> ==>>> ===>>> ====>>>
|
|
||||||
>>>= =>>>= ==>>>= ===>>>= ====>>>=
|
|
||||||
>>>== =>>>== ==>>>== ===>>>== ====>>>==
|
|
||||||
>>>=== =>>>=== ==>>>=== ===>>>=== ====>>>===
|
|
||||||
>>>==== =>>>==== ==>>>==== ===>>>==== ====>>>====
|
|
||||||
|
|
||||||
||| =||| ==||| ===||| ====|||
|
|
||||||
|||= =|||= ==|||= ===|||= ====|||=
|
|
||||||
|||== =|||== ==|||== ===|||== ====|||==
|
|
||||||
|||=== =|||=== ==|||=== ===|||=== ====|||===
|
|
||||||
|||==== =|||==== ==|||==== ===|||==== ====|||====
|
|
||||||
|
|
||||||
/// =/// ==/// ===/// ====///
|
|
||||||
///= =///= ==///= ===///= ====///=
|
|
||||||
///== =///== ==///== ===///== ====///==
|
|
||||||
///=== =///=== ==///=== ===///=== ====///===
|
|
||||||
///==== =///==== ==///==== ===///==== ====///====
|
|
||||||
|
|
||||||
::: =::: ==::: ===::: ====:::
|
|
||||||
:::= =:::= ==:::= ===:::= ====:::=
|
|
||||||
:::== =:::== ==:::== ===:::== ====:::==
|
|
||||||
:::=== =:::=== ==:::=== ===:::=== ====:::===
|
|
||||||
:::==== =:::==== ==:::==== ===:::==== ====:::====
|
|
||||||
|
|
||||||
!!! =!!! ==!!! ===!!! ====!!!
|
|
||||||
!!!= =!!!= ==!!!= ===!!!= ====!!!=
|
|
||||||
!!!== =!!!== ==!!!== ===!!!== ====!!!==
|
|
||||||
!!!=== =!!!=== ==!!!=== ===!!!=== ====!!!===
|
|
||||||
!!!==== =!!!==== ==!!!==== ===!!!==== ====!!!====
|
|
||||||
|
|
||||||
# Underscore lines
|
|
||||||
|
|
||||||
_ __ ___ ____
|
|
||||||
_|_ __|_ _|__ __|__
|
|
||||||
_| |_ _||_ __| ___| |__ |___
|
|
||||||
|
|
||||||
# Numbersign lines
|
|
||||||
|
|
||||||
# ## ### #### ##### ######
|
|
||||||
|
|
||||||
# Progress bars
|
|
||||||
|
|
||||||
[...........] [-----------]
|
|
||||||
[#..........] [>----------]
|
|
||||||
[##.........] [=>---------]
|
|
||||||
[###........] [==>--------]
|
|
||||||
[####.......] [===>-------]
|
|
||||||
[#####......] [====>------]
|
|
||||||
[######.....] [=====>-----]
|
|
||||||
[#######....] [======>----]
|
|
||||||
[########...] [=======>---]
|
|
||||||
[#########..] [========>--]
|
|
||||||
[##########.] [=========>-]
|
|
||||||
[###########] [==========>]
|
|
||||||
|
|
||||||
# Sanity check
|
|
||||||
|
|
||||||
- -- --- |> <| ||> <|| |||> <||| <!-- -~ .- ~-
|
|
||||||
|
|
||||||
= == === .= ..= := ::= != !== ?= #= ^=
|
|
||||||
<= <=< <=> <=|
|
|
||||||
>=
|
|
||||||
#548 >=< >=> >=| >=<< >>=<
|
|
||||||
#479 #468 #424 #406 #355 #305 =< ==< =<< |=<
|
|
||||||
#574 :>=
|
|
||||||
#621 <||>
|
|
||||||
#1056 =/
|
|
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 86 KiB |
|
@ -1,25 +0,0 @@
|
||||||
### Vertical-align colon/greater/less
|
|
||||||
|
|
||||||
# :> :< >: <:
|
|
||||||
# :>: :<:
|
|
||||||
# <:> >:< <:< >:>
|
|
||||||
# <::> <::< >::< >::>
|
|
||||||
# <:::> <:::< >:::< >:::>
|
|
||||||
# <::::> <::::< >::::< >::::>
|
|
||||||
|
|
||||||
lookup center {
|
|
||||||
#574 :>= :<=
|
|
||||||
ignore sub colon' [less greater] [equal hyphen];
|
|
||||||
|
|
||||||
#1145 ::< ::> <:: >::
|
|
||||||
ignore sub colon colon' [less greater];
|
|
||||||
ignore sub [less greater]' colon colon;
|
|
||||||
|
|
||||||
# middles & ends
|
|
||||||
sub [less.center greater.center colon.center] colon' by colon.center;
|
|
||||||
sub colon.center [less greater]' by [less.center greater.center];
|
|
||||||
|
|
||||||
# starts
|
|
||||||
sub [less greater]' colon by [less.center greater.center];
|
|
||||||
sub colon' [less greater] by colon.center;
|
|
||||||
} center;
|
|
|
@ -1,15 +0,0 @@
|
||||||
### Logical conjunction/disjunction #738
|
|
||||||
|
|
||||||
lookup slash_backslash {
|
|
||||||
ignore sub @NotSpace slash' backslash;
|
|
||||||
ignore sub slash' backslash @NotSpace;
|
|
||||||
sub slash.spacer backslash' by slash_backslash.liga;
|
|
||||||
sub slash' backslash by slash.spacer;
|
|
||||||
} slash_backslash;
|
|
||||||
|
|
||||||
lookup backslash_slash {
|
|
||||||
ignore sub @NotSpace backslash' slash;
|
|
||||||
ignore sub backslash' slash @NotSpace;
|
|
||||||
sub backslash.spacer slash' by backslash_slash.liga;
|
|
||||||
sub backslash' slash by backslash.spacer;
|
|
||||||
} backslash_slash;
|
|
|
@ -1,9 +0,0 @@
|
||||||
lookup hexadecimal_x {
|
|
||||||
### 0xFF
|
|
||||||
sub [zero zero.zero] x' [@Digit @HexDigit] by x.multiply;
|
|
||||||
sub [zero.tosf zero.zero.tosf zero.tosf.zero] x' [@DigitTosf @HexDigit] by x.multiply.tosf;
|
|
||||||
|
|
||||||
### 800x600
|
|
||||||
sub @Digit x' @Digit by x.multiply;
|
|
||||||
sub @DigitTosf x' @DigitTosf by x.multiply.tosf;
|
|
||||||
} hexadecimal_x;
|
|
|
@ -1,4 +0,0 @@
|
||||||
### Long dashes
|
|
||||||
|
|
||||||
sub twoemdash by hyphen_start.seq hyphen_end.seq;
|
|
||||||
sub threeemdash by hyphen_start.seq hyphen_middle.seq hyphen_end.seq;
|
|
|
@ -1,73 +0,0 @@
|
||||||
lookup equal_arrows {
|
|
||||||
# Disable |||
|
|
||||||
ignore sub bar bar' bar equal;
|
|
||||||
ignore sub bar bar' equal;
|
|
||||||
ignore sub [equal_start.seq equal_middle.seq] bar' bar bar;
|
|
||||||
|
|
||||||
# equal middle & end
|
|
||||||
sub [less_equal_start.seq less_less_equal_start.seq less_equal_middle.seq less_less_equal_middle.seq greater_equal_start.seq greater_greater_equal_start.seq greater_equal_middle.seq greater_greater_equal_middle.seq bar_equal_start.seq bar_bar_equal_start.seq bar_equal_middle.seq bar_bar_equal_middle.seq slash_equal_start.seq slash_slash_equal_start.seq slash_equal_middle.seq slash_slash_equal_middle.seq colon_equal_middle.seq exclam_equal_middle.seq equal_start.seq equal_middle.seq] equal' [equal less greater bar slash colon exclam] by equal_middle.seq;
|
|
||||||
|
|
||||||
sub [less_equal_start.seq less_less_equal_start.seq less_equal_middle.seq less_less_equal_middle.seq greater_equal_start.seq greater_greater_equal_start.seq greater_equal_middle.seq greater_greater_equal_middle.seq bar_equal_start.seq bar_bar_equal_start.seq bar_equal_middle.seq bar_bar_equal_middle.seq slash_equal_start.seq slash_slash_equal_start.seq slash_equal_middle.seq slash_slash_equal_middle.seq colon_equal_middle.seq exclam_equal_middle.seq equal_start.seq equal_middle.seq] equal' by equal_end.seq;
|
|
||||||
|
|
||||||
# double middles
|
|
||||||
sub [equal_start.seq equal_middle.seq] less.spacer less' equal by less_less_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] less' less equal by less.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater.spacer greater' equal by greater_greater_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater' greater equal by greater.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar.spacer bar' equal by bar_bar_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar' bar equal by bar.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash.spacer slash' equal by slash_slash_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash' slash equal by slash.spacer;
|
|
||||||
|
|
||||||
# single middles
|
|
||||||
sub [equal_start.seq equal_middle.seq] less' equal by less_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater' equal by greater_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar' equal by bar_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash' equal by slash_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] colon' equal by colon_equal_middle.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] exclam' equal by exclam_equal_middle.seq;
|
|
||||||
|
|
||||||
# double ends
|
|
||||||
sub [equal_start.seq equal_middle.seq] less.spacer less' by less_less_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] less' less by less.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater.spacer greater' by greater_greater_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater' greater by greater.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar.spacer bar' by bar_bar_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar' bar by bar.spacer;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash.spacer slash' by slash_slash_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash' slash by slash.spacer;
|
|
||||||
|
|
||||||
# single ends
|
|
||||||
sub [equal_start.seq equal_middle.seq] less' by less_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] greater' by greater_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] bar' by bar_equal_end.seq;
|
|
||||||
sub [equal_start.seq equal_middle.seq] slash' by slash_equal_end.seq;
|
|
||||||
|
|
||||||
# double beginnings
|
|
||||||
sub less.spacer less' equal by less_less_equal_start.seq;
|
|
||||||
sub less' less equal by less.spacer;
|
|
||||||
sub greater.spacer greater' equal by greater_greater_equal_start.seq;
|
|
||||||
sub greater' greater equal by greater.spacer;
|
|
||||||
sub bar.spacer bar' equal by bar_bar_equal_start.seq;
|
|
||||||
sub bar' bar equal by bar.spacer;
|
|
||||||
sub slash.spacer slash' equal by slash_slash_equal_start.seq;
|
|
||||||
sub slash' slash equal by slash.spacer;
|
|
||||||
|
|
||||||
# Disable >=< #548
|
|
||||||
sub greater' equal less [equal less] by greater_equal_start.seq;
|
|
||||||
ignore sub greater' equal less;
|
|
||||||
|
|
||||||
# Disable =< #479 #468 #424 #406 #355 #305
|
|
||||||
sub equal' less [equal less] by equal_start.seq;
|
|
||||||
|
|
||||||
# Disable =/ #1056
|
|
||||||
sub equal' slash [equal slash] by equal_start.seq;
|
|
||||||
|
|
||||||
# single beginnings
|
|
||||||
sub less' equal by less_equal_start.seq;
|
|
||||||
sub greater' equal by greater_equal_start.seq;
|
|
||||||
sub bar' equal [equal less greater bar colon exclam slash] by bar_equal_start.seq; # disable |=
|
|
||||||
sub slash' equal by slash_equal_start.seq;
|
|
||||||
sub equal' [equal greater bar colon exclam] by equal_start.seq;
|
|
||||||
|
|
||||||
} equal_arrows;
|
|
|
@ -1,4 +0,0 @@
|
||||||
### fi/fl #795
|
|
||||||
|
|
||||||
sub [f i.salt_low j.salt_low] [i j]' by [i.salt_low j.salt_low];
|
|
||||||
sub [F T I l.salt_low] l' by l.salt_low;
|
|
|
@ -1,13 +0,0 @@
|
||||||
### Greek
|
|
||||||
|
|
||||||
lookup caltGreekUCdiph {
|
|
||||||
sub @GreekUCdiphIOTA Iota' by Iotadieresis;
|
|
||||||
sub @GreekUCdiphUPSILON Upsilon' by Upsilondieresis;
|
|
||||||
} caltGreekUCdiph;
|
|
||||||
|
|
||||||
lookup caltGreekUC {
|
|
||||||
sub @GreekUCAcc' @GreekUC by @GreekUCcalt;
|
|
||||||
sub @GreekUC @GreekUCAcc' by @GreekUCcalt;
|
|
||||||
sub @GreekUCAcc' space @GreekUC by @GreekUCcalt;
|
|
||||||
sub @GreekUC space @GreekUCAcc' by @GreekUCcalt;
|
|
||||||
} caltGreekUC;
|
|
|
@ -1,53 +0,0 @@
|
||||||
### Arbitrary-length arrows #346
|
|
||||||
|
|
||||||
lookup hyphen_arrows {
|
|
||||||
# Disable |||
|
|
||||||
ignore sub bar bar' bar hyphen;
|
|
||||||
ignore sub bar bar' hyphen;
|
|
||||||
ignore sub [hyphen_start.seq hyphen_middle.seq] bar' bar bar;
|
|
||||||
|
|
||||||
# hyphen middle & end
|
|
||||||
sub [less_hyphen_start.seq less_less_hyphen_start.seq less_hyphen_middle.seq less_less_hyphen_middle.seq greater_hyphen_start.seq greater_greater_hyphen_start.seq greater_hyphen_middle.seq greater_greater_hyphen_middle.seq bar_hyphen_start.seq bar_bar_hyphen_start.seq bar_hyphen_middle.seq bar_bar_hyphen_middle.seq hyphen_start.seq hyphen_middle.seq] hyphen' [hyphen less greater bar] by hyphen_middle.seq;
|
|
||||||
|
|
||||||
sub [less_hyphen_start.seq less_less_hyphen_start.seq less_hyphen_middle.seq less_less_hyphen_middle.seq greater_hyphen_start.seq greater_greater_hyphen_start.seq greater_hyphen_middle.seq greater_greater_hyphen_middle.seq bar_hyphen_start.seq bar_bar_hyphen_start.seq bar_hyphen_middle.seq bar_bar_hyphen_middle.seq hyphen_start.seq hyphen_middle.seq] hyphen' by hyphen_end.seq;
|
|
||||||
|
|
||||||
# double middles
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less.spacer less' hyphen by less_less_hyphen_middle.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less' less hyphen by less.spacer;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater.spacer greater' hyphen by greater_greater_hyphen_middle.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater' greater hyphen by greater.spacer;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar.spacer bar' hyphen by bar_bar_hyphen_middle.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar' bar hyphen by bar.spacer;
|
|
||||||
|
|
||||||
# single middles
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less' hyphen by less_hyphen_middle.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater' hyphen by greater_hyphen_middle.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar' hyphen by bar_hyphen_middle.seq;
|
|
||||||
|
|
||||||
# double ends
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less.spacer less' by less_less_hyphen_end.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less' less by less.spacer;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater.spacer greater' by greater_greater_hyphen_end.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater' greater by greater.spacer;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar.spacer bar' by bar_bar_hyphen_end.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar' bar by bar.spacer;
|
|
||||||
|
|
||||||
# single ends
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] less' by less_hyphen_end.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] greater' by greater_hyphen_end.seq;
|
|
||||||
sub [hyphen_start.seq hyphen_middle.seq] bar' by bar_hyphen_end.seq;
|
|
||||||
|
|
||||||
# double beginnings
|
|
||||||
sub less.spacer less' hyphen by less_less_hyphen_start.seq;
|
|
||||||
sub less' less hyphen by less.spacer;
|
|
||||||
sub greater.spacer greater' hyphen by greater_greater_hyphen_start.seq;
|
|
||||||
sub greater' greater hyphen by greater.spacer;
|
|
||||||
sub bar.spacer bar' hyphen by bar_bar_hyphen_start.seq;
|
|
||||||
sub bar' bar hyphen by bar.spacer;
|
|
||||||
|
|
||||||
# single beginnings
|
|
||||||
sub less' hyphen by less_hyphen_start.seq;
|
|
||||||
sub greater' hyphen by greater_hyphen_start.seq;
|
|
||||||
sub bar' hyphen by bar_hyphen_start.seq;
|
|
||||||
sub hyphen' [hyphen less greater bar] by hyphen_start.seq;
|
|
||||||
} hyphen_arrows;
|
|
|
@ -1,40 +0,0 @@
|
||||||
### Lowercase/uppercase operators
|
|
||||||
|
|
||||||
# Must go after hyphen_arrows.fea
|
|
||||||
|
|
||||||
lookup lowercase_hyphen {
|
|
||||||
ignore sub @Tall \hyphen' @Lowercase;
|
|
||||||
ignore sub @Lowercase \hyphen' @Tall;
|
|
||||||
sub \hyphen' @Lowercase by \hyphen.lc;
|
|
||||||
sub @Lowercase \hyphen' by \hyphen.lc;
|
|
||||||
} lowercase_hyphen;
|
|
||||||
|
|
||||||
lookup lowercase_plus {
|
|
||||||
ignore sub @Tall \plus' @Lowercase;
|
|
||||||
ignore sub @Lowercase \plus' @Tall;
|
|
||||||
sub \plus' @Lowercase by \plus.lc;
|
|
||||||
sub @Lowercase \plus' by \plus.lc;
|
|
||||||
} lowercase_plus;
|
|
||||||
|
|
||||||
lookup lowercase_asterisk {
|
|
||||||
ignore sub @Tall \asterisk' @Lowercase;
|
|
||||||
ignore sub @Lowercase \asterisk' @Tall;
|
|
||||||
sub \asterisk' @Lowercase by \asterisk.lc;
|
|
||||||
sub @Lowercase \asterisk' by \asterisk.lc;
|
|
||||||
} lowercase_asterisk;
|
|
||||||
|
|
||||||
lookup lowercase_asteriskmath {
|
|
||||||
ignore sub @Tall \asteriskmath' @Lowercase;
|
|
||||||
ignore sub @Lowercase \asteriskmath' @Tall;
|
|
||||||
sub \asteriskmath' @Lowercase by \asteriskmath.lc;
|
|
||||||
sub @Lowercase \asteriskmath' by \asteriskmath.lc;
|
|
||||||
} lowercase_asteriskmath;
|
|
||||||
|
|
||||||
lookup uppercase_colon {
|
|
||||||
ignore sub @Tall \colon' @Lowercase;
|
|
||||||
ignore sub @Lowercase \colon' @Tall;
|
|
||||||
sub @Tall \colon' by \colon.uc;
|
|
||||||
sub \colon' @Tall by \colon.uc;
|
|
||||||
# pos @Tall \colon' <0 160 0 0>;
|
|
||||||
# pos \colon' @Tall <0 160 0 0>;
|
|
||||||
} uppercase_colon;
|
|
|
@ -1,10 +0,0 @@
|
||||||
lookup numbersigns {
|
|
||||||
# middle parts
|
|
||||||
sub [numbersign_start.seq numbersign_middle.seq] numbersign' numbersign by numbersign_middle.seq;
|
|
||||||
|
|
||||||
# ends
|
|
||||||
sub [numbersign_start.seq numbersign_middle.seq] numbersign' by numbersign_end.seq;
|
|
||||||
|
|
||||||
# beginnings
|
|
||||||
sub numbersign' numbersign by numbersign_start.seq;
|
|
||||||
} numbersigns;
|
|
|
@ -1,14 +0,0 @@
|
||||||
lookup underscores {
|
|
||||||
# middle parts
|
|
||||||
sub [underscore_start.seq underscore_middle.seq] bar' underscore by bar_underscore_middle.seq;
|
|
||||||
|
|
||||||
sub [underscore_start.seq underscore_middle.seq bar_underscore_middle.seq] underscore' bar underscore by underscore_middle.seq;
|
|
||||||
sub [underscore_start.seq underscore_middle.seq bar_underscore_middle.seq] underscore' underscore by underscore_middle.seq;
|
|
||||||
|
|
||||||
# ends
|
|
||||||
sub [underscore_start.seq underscore_middle.seq bar_underscore_middle.seq] underscore' by underscore_end.seq;
|
|
||||||
|
|
||||||
# beginnings
|
|
||||||
sub underscore' bar underscore by underscore_start.seq;
|
|
||||||
sub underscore' underscore by underscore_start.seq;
|
|
||||||
} underscores;
|
|
|
@ -1,12 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,7 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,13 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,13 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,13 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,13 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,8 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,8 +0,0 @@
|
||||||
# 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;
|
|
|
@ -1,8 +0,0 @@
|
||||||
# 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;
|
|