prawn-icon 2.0.0 → 2.1.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/CHANGELOG.md +10 -0
- data/lib/prawn/icon.rb +1 -0
- data/lib/prawn/icon/compatibility.rb +178 -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/unit/compatibility_spec.rb +44 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75952245471e90a37af57ae8ee7040a64c3c4117
|
4
|
+
data.tar.gz: b965941ea1799196938334e90cfab8b5d473f0e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 924dac06a25fb32e2eb85144ab7b0a0f9eb0b16042a6dad2daca3320d120a7e7526cd0cc612f328f8617523c13b5ab33e7eaef50ee9fa102c054dfd1f76fe1cf
|
7
|
+
data.tar.gz: 5b1ad4c25e1bda070c38856fa2796ff8cfb8e2ca7a79d96f277b875f718fb6ef19011b34153e23552be3e56bbb80c3b16c63e1e8c1f7474a78898d4ebb507cd8
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
# 2.1.0 - April 1, 2018
|
2
|
+
|
3
|
+
* Introduce backwards compatibility with FontAwesome 4 icon keys by dynamically
|
4
|
+
rewriting all instances of `fa-*` to their appropriate FontAwesome 5 equivalent
|
5
|
+
key. This is achieved by implementing a shim generated from the FontAwesome metadata.
|
6
|
+
* Introduce a deprecation warning written to `STDERR` when any `fa-*` key is
|
7
|
+
encountered. The compatibility shim will be removed in the next major version
|
8
|
+
of `Prawn::Icon` (`3.0.0`).
|
9
|
+
* See the [discussion here](https://github.com/jessedoyle/prawn-icon/pull/33) for more details.
|
10
|
+
|
1
11
|
# 2.0.0 - March 7, 2018
|
2
12
|
|
3
13
|
* [**breaking change**] Update to FontAwesome 5.0.8. FontAwesome 5 now provides 3 different font families: `brands`, `regular` and `solid`. The specifiers for these font icons are now: `fab`, `far` and `fas`.
|
data/lib/prawn/icon.rb
CHANGED
@@ -0,0 +1,178 @@
|
|
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
|
+
# rubocop:disable Metrics/ClassLength
|
10
|
+
module Prawn
|
11
|
+
class Icon
|
12
|
+
class Compatibility
|
13
|
+
SHIMS = {
|
14
|
+
'fa-area-chart' => 'fas-chart-area',
|
15
|
+
'fa-arrow-circle-o-down' => 'far-arrow-alt-circle-down',
|
16
|
+
'fa-arrow-circle-o-left' => 'far-arrow-alt-circle-left',
|
17
|
+
'fa-arrow-circle-o-right' => 'far-arrow-alt-circle-right',
|
18
|
+
'fa-arrow-circle-o-up' => 'far-arrow-alt-circle-up',
|
19
|
+
'fa-arrows' => 'fas-arrows-alt',
|
20
|
+
'fa-arrows-alt' => 'fas-expand-arrows-alt',
|
21
|
+
'fa-arrows-h' => 'fas-arrows-alt-h',
|
22
|
+
'fa-arrows-v' => 'fas-arrows-alt-v',
|
23
|
+
'fa-bar-chart' => 'far-chart-bar',
|
24
|
+
'fa-bitbucket-square' => 'fab-bitbucket',
|
25
|
+
'fa-calendar' => 'fas-calendar-alt',
|
26
|
+
'fa-calendar-o' => 'far-calendar',
|
27
|
+
'fa-caret-square-o-down' => 'far-caret-square-down',
|
28
|
+
'fa-caret-square-o-left' => 'far-caret-square-left',
|
29
|
+
'fa-caret-square-o-right' => 'far-caret-square-right',
|
30
|
+
'fa-caret-square-o-up' => 'far-caret-square-up',
|
31
|
+
'fa-cc' => 'far-closed-captioning',
|
32
|
+
'fa-chain-broken' => 'fas-unlink',
|
33
|
+
'fa-circle-o-notch' => 'fas-circle-notch',
|
34
|
+
'fa-circle-thin' => 'far-circle',
|
35
|
+
'fa-clipboard' => 'far-clipboard',
|
36
|
+
'fa-clone' => 'far-clone',
|
37
|
+
'fa-cloud-download' => 'fas-cloud-download-alt',
|
38
|
+
'fa-cloud-upload' => 'fas-cloud-upload-alt',
|
39
|
+
'fa-code-fork' => 'fas-code-branch',
|
40
|
+
'fa-commenting' => 'fas-comment-alt',
|
41
|
+
'fa-compass' => 'far-compass',
|
42
|
+
'fa-copyright' => 'far-copyright',
|
43
|
+
'fa-creative-commons' => 'fab-creative-commons',
|
44
|
+
'fa-credit-card' => 'far-credit-card',
|
45
|
+
'fa-credit-card-alt' => 'fas-credit-card',
|
46
|
+
'fa-cutlery' => 'fas-utensils',
|
47
|
+
'fa-diamond' => 'far-gem',
|
48
|
+
'fa-eercast' => 'fab-sellcast',
|
49
|
+
'fa-eur' => 'fas-euro-sign',
|
50
|
+
'fa-exchange' => 'fas-exchange-alt',
|
51
|
+
'fa-external-link' => 'fas-external-link-alt',
|
52
|
+
'fa-external-link-square' => 'fas-external-link-square-alt',
|
53
|
+
'fa-eye-dropper' => 'far-eye-dropper',
|
54
|
+
'fa-eye-slash' => 'far-eye-slash',
|
55
|
+
'fa-eyedropper' => 'fas-eye-dropper',
|
56
|
+
'fa-facebook' => 'fab-facebook-f',
|
57
|
+
'fa-facebook-official' => 'fab-facebook',
|
58
|
+
'fa-file-text' => 'fas-file-alt',
|
59
|
+
'fa-files-o' => 'far-copy',
|
60
|
+
'fa-floppy-o' => 'far-save',
|
61
|
+
'fa-gbp' => 'fas-pound-sign',
|
62
|
+
'fa-glass' => 'fas-glass-martini',
|
63
|
+
'fa-google-plus' => 'fab-google-plus-g',
|
64
|
+
'fa-google-plus-circle' => 'fab-google-plus',
|
65
|
+
'fa-google-plus-official' => 'fab-google-plus',
|
66
|
+
'fa-hand-o-down' => 'far-hand-point-down',
|
67
|
+
'fa-hand-o-left' => 'far-hand-point-left',
|
68
|
+
'fa-hand-o-right' => 'far-hand-point-right',
|
69
|
+
'fa-hand-o-up' => 'far-hand-point-up',
|
70
|
+
'fa-header' => 'fas-heading',
|
71
|
+
'fa-id-badge' => 'far-id-badge',
|
72
|
+
'fa-ils' => 'fas-shekel-sign',
|
73
|
+
'fa-inr' => 'fas-rupee-sign',
|
74
|
+
'fa-intersex' => 'fas-transgender',
|
75
|
+
'fa-jpy' => 'fas-yen-sign',
|
76
|
+
'fa-krw' => 'fas-won-sign',
|
77
|
+
'fa-level-down' => 'fas-level-down-alt',
|
78
|
+
'fa-level-up' => 'fas-level-up-alt',
|
79
|
+
'fa-life-ring' => 'far-life-ring',
|
80
|
+
'fa-line-chart' => 'fas-chart-line',
|
81
|
+
'fa-linkedin' => 'fab-linkedin-in',
|
82
|
+
'fa-linkedin-square' => 'fab-linkedin',
|
83
|
+
'fa-list-alt' => 'far-list-alt',
|
84
|
+
'fa-long-arrow-down' => 'fas-long-arrow-alt-down',
|
85
|
+
'fa-long-arrow-left' => 'fas-long-arrow-alt-left',
|
86
|
+
'fa-long-arrow-right' => 'fas-long-arrow-alt-right',
|
87
|
+
'fa-long-arrow-up' => 'fas-long-arrow-alt-up',
|
88
|
+
'fa-map-marker' => 'fas-map-marker-alt',
|
89
|
+
'fa-meanpath' => 'fab-font-awesome',
|
90
|
+
'fa-mobile' => 'fas-mobile-alt',
|
91
|
+
'fa-money' => 'far-money-bill-alt',
|
92
|
+
'fa-object-group' => 'far-object-group',
|
93
|
+
'fa-object-ungroup' => 'far-object-ungroup',
|
94
|
+
'fa-paste' => 'far-paste',
|
95
|
+
'fa-pencil' => 'fas-pencil-alt',
|
96
|
+
'fa-pencil-square' => 'fas-pen-square',
|
97
|
+
'fa-pencil-square-o' => 'far-edit',
|
98
|
+
'fa-picture' => 'fas-image',
|
99
|
+
'fa-pie-chart' => 'fas-chart-pie',
|
100
|
+
'fa-refresh' => 'fas-sync',
|
101
|
+
'fa-registered' => 'far-registered',
|
102
|
+
'fa-repeat' => 'fas-redo',
|
103
|
+
'fa-rub' => 'fas-ruble-sign',
|
104
|
+
'fa-scissors' => 'fas-cut',
|
105
|
+
'fa-shield' => 'fas-shield-alt',
|
106
|
+
'fa-sign-in' => 'fas-sign-in-alt',
|
107
|
+
'fa-sign-out' => 'fas-sign-out-alt',
|
108
|
+
'fa-sliders' => 'fas-sliders-h',
|
109
|
+
'fa-sort-alpha-asc' => 'fas-sort-alpha-down',
|
110
|
+
'fa-sort-alpha-desc' => 'fas-sort-alpha-up',
|
111
|
+
'fa-sort-amount-asc' => 'fas-sort-amount-down',
|
112
|
+
'fa-sort-amount-desc' => 'fas-sort-amount-up',
|
113
|
+
'fa-sort-asc' => 'fas-sort-up',
|
114
|
+
'fa-sort-desc' => 'fas-sort-down',
|
115
|
+
'fa-sort-numeric-asc' => 'fas-sort-numeric-down',
|
116
|
+
'fa-sort-numeric-desc' => 'fas-sort-numeric-up',
|
117
|
+
'fa-spoon' => 'fas-utensil-spoon',
|
118
|
+
'fa-star-half-empty' => 'fas-star-half',
|
119
|
+
'fa-star-half-full' => 'fas-star-half',
|
120
|
+
'fa-support' => 'far-life-ring',
|
121
|
+
'fa-tablet' => 'fas-tablet-alt',
|
122
|
+
'fa-tachometer' => 'fas-tachometer-alt',
|
123
|
+
'fa-television' => 'fas-tv',
|
124
|
+
'fa-thumb-tack' => 'fas-thumbtack',
|
125
|
+
'fa-thumbs-o-down' => 'far-thumbs-down',
|
126
|
+
'fa-thumbs-o-up' => 'far-thumbs-up',
|
127
|
+
'fa-ticket' => 'fas-ticket-alt',
|
128
|
+
'fa-trash' => 'fas-trash-alt',
|
129
|
+
'fa-trash-o' => 'far-trash-alt',
|
130
|
+
'fa-try' => 'fas-lira-sign',
|
131
|
+
'fa-usd' => 'fas-dollar-sign',
|
132
|
+
'fa-video-camera' => 'fas-video',
|
133
|
+
'fa-vimeo' => 'fab-vimeo-v',
|
134
|
+
'fa-volume-control-phone' => 'fas-phone-volume',
|
135
|
+
'fa-wheelchair-alt' => 'fab-accessible-icon',
|
136
|
+
'fa-window-maximize' => 'far-window-maximize',
|
137
|
+
'fa-window-restore' => 'far-window-restore',
|
138
|
+
'fa-youtube-play' => 'fab-youtube'
|
139
|
+
}.freeze
|
140
|
+
|
141
|
+
attr_accessor :key
|
142
|
+
|
143
|
+
def initialize(opts = {})
|
144
|
+
self.key = opts.fetch(:key)
|
145
|
+
end
|
146
|
+
|
147
|
+
def translate(io = STDERR)
|
148
|
+
@translate ||= begin
|
149
|
+
if key.start_with?('fa-')
|
150
|
+
map.tap { |replaced| warning(replaced, key, io) }
|
151
|
+
else
|
152
|
+
key
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
private
|
158
|
+
|
159
|
+
def map
|
160
|
+
SHIMS.fetch(key) do
|
161
|
+
# FontAwesome shim metadata assumes "fas" as the default
|
162
|
+
# font family if not explicity referenced.
|
163
|
+
"fas-#{key.sub(/fa-/, '')}"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def warning(new_key, old_key, io)
|
168
|
+
io.puts <<-DEPRECATION
|
169
|
+
[Prawn::Icon - DEPRECATION WARNING]
|
170
|
+
FontAwesome 4 icon was referenced as '#{old_key}'.
|
171
|
+
Use the FontAwesome 5 icon '#{new_key}' instead.
|
172
|
+
This compatibility layer will be removed in Prawn::Icon 3.0.0.
|
173
|
+
DEPRECATION
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
# 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
@@ -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
|
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.1.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: 2018-
|
11
|
+
date: 2018-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prawn
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- examples/paymentfont.rb
|
157
157
|
- lib/prawn/icon.rb
|
158
158
|
- lib/prawn/icon/base.rb
|
159
|
+
- lib/prawn/icon/compatibility.rb
|
159
160
|
- lib/prawn/icon/errors.rb
|
160
161
|
- lib/prawn/icon/font_data.rb
|
161
162
|
- lib/prawn/icon/interface.rb
|
@@ -167,6 +168,7 @@ files:
|
|
167
168
|
- spec/support/parser_helper.rb
|
168
169
|
- spec/support/pdf_helper.rb
|
169
170
|
- spec/unit/base_spec.rb
|
171
|
+
- spec/unit/compatibility_spec.rb
|
170
172
|
- spec/unit/errors/icon_key_empty_spec.rb
|
171
173
|
- spec/unit/errors/icon_not_found_spec.rb
|
172
174
|
- spec/unit/font_data_spec.rb
|