1
0
Fork 0
mirror of synced 2024-06-16 17:45:00 +12:00

Compare commits

..

No commits in common. "master" and "3" have entirely different histories.
master ... 3

188 changed files with 29134 additions and 45871 deletions

2
.github/FUNDING.yml vendored
View file

@ -1,3 +1,3 @@
github: [tonsky]
patreon: tonsky
custom: https://paypal.me/nikitaprokopov
custom: https://paypal.me/nikitonsky

View file

@ -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

15
.gitignore vendored
View file

@ -1,19 +1,12 @@
*.zip
FiraCode_liga.glyphs
FiraCode_mess.glyphs
target
clojure/*.edn
FiraCode\ (Autosaved).glyphs
.cpcache
.repl-port
master_ufo
instance_ufo
venv
.DS_Store
*.numbers
distr/*/
*.glyphs
!FiraCode.glyphs
.idea
.fleet
*.iml
*.numbers

View file

@ -7,4 +7,4 @@
Mozilla Foundation (https://www.mozilla.org/en-US/contact/)
Telefonica S.A.
Nikita Prokopov (niki@tonsky.me) github.com/tonsky
Nikita Prokopov (prokopov@gmail.com) github.com/tonsky

View file

@ -2,114 +2,7 @@
All notable changes to this project will be documented in this file.
### 7.0
- Fixed overlap in U+2573 #1414
### 6.2
- Fixed monospaced property #1325
### 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)
#### 3.0
- 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]
@ -187,7 +80,7 @@ Removed 44 individual arrow ligatures, replaced with four universal, combinative
- Alternatives (stylistic sets):
- Lowercase `r` (ss01) [#601]
- Less than/greater than `<=` `>=` (ss02) [#263] [#617]
- Ampersand `&` (ss03) [#371] [#617]
- Ampersand `&` (ss03) [#617]
- Dollar sign `$` (ss04) [#617]
- At sign `@` (ss05) [#617] [#748] [#817]
- Thin backslash (ss06) [#577 #720 #825]
@ -269,7 +162,7 @@ Removed 44 individual arrow ligatures, replaced with four universal, combinative
#### 1.102
- Support for IntelliJ-based IDEs ([instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions))
- Support for IntelliJ-based IDEs ([instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions))
- Turned on autohinting
#### 1.101

View file

@ -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

File diff suppressed because one or more lines are too long

240
LEEME.md
View file

@ -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)

View file

@ -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
View file

@ -1,8 +1,6 @@
## Fira Code: free monospaced font with programming ligatures
![Fira Code](./extras/logo.svg)
Read in [Español](./LEEME.md) | [简体中文](./README_CN.md) | [日本語](./README_JA.md)
<img src="./extras/logo.svg">
### Problem
@ -14,108 +12,114 @@ Fira Code is a free monospaced font containing ligatures for common programming
### Download & Install
<a href="https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"><img alt="Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB" src="./extras/download.png" width="520"></a>
**<a href="https://github.com/tonsky/FiraCode/releases/download/3/FiraCode_3.zip">Download Fira Code v3</a>**
Then:
- [How to Install](https://github.com/tonsky/FiraCode/wiki)
- [Troubleshooting](https://github.com/tonsky/FiraCode/wiki#troubleshooting)
- [News & Updates](https://twitter.com/FiraCode)
- <a href="https://github.com/tonsky/FiraCode/wiki">How to Install</a>
- <a href="https://github.com/tonsky/FiraCode/wiki#troubleshooting">Troubleshooting</a>
- <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:
<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 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!
### Whats in the box?
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 whats 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 whats 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="./extras/samples2.png" width="754">
<img src="./showcases/v3/livescript.png">
Clojure:
<img src="./showcases/v3/clojure.png">
Swift:
<img src="./showcases/v3/swift.png">
### Terminal compatibility list
| Works | Doesnt 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
| Works | Doesnt work |
|-------|----------------|
| **Arduino IDE** (2.0+,same instructions as [vscode](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) | **Adobe Dreamweaver** |
| **Abricotine** | **Delphi IDE** |
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | Standalone **Emacs** ([workaround](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
| **Anjuta** (unless at the EOF) | **IDLE** |
| **AppCode** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) | **KDevelop 4** |
| **Atom** 1.1 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | **Monkey Studio IDE** |
| **BBEdit** (14.6+ [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **UltraEdit** (Windows) |
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) |
| **Chocolat** |
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) |
| **Coda 2** |
| **CodeLite** |
| **CodeRunner** |
| **Comma** (Under: Preferences > Editor > Font) |
| **CotEditor** |
| **Eclipse** |
| **elementary Code** |
| **Geany** (1.37+) |
| ----- | -------------- |
| **Abricotine** | **Arduino IDE** |
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** |
| **Anjuta** (unless at the EOF) | **Delphi IDE** |
| **AppCode** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Eclipse** (Windows, [vote here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=398656)) |
| **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)) |
| **BBEdit/TextWrangler** (v. 11 only, [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **Geany** (Windows) |
| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) | **gVim** (Windows [workaround](https://github.com/tonsky/FiraCode/issues/462)) |
| **Chocolat** | **IDLE** |
| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **KDevelop 4** |
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) | **MATLAB** |
| **Coda 2** | **Monkey Studio IDE** |
| **CodeLite** | **UltraEdit** |
| **Eclipse** (macOS 4.7+, Linux) | |
| **elementary Code** | |
| **Geany** (macOS) |
| **gEdit / Pluma** |
| **GNOME Builder** |
| **Godot** |
| **GoormIDE** ([instructions](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) |
| **gVim** ([Windows](https://github.com/tonsky/FiraCode/issues/462), [GTK](https://vimhelp.org/options.txt.html#%27guiligatures%27)) |
| **IntelliJ IDEA** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **IntelliJ IDEA** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
| **Kate, KWrite** |
| **KDevelop 5+** |
| **Komodo** |
@ -125,76 +129,45 @@ Unicode coverage makes Fira Code a great choice for mathematical writing:
| **LINQPad** |
| **MacVim** 7.4 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
| **Mancy** |
| **MATLAB** ([instructions](https://github.com/tonsky/FiraCode/wiki/MATLAB-for-Windows-Instructions)) |
| **Meld** |
| **Mousepad** |
| **NeoVim-gtk** |
| **NetBeans** |
| **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))|
| **Nova** |
| **PhpStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **PyCharm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **QOwnNotes** (21.16.6+) |
| **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)) |
| **QtCreator** |
| **Rider** |
| **RStudio** ([instructions](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
| **RubyMine** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **RubyMine** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
| **Scratch** |
| **Scribus** (1.5.3+) |
| **SublimeText** (3146+) |
| **Spyder IDE** (only with Qt5) |
| **SuperCollider 3** |
| **TeXShop**|
| **TextAdept** (Linux, macOS) |
| **TextEdit** |
| **TextMate 2** |
| **UltraEdit (UEX)** (Linux) |
| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) |
| **Visual Studio** (2015+, [instructions](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) |
| **Visual Studio Code** ([instructions](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
| **WebStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/IntelliJ-products-instructions)) |
| **WebStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) |
| **Xamarin Studio/Monodevelop** |
| **Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin)) |
| **Xi** |
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
### Terminal compatibility list
| Works | Doesnt 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)) |
| Wezs 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
```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 */
@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
@ -206,6 +179,7 @@ code { font-family: 'Fira Code', monospace; }
}
```
- IE 10+, Edge Legacy: enable with `font-feature-settings: "calt";`
- Firefox
- Safari
@ -215,6 +189,7 @@ code { font-family: 'Fira Code', monospace; }
### Projects using Fira Code
- All [JetBrains products](https://www.jetbrains.com/)
- [CodePen](https://codepen.io/)
- [Blink Shell](http://www.blink.sh/)
- [Klipse](http://app.klipse.tech/)
@ -226,7 +201,7 @@ code { font-family: 'Fira Code', monospace; }
### Alternatives
Free monospaced fonts with ligatures:
Other free monospaced fonts with ligatures:
- [Hasklig](https://github.com/i-tu/Hasklig)
- [Monoid](http://larsenwork.com/monoid/)
@ -240,48 +215,21 @@ Free monospaced fonts with ligatures:
Paid monospaced fonts with ligatures:
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm)
- [Mono Lisa](https://www.monolisa.dev/)
- [Mono Lisa](https://monolisa.dev/)
### 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
# install all required build tools
./script/bootstrap_macos.sh
./script/bootstrap
# build the font files
./script/build.sh
./script/build
# install OTFs to ~/Library/Fonts
cp distr/otf/*.otf ~/Library/Fonts
```
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"
./script/install
```
### Credits

View file

@ -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)) |
| Wezs 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)

View file

@ -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)) |
| Wezs 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)

View file

@ -1 +0,0 @@
bracketright braceright parenright

View file

@ -1,13 +0,0 @@
zero
zero.zero
one
two
twoTurned
threeTurned
three
four
five
six
seven
eight
nine

View file

@ -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

View file

@ -1 +0,0 @@
a b c d e f A B C D E F

View file

@ -1 +0,0 @@
bracketleft braceleft parenleft

View file

@ -1 +0,0 @@
@Uppercase zero one two twoTurned threeTurned three four five six seven eight nine @OpeningBracket @ClosingBracket bar

View file

@ -33,31 +33,8 @@
";\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
(coll/multimap-by str
["slash" "asterisk"]
{ ["slash" "asterisk"]
(str
" ignore sub slash' asterisk slash;\n"
" ignore sub asterisk slash' asterisk;\n")
@ -76,16 +53,7 @@
(str
" ignore sub slash asterisk' asterisk asterisk;\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 <||>
["less" "bar" "bar"]
" ignore sub less' bar bar greater;\n"
@ -93,6 +61,17 @@
["bar" "bar" "greater"]
" 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 {|}
["braceleft" "bar"]
" ignore sub braceleft' bar braceright;\n"
@ -109,99 +88,60 @@
;; #410 <*>> <+>> <$>>
["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 <*>>> <+>>> <$>>>
["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 <<*> <<+> <<$>
["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 <<<*> <<<+> <<<$>
["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"]
(str " ignore sub bracketleft equal' equal;\n"
" ignore sub equal' equal bracketright;\n")
" ignore sub bracketleft equal' equal;\n"
;; #948 [===[ ]===]
;; #968 [=== ===]
["equal" "equal" "equal"]
(str " ignore sub bracketleft equal' equal equal;\n"
" ignore sub equal' equal equal bracketright;\n")
" ignore sub bracketleft equal' equal equal;\n"
;; #346 =:=
["colon" "equal"]
" ignore sub equal colon' equal;\n"
["hyphen" "greater"]
" ignore sub bracketleft hyphen' greater;\n"
;; #346 =!=
["exclam" "equal"]
" ignore sub equal exclam' equal;\n"
;; #346 =!==
["exclam" "equal" "equal"]
" ignore sub equal exclam' equal equal;\n"
["hyphen" "hyphen" "greater"]
" ignore sub bracketleft hyphen' hyphen greater;\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"]
(str " ignore sub [less greater bar] hyphen' hyphen;\n"
" ignore sub hyphen' hyphen [less greater bar];\n")
" ignore sub bracketleft hyphen' hyphen;\n"
;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!=
["equal" "equal"]
(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")
))
["hyphen" "hyphen" "hyphen"]
" ignore sub bracketleft hyphen' hyphen hyphen;\n"
})
;; DO NOT generate ignores at all
@ -210,6 +150,8 @@
["less" "asterisk" "greater"]
["less" "plus" "greater"]
["less" "dollar" "greater"]
;; #795
["f" "l"] ["F" "l"] ["T" "l"]
})
@ -293,16 +235,10 @@
(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
(not= 0 pc) pc ;; lower priority first
(not= 0 cc) (- cc) ;; longer first
:else (compare l1 l2)))) ;; alphabetical
(cond
(> (count l1) (count l2)) -1
(< (count l1) (count l2)) 1
:else (compare l1 l2)))
(defn replace-calt [font ligas]
@ -315,15 +251,6 @@
glyphs (map #(str (str/join "_" %) ".liga") 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:"
; (str/join " " glyphs)
(str
@ -332,4 +259,7 @@
(get counts 4) " quadruples, "
(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")))))

View file

@ -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)))

View file

@ -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")))

View file

@ -3,9 +3,8 @@
(defn index-of [pred xs]
(let [res (reduce (fn [i x] (if (pred x) (reduced i) (inc i))) 0 xs)]
(if (>= res (count xs))
-1
res)))
(assert (< res (count xs)) "Nothing found")
res))
(defn group-by-to [key-fn value-fn xs]
@ -13,13 +12,4 @@
(fn [m k vs]
(assoc m k (value-fn vs)))
{}
(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)))
(group-by key-fn xs)))

View file

@ -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)))

View file

@ -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 %))))

View file

@ -154,51 +154,18 @@
(defn update-code [font key name f & args]
(let [idx (coll/index-of #(= (:name %) name) (get font key))]
(assert (>= idx 0) (str "Cant find " key "[name=\"" name "\"], got " (str/join ", " (map :name (get font key)))))
(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
{:Light "B67F0F2D-EC95-4CB8-966E-23AE86958A69"
:Regular "UUID0"
:Bold "4B7A3BAF-EAD8-4024-9BEA-BB1DE86CFCFA"})
(defn layer [l]
{ :id (condp = (:layerId l)
(:Light weights) "Light"
(:Regular weights) "Regular"
(:Bold weights) "Bold"
{ :id (case (:layerId l)
((:Regular weights)) "Regular"
((:Bold weights)) "Bold"
(:layerId l))
:width (:width l) })

View file

@ -3,9 +3,6 @@
[clojure.string :as str]
[fira-code.calt :as calt]
[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.not-space :as not-space]
[fira-code.spacers :as spacers]
@ -24,10 +21,7 @@
(str/split liga #"_")) ;; [ ["dash" "greater" "greater"] ... ]
font' (-> font
(calt/replace-calt ligas)
(classes/fill-all)
(features/fill-all)
(spacers/add-spacers ligas)
(not-space/regen-not-space)
(checks/widths))]
(not-space/regen-not-space))]
(glyphs/save! path font')
(println)))

View file

@ -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})))

View file

@ -1,5 +1,4 @@
{:paths ["clojure"]
:deps {org.clojure/clojure {:mvn/version "1.11.1"}
org.flatland/ordered {:mvn/version "1.5.7"}
fipp/fipp {:mvn/version "0.6.18"}
org.clojure/tools.namespace {:mvn/version "1.3.0"}}}
:deps {org.clojure/clojure {:mvn/version "1.10.1"}
org.flatland/ordered {:mvn/version "1.5.7"}
fipp/fipp {:mvn/version "0.6.18"}}}

View file

@ -27,7 +27,7 @@ OR
Use http://brew.sh:
`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
@ -40,7 +40,7 @@ Ubuntu Zesty (17.04), Debian Stretch (9) or newer
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/.
@ -54,8 +54,11 @@ Gentoo
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:
dnf copr enable evana/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
BBEdit
------
BBEdit, TextWrangler
--------------------
1. Install FiraCode as per the [macOS installation instructions](https://github.com/tonsky/FiraCode/wiki/Installing#macos)
2. Open BBEdit preferences, Editor Defaults, assign Fira Code as the Default font
Run in your terminal:
defaults write com.barebones.bbedit "EnableFontLigatures_Fira Code" -bool YES
Source: https://www.barebones.com/support/bbedit/ExpertPreferences.html
Brackets
--------
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
@ -473,7 +479,7 @@ In a workspace:
font-family: 'Fira Code';
}
4. Click Apply or OK
4. Click Aplly or OK
5. Happy coding!

View file

@ -1,7 +1,7 @@
@font-face {
font-family: 'Fira Code';
src: url('woff2/FiraCode-Light.woff2') format('woff2'),
url('woff/FiraCode-Light.woff') format('woff');
url("woff/FiraCode-Light.woff") format("woff");
font-weight: 300;
font-style: normal;
}
@ -9,7 +9,7 @@
@font-face {
font-family: 'Fira Code';
src: url('woff2/FiraCode-Regular.woff2') format('woff2'),
url('woff/FiraCode-Regular.woff') format('woff');
url("woff/FiraCode-Regular.woff") format("woff");
font-weight: 400;
font-style: normal;
}
@ -17,7 +17,7 @@
@font-face {
font-family: 'Fira Code';
src: url('woff2/FiraCode-Medium.woff2') format('woff2'),
url('woff/FiraCode-Medium.woff') format('woff');
url("woff/FiraCode-Medium.woff") format("woff");
font-weight: 500;
font-style: normal;
}
@ -25,7 +25,7 @@
@font-face {
font-family: 'Fira Code';
src: url('woff2/FiraCode-SemiBold.woff2') format('woff2'),
url('woff/FiraCode-SemiBold.woff') format('woff');
url("woff/FiraCode-SemiBold.woff") format("woff");
font-weight: 600;
font-style: normal;
}
@ -33,7 +33,7 @@
@font-face {
font-family: 'Fira Code';
src: url('woff2/FiraCode-Bold.woff2') format('woff2'),
url('woff/FiraCode-Bold.woff') format('woff');
url("woff/FiraCode-Bold.woff") format("woff");
font-weight: 700;
font-style: normal;
}
@ -41,8 +41,8 @@
@font-face {
font-family: 'Fira Code VF';
src: url('woff2/FiraCode-VF.woff2') format('woff2-variations'),
url('woff/FiraCode-VF.woff') format('woff-variations');
url('woff/FiraCode-VF.woff') format('woff-variations');
/* font-weight requires a range: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide#Using_a_variable_font_font-face_changes */
font-weight: 300 700;
font-style: normal;
}
}

BIN
distr/otf/FiraCode-Bold.otf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
@ -36,60 +36,60 @@
<div class="code light"><b># Fira Code Light</b>
take = (n, [x, <i>...</i>xs]:list) <i>--&gt;</i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</i> reverse</div>
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
<div class="code regular"><b># Fira Code Regular</b>
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</i> reverse</div>
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
<div class="code medium"><b># Fira Code Medium</b>
take = (n, [x, <i>...</i>xs]:list) <i>--&gt;</i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</i> reverse</div>
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
<div class="code semibold"><b># Fira Code SemiBold</b>
take = (n, [x, <i>...</i>xs]:list) <i>--&gt;</i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</i> reverse</div>
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
<div class="code bold"><b># Fira Code Bold</b>
take = (n, [x, <i>...</i>xs]:list) <i>--&gt;</i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</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>
<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>--&gt;</i>
| n <i>&lt;=</i> 0 <i>=&gt;</i> []
| empty list <i>=&gt;</i> []
| otherwise <i>=&gt;</i> [x] <i>++</i> take n-1, xs
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
| n <i><=</i> 0 <i>=></i> []
| empty list <i>=></i> []
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
last3 = reverse <i>&gt;&gt;</i> take 3 <i>&gt;&gt;</i> reverse</div>
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>

BIN
distr/ttf/FiraCode-Bold.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
distr/woff/FiraCode-VF.woff Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

View file

@ -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 =/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

Some files were not shown because too many files have changed in this diff Show more