Skip to content

Commit

Permalink
Fira Code v4
Browse files Browse the repository at this point in the history
  • Loading branch information
tonsky committed May 18, 2020
1 parent 5ef7ba1 commit d42e727
Show file tree
Hide file tree
Showing 57 changed files with 102 additions and 91 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Expand Up @@ -2,14 +2,17 @@

All notable changes to this project will be documented in this file.

#### 4.0 (May 10, 2020)
#### 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)

Expand Down
37 changes: 17 additions & 20 deletions FiraCode.glyphs

Large diffs are not rendered by default.

100 changes: 39 additions & 61 deletions README.md
Expand Up @@ -12,7 +12,7 @@ Fira Code is a free monospaced font containing ligatures for common programming

### Download & Install

**<a href="https://github.com/tonsky/FiraCode/releases/download/3.1/FiraCode_3.1.zip">Download Fira Code v3.1</a>**
<a href="https://github.com/tonsky/FiraCode/releases/download/4/Fira_Code_v4.zip"><img src="./extras/download.png" width="520" height="130"></a>

Then:

Expand All @@ -30,78 +30,37 @@ Fira Code is a personal, free-time project with no funding and huge [feature req

Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.

<img src="./showcases/v3/all_ligatures.png">
<img src="./extras/ligatures.png" width="754" height="1326">

Fira Code comes with a few different character variants, so that everyone can choose what’s best for them. [How to enable](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)
Fira Code comes with huge variety of arrows. Even better: you can make them as long as you like and combine start/middle/end fragments however you want!

<img src="./showcases/v3/stylistic_sets.png">
<img src="./extras/arrows.png" width="754" height="799">

In addition to that, Fira Code contains huge variety of Unicode characters well-suited for technical writing, math formulas and terminal UIs.
Fira Code is not only about ligatures. Some fine-tuning is done for punctuation and frequent letter pairs.

<img src="./showcases/v3/unicode.png">
<img src="./extras/typographics.png" width="754" height="649">

### Code examples
Fira Code comes with a few different character variants, so that everyone can choose what’s best for them. [How to enable.](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets)

Ruby:
<img src="./extras/stylistic_sets.png" width="754" height="391">

<img src="./showcases/v3/ruby.png">
Being programming font, Fira Code has fantastic support for ASCII/box drawing, powerline and other forms of console UIs.

JavaScript:
<img src="./extras/console.png" width="754" height="357">

<img src="./showcases/v3/javascript.png">
Unicode coverage makes Fira Code great choice for mathematical writing.

PHP:
<img src="./extras/math.png" width="754" height="289">

<img src="./showcases/v3/php.png">
### How does it look?

Erlang:

<img src="./showcases/v3/erlang.png">

Elixir:

<img src="/showcases/v3/elixir.png">

Go:

<img src="./showcases/v3/go.png">

LiveScript:

<img src="./showcases/v3/livescript.png">

Clojure:

<img src="./showcases/v3/clojure.png">

Swift:

<img src="./showcases/v3/swift.png">

### Terminal compatibility list

| Works | Doesn’t work |
| ------------------ | ------------------ |
| **Butterfly** | **Alacritty** |
| **crosh** (ChromeOS, [instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | **Windows Console (conhost.exe)** |
| **Hyper.app** | **Cmder** |
| **iTerm 2** ([3.1+](https://gitlab.com/gnachman/iterm2/issues/3568#note_13118332)) | **ConEmu** |
| **Kitty** | **GNOME Terminal** |
| **Konsole** | **mate-terminal** |
| **mintty** (partial support [2.8.3+](https://github.com/mintty/mintty/issues/601))| **PuTTY** |
| **QTerminal** | **rxvt** |
| **Terminal.app** | **xterm** |
| **Termux** | **ZOC** (Windows) |
| **Token2Shell/MD** | **gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal,** and other libvte-based terminals ([bug report](https://bugzilla.gnome.org/show_bug.cgi?id=584160)) |
| **upterm** |
| **Windows Terminal** |
| **ZOC** (macOS) |
| **st** ([patch](https://st.suckless.org/patches/ligatures/)) |
<img src="./extras/samples.png" width="754" height="1068">
<img src="./extras/samples2.png" width="754" height="1257">

### Editor compatibility list

| Works | Doesn’t work |
| ----- | -------------- |
|-------|----------------|
| **Abricotine** | **Arduino IDE** |
| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** |
| **Anjuta** (unless at the EOF) | **Delphi IDE** |
Expand Down Expand Up @@ -160,16 +119,36 @@ Swift:
| **Xi** |
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |

### Terminal compatibility list

| Works | Doesn’t work |
|--------------------|--------------------|
| **Butterfly** | **Alacritty** |
| **crosh** (ChromeOS, [instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | **Windows Console (conhost.exe)** |
| **Hyper.app** | **Cmder** |
| **iTerm 2** ([3.1+](https://gitlab.com/gnachman/iterm2/issues/3568#note_13118332)) | **ConEmu** |
| **Kitty** | **GNOME Terminal** |
| **Konsole** | **mate-terminal** |
| **mintty** (partial support [2.8.3+](https://github.com/mintty/mintty/issues/601))| **PuTTY** |
| **QTerminal** | **rxvt** |
| **Terminal.app** | **xterm** |
| **Termux** | **ZOC** (Windows) |
| **Token2Shell/MD** | **gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal,** and other libvte-based terminals ([bug report](https://bugzilla.gnome.org/show_bug.cgi?id=584160)) |
| **upterm** |
| **Windows Terminal** |
| **ZOC** (macOS) |
| **st** ([patch](https://st.suckless.org/patches/ligatures/)) |

### Browser support

```html
<!-- HTML -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@3/distr/fira_code.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css">
```

```css
/* CSS */
@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@3/distr/fira_code.css);
@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@4/distr/fira_code.css);
```

```css
Expand All @@ -181,7 +160,6 @@ code { font-family: 'Fira Code', monospace; }
}
```


- IE 10+, Edge Legacy: enable with `font-feature-settings: "calt";`
- Firefox
- Safari
Expand All @@ -203,7 +181,7 @@ code { font-family: 'Fira Code', monospace; }

### Alternatives

Other free monospaced fonts with ligatures:
Free monospaced fonts with ligatures:

- [Hasklig](https://github.com/i-tu/Hasklig)
- [Monoid](http://larsenwork.com/monoid/)
Expand Down
Binary file modified distr/otf/FiraCode-Bold.otf
Binary file not shown.
Binary file modified distr/otf/FiraCode-Light.otf
Binary file not shown.
Binary file modified distr/otf/FiraCode-Medium.otf
Binary file not shown.
Binary file modified distr/otf/FiraCode-Regular.otf
Binary file not shown.
Binary file modified distr/otf/FiraCode-Retina.otf
Binary file not shown.
Binary file modified distr/otf/FiraCode-SemiBold.otf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-Bold.ttf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-Light.ttf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-Medium.ttf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-Regular.ttf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-Retina.ttf
Binary file not shown.
Binary file modified distr/ttf/FiraCode-SemiBold.ttf
Binary file not shown.
Binary file modified distr/variable_ttf/FiraCode-VF.ttf
Binary file not shown.
Binary file modified distr/variable_ttf/FiraCodeGX.ttf
Binary file not shown.
Binary file modified distr/woff/FiraCode-Bold.woff
Binary file not shown.
Binary file modified distr/woff/FiraCode-Light.woff
Binary file not shown.
Binary file modified distr/woff/FiraCode-Medium.woff
Binary file not shown.
Binary file modified distr/woff/FiraCode-Regular.woff
Binary file not shown.
Binary file modified distr/woff/FiraCode-SemiBold.woff
Binary file not shown.
Binary file modified distr/woff/FiraCode-VF.woff
Binary file not shown.
Binary file modified distr/woff2/FiraCode-Bold.woff2
Binary file not shown.
Binary file modified distr/woff2/FiraCode-Light.woff2
Binary file not shown.
Binary file modified distr/woff2/FiraCode-Medium.woff2
Binary file not shown.
Binary file modified distr/woff2/FiraCode-Regular.woff2
Binary file not shown.
Binary file modified distr/woff2/FiraCode-SemiBold.woff2
Binary file not shown.
Binary file modified distr/woff2/FiraCode-VF.woff2
Binary file not shown.
Binary file added extras/arrows.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/console.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/download.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/ligatures.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/math.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/samples.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/samples2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
Binary file added extras/stylistic_sets.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extras/typographics.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "firacode",
"version": "3.1.0",
"version": "4.0.0",
"description": "Fira Code: monospaced font with programming ligatures",
"main": "distr/fira_code.css",
"keywords": [
Expand Down
14 changes: 7 additions & 7 deletions script/bootstrap
@@ -1,20 +1,20 @@
#! /bin/bash -ex

sudo easy_install pip
pip3 install virtualenv --user
sudo easy_install-3.7 pip
pip install virtualenv --user
python3 -m virtualenv venv
source venv/bin/activate

# https://github.com/googlefonts/gftools/issues/121
brew install pkg-config
pip3 install -U Pillow==5.4.1 idna==2.8 requests==2.21.0 urllib3==1.24.1
pip install -U Pillow==5.4.1 idna==2.8 requests==2.21.0 urllib3==1.24.1
export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"
pip3 install pycairo
pip3 install git+https://github.com/googlefonts/gftools
pip install pycairo
pip install git+https://github.com/googlefonts/gftools

pip3 install fontmake
pip install fontmake
brew install ttfautohint
brew install woff2
brew tap bramstein/webfonttools
brew install sfnt2woff-zopfli
pip3 install fontbakery
pip install fontbakery
2 changes: 2 additions & 0 deletions script/build_woff
Expand Up @@ -8,6 +8,8 @@ for ttf in $ttfs; do
sfnt2woff-zopfli $ttf
done

rm distr/ttf/FiraCode-Retina.woff

mkdir -p distr/woff
woffs=$(ls distr/*/*.woff)
for woff in $woffs; do
Expand Down
4 changes: 3 additions & 1 deletion script/build_woff2
Expand Up @@ -8,8 +8,10 @@ for ttf in $ttfs; do
woff2_compress $ttf
done

rm distr/ttf/FiraCode-Retina.woff2

mkdir -p distr/woff2
woff2s=$(ls distr/*/*.woff2)
for woff2 in $woff2s; do
mv $woff2 distr/woff2/$(basename $woff2)
done
done
29 changes: 29 additions & 0 deletions script/package.sh
@@ -0,0 +1,29 @@
#!/bin/zsh -euo pipefail

cd "`dirname $0`/.."


setopt BASH_REMATCH
MAJOR=`cat FiraCode.glyphs | grep versionMajor`
VERSION=""

if [[ $MAJOR =~ 'versionMajor = ([0-9]+);' ]] ; then
VERSION="${BASH_REMATCH[2]}"
fi

MINOR=`cat FiraCode.glyphs | grep versionMinor`
if [[ $MINOR =~ 'versionMinor = ([0-9]+);' ]] ; then
MATCH="${BASH_REMATCH[2]}"
if [ "$MATCH" != "0" ] ; then
VERSION="$VERSION.$MATCH"
fi
fi

FILE="Fira_Code_v$VERSION.zip"
rm -f $FILE

pushd distr
find . -not -name ".*" | xargs zip ../$FILE
popd

ls -lah $FILE
Binary file removed showcases/v3/all_ligatures.png
Binary file not shown.
Binary file removed showcases/v3/clojure.png
Binary file not shown.
Binary file removed showcases/v3/elixir.png
Binary file not shown.
Binary file removed showcases/v3/erlang.png
Binary file not shown.
Binary file removed showcases/v3/feature_calt_centering.png
Binary file not shown.
Binary file removed showcases/v3/go.png
Binary file not shown.
Binary file removed showcases/v3/javascript.png
Binary file not shown.
Binary file removed showcases/v3/livescript.png
Binary file not shown.
Binary file removed showcases/v3/php.png
Binary file not shown.
Binary file removed showcases/v3/ruby.png
Binary file not shown.
Binary file removed showcases/v3/stylistic_sets.png
Binary file not shown.
Binary file removed showcases/v3/swift.png
Binary file not shown.
Binary file removed showcases/v3/unicode.png
Binary file not shown.

0 comments on commit d42e727

Please sign in to comment.