texture_packer 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +25 -0
- data/README.md +6 -0
- data/executables/pack_scss +7 -108
- data/gemfiles/Gemfile.gemfile +7 -0
- data/lib/texture_packer.rb +134 -0
- data/lib/texture_packer/version.rb +2 -2
- data/texture_packer.gemspec +3 -2
- metadata +27 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41c159bf066da74aab198997c1f78a2ecc6c6bf6
|
4
|
+
data.tar.gz: 6d5473a3b14ccb99cdb030d638f50446d2e95c97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94f61a4db7e19bc00b685ce7c3d7c84bd7f11318e868fa172ea9804aecaa29580a99e17be97dcb8f987db69007b25f3806db2cf5967f5f5e6e3552ca14fb57be
|
7
|
+
data.tar.gz: 1c36f77fa566bcf998b1b174831618d4f8cfb4aaeca13cf1b607c7b55d9577bdb2421464663558057c5befb0cd0c1b89d83b9418fe39a88e13e91e747ec55130
|
data/.travis.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
sudo: false
|
2
|
+
env:
|
3
|
+
global:
|
4
|
+
- CC_TEST_REPORTER_ID=48b7540803d9734cab527ea1b3281271d44588243af0098fd3ac34f539940322
|
5
|
+
language: ruby
|
6
|
+
rvm:
|
7
|
+
- 2.3
|
8
|
+
- 2.6
|
9
|
+
- 2.7
|
10
|
+
gemfile:
|
11
|
+
- gemfiles/Gemfile.gemfile
|
12
|
+
before_install:
|
13
|
+
- if `ruby -e 'exit(RUBY_VERSION.to_f < 2.7)'`; then
|
14
|
+
gem i rubygems-update -v '< 3' && update_rubygems;
|
15
|
+
gem install bundler -v '< 2';
|
16
|
+
fi
|
17
|
+
- gem --version
|
18
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
19
|
+
- chmod +x ./cc-test-reporter
|
20
|
+
- ./cc-test-reporter before-build
|
21
|
+
script:
|
22
|
+
- bundle exec rake test
|
23
|
+
after_script:
|
24
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
25
|
+
|
data/README.md
CHANGED
@@ -1 +1,7 @@
|
|
1
1
|
# texture_packer
|
2
|
+
|
3
|
+
[![Gem Version](https://img.shields.io/gem/v/texture_packer.svg?style=flat)](https://rubygems.org/gems/texture_packer)
|
4
|
+
[![Build Status](https://api.travis-ci.com/khiav223577/texture_packer.svg?branch=master)](https://travis-ci.com/khiav223577/texture_packer)
|
5
|
+
[![RubyGems](http://img.shields.io/gem/dt/texture_packer.svg?style=flat)](https://rubygems.org/gems/texture_packer)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/khiav223577/texture_packer/badges/gpa.svg)](https://codeclimate.com/github/khiav223577/texture_packer)
|
7
|
+
[![Test Coverage](https://codeclimate.com/github/khiav223577/texture_packer/badges/coverage.svg)](https://codeclimate.com/github/khiav223577/texture_packer/coverage)
|
data/executables/pack_scss
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'yaml'
|
3
3
|
require 'pathname'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'texture_packer'
|
5
6
|
# ----------------------------------------------------------------
|
6
7
|
# ● 載入 yaml
|
7
8
|
# ----------------------------------------------------------------
|
@@ -30,23 +31,16 @@ end
|
|
30
31
|
|
31
32
|
exec_cmd('TexturePacker packer.tps')
|
32
33
|
|
33
|
-
def get_mixin(func, css)
|
34
|
-
return "@mixin #{func}{ #{css} }\n"
|
35
|
-
end
|
36
|
-
|
37
34
|
if File.exists?('packed_mobile.css') # 向下相容
|
38
35
|
exec_cmd('mv packed_mobile.css packed_m.css')
|
39
36
|
exec_cmd('mv packed_mobile.png packed_m.png')
|
40
37
|
end
|
41
|
-
|
38
|
+
has_mobile = true if File.exists?('packed_m.css')
|
42
39
|
|
43
40
|
# ----------------------------------------------------------------
|
44
41
|
# ● 由路徑計算 class 名字
|
45
42
|
# ----------------------------------------------------------------
|
46
43
|
dir_name = File.expand_path(Dir.pwd).gsub(/.*\/Texture-Packer\/.*?\/(.*)/, '\1')
|
47
|
-
base_dir_name = File.basename(dir_name)
|
48
|
-
theme = base_dir_name[/[^_]+$/]
|
49
|
-
dir_without_theme = base_dir_name[0...-(theme.size + 1)]
|
50
44
|
|
51
45
|
output_paths_mapping = Dir['*.css'].map do |path|
|
52
46
|
name = File.basename(path, '.css')
|
@@ -54,103 +48,8 @@ output_paths_mapping = Dir['*.css'].map do |path|
|
|
54
48
|
end.to_h
|
55
49
|
|
56
50
|
content = output_paths_mapping.map{|_, path| File.read("#{path}.css") }.join
|
57
|
-
|
58
|
-
|
59
|
-
content.gsub!(path, path.gsub('-', '_')) #aaa-bbb => aaa_bbb
|
60
|
-
end
|
61
|
-
|
62
|
-
data = {}
|
63
|
-
content.gsub!(/-disabled \{/, ':disabled {') #-disabled => :disabled
|
64
|
-
loop{ break if content.gsub!(/-([\w]+)((?:[^\w][\w]+)*) \{/, '[\1]\2 {') == nil }
|
65
|
-
output0 = content
|
66
|
-
output0.sub!(/(\/\*(.|\n)*?\*\/)/, '') #去掉註解
|
67
|
-
output0 = $1 + "\n"
|
68
|
-
# puts content
|
69
|
-
def extract_rule!(content)
|
70
|
-
content.sub!(/^\.([a-zA-Z0-9_-]+)((?:\:\w+|\[\w+\])*) \{(.*?)\}/, '') #抓 rule
|
71
|
-
return [$1, $2, $3] #$1 = selector, $2 = prefix, $3 = css
|
72
|
-
end
|
73
|
-
def split_prefixs(selector)
|
74
|
-
selector.sub!(/^\.([a-zA-Z0-9_-]+)(:\w+|\[\w+\])?/, '') #抓 rule
|
75
|
-
end
|
76
|
-
loop do
|
77
|
-
selector, prefix, css = extract_rule!(content)
|
78
|
-
break if selector == nil
|
79
|
-
next if selector == "sprite"
|
80
|
-
prefixs = prefix.scan(/\[\w+\]|\:\w+/) #[m]:disabled => ['[m]', ':disabled']
|
81
|
-
prefixs.map! do |prefix|
|
82
|
-
case prefix
|
83
|
-
when '[active]' ; ':active' # 因為 TexturePacker 會把 xxx-active-hover 轉成 xxx-active:hover 而不是 xxx:active:hover
|
84
|
-
when '[hover]' ; ':hover'
|
85
|
-
else ; prefix
|
86
|
-
end
|
87
|
-
end
|
88
|
-
# p [selector, prefix, css]
|
89
|
-
(data[selector] ||= {})[prefixs] = "#{css};"
|
90
|
-
end
|
91
|
-
# data = {selector => {nil => 'xxx', ':disabeld' => 'xxx', '[m]' => 'xxx'}}
|
92
|
-
output1 = "" #mixin的output
|
93
|
-
output_paths_mapping.map do |kind, name|
|
94
|
-
if kind == nil
|
95
|
-
output1 += get_mixin("#{base_dir_name}_sprite", "background-image: image-url('#{dir_name}.png');")
|
96
|
-
else
|
97
|
-
output1 += get_mixin("#{base_dir_name}_sprite_#{kind}", "background-image: image-url('#{dir_name}_#{kind}.png');")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
output2 = "" #scss的output
|
101
|
-
output2 += "body[theme='#{theme}']{\n"
|
102
|
-
output2 += " .#{dir_without_theme}_sprite{\n"
|
103
|
-
if $has_mobile
|
104
|
-
output2 += " @include desktop{ @include #{base_dir_name}_sprite; }\n"
|
105
|
-
output2 += " @include mobile{ @include #{base_dir_name}_sprite_m; }\n"
|
106
|
-
elsif output_paths_mapping.size > 1
|
107
|
-
output2 += output_paths_mapping.map do |kind, name|
|
108
|
-
next " @include #{base_dir_name}_sprite;\n" if kind == nil
|
109
|
-
next " &[kind=\"#{kind}\"] { @include #{base_dir_name}_sprite_#{kind}; }\n"
|
110
|
-
end.join
|
111
|
-
else
|
112
|
-
output2 += " @include #{base_dir_name}_sprite;\n"
|
113
|
-
end
|
114
|
-
# output2 += " &.split_mobile{ @include mobile{ @include #{base_dir_name}_sprite_m; }}\n" if $has_mobile
|
115
|
-
class CssRule
|
116
|
-
def initialize
|
117
|
-
@hash = {}
|
118
|
-
end
|
119
|
-
def add(prefixs, css)
|
120
|
-
if prefixs.size > 0
|
121
|
-
(@hash[prefixs.first] ||= CssRule.new).add(prefixs[1..-1], css)
|
122
|
-
else
|
123
|
-
@css = css
|
124
|
-
end
|
125
|
-
end
|
126
|
-
def generate_css
|
127
|
-
inner_css = @hash.map do |prefix, obj|
|
128
|
-
case
|
129
|
-
when (prefix == nil || prefix == '')
|
130
|
-
[obj.generate_css]
|
131
|
-
when prefix[0] == ':'
|
132
|
-
["&#{prefix}, &.#{prefix[1..-1]}{ ", obj.generate_css, " }"]
|
133
|
-
when prefix == '[m]'
|
134
|
-
["@include mobile{ ", obj.generate_css, " }"]
|
135
|
-
else
|
136
|
-
["&#{prefix}{ ", obj.generate_css, " }"]
|
137
|
-
end
|
138
|
-
end
|
139
|
-
inner = inner_css.size == 0 ? '' : " #{inner_css.join('')}"
|
140
|
-
return "#{@css}#{inner}"
|
141
|
-
end
|
142
|
-
end
|
143
|
-
for selector, css_data in data
|
144
|
-
func = "#{base_dir_name}_#{selector}"
|
145
|
-
rules = CssRule.new
|
146
|
-
css_data.each{|prefixs, css| #EX: prefixs == [':hover']
|
147
|
-
rules.add(prefixs, css)
|
148
|
-
}
|
149
|
-
output1 << get_mixin(func, rules.generate_css)
|
150
|
-
output2 << " &.#{selector} { @include #{func}; }\n"
|
151
|
-
end
|
152
|
-
output2 += " }\n"
|
153
|
-
output2 += "}\n"
|
51
|
+
packer = TexturePacker.new(dir_name, output_paths_mapping, content, has_mobile)
|
52
|
+
output0, output1, output2 = packer.parse!
|
154
53
|
output = output0 + output1 + output2
|
155
54
|
|
156
55
|
# ----------------------------------------------------------------
|
@@ -167,17 +66,17 @@ write_to_file('packed.scss', output)
|
|
167
66
|
# ----------------------------------------------------------------
|
168
67
|
if SETTING['project_dir']
|
169
68
|
css_pre_lines = ["@import './mixin.scss';"]
|
170
|
-
css_pre_lines.unshift("@import 'global_mixins';") if
|
69
|
+
css_pre_lines.unshift("@import 'global_mixins';") if has_mobile
|
171
70
|
|
172
71
|
sub_dirs = dir_name.split(File::Separator)[0...-1]
|
173
|
-
css_path = Pathname.new(SETTING['project_dir']).join('app', 'assets', 'stylesheets', 'packed_sprites', *sub_dirs, dir_without_theme)
|
72
|
+
css_path = Pathname.new(SETTING['project_dir']).join('app', 'assets', 'stylesheets', 'packed_sprites', *sub_dirs, packer.dir_without_theme)
|
174
73
|
img_path = Pathname.new(SETTING['project_dir']).join('app', 'assets', 'images', *sub_dirs)
|
175
74
|
FileUtils.mkdir_p(css_path)
|
176
75
|
FileUtils.mkdir_p(img_path)
|
177
76
|
write_to_file(css_path.join('mixin.scss'), output1)
|
178
77
|
write_to_file(css_path.join('ocean.scss'), "#{css_pre_lines.join("\n")}\n\n#{output2}")
|
179
78
|
output_paths_mapping.each do |_, path|
|
180
|
-
FileUtils.cp("#{path}-fs8.png", img_path.join("#{path.sub('packed', base_dir_name)}.png"))
|
79
|
+
FileUtils.cp("#{path}-fs8.png", img_path.join("#{path.sub('packed', packer.base_dir_name)}.png"))
|
181
80
|
exec_cmd("pngquant #{path}.png --force")
|
182
81
|
end
|
183
82
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'texture_packer/version'
|
2
|
+
|
3
|
+
class TexturePacker
|
4
|
+
attr_reader :base_dir_name
|
5
|
+
attr_reader :dir_without_theme
|
6
|
+
|
7
|
+
def initialize(dir_name, output_paths_mapping, content, has_mobile)
|
8
|
+
@output_paths_mapping = output_paths_mapping
|
9
|
+
@content = content.dup
|
10
|
+
@has_mobile = has_mobile
|
11
|
+
|
12
|
+
@dir_name = dir_name
|
13
|
+
@base_dir_name = File.basename(@dir_name)
|
14
|
+
@theme = @base_dir_name[/[^_]+$/]
|
15
|
+
@dir_without_theme = @base_dir_name[0...-(@theme.size + 1)]
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse!
|
19
|
+
Dir['images/**/'].map{|s| s[/images\/(.*)\//, 1] }.compact.map{|s| "#{s.gsub('/', '-')}-" }.each do |path| #"images/aaa/bbb/ccc.png" => "aaa-bbb-"
|
20
|
+
@content.gsub!(path, path.gsub('-', '_')) #aaa-bbb => aaa_bbb
|
21
|
+
end
|
22
|
+
|
23
|
+
data = {}
|
24
|
+
@content.gsub!(/-disabled \{/, ':disabled {') #-disabled => :disabled
|
25
|
+
loop{ break if @content.gsub!(/-([\w]+)((?:[^\w][\w]+)*) \{/, '[\1]\2 {') == nil }
|
26
|
+
output0 = @content
|
27
|
+
output0.sub!(/(\/\*(.|\n)*?\*\/)/, '') #去掉註解
|
28
|
+
output0 = $1 + "\n"
|
29
|
+
|
30
|
+
loop do
|
31
|
+
selector, prefix, css = extract_rule!
|
32
|
+
break if selector == nil
|
33
|
+
next if selector == "sprite"
|
34
|
+
prefixs = prefix.scan(/\[\w+\]|\:\w+/) #[m]:disabled => ['[m]', ':disabled']
|
35
|
+
prefixs.map! do |prefix|
|
36
|
+
case prefix
|
37
|
+
when '[active]' ; ':active' # 因為 TexturePacker 會把 xxx-active-hover 轉成 xxx-active:hover 而不是 xxx:active:hover
|
38
|
+
when '[hover]' ; ':hover'
|
39
|
+
else ; prefix
|
40
|
+
end
|
41
|
+
end
|
42
|
+
# p [selector, prefix, css]
|
43
|
+
(data[selector] ||= {})[prefixs] = "#{css};"
|
44
|
+
end
|
45
|
+
# data = {selector => {nil => 'xxx', ':disabeld' => 'xxx', '[m]' => 'xxx'}}
|
46
|
+
output1 = "" #mixin的output
|
47
|
+
@output_paths_mapping.map do |kind, name|
|
48
|
+
if kind == nil
|
49
|
+
output1 += get_mixin("#{base_dir_name}_sprite", "background-image: image-url('#{@dir_name}.png');")
|
50
|
+
else
|
51
|
+
output1 += get_mixin("#{base_dir_name}_sprite_#{kind}", "background-image: image-url('#{@dir_name}_#{kind}.png');")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
output2 = "" #scss的output
|
55
|
+
output2 += "body[theme='#{@theme}']{\n"
|
56
|
+
output2 += " .#{@dir_without_theme}_sprite{\n"
|
57
|
+
if @has_mobile
|
58
|
+
output2 += " @include desktop{ @include #{base_dir_name}_sprite; }\n"
|
59
|
+
output2 += " @include mobile{ @include #{base_dir_name}_sprite_m; }\n"
|
60
|
+
elsif @output_paths_mapping.size > 1
|
61
|
+
output2 += @output_paths_mapping.map do |kind, name|
|
62
|
+
next " @include #{base_dir_name}_sprite;\n" if kind == nil
|
63
|
+
next " &[kind=\"#{kind}\"] { @include #{base_dir_name}_sprite_#{kind}; }\n"
|
64
|
+
end.join
|
65
|
+
else
|
66
|
+
output2 += " @include #{base_dir_name}_sprite;\n"
|
67
|
+
end
|
68
|
+
# output2 += " &.split_mobile{ @include mobile{ @include #{base_dir_name}_sprite_m; }}\n" if @has_mobile
|
69
|
+
for selector, css_data in data
|
70
|
+
func = "#{base_dir_name}_#{selector}"
|
71
|
+
rules = CssRule.new
|
72
|
+
css_data.each{|prefixs, css| #EX: prefixs == [':hover']
|
73
|
+
rules.add(prefixs, css)
|
74
|
+
}
|
75
|
+
output1 << get_mixin(func, rules.generate_css)
|
76
|
+
output2 << " &.#{parse_language_selector!(selector)} { @include #{func}; }\n"
|
77
|
+
end
|
78
|
+
output2 += " }\n"
|
79
|
+
output2 += "}\n"
|
80
|
+
return [output0, output1, output2]
|
81
|
+
end
|
82
|
+
|
83
|
+
def extract_rule!
|
84
|
+
@content.sub!(/^\.([a-zA-Z0-9_-]+)((?:\:\w+|\[\w+\])*) \{(.*?)\}/, '') #抓 rule
|
85
|
+
return [$1, $2, $3] #$1 = selector, $2 = prefix, $3 = css
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_mixin(func, css)
|
89
|
+
return "@mixin #{func}{ #{css} }\n"
|
90
|
+
end
|
91
|
+
|
92
|
+
def parse_language_selector!(selector)
|
93
|
+
language_parsed_array = selector.scan(/_(?:tw|cn|en)\z/)
|
94
|
+
return selector if language_parsed_array.count.zero? # 如果沒有語言分類就回傳原本的 selector
|
95
|
+
|
96
|
+
case language_parsed_array[0]
|
97
|
+
when '_tw'
|
98
|
+
return selector.gsub('_tw', ':lang(zh-TW)')
|
99
|
+
when '_cn'
|
100
|
+
return selector.gsub('_cn', ':lang(zh-CN)')
|
101
|
+
when '_en'
|
102
|
+
return selector.gsub('_en', ':lang(en)')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class CssRule
|
107
|
+
def initialize
|
108
|
+
@hash = {}
|
109
|
+
end
|
110
|
+
def add(prefixs, css)
|
111
|
+
if prefixs.size > 0
|
112
|
+
(@hash[prefixs.first] ||= CssRule.new).add(prefixs[1..-1], css)
|
113
|
+
else
|
114
|
+
@css = css
|
115
|
+
end
|
116
|
+
end
|
117
|
+
def generate_css
|
118
|
+
inner_css = @hash.map do |prefix, obj|
|
119
|
+
case
|
120
|
+
when (prefix == nil || prefix == '')
|
121
|
+
[obj.generate_css]
|
122
|
+
when prefix[0] == ':'
|
123
|
+
["&#{prefix}, &.#{prefix[1..-1]}{ ", obj.generate_css, " }"]
|
124
|
+
when prefix == '[m]'
|
125
|
+
["@include mobile{ ", obj.generate_css, " }"]
|
126
|
+
else
|
127
|
+
["&#{prefix}{ ", obj.generate_css, " }"]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
inner = inner_css.size == 0 ? '' : " #{inner_css.join('')}"
|
131
|
+
return "#{@css}#{inner}"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "1.
|
1
|
+
class TexturePacker
|
2
|
+
VERSION = "1.3.0"
|
3
3
|
end
|
data/texture_packer.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = ['pack_scss']
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency
|
30
|
+
spec.add_development_dependency 'bundler', '>= 1.17', '< 3.x'
|
31
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
32
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
32
33
|
end
|
metadata
CHANGED
@@ -1,29 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: texture_packer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- khiav reoy
|
8
8
|
autorequire:
|
9
9
|
bindir: executables
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.17'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.x
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.17'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.x
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
16
36
|
requirements:
|
17
37
|
- - "~>"
|
18
38
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
39
|
+
version: '12.0'
|
20
40
|
type: :development
|
21
41
|
prerelease: false
|
22
42
|
version_requirements: !ruby/object:Gem::Requirement
|
23
43
|
requirements:
|
24
44
|
- - "~>"
|
25
45
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
46
|
+
version: '12.0'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: minitest
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -47,11 +67,14 @@ extensions: []
|
|
47
67
|
extra_rdoc_files: []
|
48
68
|
files:
|
49
69
|
- ".gitignore"
|
70
|
+
- ".travis.yml"
|
50
71
|
- CODE_OF_CONDUCT.md
|
51
72
|
- LICENSE.txt
|
52
73
|
- README.md
|
53
74
|
- Rakefile
|
54
75
|
- executables/pack_scss
|
76
|
+
- gemfiles/Gemfile.gemfile
|
77
|
+
- lib/texture_packer.rb
|
55
78
|
- lib/texture_packer/version.rb
|
56
79
|
- texture_packer.gemspec
|
57
80
|
homepage: https://github.com/khiav223577/texture_packer
|