fontist 1.5.0 → 1.5.1
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/bin/fontist +0 -1
- data/lib/fontist/cli.rb +1 -0
- data/lib/fontist/import/create_formula.rb +4 -4
- data/lib/fontist/import/formula_builder.rb +9 -3
- data/lib/fontist/import/google/skiplist.yml +2 -0
- data/lib/fontist/import/otf/font_file.rb +3 -1
- data/lib/fontist/import/recursive_extraction.rb +32 -5
- data/lib/fontist/utils/cache.rb +5 -2
- data/lib/fontist/utils/exe_extractor.rb +12 -5
- data/lib/fontist/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a35bdc7e99674109bec5810eb8e57d91516ff93f7cf4aefbb608e0298a010f76
|
4
|
+
data.tar.gz: fc886de884ebc5309acb9dc6168fd6c2d7f460f11e05d9be8a1ffca8177e3b6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05f4a699ac69711925ebf9f036be06e5f5c302b9fe3cec23974bc7892ff18a73115d2373694784ee11ac8c0620b5df215a50cb9c2f173a6448a1ceb0b688753b
|
7
|
+
data.tar.gz: a41c8f091f5783cb0f2d0beabc0d92e9059f78415f36593f9de6b18eb1175d4059a38cb60710dd5064f0a8280aaa6ab9a13e68190903ed7ebe011e8b9068d39c
|
data/bin/fontist
CHANGED
data/lib/fontist/cli.rb
CHANGED
@@ -97,6 +97,7 @@ module Fontist
|
|
97
97
|
desc "create-formula URL", "Create a new formula with fonts from URL"
|
98
98
|
option :name, desc: "Example: Times New Roman"
|
99
99
|
option :mirror, repeatable: true
|
100
|
+
option :subarchive, desc: "Subarchive to choose when there are several ones"
|
100
101
|
def create_formula(url)
|
101
102
|
require "fontist/import/create_formula"
|
102
103
|
name = Fontist::Import::CreateFormula.new(url, options).call
|
@@ -8,9 +8,9 @@ require_relative "formula_builder"
|
|
8
8
|
module Fontist
|
9
9
|
module Import
|
10
10
|
class CreateFormula
|
11
|
-
FONT_PATTERN = /(\.ttf|\.otf)
|
12
|
-
FONT_COLLECTION_PATTERN = /\.ttc
|
13
|
-
LICENSE_PATTERN = /(OFL\.txt|UFL\.txt|LICENSE\.txt)$/i.freeze
|
11
|
+
FONT_PATTERN = /(\.ttf|\.otf)/i.freeze
|
12
|
+
FONT_COLLECTION_PATTERN = /\.ttc/i.freeze
|
13
|
+
LICENSE_PATTERN = /(OFL\.txt|UFL\.txt|LICENSE\.txt|COPYING)$/i.freeze
|
14
14
|
|
15
15
|
def initialize(url, options = {})
|
16
16
|
@url = url
|
@@ -42,7 +42,7 @@ module Fontist
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def extractor(archive)
|
45
|
-
RecursiveExtraction.new(archive)
|
45
|
+
RecursiveExtraction.new(archive, subarchive: @options[:subarchive])
|
46
46
|
end
|
47
47
|
|
48
48
|
def font_files(extractor)
|
@@ -89,7 +89,7 @@ module Fontist
|
|
89
89
|
def download(url)
|
90
90
|
Fontist::Utils::Downloader.download(url, progress_bar: true).path
|
91
91
|
rescue Errors::InvalidResourceError
|
92
|
-
Fontist.ui.
|
92
|
+
Fontist.ui.error("WARN: a mirror is not found '#{url}'")
|
93
93
|
nil
|
94
94
|
end
|
95
95
|
|
@@ -98,7 +98,7 @@ module Fontist
|
|
98
98
|
return output.first if output.size == 1
|
99
99
|
|
100
100
|
checksums = output.join(", ")
|
101
|
-
Fontist.ui.
|
101
|
+
Fontist.ui.error("WARN: SHA256 differs (#{checksums})")
|
102
102
|
output
|
103
103
|
end
|
104
104
|
|
@@ -147,7 +147,13 @@ module Fontist
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def open_license
|
150
|
-
|
150
|
+
unless @license_text
|
151
|
+
Fontist.ui.error("WARN: please add license manually")
|
152
|
+
return
|
153
|
+
end
|
154
|
+
|
155
|
+
Fontist.ui.error("WARN: ensure it's an open license, otherwise change \
|
156
|
+
to 'requires_license_agreement'")
|
151
157
|
|
152
158
|
TextHelper.cleanup(@license_text)
|
153
159
|
end
|
@@ -77,7 +77,9 @@ module Fontist
|
|
77
77
|
def read
|
78
78
|
text = REQUIREMENTS[:otfinfo].call(@path)
|
79
79
|
|
80
|
-
text
|
80
|
+
text
|
81
|
+
.encode("UTF-8", invalid: :replace, replace: "")
|
82
|
+
.split("\n")
|
81
83
|
.select { |x| x.include?(":") }
|
82
84
|
.map { |x| x.split(":", 2) }
|
83
85
|
.map { |x| x.map { |y| Fontist::Import::TextHelper.cleanup(y) } }
|
@@ -4,11 +4,12 @@ require_relative "extractors"
|
|
4
4
|
module Fontist
|
5
5
|
module Import
|
6
6
|
class RecursiveExtraction
|
7
|
-
BOTH_FONTS_PATTERN = "**/*.{ttf,otf,ttc}".freeze
|
7
|
+
BOTH_FONTS_PATTERN = "**/*.{ttf,otf,ttc}*".freeze
|
8
8
|
ARCHIVE_EXTENSIONS = %w[zip msi exe cab].freeze
|
9
9
|
|
10
|
-
def initialize(archive)
|
10
|
+
def initialize(archive, subarchive: nil)
|
11
11
|
@archive = archive
|
12
|
+
@subarchive = subarchive
|
12
13
|
@operations = []
|
13
14
|
end
|
14
15
|
|
@@ -57,6 +58,8 @@ module Fontist
|
|
57
58
|
|
58
59
|
def operate_on_archive(archive)
|
59
60
|
extractor = choose_extractor(archive)
|
61
|
+
Fontist.ui.say("Extracting #{archive} with #{extractor.class.name}")
|
62
|
+
|
60
63
|
save_operation(extractor)
|
61
64
|
extractor.extract
|
62
65
|
end
|
@@ -87,9 +90,33 @@ module Fontist
|
|
87
90
|
end
|
88
91
|
|
89
92
|
def find_archive(path)
|
90
|
-
Dir.children(path)
|
91
|
-
|
92
|
-
|
93
|
+
paths = Dir.children(path).map { |file| File.join(path, file) }
|
94
|
+
by_subarchive(paths) || by_size(paths)
|
95
|
+
end
|
96
|
+
|
97
|
+
def by_subarchive(paths)
|
98
|
+
return unless @subarchive
|
99
|
+
|
100
|
+
path_found = paths.detect do |path|
|
101
|
+
@subarchive == File.basename(path)
|
102
|
+
end
|
103
|
+
|
104
|
+
return unless path_found
|
105
|
+
|
106
|
+
save_operation_subarchive(path_found)
|
107
|
+
|
108
|
+
path_found
|
109
|
+
end
|
110
|
+
|
111
|
+
def save_operation_subarchive(path)
|
112
|
+
@operations.last[:options] ||= {}
|
113
|
+
@operations.last[:options][:subarchive] = File.basename(path)
|
114
|
+
end
|
115
|
+
|
116
|
+
def by_size(paths)
|
117
|
+
paths.max_by do |path|
|
118
|
+
[file_type(path), File.size(path)]
|
119
|
+
end
|
93
120
|
end
|
94
121
|
|
95
122
|
def file_type(file_path)
|
data/lib/fontist/utils/cache.rb
CHANGED
@@ -6,7 +6,7 @@ module Fontist
|
|
6
6
|
return downloaded_path(map[key]) if cache_exist?(map[key])
|
7
7
|
|
8
8
|
generated_file = yield
|
9
|
-
path = save_cache(generated_file, key
|
9
|
+
path = save_cache(generated_file, key)
|
10
10
|
|
11
11
|
downloaded_path(path)
|
12
12
|
end
|
@@ -29,10 +29,13 @@ module Fontist
|
|
29
29
|
path && File.exist?(Fontist.downloads_path.join(path))
|
30
30
|
end
|
31
31
|
|
32
|
-
def save_cache(generated_file, key
|
32
|
+
def save_cache(generated_file, key)
|
33
33
|
path = move_to_downloads(generated_file)
|
34
|
+
|
35
|
+
map = load_cache
|
34
36
|
map[key] = path
|
35
37
|
File.write(cache_map_path, YAML.dump(map))
|
38
|
+
|
36
39
|
path
|
37
40
|
end
|
38
41
|
|
@@ -12,10 +12,10 @@ module Fontist
|
|
12
12
|
block_given? ? yield(fonts_paths) : fonts_paths
|
13
13
|
end
|
14
14
|
|
15
|
-
def exe_extract(source)
|
15
|
+
def exe_extract(source, subarchive: nil)
|
16
16
|
cab_file = decompressor.search(download_file(source).path)
|
17
|
-
|
18
|
-
block_given? ? yield(
|
17
|
+
subarchive_path = extract_subarchive(cab_file.files, subarchive)
|
18
|
+
block_given? ? yield(subarchive_path) : subarchive_path
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
@@ -47,10 +47,11 @@ module Fontist
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def extract_subarchive(file, subarchive = nil)
|
51
51
|
while file
|
52
52
|
filename = file.filename
|
53
|
-
|
53
|
+
|
54
|
+
if subarchive_found?(filename, subarchive)
|
54
55
|
file_path = File.join(Dir.mktmpdir, filename)
|
55
56
|
decompressor.extract(file, file_path)
|
56
57
|
|
@@ -60,6 +61,12 @@ module Fontist
|
|
60
61
|
file = file.next
|
61
62
|
end
|
62
63
|
end
|
64
|
+
|
65
|
+
def subarchive_found?(filename, subarchive)
|
66
|
+
return subarchive == filename if subarchive
|
67
|
+
|
68
|
+
filename.include?("cab") || filename.include?("msi")
|
69
|
+
end
|
63
70
|
end
|
64
71
|
end
|
65
72
|
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.5.
|
4
|
+
version: 1.5.1
|
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-11-
|
12
|
+
date: 2020-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: down
|