prawn-svg 0.26.0 → 0.27.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 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
  - - ">="