prawn-svg 0.21.0 → 0.22.1
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/.travis.yml +6 -0
- data/README.md +11 -4
- data/lib/prawn-svg.rb +9 -6
- data/lib/prawn/svg/attributes.rb +6 -0
- data/lib/prawn/svg/attributes/clip_path.rb +17 -0
- data/lib/prawn/svg/attributes/display.rb +5 -0
- data/lib/prawn/svg/attributes/font.rb +38 -0
- data/lib/prawn/svg/attributes/opacity.rb +15 -0
- data/lib/prawn/svg/attributes/stroke.rb +35 -0
- data/lib/prawn/svg/attributes/transform.rb +50 -0
- data/lib/prawn/svg/calculators/aspect_ratio.rb +1 -1
- data/lib/prawn/svg/calculators/document_sizing.rb +2 -2
- data/lib/prawn/svg/calculators/pixels.rb +1 -1
- data/lib/prawn/svg/color.rb +44 -14
- data/lib/prawn/svg/document.rb +6 -5
- data/lib/prawn/svg/elements.rb +33 -0
- data/lib/prawn/svg/elements/base.rb +228 -0
- data/lib/prawn/svg/elements/circle.rb +25 -0
- data/lib/prawn/svg/elements/container.rb +15 -0
- data/lib/prawn/svg/elements/ellipse.rb +23 -0
- data/lib/prawn/svg/elements/gradient.rb +117 -0
- data/lib/prawn/svg/elements/ignored.rb +5 -0
- data/lib/prawn/svg/elements/image.rb +85 -0
- data/lib/prawn/svg/elements/line.rb +16 -0
- data/lib/prawn/svg/elements/path.rb +405 -0
- data/lib/prawn/svg/elements/polygon.rb +17 -0
- data/lib/prawn/svg/elements/polyline.rb +22 -0
- data/lib/prawn/svg/elements/rect.rb +33 -0
- data/lib/prawn/svg/elements/root.rb +9 -0
- data/lib/prawn/svg/elements/style.rb +10 -0
- data/lib/prawn/svg/elements/text.rb +87 -0
- data/lib/prawn/svg/elements/use.rb +29 -0
- data/lib/prawn/svg/extension.rb +2 -2
- data/lib/prawn/svg/font.rb +3 -3
- data/lib/prawn/svg/interface.rb +12 -5
- data/lib/prawn/svg/url_loader.rb +1 -1
- data/lib/prawn/svg/version.rb +2 -2
- data/prawn-svg.gemspec +3 -3
- data/spec/integration_spec.rb +59 -2
- data/spec/prawn/svg/attributes/font_spec.rb +49 -0
- data/spec/prawn/svg/attributes/transform_spec.rb +56 -0
- data/spec/prawn/svg/calculators/aspect_ratio_spec.rb +2 -2
- data/spec/prawn/svg/calculators/document_sizing_spec.rb +3 -3
- data/spec/prawn/svg/color_spec.rb +36 -15
- data/spec/prawn/svg/document_spec.rb +4 -4
- data/spec/prawn/svg/elements/base_spec.rb +125 -0
- data/spec/prawn/svg/elements/gradient_spec.rb +61 -0
- data/spec/prawn/svg/elements/path_spec.rb +123 -0
- data/spec/prawn/svg/elements/style_spec.rb +23 -0
- data/spec/prawn/svg/{parser → elements}/text_spec.rb +7 -8
- data/spec/prawn/svg/font_spec.rb +12 -12
- data/spec/prawn/svg/interface_spec.rb +7 -7
- data/spec/prawn/svg/url_loader_spec.rb +2 -2
- data/spec/sample_svg/gradients.svg +40 -0
- data/spec/sample_svg/rect02.svg +8 -11
- data/spec/spec_helper.rb +1 -1
- metadata +46 -18
- data/lib/prawn/svg/element.rb +0 -304
- data/lib/prawn/svg/parser.rb +0 -268
- data/lib/prawn/svg/parser/image.rb +0 -81
- data/lib/prawn/svg/parser/path.rb +0 -392
- data/lib/prawn/svg/parser/text.rb +0 -80
- data/spec/prawn/svg/element_spec.rb +0 -127
- data/spec/prawn/svg/parser/path_spec.rb +0 -89
- data/spec/prawn/svg/parser_spec.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d93ba261ddc059e43122549f72a3e3daa676171f
|
4
|
+
data.tar.gz: d0497cb84295f9202f84c62b5db79f9d29608019
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acf2f6d51a5fda648bed5efd25ba85de91887867badccde3ce4d713cebddcc851280d524ba3006d7014651cd73ccf8c5a54185038a41dfa37612b522cb99ea17
|
7
|
+
data.tar.gz: 2dc23eac65fc5be3299015309d8e2f94d5598ba016f7776090f886fe9bd4551ae90bd129252428b65b617bf8472ca4adcf9cdc5760f3e5f3f635793415d09622
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# prawn-svg
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/prawn-svg)
|
4
|
+
[](https://travis-ci.org/mogest/prawn-svg)
|
5
|
+
|
3
6
|
An SVG renderer for the Prawn PDF library.
|
4
7
|
|
5
8
|
This will take an SVG file as input and render it into your PDF. Find out more about the Prawn PDF library at:
|
6
9
|
|
7
10
|
http://wiki.github.com/sandal/prawn/
|
8
11
|
|
9
|
-
prawn-svg is compatible with all versions of Prawn from 0.
|
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.
|
10
14
|
|
11
15
|
## Using prawn-svg
|
12
16
|
|
@@ -49,10 +53,13 @@ prawn-svg supports most but not all of the full SVG 1.1 specification. It curre
|
|
49
53
|
|
50
54
|
- <tt><style></tt> plus <tt>id</tt>, <tt>class</tt> and <tt>style</tt> attributes (see CSS section below)
|
51
55
|
|
52
|
-
- <tt><image></tt> with <tt>http:</tt>, <tt>https:</tt> and <tt>data:image
|
56
|
+
- <tt><image></tt> with <tt>http:</tt>, <tt>https:</tt> and <tt>data:image/\*;base64</tt> schemes
|
53
57
|
|
54
58
|
- <tt><clipPath></tt>
|
55
59
|
|
60
|
+
- <tt><linearGradient></tt> but only with Prawn 2.0.4+. gradientTransform, spreadMethod and stop-opacity are
|
61
|
+
unimplemented.
|
62
|
+
|
56
63
|
- attributes/styles: <tt>fill</tt>, <tt>stroke</tt>, <tt>stroke-width</tt>, <tt>stroke-linecap</tt>, <tt>stroke-dasharray</tt>, <tt>opacity</tt>, <tt>fill-opacity</tt>, <tt>stroke-opacity</tt>, <tt>transform</tt>, <tt>clip-path</tt>, <tt>display</tt>
|
57
64
|
|
58
65
|
- the <tt>viewBox</tt> attribute on the <tt><svg></tt> tag
|
@@ -73,7 +80,7 @@ prawn-svg uses the css_parser gem to parse CSS <tt><style></tt> blocks. I
|
|
73
80
|
|
74
81
|
## Not supported
|
75
82
|
|
76
|
-
prawn-svg does not support external <tt>url()</tt> references, measurements in <tt>en</tt> or <tt>em</tt>, sub-viewports, gradients
|
83
|
+
prawn-svg does not support external <tt>url()</tt> references, measurements in <tt>en</tt> or <tt>em</tt>, sub-viewports, radial gradients, patterns or markers.
|
77
84
|
|
78
85
|
## Configuration
|
79
86
|
|
@@ -83,7 +90,7 @@ By default, prawn-svg has a fonts path of <tt>["/Library/Fonts", "/System/Librar
|
|
83
90
|
Mac OS X and Debian Linux users. You can add to the font path:
|
84
91
|
|
85
92
|
```ruby
|
86
|
-
Prawn::
|
93
|
+
Prawn::SVG::Interface.font_path << "/my/font/directory"
|
87
94
|
```
|
88
95
|
|
89
96
|
|
data/lib/prawn-svg.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
1
3
|
require 'prawn'
|
2
4
|
require 'prawn/svg/version'
|
3
5
|
|
@@ -6,14 +8,15 @@ require 'prawn/svg/calculators/document_sizing'
|
|
6
8
|
require 'prawn/svg/calculators/pixels'
|
7
9
|
require 'prawn/svg/url_loader'
|
8
10
|
require 'prawn/svg/color'
|
11
|
+
require 'prawn/svg/attributes'
|
12
|
+
require 'prawn/svg/elements'
|
9
13
|
require 'prawn/svg/extension'
|
10
14
|
require 'prawn/svg/interface'
|
11
15
|
require 'prawn/svg/font'
|
12
16
|
require 'prawn/svg/document'
|
13
|
-
require 'prawn/svg/element'
|
14
|
-
require 'prawn/svg/parser'
|
15
|
-
require 'prawn/svg/parser/path'
|
16
|
-
require 'prawn/svg/parser/text'
|
17
|
-
require 'prawn/svg/parser/image'
|
18
17
|
|
19
|
-
|
18
|
+
module Prawn
|
19
|
+
Svg = SVG # backwards compatibility
|
20
|
+
end
|
21
|
+
|
22
|
+
Prawn::Document.extensions << Prawn::SVG::Extension
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Prawn::SVG::Attributes::ClipPath
|
2
|
+
def parse_clip_path_attribute_and_call
|
3
|
+
return unless clip_path = attributes['clip-path']
|
4
|
+
|
5
|
+
if (matches = clip_path.strip.match(/\Aurl\(#(.*)\)\z/)).nil?
|
6
|
+
document.warnings << "Only clip-path attributes with the form 'url(#xxx)' are supported"
|
7
|
+
elsif (clip_path_element = @document.elements_by_id[matches[1]]).nil?
|
8
|
+
document.warnings << "clip-path ID '#{matches[1]}' not defined"
|
9
|
+
elsif clip_path_element.source.name != "clipPath"
|
10
|
+
document.warnings << "clip-path ID '#{matches[1]}' does not point to a clipPath tag"
|
11
|
+
else
|
12
|
+
add_call_and_enter 'save_graphics_state'
|
13
|
+
add_calls_from_element clip_path_element
|
14
|
+
add_call "clip"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Prawn::SVG::Attributes::Font
|
2
|
+
def parse_font_attributes_and_call
|
3
|
+
if size = attributes['font-size']
|
4
|
+
@state[:font_size] = size.to_f
|
5
|
+
end
|
6
|
+
if weight = attributes['font-weight']
|
7
|
+
font_updated = true
|
8
|
+
@state[:font_weight] = Prawn::SVG::Font.weight_for_css_font_weight(weight)
|
9
|
+
end
|
10
|
+
if style = attributes['font-style']
|
11
|
+
font_updated = true
|
12
|
+
@state[:font_style] = style == 'italic' ? :italic : nil
|
13
|
+
end
|
14
|
+
if (family = attributes['font-family']) && family.strip != ""
|
15
|
+
font_updated = true
|
16
|
+
@state[:font_family] = family
|
17
|
+
end
|
18
|
+
if (anchor = attributes['text-anchor'])
|
19
|
+
@state[:text_anchor] = anchor
|
20
|
+
end
|
21
|
+
|
22
|
+
if @state[:font_family] && font_updated
|
23
|
+
usable_font_families = [@state[:font_family], document.fallback_font_name]
|
24
|
+
|
25
|
+
font_used = usable_font_families.compact.detect do |name|
|
26
|
+
if font = Prawn::SVG::Font.load(name, @state[:font_weight], @state[:font_style])
|
27
|
+
@state[:font_subfamily] = font.subfamily
|
28
|
+
add_call_and_enter 'font', font.name, :style => @state[:font_subfamily]
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if font_used.nil?
|
34
|
+
warnings << "Font family '#{@state[:font_family]}' style '#{@state[:font_style] || 'normal'}' is not a known font, and the fallback font could not be found."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Prawn::SVG::Attributes::Opacity
|
2
|
+
def parse_opacity_attributes_and_call
|
3
|
+
# We can't do nested opacities quite like the SVG requires, but this is close enough.
|
4
|
+
fill_opacity = stroke_opacity = clamp(attributes['opacity'].to_f, 0, 1) if attributes['opacity']
|
5
|
+
fill_opacity = clamp(attributes['fill-opacity'].to_f, 0, 1) if attributes['fill-opacity']
|
6
|
+
stroke_opacity = clamp(attributes['stroke-opacity'].to_f, 0, 1) if attributes['stroke-opacity']
|
7
|
+
|
8
|
+
if fill_opacity || stroke_opacity
|
9
|
+
state[:fill_opacity] = (state[:fill_opacity] || 1) * (fill_opacity || 1)
|
10
|
+
state[:stroke_opacity] = (state[:stroke_opacity] || 1) * (stroke_opacity || 1)
|
11
|
+
|
12
|
+
add_call_and_enter 'transparent', state[:fill_opacity], state[:stroke_opacity]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Prawn::SVG::Attributes::Stroke
|
2
|
+
CAP_STYLE_TRANSLATIONS = {"butt" => :butt, "round" => :round, "square" => :projecting_square}
|
3
|
+
|
4
|
+
def parse_stroke_attributes_and_call
|
5
|
+
if width = attributes['stroke-width']
|
6
|
+
add_call('line_width', distance(width))
|
7
|
+
end
|
8
|
+
|
9
|
+
if (linecap = attribute_value_as_keyword('stroke-linecap')) && linecap != 'inherit'
|
10
|
+
add_call('cap_style', CAP_STYLE_TRANSLATIONS.fetch(linecap, :butt))
|
11
|
+
end
|
12
|
+
|
13
|
+
if dasharray = attribute_value_as_keyword('stroke-dasharray')
|
14
|
+
case dasharray
|
15
|
+
when 'inherit'
|
16
|
+
# don't do anything
|
17
|
+
when 'none'
|
18
|
+
add_call('undash')
|
19
|
+
else
|
20
|
+
array = dasharray.split(Prawn::SVG::Elements::COMMA_WSP_REGEXP)
|
21
|
+
array *= 2 if array.length % 2 == 1
|
22
|
+
number_array = array.map {|value| distance(value)}
|
23
|
+
|
24
|
+
if number_array.any? {|number| number < 0}
|
25
|
+
@document.warnings << "stroke-dasharray cannot have negative numbers; treating as 'none'"
|
26
|
+
add_call('undash')
|
27
|
+
elsif number_array.inject(0) {|a, b| a + b} == 0
|
28
|
+
add_call('undash')
|
29
|
+
else
|
30
|
+
add_call('dash', number_array)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Prawn::SVG::Attributes::Transform
|
2
|
+
def parse_transform_attribute_and_call
|
3
|
+
return unless transform = attributes['transform']
|
4
|
+
|
5
|
+
parse_css_method_calls(transform).each do |name, arguments|
|
6
|
+
case name
|
7
|
+
when 'translate'
|
8
|
+
x, y = arguments
|
9
|
+
add_call_and_enter name, distance(x.to_f, :x), -distance(y.to_f, :y)
|
10
|
+
|
11
|
+
when 'rotate'
|
12
|
+
r, x, y = arguments.collect {|a| a.to_f}
|
13
|
+
case arguments.length
|
14
|
+
when 1
|
15
|
+
add_call_and_enter name, -r, :origin => [0, y('0')]
|
16
|
+
when 3
|
17
|
+
add_call_and_enter name, -r, :origin => [x(x), y(y)]
|
18
|
+
else
|
19
|
+
warnings << "transform 'rotate' must have either one or three arguments"
|
20
|
+
end
|
21
|
+
|
22
|
+
when 'scale'
|
23
|
+
x_scale = arguments[0].to_f
|
24
|
+
y_scale = (arguments[1] || x_scale).to_f
|
25
|
+
add_call_and_enter "transformation_matrix", x_scale, 0, 0, y_scale, 0, 0
|
26
|
+
|
27
|
+
when 'matrix'
|
28
|
+
if arguments.length != 6
|
29
|
+
warnings << "transform 'matrix' must have six arguments"
|
30
|
+
else
|
31
|
+
a, b, c, d, e, f = arguments.collect {|argument| argument.to_f}
|
32
|
+
add_call_and_enter "transformation_matrix", a, -b, -c, d, distance(e, :x), -distance(f, :y)
|
33
|
+
end
|
34
|
+
|
35
|
+
else
|
36
|
+
warnings << "Unknown transformation '#{name}'; ignoring"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def parse_css_method_calls(string)
|
44
|
+
string.scan(/\s*(\w+)\(([^)]+)\)\s*/).collect do |call|
|
45
|
+
name, argument_string = call
|
46
|
+
arguments = argument_string.strip.split(/\s*[,\s]\s*/)
|
47
|
+
[name, arguments]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Prawn::
|
1
|
+
module Prawn::SVG::Calculators
|
2
2
|
class DocumentSizing
|
3
3
|
DEFAULT_WIDTH = 300
|
4
4
|
DEFAULT_HEIGHT = 150
|
@@ -34,7 +34,7 @@ module Prawn::Svg::Calculators
|
|
34
34
|
@output_height = Pixels.to_pixels(@document_height || @requested_height, container_height)
|
35
35
|
|
36
36
|
if @view_box
|
37
|
-
values = @view_box.strip.split(Prawn::
|
37
|
+
values = @view_box.strip.split(Prawn::SVG::Elements::COMMA_WSP_REGEXP)
|
38
38
|
@x_offset, @y_offset, @viewport_width, @viewport_height = values.map {|value| value.to_f}
|
39
39
|
@x_offset = -@x_offset
|
40
40
|
|
data/lib/prawn/svg/color.rb
CHANGED
@@ -1,5 +1,17 @@
|
|
1
|
-
class Prawn::
|
2
|
-
|
1
|
+
class Prawn::SVG::Color
|
2
|
+
class Hex
|
3
|
+
attr_reader :value
|
4
|
+
|
5
|
+
def initialize(value)
|
6
|
+
@value = value
|
7
|
+
end
|
8
|
+
|
9
|
+
def ==(other)
|
10
|
+
value == other.value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
DEFAULT_COLOR = Hex.new("000000")
|
3
15
|
|
4
16
|
HTML_COLORS = {
|
5
17
|
'aliceblue' => 'f0f8ff',
|
@@ -153,34 +165,52 @@ class Prawn::Svg::Color
|
|
153
165
|
|
154
166
|
RGB_VALUE_REGEXP = "\s*(-?[0-9.]+%?)\s*"
|
155
167
|
RGB_REGEXP = /\Argb\(#{RGB_VALUE_REGEXP},#{RGB_VALUE_REGEXP},#{RGB_VALUE_REGEXP}\)\z/i
|
156
|
-
URL_REGEXP = /\Aurl\([^)]
|
168
|
+
URL_REGEXP = /\Aurl\(([^)]*)\)\z/i
|
157
169
|
|
158
|
-
def self.
|
170
|
+
def self.parse(color_string, gradients = nil)
|
159
171
|
url_specified = false
|
160
172
|
|
161
|
-
|
173
|
+
components = color_string.to_s.strip.scan(/([^(\s]+(\([^)]*\))?)/)
|
174
|
+
|
175
|
+
result = components.map do |color, *_|
|
162
176
|
if m = color.match(/\A#([0-9a-f])([0-9a-f])([0-9a-f])\z/i)
|
163
|
-
|
177
|
+
Hex.new("#{m[1] * 2}#{m[2] * 2}#{m[3] * 2}")
|
178
|
+
|
164
179
|
elsif color.match(/\A#[0-9a-f]{6}\z/i)
|
165
|
-
|
180
|
+
Hex.new(color[1..6])
|
181
|
+
|
166
182
|
elsif hex = HTML_COLORS[color.downcase]
|
167
|
-
|
183
|
+
Hex.new(hex)
|
184
|
+
|
168
185
|
elsif m = color.match(RGB_REGEXP)
|
169
|
-
|
186
|
+
hex = (1..3).collect do |n|
|
170
187
|
value = m[n].to_f
|
171
188
|
value *= 2.55 if m[n][-1..-1] == '%'
|
172
189
|
"%02x" % clamp(value.round, 0, 255)
|
173
190
|
end.join
|
174
|
-
|
191
|
+
|
192
|
+
Hex.new(hex)
|
193
|
+
|
194
|
+
elsif matches = color.match(URL_REGEXP)
|
175
195
|
url_specified = true
|
176
|
-
|
196
|
+
url = matches[1]
|
197
|
+
if url[0] == "#" && gradients && gradient = gradients[url[1..-1]]
|
198
|
+
gradient
|
199
|
+
end
|
177
200
|
end
|
178
201
|
end
|
179
202
|
|
180
|
-
#
|
181
|
-
|
203
|
+
# Generally, we default to black if the colour was unparseable.
|
204
|
+
# http://www.w3.org/TR/SVG/painting.html section 11.2 says if a URL was
|
205
|
+
# supplied without a fallback, that's an error.
|
206
|
+
result << DEFAULT_COLOR unless url_specified
|
207
|
+
|
208
|
+
result.compact
|
209
|
+
end
|
182
210
|
|
183
|
-
|
211
|
+
def self.color_to_hex(color)
|
212
|
+
result = parse(color).detect {|result| result.is_a?(Hex)}
|
213
|
+
result.value if result
|
184
214
|
end
|
185
215
|
|
186
216
|
protected
|
data/lib/prawn/svg/document.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class Prawn::
|
1
|
+
class Prawn::SVG::Document
|
2
2
|
begin
|
3
3
|
require 'css_parser'
|
4
4
|
CSS_PARSER_LOADED = true
|
@@ -15,7 +15,7 @@ class Prawn::Svg::Document
|
|
15
15
|
attr_reader :root,
|
16
16
|
:sizing,
|
17
17
|
:cache_images, :fallback_font_name,
|
18
|
-
:css_parser, :elements_by_id
|
18
|
+
:css_parser, :elements_by_id, :gradients
|
19
19
|
|
20
20
|
def initialize(data, bounds, options)
|
21
21
|
@css_parser = CssParser::Parser.new if CSS_PARSER_LOADED
|
@@ -24,10 +24,11 @@ class Prawn::Svg::Document
|
|
24
24
|
@warnings = []
|
25
25
|
@options = options
|
26
26
|
@elements_by_id = {}
|
27
|
+
@gradients = {}
|
27
28
|
@cache_images = options[:cache_images]
|
28
29
|
@fallback_font_name = options.fetch(:fallback_font_name, DEFAULT_FALLBACK_FONT_NAME)
|
29
30
|
|
30
|
-
@sizing = Prawn::
|
31
|
+
@sizing = Prawn::SVG::Calculators::DocumentSizing.new(bounds, @root.attributes)
|
31
32
|
sizing.requested_width = options[:width]
|
32
33
|
sizing.requested_height = options[:height]
|
33
34
|
sizing.calculate
|
@@ -50,10 +51,10 @@ class Prawn::Svg::Document
|
|
50
51
|
end
|
51
52
|
|
52
53
|
def points(value, axis = nil)
|
53
|
-
Prawn::
|
54
|
+
Prawn::SVG::Calculators::Pixels.to_pixels(value, @axis_to_size.fetch(axis, sizing.viewport_diagonal))
|
54
55
|
end
|
55
56
|
|
56
57
|
def url_loader
|
57
|
-
@url_loader ||= Prawn::
|
58
|
+
@url_loader ||= Prawn::SVG::UrlLoader.new(:enable_cache => cache_images)
|
58
59
|
end
|
59
60
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Prawn::SVG::Elements
|
2
|
+
COMMA_WSP_REGEXP = /(?:\s+,?\s*|,\s*)/
|
3
|
+
end
|
4
|
+
|
5
|
+
%w(base root container style text line polyline polygon circle ellipse rect path use image gradient ignored).each do |filename|
|
6
|
+
require "prawn/svg/elements/#{filename}"
|
7
|
+
end
|
8
|
+
|
9
|
+
module Prawn::SVG::Elements
|
10
|
+
TAG_CLASS_MAPPING = {
|
11
|
+
svg: Prawn::SVG::Elements::Container,
|
12
|
+
g: Prawn::SVG::Elements::Container,
|
13
|
+
symbol: Prawn::SVG::Elements::Container,
|
14
|
+
defs: Prawn::SVG::Elements::Container,
|
15
|
+
clipPath: Prawn::SVG::Elements::Container,
|
16
|
+
style: Prawn::SVG::Elements::Style,
|
17
|
+
text: Prawn::SVG::Elements::Text,
|
18
|
+
line: Prawn::SVG::Elements::Line,
|
19
|
+
polyline: Prawn::SVG::Elements::Polyline,
|
20
|
+
polygon: Prawn::SVG::Elements::Polygon,
|
21
|
+
circle: Prawn::SVG::Elements::Circle,
|
22
|
+
ellipse: Prawn::SVG::Elements::Ellipse,
|
23
|
+
rect: Prawn::SVG::Elements::Rect,
|
24
|
+
path: Prawn::SVG::Elements::Path,
|
25
|
+
use: Prawn::SVG::Elements::Use,
|
26
|
+
image: Prawn::SVG::Elements::Image,
|
27
|
+
linearGradient: Prawn::SVG::Elements::Gradient,
|
28
|
+
title: Prawn::SVG::Elements::Ignored,
|
29
|
+
desc: Prawn::SVG::Elements::Ignored,
|
30
|
+
metadata: Prawn::SVG::Elements::Ignored,
|
31
|
+
:"font-face" => Prawn::SVG::Elements::Ignored,
|
32
|
+
}
|
33
|
+
end
|