| 1 |
# The bases this pipeline may cut a face from, and the slots it cuts. |
| 2 |
# |
| 3 |
# A base is pinned by upstream version and by the sha256 of the archive upstream |
| 4 |
# publishes. A moved upstream is then a checksum failure rather than a silent |
| 5 |
# redraw, which is the whole point of pinning: the same checkout produces the |
| 6 |
# same face, and a base that changed under us says so. |
| 7 |
# |
| 8 |
# Adding a base is a licence read first. Most OFL faces declare a Reserved Font |
| 9 |
# Name, and clause 3 bars it as a prefix and as a suffix alike. The `quasi-*` |
| 10 |
# naming clears that by construction, so the only live gate is "did anyone reach |
| 11 |
# for the base's own name". A base that is not OFL at all needs its own read. |
| 12 |
# |
| 13 |
# A base arrives one of two ways and the pin says which. A release archive gets |
| 14 |
# `url` + `sha256` here and a `path` per face; a project that publishes no |
| 15 |
# releases gets no archive and a `url` per face instead. The second shape exists |
| 16 |
# because the alternative is a generated source tarball, and GitHub builds those |
| 17 |
# on demand: the bytes have changed before under repositories nobody touched, |
| 18 |
# which would read here as "upstream moved" and mean nothing of the sort. |
| 19 |
|
| 20 |
# Atkinson Hyperlegible Mono, the mono slot's base since 2026-08-17. |
| 21 |
# |
| 22 |
# It replaced IBM Plex Mono, which was this file's first base and is gone rather |
| 23 |
# than kept beside it: an unnamed base is a second answer to "what is Quasi Mono |
| 24 |
# cut from", and the pin file is the place that question is settled. The Plex |
| 25 |
# entry is in the history if a comparison is ever wanted (`quasi-type@3d080a6`). |
| 26 |
# What the swap cost is recorded in wiki `typography-standard`: Plex shipped box |
| 27 |
# drawing, block elements and the four arrows complete, Atkinson ships none of |
| 28 |
# them, so the house set carries all 167 rather than the original seven. |
| 29 |
# |
| 30 |
# Variable, `wght` 200-800, one file. Everything about it that is new is in |
| 31 |
# `src/vary.rs`; the short version is that a cut keeps the axis, so the marks |
| 32 |
# carry `gvar` deltas drawn at each end of it. |
| 33 |
# |
| 34 |
# WATCH THE DEFAULT INSTANCE. This face defaults to `wght` 200 and its own name |
| 35 |
# table reads `Atkinson Hyperlegible Mono ExtraLight`. Keeping the axis means |
| 36 |
# keeping that default, so the face below is pinned as `ExtraLight` and the build |
| 37 |
# refuses any other style name. A consumer therefore has to ask for the weight it |
| 38 |
# wants — `font-weight: 200 800` in the `@font-face` and the browser resolves |
| 39 |
# `normal` to 400 — rather than loading the file and getting whatever it opens at. |
| 40 |
# |
| 41 |
# The licence read: OFL 1.1, and **no Reserved Font Name is declared**. The only |
| 42 |
# RFN text in the file is the boilerplate definition, so clause 3 does not bite |
| 43 |
# here at all. `Quasi Mono` clears it either way, on its own grounds. |
| 44 |
[[base]] |
| 45 |
id = "atkinson-mono" |
| 46 |
family = "Atkinson Hyperlegible Mono" |
| 47 |
version = "2.001" |
| 48 |
license = "OFL-1.1" |
| 49 |
license_url = "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next-mono/154d50362016cc3e873eb21d242cd0772384c8f9/OFL.txt" |
| 50 |
license_sha256 = "1ebb31cf7393164f20d10c1d48406cddb5314feff8465531cf1e4ba37e9dd740" |
| 51 |
copyright = "Copyright 2020-2024 The Atkinson Hyperlegible Mono Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next-mono)" |
| 52 |
designer = "Applied Design Works, Letters from Sweden" |
| 53 |
vendor_url = "https://www.brailleinstitute.org/" |
| 54 |
|
| 55 |
# The project publishes no releases and no tags, so the pin is a file at a |
| 56 |
# commit: 154d503, the head of `main` on 2026-08-16. |
| 57 |
[[base.face]] |
| 58 |
style = "ExtraLight" |
| 59 |
url = "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next-mono/154d50362016cc3e873eb21d242cd0772384c8f9/fonts/variable/AtkinsonHyperlegibleMono%5Bwght%5D.ttf" |
| 60 |
sha256 = "5ce8b1698d1ded7dff2178c1a3ad159470085a58ea239e8b2cb88f4fb4a6f646" |
| 61 |
variable = true |
| 62 |
|
| 63 |
# Atkinson Hyperlegible Next, the body slot's base. Same designers, same axis, |
| 64 |
# same licence and no Reserved Font Name; the sans half of the superfamily the |
| 65 |
# typography standard is built on. |
| 66 |
# |
| 67 |
# It is PROPORTIONAL, which is the one thing this pipeline had never cut from. |
| 68 |
# Every mark took the cell, which is true of a monospace face and meaningless |
| 69 |
# here, so `advance` is what the slot has to answer; see the `quasi-body` slot |
| 70 |
# below for what it answers and why. |
| 71 |
# |
| 72 |
# Its default instance is `Regular` at `wght` 400, unlike the mono's ExtraLight, |
| 73 |
# so the ExtraLight trap does not arise on this face. |
| 74 |
[[base]] |
| 75 |
id = "atkinson-next" |
| 76 |
family = "Atkinson Hyperlegible Next" |
| 77 |
version = "2.001" |
| 78 |
license = "OFL-1.1" |
| 79 |
license_url = "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/7925f50f649b3813257faf2f4c0b381011f434f1/OFL.txt" |
| 80 |
license_sha256 = "aca6a428580965d2297d1b718042dd427c2a9443ece3b0d02d758e161e0c4030" |
| 81 |
copyright = "Copyright 2020-2024 The Atkinson Hyperlegible Next Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next)" |
| 82 |
designer = "Applied Design Works, Letters from Sweden" |
| 83 |
vendor_url = "https://www.brailleinstitute.org/" |
| 84 |
|
| 85 |
# No releases and no tags here either, so the pin is a file at a commit: |
| 86 |
# 7925f50, the head of `main` on 2026-08-17. |
| 87 |
[[base.face]] |
| 88 |
style = "Regular" |
| 89 |
url = "https://raw.githubusercontent.com/googlefonts/atkinson-hyperlegible-next/7925f50f649b3813257faf2f4c0b381011f434f1/fonts/variable/AtkinsonHyperlegibleNext%5Bwght%5D.ttf" |
| 90 |
sha256 = "5a455d1cfa099b601ab70751bb9673e8fe1854dc4500c80e1a220d0d75e31745" |
| 91 |
variable = true |
| 92 |
|
| 93 |
# Italic is not cut, for the same reason it is not cut from the mono and with a |
| 94 |
# different amount of doubt. The suite ships a matching italic here |
| 95 |
# (`AtkinsonHyperlegibleNext-Italic[wght].ttf`, sha256 |
| 96 |
# ce9cffed32742ad2d9238c561a93220385e5934cdc02b8eb4097a50efa957dc6 at the same |
| 97 |
# commit) and body text is where an italic actually gets used — but a consumer |
| 98 |
# reaches for italic on *letters*, and letters are the base's own and unmodified. |
| 99 |
# A house mark in an italic run is the upright mark, which is what every text |
| 100 |
# face does with `▲` anyway. So the italic stays stock upstream under upstream's |
| 101 |
# name until something wants a mark slanted, and that is a face away, not a |
| 102 |
# redesign. |
| 103 |
|
| 104 |
|
| 105 |
# A slot is a house type role. The name tracks the slot and not the base, which |
| 106 |
# is what let the base move from Plex Mono to Atkinson on 2026-08-17 without a |
| 107 |
# consumer changing a family name: the output is `Quasi Mono` either way and the |
| 108 |
# base is named in the metadata, where the licence requires it anyway. |
| 109 |
|
| 110 |
[[slot]] |
| 111 |
id = "quasi-mono" |
| 112 |
family = "Quasi Mono" |
| 113 |
base = "atkinson-mono" |
| 114 |
# Every glyph in the house set. A slot may take a subset; none does today. |
| 115 |
glyphs = "*" |
| 116 |
|
| 117 |
# `quasi-body`, cut for the first time 2026-08-17. It was stock IBM Plex Sans |
| 118 |
# with no entry here, on the rule that a slot runs the upstream face under the |
| 119 |
# upstream's own name until it needs the house set. Taking Atkinson for both |
| 120 |
# slots satisfies that condition from the other side: the body slot needs the |
| 121 |
# same marks the mono slot does, for the same reason, so it becomes a real cut. |
| 122 |
# |
| 123 |
# `marks` rather than `*`, and this is the first slot to take a subset. Box |
| 124 |
# drawing and block elements are sized against the cell and have to be |
| 125 |
# cell-exact to tile; a proportional face has no cell, and nothing set in one |
| 126 |
# tiles, so a `┌` here would be a corner that joins nothing. The marks are the |
| 127 |
# half that carries meaning rather than geometry, and meaning is the same in |
| 128 |
# body text as in a terminal — which is the whole argument for a house set. |
| 129 |
[[slot]] |
| 130 |
id = "quasi-body" |
| 131 |
family = "Quasi Body" |
| 132 |
base = "atkinson-next" |
| 133 |
glyphs = "marks" |
| 134 |
|