fontist 0.2.0 → 0.3.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/.gitignore +0 -1
- data/fontist.gemspec +1 -0
- data/lib/fontist.rb +5 -1
- data/lib/fontist/data/formulas/ms_vista.yml +39 -0
- data/lib/fontist/data/formulas/source_font.yml +51 -0
- data/lib/fontist/data/source.yml +21 -0
- data/lib/fontist/downloader.rb +4 -3
- data/lib/fontist/errors.rb +1 -0
- data/lib/fontist/finder.rb +1 -1
- data/lib/fontist/formulas.rb +8 -0
- data/lib/fontist/formulas/base.rb +25 -0
- data/lib/fontist/formulas/ms_vista.rb +74 -0
- data/lib/fontist/formulas/source_font.rb +48 -0
- data/lib/fontist/installer.rb +9 -6
- data/lib/fontist/source.rb +34 -7
- data/lib/fontist/version.rb +1 -1
- data/spec/fontist/downloader_spec.rb +5 -6
- data/spec/fontist/{ms_vista_font_spec.rb → formulas/ms_vista_spec.rb} +4 -4
- data/spec/fontist/formulas/source_font_spec.rb +18 -0
- data/spec/fontist/installer_spec.rb +2 -2
- data/spec/fontist/source_spec.rb +13 -2
- data/spec/spec_helper.rb +5 -2
- data/spec/support/fontist_helper.rb +8 -0
- metadata +26 -5
- data/assets/source.yml +0 -54
- data/lib/fontist/ms_vista_font.rb +0 -83
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4a5ce61ee68294a97524ff87c5e618bea5d1e29ab9df3387e8dee8012c424ac1
|
|
4
|
+
data.tar.gz: 478d00a93ca6a5e3ef247f1d9d3b4a925b281d50400f161bdd4ff86d3060fe1f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: acf8df0ad6831f6e10602e854fb32042c3d1bece526c2293e8a6a71c76d65d2092f69a4a3d161e2eef863de74f5380253b7a1a02ad7ec9e718b5c4676796ec69
|
|
7
|
+
data.tar.gz: a2c9485dc91adee02a8926a0c0ac52a223d26e16f37396adb914e902851453486c9be84ec3d7ae6a1220ba5a0af51751d4c5fd9840692ca15de7079b9830c9a9
|
data/.gitignore
CHANGED
data/fontist.gemspec
CHANGED
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
|
|
24
24
|
spec.add_runtime_dependency "down", "~> 5.0"
|
|
25
25
|
spec.add_runtime_dependency "libmspack", "~> 0.1.0"
|
|
26
|
+
spec.add_runtime_dependency "rubyzip", "~> 2.3.0"
|
|
26
27
|
|
|
27
28
|
spec.add_development_dependency "pry"
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 2.0"
|
data/lib/fontist.rb
CHANGED
|
@@ -5,7 +5,7 @@ require "fontist/finder"
|
|
|
5
5
|
require "fontist/source"
|
|
6
6
|
require "fontist/installer"
|
|
7
7
|
require "fontist/system_font"
|
|
8
|
-
require "fontist/
|
|
8
|
+
require "fontist/formulas"
|
|
9
9
|
|
|
10
10
|
module Fontist
|
|
11
11
|
def self.lib_path
|
|
@@ -20,6 +20,10 @@ module Fontist
|
|
|
20
20
|
Fontist.root_path.join("assets")
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
def self.data_path
|
|
24
|
+
Fontist.lib_path.join("fontist", "data")
|
|
25
|
+
end
|
|
26
|
+
|
|
23
27
|
def self.fontist_path
|
|
24
28
|
Pathname.new(Dir.home).join(".fontist")
|
|
25
29
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
msvista:
|
|
2
|
+
agreement: "yes"
|
|
3
|
+
|
|
4
|
+
fonts:
|
|
5
|
+
- CALIBRI.TTF
|
|
6
|
+
- CALIBRII.TTF
|
|
7
|
+
- CAMBRIA.TTC
|
|
8
|
+
- CAMBRIAI.TTF
|
|
9
|
+
- CANDARA.TTF
|
|
10
|
+
- CANDARAI.TTF
|
|
11
|
+
- CONSOLA.TTF
|
|
12
|
+
- CONSOLAI.TTF
|
|
13
|
+
- CONSTAN.TTF
|
|
14
|
+
- CONSTANI.TTF
|
|
15
|
+
- CORBEL.TTF
|
|
16
|
+
- CORBELI.TTF
|
|
17
|
+
- MEIRYO.TTC
|
|
18
|
+
- CALIBRIB.TTF
|
|
19
|
+
- CALIBRIZ.TTF
|
|
20
|
+
- CAMBRIAB.TTF
|
|
21
|
+
- CAMBRIAZ.TTF
|
|
22
|
+
- CANDARAB.TTF
|
|
23
|
+
- CANDARAZ.TTF
|
|
24
|
+
- CONSOLAB.TTF
|
|
25
|
+
- CONSOLAZ.TTF
|
|
26
|
+
- CONSTANB.TTF
|
|
27
|
+
- CONSTANZ.TTF
|
|
28
|
+
- CORBELB.TTF
|
|
29
|
+
- CORBELZ.TTF
|
|
30
|
+
- MEIRYOB.TTC
|
|
31
|
+
|
|
32
|
+
file_size: "62914560"
|
|
33
|
+
sha: "249473568eba7a1e4f95498acba594e0f42e6581add4dead70c1dfb908a09423"
|
|
34
|
+
urls:
|
|
35
|
+
- "https://www.dropbox.com/s/dl/6lclhxpydwgkjzh/PowerPointViewer.exe?dl=1"
|
|
36
|
+
- "https://web.archive.org/web/20171225132744/http://download.microsoft.com/download/E/6/7/E675FFFC-2A6D-4AB0-B3EB-27C9F8C8F696/PowerPointViewer.exe"
|
|
37
|
+
|
|
38
|
+
license: |
|
|
39
|
+
Complete MS licence;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
source_font:
|
|
2
|
+
agreement: ""
|
|
3
|
+
|
|
4
|
+
fonts:
|
|
5
|
+
- SourceCodePro-Black.ttf
|
|
6
|
+
- SourceCodePro-BlackIt.ttf
|
|
7
|
+
- SourceCodePro-Bold.ttf
|
|
8
|
+
- SourceCodePro-BoldIt.ttf
|
|
9
|
+
- SourceCodePro-ExtraLight.ttf
|
|
10
|
+
- SourceCodePro-ExtraLightIt.ttf
|
|
11
|
+
- SourceCodePro-It.ttf
|
|
12
|
+
- SourceCodePro-Light.ttf
|
|
13
|
+
- SourceCodePro-LightIt.ttf
|
|
14
|
+
- SourceCodePro-Medium.ttf
|
|
15
|
+
- SourceCodePro-MediumIt.ttf
|
|
16
|
+
- SourceCodePro-Regular.ttf
|
|
17
|
+
- SourceCodePro-Semibold
|
|
18
|
+
- SourceCodePro-SemiboldIt.ttf
|
|
19
|
+
- SourceSansPro-Black.ttf
|
|
20
|
+
- SourceSansPro-BlackIt.ttf
|
|
21
|
+
- SourceSansPro-Bold.ttf
|
|
22
|
+
- SourceSansPro-BoldIt.ttf
|
|
23
|
+
- SourceSansPro-ExtraLight.ttf
|
|
24
|
+
- SourceSansPro-ExtraLightIt.ttf
|
|
25
|
+
- SourceSansPro-It.ttf
|
|
26
|
+
- SourceSansPro-Light.ttf
|
|
27
|
+
- SourceSansPro-LightIt.ttf
|
|
28
|
+
- SourceSansPro-Medium.ttf
|
|
29
|
+
- SourceSansPro-MediumIt.ttf
|
|
30
|
+
- SourceSansPro-Regular.ttf
|
|
31
|
+
- SourceSansPro-Semibold.ttf
|
|
32
|
+
- SourceSansPro-SemiboldIt.ttf
|
|
33
|
+
- SourceSerifPro-Black.ttf
|
|
34
|
+
- SourceSerifPro-BlackIt.ttf
|
|
35
|
+
- SourceSerifPro-Bold.ttf
|
|
36
|
+
- SourceSerifPro-BoldIt.ttf
|
|
37
|
+
- SourceSerifPro-ExtraLight.ttf
|
|
38
|
+
- SourceSerifPro-ExtraLightIt.ttf
|
|
39
|
+
- SourceSerifPro-It.ttf
|
|
40
|
+
- SourceSerifPro-Light.ttf
|
|
41
|
+
- SourceSerifPro-LightIt.ttf
|
|
42
|
+
- SourceSerifPro-Medium.ttf
|
|
43
|
+
- SourceSerifPro-MediumIt.ttf
|
|
44
|
+
- SourceSerifPro-Regular.ttf
|
|
45
|
+
- SourceSerifPro-Semibold.ttf
|
|
46
|
+
- SourceSerifPro-SemiboldIt.ttf
|
|
47
|
+
|
|
48
|
+
file_size: "101440249"
|
|
49
|
+
sha: "0107b5d4ba305cb4dff2ba19138407aa2153632a2c41592f74d20cd0d0261bfd"
|
|
50
|
+
urls:
|
|
51
|
+
- https://github.com/fontist/source-fonts/releases/download/v1.0/source-fonts-1.0.zip
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
system:
|
|
2
|
+
linux:
|
|
3
|
+
paths:
|
|
4
|
+
- /usr/share/fonts/**/**.{ttf,ttc}
|
|
5
|
+
|
|
6
|
+
windows:
|
|
7
|
+
paths:
|
|
8
|
+
- C:/Windows/Fonts/**/**.{ttc,ttf}
|
|
9
|
+
|
|
10
|
+
macosx:
|
|
11
|
+
paths:
|
|
12
|
+
- /System/Library/Fonts/**/**.{ttf,ttc}
|
|
13
|
+
|
|
14
|
+
unix:
|
|
15
|
+
paths:
|
|
16
|
+
- /usr/share/fonts/**/**.{ttf,ttc}
|
|
17
|
+
|
|
18
|
+
remote:
|
|
19
|
+
formulas:
|
|
20
|
+
- ./formulas/ms_vista.yml
|
|
21
|
+
- ./formulas/source_font.yml
|
data/lib/fontist/downloader.rb
CHANGED
|
@@ -3,9 +3,10 @@ require "digest"
|
|
|
3
3
|
|
|
4
4
|
module Fontist
|
|
5
5
|
class Downloader
|
|
6
|
-
def initialize(file, file_size: nil, sha: nil)
|
|
6
|
+
def initialize(file, file_size: nil, sha: nil, progress: nil)
|
|
7
7
|
@sha = sha
|
|
8
8
|
@file = file
|
|
9
|
+
@progress = progress
|
|
9
10
|
@file_size = file_size || default_file_size
|
|
10
11
|
end
|
|
11
12
|
|
|
@@ -19,7 +20,7 @@ module Fontist
|
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def raise_invalid_file
|
|
22
|
-
raise(Fontist::
|
|
23
|
+
raise(Fontist::Errors::TemparedFileError)
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def self.download(file, options = {})
|
|
@@ -48,7 +49,7 @@ module Fontist
|
|
|
48
49
|
Down.download(
|
|
49
50
|
@file,
|
|
50
51
|
progress_proc: -> (progress) {
|
|
51
|
-
bar.increment(progress / byte_to_megabyte)
|
|
52
|
+
bar.increment(progress / byte_to_megabyte) if @progress === true
|
|
52
53
|
}
|
|
53
54
|
)
|
|
54
55
|
end
|
data/lib/fontist/errors.rb
CHANGED
data/lib/fontist/finder.rb
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Fontist
|
|
2
|
+
module Formulas
|
|
3
|
+
class Base
|
|
4
|
+
def initialize(font_name, confirmation:, **options)
|
|
5
|
+
@font_name = font_name
|
|
6
|
+
@confirmation = confirmation || "no"
|
|
7
|
+
@force_download = options.fetch(:force_download, false)
|
|
8
|
+
@fonts_path = options.fetch(:fonts_path, Fontist.fonts_path)
|
|
9
|
+
|
|
10
|
+
check_user_license_agreement
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.fetch_font(font_name, confirmation: nil, **options)
|
|
14
|
+
new(font_name, options.merge(confirmation: confirmation)).fetch
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
attr_reader :font_name, :confirmation, :fonts_path, :force_download
|
|
20
|
+
|
|
21
|
+
def check_user_license_agreement
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require "fontist/downloader"
|
|
2
|
+
|
|
3
|
+
module Fontist
|
|
4
|
+
module Formulas
|
|
5
|
+
class MsVista < Base
|
|
6
|
+
def fetch
|
|
7
|
+
fonts = extract_ppviewer_fonts
|
|
8
|
+
paths = fonts.grep(/#{font_name}/i)
|
|
9
|
+
paths.empty? ? nil : paths
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def check_user_license_agreement
|
|
15
|
+
unless source.agreement === confirmation
|
|
16
|
+
raise(Fontist::Errors::LicensingError)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def decompressor
|
|
21
|
+
@decompressor ||= (
|
|
22
|
+
require "libmspack"
|
|
23
|
+
LibMsPack::CabDecompressor.new
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def extract_ppviewer_fonts
|
|
28
|
+
Array.new.tap do |fonts|
|
|
29
|
+
cabbed_fonts.each do |font|
|
|
30
|
+
font_path = fonts_path.join(font.filename).to_s
|
|
31
|
+
decompressor.extract(font, font_path)
|
|
32
|
+
|
|
33
|
+
fonts.push(font_path)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def extract_ppviewer_cab_file
|
|
39
|
+
if !File.exists?(ppviewer_cab) || force_download
|
|
40
|
+
exe_file = decompressor.search(download_exe_file.path)
|
|
41
|
+
decompressor.extract(exe_file.files.next, ppviewer_cab)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def cabbed_fonts
|
|
46
|
+
extract_ppviewer_cab_file
|
|
47
|
+
grep_cabbed_fonts(decompressor.search(ppviewer_cab).files) || []
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def grep_cabbed_fonts(file)
|
|
51
|
+
Array.new.tap do |fonts|
|
|
52
|
+
while file
|
|
53
|
+
fonts.push(file) if file.filename.match(/.tt|.TT/)
|
|
54
|
+
file = file.next
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def source
|
|
60
|
+
@source ||= Fontist::Source.formulas.msvista
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def download_exe_file
|
|
64
|
+
Fontist::Downloader.download(
|
|
65
|
+
source.urls.first, file_size: source.file_size.to_i, sha: source.sha
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ppviewer_cab
|
|
70
|
+
@ppviewer_cab ||= Fontist.assets_path.join("ppviewer.cab").to_s
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require "zip"
|
|
2
|
+
|
|
3
|
+
module Fontist
|
|
4
|
+
module Formulas
|
|
5
|
+
class SourceFont < Formulas::Base
|
|
6
|
+
def fetch
|
|
7
|
+
paths = extract_fonts.grep(/#{font_name}/i)
|
|
8
|
+
paths.empty? ? nil : paths
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def source
|
|
14
|
+
@source ||= Fontist::Source.formulas.source_font
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def extract_fonts
|
|
18
|
+
zip_file = download_file
|
|
19
|
+
unzip_fonts(zip_file)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def unzip_fonts(file)
|
|
23
|
+
Zip.on_exists_proc = true
|
|
24
|
+
|
|
25
|
+
Array.new.tap do |fonts|
|
|
26
|
+
Zip::File.open(file) do |zip_file|
|
|
27
|
+
zip_file.glob("fonts/*.ttf").each do |entry|
|
|
28
|
+
filename = entry.name.gsub("fonts/", "")
|
|
29
|
+
|
|
30
|
+
if filename
|
|
31
|
+
font_path = fonts_path.join(filename)
|
|
32
|
+
fonts.push(font_path.to_s)
|
|
33
|
+
|
|
34
|
+
entry.extract(font_path)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def download_file
|
|
42
|
+
Fontist::Downloader.download(
|
|
43
|
+
source.urls.first, file_size: source.file_size.to_i, sha: source.sha
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/fontist/installer.rb
CHANGED
|
@@ -21,7 +21,10 @@ module Fontist
|
|
|
21
21
|
attr_reader :font_name, :confirmation, :options
|
|
22
22
|
|
|
23
23
|
def downloaders
|
|
24
|
-
{
|
|
24
|
+
{
|
|
25
|
+
msvista: Fontist::Formulas::MsVista,
|
|
26
|
+
source_front: Fontist::Formulas::SourceFont,
|
|
27
|
+
}
|
|
25
28
|
end
|
|
26
29
|
|
|
27
30
|
def find_system_font
|
|
@@ -29,16 +32,16 @@ module Fontist
|
|
|
29
32
|
end
|
|
30
33
|
|
|
31
34
|
def download_font
|
|
32
|
-
if
|
|
33
|
-
downloader = downloaders[
|
|
35
|
+
if !font_sources.empty?
|
|
36
|
+
downloader = downloaders[font_sources.first]
|
|
34
37
|
downloader.fetch_font(font_name, confirmation: confirmation)
|
|
35
38
|
end
|
|
36
39
|
end
|
|
37
40
|
|
|
38
|
-
def
|
|
39
|
-
@
|
|
41
|
+
def font_sources
|
|
42
|
+
@font_sources ||= Fontist::Source.formulas.to_h.select do |key, value|
|
|
40
43
|
!value.fonts.grep(/#{font_name}/i).empty?
|
|
41
|
-
end.
|
|
44
|
+
end.keys
|
|
42
45
|
end
|
|
43
46
|
end
|
|
44
47
|
end
|
data/lib/fontist/source.rb
CHANGED
|
@@ -8,24 +8,51 @@ module Fontist
|
|
|
8
8
|
new.all
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
+
def self.formulas
|
|
12
|
+
new.formulas
|
|
13
|
+
end
|
|
14
|
+
|
|
11
15
|
def all
|
|
12
16
|
source_data
|
|
13
17
|
end
|
|
14
18
|
|
|
19
|
+
def formulas
|
|
20
|
+
formulas_data
|
|
21
|
+
end
|
|
22
|
+
|
|
15
23
|
private
|
|
16
24
|
|
|
17
25
|
def source_data
|
|
18
|
-
@source_data ||=
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
@source_data ||= parse_to_object(yaml_data)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def parse_to_object(data)
|
|
30
|
+
JSON.parse(data.to_json, object_class: OpenStruct)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def formulas_data
|
|
34
|
+
@formulas_data ||= parse_to_object(load_formulas)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def load_formulas
|
|
38
|
+
Hash.new.tap do |formulas|
|
|
39
|
+
source_data.remote.formulas.map do |formula_file|
|
|
40
|
+
formula_data = yaml_data(formula_file)
|
|
41
|
+
|
|
42
|
+
if formula_data
|
|
43
|
+
key = formula_data.keys.first
|
|
44
|
+
formulas[key] = formula_data[key]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
21
48
|
end
|
|
22
49
|
|
|
23
|
-
def
|
|
24
|
-
|
|
50
|
+
def yaml_file(file)
|
|
51
|
+
Fontist.data_path.join(file)
|
|
25
52
|
end
|
|
26
53
|
|
|
27
|
-
def
|
|
28
|
-
|
|
54
|
+
def yaml_data(file_name = "source.yml")
|
|
55
|
+
YAML.load(File.open(yaml_file(file_name)))
|
|
29
56
|
end
|
|
30
57
|
end
|
|
31
58
|
end
|
data/lib/fontist/version.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
|
-
|
|
3
2
|
RSpec.describe Fontist::Downloader do
|
|
4
|
-
describe ".download",
|
|
3
|
+
describe ".download", file_download: true do
|
|
5
4
|
it "return the valid downloaded file" do
|
|
6
5
|
tempfile = Fontist::Downloader.download(
|
|
7
6
|
sample_file[:file],
|
|
@@ -20,15 +19,15 @@ RSpec.describe Fontist::Downloader do
|
|
|
20
19
|
sha: sample_file[:sha] + "mm",
|
|
21
20
|
file_size: sample_file[:file_size]
|
|
22
21
|
)
|
|
23
|
-
}.to raise_error(Fontist::
|
|
22
|
+
}.to raise_error(Fontist::Errors::TemparedFileError)
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
def sample_file
|
|
28
27
|
@sample_file ||= {
|
|
29
|
-
file_size:
|
|
30
|
-
file: "https://
|
|
31
|
-
sha: "
|
|
28
|
+
file_size: 150899,
|
|
29
|
+
file: "https://drive.google.com/u/0/uc?id=1Kk-rpLyQk98ubgxhTRKD2ZkMoY9KqKXk&export=download",
|
|
30
|
+
sha: "5e513e4bfdada0ff10dd5b96414fcaeade84e235ce043865416ad7673cb6f3d8"
|
|
32
31
|
}
|
|
33
32
|
end
|
|
34
33
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
|
-
RSpec.describe Fontist::
|
|
3
|
+
RSpec.describe Fontist::Formulas::MsVista do
|
|
4
4
|
describe ".fetch_font" do
|
|
5
|
-
context "with valid licence",
|
|
5
|
+
context "with valid licence", file_download: true do
|
|
6
6
|
it "downloads and returns font paths" do
|
|
7
7
|
name = "CANDARAI.TTF"
|
|
8
|
-
fonts = Fontist::
|
|
8
|
+
fonts = Fontist::Formulas::MsVista.fetch_font(
|
|
9
9
|
name, confirmation: "yes", force_download: true
|
|
10
10
|
)
|
|
11
11
|
|
|
@@ -19,7 +19,7 @@ RSpec.describe Fontist::MsVistaFont do
|
|
|
19
19
|
font_name = "CANDARAI.TTF"
|
|
20
20
|
|
|
21
21
|
expect {
|
|
22
|
-
Fontist::
|
|
22
|
+
Fontist::Formulas::MsVista.fetch_font(font_name, confirmation: "no")
|
|
23
23
|
}.to raise_error(Fontist::Errors::LicensingError)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe Fontist::Formulas::SourceFont do
|
|
4
|
+
describe ".fetch_font" do
|
|
5
|
+
it "downloads and extract out fonts", file_download: true do
|
|
6
|
+
name = "SourceCodePro"
|
|
7
|
+
stub_fontist_path_to_assets
|
|
8
|
+
|
|
9
|
+
fonts = Fontist::Formulas::SourceFont.fetch_font(
|
|
10
|
+
name, confirmation: "yes", force_download: true,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
expect(fonts).not_to be_empty
|
|
14
|
+
expect(fonts.first).to include(name)
|
|
15
|
+
expect(Fontist::Finder.find(name)).not_to be_empty
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -5,9 +5,9 @@ RSpec.describe Fontist::Installer do
|
|
|
5
5
|
context "with already downloaded fonts", skip_in_windows: true do
|
|
6
6
|
it "returns the font path" do
|
|
7
7
|
name = "CALIBRI.TTF"
|
|
8
|
-
Fontist::
|
|
8
|
+
Fontist::Formulas::MsVista.fetch_font(name, confirmation: "yes")
|
|
9
9
|
|
|
10
|
-
allow(Fontist::
|
|
10
|
+
allow(Fontist::Formulas::MsVista).to receive(:fetch_font).and_return(nil)
|
|
11
11
|
paths = Fontist::Installer.download(name, confirmation: "yes")
|
|
12
12
|
|
|
13
13
|
expect(paths.first).to include("fonts/#{name}")
|
data/spec/fontist/source_spec.rb
CHANGED
|
@@ -6,8 +6,19 @@ RSpec.describe Fontist::Source do
|
|
|
6
6
|
sources = Fontist::Source.all
|
|
7
7
|
|
|
8
8
|
expect(sources.system.linux.paths).not_to be_nil
|
|
9
|
-
expect(sources.
|
|
10
|
-
expect(sources.
|
|
9
|
+
expect(sources.system.macosx.paths).not_to be_nil
|
|
10
|
+
expect(sources.system.windows.paths).not_to be_nil
|
|
11
|
+
expect(sources.remote.formulas.first).to include("./formulas")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe ".formulas" do
|
|
16
|
+
it "returns all available dataset" do
|
|
17
|
+
formulas = Fontist::Source.formulas
|
|
18
|
+
|
|
19
|
+
expect(formulas.msvista.license).not_to be_nil
|
|
20
|
+
expect(formulas.msvista.file_size).to eq("62914560")
|
|
21
|
+
expect(formulas.msvista.fonts).to include("CALIBRI.TTF")
|
|
11
22
|
end
|
|
12
23
|
end
|
|
13
24
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
require "bundler/setup"
|
|
2
2
|
require "fontist"
|
|
3
3
|
|
|
4
|
+
Dir["./spec/support/**/*.rb"].sort.each { |file| require file }
|
|
5
|
+
|
|
4
6
|
RSpec.configure do |config|
|
|
5
7
|
# Enable flags like --only-failures and --next-failure
|
|
6
8
|
config.example_status_persistence_file_path = ".rspec_status"
|
|
9
|
+
config.include Fontist::Helper
|
|
7
10
|
|
|
8
11
|
# Disable RSpec exposing methods globally on `Module` and `main`
|
|
9
12
|
config.disable_monkey_patching!
|
|
10
13
|
|
|
11
|
-
# Skip the actual
|
|
12
|
-
config.filter_run_excluding
|
|
14
|
+
# Skip the actual file_download by default
|
|
15
|
+
config.filter_run_excluding file_download: true
|
|
13
16
|
|
|
14
17
|
config.expect_with :rspec do |c|
|
|
15
18
|
c.syntax = :expect
|
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: 0.
|
|
4
|
+
version: 0.3.0
|
|
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-05-
|
|
12
|
+
date: 2020-05-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: down
|
|
@@ -39,6 +39,20 @@ dependencies:
|
|
|
39
39
|
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
41
|
version: 0.1.0
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: rubyzip
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - "~>"
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 2.3.0
|
|
49
|
+
type: :runtime
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - "~>"
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 2.3.0
|
|
42
56
|
- !ruby/object:Gem::Dependency
|
|
43
57
|
name: pry
|
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -113,29 +127,36 @@ files:
|
|
|
113
127
|
- README.md
|
|
114
128
|
- Rakefile
|
|
115
129
|
- assets/fonts/.keep
|
|
116
|
-
- assets/source.yml
|
|
117
130
|
- bin/console
|
|
118
131
|
- bin/rspec
|
|
119
132
|
- bin/setup
|
|
120
133
|
- fontist.gemspec
|
|
121
134
|
- lib/fontist.rb
|
|
135
|
+
- lib/fontist/data/formulas/ms_vista.yml
|
|
136
|
+
- lib/fontist/data/formulas/source_font.yml
|
|
137
|
+
- lib/fontist/data/source.yml
|
|
122
138
|
- lib/fontist/downloader.rb
|
|
123
139
|
- lib/fontist/errors.rb
|
|
124
140
|
- lib/fontist/finder.rb
|
|
141
|
+
- lib/fontist/formulas.rb
|
|
142
|
+
- lib/fontist/formulas/base.rb
|
|
143
|
+
- lib/fontist/formulas/ms_vista.rb
|
|
144
|
+
- lib/fontist/formulas/source_font.rb
|
|
125
145
|
- lib/fontist/installer.rb
|
|
126
|
-
- lib/fontist/ms_vista_font.rb
|
|
127
146
|
- lib/fontist/source.rb
|
|
128
147
|
- lib/fontist/system_font.rb
|
|
129
148
|
- lib/fontist/version.rb
|
|
130
149
|
- spec/fixtures/fonts/DejaVuSerif.ttf
|
|
131
150
|
- spec/fontist/downloader_spec.rb
|
|
132
151
|
- spec/fontist/finder_spec.rb
|
|
152
|
+
- spec/fontist/formulas/ms_vista_spec.rb
|
|
153
|
+
- spec/fontist/formulas/source_font_spec.rb
|
|
133
154
|
- spec/fontist/installer_spec.rb
|
|
134
|
-
- spec/fontist/ms_vista_font_spec.rb
|
|
135
155
|
- spec/fontist/source_spec.rb
|
|
136
156
|
- spec/fontist/system_font_spec.rb
|
|
137
157
|
- spec/fontist_spec.rb
|
|
138
158
|
- spec/spec_helper.rb
|
|
159
|
+
- spec/support/fontist_helper.rb
|
|
139
160
|
homepage: https://github.com/fontist/fontist
|
|
140
161
|
licenses:
|
|
141
162
|
- BSD-2-Clause
|
data/assets/source.yml
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
system:
|
|
2
|
-
linux:
|
|
3
|
-
paths:
|
|
4
|
-
- /usr/share/fonts/**/**.{ttf,ttc}
|
|
5
|
-
|
|
6
|
-
windows:
|
|
7
|
-
paths:
|
|
8
|
-
- C:/Windows/Fonts/**/**.{ttc,ttf}
|
|
9
|
-
|
|
10
|
-
macosx:
|
|
11
|
-
paths:
|
|
12
|
-
- /System/Library/Fonts/**/**.{ttf,ttc}
|
|
13
|
-
|
|
14
|
-
unix:
|
|
15
|
-
paths:
|
|
16
|
-
- /usr/share/fonts/**/**.{ttf,ttc}
|
|
17
|
-
|
|
18
|
-
remote:
|
|
19
|
-
msvista:
|
|
20
|
-
agreement: "yes"
|
|
21
|
-
|
|
22
|
-
fonts:
|
|
23
|
-
- CALIBRI.TTF
|
|
24
|
-
- CALIBRII.TTF
|
|
25
|
-
- CAMBRIA.TTC
|
|
26
|
-
- CAMBRIAI.TTF
|
|
27
|
-
- CANDARA.TTF
|
|
28
|
-
- CANDARAI.TTF
|
|
29
|
-
- CONSOLA.TTF
|
|
30
|
-
- CONSOLAI.TTF
|
|
31
|
-
- CONSTAN.TTF
|
|
32
|
-
- CONSTANI.TTF
|
|
33
|
-
- CORBEL.TTF
|
|
34
|
-
- CORBELI.TTF
|
|
35
|
-
- MEIRYO.TTC
|
|
36
|
-
- CALIBRIB.TTF
|
|
37
|
-
- CALIBRIZ.TTF
|
|
38
|
-
- CAMBRIAB.TTF
|
|
39
|
-
- CAMBRIAZ.TTF
|
|
40
|
-
- CANDARAB.TTF
|
|
41
|
-
- CANDARAZ.TTF
|
|
42
|
-
- CONSOLAB.TTF
|
|
43
|
-
- CONSOLAZ.TTF
|
|
44
|
-
- CONSTANB.TTF
|
|
45
|
-
- CONSTANZ.TTF
|
|
46
|
-
- CORBELB.TTF
|
|
47
|
-
- CORBELZ.TTF
|
|
48
|
-
- MEIRYOB.TTC
|
|
49
|
-
|
|
50
|
-
file_size: "62914560"
|
|
51
|
-
sha: "249473568eba7a1e4f95498acba594e0f42e6581add4dead70c1dfb908a09423"
|
|
52
|
-
urls:
|
|
53
|
-
- "https://www.dropbox.com/s/dl/6lclhxpydwgkjzh/PowerPointViewer.exe?dl=1"
|
|
54
|
-
- "https://web.archive.org/web/20171225132744/http://download.microsoft.com/download/E/6/7/E675FFFC-2A6D-4AB0-B3EB-27C9F8C8F696/PowerPointViewer.exe"
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
require "fontist/downloader"
|
|
2
|
-
|
|
3
|
-
module Fontist
|
|
4
|
-
class MsVistaFont
|
|
5
|
-
def initialize(font_name, confirmation:, fonts_path: nil, **options)
|
|
6
|
-
@font_name = font_name
|
|
7
|
-
@confirmation = confirmation || "no"
|
|
8
|
-
@fonts_path = fonts_path || Fontist.fonts_path
|
|
9
|
-
@force_download = options.fetch(:force_download, false)
|
|
10
|
-
|
|
11
|
-
unless source.agreement === confirmation
|
|
12
|
-
raise(Fontist::Errors::LicensingError)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def self.fetch_font(font_name, confirmation:, **options)
|
|
17
|
-
new(font_name, options.merge(confirmation: confirmation)).fetch
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def fetch
|
|
21
|
-
fonts = extract_ppviewer_fonts
|
|
22
|
-
paths = fonts.grep(/#{font_name}/i)
|
|
23
|
-
paths.empty? ? nil : paths
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
attr_reader :font_name, :fonts_path, :force_download
|
|
29
|
-
|
|
30
|
-
def decompressor
|
|
31
|
-
@decompressor ||= (
|
|
32
|
-
require "libmspack"
|
|
33
|
-
LibMsPack::CabDecompressor.new
|
|
34
|
-
)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def extract_ppviewer_fonts
|
|
38
|
-
Array.new.tap do |fonts|
|
|
39
|
-
cabbed_fonts.each do |font|
|
|
40
|
-
font_path = fonts_path.join(font.filename).to_s
|
|
41
|
-
decompressor.extract(font, font_path)
|
|
42
|
-
|
|
43
|
-
fonts.push(font_path)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def extract_ppviewer_cab_file
|
|
49
|
-
if !File.exists?(ppviewer_cab) || force_download
|
|
50
|
-
exe_file = decompressor.search(download_exe_file.path)
|
|
51
|
-
decompressor.extract(exe_file.files.next, ppviewer_cab)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def cabbed_fonts
|
|
56
|
-
extract_ppviewer_cab_file
|
|
57
|
-
grep_cabbed_fonts(decompressor.search(ppviewer_cab).files) || []
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def grep_cabbed_fonts(file)
|
|
61
|
-
Array.new.tap do |fonts|
|
|
62
|
-
while file
|
|
63
|
-
fonts.push(file) if file.filename.match(/.tt|.TT/)
|
|
64
|
-
file = file.next
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def source
|
|
70
|
-
@source ||= Fontist::Source.all.remote.msvista
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def download_exe_file
|
|
74
|
-
Fontist::Downloader.download(
|
|
75
|
-
source.urls.first, file_size: source.file_size.to_i, sha: source.sha
|
|
76
|
-
)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def ppviewer_cab
|
|
80
|
-
@ppviewer_cab ||= Fontist.assets_path.join("ppviewer.cab").to_s
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|