fontist 2.1.3 → 2.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +70 -0
  3. data/.github/workflows/links.yml +100 -0
  4. data/.gitignore +2 -1
  5. data/docs/.vitepress/config.ts +153 -32
  6. data/docs/.vitepress/data/cli-commands.json +461 -0
  7. data/docs/.vitepress/data/exit-codes.json +21 -0
  8. data/docs/.vitepress/data/features.json +44 -0
  9. data/docs/.vitepress/theme/components/HeroCodeBlock.vue +98 -0
  10. data/docs/.vitepress/theme/components/WithinHero.vue +30 -0
  11. data/docs/.vitepress/theme/index.ts +12 -0
  12. data/docs/.vitepress/theme/style.css +152 -0
  13. data/docs/api/errors.md +211 -0
  14. data/docs/api/font.md +101 -0
  15. data/docs/api/fontconfig.md +82 -0
  16. data/docs/api/formula.md +103 -0
  17. data/docs/api/index.md +49 -0
  18. data/docs/api/manifest.md +209 -0
  19. data/docs/cli/cache.md +100 -0
  20. data/docs/cli/config.md +123 -0
  21. data/docs/cli/create-formula.md +65 -0
  22. data/docs/cli/exit-codes.md +73 -0
  23. data/docs/cli/fontconfig.md +85 -0
  24. data/docs/cli/import.md +136 -0
  25. data/docs/cli/index-cmd.md +37 -0
  26. data/docs/cli/index.md +80 -0
  27. data/docs/cli/install.md +52 -0
  28. data/docs/cli/list.md +39 -0
  29. data/docs/cli/manifest.md +110 -0
  30. data/docs/cli/repo.md +142 -0
  31. data/docs/cli/status.md +39 -0
  32. data/docs/cli/uninstall.md +34 -0
  33. data/docs/cli/update.md +31 -0
  34. data/docs/cli/version.md +38 -0
  35. data/docs/components/CliCommand.vue +77 -0
  36. data/docs/components/CliExamples.vue +17 -0
  37. data/docs/components/CliOptions.vue +26 -0
  38. data/docs/components/ExitCodes.vue +18 -0
  39. data/docs/guide/ci.md +4 -0
  40. data/docs/guide/concepts/fonts.md +158 -0
  41. data/docs/guide/concepts/formats.md +234 -0
  42. data/docs/guide/concepts/index.md +109 -0
  43. data/docs/guide/concepts/licenses.md +236 -0
  44. data/docs/guide/concepts/requirements.md +388 -0
  45. data/docs/guide/concepts/variable-fonts.md +212 -0
  46. data/docs/guide/formulas.md +192 -0
  47. data/docs/guide/how-it-works.md +428 -0
  48. data/docs/guide/index.md +26 -47
  49. data/docs/guide/installation.md +105 -0
  50. data/docs/guide/manifests.md +132 -0
  51. data/docs/guide/quick-start.md +76 -0
  52. data/docs/guide/why.md +4 -0
  53. data/docs/index.md +55 -23
  54. data/docs/lychee.toml +33 -0
  55. data/docs/package-lock.json +9 -114
  56. data/docs/package.json +3 -5
  57. data/docs/public/apple-touch-icon.png +0 -0
  58. data/docs/public/favicon-96x96.png +0 -0
  59. data/docs/public/favicon.ico +0 -0
  60. data/docs/public/favicon.svg +1 -0
  61. data/docs/public/logo-full.svg +1 -0
  62. data/docs/public/logo.svg +1 -0
  63. data/docs/public/site.webmanifest +21 -0
  64. data/docs/public/web-app-manifest-192x192.png +0 -0
  65. data/docs/public/web-app-manifest-512x512.png +0 -0
  66. data/lib/fontist/cli.rb +0 -1
  67. data/lib/fontist/version.rb +1 -1
  68. metadata +58 -8
  69. data/.github/workflows/deploy-pages.yml +0 -54
  70. data/.github/workflows/release.yml.orig +0 -36
  71. data/docs/guide/api-ruby.md +0 -189
  72. data/docs/public/hero.png +0 -0
  73. data/docs/public/logo.png +0 -0
  74. data/docs/reference/index.md +0 -143
@@ -0,0 +1,38 @@
1
+ # fontist version
2
+
3
+ Show Fontist version and formulas repository information.
4
+
5
+ ## Syntax
6
+
7
+ ```sh
8
+ fontist version
9
+ ```
10
+
11
+ ## Description
12
+
13
+ Displays:
14
+ - Fontist gem version
15
+ - Formulas repository URL
16
+ - Formulas version/branch
17
+ - Last commit hash and date
18
+
19
+ ## Examples
20
+
21
+ ```sh
22
+ fontist version
23
+ ```
24
+
25
+ Output:
26
+ ```
27
+ fontist: 2.1.3
28
+ formulas:
29
+ repo: https://github.com/fontist/formulas
30
+ version: v1.2.3
31
+ branch: main
32
+ commit: abc1234
33
+ updated: 2024-01-15
34
+ ```
35
+
36
+ ## Related Commands
37
+
38
+ - [fontist update](/cli/update) - Update formulas repository
@@ -0,0 +1,77 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ const props = defineProps({
4
+ command: { type: String, required: true }
5
+ })
6
+ import commands from '../.vitepress/data/cli-commands.json'
7
+ const cmd = computed(() => commands[props.command])
8
+ </script>
9
+
10
+ <template>
11
+ <div v-if="cmd" class="cli-command">
12
+ <p class="description">{{ cmd.description }}</p>
13
+ <pre class="syntax"><code>{{ cmd.syntax }}</code></pre>
14
+
15
+ <h3 v-if="cmd.arguments && cmd.arguments.length">Arguments</h3>
16
+ <table v-if="cmd.arguments && cmd.arguments.length">
17
+ <thead><tr><th>Name</th><th>Required</th><th>Description</th></tr></thead>
18
+ <tbody>
19
+ <tr v-for="arg in cmd.arguments" :key="arg.name">
20
+ <td><code>{{ arg.name }}</code></td>
21
+ <td>{{ arg.required ? 'Yes' : 'No' }}</td>
22
+ <td>{{ arg.description }}</td>
23
+ </tr>
24
+ </tbody>
25
+ </table>
26
+
27
+ <h3 v-if="cmd.options && cmd.options.length">Options</h3>
28
+ <table v-if="cmd.options && cmd.options.length">
29
+ <thead><tr><th>Option</th><th>Alias</th><th>Type</th><th>Description</th></tr></thead>
30
+ <tbody>
31
+ <tr v-for="opt in cmd.options" :key="opt.name">
32
+ <td><code>--{{ opt.name }}</code></td>
33
+ <td><code v-if="opt.alias">-{{ opt.alias }}</code></td>
34
+ <td>{{ opt.type }}</td>
35
+ <td>{{ opt.description }}</td>
36
+ </tr>
37
+ </tbody>
38
+ </table>
39
+
40
+ <h3 v-if="cmd.examples && cmd.examples.length">Examples</h3>
41
+ <div v-if="cmd.examples && cmd.examples.length" class="examples">
42
+ <div v-for="example in cmd.examples" :key="example.command" class="example">
43
+ <p>{{ example.description }}</p>
44
+ <pre><code>{{ example.command }}</code></pre>
45
+ </div>
46
+ </div>
47
+
48
+ <p v-if="cmd.related && cmd.related.length" class="related">
49
+ <strong>Related:</strong>
50
+ <span v-for="rel in cmd.related" :key="rel">
51
+ <a :href="`/cli/${rel}`">{{ rel }}</a>{{ rel !== cmd.related[cmd.related.length-1] ? ', ' : '' }}
52
+ </span>
53
+ </p>
54
+ </div>
55
+ </template>
56
+
57
+ <style scoped>
58
+ .cli-command .syntax {
59
+ margin: 1rem 0;
60
+ }
61
+ .example {
62
+ margin: 0.5rem 0;
63
+ }
64
+ .example p {
65
+ margin: 0;
66
+ font-weight: 500;
67
+ }
68
+ .example pre {
69
+ margin: 0.25rem 0;
70
+ padding: 0.75rem;
71
+ background: var(--vp-code-block-bg);
72
+ border-radius: 4px;
73
+ }
74
+ .related {
75
+ margin-top: 1.5rem;
76
+ }
77
+ </style>
@@ -0,0 +1,17 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ const props = defineProps({
4
+ command: { type: String, required: true }
5
+ })
6
+ import commands from '../.vitepress/data/cli-commands.json'
7
+ const cmd = computed(() => commands[props.command])
8
+ </script>
9
+
10
+ <template>
11
+ <div v-if="cmd && cmd.examples">
12
+ <div v-for="example in cmd.examples" :key="example.command" class="example">
13
+ <p>{{ example.description }}</p>
14
+ <pre><code>{{ example.command }}</code></pre>
15
+ </div>
16
+ </div>
17
+ </template>
@@ -0,0 +1,26 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ const props = defineProps({
4
+ command: { type: String, required: true }
5
+ })
6
+ import commands from '../.vitepress/data/cli-commands.json'
7
+ const cmd = computed(() => commands[props.command])
8
+ </script>
9
+
10
+ <template>
11
+ <div v-if="cmd">
12
+ <table>
13
+ <thead>
14
+ <tr><th>Option</th><th>Alias</th><th>Type</th><th>Description</th></tr>
15
+ </thead>
16
+ <tbody>
17
+ <tr v-for="opt in cmd.options" :key="opt.name">
18
+ <td><code>--{{ opt.name }}</code></td>
19
+ <td><code v-if="opt.alias">-{{ opt.alias }}</code></td>
20
+ <td>{{ opt.type }}</td>
21
+ <td>{{ opt.description }}</td>
22
+ </tr>
23
+ </tbody>
24
+ </table>
25
+ </div>
26
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup>
2
+ import exitCodes from '../.vitepress/data/exit-codes.json'
3
+ </script>
4
+
5
+ <template>
6
+ <table>
7
+ <thead>
8
+ <tr><th>Code</th><th>Name</th><th>Description</th></tr>
9
+ </thead>
10
+ <tbody>
11
+ <tr v-for="code in exitCodes.codes" :key="code.code">
12
+ <td><code>{{ code.code }}</code></td>
13
+ <td>{{ code.name }}</td>
14
+ <td>{{ code.description }}</td>
15
+ </tr>
16
+ </tbody>
17
+ </table>
18
+ </template>
data/docs/guide/ci.md CHANGED
@@ -1,3 +1,7 @@
1
+ ---
2
+ title: CI/CD Integration
3
+ ---
4
+
1
5
  # Using Fontist in CI
2
6
 
3
7
  Fontist works well in CI environments too! You can just `gem install fontist` like normal to get up and running. Hoever, if you don't like waiting for it to compile the native Ruby extensions each time you `gem install fontist` then you might be interested in our premade custom CI helpers.
@@ -0,0 +1,158 @@
1
+ ---
2
+ title: Fonts, Styles & Weights
3
+ ---
4
+
5
+ # Fonts, Styles & Weights
6
+
7
+ Understanding the relationship between font families, styles, and weights is fundamental to working with Fontist.
8
+
9
+ ## Font Family
10
+
11
+ A **Font Family** is a collection of related fonts that share a common design. When you ask Fontist to install "Open Sans", you're requesting a font family.
12
+
13
+ ```
14
+ Open Sans (Family)
15
+ ├── Open Sans Regular
16
+ ├── Open Sans Bold
17
+ ├── Open Sans Italic
18
+ └── Open Sans Bold Italic
19
+ ```
20
+
21
+ ### In Fontist
22
+
23
+ ```bash
24
+ # Install a font family
25
+ fontist install "Open Sans"
26
+
27
+ # List fonts in a family
28
+ fontist list "Open Sans"
29
+ ```
30
+
31
+ ### In Fontisan
32
+
33
+ Fontisan processes entire font families, providing:
34
+ - Format conversion for all styles
35
+ - Subsetting across the family
36
+ - Validation of family consistency
37
+
38
+ ---
39
+
40
+ ## Font Style
41
+
42
+ A **Font Style** is a specific variation within a font family, typically defined by weight and italic/roman distinction.
43
+
44
+ ### Common Styles
45
+
46
+ | Style | Weight | Italic |
47
+ |-------|--------|--------|
48
+ | Regular (Roman) | 400 | No |
49
+ | Italic | 400 | Yes |
50
+ | Bold | 700 | No |
51
+ | Bold Italic | 700 | Yes |
52
+ | Light | 300 | No |
53
+ | Medium | 500 | No |
54
+ | Black | 900 | No |
55
+
56
+ ### Style Naming Conventions
57
+
58
+ Fonts use various naming conventions:
59
+
60
+ ```
61
+ Full Name: "Open Sans Bold Italic"
62
+ Family Name: "Open Sans"
63
+ Style: "Bold Italic"
64
+ PostScript Name: "OpenSans-BoldItalic"
65
+ ```
66
+
67
+ ### In Fontist
68
+
69
+ ```bash
70
+ # Install specific styles (via manifest)
71
+ fontist manifest-install fonts.yml
72
+ ```
73
+
74
+ ```yaml
75
+ # fonts.yml
76
+ Open Sans:
77
+ - Bold
78
+ - Italic
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Font Weight
84
+
85
+ **Font Weight** is a numeric value representing the thickness of characters. The CSS/OpenType standard defines 9 weight values:
86
+
87
+ | Value | Name | Common Use |
88
+ |-------|------|------------|
89
+ | 100 | Thin | Headlines |
90
+ | 200 | Extra Light | Display |
91
+ | 300 | Light | Body text (large) |
92
+ | 400 | Regular/Normal | Body text |
93
+ | 500 | Medium | Emphasis |
94
+ | 600 | Semi Bold | Subheadings |
95
+ | 700 | Bold | Strong emphasis |
96
+ | 800 | Extra Bold | Headlines |
97
+ | 900 | Black | Display |
98
+
99
+ ### Weight in Fontist Manifests
100
+
101
+ ```yaml
102
+ # Request by style name
103
+ Roboto:
104
+ - Bold # Weight 700
105
+ - Medium # Weight 500
106
+
107
+ # Fontist returns paths to these specific weights
108
+ ```
109
+
110
+ ### Weight vs Variable Fonts
111
+
112
+ With static fonts, each weight is a separate file:
113
+
114
+ ```
115
+ Roboto-Regular.ttf (weight 400)
116
+ Roboto-Medium.ttf (weight 500)
117
+ Roboto-Bold.ttf (weight 700)
118
+ ```
119
+
120
+ With variable fonts, weight becomes a continuous axis:
121
+
122
+ ```
123
+ # Variable font with weight axis 100-900
124
+ RobotoFlex-VF.ttf
125
+ └── wght axis: 100 → 900 (any value)
126
+ ```
127
+
128
+ See [Variable Fonts](/guide/concepts/variable-fonts) for more details.
129
+
130
+ ---
131
+
132
+ ## Finding Font Names
133
+
134
+ To use a font with Fontist, you need to know its name:
135
+
136
+ ```bash
137
+ # Search for a font
138
+ fontist list "Segoe"
139
+
140
+ # Check if a font is installed
141
+ fontist status "Open Sans"
142
+ ```
143
+
144
+ ### Name Matching
145
+
146
+ Fontist matches names flexibly:
147
+ - `"Open Sans"` matches the family
148
+ - `"Open Sans Bold"` matches a specific style
149
+ - `"OpenSans-Bold"` matches PostScript name
150
+
151
+ ---
152
+
153
+ ## See Also
154
+
155
+ - [Variable Fonts](/guide/concepts/variable-fonts) - Continuous weight and style axes
156
+ - [Formats & Containers](/guide/concepts/formats) - File formats explained
157
+ - [Requirements](/guide/concepts/requirements) - Specifying fonts in manifests
158
+ - [Manifests Guide](/guide/manifests) - Working with font manifests
@@ -0,0 +1,234 @@
1
+ ---
2
+ title: Formats & Containers
3
+ ---
4
+
5
+ # Formats & Containers
6
+
7
+ Understanding font file formats and containers helps you work with fonts across different platforms and use cases.
8
+
9
+ ## Font Formats
10
+
11
+ **Font Format** refers to the internal structure of the font file. Different formats have different capabilities.
12
+
13
+ ### Comparison Table
14
+
15
+ | Format | Extension | Outlines | Features | Variable | Notes |
16
+ |--------|-----------|----------|----------|----------|-------|
17
+ | TrueType | `.ttf` | Quadratic Bézier | Full | Yes | Most common |
18
+ | OpenType (TT) | `.otf`, `.ttf` | Quadratic | Full | Yes | TrueType outlines |
19
+ | OpenType (CFF) | `.otf` | Cubic Bézier | Full | Yes (CFF2) | PostScript outlines |
20
+ | PostScript Type 1 | `.pfb`, `.pfa` | Cubic | Limited | No | Legacy, deprecated |
21
+ | WOFF | `.woff` | Any | Full | Yes | Compressed web font |
22
+ | WOFF2 | `.woff2` | Any | Full | Yes | Better compression |
23
+
24
+ ### Outline Types
25
+
26
+ #### TrueType (Quadratic Bézier)
27
+
28
+ ```
29
+ Points connected by quadratic curves
30
+ - Simpler math
31
+ - Faster rendering (historically)
32
+ - More points needed for complex curves
33
+ ```
34
+
35
+ #### CFF/PostScript (Cubic Bézier)
36
+
37
+ ```
38
+ Points connected by cubic curves
39
+ - More elegant curves
40
+ - Fewer points needed
41
+ - Professional typography standard
42
+ ```
43
+
44
+ ### OpenType Features
45
+
46
+ Modern fonts (TTF and OTF) support OpenType features:
47
+
48
+ ```
49
+ OpenType Features:
50
+ ├── Glyph substitution (GSUB)
51
+ │ ├── Ligatures (fi, fl → fi, fl)
52
+ │ ├── Small caps
53
+ │ ├── Numerals (lining, old-style, tabular)
54
+ │ └── Stylistic alternates
55
+ ├── Glyph positioning (GPOS)
56
+ │ ├── Kerning
57
+ │ ├── Mark positioning
58
+ │ └── Cursor positioning
59
+ └── Layout scripts
60
+ ├── Latin
61
+ ├── Arabic
62
+ ├── Devanagari
63
+ └── Many more...
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Web Font Formats
69
+
70
+ ### WOFF (Web Open Font Format)
71
+
72
+ - Compressed version of TTF/OTF
73
+ - ~40% smaller than original
74
+ - Supported in all modern browsers
75
+ - Contains same data as source format
76
+
77
+ ### WOFF2
78
+
79
+ - Next-generation web font format
80
+ - ~30% smaller than WOFF
81
+ - Brotli compression
82
+ - Better for large font families
83
+
84
+ ```bash
85
+ # Convert to WOFF2 with Fontisan
86
+ fontisan convert font.ttf font.woff2
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Font Containers
92
+
93
+ **Font Container** formats can hold multiple fonts in a single file, sharing common data to reduce file size.
94
+
95
+ ### Container Types
96
+
97
+ | Container | Extension | Contents | Platform |
98
+ |-----------|-----------|----------|----------|
99
+ | TrueType Collection | `.ttc` | Multiple TTF fonts | Cross-platform |
100
+ | OpenType Collection | `.otc` | Multiple OTF fonts | Cross-platform |
101
+ | Data Fork Font | `.dfont` | Multiple fonts | macOS legacy |
102
+ | Font Suitcase | (no extension) | Multiple fonts | Classic Mac OS |
103
+
104
+ ### When Containers Are Used
105
+
106
+ Containers reduce file size by sharing common tables:
107
+
108
+ ```
109
+ # Separate files (duplicated tables)
110
+ font1.ttf (glyf, head, hmtx, loca...) = 200KB
111
+ font2.ttf (glyf, head, hmtx, loca...) = 200KB
112
+ Total: 400KB
113
+
114
+ # TTC container (shared tables)
115
+ fonts.ttc (shared: glyf, head...) = 300KB
116
+ Savings: 25%
117
+ ```
118
+
119
+ ### Common Container Files
120
+
121
+ | Font Family | Container | Fonts Included |
122
+ |-------------|-----------|----------------|
123
+ | Segoe UI | segoeui.ttc | Regular, Bold, Italic, Bold Italic |
124
+ | Arial | arial.ttf | Multiple weights |
125
+ | MS Gothic | msgothic.ttc | Regular, Bold |
126
+
127
+ ---
128
+
129
+ ## Working with Containers in Fontist
130
+
131
+ ### Installation
132
+
133
+ ```bash
134
+ # Fontist handles containers automatically
135
+ fontist install "Segoe UI"
136
+ ```
137
+
138
+ ### Status Check
139
+
140
+ ```bash
141
+ fontist status "Segoe UI"
142
+ # Returns path to TTC and internal font name
143
+ ```
144
+
145
+ ### Ruby API
146
+
147
+ ```ruby
148
+ # Returns container info
149
+ result = Fontist::Font.find("Segoe UI")
150
+ # => { paths: ["/path/to/segoeui.ttc"], full_name: "Segoe UI" }
151
+
152
+ # The full_name identifies the font within a TTC
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Working with Containers in Fontisan
158
+
159
+ ### Extract from Container
160
+
161
+ ```bash
162
+ # Extract individual font from TTC
163
+ fontisan extract segoeui.ttc --font "Segoe UI Bold" --output bold.ttf
164
+ ```
165
+
166
+ ### Create Container
167
+
168
+ ```bash
169
+ # Create TTC from multiple TTFs
170
+ fontisan create-ttf regular.ttf bold.ttf italic.ttf --output family.ttc
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Format Conversion
176
+
177
+ ### TTF ↔ OTF
178
+
179
+ ```bash
180
+ # Convert TTF to OTF (changes outline type)
181
+ fontisan convert input.ttf output.otf
182
+
183
+ # Note: Outline conversion may affect rendering
184
+ ```
185
+
186
+ ### Desktop ↔ Web
187
+
188
+ ```bash
189
+ # Create web fonts from desktop fonts
190
+ fontisan convert font.ttf font.woff
191
+ fontisan convert font.ttf font.woff2
192
+ ```
193
+
194
+ ### Lossless Operations
195
+
196
+ These operations preserve font data:
197
+ - TTF → WOFF → TTF (round-trip)
198
+ - OTF → WOFF2 → OTF (round-trip)
199
+ - Extract from TTC
200
+
201
+ Lossy operations:
202
+ - TTF → OTF (outline conversion)
203
+ - Subsetting (removes glyphs)
204
+ - Axis reduction (removes variable data)
205
+
206
+ ---
207
+
208
+ ## Platform Considerations
209
+
210
+ ### macOS
211
+
212
+ - Supports TTF, OTF, TTC, OTC
213
+ - Legacy support for dfont
214
+ - Font Book handles all formats
215
+
216
+ ### Windows
217
+
218
+ - Supports TTF, OTF, TTC
219
+ - Fonts in `C:\Windows\Fonts`
220
+ - Per-user fonts in AppData
221
+
222
+ ### Linux
223
+
224
+ - Supports TTF, OTF, TTC
225
+ - Uses fontconfig for discovery
226
+ - Multiple font directories
227
+
228
+ ---
229
+
230
+ ## See Also
231
+
232
+ - [Fonts & Styles](/guide/concepts/fonts) - Basic font concepts
233
+ - [Variable Fonts](/guide/concepts/variable-fonts) - Modern variable fonts
234
+ - [Fontisan Documentation](https://www.fontist.org/fontisan/) - Format conversion tools
@@ -0,0 +1,109 @@
1
+ ---
2
+ title: Font Concepts Overview
3
+ ---
4
+
5
+ # Font Concepts
6
+
7
+ Understanding font terminology is essential for working with Fontist effectively. This section explains the core concepts and how they relate to Fontist, Fontisan, and Formulas.
8
+
9
+ ## Core Hierarchy
10
+
11
+ ```
12
+ Font Family (e.g., "Open Sans")
13
+ ├── Font Style (e.g., "Regular", "Bold", "Italic")
14
+ │ ├── Font Weight (e.g., 400, 700)
15
+ │ └── Variable Font Axes (e.g., weight, width, slant)
16
+ │ └── Font File (physical file on disk)
17
+ │ ├── Font Format (OTF, TTF, PS)
18
+ │ └── Font Container (TTC, OTC, dfont)
19
+ ```
20
+
21
+ ## Topics
22
+
23
+ ### [Fonts & Styles](/guide/concepts/fonts)
24
+ Font families, styles, and weights—the fundamental building blocks.
25
+
26
+ ### [Variable Fonts](/guide/concepts/variable-fonts)
27
+ Modern variable fonts with adjustable axes for weight, width, and more.
28
+
29
+ ### [Formats & Containers](/guide/concepts/formats)
30
+ File formats (TTF, OTF, WOFF) and container formats (TTC, dfont).
31
+
32
+ ### [Licenses](/guide/concepts/licenses)
33
+ Font licensing and how Fontist handles license requirements.
34
+
35
+ ### [Requirements](/guide/concepts/requirements)
36
+ Specifying what fonts your project needs via manifests.
37
+
38
+ ## How Fontist, Fontisan, and Formulas Connect
39
+
40
+ ```
41
+ ┌─────────────────────────────────────────────────────────┐
42
+ │ FONTIST │
43
+ ├─────────────────────────────────────────────────────────┤
44
+ │ Font Requirements (Manifest) │
45
+ │ │ │
46
+ │ ▼ │
47
+ │ ┌──────────────┐ ┌──────────────┐ │
48
+ │ │ Formulas │────▶│ Downloads │ │
49
+ │ │ (Recipes) │ │ & Installs │ │
50
+ │ └──────────────┘ └──────────────┘ │
51
+ │ │ │ │
52
+ │ ▼ ▼ │
53
+ │ ┌──────────────┐ ┌──────────────┐ │
54
+ │ │ License │ │ System Index │ │
55
+ │ │ Management │ │ (Detection) │ │
56
+ │ └──────────────┘ └──────────────┘ │
57
+ │ │ │
58
+ │ ▼ │
59
+ │ Returns Font Paths │
60
+ └─────────────────────────────────────────────────────────┘
61
+
62
+ ┌─────────────────────────────────────────────────────────┐
63
+ │ FONTISAN │
64
+ ├─────────────────────────────────────────────────────────┤
65
+ │ Input: Font files (from Fontist or elsewhere) │
66
+ │ │ │
67
+ │ ▼ │
68
+ │ ┌──────────────┐ ┌──────────────┐ │
69
+ │ │ Convert │ │ Subset │ │
70
+ │ │ TTF↔OTF↔WOFF│ │ Glyphs only │ │
71
+ │ └──────────────┘ └──────────────┘ │
72
+ │ │ │ │
73
+ │ ▼ ▼ │
74
+ │ ┌──────────────┐ ┌──────────────┐ │
75
+ │ │ Validate │ │ Instantiate │ │
76
+ │ │ Check │ │ Variable→ │ │
77
+ │ │ Issues │ │ Static │ │
78
+ │ └──────────────┘ └──────────────┘ │
79
+ │ │ │
80
+ │ ▼ │
81
+ │ Output: Processed Fonts │
82
+ └─────────────────────────────────────────────────────────┘
83
+ ```
84
+
85
+ ## Quick Reference
86
+
87
+ ### File Extensions
88
+
89
+ | Extension | Meaning |
90
+ |-----------|---------|
91
+ | `.ttf` | TrueType Font |
92
+ | `.otf` | OpenType Font |
93
+ | `.ttc` | TrueType Collection |
94
+ | `.otc` | OpenType Collection |
95
+ | `.woff` | Web Open Font Format |
96
+ | `.woff2` | Web Open Font Format 2 |
97
+ | `.dfont` | macOS Data Fork Font |
98
+ | `.pfb` | PostScript Font Binary |
99
+
100
+ ### Common Tasks
101
+
102
+ | Task | Tool | Command |
103
+ |------|------|---------|
104
+ | Install fonts | Fontist | `fontist install "Font Name"` |
105
+ | Check installed | Fontist | `fontist status "Font Name"` |
106
+ | Define requirements | Fontist | Create manifest.yml |
107
+ | Convert formats | Fontisan | `fontisan convert input.ttf output.woff2` |
108
+ | Subset glyphs | Fontisan | `fontisan subset font.ttf --glyphs "ABCabc"` |
109
+ | Create formula | Fontist | `fontist create-formula font.ttf` |