prawn-svg 0.26.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc43729a870492246519b983633bc96720650d74
4
- data.tar.gz: d577a115a0cf7fcb8fc8d9f389d83755dbc5acda
3
+ metadata.gz: 05bd5082f2d3bfb40a2776b9b8239ec0d345e826
4
+ data.tar.gz: 77c9df1c4f8bab6198ea45a0531314deac6e7a59
5
5
  SHA512:
6
- metadata.gz: 97c5a9deaf6d7429c9f6f532ca97044d2bd73658009dbb16dd396d5c5b37b8465e9c2366f35e6eee7156b4f9e8450a44e5e284fe65f8b3c4b273515fc86bbb01
7
- data.tar.gz: ddc2a03914c5614d9ddb3c90e70a71983546b6e554cfe073ad6faca81e6a1afed7293de0b906f0eda3af02f8b14a775eedd9e5d69de7737aaee23751052d1a2f
6
+ metadata.gz: 8d429c038aade4dad263441309d48f43e8ea185f67f85de9e556cbb1b2f50dd19af4bc6345e0a62388eaca504caea8d00506404630be11efea206a28a3b680f3
7
+ data.tar.gz: 83bc2528c2ba901523e3d54e32098852d354d35c07fc7bacbbc2583526422e8d2f613195e94145efeb56eeeb0d2db427b59bd0f1da19f888cc21f0b2cb7fbb7f
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 2.1.8
5
- - 2.2.4
6
- - 2.3.0
3
+ - 2.1.10
4
+ - 2.2.7
5
+ - 2.3.3
6
+ - 2.4.0
data/README.md CHANGED
@@ -10,7 +10,7 @@ This will take an SVG document as input and render it into your PDF. Find out m
10
10
  http://github.com/prawnpdf/prawn
11
11
 
12
12
  prawn-svg is compatible with all versions of Prawn from 0.11.1 onwards, including the 1.x and 2.x series.
13
- The minimum Ruby version required is 2.0.0.
13
+ The minimum Ruby version required is 2.1.0.
14
14
 
15
15
  ## Using prawn-svg
16
16
 
@@ -76,8 +76,7 @@ prawn-svg supports most but not all of the full SVG 1.1 specification. It curre
76
76
 
77
77
  - `<marker>`
78
78
 
79
- - <tt>&lt;linearGradient&gt;</tt> is implemented but not currently working as we are waiting for a pull request to be accepted
80
- into Prawn. (gradientTransform, spreadMethod and stop-opacity are unimplemented.)
79
+ - `<linearGradient>` is implemented with Prawn 2.2.0+ (gradientTransform, spreadMethod and stop-opacity are unimplemented.)
81
80
 
82
81
  - `<switch>` and `<foreignObject>`, although prawn-svg cannot handle any data that is not SVG so `<foreignObject>`
83
82
  tags are always ignored.
@@ -119,6 +118,9 @@ Mac OS X and Debian Linux users. You can add to the font path:
119
118
  Prawn::SVG::FontRegistry.font_path << "/my/font/directory"
120
119
  ```
121
120
 
121
+ ### Using with prawn-rails
122
+
123
+ In your Gemfile, put `gem 'prawn-svg'` before `gem 'prawn-rails'` so that prawn-rails can see the prawn-svg extension.
122
124
 
123
125
  --
124
126
  Copyright Roger Nesbitt <roger@seriousorange.com>. MIT licence.
@@ -1,7 +1,5 @@
1
1
  module Prawn::SVG::Calculators
2
2
  class DocumentSizing
3
- DEFAULT_WIDTH = 300
4
- DEFAULT_HEIGHT = 150
5
3
  DEFAULT_ASPECT_RATIO = "xMidYMid meet"
6
4
 
7
5
  attr_writer :document_width, :document_height
@@ -30,17 +28,14 @@ module Prawn::SVG::Calculators
30
28
  container_width = @requested_width || @bounds[0]
31
29
  container_height = @requested_height || @bounds[1]
32
30
 
33
- @output_width = Pixels::Measurement.to_pixels(@document_width || @requested_width, container_width)
34
- @output_height = Pixels::Measurement.to_pixels(@document_height || @requested_height, container_height)
31
+ @output_width = Pixels::Measurement.to_pixels(@document_width || container_width, container_width)
32
+ @output_height = Pixels::Measurement.to_pixels(@document_height || container_height, container_height)
35
33
 
36
34
  if @view_box
37
35
  values = @view_box.strip.split(Prawn::SVG::Elements::COMMA_WSP_REGEXP)
38
36
  @x_offset, @y_offset, @viewport_width, @viewport_height = values.map {|value| value.to_f}
39
37
 
40
38
  if @viewport_width > 0 && @viewport_height > 0
41
- @output_width ||= container_width
42
- @output_height ||= @output_width * @viewport_height / @viewport_width
43
-
44
39
  aspect = AspectRatio.new(@preserve_aspect_ratio, [@output_width, @output_height], [@viewport_width, @viewport_height])
45
40
  @x_scale = aspect.width / @viewport_width
46
41
  @y_scale = aspect.height / @viewport_height
@@ -48,9 +43,6 @@ module Prawn::SVG::Calculators
48
43
  @y_offset -= aspect.y / @y_scale
49
44
  end
50
45
  else
51
- @output_width ||= Pixels::Measurement.to_pixels(DEFAULT_WIDTH, container_width)
52
- @output_height ||= Pixels::Measurement.to_pixels(DEFAULT_HEIGHT, container_height)
53
-
54
46
  @viewport_width = @output_width
55
47
  @viewport_height = @output_height
56
48
  end
@@ -42,12 +42,9 @@ class Prawn::SVG::Elements::Gradient < Prawn::SVG::Elements::Base
42
42
  end
43
43
 
44
44
  def assert_compatible_prawn_version
45
- # At the moment, the patch required for this functionality to work in prawn has not been merged.
46
- raise SkipElementError, "We are unfortunately still waiting on the Prawn project to merge a pull request that is required for this feature to correctly function"
47
-
48
- # if (Prawn::VERSION.split(".").map(&:to_i) <=> [2, 0, 4]) == -1
49
- # raise SkipElementError, "Prawn 2.0.4+ must be used if you'd like prawn-svg to render gradients"
50
- # end
45
+ if (Prawn::VERSION.split(".").map(&:to_i) <=> [2, 2, 0]) == -1
46
+ raise SkipElementError, "Prawn 2.2.0+ must be used if you'd like prawn-svg to render gradients"
47
+ end
51
48
  end
52
49
 
53
50
  def load_gradient_configuration
@@ -2,6 +2,9 @@ class Prawn::SVG::Elements::Line < Prawn::SVG::Elements::Base
2
2
  include Prawn::SVG::Pathable
3
3
 
4
4
  def parse
5
+ # Lines are one dimensional, so cannot be filled.
6
+ computed_properties.fill = 'none'
7
+
5
8
  @x1 = x_pixels(attributes['x1'] || 0)
6
9
  @y1 = y_pixels(attributes['y1'] || 0)
7
10
  @x2 = x_pixels(attributes['x2'] || 0)
@@ -22,12 +22,14 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
22
22
  matched_commands = match_all(data, COMMAND_REGEXP)
23
23
  raise SkipElementError, "Invalid/unsupported syntax for SVG path data" if matched_commands.nil?
24
24
 
25
- matched_commands.each do |matched_command|
26
- command = matched_command[1]
27
- matched_values = match_all(matched_command[2], VALUES_REGEXP)
28
- raise "should be impossible to have invalid inside data, but we ended up here" if matched_values.nil?
29
- values = matched_values.collect {|value| value[1].to_f}
30
- parse_path_command(command, values)
25
+ catch :invalid_command do
26
+ matched_commands.each do |matched_command|
27
+ command = matched_command[1]
28
+ matched_values = match_all(matched_command[2], VALUES_REGEXP)
29
+ raise "should be impossible to have invalid inside data, but we ended up here" if matched_values.nil?
30
+ values = matched_values.collect {|value| value[1].to_f}
31
+ parse_path_command(command, values)
32
+ end
31
33
  end
32
34
  end
33
35
 
@@ -46,8 +48,8 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
46
48
 
47
49
  case upcase_command
48
50
  when 'M' # moveto
49
- x = values.shift
50
- y = values.shift
51
+ x = values.shift or throw :invalid_command
52
+ y = values.shift or throw :invalid_command
51
53
 
52
54
  if relative && @last_point
53
55
  x += @last_point.first
@@ -67,7 +69,7 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
67
69
  when 'L' # lineto
68
70
  while values.any?
69
71
  x = values.shift
70
- y = values.shift
72
+ y = values.shift or throw :invalid_command
71
73
  if relative && @last_point
72
74
  x += @last_point.first
73
75
  y += @last_point.last
@@ -92,7 +94,9 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
92
94
 
93
95
  when 'C' # curveto
94
96
  while values.any?
95
- x1, y1, x2, y2, x, y = (1..6).collect {values.shift}
97
+ x1, y1, x2, y2, x, y = values.shift(6)
98
+ throw :invalid_command unless y
99
+
96
100
  if relative && @last_point
97
101
  x += @last_point.first
98
102
  x1 += @last_point.first
@@ -108,7 +112,9 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
108
112
 
109
113
  when 'S' # shorthand/smooth curveto
110
114
  while values.any?
111
- x2, y2, x, y = (1..4).collect {values.shift}
115
+ x2, y2, x, y = values.shift(4)
116
+ throw :invalid_command unless y
117
+
112
118
  if relative && @last_point
113
119
  x += @last_point.first
114
120
  x2 += @last_point.first
@@ -130,11 +136,13 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
130
136
  when 'Q', 'T' # quadratic curveto
131
137
  while values.any?
132
138
  if shorthand = upcase_command == 'T'
133
- x, y = (1..2).collect {values.shift}
139
+ x, y = values.shift(2)
134
140
  else
135
- x1, y1, x, y = (1..4).collect {values.shift}
141
+ x1, y1, x, y = values.shift(4)
136
142
  end
137
143
 
144
+ throw :invalid_command unless y
145
+
138
146
  if relative && @last_point
139
147
  x += @last_point.first
140
148
  x1 += @last_point.first if x1
@@ -166,7 +174,9 @@ class Prawn::SVG::Elements::Path < Prawn::SVG::Elements::Base
166
174
  return unless @last_point
167
175
 
168
176
  while values.any?
169
- rx, ry, phi, fa, fs, x2, y2 = (1..7).collect {values.shift}
177
+ rx, ry, phi, fa, fs, x2, y2 = values.shift(7)
178
+ throw :invalid_command unless y2
179
+
170
180
  x1, y1 = @last_point
171
181
 
172
182
  return if rx.zero? && ry.zero?
@@ -21,9 +21,11 @@ class Prawn::SVG::Font
21
21
  end
22
22
 
23
23
  def initialize(name, weight, style, font_registry: nil)
24
- name = GENERIC_CSS_FONT_MAPPING.fetch(name, name) # If it's a standard CSS font name, map it to one of the standard PDF fonts.
25
-
26
24
  @font_registry = font_registry
25
+ unless font_registry.installed_fonts.key?(name)
26
+ # map generic font name to one of the built-in PDF fonts if not already mapped
27
+ name = GENERIC_CSS_FONT_MAPPING[name] || name
28
+ end
27
29
  @name = font_registry.correctly_cased_font_name(name) || name
28
30
  @weight = weight
29
31
  @style = style
@@ -1,5 +1,5 @@
1
1
  module Prawn
2
2
  module SVG
3
- VERSION = '0.26.0'
3
+ VERSION = '0.27.0'
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ spec = Gem::Specification.new do |gem|
18
18
  gem.name = "prawn-svg"
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.required_ruby_version = '>= 2.0.0'
21
+ gem.required_ruby_version = '>= 2.1.0'
22
22
 
23
23
  gem.add_runtime_dependency "prawn", ">= 0.11.1", "< 3"
24
24
  gem.add_runtime_dependency "css_parser", "~> 1.3"
@@ -74,12 +74,12 @@ describe Prawn::SVG::Calculators::DocumentSizing do
74
74
  context "when a viewBox is specified" do
75
75
  let(:attributes) { {"viewBox" => "0 0 100 200"} }
76
76
 
77
- it "defaults to 100% width and the width times aspect ratio in height" do
77
+ it "defaults to 100% width and height" do
78
78
  sizing.calculate
79
79
  expect(sizing.viewport_width).to eq 100
80
80
  expect(sizing.viewport_height).to eq 200
81
81
  expect(sizing.output_width).to eq 1200
82
- expect(sizing.output_height).to eq 2400
82
+ expect(sizing.output_height).to eq 800
83
83
  end
84
84
  end
85
85
 
@@ -116,11 +116,11 @@ describe Prawn::SVG::Calculators::DocumentSizing do
116
116
  context "when neither viewBox nor requested width/height specified" do
117
117
  let(:attributes) { {} }
118
118
 
119
- it "defaults to 300x150, because that's what HTML does" do
119
+ it "defaults to 100%" do
120
120
  sizing.calculate
121
121
 
122
- expect(sizing.output_width).to eq 300
123
- expect(sizing.output_height).to eq 150
122
+ expect(sizing.output_width).to eq 1200
123
+ expect(sizing.output_height).to eq 800
124
124
  end
125
125
  end
126
126
  end
@@ -32,7 +32,7 @@ describe Prawn::SVG::Elements::Base do
32
32
  it "appends the relevant calls" do
33
33
  element.process
34
34
  expect(element.base_calls).to eq [
35
- ["rotate", [-90.0, {origin: [0, 150.0]}], [
35
+ ["rotate", [-90.0, {origin: [0, 600.0]}], [
36
36
  ["transparent", [0.5, 1], [
37
37
  ["fill_color", ["ff0000"], []],
38
38
  ["stroke_color", ["0000ff"], []],
@@ -8,12 +8,13 @@ RSpec.describe Prawn::SVG::Elements::Line do
8
8
  end
9
9
 
10
10
  context "with attributes specified" do
11
- let(:svg) { '<line x1="5" y1="10" x2="15" y2="20" />' }
11
+ let(:svg) { '<line x1="5" y1="10" x2="15" y2="20" stroke="black" />' }
12
12
 
13
13
  it "renders the line" do
14
14
  subject.process
15
15
  expect(subject.base_calls).to eq [
16
- ["fill", [], [
16
+ ["stroke_color", ["000000"], []],
17
+ ["stroke", [], [
17
18
  ["move_to", [[5.0, 590.0]], []],
18
19
  ["line_to", [[15.0, 580.0]], []]]
19
20
  ]
@@ -21,17 +22,34 @@ RSpec.describe Prawn::SVG::Elements::Line do
21
22
  end
22
23
  end
23
24
 
24
- context "with no attributes specified" do
25
+ context "with no attributes nor stroke specified" do
25
26
  let(:svg) { '<line />' }
26
27
 
27
- it "draws a line from 0,0 to 0,0" do
28
+ it "outlines a path from 0,0 to 0,0" do
28
29
  subject.process
29
30
  expect(subject.base_calls).to eq [
30
- ["fill", [], [
31
+ ["end_path", [], [
31
32
  ["move_to", [[0, 600]], []],
32
33
  ["line_to", [[0, 600]], []]]
33
34
  ]
34
35
  ]
35
36
  end
36
37
  end
38
+
39
+ context "with a fill specified" do
40
+ let(:svg) { '<line x1="0" y1="0" x2="15" y2="20" style="stroke: red; fill: blue;" />' }
41
+
42
+ it "ignores the fill" do
43
+ subject.process
44
+
45
+ expect(subject.base_calls).to eq [
46
+ ["fill_color", ["0000ff"], []],
47
+ ["stroke_color", ["ff0000"], []],
48
+ ["stroke", [], [
49
+ ["move_to", [[0, 600]], []],
50
+ ["line_to", [[15.0, 580.0]], []]]
51
+ ]
52
+ ]
53
+ end
54
+ end
37
55
  end
@@ -12,7 +12,7 @@ RSpec.describe Prawn::SVG::Elements::Marker do
12
12
  <path d="M 0 0 L 10 5 L 0 10 z" />
13
13
  </marker>
14
14
 
15
- <line x2="10" y2="10" stroke-width="100" />
15
+ <line x2="10" y2="10" stroke="black" stroke-width="100" />
16
16
  </svg>
17
17
  SVG
18
18
  end
@@ -54,8 +54,9 @@ RSpec.describe Prawn::SVG::Elements::Marker do
54
54
  # in section 11.6.3.
55
55
 
56
56
  expect(line_element.base_calls).to eq [
57
+ ["stroke_color", ["000000"], []],
57
58
  ["line_width", [100.0], []],
58
- ["fill", [], [
59
+ ["stroke", [], [
59
60
  ["move_to", [[0.0, 600.0]], []],
60
61
  ["line_to", [[10.0, 590.0]], []]
61
62
  ]
@@ -69,7 +70,7 @@ RSpec.describe Prawn::SVG::Elements::Marker do
69
70
  ["clip", [], []],
70
71
  ["transformation_matrix", [0.3, 0, 0, 0.3, 0, 0], []],
71
72
  ["transparent", [1.0, 1.0], [
72
- ["fill_color", ["000000"], []],
73
+ ["stroke_color", ["000000"], []],
73
74
  ["line_width", [100.0], []],
74
75
  ["cap_style", [:butt], []],
75
76
  ["undash", [], []],
@@ -74,6 +74,168 @@ describe Prawn::SVG::Elements::Path do
74
74
  end
75
75
  end
76
76
 
77
+ context "when given an M path" do
78
+ subject { path.parse; path.commands }
79
+
80
+ context "with typical arguments" do
81
+ let(:d) { "M 100 200 M 200 300 m 10 20" }
82
+
83
+ it "issues a move command" do
84
+ expect(subject).to eq [
85
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0]),
86
+ Prawn::SVG::Elements::Path::Move.new([200.0, 300.0]),
87
+ Prawn::SVG::Elements::Path::Move.new([210.0, 320.0]),
88
+ ]
89
+ end
90
+ end
91
+
92
+ context "with only one argument" do
93
+ let(:d) { "M 100 200 M 100" }
94
+
95
+ it "bails out" do
96
+ expect(subject).to eq [
97
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
98
+ ]
99
+ end
100
+ end
101
+
102
+ context "with no arguments" do
103
+ let(:d) { "M 100 200 M" }
104
+
105
+ it "bails out" do
106
+ expect(subject).to eq [
107
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
108
+ ]
109
+ end
110
+ end
111
+ end
112
+
113
+ context "when given an L path" do
114
+ subject { path.parse; path.commands }
115
+
116
+ context "with typical arguments" do
117
+ let(:d) { "M 100 200 L 200 300 l 10 20" }
118
+
119
+ it "issues a line command" do
120
+ expect(subject).to eq [
121
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0]),
122
+ Prawn::SVG::Elements::Path::Line.new([200.0, 300.0]),
123
+ Prawn::SVG::Elements::Path::Line.new([210.0, 320.0]),
124
+ ]
125
+ end
126
+ end
127
+
128
+ context "with only one argument" do
129
+ let(:d) { "M 100 200 L 100" }
130
+
131
+ it "bails out" do
132
+ expect(subject).to eq [
133
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
134
+ ]
135
+ end
136
+ end
137
+ end
138
+
139
+ context "when given a C path" do
140
+ subject { path.parse; path.commands }
141
+
142
+ context "with typical arguments" do
143
+ let(:d) { "M 100 200 C 10 20 30 40 200 300" }
144
+
145
+ it "issues a curve command" do
146
+ expect(subject).to eq [
147
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0]),
148
+ Prawn::SVG::Elements::Path::Curve.new([200.0, 300.0], [10, 20], [30, 40]),
149
+ ]
150
+ end
151
+ end
152
+
153
+ context "with incomplete arguments" do
154
+ let(:d) { "M 100 200 C 10 20 30 40 50" }
155
+
156
+ it "bails out" do
157
+ expect(subject).to eq [
158
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
159
+ ]
160
+ end
161
+ end
162
+ end
163
+
164
+ context "when given an S path" do
165
+ subject { path.parse; path.commands }
166
+
167
+ context "with typical arguments" do
168
+ let(:d) { "M 100 200 S 30 40 200 300" }
169
+
170
+ it "issues a curve command" do
171
+ expect(subject).to eq [
172
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0]),
173
+ Prawn::SVG::Elements::Path::Curve.new([200.0, 300.0], [100, 200], [30, 40]),
174
+ ]
175
+ end
176
+ end
177
+
178
+ context "with incomplete arguments" do
179
+ let(:d) { "M 100 200 S 30 40 50" }
180
+
181
+ it "bails out" do
182
+ expect(subject).to eq [
183
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
184
+ ]
185
+ end
186
+ end
187
+ end
188
+
189
+ context "when given a Q path" do
190
+ subject { path.parse; path.commands }
191
+
192
+ context "with typical arguments" do
193
+ let(:d) { "M 0 0 Q 600 300 300 600" }
194
+
195
+ it "issues a curve command" do
196
+ expect(subject).to eq [
197
+ Prawn::SVG::Elements::Path::Move.new([0, 0]),
198
+ Prawn::SVG::Elements::Path::Curve.new([300.0, 600.0], [400, 200], [500, 400])
199
+ ]
200
+ end
201
+ end
202
+
203
+ context "with incomplete arguments" do
204
+ let(:d) { "M 100 200 Q 30 40 50" }
205
+
206
+ it "bails out" do
207
+ expect(subject).to eq [
208
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
209
+ ]
210
+ end
211
+ end
212
+ end
213
+
214
+ context "when given a T path" do
215
+ subject { path.parse; path.commands }
216
+
217
+ context "with typical arguments" do
218
+ let(:d) { "M 0 0 T 300 600" }
219
+
220
+ it "issues a curve command" do
221
+ expect(subject).to eq [
222
+ Prawn::SVG::Elements::Path::Move.new([0, 0]),
223
+ Prawn::SVG::Elements::Path::Curve.new([300.0, 600.0], [0, 0], [100, 200])
224
+ ]
225
+ end
226
+ end
227
+
228
+ context "with incomplete arguments" do
229
+ let(:d) { "M 100 200 T 30" }
230
+
231
+ it "bails out" do
232
+ expect(subject).to eq [
233
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
234
+ ]
235
+ end
236
+ end
237
+ end
238
+
77
239
  context "when given an A path" do
78
240
  subject { path.parse; path.commands }
79
241
 
@@ -98,7 +260,7 @@ describe Prawn::SVG::Elements::Path do
98
260
  ]
99
261
  end
100
262
  end
101
-
263
+
102
264
  context "with an rx of 0" do
103
265
  let(:d) { "M 100 200 A 0 10 0 0 1 200 200" }
104
266
 
@@ -120,5 +282,15 @@ describe Prawn::SVG::Elements::Path do
120
282
  ]
121
283
  end
122
284
  end
285
+
286
+ context "with incomplete arguments" do
287
+ let(:d) { "M 100 200 A 10 20 30 L 10 20" }
288
+
289
+ it "bails out" do
290
+ expect(subject).to eq [
291
+ Prawn::SVG::Elements::Path::Move.new([100.0, 200.0])
292
+ ]
293
+ end
294
+ end
123
295
  end
124
296
  end
@@ -65,7 +65,7 @@ Even more
65
65
 
66
66
  it "should inherit text-anchor from parent element" do
67
67
  element.process
68
- expect(element.calls.flatten).to include(:size => 12.0, :style => :normal, :text_anchor => "middle", :at => [50.0, 136.0], :offset => [0,0])
68
+ expect(element.calls.flatten).to include(:size => 12.0, :style => :normal, :text_anchor => "middle", :at => [50.0, 586.0], :offset => [0,0])
69
69
  end
70
70
  end
71
71
 
@@ -1,4 +1,17 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
3
  describe Prawn::SVG::Font do
4
+ describe "#initialize" do
5
+ it "maps generic font name to built-in font" do
6
+ font_registry = Prawn::SVG::FontRegistry.new({})
7
+ font = Prawn::SVG::Font.new('sans-serif', :normal, :normal, font_registry: font_registry)
8
+ font.name.should == 'Helvetica'
9
+ end
10
+
11
+ it "preserves generic font name if mapped" do
12
+ font_registry = Prawn::SVG::FontRegistry.new('sans-serif' => { normal: 'Times-Roman' })
13
+ font = Prawn::SVG::Font.new('sans-serif', :normal, :normal, font_registry: font_registry)
14
+ font.name.should == 'sans-serif'
15
+ end
16
+ end
4
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn-svg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Nesbitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-21 00:00:00.000000000 Z
11
+ date: 2017-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prawn
@@ -236,7 +236,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
236
236
  requirements:
237
237
  - - ">="
238
238
  - !ruby/object:Gem::Version
239
- version: 2.0.0
239
+ version: 2.1.0
240
240
  required_rubygems_version: !ruby/object:Gem::Requirement
241
241
  requirements:
242
242
  - - ">="