gradient 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8a4cda55417c291a922c291959867947aa8b93a
4
- data.tar.gz: a5a1564b1ae76f25ebb4eed1f804123fa9cf6102
3
+ metadata.gz: 3c198e094a820d5824d667fc1c32ab3c6e5521d4
4
+ data.tar.gz: 7e7571355ef7e64e10ffa6ff6b0fab6440fde133
5
5
  SHA512:
6
- metadata.gz: edf334904f263f9bfd9274d5f4cec5712c309c5b9a41e0032b982eee016edb76292da173dd2fb6cecedca30dd1ca963669b6c396e34d61d7ce0aa8742424980a
7
- data.tar.gz: 68cc22eacc507b58b6d40bbc4bfca6919f328e53a0dfa06ced5f378e3dd0a576566e0e7034e6114369b5fbbd9c950ecbff8990d04daac8f586122b7ed3024a57
6
+ metadata.gz: eb0e346f524916b6110a60b143f49b53654eda7b7e8b10e5272c937096daa44df2c6ad4d3192204a8b8145a837a162e3ae941bf5b90b97cc1d32940e8078d003
7
+ data.tar.gz: a06de11eafc91cfa4f7d2ba0261dcbbc66a95e1c3aa3c6b4c917ae81be2697ee730b6044ced303037fd17e529c682bb6f94b79f2382ba2544fb3b26fb1a81f79
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "rspec"
26
26
  spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "ruby-prof"
27
28
  end
@@ -29,9 +29,7 @@ module Gradient
29
29
  def read(file)
30
30
  new.tap do |parser|
31
31
  File.open(file, "r") do |file|
32
- while (string_buffer = file.gets)
33
- parser.parse(string_buffer)
34
- end
32
+ parser.parse(file.read)
35
33
  end
36
34
  end.maps
37
35
  end
@@ -84,7 +82,7 @@ module Gradient
84
82
  end
85
83
 
86
84
  private def clean_gradient(steps)
87
- locations = steps.map { |g| g["Lctn"] }
85
+ locations = steps.map { |g| g.fetch("Lctn", 0.0) }
88
86
  min_location = locations.min
89
87
  max_location = locations.max
90
88
 
@@ -153,20 +151,24 @@ module Gradient
153
151
  end
154
152
 
155
153
  private def log(name, type, *args)
156
- puts "#{Array.new(@shift, " ").join}#{name}(#{type}) #{ Array(args).join(", ") }" if ENV["ENABLE_LOG"]
154
+ puts "#{Array.new(@shift, " ").join}#{name}(#{type}) #{ Array(args).map(&:to_s).reject(&:empty?).join(", ") }" if ENV["ENABLE_LOG"]
157
155
  end
158
156
 
159
- private def send_parse_method(type, name)
157
+ private def send_parse_method(type, name, rollback)
160
158
  if parse_method = PARSE_METHODS.fetch(type, nil)
161
159
  send(parse_method, name)
162
160
  else
163
- parse_unknown(name)
161
+ parse_unknown(name, rollback)
164
162
  end
165
163
  end
166
164
 
167
165
  private def parse_entry
168
166
  length = current_slice_length
169
167
  length = 4 if length.zero?
168
+ length = 4 if length > 256
169
+
170
+ rollback = @offset
171
+
170
172
  continue!
171
173
 
172
174
  name = current_slice
@@ -175,7 +177,7 @@ module Gradient
175
177
  type = current_slice
176
178
  continue!
177
179
 
178
- send_parse_method(type, name)
180
+ send_parse_method(type, name, rollback)
179
181
  end
180
182
 
181
183
  private def flush_current_gradient
@@ -214,10 +216,16 @@ module Gradient
214
216
  log(name, "vlls", size)
215
217
  upshift!
216
218
 
217
- size.times do
219
+ size.times do |i|
218
220
  type = current_slice
219
221
  continue!
220
- send_parse_method(type, name)
222
+
223
+ begin
224
+ if parse_method = PARSE_METHODS.fetch(type.strip, nil)
225
+ send(parse_method, name)
226
+ end
227
+ rescue ArgumentError => e
228
+ end
221
229
  end
222
230
 
223
231
  downshift!
@@ -248,32 +256,32 @@ module Gradient
248
256
  object_name_length = current_slice_length
249
257
  continue!
250
258
 
251
- object_name = current_slice(object_name_length * 2)
259
+ object_name = current_slice(object_name_length * 2).strip
252
260
  continue!(object_name_length * 2)
253
261
 
254
262
  object_type_length = current_slice_length
255
263
  object_type_length = 4 if object_type_length.zero?
256
264
  continue!
257
265
 
258
- object_type = current_slice(object_type_length)
266
+ object_type = current_slice(object_type_length).strip
259
267
  continue!(object_type_length)
260
268
 
261
269
  object_size = current_slice_length
262
270
  continue!
263
271
 
264
- log(name, "objc", object_size, object_type, object_name)
265
-
266
272
  @current_object_name = name.strip
273
+ log(@current_object_name, "objc", object_size, object_type, object_name)
274
+
267
275
  case @current_object_name
268
276
  when "Grad"
269
277
  flush_current_gradient
270
278
  when "Clr"
271
279
  flush_current_color
272
- @current_color = { "palette" => object_type.strip }
280
+ @current_color = { "palette" => object_type }
273
281
  end
274
282
 
275
283
  upshift!
276
- object_size.times { parse_entry }
284
+ object_size.times { parse_entry if @offset < @buffer.length }
277
285
  downshift!
278
286
  end
279
287
 
@@ -343,28 +351,18 @@ module Gradient
343
351
  end
344
352
 
345
353
  private def parse_tdta(name)
346
- log(name, "tdta")
347
- parse_unknown(name)
354
+ size = current_slice_length
355
+ continue!
356
+ string = current_slice(size)
357
+ continue!(size)
358
+ log(name, "tdta", size, string)
348
359
  end
349
360
 
350
- private def parse_unknown(name)
351
- name = @buffer.slice(@offset + 8, 4)
352
- log(name, "unknown", "Failed with simple case")
353
-
354
- hex = []
355
- ascii = []
356
-
357
- (0...15).times do |i|
358
- begin
359
- ord = @buffer[@offset + i].ord
360
- hex << "%02x" % ord
361
- ascii << (ord < 32 || 126 < ord) ? "." : ord
362
- rescue
363
- log(name, "unknown", "Something failed")
364
- end
365
- end
366
-
367
- fail [hex.join(" "), ascii.join].join("\n")
361
+ # Sometimes the offset is off by one byte.
362
+ # We roll back to the point before parsing an entry to try and parse it again.
363
+ private def parse_unknown(name, rollback)
364
+ @offset = rollback - 1
365
+ parse_entry if @offset < @buffer.length
368
366
  end
369
367
 
370
368
  end
@@ -1,3 +1,3 @@
1
1
  module Gradient
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gradient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Vieira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-20 00:00:00.000000000 Z
11
+ date: 2015-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: color
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruby-prof
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Library for dealing with color gradients in ruby
84
98
  email:
85
99
  - zee@vall.in