fontist 1.3.0 → 1.4.0
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/check_google.yml +28 -0
- data/.github/workflows/macosx.yml +3 -0
- data/.github/workflows/ubuntu.yml +1 -1
- data/.github/workflows/windows.yml +1 -1
- data/.gitignore +6 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +22 -0
- data/README.md +54 -0
- data/bin/check_google +8 -0
- data/bin/convert_formulas +8 -0
- data/bin/fontist +8 -0
- data/bin/generate_otfinfo +8 -0
- data/bin/import_google +8 -0
- data/bin/stripttc +0 -0
- data/fontist.gemspec +14 -1
- data/lib/fontist.rb +18 -13
- data/lib/fontist/cli.rb +118 -0
- data/lib/fontist/errors.rb +3 -0
- data/lib/fontist/font.rb +117 -2
- data/lib/fontist/font_formula.rb +7 -3
- data/lib/fontist/fontist_font.rb +70 -0
- data/lib/fontist/formula.rb +11 -8
- data/lib/fontist/formula_template.rb +103 -0
- data/lib/fontist/formulas.rb +41 -0
- data/lib/fontist/import.rb +9 -0
- data/lib/fontist/import/convert_formulas.rb +65 -0
- data/lib/fontist/import/create_formula.rb +74 -0
- data/lib/fontist/import/extractors.rb +5 -0
- data/lib/fontist/import/extractors/cab_extractor.rb +37 -0
- data/lib/fontist/import/extractors/extractor.rb +19 -0
- data/lib/fontist/import/extractors/ole_extractor.rb +41 -0
- data/lib/fontist/import/extractors/seven_zip_extractor.rb +44 -0
- data/lib/fontist/import/extractors/zip_extractor.rb +31 -0
- data/lib/fontist/import/files/collection_file.rb +48 -0
- data/lib/fontist/import/formula_builder.rb +115 -0
- data/lib/fontist/import/formula_serializer.rb +133 -0
- data/lib/fontist/import/google.rb +16 -0
- data/lib/fontist/import/google/fonts_public.md +10 -0
- data/lib/fontist/import/google/fonts_public.pb.rb +71 -0
- data/lib/fontist/import/google/fonts_public.proto +46 -0
- data/lib/fontist/import/google/new_fonts_fetcher.rb +121 -0
- data/lib/fontist/import/google/skiplist.yml +6 -0
- data/lib/fontist/import/google_check.rb +34 -0
- data/lib/fontist/import/google_import.rb +180 -0
- data/lib/fontist/import/helpers/hash_helper.rb +13 -0
- data/lib/fontist/import/helpers/system_helper.rb +20 -0
- data/lib/fontist/import/otf/font_file.rb +89 -0
- data/lib/fontist/import/otf_parser.rb +25 -0
- data/lib/fontist/import/otf_style.rb +29 -0
- data/lib/fontist/import/otfinfo/otfinfo_requirement.rb +22 -0
- data/lib/fontist/import/otfinfo/template.erb +20 -0
- data/lib/fontist/import/otfinfo_generate.rb +45 -0
- data/lib/fontist/import/recursive_extraction.rb +101 -0
- data/lib/fontist/import/template_helper.rb +19 -0
- data/lib/fontist/import/text_helper.rb +30 -0
- data/lib/fontist/system_font.rb +12 -18
- data/lib/fontist/utils.rb +4 -0
- data/lib/fontist/utils/cache.rb +69 -0
- data/lib/fontist/utils/downloader.rb +15 -2
- data/lib/fontist/utils/dsl.rb +4 -0
- data/lib/fontist/utils/dsl/font.rb +37 -0
- data/lib/fontist/utils/exe_extractor.rb +12 -19
- data/lib/fontist/utils/msi_extractor.rb +31 -0
- data/lib/fontist/utils/seven_zip_extractor.rb +41 -0
- data/lib/fontist/utils/system.rb +23 -0
- data/lib/fontist/utils/ui.rb +8 -0
- data/lib/fontist/utils/zip_extractor.rb +9 -4
- data/lib/fontist/version.rb +1 -1
- metadata +154 -49
- data/lib/fontist/formulas/andale_font.rb +0 -80
- data/lib/fontist/formulas/arial_black_font.rb +0 -79
- data/lib/fontist/formulas/cleartype_fonts.rb +0 -227
- data/lib/fontist/formulas/comic_font.rb +0 -78
- data/lib/fontist/formulas/courier_font.rb +0 -81
- data/lib/fontist/formulas/euphemia_font.rb +0 -85
- data/lib/fontist/formulas/georgia_font.rb +0 -80
- data/lib/fontist/formulas/impact_font.rb +0 -78
- data/lib/fontist/formulas/montserrat_font.rb +0 -132
- data/lib/fontist/formulas/ms_truetype_fonts.rb +0 -125
- data/lib/fontist/formulas/open_sans_fonts.rb +0 -263
- data/lib/fontist/formulas/overpass_font.rb +0 -73
- data/lib/fontist/formulas/source_fonts.rb +0 -109
- data/lib/fontist/formulas/stix_fonts.rb +0 -108
- data/lib/fontist/formulas/tahoma_font.rb +0 -147
- data/lib/fontist/formulas/webding_font.rb +0 -78
- data/spec/fontist/font_formula_spec.rb +0 -67
- data/spec/fontist/font_spec.rb +0 -113
- data/spec/fontist/formula_spec.rb +0 -67
- data/spec/fontist/formulas/andale_font_spec.rb +0 -29
- data/spec/fontist/formulas/arial_black_font_spec.rb +0 -29
- data/spec/fontist/formulas/cleartype_fonts_spec.rb +0 -38
- data/spec/fontist/formulas/comic_font_spec.rb +0 -29
- data/spec/fontist/formulas/courier_font_spec.rb +0 -29
- data/spec/fontist/formulas/euphemia_font_spec.rb +0 -29
- data/spec/fontist/formulas/georgia_font_spec.rb +0 -29
- data/spec/fontist/formulas/impact_font_spec.rb +0 -29
- data/spec/fontist/formulas/montserrat_font_spec.rb +0 -29
- data/spec/fontist/formulas/ms_truetype_fonts_spec.rb +0 -29
- data/spec/fontist/formulas/open_sans_fonts_spec.rb +0 -29
- data/spec/fontist/formulas/overpass_font_spec.rb +0 -29
- data/spec/fontist/formulas/source_fonts_spec.rb +0 -31
- data/spec/fontist/formulas/stix_fonts_spec.rb +0 -29
- data/spec/fontist/formulas/tahoma_font_spec.rb +0 -29
- data/spec/fontist/formulas/webding_font_spec.rb +0 -29
- data/spec/fontist/registry_spec.rb +0 -47
- data/spec/fontist/system_font_spec.rb +0 -44
- data/spec/fontist/utils/downloader_spec.rb +0 -35
- data/spec/fontist_spec.rb +0 -5
- data/spec/spec_helper.rb +0 -22
- data/spec/support/fontist_helper.rb +0 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 02323a2a83176e79be999c101277ab2d777986b07185ca8d18bbd47c0bae88ec
|
|
4
|
+
data.tar.gz: c5909e4220f762be25a22fe776f4273ef2affa44b68c3f16d6d181b83cfcf287
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 831d21fc0882000bf30003193d8b4bacf8bbe002c8d07bebb1b36ab05cf552cbd844f0ddd0998beb59bc059e54ed365f92e79020c673130a90b61d3db515a2d7
|
|
7
|
+
data.tar.gz: 88f6a870cda4177824d9c5499250e5a45a088afc269e185a942c71bd02ea4589539473e72445a13c38265e7de091a6ca95ffcbde37c4bed08c87c251a02f4cb8
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: check_google
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 0 * * *'
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
check:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v2
|
|
13
|
+
|
|
14
|
+
- uses: actions/setup-ruby@v1
|
|
15
|
+
with:
|
|
16
|
+
ruby-version: 2.6
|
|
17
|
+
|
|
18
|
+
- name: Install otfinfo
|
|
19
|
+
run: sudo apt-get install lcdf-typetools
|
|
20
|
+
|
|
21
|
+
- name: Install bundler
|
|
22
|
+
run: gem install bundler
|
|
23
|
+
|
|
24
|
+
- name: Setup
|
|
25
|
+
run: bin/setup
|
|
26
|
+
|
|
27
|
+
- name: Check new fonts
|
|
28
|
+
run: TEST_ENV=CI bin/check_google
|
data/.gitignore
CHANGED
|
@@ -11,6 +11,12 @@ Gemfile.lock
|
|
|
11
11
|
# fonts
|
|
12
12
|
/spec/fixtures/fonts/*
|
|
13
13
|
/spec/fixtures/fonts/DejaVuSerif.ttf
|
|
14
|
+
/spec/fixtures/formulas/
|
|
15
|
+
/spec/fixtures/*
|
|
16
|
+
!/spec/fixtures/system.yml
|
|
14
17
|
|
|
15
18
|
# rspec failure tracking
|
|
16
19
|
.rspec_status
|
|
20
|
+
|
|
21
|
+
# remote file cache
|
|
22
|
+
.rubocop-*
|
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
inherit_from:
|
|
2
|
+
- 'https://raw.githubusercontent.com/fontist/oss-guides/master/ci/rubocop.yml'
|
|
3
|
+
|
|
4
|
+
AllCops:
|
|
5
|
+
Exclude:
|
|
6
|
+
- 'lib/fontist/import/google/fonts_public.pb.rb'
|
|
7
|
+
- 'lib/fontist/formula_template.rb'
|
|
8
|
+
|
|
9
|
+
Rails:
|
|
10
|
+
Enabled: false
|
|
11
|
+
|
|
12
|
+
Metrics/LineLength:
|
|
13
|
+
Exclude:
|
|
14
|
+
- 'lib/fontist/formulas/**/*.rb'
|
|
15
|
+
|
|
16
|
+
Layout/IndentFirstHashElement:
|
|
17
|
+
Exclude:
|
|
18
|
+
- 'lib/fontist/formulas/**/*.rb'
|
|
19
|
+
|
|
20
|
+
Layout/IndentHeredoc:
|
|
21
|
+
Exclude:
|
|
22
|
+
- 'lib/fontist/formulas/**/*.rb'
|
data/README.md
CHANGED
|
@@ -26,6 +26,14 @@ Or install it yourself as:
|
|
|
26
26
|
gem install fontist
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
### Fetch formulas
|
|
30
|
+
|
|
31
|
+
After installation please fetch formulas to your system:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
fontist update
|
|
35
|
+
```
|
|
36
|
+
|
|
29
37
|
## Usage
|
|
30
38
|
|
|
31
39
|
### Font
|
|
@@ -151,6 +159,50 @@ Run the test suite
|
|
|
151
159
|
bin/rspec
|
|
152
160
|
```
|
|
153
161
|
|
|
162
|
+
### Formulas storage
|
|
163
|
+
|
|
164
|
+
All formulas are kept in the [formulas][fontist-formulas] repository. If you'd
|
|
165
|
+
like to add a new one or change any existing, please refer to its documentation.
|
|
166
|
+
|
|
167
|
+
### Auto-generate a formula
|
|
168
|
+
|
|
169
|
+
A formula could be generated from a fonts archive. Just specify a URL to the
|
|
170
|
+
archive:
|
|
171
|
+
|
|
172
|
+
```sh
|
|
173
|
+
fontist create-formula https://www.latofonts.com/download/lato2ofl-zip/
|
|
174
|
+
cp lato.yml ~/.fontist/formulas/Formulas/
|
|
175
|
+
cd ~/.fontist/formulas
|
|
176
|
+
git add Formulas/lato.yml
|
|
177
|
+
git commit -m "Add Lato formula"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Google Import
|
|
181
|
+
|
|
182
|
+
The library contains formulas for [Google Foonts][google-fonts]. A GHA workflow
|
|
183
|
+
checks for fonts update every day. In case an update is found, it could be
|
|
184
|
+
fetched to the library by:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
bin/import_google
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
The script would update formulas which should be committed to a separate
|
|
191
|
+
repository [formulas][fontist-formulas]:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
cd ~/.fontist/formulas
|
|
195
|
+
git add Formulas/google
|
|
196
|
+
git commit -m "Google Fonts update"
|
|
197
|
+
git push
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### TTC extraction
|
|
201
|
+
|
|
202
|
+
The stripttc script is used for extraction of TTC files. It's taken from the
|
|
203
|
+
https://github.com/DavidBarts/getfonts repository, and placed in the bin/
|
|
204
|
+
directory.
|
|
205
|
+
|
|
154
206
|
## Contributing
|
|
155
207
|
|
|
156
208
|
First, thank you for contributing! We love pull requests from everyone. By
|
|
@@ -177,3 +229,5 @@ This gem is developed, maintained and funded by [Ribose Inc.][riboseinc]
|
|
|
177
229
|
[issues]: https://github.com/fontist/fontist/issues
|
|
178
230
|
[squash]: https://github.com/thoughtbot/guides/tree/master/protocol/git#write-a-feature
|
|
179
231
|
[sandi-metz]: http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers
|
|
232
|
+
[fontist-formulas]: https://github.com/fontist/formulas
|
|
233
|
+
[google-fonts]: https://fonts.google.com
|
data/bin/check_google
ADDED
data/bin/fontist
ADDED
data/bin/import_google
ADDED
data/bin/stripttc
ADDED
|
Binary file
|
data/fontist.gemspec
CHANGED
|
@@ -13,21 +13,34 @@ Gem::Specification.new do |spec|
|
|
|
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"
|
|
17
|
+
|
|
16
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
17
19
|
spec.metadata["source_code_uri"] = "https://github.com/fontist/fontist"
|
|
18
20
|
spec.metadata["changelog_uri"] = "https://github.com/fontist/fontist"
|
|
19
21
|
|
|
20
22
|
spec.require_paths = ["lib"]
|
|
21
|
-
spec.files = `git ls-files`.split("\
|
|
23
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
24
|
+
f.match(%r{^(test|spec|features)/})
|
|
25
|
+
end
|
|
26
|
+
spec.bindir = "bin"
|
|
27
|
+
spec.executables = ["fontist"]
|
|
22
28
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
|
23
29
|
|
|
24
30
|
spec.add_runtime_dependency "down", "~> 5.0"
|
|
25
31
|
spec.add_runtime_dependency "libmspack", "~> 0.1.0"
|
|
26
32
|
spec.add_runtime_dependency "rubyzip", "~> 2.3.0"
|
|
33
|
+
spec.add_runtime_dependency "seven_zip_ruby", "~> 1.0"
|
|
34
|
+
spec.add_runtime_dependency "ruby-ole", "~> 1.0"
|
|
27
35
|
spec.add_runtime_dependency "thor", "~> 1.0.1"
|
|
36
|
+
spec.add_runtime_dependency "git", "~> 1.0"
|
|
28
37
|
|
|
29
38
|
spec.add_development_dependency "pry"
|
|
30
39
|
spec.add_development_dependency "bundler", "~> 2.0"
|
|
31
40
|
spec.add_development_dependency "rake", "~> 12.3.3"
|
|
32
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
42
|
+
spec.add_development_dependency "rubocop", "0.75.0"
|
|
43
|
+
spec.add_development_dependency "rubocop-rails"
|
|
44
|
+
spec.add_development_dependency "rubocop-performance"
|
|
45
|
+
spec.add_development_dependency "ruby-protocol-buffers", "~> 1.0"
|
|
33
46
|
end
|
data/lib/fontist.rb
CHANGED
|
@@ -12,6 +12,7 @@ require "fontist/registry"
|
|
|
12
12
|
require "fontist/formulas"
|
|
13
13
|
require "fontist/formula"
|
|
14
14
|
require "fontist/system_font"
|
|
15
|
+
require "fontist/fontist_font"
|
|
15
16
|
|
|
16
17
|
module Fontist
|
|
17
18
|
def self.ui
|
|
@@ -34,19 +35,23 @@ module Fontist
|
|
|
34
35
|
Fontist.fontist_path.join("fonts")
|
|
35
36
|
end
|
|
36
37
|
|
|
38
|
+
def self.formulas_repo_path
|
|
39
|
+
Fontist.fontist_path.join("formulas")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.formulas_repo_url
|
|
43
|
+
"https://github.com/fontist/formulas.git"
|
|
44
|
+
end
|
|
45
|
+
|
|
37
46
|
def self.formulas_path
|
|
38
|
-
Fontist.
|
|
47
|
+
Fontist.formulas_repo_path.join("Formulas")
|
|
39
48
|
end
|
|
40
|
-
end
|
|
41
49
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
# the fontist related path helpers.
|
|
51
|
-
#
|
|
52
|
-
Dir[Fontist.formulas_path.join("**.rb").to_s].sort.each { |file| require file }
|
|
50
|
+
def self.downloads_path
|
|
51
|
+
Fontist.fontist_path.join("downloads")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.system_file_path
|
|
55
|
+
Fontist.lib_path.join("fontist", "system.yml")
|
|
56
|
+
end
|
|
57
|
+
end
|
data/lib/fontist/cli.rb
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require "thor"
|
|
2
|
+
|
|
3
|
+
module Fontist
|
|
4
|
+
class CLI < Thor
|
|
5
|
+
STATUS_SUCCESS = 0
|
|
6
|
+
STATUS_ERROR = 1
|
|
7
|
+
|
|
8
|
+
desc "install FONT", "Install font by font or formula"
|
|
9
|
+
def install(font)
|
|
10
|
+
fonts_paths = Fontist::Font.install(font)
|
|
11
|
+
Fontist.ui.success("These fonts are found or installed:")
|
|
12
|
+
Fontist.ui.success(fonts_paths.join("\n"))
|
|
13
|
+
STATUS_SUCCESS
|
|
14
|
+
rescue Fontist::Errors::NonSupportedFontError
|
|
15
|
+
Fontist.ui.error("Could not find font '#{font}'.")
|
|
16
|
+
STATUS_ERROR
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc "uninstall/remove FONT", "Uninstall font by font or formula"
|
|
20
|
+
def uninstall(font)
|
|
21
|
+
fonts_paths = Fontist::Font.uninstall(font)
|
|
22
|
+
Fontist.ui.success("These fonts are removed:")
|
|
23
|
+
Fontist.ui.success(fonts_paths.join("\n"))
|
|
24
|
+
STATUS_SUCCESS
|
|
25
|
+
rescue Fontist::Errors::MissingFontError => e
|
|
26
|
+
Fontist.ui.error(e.message)
|
|
27
|
+
STATUS_ERROR
|
|
28
|
+
rescue Fontist::Errors::NonSupportedFontError
|
|
29
|
+
Fontist.ui.error("Could not find font '#{font}'.")
|
|
30
|
+
STATUS_ERROR
|
|
31
|
+
end
|
|
32
|
+
map remove: :uninstall
|
|
33
|
+
|
|
34
|
+
desc "status [FONT]", "Show status of FONT or all fonts in fontist"
|
|
35
|
+
def status(font = nil)
|
|
36
|
+
formulas = Fontist::Font.status(font)
|
|
37
|
+
return error("No font is installed.") if formulas.empty?
|
|
38
|
+
|
|
39
|
+
print_formulas(formulas)
|
|
40
|
+
success
|
|
41
|
+
rescue Fontist::Errors::MissingFontError => e
|
|
42
|
+
error(e.message)
|
|
43
|
+
rescue Fontist::Errors::NonSupportedFontError
|
|
44
|
+
error("Could not find font '#{font}'.")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
desc "list [FONT]", "List installation status of FONT or fonts in fontist"
|
|
48
|
+
def list(font = nil)
|
|
49
|
+
formulas = Fontist::Font.list(font)
|
|
50
|
+
print_list(formulas)
|
|
51
|
+
success
|
|
52
|
+
rescue Fontist::Errors::NonSupportedFontError
|
|
53
|
+
error("Could not find font '#{font}'.")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
desc "update", "Update formulas"
|
|
57
|
+
def update
|
|
58
|
+
Formulas.fetch_formulas
|
|
59
|
+
Fontist.ui.say("Formulas have been successfully updated")
|
|
60
|
+
STATUS_SUCCESS
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
desc "create-formula URL", "Create a new formula with fonts from URL"
|
|
64
|
+
option :name, desc: "Example: Times New Roman"
|
|
65
|
+
option :mirror, repeatable: true
|
|
66
|
+
def create_formula(url)
|
|
67
|
+
require "fontist/import/create_formula"
|
|
68
|
+
name = Fontist::Import::CreateFormula.new(url, options).call
|
|
69
|
+
Fontist.ui.say("#{name} formula has been successfully created")
|
|
70
|
+
STATUS_SUCCESS
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def success
|
|
76
|
+
STATUS_SUCCESS
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def error(message)
|
|
80
|
+
Fontist.ui.error(message)
|
|
81
|
+
STATUS_ERROR
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def print_formulas(formulas)
|
|
85
|
+
formulas.each do |formula, fonts|
|
|
86
|
+
Fontist.ui.success(formula.installer)
|
|
87
|
+
|
|
88
|
+
fonts.each do |font, styles|
|
|
89
|
+
Fontist.ui.success(" #{font.name}")
|
|
90
|
+
|
|
91
|
+
styles.each do |style, path|
|
|
92
|
+
Fontist.ui.success(" #{style.type} (#{path})")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
99
|
+
def print_list(formulas)
|
|
100
|
+
formulas.each do |formula, fonts|
|
|
101
|
+
Fontist.ui.say(formula.installer)
|
|
102
|
+
|
|
103
|
+
fonts.each do |font, styles|
|
|
104
|
+
Fontist.ui.say(" #{font.name}")
|
|
105
|
+
|
|
106
|
+
styles.each do |style, installed|
|
|
107
|
+
if installed
|
|
108
|
+
Fontist.ui.success(" #{style.type} (installed)")
|
|
109
|
+
else
|
|
110
|
+
Fontist.ui.error(" #{style.type} (uninstalled)")
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
117
|
+
end
|
|
118
|
+
end
|
data/lib/fontist/errors.rb
CHANGED
|
@@ -6,5 +6,8 @@ module Fontist
|
|
|
6
6
|
class TamperedFileError < StandardError; end
|
|
7
7
|
class InvalidResourceError < StandardError; end
|
|
8
8
|
class TimeoutError < StandardError; end
|
|
9
|
+
class MissingAttributeError < StandardError; end
|
|
10
|
+
class FontNotFoundError < StandardError; end
|
|
11
|
+
class BinaryCallError < StandardError; end
|
|
9
12
|
end
|
|
10
13
|
end
|
data/lib/fontist/font.rb
CHANGED
|
@@ -19,6 +19,18 @@ module Fontist
|
|
|
19
19
|
new(name: name, confirmation: confirmation).install
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def self.uninstall(name)
|
|
23
|
+
new(name: name).uninstall
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.status(name)
|
|
27
|
+
new(name: name).status
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.list(name)
|
|
31
|
+
new(name: name).list
|
|
32
|
+
end
|
|
33
|
+
|
|
22
34
|
def find
|
|
23
35
|
find_system_font || downloadable_font || raise(
|
|
24
36
|
Fontist::Errors::NonSupportedFontError
|
|
@@ -31,6 +43,26 @@ module Fontist
|
|
|
31
43
|
)
|
|
32
44
|
end
|
|
33
45
|
|
|
46
|
+
def uninstall
|
|
47
|
+
uninstall_font || downloadable_font || raise(
|
|
48
|
+
Fontist::Errors::NonSupportedFontError
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def status
|
|
53
|
+
return installed_statuses unless @name
|
|
54
|
+
|
|
55
|
+
font_status || downloadable_font || raise(
|
|
56
|
+
Fontist::Errors::NonSupportedFontError
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def list
|
|
61
|
+
return all_list unless @name
|
|
62
|
+
|
|
63
|
+
font_list || raise(Fontist::Errors::NonSupportedFontError)
|
|
64
|
+
end
|
|
65
|
+
|
|
34
66
|
def all
|
|
35
67
|
Fontist::Formula.all.to_h.map { |_name, formula| formula.fonts }.flatten
|
|
36
68
|
end
|
|
@@ -62,8 +94,8 @@ module Fontist
|
|
|
62
94
|
if formula
|
|
63
95
|
raise(
|
|
64
96
|
Fontist::Errors::MissingFontError,
|
|
65
|
-
"#{name}
|
|
66
|
-
"
|
|
97
|
+
"#{name} fonts are missing, please run " \
|
|
98
|
+
"`fontist install '#{name}'` to " \
|
|
67
99
|
"download the font."
|
|
68
100
|
)
|
|
69
101
|
end
|
|
@@ -109,5 +141,88 @@ module Fontist
|
|
|
109
141
|
FONT LICENSE END ("#{name}")
|
|
110
142
|
MSG
|
|
111
143
|
end
|
|
144
|
+
|
|
145
|
+
def uninstall_font
|
|
146
|
+
paths = find_fontist_font
|
|
147
|
+
return unless paths
|
|
148
|
+
|
|
149
|
+
paths.each do |path|
|
|
150
|
+
File.delete(path)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
paths
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def find_fontist_font
|
|
157
|
+
Fontist::FontistFont.find(name)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def installed_statuses
|
|
161
|
+
installed_styles(all_formulas)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def all_formulas
|
|
165
|
+
Fontist::Formula.all.to_h.values
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def font_status
|
|
169
|
+
return unless formula
|
|
170
|
+
|
|
171
|
+
statuses = installed_styles([formula])
|
|
172
|
+
statuses.empty? ? nil : statuses
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def installed_styles(formulas)
|
|
176
|
+
filter_blank(formulas) do |formula|
|
|
177
|
+
filter_blank(formula.fonts) do |font|
|
|
178
|
+
filter_blank(font.styles) do |style|
|
|
179
|
+
path(style)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def filter_blank(elements)
|
|
186
|
+
elements.map { |e| [e, yield(e)] }
|
|
187
|
+
.to_h
|
|
188
|
+
.reject { |_k, v| v.nil? || v.empty? }
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def path(style)
|
|
192
|
+
font_paths.grep(/#{style.font}/i).first
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def font_paths
|
|
196
|
+
@font_paths ||= Dir.glob(Fontist.fonts_path.join("**"))
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def all_list
|
|
200
|
+
list_styles(all_formulas)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def font_list
|
|
204
|
+
return unless formula
|
|
205
|
+
|
|
206
|
+
list_styles([formula])
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def list_styles(formulas)
|
|
210
|
+
map_to_hash(formulas) do |formula|
|
|
211
|
+
map_to_hash(formula.fonts) do |font|
|
|
212
|
+
map_to_hash(font.styles) do |style|
|
|
213
|
+
installed(style)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def map_to_hash(elements)
|
|
220
|
+
elements.map { |e| [e, yield(e)] }.to_h
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def installed(style)
|
|
224
|
+
path(style) ? true : false
|
|
225
|
+
end
|
|
226
|
+
|
|
112
227
|
end
|
|
113
228
|
end
|