hyde-fonts 0.3.0 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hyde-fonts.rb +7 -0
- data/lib/hyde_fonts/font_data.rb +2 -3
- data/lib/hyde_fonts/font_face.rb +7 -7
- data/lib/hyde_fonts/font_ruleset.rb +2 -2
- data/lib/hyde_fonts/font_variant.rb +1 -1
- data/lib/hyde_fonts/generated_css_file.rb +3 -3
- data/lib/hyde_fonts/generated_font_file.rb +4 -4
- data/lib/hyde_fonts/hyde_fonts.rb +69 -69
- data/lib/hyde_fonts/provider_google.rb +17 -17
- metadata +4 -4
- data/lib/hyde_fonts.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4406372880f1fc6506906229c72d95cb6cca93bc3b686c503b080be896488b7
|
4
|
+
data.tar.gz: 9e54c8c62232ae687abdbb953ca08196f7e277d8787c2ea2b89ba15291044114
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c390bf62ee512ead4b63948f73ac55d108ed75468abd56c548f4213576e7f8c776467834564d89977f96e01feb4035a5830f54261fa939981082340676943be
|
7
|
+
data.tar.gz: 213c46fdaba570fe6ba9d6188d99c67a2a7fd199103ed6b5a1d171b52a2de974761fb4981787496dbbe6d817943a2327f25daf824cb2f419014a09014f410d70
|
data/lib/hyde-fonts.rb
ADDED
data/lib/hyde_fonts/font_data.rb
CHANGED
data/lib/hyde_fonts/font_face.rb
CHANGED
@@ -4,9 +4,9 @@ module Hyde
|
|
4
4
|
attr_accessor :css
|
5
5
|
|
6
6
|
def initialize(face)
|
7
|
-
@name = face[
|
8
|
-
@provider = face[
|
9
|
-
@weights = face[
|
7
|
+
@name = face["name"]
|
8
|
+
@provider = face["provider"]
|
9
|
+
@weights = face["weights"]
|
10
10
|
@variants = parse_variants
|
11
11
|
@css = []
|
12
12
|
end
|
@@ -20,19 +20,19 @@ module Hyde
|
|
20
20
|
def to_s
|
21
21
|
variants = sort_variants.map { |variant| variant.to_s }
|
22
22
|
|
23
|
-
@name +
|
23
|
+
@name + ":ital,wght@" + variants.join(";")
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
private
|
27
27
|
|
28
28
|
def parse_variants
|
29
29
|
variants = []
|
30
30
|
|
31
31
|
for variant in @weights
|
32
|
-
variants.push(Hyde::FontVariant.new(weight: variant[
|
32
|
+
variants.push(Hyde::FontVariant.new(weight: variant["value"], italic: variant["italic"]))
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
variants
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -18,11 +18,11 @@ module Hyde
|
|
18
18
|
@uri = URI(uri)
|
19
19
|
@format = format
|
20
20
|
|
21
|
-
@filename = [@family, @style, @weight, @char_set +
|
21
|
+
@filename = [@family, @style, @weight, @char_set + "." + @format].join("_")
|
22
22
|
end
|
23
23
|
|
24
24
|
def local_ruleset(path)
|
25
|
-
@ruleset.gsub(/(?<=url\().*(?=\)\s)/,
|
25
|
+
@ruleset.gsub(/(?<=url\().*(?=\)\s)/, "/" + File.join(path, @filename))
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -8,12 +8,12 @@ module Hyde
|
|
8
8
|
|
9
9
|
def initialize(site, dir, name)
|
10
10
|
@site = site
|
11
|
-
@dir
|
11
|
+
@dir = dir
|
12
12
|
@name = name
|
13
13
|
@relative_path = File.join(*[@dir, @name].compact)
|
14
14
|
@extname = File.extname(@name)
|
15
15
|
@type = @collection&.label&.to_sym
|
16
|
-
@generator =
|
16
|
+
@generator = "hyde_fonts"
|
17
17
|
end
|
18
18
|
|
19
19
|
def write(dest)
|
@@ -23,7 +23,7 @@ module Hyde
|
|
23
23
|
FileUtils.mkdir_p(File.dirname(dest_path))
|
24
24
|
FileUtils.rm(dest_path) if File.exist?(dest_path)
|
25
25
|
|
26
|
-
File.open(dest_path,
|
26
|
+
File.open(dest_path, "w") do |output_file|
|
27
27
|
output_file << file_contents
|
28
28
|
end
|
29
29
|
|
@@ -8,13 +8,13 @@ module Hyde
|
|
8
8
|
|
9
9
|
def initialize(site, dir, name)
|
10
10
|
@site = site
|
11
|
-
@dir
|
11
|
+
@dir = dir
|
12
12
|
@name = name
|
13
13
|
@relative_path = File.join(*[@dir, @name].compact)
|
14
14
|
@extname = File.extname(@name)
|
15
15
|
@type = @collection&.label&.to_sym
|
16
|
-
@generator =
|
17
|
-
@dest_path =
|
16
|
+
@generator = "hyde_fonts"
|
17
|
+
@dest_path = ""
|
18
18
|
end
|
19
19
|
|
20
20
|
def write(dest)
|
@@ -24,7 +24,7 @@ module Hyde
|
|
24
24
|
FileUtils.mkdir_p(File.dirname(dest_path))
|
25
25
|
FileUtils.rm(dest_path) if File.exist?(dest_path)
|
26
26
|
|
27
|
-
File.open(dest_path,
|
27
|
+
File.open(dest_path, "w") do |output_file|
|
28
28
|
output_file << file_contents
|
29
29
|
end
|
30
30
|
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require_relative
|
8
|
-
require_relative
|
1
|
+
require "jekyll"
|
2
|
+
require_relative "font_data"
|
3
|
+
require_relative "font_face"
|
4
|
+
require_relative "font_ruleset"
|
5
|
+
require_relative "font_variant"
|
6
|
+
require_relative "generated_css_file"
|
7
|
+
require_relative "generated_font_file"
|
8
|
+
require_relative "provider_google"
|
9
9
|
|
10
10
|
module Jekyll
|
11
11
|
class HydeFontsTag < Liquid::Tag
|
@@ -13,66 +13,66 @@ module Jekyll
|
|
13
13
|
super
|
14
14
|
|
15
15
|
@tag_name = tag_name
|
16
|
-
style, indent = text.strip.split(
|
16
|
+
style, indent = text.strip.split(" ")
|
17
17
|
@style = style.strip
|
18
18
|
@indent = indent.to_i || 0
|
19
19
|
@tokens = tokens
|
20
20
|
end
|
21
21
|
|
22
22
|
def render(context)
|
23
|
-
return context.registers[:site].config[
|
23
|
+
return unless context.registers[:site].config["hyde_fonts"]["enable"] == true
|
24
24
|
|
25
25
|
file = context.registers[:site].static_files.find { |file|
|
26
26
|
file.is_a?(Hyde::GeneratedCssFile)
|
27
27
|
}
|
28
28
|
|
29
|
-
if @style ==
|
29
|
+
if @style == "inline"
|
30
30
|
file.file_contents
|
31
|
-
elsif @style ==
|
31
|
+
elsif @style == "link"
|
32
32
|
"<link href='" + file.relative_path + "' rel='stylesheet'>"
|
33
|
-
elsif @style ==
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
33
|
+
elsif @style == "decap-config"
|
34
|
+
[
|
35
|
+
"- label: Hyde-Fonts",
|
36
|
+
" name: fonts",
|
37
|
+
" file: \"src/_data/fonts.yml\"",
|
38
|
+
" fields:",
|
39
|
+
" - label: Fonts",
|
40
|
+
" name: fonts",
|
41
|
+
" widget: object",
|
42
|
+
" fields:",
|
43
|
+
" - label: Faces",
|
44
|
+
" name: faces",
|
45
|
+
" widget: list",
|
46
|
+
" collapsed: false",
|
47
|
+
" create: true",
|
48
|
+
" fields:",
|
49
|
+
" - label: Name",
|
50
|
+
" name: name",
|
51
|
+
" widget: string",
|
52
|
+
" - label: Weights",
|
53
|
+
" name: weights",
|
54
|
+
" widget: list",
|
55
|
+
" collapsed: false",
|
56
|
+
" fields:",
|
57
|
+
" - label: Weight",
|
58
|
+
" name: value",
|
59
|
+
" widget: string",
|
60
|
+
" - label: Italic",
|
61
|
+
" name: italic",
|
62
|
+
" widget: boolean"
|
63
|
+
]
|
64
|
+
.map { |x| x.prepend(" " * 6) }
|
65
|
+
.join("\n")
|
66
|
+
.prepend("# Hyde Fonts ---\n")
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
Liquid::Template.register_tag(
|
71
|
+
Liquid::Template.register_tag("hyde_fonts", Jekyll::HydeFontsTag)
|
72
72
|
|
73
73
|
class HydeFontsGenerator < Generator
|
74
74
|
def generate(site)
|
75
|
-
Hyde::Fonts.new(site).generate
|
75
|
+
Hyde::Fonts.new(site).generate
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -80,9 +80,9 @@ end
|
|
80
80
|
module Hyde
|
81
81
|
class Fonts
|
82
82
|
@@config = {
|
83
|
-
"data_source_name" =>
|
84
|
-
"file_output_path" =>
|
85
|
-
"css_output_name" =>
|
83
|
+
"data_source_name" => "fonts",
|
84
|
+
"file_output_path" => "assets/fonts",
|
85
|
+
"css_output_name" => "fonts.css",
|
86
86
|
"css_minify" => true,
|
87
87
|
"enable" => true,
|
88
88
|
"fetch_fonts" => true,
|
@@ -91,35 +91,35 @@ module Hyde
|
|
91
91
|
|
92
92
|
def initialize(site)
|
93
93
|
@site = site
|
94
|
-
@config = site.config.dig(
|
94
|
+
@config = site.config.dig("hyde_fonts")
|
95
95
|
|
96
|
-
if
|
96
|
+
if @config.nil?
|
97
97
|
@config = @@config
|
98
|
-
site.config[
|
98
|
+
site.config["hyde_fonts"] = @config
|
99
99
|
end
|
100
100
|
|
101
|
-
if config(
|
102
|
-
@site.config[
|
101
|
+
if config("keep_files") == true
|
102
|
+
@site.config["keep_files"].push(config("file_output_path"))
|
103
103
|
end
|
104
104
|
|
105
|
-
if site.config.dig(
|
106
|
-
@site.config[
|
105
|
+
if site.config.dig("hyde_fonts").nil?
|
106
|
+
@site.config["hyde_fonts"] = @config
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
110
|
def generate
|
111
|
-
return unless config(
|
111
|
+
return unless config("enable") == true
|
112
112
|
# get faces from jekyll data file
|
113
113
|
font_data = Hyde::FontData.new(data)
|
114
114
|
|
115
115
|
# handle font providers
|
116
116
|
for face in font_data.faces
|
117
|
-
Jekyll.logger.info(
|
117
|
+
Jekyll.logger.info("Fonts:", "Preparing #{face.name}")
|
118
118
|
|
119
119
|
case face.provider
|
120
|
-
when
|
120
|
+
when "google"
|
121
121
|
Hyde::FontProviderGoogle.new(@site, @config).fetch(face)
|
122
|
-
when
|
122
|
+
when "local"
|
123
123
|
# TODO handle local fonts
|
124
124
|
# Hyde::FontProviderLocal.new(@site, @config).fetch(face)
|
125
125
|
end
|
@@ -127,26 +127,26 @@ module Hyde
|
|
127
127
|
|
128
128
|
css = font_data.faces.map { |face| face.css }
|
129
129
|
# generate static file containing face css rulesets
|
130
|
-
css_file = Hyde::GeneratedCssFile.new(@site, config(
|
130
|
+
css_file = Hyde::GeneratedCssFile.new(@site, config("file_output_path"), config("css_output_name"))
|
131
131
|
css_file.file_contents = minify(css.join("\n"))
|
132
132
|
|
133
133
|
@site.static_files << css_file
|
134
134
|
end
|
135
135
|
|
136
|
-
|
136
|
+
private
|
137
137
|
|
138
|
-
def config(*
|
139
|
-
@config.dig(*
|
138
|
+
def config(*)
|
139
|
+
@config.dig(*)
|
140
140
|
end
|
141
141
|
|
142
142
|
def data
|
143
|
-
@site.data.dig(config(
|
143
|
+
@site.data.dig(config("data_source_name"), "fonts")
|
144
144
|
end
|
145
145
|
|
146
146
|
def minify(css)
|
147
|
-
return css if config(
|
147
|
+
return css if config("css_minify") == false
|
148
148
|
|
149
|
-
converter_config = {
|
149
|
+
converter_config = {"sass" => {"style" => "compressed"}}
|
150
150
|
|
151
151
|
Jekyll::Converters::Scss.new(converter_config).convert(css)
|
152
152
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "uri"
|
2
|
+
require "net/http"
|
3
3
|
|
4
4
|
module Hyde
|
5
5
|
class FontProviderGoogle
|
@@ -13,10 +13,10 @@ module Hyde
|
|
13
13
|
|
14
14
|
begin
|
15
15
|
uri_payload = Net::HTTP.get(face_uri, {
|
16
|
-
"User-Agent":
|
16
|
+
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0"
|
17
17
|
})
|
18
18
|
rescue
|
19
|
-
Jekyll.logger.warn(
|
19
|
+
Jekyll.logger.warn("Fonts Warning:", "Unable to reach Google Fonts service.")
|
20
20
|
return
|
21
21
|
end
|
22
22
|
|
@@ -30,14 +30,14 @@ module Hyde
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
private
|
34
34
|
|
35
35
|
def face_uri
|
36
|
-
google_uri_base =
|
37
|
-
params = [[
|
38
|
-
params.push([
|
36
|
+
google_uri_base = "https://fonts.googleapis.com/css2"
|
37
|
+
params = [["display", "swap"]]
|
38
|
+
params.push(["family", @face.to_s])
|
39
39
|
|
40
|
-
uri = google_uri_base +
|
40
|
+
uri = google_uri_base + "?" + params.map { |param| param.join("=") }.join("&")
|
41
41
|
|
42
42
|
URI(uri)
|
43
43
|
end
|
@@ -50,21 +50,21 @@ module Hyde
|
|
50
50
|
|
51
51
|
def fetch_font_from_ruleset(ruleset)
|
52
52
|
filename = ruleset.filename
|
53
|
-
file = Hyde::GeneratedFontFile.new(@site, @config[
|
53
|
+
file = Hyde::GeneratedFontFile.new(@site, @config["file_output_path"], filename)
|
54
54
|
|
55
|
-
destination_fname = file.destination(
|
55
|
+
destination_fname = file.destination("./")
|
56
56
|
|
57
|
-
if @config[
|
58
|
-
Jekyll.logger.debug(
|
57
|
+
if @config["keep_files"] == true
|
58
|
+
Jekyll.logger.debug("Fonts:", "file #{filename} already exists.")
|
59
59
|
return if File.exist?(destination_fname)
|
60
60
|
end
|
61
61
|
|
62
|
-
if @config[
|
63
|
-
Jekyll.logger.warn(
|
62
|
+
if @config["fetch_fonts"] == false
|
63
|
+
Jekyll.logger.warn("Fonts:", "fetch disabled, no local version of #{filename} found.")
|
64
64
|
return
|
65
65
|
end
|
66
66
|
|
67
|
-
Jekyll.logger.debug(
|
67
|
+
Jekyll.logger.debug("Fonts:", "downloading #{@face.name} from #{@face.provider}")
|
68
68
|
font_uri_payload = Net::HTTP.get(ruleset.uri)
|
69
69
|
file.file_contents = font_uri_payload
|
70
70
|
|
@@ -72,7 +72,7 @@ module Hyde
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def rewrite_ruleset_to_local(ruleset)
|
75
|
-
ruleset.local_ruleset(@config[
|
75
|
+
ruleset.local_ruleset(@config["file_output_path"])
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyde-fonts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregory Daynes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -37,7 +37,7 @@ executables: []
|
|
37
37
|
extensions: []
|
38
38
|
extra_rdoc_files: []
|
39
39
|
files:
|
40
|
-
- lib/
|
40
|
+
- lib/hyde-fonts.rb
|
41
41
|
- lib/hyde_fonts/font_data.rb
|
42
42
|
- lib/hyde_fonts/font_face.rb
|
43
43
|
- lib/hyde_fonts/font_ruleset.rb
|
@@ -65,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '0'
|
67
67
|
requirements: []
|
68
|
-
rubygems_version: 3.4.
|
68
|
+
rubygems_version: 3.4.10
|
69
69
|
signing_key:
|
70
70
|
specification_version: 4
|
71
71
|
summary: Plugin for jekyll to manage google fonts
|