tileset_tooling 0.0.2

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/.gitignore +8 -0
  4. data/.rubocop.yml +63 -0
  5. data/.ruby-version +1 -0
  6. data/.vscode/settings.json +16 -0
  7. data/Gemfile +3 -0
  8. data/Gemfile.lock +161 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.rdoc +59 -0
  11. data/Rakefile +54 -0
  12. data/bin/tileset_tooling +7 -0
  13. data/features/insert_bleed.feature +56 -0
  14. data/features/step_definitions/file_steps.rb +19 -0
  15. data/features/step_definitions/help_steps.rb +10 -0
  16. data/features/step_definitions/insert_bleed_steps.rb +28 -0
  17. data/features/support/configuration.rb +18 -0
  18. data/features/support/env.rb +19 -0
  19. data/features/support/test_data.rb +16 -0
  20. data/features/tileset_tooling.feature +7 -0
  21. data/lib/tileset_tooling.rb +4 -0
  22. data/lib/tileset_tooling/app.rb +58 -0
  23. data/lib/tileset_tooling/commands.rb +22 -0
  24. data/lib/tileset_tooling/commands/insert_bleed.rb +126 -0
  25. data/lib/tileset_tooling/data.rb +13 -0
  26. data/lib/tileset_tooling/data/tile.rb +30 -0
  27. data/lib/tileset_tooling/data/tileset.rb +96 -0
  28. data/lib/tileset_tooling/data/types.rb +11 -0
  29. data/lib/tileset_tooling/utils.rb +26 -0
  30. data/lib/tileset_tooling/version.rb +7 -0
  31. data/test/commands/insert_bleed_test.rb +76 -0
  32. data/test/data/UIpackSheet_transparent.png +0 -0
  33. data/test/data/expected/simple_with_bad_specs.png +0 -0
  34. data/test/data/expected/simple_with_margin.png +0 -0
  35. data/test/data/expected/simple_with_specs.png +0 -0
  36. data/test/data/simple_no_margin.png +0 -0
  37. data/test/data/simple_with_bad_specs.png +0 -0
  38. data/test/data/simple_with_bad_specs.specs +2 -0
  39. data/test/data/simple_with_margin.png +0 -0
  40. data/test/data/simple_with_specs.png +0 -0
  41. data/test/data/simple_with_specs.specs +7 -0
  42. data/test/data/source/simple_no_margin.xcf +0 -0
  43. data/test/data/source/simple_with_margin.xcf +0 -0
  44. data/test/test_helper.rb +23 -0
  45. data/test/utils_test.rb +12 -0
  46. data/tileset_tooling.gemspec +34 -0
  47. data/tileset_tooling.rdoc +48 -0
  48. metadata +317 -0
@@ -0,0 +1,96 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ require 'tileset_tooling/data/tile'
5
+
6
+ # Class representing a TileSet row
7
+ class ::TilesetTooling::Data::TileSetRow
8
+ # Default constructor taking a list of tiles
9
+ def initialize(tiles)
10
+ @tiles = tiles
11
+ end
12
+
13
+ attr_reader :tiles
14
+ end
15
+
16
+ # Class representing a TileSet's information
17
+ class ::TilesetTooling::Data::TileSet < ::Dry::Struct
18
+ attribute :image, ::TilesetTooling::Data::Types::ImageType
19
+ attribute :original_image_path, ::TilesetTooling::Data::Types::String
20
+ attribute :tile_height, ::TilesetTooling::Data::Types::Integer
21
+ attribute :tile_width, ::TilesetTooling::Data::Types::Integer
22
+ attribute :margin, ::TilesetTooling::Data::Types::Integer
23
+ attribute :offset_top, ::TilesetTooling::Data::Types::Integer
24
+ attribute :offset_left, ::TilesetTooling::Data::Types::Integer
25
+
26
+ # Helper to print all information in the image
27
+ def to_s
28
+ %(
29
+ Image '#{original_image_path}'
30
+ Tile height: #{tile_height}
31
+ Tile width: #{tile_width}
32
+ Margin: #{margin}
33
+ Top offset: #{offset_top}
34
+ Left offset: #{offset_left}
35
+ Number of tiles: #{rows.count * rows[0].tiles.count})
36
+ end
37
+
38
+ # Runs the given bloc on each tile of the tileset
39
+ def for_each_tile(&block)
40
+ rows.each do |row|
41
+ row.tiles.each do |tile|
42
+ block.call(tile)
43
+ end
44
+ end
45
+ end
46
+
47
+ # Gets the height of the tileset/image
48
+ def height
49
+ image.height
50
+ end
51
+
52
+ # Gets the width of the tileset/image
53
+ def width
54
+ image.width
55
+ end
56
+
57
+ private
58
+
59
+ # Computes the tiles and returns them
60
+ def rows
61
+ return @rows unless @rows.nil?
62
+
63
+ @rows = []
64
+ top = offset_top
65
+ loop do
66
+ left = offset_left
67
+ tiles = []
68
+ margin_top = top.positive? ? margin : 0
69
+ margin_bottom = top + tile_height < height ? margin : 0
70
+
71
+ loop do
72
+ margin_left = left.positive? ? margin : 0
73
+ margin_right = left + tile_width < width ? margin : 0
74
+
75
+ tiles << ::TilesetTooling::Data::Tile.new(
76
+ top: top + margin_top,
77
+ left: left + margin_left,
78
+ height: tile_height,
79
+ width: tile_width,
80
+ margin_top: margin_top,
81
+ margin_left: margin_left,
82
+ margin_bottom: margin_bottom,
83
+ margin_right: margin_right
84
+ )
85
+ left += tile_width + margin_left + margin_right
86
+ break if left >= width
87
+ end
88
+
89
+ @rows << ::TilesetTooling::Data::TileSetRow.new(tiles)
90
+ top += tile_height + margin_top + margin_bottom
91
+ break if top >= height
92
+ end
93
+
94
+ @rows
95
+ end
96
+ end
@@ -0,0 +1,11 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ # Module containing all types to be used for Dry::Struct structures
5
+ module ::TilesetTooling::Data::Types
6
+ include ::Dry.Types()
7
+
8
+ ImageType = ::TilesetTooling::Data::Types.Instance(::MiniMagick::Image)
9
+
10
+ public_constant :ImageType
11
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ require 'mini_magick'
5
+
6
+ # A few random utilities
7
+ module ::TilesetTooling::Utils
8
+ module_function
9
+
10
+ # Generate a signature from the image data
11
+ def image_signature(image_path)
12
+ ::MiniMagick::Tool::Identify.new do |identity|
13
+ identity.quiet
14
+ identity.format('%#\\n')
15
+ identity << image_path
16
+ end
17
+ end
18
+
19
+ # Gets the path to the spec file that should go with the given image
20
+ def image_spec_file_path(image_path)
21
+ file_name = ::File.basename(image_path, '.*')
22
+ directory = ::File.dirname(image_path)
23
+
24
+ "#{directory}/#{file_name}.specs"
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ module ::TilesetTooling
5
+ VERSION = '0.0.2'
6
+ public_constant :VERSION
7
+ end
@@ -0,0 +1,76 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ require 'test_helper'
5
+
6
+ class ::TestInsertBleed < ::Test::Unit::TestCase
7
+ def test_margin_required
8
+ input, = get_png_data('simple_no_margin.png')
9
+ command = ::TilesetTooling::Commands::InsertBleed.new({}, [input])
10
+ command.expects(:ask_specs).returns([16, 16, 0, 0, 0])
11
+ command.unpack!
12
+
13
+ assert_raise ::StandardError, 'Current implementation needs an existing margin' do
14
+ command.run
15
+ end
16
+ end
17
+
18
+ def test_simple_file
19
+ input, expected = get_png_data('simple_with_margin.png')
20
+ output = output_file_path
21
+ options = { output: output }
22
+ args = [input]
23
+ command = ::TilesetTooling::Commands::InsertBleed.new(options, args)
24
+ command.expects(:ask_specs).returns([16, 16, 1, 0, 0])
25
+ command.unpack!
26
+ command.run
27
+ assert ::File.exist?(expected)
28
+ assert ::File.exist?(output)
29
+ output_signature = ::TilesetTooling::Utils.image_signature(output)
30
+ expected_signature = ::TilesetTooling::Utils.image_signature(expected)
31
+ assert_equal(expected_signature, output_signature)
32
+ end
33
+
34
+ def test_simple_file_with_specs
35
+ input, expected = get_png_data('simple_with_specs.png')
36
+ output = output_file_path
37
+ options = { output: output }
38
+ args = [input]
39
+ command = ::TilesetTooling::Commands::InsertBleed.new(options, args)
40
+ command.unpack!
41
+ command.run
42
+ assert ::File.exist?(expected)
43
+ assert ::File.exist?(output)
44
+ output_signature = ::TilesetTooling::Utils.image_signature(output)
45
+ expected_signature = ::TilesetTooling::Utils.image_signature(expected)
46
+ assert_equal(expected_signature, output_signature)
47
+ end
48
+
49
+ def test_simple_file_with_bad_specs
50
+ input, = get_png_data('simple_with_bad_specs.png')
51
+ output = output_file_path
52
+ options = { output: output }
53
+ args = [input]
54
+ command = ::TilesetTooling::Commands::InsertBleed.new(options, args)
55
+ command.unpack!
56
+ assert_raise ::StandardError, 'Invalid specs file' do
57
+ command.run
58
+ end
59
+ end
60
+
61
+ def test_simple_file_with_skip_specs
62
+ input, expected = get_png_data('simple_with_bad_specs.png')
63
+ output = output_file_path
64
+ options = { output: output, 'skip-specs': true }
65
+ args = [input]
66
+ command = ::TilesetTooling::Commands::InsertBleed.new(options, args)
67
+ command.expects(:ask_specs).returns([16, 16, 1, 0, 0])
68
+ command.unpack!
69
+ command.run
70
+ assert ::File.exist?(expected)
71
+ assert ::File.exist?(output)
72
+ output_signature = ::TilesetTooling::Utils.image_signature(output)
73
+ expected_signature = ::TilesetTooling::Utils.image_signature(expected)
74
+ assert_equal(expected_signature, output_signature)
75
+ end
76
+ end
@@ -0,0 +1,2 @@
1
+ I'm not a YAML
2
+ I'm nothing ...
@@ -0,0 +1,7 @@
1
+ specs:
2
+ details:
3
+ tile_height: 16
4
+ tile_width: 16
5
+ margin: 1
6
+ offset_top: 0
7
+ offset_left: 0
@@ -0,0 +1,23 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ require 'test/unit'
5
+ require 'mocha/test_unit'
6
+
7
+ require 'tileset_tooling/app'
8
+
9
+ # In case we need debugging, uncomment the following
10
+ # ::SemanticLogger.sync!
11
+ # ::SemanticLogger.default_level = :trace
12
+ # ::SemanticLogger.add_appender(io: $stdout, formatter: :color)
13
+
14
+ def get_png_data(name)
15
+ input = "#{__dir__}/data/#{name}"
16
+ expected = "#{__dir__}/data/expected/#{name}"
17
+
18
+ [input, expected]
19
+ end
20
+
21
+ def output_file_path
22
+ "#{__dir__}/data/tmp_output.png"
23
+ end
@@ -0,0 +1,12 @@
1
+ # Copyright (c) 2020 Jean-Sebastien Gelinas, see LICENSE.txt
2
+ # frozen_string_literal: true
3
+
4
+ require 'test_helper'
5
+
6
+ class ::TestUtils < ::Test::Unit::TestCase
7
+ def test_image_signature
8
+ input, = get_png_data('simple_no_margin.png')
9
+ signature = ::TilesetTooling::Utils.image_signature(input)
10
+ assert_equal('7a61e5c691289afc9d6eb50b52ac7cac05241271775d20233e07ec431e24c9c7', signature)
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ensure we require the local version and not one we might have installed already
4
+ require File.join([File.dirname(__FILE__), 'lib', 'tileset_tooling', 'version.rb'])
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'tileset_tooling'
8
+ s.version = TilesetTooling::VERSION
9
+ s.author = 'Jean-Sebastien Gelinas'
10
+ s.email = 'calestar@gmail.com'
11
+ s.homepage = 'https://github.com/calestar/tileset_tooling'
12
+ s.license = 'MIT'
13
+ s.platform = Gem::Platform::RUBY
14
+ s.required_ruby_version = '>= 2.6.3'
15
+ s.summary = 'Bits of tooling I use for working with tilesets'
16
+ s.files = `git ls-files`.split('
17
+ ')
18
+ s.require_paths << 'lib'
19
+ s.extra_rdoc_files = ['README.rdoc', 'tileset_tooling.rdoc']
20
+ s.rdoc_options << '--title' << 'tileset_tooling' << '--main' << 'README.rdoc' << '-ri'
21
+ s.bindir = 'bin'
22
+ s.executables << 'tileset_tooling'
23
+ s.add_development_dependency('aruba', '~> 1.0', '>= 1.0.3')
24
+ s.add_development_dependency('mocha', '~> 1.11', '>= 1.11.2')
25
+ s.add_development_dependency('rake', '~> 12.3', '>= 12.3.3')
26
+ s.add_development_dependency('rdoc', '~> 6.2', '>= 6.2.1')
27
+ s.add_development_dependency('rubocop', '~> 0.90', '>= 0.90.0')
28
+ s.add_development_dependency('test-unit', '~> 3.3', '>= 3.3.6')
29
+ s.add_runtime_dependency('dry-struct', '~> 1.3', '>= 1.3.0')
30
+ s.add_runtime_dependency('gli', '~> 2.19', '2.19.2')
31
+ s.add_runtime_dependency('highline', '~> 2.0', '>= 2.0.3')
32
+ s.add_runtime_dependency('mini_magick', '~> 4.10', '>= 4.10.1')
33
+ s.add_runtime_dependency('semantic_logger', '~> 4.7', '>= 4.7.2')
34
+ end
@@ -0,0 +1,48 @@
1
+ == tileset_tooling - Bits of tooling I use for working with tilesets
2
+
3
+ v0.0.1
4
+
5
+ === Global Options
6
+ === --help
7
+ Show this message
8
+
9
+
10
+
11
+ === --version
12
+ Display the program version
13
+
14
+
15
+
16
+ === Commands
17
+ ==== Command: <tt>bleed </tt>
18
+ Commands relating to bleed around tiles
19
+
20
+
21
+ ===== Commands
22
+ ====== Command: <tt>insert </tt>
23
+ Inserts a bleed around tiles
24
+
25
+
26
+ ======= Options
27
+ ======= --output path
28
+
29
+ Path where to store result
30
+
31
+ [Default Value] None
32
+
33
+
34
+ ======= --[no-]skip-specs
35
+ Skips the reading of the specs
36
+
37
+
38
+
39
+ ==== Command: <tt>help command</tt>
40
+ Shows a list of commands or help for one command
41
+
42
+ Gets help for the application or its commands. Can also list the commands in a way helpful to creating a bash-style completion function
43
+ ===== Options
44
+ ===== -c
45
+ List commands one per line, to assist with shell completion
46
+
47
+
48
+
metadata ADDED
@@ -0,0 +1,317 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tileset_tooling
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jean-Sebastien Gelinas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aruba
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.3
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: mocha
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.11'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.11.2
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.11'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.11.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '12.3'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 12.3.3
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '12.3'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 12.3.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: rdoc
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '6.2'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 6.2.1
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '6.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 6.2.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: rubocop
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 0.90.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.90'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 0.90.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '0.90'
113
+ - !ruby/object:Gem::Dependency
114
+ name: test-unit
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '3.3'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 3.3.6
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '3.3'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 3.3.6
133
+ - !ruby/object:Gem::Dependency
134
+ name: dry-struct
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 1.3.0
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '1.3'
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 1.3.0
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: gli
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.19'
160
+ - - '='
161
+ - !ruby/object:Gem::Version
162
+ version: 2.19.2
163
+ type: :runtime
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '2.19'
170
+ - - '='
171
+ - !ruby/object:Gem::Version
172
+ version: 2.19.2
173
+ - !ruby/object:Gem::Dependency
174
+ name: highline
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '2.0'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 2.0.3
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '2.0'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 2.0.3
193
+ - !ruby/object:Gem::Dependency
194
+ name: mini_magick
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '4.10'
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 4.10.1
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '4.10'
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 4.10.1
213
+ - !ruby/object:Gem::Dependency
214
+ name: semantic_logger
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '4.7'
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 4.7.2
223
+ type: :runtime
224
+ prerelease: false
225
+ version_requirements: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '4.7'
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: 4.7.2
233
+ description:
234
+ email: calestar@gmail.com
235
+ executables:
236
+ - tileset_tooling
237
+ extensions: []
238
+ extra_rdoc_files:
239
+ - README.rdoc
240
+ - tileset_tooling.rdoc
241
+ files:
242
+ - ".github/workflows/ruby.yml"
243
+ - ".gitignore"
244
+ - ".rubocop.yml"
245
+ - ".ruby-version"
246
+ - ".vscode/settings.json"
247
+ - Gemfile
248
+ - Gemfile.lock
249
+ - LICENSE.txt
250
+ - README.rdoc
251
+ - Rakefile
252
+ - bin/tileset_tooling
253
+ - features/insert_bleed.feature
254
+ - features/step_definitions/file_steps.rb
255
+ - features/step_definitions/help_steps.rb
256
+ - features/step_definitions/insert_bleed_steps.rb
257
+ - features/support/configuration.rb
258
+ - features/support/env.rb
259
+ - features/support/test_data.rb
260
+ - features/tileset_tooling.feature
261
+ - lib/tileset_tooling.rb
262
+ - lib/tileset_tooling/app.rb
263
+ - lib/tileset_tooling/commands.rb
264
+ - lib/tileset_tooling/commands/insert_bleed.rb
265
+ - lib/tileset_tooling/data.rb
266
+ - lib/tileset_tooling/data/tile.rb
267
+ - lib/tileset_tooling/data/tileset.rb
268
+ - lib/tileset_tooling/data/types.rb
269
+ - lib/tileset_tooling/utils.rb
270
+ - lib/tileset_tooling/version.rb
271
+ - test/commands/insert_bleed_test.rb
272
+ - test/data/UIpackSheet_transparent.png
273
+ - test/data/expected/simple_with_bad_specs.png
274
+ - test/data/expected/simple_with_margin.png
275
+ - test/data/expected/simple_with_specs.png
276
+ - test/data/simple_no_margin.png
277
+ - test/data/simple_with_bad_specs.png
278
+ - test/data/simple_with_bad_specs.specs
279
+ - test/data/simple_with_margin.png
280
+ - test/data/simple_with_specs.png
281
+ - test/data/simple_with_specs.specs
282
+ - test/data/source/simple_no_margin.xcf
283
+ - test/data/source/simple_with_margin.xcf
284
+ - test/test_helper.rb
285
+ - test/utils_test.rb
286
+ - tileset_tooling.gemspec
287
+ - tileset_tooling.rdoc
288
+ homepage: https://github.com/calestar/tileset_tooling
289
+ licenses:
290
+ - MIT
291
+ metadata: {}
292
+ post_install_message:
293
+ rdoc_options:
294
+ - "--title"
295
+ - tileset_tooling
296
+ - "--main"
297
+ - README.rdoc
298
+ - "-ri"
299
+ require_paths:
300
+ - lib
301
+ - lib
302
+ required_ruby_version: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: 2.6.3
307
+ required_rubygems_version: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: '0'
312
+ requirements: []
313
+ rubygems_version: 3.0.3
314
+ signing_key:
315
+ specification_version: 4
316
+ summary: Bits of tooling I use for working with tilesets
317
+ test_files: []