Skip to main content

max / quasi-type

7.3 KB · 134 lines History Blame Raw
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