Hasklig - a code font with monospaced ligatures
Python Clojure Batchfile Shell
Latest commit 80d197b Jan 22, 2017 Ian Tuomi Add correct link
Permalink
Failed to load latest commit information.
Italic Update SCP from upstream to b950aab Jan 21, 2017
ItalicMasters V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
Roman Update SCP from upstream to b950aab Jan 21, 2017
RomanMasters V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
emoji Rebuild Hasklig based on latest Source Code Pro Dec 28, 2015
svg Update SCP from upstream to b950aab Jan 21, 2017
.gitignore Update SCP from upstream to 4e56f85 Jul 18, 2016
FontMenuNameDB Rebuild Hasklig based on latest Source Code Pro Dec 28, 2015
GlyphOrderAndAliasDB V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
README.md Add correct link Jan 22, 2017
SourceCodeProSample.png Bring back SCP sample Dec 31, 2015
addSVGtable.py Update SCP from upstream to b950aab Jan 21, 2017
all.rtf V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
build.cmd Update SCP from upstream to b950aab Jan 21, 2017
build.sh Update SCP from upstream to b950aab Jan 21, 2017
buildInstances.sh Update SCP from upstream to 4e56f85 Jul 18, 2016
family.fea Update SCP from upstream to b950aab Jan 21, 2017
gen_calt.clj V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
hasklig_example.png pic Apr 20, 2014
ligatures.fea V1.1: 6 new ligatures, new substitution mechanism, fixed ++/+++ Jan 22, 2017
tables.fea Rebuild Hasklig based on latest Source Code Pro Dec 28, 2015
widthsAdjust.fea Update SCP from upstream to b950aab Jan 21, 2017
widthsAdjust.mark first release Sep 21, 2012

README.md

N.B. This is a fork of the Source Code Pro repository

Hasklig – Ligatures for code

Programming languages are limited to relatively few characters. As a result, combined character operators surfaced quite early, such as the widely used arrow (->), comprised of a hyphen and greater sign. It looks like an arrow if you know the analogy and squint a bit.

Composite glyphs are problematic in languages such as Haskell which utilize these complicated operators (=> -< >>= etc.) extensively. The readability of such complex code improves with pretty printing. Academic articles featuring Haskell code often use lhs2tex to achieve an appealing rendering, but it is of no use when programming.

Some Haskellers have resorted to Unicode symbols (, etc.), which are valid in the ghc. However they are one-character-wide and therefore eye-strainingly small. Furthermore, when displayed as substitutes to the underlying multi-character representation, as [vim2hs] (https://github.com/dag/vim2hs) does, the characters go out of alignment.

Hasklig solves the problem the way typographers have always solved ill-fitting characters which co-occur often: ligatures. The underlying code stays the same — only the representation changes.

Not only can multi-character glyphs be rendered more vividly, other problematic things in monospaced fonts, such as spacing can be corrected.

Download Hasklig Font Family v1.1

Hasklig

Hasklig Sample

Source Code Pro

Source Code Pro Sample

Release notes

  • v1.1
    • New ligatures ->>, :::, >=>, <=<, <=>, <->
    • Switched to newer version of calt code by Nikita Prokopov. It "doesn’t apply ligatures to long sequences of chars, e.g. !!!!, >>>>, etc"
    • Fixed ++ and +++ line inconsistency in heavy italic weights
  • v1.0
    • Updates to the latest version of SCP
    • Hasklig moves to a ligature substitution mechanism borrowed from the excellent Fira Code by Nikita Prokopov
  • v0.9: This is a major update so YMMV. Please report any issues.
    • Converted to UFO format and updated base fonts to benefit from work done on Source Code Pro:
      • Italics!
      • Greek & Cyrillic script support
      • Better powerline symbols
      • Much, much more
    • Added tags that enable support for some IntelliJ IDEA Builds
  • v0.4: New ligatures: <* <*> <+> <$> *** <|> !! || === ==>, Powerline symbol support
  • v0.3: New ligatures: <<< >>> <> and +++
  • v0.2: Lengthened == and /= to match other equals signs
  • v0.1: Ligatures <- -> => >> << >>= =<< .. ... :: -< >- -<< >>- ++ /= and ==

Currently implemented symbols

<* <*> <+> <$> *** <| |> <|> !! || === ==> <<< >>> <> +++ <- -> => >> << >>= =<< .. ... :: -< >- -<< >>- ++ /= ==

Editor Support

This list is compiled based on reports on the current state of support for code editors and terminals. This list

Supported editors

No support

  • Emacs
  • gVim (output corrupted. A patch exists, but it has not been incorporated into mainstream gVim.)
  • iTerm2 (details)
  • Sublime Text (Vote for the enhancement here)
  • Terminal (OSX)
  • Xamarin Studio/Monodevelop

Building the fonts from source

Requirements

To build the binary font files from source, you need to have installed the Adobe Font Development Kit for OpenType (AFDKO). The AFDKO tools are widely used for font development today, and are part of most font editor applications.

Some SVG glyphs are inserted into the fonts using Python FontTools.

Building font instances from masters

This repository only includes so-called master weights of the fonts (effectively extralight and black). The shapes of the weights in between these extremities are calculated by makeInstancesUFO supplied with .designspace files. For convenience, the shell script buildInstances is provided, which executes makeInstancesUFO, calculating all the italic and regular font weight shapes.

$ ./buildInstances.sh

Building one font

The key to building OTF or TTF fonts is makeotf, which is part of the AFDKO toolset. Information and usage instructions can be found by executing makeotf -h.

In this repository, all necessary files are in place for building the OTF and TTF fonts. For example, build a binary OTF font for the Regular style like this:

$ cd Roman/Regular/
$ makeotf -r

Building all fonts

For convenience, a shell script named build is provided in the root directory. It builds all OTFs and TTFs, and can be executed by typing:

$ ./build.sh

or this on Windows:

> build.cmd

Credits

Original idea, design and implementation of code ligatures by Ian Tuomi 2014-2015. This typeface extends Source Code Pro with ligatures.