gradient 0.2.3 → 0.2.4

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 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