savage 1.1.6 → 1.1.7

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.6
1
+ 1.1.7
data/lib/savage/parser.rb CHANGED
@@ -18,7 +18,7 @@ module Savage
18
18
  subpaths = []
19
19
  if move_index = parsable.index(/[Mm]/)
20
20
  subpaths << parsable[0...move_index] if move_index > 0
21
- parsable.scan /[Mm](?:\d|[eE.,+-]|[LlHhVvQqCcTtSsAaZz]|\W)+/m do |match_group|
21
+ parsable.scan(/[Mm](?:\d|[eE.,+-]|[LlHhVvQqCcTtSsAaZz]|\W)+/m) do |match_group|
22
22
  subpaths << $&
23
23
  end
24
24
  else
@@ -36,7 +36,7 @@ module Savage
36
36
  def extract_directions(parsable, force_absolute=false)
37
37
  directions = []
38
38
  i = 0
39
- parsable.scan /[MmLlHhVvQqCcTtSsAaZz](?:\d|[eE.,+-]|\W)*/m do |match_group|
39
+ parsable.scan(/[MmLlHhVvQqCcTtSsAaZz](?:\d|[eE.,+-]|\W)*/m) do |match_group|
40
40
  direction = build_direction $&, force_absolute && i == 0
41
41
  if direction.kind_of?(Array)
42
42
  directions.concat direction
@@ -51,15 +51,16 @@ module Savage
51
51
  def build_direction(parsable, force_absolute=false)
52
52
  directions = []
53
53
  coordinates = extract_coordinates parsable
54
- absolute = (force_absolute || parsable[0,1] == parsable[0,1].upcase) ? true : false
55
54
  recurse_code = parsable[0,1]
55
+ first_absolute = force_absolute
56
56
 
57
57
  # we need to handle this separately, since ClosePath doesn't take any coordinates
58
58
  if coordinates.empty? && recurse_code =~ /[Zz]/
59
- directions << Directions::ClosePath.new(absolute)
59
+ directions << Directions::ClosePath.new(parsable[0,1] == parsable[0,1].upcase)
60
60
  end
61
61
 
62
62
  until coordinates.empty?
63
+ absolute = (first_absolute || parsable[0,1] == parsable[0,1].upcase)
63
64
  case recurse_code
64
65
  when /[Mm]/
65
66
  x = coordinates.shift
@@ -122,6 +123,7 @@ module Savage
122
123
  coordinates = []
123
124
  raise TypeError
124
125
  end
126
+ first_absolute = false
125
127
  end
126
128
 
127
129
  directions
data/savage.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "savage"
8
- s.version = "1.1.6"
8
+ s.version = "1.1.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeremy Holland"]
12
- s.date = "2012-08-02"
12
+ s.date = "2012-10-16"
13
13
  s.description = "A little gem for extracting and manipulating SVG vector path data."
14
14
  s.email = "jeremy@jeremypholland.com"
15
15
  s.extra_rdoc_files = [
@@ -62,7 +62,7 @@ Gem::Specification.new do |s|
62
62
  ]
63
63
  s.homepage = "http://github.com/awebneck/savage"
64
64
  s.require_paths = ["lib"]
65
- s.rubygems_version = "1.8.15"
65
+ s.rubygems_version = "1.8.24"
66
66
  s.summary = "A little library to manipulate SVG path data"
67
67
 
68
68
  if s.respond_to? :specification_version then
@@ -165,37 +165,63 @@ describe Parser do
165
165
  path.subpaths.last.directions[1].target.y.should == 400
166
166
  end
167
167
 
168
- it 'should return a path object with one subpath containing a move_to and two line_to directions when the string is a move_to command followed by more than one set of implicit coordinates' do
168
+ it 'should return a path object with one subpath containing an absolute move_to and two absolute line_to directions when the string is an absolute move_to command followed by more than one set of implicit coordinates' do
169
169
  path = Parser.parse("M100 200 300 400 500 600 ")
170
170
  path.class.should == Path
171
171
  path.subpaths.length.should == 1
172
172
  path.subpaths.last.directions.length.should == 3
173
173
  path.subpaths.last.directions[0].class.should == Directions::MoveTo
174
+ path.subpaths.last.directions[0].should be_absolute
174
175
  path.subpaths.last.directions[0].target.x.should == 100
175
176
  path.subpaths.last.directions[0].target.y.should == 200
176
177
  path.subpaths.last.directions[1].class.should == Directions::LineTo
178
+ path.subpaths.last.directions[1].should be_absolute
177
179
  path.subpaths.last.directions[1].target.x.should == 300
178
180
  path.subpaths.last.directions[1].target.y.should == 400
179
181
  path.subpaths.last.directions[2].class.should == Directions::LineTo
182
+ path.subpaths.last.directions[2].should be_absolute
183
+ path.subpaths.last.directions[2].target.x.should == 500
184
+ path.subpaths.last.directions[2].target.y.should == 600
185
+ end
186
+
187
+ it 'should return a path object with one subpath containing an absolute move_to and two relative line_to directions when the string is a relative move_to command followed by more than one set of implicit coordinates' do
188
+ path = Parser.parse("m100 200 300 400 500 600 ")
189
+ path.class.should == Path
190
+ path.subpaths.length.should == 1
191
+ path.subpaths.last.directions.length.should == 3
192
+ path.subpaths.last.directions[0].class.should == Directions::MoveTo
193
+ path.subpaths.last.directions[0].should be_absolute
194
+ path.subpaths.last.directions[0].target.x.should == 100
195
+ path.subpaths.last.directions[0].target.y.should == 200
196
+ path.subpaths.last.directions[1].class.should == Directions::LineTo
197
+ path.subpaths.last.directions[1].should_not be_absolute
198
+ path.subpaths.last.directions[1].target.x.should == 300
199
+ path.subpaths.last.directions[1].target.y.should == 400
200
+ path.subpaths.last.directions[2].class.should == Directions::LineTo
201
+ path.subpaths.last.directions[2].should_not be_absolute
180
202
  path.subpaths.last.directions[2].target.x.should == 500
181
203
  path.subpaths.last.directions[2].target.y.should == 600
182
204
  end
183
205
 
184
206
  it 'should return a path object with two subpaths containing one line_to directions each when the string is two move_to commands each followed by a line_to command' do
185
- path = Parser.parse("M100 200 332 -12.3M594 230-423 11.1")
207
+ path = Parser.parse("M100 200 332 -12.3m594 230-423 11.1")
186
208
  path.class.should == Path
187
209
  path.subpaths.length.should == 2
188
210
  path.subpaths[0].directions.length.should == 2
189
211
  path.subpaths[0].directions[0].class.should == Directions::MoveTo
212
+ path.subpaths[0].directions[0].should be_absolute
190
213
  path.subpaths[0].directions[0].target.x.should == 100
191
214
  path.subpaths[0].directions[0].target.y.should == 200
192
215
  path.subpaths[0].directions[1].class.should == Directions::LineTo
216
+ path.subpaths[0].directions[1].should be_absolute
193
217
  path.subpaths[0].directions[1].target.x.should == 332
194
218
  path.subpaths[0].directions[1].target.y.should == -12.3
195
219
  path.subpaths[1].directions[0].class.should == Directions::MoveTo
220
+ path.subpaths[1].directions[0].should_not be_absolute
196
221
  path.subpaths[1].directions[0].target.x.should == 594
197
222
  path.subpaths[1].directions[0].target.y.should == 230
198
223
  path.subpaths[1].directions[1].class.should == Directions::LineTo
224
+ path.subpaths[1].directions[1].should_not be_absolute
199
225
  path.subpaths[1].directions[1].target.x.should == -423
200
226
  path.subpaths[1].directions[1].target.y.should == 11.1
201
227
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-02 00:00:00.000000000 Z
12
+ date: 2012-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &8559400 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *8559400
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.3.0
25
30
  description: A little gem for extracting and manipulating SVG vector path data.
26
31
  email: jeremy@jeremypholland.com
27
32
  executables: []
@@ -92,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
97
  version: '0'
93
98
  requirements: []
94
99
  rubyforge_project:
95
- rubygems_version: 1.8.15
100
+ rubygems_version: 1.8.24
96
101
  signing_key:
97
102
  specification_version: 3
98
103
  summary: A little library to manipulate SVG path data