prawn-svg 0.9.1.4 → 0.9.1.5

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.
@@ -32,11 +32,16 @@ class Prawn::Svg::Parser
32
32
  #
33
33
  # Construct a Parser object.
34
34
  #
35
- # The +data+ argument is SVG data. +options+ can optionally contain
35
+ # The +data+ argument is SVG data.
36
+ #
37
+ # +bounds+ is a tuple [width, height] that specifies the bounds of the drawing space in points.
38
+ #
39
+ # +options+ can optionally contain
36
40
  # the key :width or :height. If both are specified, only :width will be used.
37
41
  #
38
- def initialize(data, options)
42
+ def initialize(data, bounds, options)
39
43
  @data = data
44
+ @bounds = bounds
40
45
  @options = options
41
46
  @warnings = []
42
47
  @css_parser = CssParser::Parser.new if CSS_PARSER_LOADED
@@ -66,6 +71,7 @@ class Prawn::Svg::Parser
66
71
  private
67
72
  def parse_document
68
73
  @root = REXML::Document.new(@data).root
74
+ @actual_width, @actual_height = @bounds # set this first so % width/heights can be used
69
75
 
70
76
  if vb = @root.attributes['viewBox']
71
77
  x1, y1, x2, y2 = vb.strip.split(/\s+/)
@@ -73,8 +79,8 @@ class Prawn::Svg::Parser
73
79
  @actual_width, @actual_height = [x2.to_f - x1.to_f, y2.to_f - y1.to_f]
74
80
  else
75
81
  @x_offset, @y_offset = [0, 0]
76
- @actual_width = @root.attributes['width'].to_f
77
- @actual_height = @root.attributes['height'].to_f
82
+ @actual_width = points(@root.attributes['width'], :x)
83
+ @actual_height = points(@root.attributes['height'], :y)
78
84
  end
79
85
  end
80
86
 
@@ -361,20 +367,26 @@ class Prawn::Svg::Parser
361
367
  end
362
368
 
363
369
  def x(value)
364
- (points(value) - @x_offset) * scale
370
+ (points(value, :x) - @x_offset) * scale
365
371
  end
366
372
 
367
373
  def y(value)
368
- (@actual_height - (points(value) - @y_offset)) * scale
374
+ (@actual_height - (points(value, :y) - @y_offset)) * scale
369
375
  end
370
376
 
371
- def distance(value)
372
- value && (points(value) * scale)
377
+ def distance(value, axis = nil)
378
+ value && (points(value, axis) * scale)
373
379
  end
374
380
 
375
- def points(value)
376
- if value.is_a?(String) && match = value.match(/\d(cm|dm|ft|in|m|mm|yd)$/)
377
- send("#{match[1]}2pt", value.to_f)
381
+ def points(value, axis = nil)
382
+ if value.is_a?(String)
383
+ if match = value.match(/\d(cm|dm|ft|in|m|mm|yd)$/)
384
+ send("#{match[1]}2pt", value.to_f)
385
+ elsif value[-1..-1] == "%"
386
+ value.to_f * (axis == :y ? @actual_height : @actual_width) / 100.0
387
+ else
388
+ value.to_f
389
+ end
378
390
  else
379
391
  value.to_f
380
392
  end
data/lib/prawn/svg/svg.rb CHANGED
@@ -26,7 +26,7 @@ class Prawn::Svg
26
26
 
27
27
  @options[:at] or raise "options[:at] must be specified"
28
28
 
29
- @parser = Parser.new(data, options)
29
+ @parser = Parser.new(data, [prawn.bounds.width, prawn.bounds.height], options)
30
30
  @parser_warnings = @parser.warnings
31
31
  end
32
32
 
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 0
7
7
  - 9
8
8
  - 1
9
- - 4
10
- version: 0.9.1.4
9
+ - 5
10
+ version: 0.9.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roger Nesbitt
@@ -63,7 +63,7 @@ files:
63
63
  - lib/prawn/svg_document.rb
64
64
  - lib/prawn-svg.rb
65
65
  has_rdoc: true
66
- homepage:
66
+ homepage: http://github.com/mogest/prawn-svg
67
67
  licenses: []
68
68
 
69
69
  post_install_message: