prawn-icon 2.0.0 → 2.5.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 +5 -5
- data/CHANGELOG.md +34 -1
- data/README.md +1 -1
- data/data/fonts/fa4/shims.yml +462 -0
- data/data/fonts/fab/LICENSE +1 -1
- data/data/fonts/fab/fa-brands.ttf +0 -0
- data/data/fonts/fab/fab.yml +107 -3
- data/data/fonts/far/LICENSE +1 -1
- data/data/fonts/far/fa-regular.ttf +0 -0
- data/data/fonts/far/far.yml +37 -1
- data/data/fonts/fas/LICENSE +1 -1
- data/data/fonts/fas/fa-solid.ttf +0 -0
- data/data/fonts/fas/fas.yml +462 -1
- data/examples/paymentfont.rb +1 -1
- data/lib/prawn/icon.rb +1 -0
- data/lib/prawn/icon/compatibility.rb +57 -0
- data/lib/prawn/icon/interface.rb +9 -3
- data/lib/prawn/icon/parser.rb +4 -5
- data/lib/prawn/icon/version.rb +1 -1
- data/spec/integration/icon_spec.rb +6 -6
- data/spec/unit/compatibility_spec.rb +44 -0
- data/spec/unit/errors/icon_key_empty_spec.rb +1 -3
- data/spec/unit/errors/icon_not_found_spec.rb +1 -3
- data/spec/unit/font_data_spec.rb +9 -9
- data/spec/unit/icon_spec.rb +15 -15
- data/spec/unit/parser_spec.rb +6 -4
- metadata +6 -3
data/examples/paymentfont.rb
CHANGED
@@ -19,7 +19,7 @@ Prawn::Document.generate('paymentfont.pdf') do
|
|
19
19
|
define_grid(columns: 6, rows: 12, gutter: 16)
|
20
20
|
|
21
21
|
sub_header = 'PaymentFont'
|
22
|
-
link = '
|
22
|
+
link = 'https://paymentfont.com'
|
23
23
|
page_header sub_header, link
|
24
24
|
|
25
25
|
first_page_icons icons do |icon_key|
|
data/lib/prawn/icon.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# compatibility.rb - Prawn::Icon FontAwesome 4/5 compatibility shim.
|
4
|
+
#
|
5
|
+
# Copyright March 2018, Jesse Doyle. All rights reserved.
|
6
|
+
#
|
7
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
+
|
9
|
+
module Prawn
|
10
|
+
class Icon
|
11
|
+
class Compatibility
|
12
|
+
SHIMS = YAML.load_file(
|
13
|
+
File.join(
|
14
|
+
Base::FONTDIR,
|
15
|
+
'fa4',
|
16
|
+
'shims.yml'
|
17
|
+
)
|
18
|
+
).freeze
|
19
|
+
|
20
|
+
attr_accessor :key
|
21
|
+
|
22
|
+
def initialize(opts = {})
|
23
|
+
self.key = opts.fetch(:key)
|
24
|
+
end
|
25
|
+
|
26
|
+
def translate(io = STDERR)
|
27
|
+
@translate ||= begin
|
28
|
+
if key.start_with?('fa-')
|
29
|
+
map.tap { |replaced| warning(replaced, key, io) }
|
30
|
+
else
|
31
|
+
key
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def map
|
39
|
+
SHIMS.fetch(key) do
|
40
|
+
# FontAwesome shim metadata assumes "fas" as the default
|
41
|
+
# font family if not explicity referenced.
|
42
|
+
"fas-#{key.sub(/fa-/, '')}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def warning(new_key, old_key, io)
|
47
|
+
io.puts <<-DEPRECATION
|
48
|
+
[Prawn::Icon - DEPRECATION WARNING]
|
49
|
+
FontAwesome 4 icon was referenced as '#{old_key}'.
|
50
|
+
Use the FontAwesome 5 icon '#{new_key}' instead.
|
51
|
+
This compatibility layer will be removed in Prawn::Icon 3.0.0.
|
52
|
+
DEPRECATION
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
# rubocop:enable Metrics/ClassLength
|
data/lib/prawn/icon/interface.rb
CHANGED
@@ -62,6 +62,7 @@ module Prawn
|
|
62
62
|
# inline_format: true
|
63
63
|
#
|
64
64
|
def icon(key, opts = {})
|
65
|
+
key = translate_key(key)
|
65
66
|
make_icon(key, opts).tap(&:render)
|
66
67
|
end
|
67
68
|
|
@@ -81,7 +82,8 @@ module Prawn
|
|
81
82
|
# the underlying text method call.
|
82
83
|
#
|
83
84
|
def make_icon(key, opts = {})
|
84
|
-
|
85
|
+
key = translate_key(key)
|
86
|
+
if opts.fetch(:inline_format, false)
|
85
87
|
inline_icon(key, opts)
|
86
88
|
else
|
87
89
|
Icon.new(key, self, opts)
|
@@ -151,6 +153,7 @@ module Prawn
|
|
151
153
|
# pdf.table(data) => (2 x 2 table)
|
152
154
|
#
|
153
155
|
def table_icon(key, opts = {})
|
156
|
+
key = translate_key(key)
|
154
157
|
if opts[:inline_format]
|
155
158
|
content = Icon::Parser.format(self, key)
|
156
159
|
opts.merge(content: content)
|
@@ -161,6 +164,10 @@ module Prawn
|
|
161
164
|
|
162
165
|
private
|
163
166
|
|
167
|
+
def translate_key(key)
|
168
|
+
Compatibility.new(key: key).translate
|
169
|
+
end
|
170
|
+
|
164
171
|
def icon_box(content, opts = {}) # :nodoc:
|
165
172
|
Text::Formatted::Box.new(content, opts).tap do |box|
|
166
173
|
box.render(dry_run: true)
|
@@ -176,8 +183,7 @@ module Prawn
|
|
176
183
|
|
177
184
|
def initialize(key, document, opts = {})
|
178
185
|
@pdf = document
|
179
|
-
@set = opts
|
180
|
-
FontData.specifier_from_key(key)
|
186
|
+
@set = opts.fetch(:set) { FontData.specifier_from_key(key) }
|
181
187
|
@data = FontData.load(document, @set)
|
182
188
|
@key = strip_specifier_from_key(key)
|
183
189
|
@unicode = @data.unicode(@key)
|
data/lib/prawn/icon/parser.rb
CHANGED
@@ -57,7 +57,6 @@ module Prawn
|
|
57
57
|
tokens.each do |token|
|
58
58
|
# Skip the closing tag
|
59
59
|
next if token =~ /<\/icon>/i
|
60
|
-
icon = {}
|
61
60
|
|
62
61
|
# Convert [[1,2], [3,4]] to { :1 => 2, :3 => 4 }
|
63
62
|
attrs = token.scan(ATTR_REGEX).inject({}) do |k, v|
|
@@ -65,8 +64,7 @@ module Prawn
|
|
65
64
|
k.merge!(val)
|
66
65
|
end
|
67
66
|
|
68
|
-
|
69
|
-
array << icon
|
67
|
+
array << attrs
|
70
68
|
end
|
71
69
|
end
|
72
70
|
end
|
@@ -101,13 +99,14 @@ module Prawn
|
|
101
99
|
def keys_to_unicode(document, content, config)
|
102
100
|
[].tap do |icons|
|
103
101
|
content.each_with_index do |icon, index|
|
102
|
+
key = Compatibility.new(key: icon).translate
|
104
103
|
options ||= {}
|
105
104
|
options = config[index] if config.any?
|
106
105
|
info = {
|
107
|
-
set: FontData.specifier_from_key(
|
106
|
+
set: FontData.specifier_from_key(key),
|
108
107
|
size: options[:size],
|
109
108
|
color: options[:color],
|
110
|
-
content: FontData.unicode_from_key(document,
|
109
|
+
content: FontData.unicode_from_key(document, key)
|
111
110
|
}
|
112
111
|
icons << info
|
113
112
|
end
|
data/lib/prawn/icon/version.rb
CHANGED
@@ -77,17 +77,17 @@ describe Prawn::Icon::Interface do
|
|
77
77
|
|
78
78
|
context 'invalid icon key' do
|
79
79
|
it 'should raise IconNotFound' do
|
80
|
-
|
81
|
-
|
82
|
-
|
80
|
+
expect { pdf.icon('far-__INVALID') }.to raise_error(
|
81
|
+
Prawn::Icon::Errors::IconNotFound
|
82
|
+
)
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
context 'invalid specifier' do
|
87
87
|
it 'should raise UnknownFont' do
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
expect { pdf.icon('__INVALID__') }.to raise_error(
|
89
|
+
Prawn::Errors::UnknownFont
|
90
|
+
)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright March 2018, Jesse Doyle. All rights reserved.
|
4
|
+
#
|
5
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
6
|
+
|
7
|
+
describe Prawn::Icon::Compatibility do
|
8
|
+
describe '#translate' do
|
9
|
+
let(:stderr) { StringIO.new }
|
10
|
+
subject { described_class.new(key: key) }
|
11
|
+
|
12
|
+
context 'with a non-deprecated key' do
|
13
|
+
let(:key) { 'fas-adjust' }
|
14
|
+
|
15
|
+
it 'does not write to STDERR' do
|
16
|
+
value = subject.translate(stderr)
|
17
|
+
stderr.rewind
|
18
|
+
expect(stderr.read).to be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'returns the original key' do
|
22
|
+
expect(subject.translate(stderr)).to eq(key)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'with a depreacted FontAwesome key' do
|
27
|
+
let(:key) { 'fa-birthday-cake' }
|
28
|
+
let(:mapped_key) { 'fas-birthday-cake' }
|
29
|
+
|
30
|
+
it 'writes a deprecation warning to STDERR' do
|
31
|
+
subject.translate(stderr)
|
32
|
+
stderr.rewind
|
33
|
+
errors = stderr.read
|
34
|
+
expect(errors).to include('DEPRECATION')
|
35
|
+
expect(errors).to include(key)
|
36
|
+
expect(errors).to include(mapped_key)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns the mapped key' do
|
40
|
+
expect(subject.translate(stderr)).to eq(mapped_key)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -12,8 +12,6 @@ describe Prawn::Icon::Errors::IconNotFound do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'is thrown on an invalid icon key' do
|
15
|
-
|
16
|
-
|
17
|
-
expect(proc).to raise_error(described_class)
|
15
|
+
expect { pdf.icon('far-an invalid key') }.to raise_error(described_class)
|
18
16
|
end
|
19
17
|
end
|
data/spec/unit/font_data_spec.rb
CHANGED
@@ -72,15 +72,15 @@ describe Prawn::Icon::FontData do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'should error when key is nil' do
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
expect { Prawn::Icon::FontData.specifier_from_key(nil) }.to raise_error(
|
76
|
+
Prawn::Icon::Errors::IconKeyEmpty
|
77
|
+
)
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'should error when key is an empty string' do
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
expect { Prawn::Icon::FontData.specifier_from_key('') }.to raise_error(
|
82
|
+
Prawn::Icon::Errors::IconKeyEmpty
|
83
|
+
)
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'should handle strings without any dashes properly' do
|
@@ -141,9 +141,9 @@ describe Prawn::Icon::FontData do
|
|
141
141
|
end
|
142
142
|
|
143
143
|
it 'should raise an error if unable to match a key' do
|
144
|
-
|
145
|
-
|
146
|
-
|
144
|
+
expect { fontawesome.unicode('an invalid sequence') }.to raise_error(
|
145
|
+
Prawn::Icon::Errors::IconNotFound
|
146
|
+
)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
data/spec/unit/icon_spec.rb
CHANGED
@@ -19,25 +19,25 @@ describe Prawn::Icon do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should raise an error if icon key is not found' do
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
expect { Prawn::Icon.new('far-__INVALID__', pdf) }.to raise_error(
|
23
|
+
errors::IconNotFound
|
24
|
+
)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'invalid icon specifier' do
|
29
29
|
it 'should raise an error' do
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
expect { pdf.icon('__INVALID__ some text') }.to raise_error(
|
31
|
+
Prawn::Errors::UnknownFont
|
32
|
+
)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'without a pdf object' do
|
37
37
|
it 'should raise an ArgumentError' do
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
expect { Prawn::Icon.new('far-address-book') }.to raise_error(
|
39
|
+
ArgumentError
|
40
|
+
)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -80,9 +80,9 @@ describe Prawn::Icon do
|
|
80
80
|
|
81
81
|
context 'without dashes in key' do
|
82
82
|
it 'raise an error about invalid keys' do
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
expect { Prawn::Icon.new('some invalid key', pdf) }.to raise_error(
|
84
|
+
Prawn::Errors::UnknownFont
|
85
|
+
)
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -98,9 +98,9 @@ describe Prawn::Icon do
|
|
98
98
|
|
99
99
|
context 'invalid icon key' do
|
100
100
|
it 'should raise IconNotFound' do
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
expect { Prawn::Icon.new('far-__INVALID__', pdf) }.to raise_error(
|
102
|
+
errors::IconNotFound
|
103
|
+
)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
data/spec/unit/parser_spec.rb
CHANGED
@@ -38,16 +38,18 @@ describe Prawn::Icon::Parser do
|
|
38
38
|
|
39
39
|
it 'should raise an error when an icon key is invalid' do
|
40
40
|
string = '<icon>an invalid key</icon>'
|
41
|
-
proc = Proc.new { Prawn::Icon::Parser.format(pdf, string) }
|
42
41
|
|
43
|
-
expect(
|
42
|
+
expect { Prawn::Icon::Parser.format(pdf, string) }.to raise_error(
|
43
|
+
Prawn::Errors::UnknownFont
|
44
|
+
)
|
44
45
|
end
|
45
46
|
|
46
47
|
it 'should raise an error when an icon is not found for valid set' do
|
47
48
|
string = '<icon>far-__INVALID__</icon>'
|
48
|
-
proc = Proc.new { Prawn::Icon::Parser.format(pdf, string) }
|
49
49
|
|
50
|
-
expect(
|
50
|
+
expect { Prawn::Icon::Parser.format(pdf, string) }.to raise_error(
|
51
|
+
Prawn::Icon::Errors::IconNotFound
|
52
|
+
)
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-icon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Doyle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prawn
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- README.md
|
134
134
|
- Rakefile
|
135
135
|
- data/fonts/DejaVuSans.ttf
|
136
|
+
- data/fonts/fa4/shims.yml
|
136
137
|
- data/fonts/fab/LICENSE
|
137
138
|
- data/fonts/fab/fa-brands.ttf
|
138
139
|
- data/fonts/fab/fab.yml
|
@@ -156,6 +157,7 @@ files:
|
|
156
157
|
- examples/paymentfont.rb
|
157
158
|
- lib/prawn/icon.rb
|
158
159
|
- lib/prawn/icon/base.rb
|
160
|
+
- lib/prawn/icon/compatibility.rb
|
159
161
|
- lib/prawn/icon/errors.rb
|
160
162
|
- lib/prawn/icon/font_data.rb
|
161
163
|
- lib/prawn/icon/interface.rb
|
@@ -167,6 +169,7 @@ files:
|
|
167
169
|
- spec/support/parser_helper.rb
|
168
170
|
- spec/support/pdf_helper.rb
|
169
171
|
- spec/unit/base_spec.rb
|
172
|
+
- spec/unit/compatibility_spec.rb
|
170
173
|
- spec/unit/errors/icon_key_empty_spec.rb
|
171
174
|
- spec/unit/errors/icon_not_found_spec.rb
|
172
175
|
- spec/unit/font_data_spec.rb
|
@@ -194,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
197
|
version: 1.3.6
|
195
198
|
requirements: []
|
196
199
|
rubyforge_project:
|
197
|
-
rubygems_version: 2.
|
200
|
+
rubygems_version: 2.7.6.2
|
198
201
|
signing_key:
|
199
202
|
specification_version: 4
|
200
203
|
summary: Provides icon fonts for PrawnPDF
|