prawn-svg 0.9.1.1 → 0.9.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/prawn/svg/svg.rb +12 -5
- metadata +2 -2
data/lib/prawn/svg/svg.rb
CHANGED
@@ -135,11 +135,14 @@ class Prawn::Svg
|
|
135
135
|
calls << ['text_box', [element.text, opts], []]
|
136
136
|
|
137
137
|
when 'line'
|
138
|
+
return unless attrs['x1'] && attrs['y1'] && attrs['x2'] && attrs['y2']
|
138
139
|
calls << ['line', [x(attrs['x1']), y(attrs['y1']), x(attrs['x2']), y(attrs['y2'])], []]
|
139
140
|
|
140
141
|
when 'polyline'
|
142
|
+
return unless attrs['points']
|
141
143
|
points = attrs['points'].split(/\s+/)
|
142
|
-
|
144
|
+
return unless base_point = points.shift
|
145
|
+
x, y = base_point.split(",")
|
143
146
|
calls << ['move_to', [x(x), y(y)], []]
|
144
147
|
calls << ['stroke', [], []]
|
145
148
|
calls = calls.last.last
|
@@ -149,6 +152,7 @@ class Prawn::Svg
|
|
149
152
|
end
|
150
153
|
|
151
154
|
when 'polygon'
|
155
|
+
return unless attrs['points']
|
152
156
|
points = attrs['points'].split(/\s+/).collect do |point|
|
153
157
|
x, y = point.split(",")
|
154
158
|
[x(x), y(y)]
|
@@ -156,16 +160,19 @@ class Prawn::Svg
|
|
156
160
|
calls << ["polygon", points, []]
|
157
161
|
|
158
162
|
when 'circle'
|
163
|
+
return unless attrs['r']
|
159
164
|
calls << ["circle_at",
|
160
165
|
[[x(attrs['cx'] || "0"), y(attrs['cy'] || "0")], {:radius => distance(attrs['r'])}],
|
161
166
|
[]]
|
162
167
|
|
163
168
|
when 'ellipse'
|
169
|
+
return unless attrs['rx'] && attrs['ry']
|
164
170
|
calls << ["ellipse_at",
|
165
171
|
[[x(attrs['cx'] || "0"), y(attrs['cy'] || "0")], distance(attrs['rx']), distance(attrs['ry'])],
|
166
172
|
[]]
|
167
173
|
|
168
174
|
when 'rect'
|
175
|
+
return unless attrs['x'] && attrs['y'] && attrs['width'] && attrs['height']
|
169
176
|
radius = distance(attrs['rx'] || attrs['ry'])
|
170
177
|
args = [[x(attrs['x']), y(attrs['y'])], distance(attrs['width']), distance(attrs['height'])]
|
171
178
|
if radius
|
@@ -280,18 +287,18 @@ class Prawn::Svg
|
|
280
287
|
end
|
281
288
|
|
282
289
|
def x(value)
|
283
|
-
(
|
290
|
+
(points(value) - @x_offset) * scale
|
284
291
|
end
|
285
292
|
|
286
293
|
def y(value)
|
287
|
-
(@actual_height - (
|
294
|
+
(@actual_height - (points(value) - @y_offset)) * scale
|
288
295
|
end
|
289
296
|
|
290
297
|
def distance(value)
|
291
|
-
value && (
|
298
|
+
value && (points(value) * scale)
|
292
299
|
end
|
293
300
|
|
294
|
-
def
|
301
|
+
def points(value)
|
295
302
|
if value.is_a?(String) && match = value.match(/\d(cm|dm|ft|in|m|mm|yd)$/)
|
296
303
|
send("#{match[1]}2pt", value.to_f)
|
297
304
|
else
|