fontist 1.5.1 → 1.7.3
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/README.md +75 -28
- data/fontist.gemspec +1 -0
- data/lib/fontist.rb +5 -1
- data/lib/fontist/cli.rb +23 -12
- data/lib/fontist/errors.rb +1 -0
- data/lib/fontist/font.rb +17 -3
- data/lib/fontist/font_formula.rb +58 -16
- data/lib/fontist/formula.rb +13 -53
- data/lib/fontist/formula_template.rb +16 -2
- data/lib/fontist/import/create_formula.rb +15 -30
- data/lib/fontist/import/files/collection_file.rb +6 -1
- data/lib/fontist/import/files/file_requirement.rb +17 -0
- data/lib/fontist/import/files/font_detector.rb +48 -0
- data/lib/fontist/import/formula_builder.rb +7 -3
- data/lib/fontist/import/otf/font_file.rb +17 -3
- data/lib/fontist/import/recursive_extraction.rb +69 -12
- data/lib/fontist/manifest/install.rb +5 -13
- data/lib/fontist/manifest/locations.rb +51 -4
- data/lib/fontist/system_font.rb +44 -44
- data/lib/fontist/system_index.rb +92 -0
- data/lib/fontist/utils.rb +1 -0
- data/lib/fontist/utils/cache.rb +22 -6
- data/lib/fontist/utils/downloader.rb +54 -10
- data/lib/fontist/utils/dsl.rb +4 -0
- data/lib/fontist/utils/dsl/collection_font.rb +36 -0
- data/lib/fontist/utils/dsl/font.rb +2 -1
- data/lib/fontist/utils/exe_extractor.rb +7 -4
- data/lib/fontist/utils/ui.rb +4 -0
- data/lib/fontist/utils/zip_extractor.rb +20 -11
- data/lib/fontist/version.rb +1 -1
- metadata +20 -3
- data/lib/fontist/manifest/common.rb +0 -60
@@ -5,8 +5,10 @@ module Fontist
|
|
5
5
|
download = @downloaded === true ? false : download
|
6
6
|
|
7
7
|
exe_file = download_file(exe_file).path if download
|
8
|
+
|
9
|
+
Fontist.ui.say(%(Installing font "#{key}".))
|
8
10
|
cab_file = decompressor.search(exe_file)
|
9
|
-
cabbed_fonts = grep_fonts(cab_file.files
|
11
|
+
cabbed_fonts = grep_fonts(cab_file.files) || []
|
10
12
|
fonts_paths = extract_cabbed_fonts_to_assets(cabbed_fonts)
|
11
13
|
|
12
14
|
block_given? ? yield(fonts_paths) : fonts_paths
|
@@ -27,10 +29,10 @@ module Fontist
|
|
27
29
|
)
|
28
30
|
end
|
29
31
|
|
30
|
-
def grep_fonts(file
|
32
|
+
def grep_fonts(file)
|
31
33
|
Array.new.tap do |fonts|
|
32
34
|
while file
|
33
|
-
fonts.push(file) if file.filename
|
35
|
+
fonts.push(file) if font_file?(file.filename)
|
34
36
|
file = file.next
|
35
37
|
end
|
36
38
|
end
|
@@ -39,7 +41,8 @@ module Fontist
|
|
39
41
|
def extract_cabbed_fonts_to_assets(cabbed_fonts)
|
40
42
|
Array.new.tap do |fonts|
|
41
43
|
cabbed_fonts.each do |font|
|
42
|
-
|
44
|
+
target_filename = target_filename(font.filename)
|
45
|
+
font_path = fonts_path.join(target_filename).to_s
|
43
46
|
decompressor.extract(font, font_path)
|
44
47
|
|
45
48
|
fonts.push(font_path)
|
data/lib/fontist/utils/ui.rb
CHANGED
@@ -4,40 +4,49 @@ require "pathname"
|
|
4
4
|
module Fontist
|
5
5
|
module Utils
|
6
6
|
module ZipExtractor
|
7
|
-
|
8
|
-
# rubocop:disable Lint/UnusedMethodArgument
|
9
|
-
def zip_extract(resource, download: true, fonts_sub_dir: "")
|
7
|
+
def zip_extract(resource, download: true, fonts_sub_dir: nil)
|
10
8
|
zip_file = download_file(resource) if download
|
11
9
|
zip_file ||= resource.urls.first
|
12
10
|
|
13
|
-
|
11
|
+
Fontist.ui.say(%(Installing font "#{key}".))
|
12
|
+
fonts_paths = unzip_fonts(zip_file, fonts_sub_dir)
|
14
13
|
block_given? ? yield(fonts_paths) : fonts_paths
|
15
14
|
end
|
16
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
17
15
|
|
18
16
|
alias_method :unzip, :zip_extract
|
19
17
|
|
20
18
|
private
|
21
19
|
|
22
20
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
23
|
-
def unzip_fonts(file)
|
21
|
+
def unzip_fonts(file, subdir)
|
24
22
|
Zip.on_exists_proc = true
|
25
23
|
|
26
24
|
Array.new.tap do |fonts|
|
27
25
|
Zip::File.open(file) do |zip_file|
|
28
|
-
zip_file.
|
26
|
+
zip_file.each do |entry|
|
29
27
|
if entry.name
|
30
|
-
filename = Pathname.new(entry.name).basename
|
31
|
-
|
32
|
-
|
28
|
+
filename = Pathname.new(entry.name).basename.to_s
|
29
|
+
if font_directory?(entry.name, subdir) && font_file?(filename)
|
30
|
+
target_filename = target_filename(filename)
|
31
|
+
font_path = fonts_path.join(target_filename)
|
32
|
+
fonts.push(font_path.to_s)
|
33
33
|
|
34
|
-
|
34
|
+
entry.extract(font_path)
|
35
|
+
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
40
41
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
42
|
+
|
43
|
+
def font_directory?(path, subdir)
|
44
|
+
return true unless subdir
|
45
|
+
|
46
|
+
dirname = File.dirname(path)
|
47
|
+
normalized_pattern = subdir.chomp("/")
|
48
|
+
File.fnmatch?(normalized_pattern, dirname)
|
49
|
+
end
|
41
50
|
end
|
42
51
|
end
|
43
52
|
end
|
data/lib/fontist/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fontist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: down
|
@@ -109,6 +109,20 @@ dependencies:
|
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '1.0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: ttfunk
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.0'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.0'
|
112
126
|
- !ruby/object:Gem::Dependency
|
113
127
|
name: extract_ttc
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -284,6 +298,8 @@ files:
|
|
284
298
|
- lib/fontist/import/extractors/seven_zip_extractor.rb
|
285
299
|
- lib/fontist/import/extractors/zip_extractor.rb
|
286
300
|
- lib/fontist/import/files/collection_file.rb
|
301
|
+
- lib/fontist/import/files/file_requirement.rb
|
302
|
+
- lib/fontist/import/files/font_detector.rb
|
287
303
|
- lib/fontist/import/formula_builder.rb
|
288
304
|
- lib/fontist/import/formula_serializer.rb
|
289
305
|
- lib/fontist/import/google.rb
|
@@ -306,16 +322,17 @@ files:
|
|
306
322
|
- lib/fontist/import/template_helper.rb
|
307
323
|
- lib/fontist/import/text_helper.rb
|
308
324
|
- lib/fontist/manifest.rb
|
309
|
-
- lib/fontist/manifest/common.rb
|
310
325
|
- lib/fontist/manifest/install.rb
|
311
326
|
- lib/fontist/manifest/locations.rb
|
312
327
|
- lib/fontist/registry.rb
|
313
328
|
- lib/fontist/system.yml
|
314
329
|
- lib/fontist/system_font.rb
|
330
|
+
- lib/fontist/system_index.rb
|
315
331
|
- lib/fontist/utils.rb
|
316
332
|
- lib/fontist/utils/cache.rb
|
317
333
|
- lib/fontist/utils/downloader.rb
|
318
334
|
- lib/fontist/utils/dsl.rb
|
335
|
+
- lib/fontist/utils/dsl/collection_font.rb
|
319
336
|
- lib/fontist/utils/dsl/font.rb
|
320
337
|
- lib/fontist/utils/exe_extractor.rb
|
321
338
|
- lib/fontist/utils/msi_extractor.rb
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
module Manifest
|
3
|
-
class Common
|
4
|
-
def initialize(manifest)
|
5
|
-
@manifest = manifest
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.call(manifest)
|
9
|
-
new(manifest).call
|
10
|
-
end
|
11
|
-
|
12
|
-
def call
|
13
|
-
font_names.zip(font_paths).to_h
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def font_names
|
19
|
-
fonts.keys
|
20
|
-
end
|
21
|
-
|
22
|
-
def fonts
|
23
|
-
@fonts ||= begin
|
24
|
-
unless File.exist?(@manifest)
|
25
|
-
raise Fontist::Errors::ManifestCouldNotBeFoundError
|
26
|
-
end
|
27
|
-
|
28
|
-
fonts = YAML.load_file(@manifest)
|
29
|
-
unless fonts.is_a?(Hash)
|
30
|
-
raise Fontist::Errors::ManifestCouldNotBeReadError
|
31
|
-
end
|
32
|
-
|
33
|
-
fonts
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def font_paths
|
38
|
-
fonts.map do |font, styles|
|
39
|
-
styles_to_ary = [styles].flatten
|
40
|
-
style_paths_map(font, styles_to_ary)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def style_paths_map(font, names)
|
45
|
-
paths = style_paths(font, names)
|
46
|
-
names.zip(paths).to_h
|
47
|
-
end
|
48
|
-
|
49
|
-
def style_paths(font, names)
|
50
|
-
names.map do |style|
|
51
|
-
file_paths(font, style)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def file_paths(_font, _style)
|
56
|
-
raise NotImplementedError.new("Implement #file_paths in child class")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|