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.
- checksums.yaml +4 -4
- data/.github/workflows/docs.yml +70 -0
- data/.github/workflows/links.yml +100 -0
- data/.gitignore +2 -1
- data/docs/.vitepress/config.ts +153 -32
- data/docs/.vitepress/data/cli-commands.json +461 -0
- data/docs/.vitepress/data/exit-codes.json +21 -0
- data/docs/.vitepress/data/features.json +44 -0
- data/docs/.vitepress/theme/components/HeroCodeBlock.vue +98 -0
- data/docs/.vitepress/theme/components/WithinHero.vue +30 -0
- data/docs/.vitepress/theme/index.ts +12 -0
- data/docs/.vitepress/theme/style.css +152 -0
- data/docs/api/errors.md +211 -0
- data/docs/api/font.md +101 -0
- data/docs/api/fontconfig.md +82 -0
- data/docs/api/formula.md +103 -0
- data/docs/api/index.md +49 -0
- data/docs/api/manifest.md +209 -0
- data/docs/cli/cache.md +100 -0
- data/docs/cli/config.md +123 -0
- data/docs/cli/create-formula.md +65 -0
- data/docs/cli/exit-codes.md +73 -0
- data/docs/cli/fontconfig.md +85 -0
- data/docs/cli/import.md +136 -0
- data/docs/cli/index-cmd.md +37 -0
- data/docs/cli/index.md +80 -0
- data/docs/cli/install.md +52 -0
- data/docs/cli/list.md +39 -0
- data/docs/cli/manifest.md +110 -0
- data/docs/cli/repo.md +142 -0
- data/docs/cli/status.md +39 -0
- data/docs/cli/uninstall.md +34 -0
- data/docs/cli/update.md +31 -0
- data/docs/cli/version.md +38 -0
- data/docs/components/CliCommand.vue +77 -0
- data/docs/components/CliExamples.vue +17 -0
- data/docs/components/CliOptions.vue +26 -0
- data/docs/components/ExitCodes.vue +18 -0
- data/docs/guide/ci.md +4 -0
- data/docs/guide/concepts/fonts.md +158 -0
- data/docs/guide/concepts/formats.md +234 -0
- data/docs/guide/concepts/index.md +109 -0
- data/docs/guide/concepts/licenses.md +236 -0
- data/docs/guide/concepts/requirements.md +388 -0
- data/docs/guide/concepts/variable-fonts.md +212 -0
- data/docs/guide/formulas.md +192 -0
- data/docs/guide/how-it-works.md +428 -0
- data/docs/guide/index.md +26 -47
- data/docs/guide/installation.md +105 -0
- data/docs/guide/manifests.md +132 -0
- data/docs/guide/quick-start.md +76 -0
- data/docs/guide/why.md +4 -0
- data/docs/index.md +55 -23
- data/docs/lychee.toml +33 -0
- data/docs/package-lock.json +9 -114
- data/docs/package.json +3 -5
- data/docs/public/apple-touch-icon.png +0 -0
- data/docs/public/favicon-96x96.png +0 -0
- data/docs/public/favicon.ico +0 -0
- data/docs/public/favicon.svg +1 -0
- data/docs/public/logo-full.svg +1 -0
- data/docs/public/logo.svg +1 -0
- data/docs/public/site.webmanifest +21 -0
- data/docs/public/web-app-manifest-192x192.png +0 -0
- data/docs/public/web-app-manifest-512x512.png +0 -0
- data/lib/fontist/cli.rb +0 -1
- data/lib/fontist/version.rb +1 -1
- metadata +58 -8
- data/.github/workflows/deploy-pages.yml +0 -54
- data/.github/workflows/release.yml.orig +0 -36
- data/docs/guide/api-ruby.md +0 -189
- data/docs/public/hero.png +0 -0
- data/docs/public/logo.png +0 -0
- data/docs/reference/index.md +0 -143
data/docs/cli/version.md
ADDED
|
@@ -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` |
|