fontist 1.11.1 → 1.11.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/metanorma.yml +2 -5
- data/.github/workflows/rspec.yml +1 -1
- data/README.adoc +56 -10
- data/fontist.gemspec +2 -2
- data/lib/fontist/cli.rb +5 -10
- data/lib/fontist/font_installer.rb +17 -3
- data/lib/fontist/formula.rb +4 -0
- data/lib/fontist/google_cli.rb +29 -0
- data/lib/fontist/import/formula_builder.rb +17 -1
- data/lib/fontist/import/google/new_fonts_fetcher.rb +44 -33
- data/lib/fontist/import/google.rb +18 -0
- data/lib/fontist/import/google_check.rb +0 -7
- data/lib/fontist/import/google_import.rb +26 -142
- data/lib/fontist/import/helpers/system_helper.rb +1 -1
- data/lib/fontist/import/otf_parser.rb +2 -0
- data/lib/fontist/import/recursive_extraction.rb +4 -1
- data/lib/fontist/index.rb +0 -27
- data/lib/fontist/repo.rb +13 -1
- data/lib/fontist/system_font.rb +10 -7
- data/lib/fontist/system_index.rb +38 -23
- data/lib/fontist/update.rb +4 -29
- data/lib/fontist/utils/downloader.rb +26 -13
- data/lib/fontist/version.rb +1 -1
- data/lib/fontist.rb +21 -15
- metadata +31 -36
- data/.github/workflows/check_google.yml +0 -28
- data/README.md +0 -582
- data/lib/fontist/formula_paths.rb +0 -44
- data/lib/fontist/import/google/fonts_public.md +0 -10
- data/lib/fontist/import/google/fonts_public.pb.rb +0 -71
- data/lib/fontist/import/google/fonts_public.proto +0 -46
data/README.md
DELETED
@@ -1,582 +0,0 @@
|
|
1
|
-
# Fontist
|
2
|
-
|
3
|
-
[![Build Status](https://github.com/fontist/fontist/actions/workflows/rspec.yml/badge.svg)](https://github.com/fontist/fontist/actions/workflows/rspec.yml)
|
4
|
-
[![Gem Version](https://img.shields.io/gem/v/fontist.svg)](https://rubygems.org/gems/fontist)
|
5
|
-
[![Pull Requests](https://img.shields.io/github/issues-pr-raw/fontist/fontist.svg)](https://github.com/fontist/fontist/pulls)
|
6
|
-
|
7
|
-
A simple library to find and download fonts for Windows, Linux and Mac.
|
8
|
-
|
9
|
-
## Installation
|
10
|
-
|
11
|
-
Add this line to your application's Gemfile:
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
gem "fontist"
|
15
|
-
```
|
16
|
-
|
17
|
-
And then execute:
|
18
|
-
|
19
|
-
```sh
|
20
|
-
bundle install
|
21
|
-
```
|
22
|
-
|
23
|
-
Or install it yourself as:
|
24
|
-
|
25
|
-
```sh
|
26
|
-
gem install fontist
|
27
|
-
```
|
28
|
-
|
29
|
-
### Fetch formulas
|
30
|
-
|
31
|
-
After installation please fetch formulas to your system:
|
32
|
-
|
33
|
-
```sh
|
34
|
-
fontist update
|
35
|
-
```
|
36
|
-
|
37
|
-
### Dependencies
|
38
|
-
|
39
|
-
Depends on
|
40
|
-
[ffi-libarchive-binary](https://github.com/fontist/ffi-libarchive-binary) which
|
41
|
-
has the following requirements:
|
42
|
-
|
43
|
-
* zlib
|
44
|
-
* Expat
|
45
|
-
* OpenSSL (for Linux only)
|
46
|
-
|
47
|
-
These dependencies are generally present on all systems.
|
48
|
-
|
49
|
-
## Usage
|
50
|
-
|
51
|
-
### Font
|
52
|
-
|
53
|
-
The `Fontist::Font` is your go to place to deal with any font using fontist. This
|
54
|
-
interface will allow you to find a font or install a font. Lets start with how
|
55
|
-
can we find a font in your system.
|
56
|
-
|
57
|
-
#### Finding a font
|
58
|
-
|
59
|
-
The `Fontist::Font.find` interface can be used a find a font in your system.
|
60
|
-
It will look into the operating system specific font directories, and also the
|
61
|
-
fontist specific `~/.fontist` directory.
|
62
|
-
|
63
|
-
```ruby
|
64
|
-
Fontist::Font.find(name)
|
65
|
-
```
|
66
|
-
|
67
|
-
If fontist find a font then it will return the paths, but if not found then it
|
68
|
-
will could raise an unsupported font error or maybe an installation instruction
|
69
|
-
for that specific font.
|
70
|
-
|
71
|
-
#### Install a font
|
72
|
-
|
73
|
-
The `Fontist::Font.install` interface can be used to install any supported font.
|
74
|
-
This interface first checks if you already have that font installed or not and
|
75
|
-
if you do then it will return the paths.
|
76
|
-
|
77
|
-
If you don't but supported by fontist, then it will download the font and copy
|
78
|
-
it to `~/.fontist` directory and also return the paths.
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
Fontist::Font.install(name, confirmation: "no")
|
82
|
-
```
|
83
|
-
|
84
|
-
If there are some issue with the provided font, like not supported or some other
|
85
|
-
issue then it will raise those errors.
|
86
|
-
|
87
|
-
#### List all fonts
|
88
|
-
|
89
|
-
The `Fontist::Font` interface exposes an interface to list all supported fonts,
|
90
|
-
this might be useful if want to know the name of the font or the available
|
91
|
-
styles. You can do that by using:
|
92
|
-
|
93
|
-
```ruby
|
94
|
-
Fontist::Font.all
|
95
|
-
```
|
96
|
-
|
97
|
-
The return values are ` OpenStruct` object, so you can easily do any other
|
98
|
-
operation you would do in any ruby object.
|
99
|
-
|
100
|
-
### Formula
|
101
|
-
|
102
|
-
The `fontist` gem internally usages the `Fontist::Formula` interface to find a
|
103
|
-
registered formula or fonts supported by any formula. Unless, you need to do
|
104
|
-
anything with that you shouldn't need to work with this interface directly. But
|
105
|
-
if you do then these are the public interface it offers.
|
106
|
-
|
107
|
-
#### Find a formula
|
108
|
-
|
109
|
-
The `Fontist::Formula.find` interface allows you to find any of the registered
|
110
|
-
formula. This interface takes a font name as an argument and it looks through
|
111
|
-
each of the registered formula that offers this font installation. Usages:
|
112
|
-
|
113
|
-
```ruby
|
114
|
-
Fontist::Formula.find("Calibri")
|
115
|
-
```
|
116
|
-
|
117
|
-
The above method will find which formula offers this font and then it will
|
118
|
-
return a installable formula that can be used to check licences or install that
|
119
|
-
fonts in your system.
|
120
|
-
|
121
|
-
#### Find formula fonts
|
122
|
-
|
123
|
-
Normally, each font name can be associated with multiple styles or collection, for
|
124
|
-
example the `Calibri` font might contains a `regular`, `bold` or `italic` styles
|
125
|
-
fonts and if you want a interface that can return the complete list then this is
|
126
|
-
your friend. You can use it as following:
|
127
|
-
|
128
|
-
```ruby
|
129
|
-
Fontist::Formula.find_fonts("Calibri")
|
130
|
-
```
|
131
|
-
|
132
|
-
|
133
|
-
#### List all formulas
|
134
|
-
|
135
|
-
The `Fontist::Formula` interface exposes an interface to list all registered
|
136
|
-
font formula. This might be useful if want to know the name of the formula or
|
137
|
-
what type fonts can be installed using that formula. Usages:
|
138
|
-
|
139
|
-
```ruby
|
140
|
-
Fontist::Formula.all
|
141
|
-
```
|
142
|
-
|
143
|
-
The return values are ` OpenStruct` object, so you can easily do any other
|
144
|
-
operation you would do in any ruby object.
|
145
|
-
|
146
|
-
|
147
|
-
### Manifest
|
148
|
-
|
149
|
-
#### Locations
|
150
|
-
|
151
|
-
Fontist lets find font locations from a manifest of the following format:
|
152
|
-
|
153
|
-
```ruby
|
154
|
-
{"Segoe UI"=>["Regular", "Bold"],
|
155
|
-
"Roboto Mono"=>["Regular"]}
|
156
|
-
```
|
157
|
-
|
158
|
-
Calling the following code returns a nested hash with font paths and names.
|
159
|
-
Font name is useful to choose a specific font in a font collection file (TTC).
|
160
|
-
|
161
|
-
```ruby
|
162
|
-
Fontist::Manifest::Locations.from_hash(manifest)
|
163
|
-
```
|
164
|
-
|
165
|
-
```ruby
|
166
|
-
{"Segoe UI"=> {
|
167
|
-
"Regular"=>{"full_name"=>"Segoe UI",
|
168
|
-
"paths"=>["/Users/user/.fontist/fonts/SEGOEUI.TTF"]},
|
169
|
-
"Bold"=>{"full_name"=>"Segoe UI Bold",
|
170
|
-
"paths"=>["/Users/user/.fontist/fonts/SEGOEUIB.TTF"]}},
|
171
|
-
"Roboto Mono"=> {
|
172
|
-
"Regular"=>{"full_name"=>nil,
|
173
|
-
"paths"=>[]}}}
|
174
|
-
```
|
175
|
-
|
176
|
-
#### Install
|
177
|
-
|
178
|
-
Fontist lets not only to get font locations but also to install fonts from the
|
179
|
-
manifest:
|
180
|
-
|
181
|
-
```ruby
|
182
|
-
Fontist::Manifest::Install.from_hash(manifest, confirmation: "yes")
|
183
|
-
```
|
184
|
-
|
185
|
-
It will install fonts and return their locations:
|
186
|
-
|
187
|
-
```ruby
|
188
|
-
{"Segoe UI"=> {
|
189
|
-
"Regular"=>{"full_name"=>"Segoe UI",
|
190
|
-
"paths"=>["/Users/user/.fontist/fonts/SEGOEUI.TTF"]},
|
191
|
-
"Bold"=>{"full_name"=>"Segoe UI Bold",
|
192
|
-
"paths"=>["/Users/user/.fontist/fonts/SEGOEUIB.TTF"]}},
|
193
|
-
"Roboto Mono"=> {
|
194
|
-
"Regular"=>{"full_name"=>"Roboto Mono Regular",
|
195
|
-
"paths"=>["/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"]}}}
|
196
|
-
```
|
197
|
-
|
198
|
-
#### Support of YAML format
|
199
|
-
|
200
|
-
Both commands support a YAML file as an input with a `from_file` method. For
|
201
|
-
example, if there is a `manifest.yml` file containing:
|
202
|
-
|
203
|
-
```yaml
|
204
|
-
Segoe UI:
|
205
|
-
- Regular
|
206
|
-
- Bold
|
207
|
-
Roboto Mono:
|
208
|
-
- Regular
|
209
|
-
```
|
210
|
-
|
211
|
-
Then the following calls would return font names and paths, as from the
|
212
|
-
`from_hash` method (see [Locations](#locations) and [Install](#install)).
|
213
|
-
|
214
|
-
```ruby
|
215
|
-
Fontist::Manifest::Locations.from_file("manifest.yml")
|
216
|
-
Fontist::Manifest::Install.from_file("manifest.yml", confirmation: "yes")
|
217
|
-
```
|
218
|
-
|
219
|
-
### CLI
|
220
|
-
|
221
|
-
These commands makes possible to operate with fonts via command line. The CLI
|
222
|
-
properly supports exit status, so in a case of error it returns a status code
|
223
|
-
higher or equal than 1.
|
224
|
-
|
225
|
-
All searches are case-insensitive for ease of use.
|
226
|
-
|
227
|
-
#### Install
|
228
|
-
|
229
|
-
The `install` command is similar to the `Font.install` call. It first checks
|
230
|
-
whether this font is already installed, and if not, then installs the font and
|
231
|
-
returns its paths. Only font name (not formula name, nor font filename) could
|
232
|
-
be used as a parameter.
|
233
|
-
|
234
|
-
```
|
235
|
-
$ fontist install "segoe ui"
|
236
|
-
These fonts are found or installed:
|
237
|
-
/Users/user/.fontist/fonts/SEGOEUI.TTF
|
238
|
-
/Users/user/.fontist/fonts/SEGOEUIB.TTF
|
239
|
-
/Users/user/.fontist/fonts/SEGOEUII.TTF
|
240
|
-
/Users/user/.fontist/fonts/SEGOEUIZ.TTF
|
241
|
-
```
|
242
|
-
|
243
|
-
#### Uninstall
|
244
|
-
|
245
|
-
Uninstalls any font supported by Fontist. Returns paths of an uninstalled font,
|
246
|
-
or prints an error telling that the font isn't installed or could not be found
|
247
|
-
in Fontist formulas. Aliased as `remove`.
|
248
|
-
|
249
|
-
```
|
250
|
-
$ fontist uninstall "segoe ui"
|
251
|
-
These fonts are removed:
|
252
|
-
/Users/user/.fontist/fonts/SEGOEUII.TTF
|
253
|
-
/Users/user/.fontist/fonts/SEGOEUIZ.TTF
|
254
|
-
/Users/user/.fontist/fonts/SEGOEUIB.TTF
|
255
|
-
/Users/user/.fontist/fonts/SEGOEUI.TTF
|
256
|
-
```
|
257
|
-
|
258
|
-
#### Status
|
259
|
-
|
260
|
-
Prints installed font paths grouped by formula and font.
|
261
|
-
|
262
|
-
```
|
263
|
-
$ fontist status "segoe ui"
|
264
|
-
segoe_ui
|
265
|
-
Segoe UI
|
266
|
-
Regular (/Users/user/.fontist/fonts/SEGOEUI.TTF)
|
267
|
-
Bold (/Users/user/.fontist/fonts/SEGOEUIB.TTF)
|
268
|
-
Italic (/Users/user/.fontist/fonts/SEGOEUII.TTF)
|
269
|
-
Bold Italic (/Users/user/.fontist/fonts/SEGOEUIZ.TTF)
|
270
|
-
```
|
271
|
-
|
272
|
-
#### List
|
273
|
-
|
274
|
-
Lists installation status of fonts supported by Fontist.
|
275
|
-
|
276
|
-
```
|
277
|
-
$ fontist list "segoe ui"
|
278
|
-
segoe_ui
|
279
|
-
Segoe UI
|
280
|
-
Regular (installed)
|
281
|
-
Bold (installed)
|
282
|
-
Italic (installed)
|
283
|
-
Bold Italic (installed)
|
284
|
-
```
|
285
|
-
|
286
|
-
```
|
287
|
-
$ fontist list "roboto mono"
|
288
|
-
google/roboto_mono
|
289
|
-
Roboto Mono
|
290
|
-
Regular (uninstalled)
|
291
|
-
Italic (uninstalled)
|
292
|
-
```
|
293
|
-
|
294
|
-
#### Locations from manifest
|
295
|
-
|
296
|
-
Returns locations of fonts specified in a YAML file as an input.
|
297
|
-
|
298
|
-
For example, if there is a file `manifest.yml`:
|
299
|
-
|
300
|
-
```yml
|
301
|
-
Segoe UI:
|
302
|
-
- Regular
|
303
|
-
- Bold
|
304
|
-
Roboto Mono:
|
305
|
-
- Regular
|
306
|
-
```
|
307
|
-
|
308
|
-
Then the command will return the following YAML output:
|
309
|
-
|
310
|
-
```yml
|
311
|
-
$ fontist manifest-locations manifest.yml
|
312
|
-
---
|
313
|
-
Segoe UI:
|
314
|
-
Regular:
|
315
|
-
full_name: Segoe UI
|
316
|
-
paths:
|
317
|
-
- "/Users/user/.fontist/fonts/SEGOEUI.TTF"
|
318
|
-
Bold:
|
319
|
-
full_name: Segoe UI Bold
|
320
|
-
paths:
|
321
|
-
- "/Users/user/.fontist/fonts/SEGOEUIB.TTF"
|
322
|
-
Roboto Mono:
|
323
|
-
Regular:
|
324
|
-
full_name:
|
325
|
-
paths: []
|
326
|
-
```
|
327
|
-
|
328
|
-
Since Segoe UI is installed, but Roboto Mono is not.
|
329
|
-
|
330
|
-
#### Install from manifest
|
331
|
-
|
332
|
-
Install fonts from a YAML manifest:
|
333
|
-
|
334
|
-
```yml
|
335
|
-
$ fontist manifest-install --confirm-license manifest.yml
|
336
|
-
---
|
337
|
-
Segoe UI:
|
338
|
-
Regular:
|
339
|
-
full_name: Segoe UI
|
340
|
-
paths:
|
341
|
-
- "/Users/user/.fontist/fonts/SEGOEUI.TTF"
|
342
|
-
Bold:
|
343
|
-
full_name: Segoe UI Bold
|
344
|
-
paths:
|
345
|
-
- "/Users/user/.fontist/fonts/SEGOEUIB.TTF"
|
346
|
-
Roboto Mono:
|
347
|
-
Regular:
|
348
|
-
full_name: Roboto Mono Regular
|
349
|
-
paths:
|
350
|
-
- "/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"
|
351
|
-
```
|
352
|
-
|
353
|
-
#### Help
|
354
|
-
|
355
|
-
List of all commands could be seen by:
|
356
|
-
|
357
|
-
```
|
358
|
-
fontist help
|
359
|
-
```
|
360
|
-
|
361
|
-
### Configuration
|
362
|
-
|
363
|
-
By default Fontist uses the `~/.fontist` directory to store fonts and its
|
364
|
-
files. It could be changed with the `FONTIST_PATH` environment variable.
|
365
|
-
|
366
|
-
```sh
|
367
|
-
FONTIST_PATH=~/.fontist_new fontist update
|
368
|
-
```
|
369
|
-
|
370
|
-
## Development
|
371
|
-
|
372
|
-
We are following Sandi Metz's Rules for this gem, you can read the
|
373
|
-
[description of the rules here][sandi-metz] All new code should follow these
|
374
|
-
rules. If you make changes in a pre-existing file that violates these rules you
|
375
|
-
should fix the violations as part of your contribution.
|
376
|
-
|
377
|
-
### Setup
|
378
|
-
|
379
|
-
Clone the repository.
|
380
|
-
|
381
|
-
```sh
|
382
|
-
git clone https://github.com/fontist/fontist
|
383
|
-
```
|
384
|
-
|
385
|
-
Setup your environment.
|
386
|
-
|
387
|
-
```sh
|
388
|
-
bin/setup
|
389
|
-
```
|
390
|
-
|
391
|
-
Run the test suite
|
392
|
-
|
393
|
-
```sh
|
394
|
-
bin/rspec
|
395
|
-
```
|
396
|
-
|
397
|
-
### Formulas storage
|
398
|
-
|
399
|
-
All formulas are kept in the [formulas][fontist-formulas] repository. If you'd
|
400
|
-
like to add a new one or change any existing, please refer to its documentation.
|
401
|
-
|
402
|
-
### Private repos
|
403
|
-
|
404
|
-
There is an ability to use private fonts via private fontist repo. Fontist repo
|
405
|
-
is a git repo which contains YAML formula files. Formulas can be created
|
406
|
-
manually (see [examples](https://github.com/fontist/formulas/tree/master/Formulas)),
|
407
|
-
or [auto-generated from an archive](#auto-generate-a-formula).
|
408
|
-
|
409
|
-
A repo can be either HTTPS or SSH Git repo. In case of SSH, a corresponding SSH key
|
410
|
-
should be setup with ssh-agent in order to access this private repo.
|
411
|
-
|
412
|
-
The `repo setup` command fetches a repo's formulas, and saves repo's name and url
|
413
|
-
for later use.
|
414
|
-
|
415
|
-
Internally all repos are stored at `~/.fontist/formulas/Formulas/private`.
|
416
|
-
|
417
|
-
```sh
|
418
|
-
fontist repo setup NAME URL
|
419
|
-
```
|
420
|
-
|
421
|
-
E.g.
|
422
|
-
|
423
|
-
```sh
|
424
|
-
fontist repo setup acme https://example.com/acme/formulas.git
|
425
|
-
# or
|
426
|
-
fontist repo setup acme git@example.com:acme/formulas.git
|
427
|
-
```
|
428
|
-
|
429
|
-
Then you can just install fonts from this repo:
|
430
|
-
|
431
|
-
```sh
|
432
|
-
fontist install "private font"
|
433
|
-
```
|
434
|
-
|
435
|
-
There is no need in any additional command to be run, but if you add new
|
436
|
-
formulas to your repo, you can fetch them with the `repo update` command:
|
437
|
-
|
438
|
-
```sh
|
439
|
-
fontist repo update acme
|
440
|
-
```
|
441
|
-
|
442
|
-
If there is a need to avoid using private formulas, the repo can be removed with:
|
443
|
-
|
444
|
-
```sh
|
445
|
-
fontist repo remove acme
|
446
|
-
```
|
447
|
-
|
448
|
-
### Private formulas
|
449
|
-
|
450
|
-
Authorization of private archives in private formulas can be implemented with
|
451
|
-
headers. Here is an example which works with Github releases:
|
452
|
-
|
453
|
-
```yaml
|
454
|
-
resources:
|
455
|
-
fonts.zip:
|
456
|
-
urls:
|
457
|
-
- url: https://example.com/repos/acme/formulas/releases/assets/38777461
|
458
|
-
headers:
|
459
|
-
Accept: application/octet-stream
|
460
|
-
Authorization: token ghp_1234567890abcdefghi
|
461
|
-
```
|
462
|
-
|
463
|
-
A token can be obtained on [this page](https://github.com/settings/tokens).
|
464
|
-
It should have at least the `repo` scope.
|
465
|
-
|
466
|
-
### Auto-generate a formula
|
467
|
-
|
468
|
-
A formula could be generated from a fonts archive. Just specify a URL to the
|
469
|
-
archive:
|
470
|
-
|
471
|
-
```sh
|
472
|
-
fontist create-formula https://www.latofonts.com/download/lato2ofl-zip/
|
473
|
-
cp lato.yml ~/.fontist/formulas/Formulas/
|
474
|
-
```
|
475
|
-
|
476
|
-
Though indexes are auto-generated now, maintainers should rebuild indexes
|
477
|
-
in the main repo for backward compatibility with fontist prior to 1.9.x versions.
|
478
|
-
A formula index should be rebuild, when a new formula is generated or an
|
479
|
-
existing one changed:
|
480
|
-
|
481
|
-
```sh
|
482
|
-
fontist rebuild-index --main-repo
|
483
|
-
```
|
484
|
-
|
485
|
-
Then, both the formula and the updated indexes should be commited and pushed to
|
486
|
-
the formula repository:
|
487
|
-
|
488
|
-
```sh
|
489
|
-
cd ~/.fontist/formulas
|
490
|
-
git add Formulas/lato.yml index.yml filename_index.yml
|
491
|
-
git commit -m "Add Lato formula"
|
492
|
-
```
|
493
|
-
|
494
|
-
### Google Import
|
495
|
-
|
496
|
-
The library contains formulas for [Google Foonts][google-fonts]. A GHA workflow
|
497
|
-
checks for fonts update every day. In case an update is found, it could be
|
498
|
-
fetched to the library by:
|
499
|
-
|
500
|
-
```
|
501
|
-
bin/import_google
|
502
|
-
```
|
503
|
-
|
504
|
-
The script would update formulas which should be committed to a separate
|
505
|
-
repository [formulas][fontist-formulas]:
|
506
|
-
|
507
|
-
```
|
508
|
-
cd ~/.fontist/formulas
|
509
|
-
git add Formulas/google index.yml filename_index.yml
|
510
|
-
git commit -m "Google Fonts update"
|
511
|
-
git push
|
512
|
-
```
|
513
|
-
|
514
|
-
### Import of SIL fonts
|
515
|
-
|
516
|
-
Fontist contains formulas of [SIL fonts](https://software.sil.org/fonts/). They
|
517
|
-
can be updated with:
|
518
|
-
|
519
|
-
```sh
|
520
|
-
fontist import-sil
|
521
|
-
cd ~/.fontist/formulas
|
522
|
-
git add Formulas/sil index.yml filename_index.yml
|
523
|
-
git commit -m "SIL fonts update"
|
524
|
-
git push
|
525
|
-
```
|
526
|
-
|
527
|
-
### Using with proxy
|
528
|
-
|
529
|
-
`fontist` can read proxy settings from environemnt variables:
|
530
|
-
|
531
|
-
* `HTTP_PROXY`
|
532
|
-
* `SOCKS_PROXY`
|
533
|
-
|
534
|
-
Also because `fontist` uses git under the hood, proxy must be configured in `~/.gitconfig` separately.
|
535
|
-
Check [nice guide](https://gist.github.com/evantoli/f8c23a37eb3558ab8765) about how it can be configured for more details
|
536
|
-
|
537
|
-
Also as for regular URL you can pass username and password, like `http://username:password@example.com/` for SOCKS it's similar
|
538
|
-
|
539
|
-
### Releasing
|
540
|
-
|
541
|
-
Releasing is done automatically with GitHub Action. Just bump and tag with `gem-release`.
|
542
|
-
|
543
|
-
For a patch release (0.0.x) use:
|
544
|
-
|
545
|
-
```sh
|
546
|
-
gem bump --version patch --tag --push
|
547
|
-
```
|
548
|
-
|
549
|
-
For a minor release (0.x.0) use:
|
550
|
-
|
551
|
-
```sh
|
552
|
-
gem bump --version minor --tag --push
|
553
|
-
```
|
554
|
-
|
555
|
-
## Contributing
|
556
|
-
|
557
|
-
First, thank you for contributing! We love pull requests from everyone. By
|
558
|
-
participating in this project, you hereby grant [Ribose Inc.][riboseinc] the
|
559
|
-
right to grant or transfer an unlimited number of non exclusive licenses or
|
560
|
-
sub-licenses to third parties, under the copyright covering the contribution
|
561
|
-
to use the contribution by all means.
|
562
|
-
|
563
|
-
Here are a few technical guidelines to follow:
|
564
|
-
|
565
|
-
1. Open an [issue][issues] to discuss a new feature.
|
566
|
-
1. Write tests to support your new feature.
|
567
|
-
1. Make sure the entire test suite passes locally and on CI.
|
568
|
-
1. Open a Pull Request.
|
569
|
-
1. [Squash your commits][squash] after receiving feedback.
|
570
|
-
1. Party!
|
571
|
-
|
572
|
-
|
573
|
-
## Credit
|
574
|
-
|
575
|
-
This gem is developed, maintained and funded by [Ribose Inc.][riboseinc]
|
576
|
-
|
577
|
-
[riboseinc]: https://www.ribose.com
|
578
|
-
[issues]: https://github.com/fontist/fontist/issues
|
579
|
-
[squash]: https://github.com/thoughtbot/guides/tree/master/protocol/git#write-a-feature
|
580
|
-
[sandi-metz]: http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers
|
581
|
-
[fontist-formulas]: https://github.com/fontist/formulas
|
582
|
-
[google-fonts]: https://fonts.google.com
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
class FormulaPaths
|
3
|
-
attr_reader :font_paths
|
4
|
-
|
5
|
-
def initialize(font_paths)
|
6
|
-
@font_paths = font_paths
|
7
|
-
end
|
8
|
-
|
9
|
-
def find(font, style = nil)
|
10
|
-
styles = find_styles_by_formulas(font, style)
|
11
|
-
return if styles.empty?
|
12
|
-
|
13
|
-
fonts = styles.uniq { |s| s["font"] }.flat_map do |s|
|
14
|
-
paths = search_font_paths(s["font"])
|
15
|
-
paths.map do |path|
|
16
|
-
{ full_name: s["full_name"],
|
17
|
-
type: s["type"],
|
18
|
-
path: path }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
fonts.empty? ? nil : fonts
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def find_styles_by_formulas(font, style)
|
28
|
-
if style
|
29
|
-
Formula.find_styles(font, style)
|
30
|
-
else
|
31
|
-
fonts = Formula.find_fonts(font)
|
32
|
-
return [] unless fonts
|
33
|
-
|
34
|
-
fonts.flat_map(&:styles)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def search_font_paths(filename)
|
39
|
-
font_paths.select do |path|
|
40
|
-
File.basename(path) == filename
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# How to work with Protobuf
|
2
|
-
|
3
|
-
Protobuf file could be downloaded from
|
4
|
-
https://raw.githubusercontent.com/googlefonts/gftools/master/Lib/gftools/fonts_public.proto
|
5
|
-
|
6
|
-
To compile Protobuf to Ruby use
|
7
|
-
|
8
|
-
```sh
|
9
|
-
ruby-protoc lib/fontist/import/google/fonts_public.proto
|
10
|
-
```
|
@@ -1,71 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
-
|
4
|
-
require 'protocol_buffers'
|
5
|
-
|
6
|
-
module Google
|
7
|
-
module Fonts
|
8
|
-
# forward declarations
|
9
|
-
class FamilyProto < ::ProtocolBuffers::Message; end
|
10
|
-
class FontProto < ::ProtocolBuffers::Message; end
|
11
|
-
class AxisProto < ::ProtocolBuffers::Message; end
|
12
|
-
class SourceProto < ::ProtocolBuffers::Message; end
|
13
|
-
|
14
|
-
class FamilyProto < ::ProtocolBuffers::Message
|
15
|
-
# forward declarations
|
16
|
-
class ApiDefaultOverridesEntry < ::ProtocolBuffers::Message; end
|
17
|
-
|
18
|
-
set_fully_qualified_name "google.fonts.FamilyProto"
|
19
|
-
|
20
|
-
# nested messages
|
21
|
-
class ApiDefaultOverridesEntry < ::ProtocolBuffers::Message
|
22
|
-
set_fully_qualified_name "google.fonts.FamilyProto.ApiDefaultOverridesEntry"
|
23
|
-
|
24
|
-
optional :string, :key, 1
|
25
|
-
optional :float, :value, 2
|
26
|
-
end
|
27
|
-
|
28
|
-
required :string, :name, 1
|
29
|
-
required :string, :designer, 2
|
30
|
-
required :string, :license, 3
|
31
|
-
required :string, :category, 4
|
32
|
-
required :string, :date_added, 5
|
33
|
-
repeated ::Google::Fonts::FontProto, :fonts, 6
|
34
|
-
repeated :string, :aliases, 7
|
35
|
-
repeated :string, :subsets, 8
|
36
|
-
optional :string, :ttf_autohint_args, 9
|
37
|
-
repeated ::Google::Fonts::AxisProto, :axes, 10
|
38
|
-
repeated ::Google::Fonts::FamilyProto::ApiDefaultOverridesEntry, :api_default_overrides, 11
|
39
|
-
optional ::Google::Fonts::SourceProto, :source, 12
|
40
|
-
end
|
41
|
-
|
42
|
-
class FontProto < ::ProtocolBuffers::Message
|
43
|
-
set_fully_qualified_name "google.fonts.FontProto"
|
44
|
-
|
45
|
-
required :string, :name, 1
|
46
|
-
required :string, :style, 2
|
47
|
-
required :int32, :weight, 3
|
48
|
-
required :string, :filename, 4
|
49
|
-
required :string, :post_script_name, 5
|
50
|
-
required :string, :full_name, 6
|
51
|
-
optional :string, :copyright, 7
|
52
|
-
end
|
53
|
-
|
54
|
-
class AxisProto < ::ProtocolBuffers::Message
|
55
|
-
set_fully_qualified_name "google.fonts.AxisProto"
|
56
|
-
|
57
|
-
optional :string, :tag, 1
|
58
|
-
optional :float, :min_value, 2
|
59
|
-
optional :float, :default_value, 3
|
60
|
-
optional :float, :max_value, 4
|
61
|
-
end
|
62
|
-
|
63
|
-
class SourceProto < ::ProtocolBuffers::Message
|
64
|
-
set_fully_qualified_name "google.fonts.SourceProto"
|
65
|
-
|
66
|
-
optional :string, :repository_url, 1
|
67
|
-
optional :string, :commit, 2
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|