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.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +38 -0
- data/.github/workflows/rspec.yml +58 -0
- data/README.md +77 -14
- data/{bin → exe}/fontist +0 -0
- data/fontist.gemspec +10 -7
- data/lib/fontist.rb +5 -2
- data/lib/fontist/cli.rb +65 -41
- data/lib/fontist/errors.rb +63 -12
- data/lib/fontist/font.rb +23 -37
- data/lib/fontist/font_installer.rb +118 -0
- data/lib/fontist/fontist_font.rb +3 -49
- data/lib/fontist/formula.rb +101 -35
- data/lib/fontist/formula_paths.rb +43 -0
- data/lib/fontist/helpers.rb +7 -0
- data/lib/fontist/import/create_formula.rb +3 -2
- data/lib/fontist/import/extractors.rb +4 -0
- data/lib/fontist/import/extractors/cpio_extractor.rb +39 -0
- data/lib/fontist/import/extractors/gzip_extractor.rb +27 -0
- data/lib/fontist/import/extractors/rpm_extractor.rb +45 -0
- data/lib/fontist/import/extractors/tar_extractor.rb +47 -0
- data/lib/fontist/import/google/skiplist.yml +3 -0
- data/lib/fontist/import/google_check.rb +1 -1
- data/lib/fontist/import/google_import.rb +3 -4
- data/lib/fontist/import/otfinfo_generate.rb +1 -1
- data/lib/fontist/import/recursive_extraction.rb +26 -8
- data/lib/fontist/import/sil_import.rb +99 -0
- data/lib/fontist/index.rb +72 -0
- data/lib/fontist/index_formula.rb +30 -0
- data/lib/fontist/manifest/install.rb +4 -9
- data/lib/fontist/manifest/locations.rb +28 -20
- data/lib/fontist/system_font.rb +32 -62
- data/lib/fontist/system_index.rb +47 -5
- data/lib/fontist/utils.rb +5 -0
- data/lib/fontist/utils/cache.rb +12 -4
- data/lib/fontist/utils/cpio/cpio.rb +199 -0
- data/lib/fontist/utils/cpio_extractor.rb +47 -0
- data/lib/fontist/utils/exe_extractor.rb +1 -1
- data/lib/fontist/utils/gzip_extractor.rb +24 -0
- data/lib/fontist/utils/locking.rb +17 -0
- data/lib/fontist/utils/rpm_extractor.rb +37 -0
- data/lib/fontist/utils/tar_extractor.rb +61 -0
- data/lib/fontist/utils/zip_extractor.rb +1 -1
- data/lib/fontist/version.rb +1 -1
- metadata +68 -24
- data/.github/workflows/macosx.yml +0 -33
- data/.github/workflows/ubuntu.yml +0 -30
- data/.github/workflows/windows.yml +0 -32
- data/bin/check_google +0 -8
- data/bin/console +0 -11
- data/bin/convert_formulas +0 -8
- data/bin/generate_otfinfo +0 -8
- data/bin/import_google +0 -8
- data/bin/rspec +0 -29
- data/bin/setup +0 -7
- data/lib/fontist/font_formula.rb +0 -169
- data/lib/fontist/formula_template.rb +0 -122
- data/lib/fontist/formulas.rb +0 -56
- data/lib/fontist/registry.rb +0 -43
@@ -0,0 +1,199 @@
|
|
1
|
+
# code is obtained from https://github.com/jordansissel/ruby-arr-pm/blob/8071591173ebb90dea27d5acfdde69a37dcb2744/cpio.rb
|
2
|
+
# rubocop:disable all
|
3
|
+
class BoundedIO
|
4
|
+
attr_reader :length
|
5
|
+
attr_reader :remaining
|
6
|
+
|
7
|
+
def initialize(io, length, &eof_callback)
|
8
|
+
@io = io
|
9
|
+
@length = length
|
10
|
+
@remaining = length
|
11
|
+
|
12
|
+
@eof_callback = eof_callback
|
13
|
+
@eof = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def read(size=nil)
|
17
|
+
return nil if eof?
|
18
|
+
size = @remaining if size.nil?
|
19
|
+
data = @io.read(size)
|
20
|
+
@remaining -= data.bytesize
|
21
|
+
eof?
|
22
|
+
data
|
23
|
+
end
|
24
|
+
|
25
|
+
def sysread(size)
|
26
|
+
raise EOFError, "end of file reached" if eof?
|
27
|
+
read(size)
|
28
|
+
end
|
29
|
+
|
30
|
+
def eof?
|
31
|
+
return false if @remaining > 0
|
32
|
+
return @eof if @eof
|
33
|
+
|
34
|
+
@eof_callback.call
|
35
|
+
@eof = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module CPIO
|
40
|
+
FIELDS = [
|
41
|
+
:magic, :ino, :mode, :uid, :gid, :nlink, :mtime, :filesize, :devmajor,
|
42
|
+
:devminor, :rdevmajor, :rdevminor, :namesize, :check
|
43
|
+
]
|
44
|
+
end
|
45
|
+
|
46
|
+
class CPIO::ASCIIReader
|
47
|
+
FIELD_SIZES = {
|
48
|
+
:magic => 6,
|
49
|
+
:ino => 8,
|
50
|
+
:mode => 8,
|
51
|
+
:uid => 8,
|
52
|
+
:gid => 8,
|
53
|
+
:nlink => 8,
|
54
|
+
:mtime => 8,
|
55
|
+
:filesize => 8,
|
56
|
+
:devmajor => 8,
|
57
|
+
:devminor => 8,
|
58
|
+
:rdevmajor => 8,
|
59
|
+
:rdevminor => 8,
|
60
|
+
:namesize => 8,
|
61
|
+
:check => 8
|
62
|
+
}
|
63
|
+
HEADER_LENGTH = FIELD_SIZES.reduce(0) { |m, (_, v)| m + v }
|
64
|
+
HEADER_PACK = FIELD_SIZES.collect { |_, v| "A#{v}" }.join
|
65
|
+
|
66
|
+
FIELD_ORDER = [
|
67
|
+
:magic, :ino, :mode, :uid, :gid, :nlink, :mtime, :filesize, :devmajor,
|
68
|
+
:devminor, :rdevmajor, :rdevminor, :namesize, :check
|
69
|
+
]
|
70
|
+
|
71
|
+
def initialize(io)
|
72
|
+
@io = io
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def io
|
78
|
+
@io
|
79
|
+
end
|
80
|
+
|
81
|
+
def each(&block)
|
82
|
+
while true
|
83
|
+
entry = read
|
84
|
+
break if entry.nil?
|
85
|
+
# The CPIO format has the end-of-stream marker as a file called "TRAILER!!!"
|
86
|
+
break if entry.name == "TRAILER!!!"
|
87
|
+
block.call(entry, entry.file)
|
88
|
+
verify_correct_read(entry) unless entry.directory?
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def verify_correct_read(entry)
|
93
|
+
# Read and throw away the whole file if not read at all.
|
94
|
+
entry.file.tap do |file|
|
95
|
+
if file.nil? || file.remaining == 0
|
96
|
+
# All OK! :)
|
97
|
+
elsif file.remaining == file.length
|
98
|
+
file.read(16384) while !file.eof?
|
99
|
+
else
|
100
|
+
# The file was only partially read? This should be an error by the
|
101
|
+
# user.
|
102
|
+
consumed = file.length - file.remaining
|
103
|
+
raise BadState, "Only #{consumed} bytes were read of the #{file.length} byte file: #{entry.name}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def read
|
109
|
+
entry = CPIOEntry.new
|
110
|
+
header = io.read(HEADER_LENGTH)
|
111
|
+
return nil if header.nil?
|
112
|
+
FIELD_ORDER.zip(header.unpack(HEADER_PACK)).each do |field, value|
|
113
|
+
entry.send("#{field}=", value.to_i(16))
|
114
|
+
end
|
115
|
+
|
116
|
+
entry.validate
|
117
|
+
entry.mtime = Time.at(entry.mtime)
|
118
|
+
read_name(entry, @io)
|
119
|
+
read_file(entry, @io)
|
120
|
+
entry
|
121
|
+
end
|
122
|
+
|
123
|
+
def read_name(entry, io)
|
124
|
+
entry.name = io.read(entry.namesize - 1) # - 1 for null terminator
|
125
|
+
nul = io.read(1)
|
126
|
+
raise ArgumentError, "Corrupt CPIO or bug? Name null terminator was not null: #{nul.inspect}" if nul != "\0"
|
127
|
+
padding_data = io.read(padding_name(entry))
|
128
|
+
# Padding should be all null bytes
|
129
|
+
if padding_data != ("\0" * padding_data.bytesize)
|
130
|
+
raise ArgumentError, "Corrupt CPIO or bug? Name null padding was #{padding_name(entry)} bytes: #{padding_data.inspect}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def read_file(entry, io)
|
135
|
+
if entry.directory?
|
136
|
+
entry.file = nil
|
137
|
+
#read_file_padding(entry, io)
|
138
|
+
nil
|
139
|
+
else
|
140
|
+
entry.file = BoundedIO.new(io, entry.filesize) do
|
141
|
+
read_file_padding(entry, io)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def read_file_padding(entry, io)
|
147
|
+
padding_data = io.read(padding_file(entry))
|
148
|
+
if padding_data != ("\0" * padding_data.bytesize)
|
149
|
+
raise ArgumentError, "Corrupt CPIO or bug? File null padding was #{padding_file(entry)} bytes: #{padding_data.inspect}"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def padding_name(entry)
|
154
|
+
# name padding is padding up to a multiple of 4 after header+namesize
|
155
|
+
-(HEADER_LENGTH + entry.namesize) % 4
|
156
|
+
end
|
157
|
+
|
158
|
+
def padding_file(entry)
|
159
|
+
(-(HEADER_LENGTH + entry.filesize + 2) % 4)
|
160
|
+
end
|
161
|
+
public(:each)
|
162
|
+
end
|
163
|
+
|
164
|
+
class CPIOEntry
|
165
|
+
CPIO::FIELDS.each do |field|
|
166
|
+
attr_accessor field
|
167
|
+
end
|
168
|
+
|
169
|
+
attr_accessor :name
|
170
|
+
attr_accessor :file
|
171
|
+
|
172
|
+
DIRECTORY_FLAG = 0040000
|
173
|
+
|
174
|
+
def validate
|
175
|
+
raise "Invalid magic #{magic.inspect}" if magic != 0x070701
|
176
|
+
raise "Invalid ino #{ino.inspect}" if ino < 0
|
177
|
+
raise "Invalid mode #{mode.inspect}" if mode < 0
|
178
|
+
raise "Invalid uid #{uid.inspect}" if uid < 0
|
179
|
+
raise "Invalid gid #{gid.inspect}" if gid < 0
|
180
|
+
raise "Invalid nlink #{nlink.inspect}" if nlink < 0
|
181
|
+
raise "Invalid mtime #{mtime.inspect}" if mtime < 0
|
182
|
+
raise "Invalid filesize #{filesize.inspect}" if filesize < 0
|
183
|
+
raise "Invalid devmajor #{devmajor.inspect}" if devmajor < 0
|
184
|
+
raise "Invalid devminor #{devminor.inspect}" if devminor < 0
|
185
|
+
raise "Invalid rdevmajor #{rdevmajor.inspect}" if rdevmajor < 0
|
186
|
+
raise "Invalid rdevminor #{rdevminor.inspect}" if rdevminor < 0
|
187
|
+
raise "Invalid namesize #{namesize.inspect}" if namesize < 0
|
188
|
+
raise "Invalid check #{check.inspect}" if check < 0
|
189
|
+
end # def validate
|
190
|
+
|
191
|
+
def read(*args)
|
192
|
+
return nil if directory?
|
193
|
+
file.read(*args)
|
194
|
+
end
|
195
|
+
|
196
|
+
def directory?
|
197
|
+
mode & DIRECTORY_FLAG > 0
|
198
|
+
end
|
199
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Fontist
|
2
|
+
module Utils
|
3
|
+
module CpioExtractor
|
4
|
+
def cpio_extract(resource)
|
5
|
+
file = @downloaded ? resource : download_file(resource)
|
6
|
+
|
7
|
+
dir = extract_cpio_file(file)
|
8
|
+
|
9
|
+
largest_file_in_dir(dir)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def extract_cpio_file(archive_path)
|
15
|
+
archive_file = File.open(archive_path, "rb")
|
16
|
+
dir = Dir.mktmpdir
|
17
|
+
extract_cpio_file_to_dir(archive_file, dir)
|
18
|
+
|
19
|
+
dir
|
20
|
+
end
|
21
|
+
|
22
|
+
def extract_cpio_file_to_dir(archive_file, dir)
|
23
|
+
cpio_reader_class.new(archive_file).each do |entry, file|
|
24
|
+
path = File.join(dir, entry.name)
|
25
|
+
if entry.directory?
|
26
|
+
FileUtils.mkdir_p(path)
|
27
|
+
else
|
28
|
+
File.write(path, file.read, mode: "wb")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def cpio_reader_class
|
34
|
+
@cpio_reader_class ||= begin
|
35
|
+
require "fontist/utils/cpio/cpio"
|
36
|
+
CPIO::ASCIIReader
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def largest_file_in_dir(dir)
|
41
|
+
Dir.glob(File.join(dir, "**/*")).max_by do |path|
|
42
|
+
File.size(path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -6,7 +6,7 @@ module Fontist
|
|
6
6
|
|
7
7
|
exe_file = download_file(exe_file).path if download
|
8
8
|
|
9
|
-
Fontist.ui.say(%(Installing font "#{key}".))
|
9
|
+
Fontist.ui.say(%(Installing font "#{formula.key}".))
|
10
10
|
cab_file = decompressor.search(exe_file)
|
11
11
|
cabbed_fonts = grep_fonts(cab_file.files) || []
|
12
12
|
fonts_paths = extract_cabbed_fonts_to_assets(cabbed_fonts)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fontist
|
2
|
+
module Utils
|
3
|
+
module GzipExtractor
|
4
|
+
def gzip_extract(resource)
|
5
|
+
file = @downloaded ? resource : download_file(resource)
|
6
|
+
|
7
|
+
extract_gzip_file(file)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def extract_gzip_file(file)
|
13
|
+
Zlib::GzipReader.open(file) do |gz|
|
14
|
+
basename = File.basename(file, ".*")
|
15
|
+
dir = Dir.mktmpdir
|
16
|
+
path = File.join(dir, basename)
|
17
|
+
File.write(path, gz.read, mode: "wb")
|
18
|
+
|
19
|
+
path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fontist
|
2
|
+
module Utils
|
3
|
+
module Locking
|
4
|
+
def lock(lock_path)
|
5
|
+
File.dirname(lock_path).tap do |dir|
|
6
|
+
FileUtils.mkdir_p(dir) unless File.exist?(dir)
|
7
|
+
end
|
8
|
+
|
9
|
+
f = File.open(lock_path, File::CREAT)
|
10
|
+
f.flock(File::LOCK_EX)
|
11
|
+
yield
|
12
|
+
ensure
|
13
|
+
f.flock(File::LOCK_UN)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Fontist
|
2
|
+
module Utils
|
3
|
+
module RpmExtractor
|
4
|
+
def rpm_extract(resource)
|
5
|
+
file = download_file(resource)
|
6
|
+
|
7
|
+
extract_rpm_file(file)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def extract_rpm_file(file)
|
13
|
+
rpm = rpm_class.new(file)
|
14
|
+
content = rpm.payload.read
|
15
|
+
path = rpm_target_path(file.path, rpm.tags)
|
16
|
+
File.write(path, content, mode: "wb")
|
17
|
+
|
18
|
+
path
|
19
|
+
end
|
20
|
+
|
21
|
+
def rpm_class
|
22
|
+
@rpm_class ||= begin
|
23
|
+
require "arr-pm"
|
24
|
+
RPM::File
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def rpm_target_path(archive, tags)
|
29
|
+
basename = File.basename(archive, ".*")
|
30
|
+
archive_format = tags[:payloadformat]
|
31
|
+
compression_format = tags[:payloadcompressor] == "gzip" ? "gz" : tags[:payloadcompressor]
|
32
|
+
filename = basename + "." + archive_format + "." + compression_format
|
33
|
+
File.join(Dir.mktmpdir, filename)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Fontist
|
2
|
+
module Utils
|
3
|
+
module TarExtractor
|
4
|
+
def tar_extract(resource)
|
5
|
+
file = @downloaded ? resource : download_file(resource)
|
6
|
+
|
7
|
+
dir = extract_tar_file(file)
|
8
|
+
|
9
|
+
save_fonts(dir)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def extract_tar_file(file)
|
15
|
+
archive_file = File.open(file, "rb")
|
16
|
+
dir = Dir.mktmpdir
|
17
|
+
tar_reader_class.new(archive_file) do |tar|
|
18
|
+
tar.each do |tarfile|
|
19
|
+
save_tar_file(tarfile, dir)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
dir
|
24
|
+
end
|
25
|
+
|
26
|
+
def tar_reader_class
|
27
|
+
@tar_reader_class ||= begin
|
28
|
+
require "rubygems/package"
|
29
|
+
Gem::Package::TarReader
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def save_tar_file(file, dir)
|
34
|
+
path = File.join(dir, file.full_name)
|
35
|
+
|
36
|
+
if file.directory?
|
37
|
+
FileUtils.mkdir_p(path)
|
38
|
+
else
|
39
|
+
File.open(path, "wb") do |f|
|
40
|
+
f.print(file.read)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def save_fonts(dir)
|
46
|
+
Array.new.tap do |fonts_paths|
|
47
|
+
Dir.glob(File.join(dir, "**/*")).each do |path|
|
48
|
+
filename = File.basename(path)
|
49
|
+
next unless font_file?(filename)
|
50
|
+
|
51
|
+
target_filename = target_filename(filename)
|
52
|
+
font_path = fonts_path.join(target_filename).to_s
|
53
|
+
FileUtils.mv(path, font_path)
|
54
|
+
|
55
|
+
fonts_paths << font_path
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -8,7 +8,7 @@ module Fontist
|
|
8
8
|
zip_file = download_file(resource) if download
|
9
9
|
zip_file ||= resource.urls.first
|
10
10
|
|
11
|
-
Fontist.ui.say(%(Installing font "#{key}".))
|
11
|
+
Fontist.ui.say(%(Installing font "#{formula.key}".))
|
12
12
|
fonts_paths = unzip_fonts(zip_file, fonts_sub_dir)
|
13
13
|
block_given? ? yield(fonts_paths) : fonts_paths
|
14
14
|
end
|
data/lib/fontist/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fontist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
- Abu Nashir
|
9
8
|
autorequire:
|
10
|
-
bindir:
|
9
|
+
bindir: exe
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2021-01-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: arr-pm
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.1
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: down
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,6 +178,34 @@ dependencies:
|
|
165
178
|
- - "~>"
|
166
179
|
- !ruby/object:Gem::Version
|
167
180
|
version: '2.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: gem-release
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: nokogiri
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.0'
|
168
209
|
- !ruby/object:Gem::Dependency
|
169
210
|
name: rake
|
170
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,19 +290,17 @@ dependencies:
|
|
249
290
|
- - "~>"
|
250
291
|
- !ruby/object:Gem::Version
|
251
292
|
version: '1.0'
|
252
|
-
description:
|
293
|
+
description: Install openly-licensed fonts on Windows, Linux and Mac!
|
253
294
|
email:
|
254
|
-
-
|
255
|
-
- abunashir@gmail.com
|
295
|
+
- open.source@ribose.com
|
256
296
|
executables:
|
257
297
|
- fontist
|
258
298
|
extensions: []
|
259
299
|
extra_rdoc_files: []
|
260
300
|
files:
|
261
301
|
- ".github/workflows/check_google.yml"
|
262
|
-
- ".github/workflows/
|
263
|
-
- ".github/workflows/
|
264
|
-
- ".github/workflows/windows.yml"
|
302
|
+
- ".github/workflows/release.yml"
|
303
|
+
- ".github/workflows/rspec.yml"
|
265
304
|
- ".gitignore"
|
266
305
|
- ".hound.yml"
|
267
306
|
- ".rspec"
|
@@ -270,32 +309,29 @@ files:
|
|
270
309
|
- LICENSE.txt
|
271
310
|
- README.md
|
272
311
|
- Rakefile
|
273
|
-
-
|
274
|
-
- bin/console
|
275
|
-
- bin/convert_formulas
|
276
|
-
- bin/fontist
|
277
|
-
- bin/generate_otfinfo
|
278
|
-
- bin/import_google
|
279
|
-
- bin/rspec
|
280
|
-
- bin/setup
|
312
|
+
- exe/fontist
|
281
313
|
- fontist.gemspec
|
282
314
|
- lib/fontist.rb
|
283
315
|
- lib/fontist/cli.rb
|
284
316
|
- lib/fontist/errors.rb
|
285
317
|
- lib/fontist/font.rb
|
286
|
-
- lib/fontist/
|
318
|
+
- lib/fontist/font_installer.rb
|
287
319
|
- lib/fontist/fontist_font.rb
|
288
320
|
- lib/fontist/formula.rb
|
289
|
-
- lib/fontist/
|
290
|
-
- lib/fontist/
|
321
|
+
- lib/fontist/formula_paths.rb
|
322
|
+
- lib/fontist/helpers.rb
|
291
323
|
- lib/fontist/import.rb
|
292
324
|
- lib/fontist/import/convert_formulas.rb
|
293
325
|
- lib/fontist/import/create_formula.rb
|
294
326
|
- lib/fontist/import/extractors.rb
|
295
327
|
- lib/fontist/import/extractors/cab_extractor.rb
|
328
|
+
- lib/fontist/import/extractors/cpio_extractor.rb
|
296
329
|
- lib/fontist/import/extractors/extractor.rb
|
330
|
+
- lib/fontist/import/extractors/gzip_extractor.rb
|
297
331
|
- lib/fontist/import/extractors/ole_extractor.rb
|
332
|
+
- lib/fontist/import/extractors/rpm_extractor.rb
|
298
333
|
- lib/fontist/import/extractors/seven_zip_extractor.rb
|
334
|
+
- lib/fontist/import/extractors/tar_extractor.rb
|
299
335
|
- lib/fontist/import/extractors/zip_extractor.rb
|
300
336
|
- lib/fontist/import/files/collection_file.rb
|
301
337
|
- lib/fontist/import/files/file_requirement.rb
|
@@ -319,25 +355,33 @@ files:
|
|
319
355
|
- lib/fontist/import/otfinfo/template.erb
|
320
356
|
- lib/fontist/import/otfinfo_generate.rb
|
321
357
|
- lib/fontist/import/recursive_extraction.rb
|
358
|
+
- lib/fontist/import/sil_import.rb
|
322
359
|
- lib/fontist/import/template_helper.rb
|
323
360
|
- lib/fontist/import/text_helper.rb
|
361
|
+
- lib/fontist/index.rb
|
362
|
+
- lib/fontist/index_formula.rb
|
324
363
|
- lib/fontist/manifest.rb
|
325
364
|
- lib/fontist/manifest/install.rb
|
326
365
|
- lib/fontist/manifest/locations.rb
|
327
|
-
- lib/fontist/registry.rb
|
328
366
|
- lib/fontist/system.yml
|
329
367
|
- lib/fontist/system_font.rb
|
330
368
|
- lib/fontist/system_index.rb
|
331
369
|
- lib/fontist/utils.rb
|
332
370
|
- lib/fontist/utils/cache.rb
|
371
|
+
- lib/fontist/utils/cpio/cpio.rb
|
372
|
+
- lib/fontist/utils/cpio_extractor.rb
|
333
373
|
- lib/fontist/utils/downloader.rb
|
334
374
|
- lib/fontist/utils/dsl.rb
|
335
375
|
- lib/fontist/utils/dsl/collection_font.rb
|
336
376
|
- lib/fontist/utils/dsl/font.rb
|
337
377
|
- lib/fontist/utils/exe_extractor.rb
|
378
|
+
- lib/fontist/utils/gzip_extractor.rb
|
379
|
+
- lib/fontist/utils/locking.rb
|
338
380
|
- lib/fontist/utils/msi_extractor.rb
|
381
|
+
- lib/fontist/utils/rpm_extractor.rb
|
339
382
|
- lib/fontist/utils/seven_zip_extractor.rb
|
340
383
|
- lib/fontist/utils/system.rb
|
384
|
+
- lib/fontist/utils/tar_extractor.rb
|
341
385
|
- lib/fontist/utils/ui.rb
|
342
386
|
- lib/fontist/utils/zip_extractor.rb
|
343
387
|
- lib/fontist/version.rb
|
@@ -348,7 +392,7 @@ metadata:
|
|
348
392
|
homepage_uri: https://github.com/fontist/fontist
|
349
393
|
source_code_uri: https://github.com/fontist/fontist
|
350
394
|
changelog_uri: https://github.com/fontist/fontist
|
351
|
-
post_install_message: Please run `fontist update` to fetch formulas
|
395
|
+
post_install_message: Please run `fontist update` to fetch formulas.
|
352
396
|
rdoc_options: []
|
353
397
|
require_paths:
|
354
398
|
- lib
|
@@ -366,5 +410,5 @@ requirements: []
|
|
366
410
|
rubygems_version: 3.0.3
|
367
411
|
signing_key:
|
368
412
|
specification_version: 4
|
369
|
-
summary:
|
413
|
+
summary: Install openly-licensed fonts on Windows, Linux and Mac!
|
370
414
|
test_files: []
|