fontist 1.7.2 → 1.8.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +38 -0
  3. data/.github/workflows/rspec.yml +58 -0
  4. data/README.md +77 -14
  5. data/{bin → exe}/fontist +0 -0
  6. data/fontist.gemspec +10 -7
  7. data/lib/fontist.rb +5 -2
  8. data/lib/fontist/cli.rb +65 -41
  9. data/lib/fontist/errors.rb +63 -12
  10. data/lib/fontist/font.rb +23 -37
  11. data/lib/fontist/font_installer.rb +118 -0
  12. data/lib/fontist/fontist_font.rb +3 -49
  13. data/lib/fontist/formula.rb +101 -35
  14. data/lib/fontist/formula_paths.rb +43 -0
  15. data/lib/fontist/helpers.rb +7 -0
  16. data/lib/fontist/import/create_formula.rb +3 -2
  17. data/lib/fontist/import/extractors.rb +4 -0
  18. data/lib/fontist/import/extractors/cpio_extractor.rb +39 -0
  19. data/lib/fontist/import/extractors/gzip_extractor.rb +27 -0
  20. data/lib/fontist/import/extractors/rpm_extractor.rb +45 -0
  21. data/lib/fontist/import/extractors/tar_extractor.rb +47 -0
  22. data/lib/fontist/import/google/skiplist.yml +3 -0
  23. data/lib/fontist/import/google_check.rb +1 -1
  24. data/lib/fontist/import/google_import.rb +3 -4
  25. data/lib/fontist/import/otfinfo_generate.rb +1 -1
  26. data/lib/fontist/import/recursive_extraction.rb +26 -8
  27. data/lib/fontist/import/sil_import.rb +99 -0
  28. data/lib/fontist/index.rb +72 -0
  29. data/lib/fontist/index_formula.rb +30 -0
  30. data/lib/fontist/manifest/install.rb +4 -9
  31. data/lib/fontist/manifest/locations.rb +28 -20
  32. data/lib/fontist/system_font.rb +32 -62
  33. data/lib/fontist/system_index.rb +47 -5
  34. data/lib/fontist/utils.rb +5 -0
  35. data/lib/fontist/utils/cache.rb +12 -4
  36. data/lib/fontist/utils/cpio/cpio.rb +199 -0
  37. data/lib/fontist/utils/cpio_extractor.rb +47 -0
  38. data/lib/fontist/utils/exe_extractor.rb +1 -1
  39. data/lib/fontist/utils/gzip_extractor.rb +24 -0
  40. data/lib/fontist/utils/locking.rb +17 -0
  41. data/lib/fontist/utils/rpm_extractor.rb +37 -0
  42. data/lib/fontist/utils/tar_extractor.rb +61 -0
  43. data/lib/fontist/utils/zip_extractor.rb +1 -1
  44. data/lib/fontist/version.rb +1 -1
  45. metadata +68 -24
  46. data/.github/workflows/macosx.yml +0 -33
  47. data/.github/workflows/ubuntu.yml +0 -30
  48. data/.github/workflows/windows.yml +0 -32
  49. data/bin/check_google +0 -8
  50. data/bin/console +0 -11
  51. data/bin/convert_formulas +0 -8
  52. data/bin/generate_otfinfo +0 -8
  53. data/bin/import_google +0 -8
  54. data/bin/rspec +0 -29
  55. data/bin/setup +0 -7
  56. data/lib/fontist/font_formula.rb +0 -169
  57. data/lib/fontist/formula_template.rb +0 -122
  58. data/lib/fontist/formulas.rb +0 -56
  59. data/lib/fontist/registry.rb +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 035a1318895900d90f27d2b5db8f08b86c64e6eb5e172ef81038c55305258756
4
- data.tar.gz: 5a748c9632995e504b448508d56d0e292a7429b1eaa86d08978bf6e54d67f9e7
3
+ metadata.gz: e12ad24d94f6220992c66f06c21872135932b1b64f7ae17c7aa414c2f80f12ad
4
+ data.tar.gz: 29665a7556a8fbeda7449616c688a90e694b8060c7f2b8158abcc41e049579c4
5
5
  SHA512:
6
- metadata.gz: 1558eb54750ed4efaabe694b79e23a00ce3a51d6c026641ab58796737ff609cce23b92dd141524e90c8d7e55f11cc0537fe405ca849b9d0309e65e47d1b672fe
7
- data.tar.gz: 371d9283fa520c1dd036e22f600a5804a75af10b3a2d90bfe775432036ab51c12466696bb33a6614954c4de974889087255cdf2705b91731b6a0afa7ce9bef88
6
+ metadata.gz: 92b8942a88a3f02c57fd9840060c8ba333f0378611477bf1ff9435296792a4b79f97616da3520ea8d6fbe1088498c6d15d9c885c02e740fdc4bc26811988b176
7
+ data.tar.gz: 41aab015006c2109db2a52ea6ace23aeaaa571e5153559c53e327c448be4684189c7d72d5785811ecf505b124a48fa5016f5cfe62cd0946f92d0d6aab6d9b870
@@ -0,0 +1,38 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-18.04
11
+ steps:
12
+ - uses: actions/checkout@v1
13
+
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: '2.6'
17
+
18
+ - run: bundle config set path 'vendor/bundle'
19
+
20
+ - run: bundle install --jobs 4 --retry 3
21
+
22
+ - run: bundle exec rspec --tag ~dev
23
+ env:
24
+ TEST_ENV: CI
25
+
26
+ - name: Publish to rubygems.org
27
+ env:
28
+ RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}}
29
+ run: |
30
+ gem install gem-release
31
+ touch ~/.gem/credentials
32
+ cat > ~/.gem/credentials << EOF
33
+ ---
34
+ :rubygems_api_key: ${RUBYGEMS_API_KEY}
35
+ EOF
36
+ chmod 0600 ~/.gem/credentials
37
+ git status
38
+ gem release
@@ -0,0 +1,58 @@
1
+ name: rspec
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+
8
+ jobs:
9
+ build:
10
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: ${{ matrix.experimental }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [ '2.6', '2.5', '2.4' ]
17
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
18
+ experimental: [ false ]
19
+ include:
20
+ - ruby: '2.7'
21
+ os: 'ubuntu-latest'
22
+ experimental: true
23
+ - ruby: '2.7'
24
+ os: 'windows-latest'
25
+ experimental: true
26
+ - ruby: '2.7'
27
+ os: 'macos-latest'
28
+ experimental: true
29
+
30
+ steps:
31
+ - uses: actions/checkout@master
32
+
33
+ - uses: ruby/setup-ruby@v1
34
+ with:
35
+ ruby-version: ${{ matrix.ruby }}
36
+
37
+ - uses: actions/cache@v1
38
+ with:
39
+ path: vendor/bundle
40
+ key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
41
+ restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
42
+
43
+ - if: matrix.os == 'macos-latest'
44
+ run: brew install lcdf-typetools
45
+
46
+ - run: bundle config set path 'vendor/bundle'
47
+
48
+ - run: bundle install --jobs 4 --retry 3
49
+
50
+ - if: matrix.os == 'macos-latest'
51
+ run: bundle exec rspec
52
+ env:
53
+ TEST_ENV: CI
54
+
55
+ - if: matrix.os != 'macos-latest'
56
+ run: bundle exec rspec --tag ~dev
57
+ env:
58
+ TEST_ENV: CI
data/README.md CHANGED
@@ -44,7 +44,7 @@ can we find a font in your system.
44
44
 
45
45
  #### Finding a font
46
46
 
47
- The `Fontist::Fontist.find` interface can be used a find a font in your system.
47
+ The `Fontist::Font.find` interface can be used a find a font in your system.
48
48
  It will look into the operating system specific font directories, and also the
49
49
  fontist specific `~/.fontist` directory.
50
50
 
@@ -136,20 +136,18 @@ operation you would do in any ruby object.
136
136
 
137
137
  #### Locations
138
138
 
139
- Fontist lets find font locations from a YAML manifest of the following format:
139
+ Fontist lets find font locations from a manifest of the following format:
140
140
 
141
- ```yml
142
- Segoe UI:
143
- - Regular
144
- - Bold
145
- Roboto Mono:
146
- - Regular
141
+ ```ruby
142
+ {"Segoe UI"=>["Regular", "Bold"],
143
+ "Roboto Mono"=>["Regular"]}
147
144
  ```
148
145
 
149
- Calling the following code returns a nested hash with font paths.
146
+ Calling the following code returns a nested hash with font paths and names.
147
+ Font name is useful to choose a specific font in a font collection file (TTC).
150
148
 
151
149
  ```ruby
152
- Fontist::Manifest::Locations.call(manifest_path)
150
+ Fontist::Manifest::Locations.from_hash(manifest)
153
151
  ```
154
152
 
155
153
  ```ruby
@@ -169,7 +167,7 @@ Fontist lets not only to get font locations but also to install fonts from the
169
167
  manifest:
170
168
 
171
169
  ```ruby
172
- Fontist::Manifest::Install.call(manifest, confirmation: "yes")
170
+ Fontist::Manifest::Install.from_hash(manifest, confirmation: "yes")
173
171
  ```
174
172
 
175
173
  It will install fonts and return their locations:
@@ -185,6 +183,27 @@ It will install fonts and return their locations:
185
183
  "paths"=>["/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"]}}}
186
184
  ```
187
185
 
186
+ #### Support of YAML format
187
+
188
+ Both commands support a YAML file as an input with a `from_file` method. For
189
+ example, if there is a `manifest.yml` file containing:
190
+
191
+ ```yaml
192
+ Segoe UI:
193
+ - Regular
194
+ - Bold
195
+ Roboto Mono:
196
+ - Regular
197
+ ```
198
+
199
+ Then the following calls would return font names and paths, as from the
200
+ `from_hash` method (see [Locations](#locations) and [Install](#install)).
201
+
202
+ ```ruby
203
+ Fontist::Manifest::Locations.from_file("manifest.yml")
204
+ Fontist::Manifest::Install.from_file("manifest.yml", confirmation: "yes")
205
+ ```
206
+
188
207
  ### CLI
189
208
 
190
209
  These commands makes possible to operate with fonts via command line. The CLI
@@ -230,7 +249,7 @@ Prints installed font paths grouped by formula and font.
230
249
 
231
250
  ```
232
251
  $ fontist status "segoe ui"
233
- Fontist::Formulas::SegoeUIFont
252
+ segoe_ui
234
253
  Segoe UI
235
254
  Regular (/Users/user/.fontist/fonts/SEGOEUI.TTF)
236
255
  Bold (/Users/user/.fontist/fonts/SEGOEUIB.TTF)
@@ -244,7 +263,7 @@ Lists installation status of fonts supported by Fontist.
244
263
 
245
264
  ```
246
265
  $ fontist list "segoe ui"
247
- Fontist::Formulas::SegoeUIFont
266
+ segoe_ui
248
267
  Segoe UI
249
268
  Regular (installed)
250
269
  Bold (installed)
@@ -254,7 +273,7 @@ Fontist::Formulas::SegoeUIFont
254
273
 
255
274
  ```
256
275
  $ fontist list "roboto mono"
257
- Fontist::Formulas::RobotoMonoFont
276
+ google/roboto_mono
258
277
  Roboto Mono
259
278
  Regular (uninstalled)
260
279
  Italic (uninstalled)
@@ -376,8 +395,22 @@ archive:
376
395
  ```sh
377
396
  fontist create-formula https://www.latofonts.com/download/lato2ofl-zip/
378
397
  cp lato.yml ~/.fontist/formulas/Formulas/
398
+ ```
399
+
400
+ A formula index should be rebuild, when a new formula is generated or an
401
+ existing one changed:
402
+
403
+ ```sh
404
+ fontist rebuild-index
405
+ ```
406
+
407
+ Then, both the formula and the updated index should be commited and pushed to
408
+ the formula repository:
409
+
410
+ ```sh
379
411
  cd ~/.fontist/formulas
380
412
  git add Formulas/lato.yml
413
+ git add index.yml
381
414
  git commit -m "Add Lato formula"
382
415
  ```
383
416
 
@@ -401,6 +434,36 @@ git commit -m "Google Fonts update"
401
434
  git push
402
435
  ```
403
436
 
437
+ ### Import of SIL fonts
438
+
439
+ Fontist contains formulas of [SIL fonts](https://software.sil.org/fonts/). They
440
+ can be updated with:
441
+
442
+ ```sh
443
+ fontist import-sil
444
+ cd ~/.fontist/formulas
445
+ git add Formulas/sil
446
+ git add index.yml
447
+ git commit -m "SIL fonts update"
448
+ git push
449
+ ```
450
+
451
+ ### Releasing
452
+
453
+ Releasing is done automatically with GitHub Action. Just bump and tag with `gem-release`.
454
+
455
+ For a patch release (0.0.x) use:
456
+
457
+ ```sh
458
+ gem bump --version patch --tag --push
459
+ ```
460
+
461
+ For a minor release (0.x.0) use:
462
+
463
+ ```sh
464
+ gem bump --version minor --tag --push
465
+ ```
466
+
404
467
  ## Contributing
405
468
 
406
469
  First, thank you for contributing! We love pull requests from everyone. By
File without changes
@@ -5,15 +5,15 @@ require "fontist/version"
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fontist"
7
7
  spec.version = Fontist::VERSION
8
- spec.authors = ["Ribose Inc.", "Abu Nashir"]
9
- spec.email = ["operations@ribose.com", "abunashir@gmail.com"]
8
+ spec.authors = ["Ribose Inc."]
9
+ spec.email = ["open.source@ribose.com"]
10
10
 
11
- spec.summary = %q{A libarary find or download fonts}
12
- spec.description = %q{A libarary find or download fonts}
11
+ spec.summary = %q{Install openly-licensed fonts on Windows, Linux and Mac!}
12
+ spec.description = %q{Install openly-licensed fonts on Windows, Linux and Mac!}
13
13
  spec.homepage = "https://github.com/fontist/fontist"
14
14
  spec.license = "BSD-2-Clause"
15
15
 
16
- spec.post_install_message = "Please run `fontist update` to fetch formulas"
16
+ spec.post_install_message = "Please run `fontist update` to fetch formulas."
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = "https://github.com/fontist/fontist"
@@ -21,12 +21,13 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.require_paths = ["lib"]
23
23
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
24
- f.match(%r{^(test|spec|features)/})
24
+ f.match(%r{^(bin|test|spec|features)/})
25
25
  end
26
- spec.bindir = "bin"
26
+ spec.bindir = "exe"
27
27
  spec.executables = ["fontist"]
28
28
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
29
29
 
30
+ spec.add_runtime_dependency "arr-pm", "~> 0.0.1"
30
31
  spec.add_runtime_dependency "down", "~> 5.0"
31
32
  spec.add_runtime_dependency "libmspack", "~> 0.1.0"
32
33
  spec.add_runtime_dependency "rubyzip", "~> 2.3.0"
@@ -39,6 +40,8 @@ Gem::Specification.new do |spec|
39
40
  spec.add_development_dependency "extract_ttc", "~> 0.1"
40
41
  spec.add_development_dependency "pry"
41
42
  spec.add_development_dependency "bundler", "~> 2.0"
43
+ spec.add_development_dependency "gem-release"
44
+ spec.add_development_dependency "nokogiri", "~> 1.0"
42
45
  spec.add_development_dependency "rake", "~> 12.3.3"
43
46
  spec.add_development_dependency "rspec", "~> 3.0"
44
47
  spec.add_development_dependency "rubocop", "0.75.0"
@@ -8,12 +8,11 @@ require "fontist/errors"
8
8
  require "fontist/version"
9
9
 
10
10
  require "fontist/font"
11
- require "fontist/registry"
12
- require "fontist/formulas"
13
11
  require "fontist/formula"
14
12
  require "fontist/system_font"
15
13
  require "fontist/fontist_font"
16
14
  require "fontist/manifest"
15
+ require "fontist/helpers"
17
16
 
18
17
  module Fontist
19
18
  def self.ui
@@ -59,4 +58,8 @@ module Fontist
59
58
  def self.system_index_path
60
59
  Fontist.fontist_path.join("system_index.yml")
61
60
  end
61
+
62
+ def self.formula_index_path
63
+ Fontist.formulas_repo_path.join("index.yml")
64
+ end
62
65
  end
@@ -3,7 +3,24 @@ require "thor"
3
3
  module Fontist
4
4
  class CLI < Thor
5
5
  STATUS_SUCCESS = 0
6
- STATUS_ERROR = 1
6
+ STATUS_UNKNOWN_ERROR = 1
7
+ STATUS_NON_SUPPORTED_FONT_ERROR = 2
8
+ STATUS_MISSING_FONT_ERROR = 3
9
+ STATUS_LICENSING_ERROR = 4
10
+ STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR = 5
11
+ STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR = 6
12
+ STATUS_FONT_INDEX_CORRUPTED = 7
13
+
14
+ ERROR_TO_STATUS = {
15
+ Fontist::Errors::UnsupportedFontError => [STATUS_NON_SUPPORTED_FONT_ERROR],
16
+ Fontist::Errors::MissingFontError => [STATUS_MISSING_FONT_ERROR],
17
+ Fontist::Errors::LicensingError => [STATUS_LICENSING_ERROR],
18
+ Fontist::Errors::ManifestCouldNotBeFoundError => [STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR,
19
+ "Manifest could not be found."],
20
+ Fontist::Errors::ManifestCouldNotBeReadError => [STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR,
21
+ "Manifest could not be read."],
22
+ Fontist::Errors::FontIndexCorrupted => [STATUS_FONT_INDEX_CORRUPTED],
23
+ }.freeze
7
24
 
8
25
  def self.exit_on_failure?
9
26
  false
@@ -19,9 +36,9 @@ module Fontist
19
36
  force: options[:force],
20
37
  confirmation: options[:confirm_license] ? "yes" : "no"
21
38
  )
22
- STATUS_SUCCESS
23
- rescue Fontist::Errors::NonSupportedFontError
24
- could_not_find_font(font)
39
+ success
40
+ rescue Fontist::Errors::GeneralError => e
41
+ handle_error(e)
25
42
  end
26
43
 
27
44
  desc "uninstall/remove FONT", "Uninstall font by font or formula"
@@ -29,26 +46,21 @@ module Fontist
29
46
  fonts_paths = Fontist::Font.uninstall(font)
30
47
  Fontist.ui.success("These fonts are removed:")
31
48
  Fontist.ui.success(fonts_paths.join("\n"))
32
- STATUS_SUCCESS
33
- rescue Fontist::Errors::MissingFontError => e
34
- Fontist.ui.error(e.message)
35
- STATUS_ERROR
36
- rescue Fontist::Errors::NonSupportedFontError
37
- could_not_find_font(font)
49
+ success
50
+ rescue Fontist::Errors::GeneralError => e
51
+ handle_error(e)
38
52
  end
39
53
  map remove: :uninstall
40
54
 
41
55
  desc "status [FONT]", "Show status of FONT or all fonts in fontist"
42
56
  def status(font = nil)
43
57
  formulas = Fontist::Font.status(font)
44
- return error("No font is installed.") if formulas.empty?
58
+ return error("No font is installed.", STATUS_MISSING_FONT_ERROR) if formulas.empty?
45
59
 
46
60
  print_formulas(formulas)
47
61
  success
48
- rescue Fontist::Errors::MissingFontError => e
49
- error(e.message)
50
- rescue Fontist::Errors::NonSupportedFontError
51
- could_not_find_font(font)
62
+ rescue Fontist::Errors::GeneralError => e
63
+ handle_error(e)
52
64
  end
53
65
 
54
66
  desc "list [FONT]", "List installation status of FONT or fonts in fontist"
@@ -56,75 +68,87 @@ module Fontist
56
68
  formulas = Fontist::Font.list(font)
57
69
  print_list(formulas)
58
70
  success
59
- rescue Fontist::Errors::NonSupportedFontError
60
- could_not_find_font(font)
71
+ rescue Fontist::Errors::GeneralError => e
72
+ handle_error(e)
61
73
  end
62
74
 
63
75
  desc "update", "Update formulas"
64
76
  def update
65
- Formulas.fetch_formulas
77
+ Formula.update_formulas_repo
66
78
  Fontist.ui.say("Formulas have been successfully updated")
67
- STATUS_SUCCESS
79
+ success
68
80
  end
69
81
 
70
82
  desc "manifest-locations MANIFEST",
71
83
  "Get locations of fonts from MANIFEST (yaml)"
72
84
  def manifest_locations(manifest)
73
- paths = Fontist::Manifest::Locations.call(manifest)
85
+ paths = Fontist::Manifest::Locations.from_file(manifest)
74
86
  print_yaml(paths)
75
87
  success
76
- rescue Fontist::Errors::ManifestCouldNotBeFoundError
77
- error("Manifest could not be found.")
78
- rescue Fontist::Errors::ManifestCouldNotBeReadError
79
- error("Manifest could not be read.")
88
+ rescue Fontist::Errors::GeneralError => e
89
+ handle_error(e)
80
90
  end
81
91
 
82
92
  desc "manifest-install MANIFEST", "Install fonts from MANIFEST (yaml)"
83
93
  option :confirm_license, type: :boolean, desc: "Confirm license agreement"
84
94
  def manifest_install(manifest)
85
- paths = Fontist::Manifest::Install.call(
95
+ paths = Fontist::Manifest::Install.from_file(
86
96
  manifest,
87
97
  confirmation: options[:confirm_license] ? "yes" : "no"
88
98
  )
89
99
 
90
100
  print_yaml(paths)
91
101
  success
92
- rescue Fontist::Errors::ManifestCouldNotBeFoundError
93
- error("Manifest could not be found.")
94
- rescue Fontist::Errors::ManifestCouldNotBeReadError
95
- error("Manifest could not be read.")
102
+ rescue Fontist::Errors::GeneralError => e
103
+ handle_error(e)
96
104
  end
97
105
 
98
106
  desc "create-formula URL", "Create a new formula with fonts from URL"
99
107
  option :name, desc: "Example: Times New Roman"
100
108
  option :mirror, repeatable: true
101
109
  option :subarchive, desc: "Subarchive to choose when there are several ones"
102
- option :subdir, desc: "Subdirectory to take fonts from"
110
+ option :subdir, desc: "Subdirectory to take fonts from, starting with the " \
111
+ "root dir, e.g.: stixfonts-2.10/fonts/static_otf. May include `fnmatch` patterns."
103
112
  def create_formula(url)
104
113
  require "fontist/import/create_formula"
105
114
  name = Fontist::Import::CreateFormula.new(url, options).call
106
115
  Fontist.ui.say("#{name} formula has been successfully created")
116
+ success
117
+ end
118
+
119
+ desc "rebuild-index", "Rebuild formula index (used by formulas maintainers)"
120
+ long_desc <<-LONGDESC
121
+ This index is pre-built and served with formulas, so there is no need
122
+ update it unless something changes in the formulas repo.
123
+ LONGDESC
124
+ def rebuild_index
125
+ Fontist::Index.rebuild
126
+ Fontist.ui.say("Formula index has been rebuilt.")
107
127
  STATUS_SUCCESS
108
128
  end
109
129
 
130
+ desc "import-sil", "Import formulas from SIL"
131
+ def import_sil
132
+ require "fontist/import/sil_import"
133
+ Fontist::Import::SilImport.new.call
134
+ end
135
+
110
136
  private
111
137
 
112
138
  def success
113
139
  STATUS_SUCCESS
114
140
  end
115
141
 
116
- def could_not_find_font(font)
117
- error("Font '#{font}' not found locally nor available in the Fontist " \
118
- "formula repository.\n" \
119
- "Perhaps it is available at the latest Fontist formula " \
120
- "repository.\n" \
121
- "You can update the formula repository using the command " \
122
- "`fontist update` and try again.")
142
+ def handle_error(exception)
143
+ status, message = ERROR_TO_STATUS[exception.class]
144
+ raise exception unless status
145
+
146
+ error(message || exception.message, status)
123
147
  end
124
148
 
125
- def error(message)
149
+ def error(message, status)
126
150
  Fontist.ui.error(message)
127
- STATUS_ERROR
151
+ status
128
152
  end
129
153
 
130
154
  def print_yaml(object)
@@ -133,7 +157,7 @@ module Fontist
133
157
 
134
158
  def print_formulas(formulas)
135
159
  formulas.each do |formula, fonts|
136
- Fontist.ui.success(formula.installer)
160
+ Fontist.ui.success(formula.key)
137
161
 
138
162
  fonts.each do |font, styles|
139
163
  Fontist.ui.success(" #{font.name}")
@@ -148,7 +172,7 @@ module Fontist
148
172
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
149
173
  def print_list(formulas)
150
174
  formulas.each do |formula, fonts|
151
- Fontist.ui.say(formula.installer)
175
+ Fontist.ui.say(formula.key)
152
176
 
153
177
  fonts.each do |font, styles|
154
178
  Fontist.ui.say(" #{font.name}")