texture_packer 1.5.0 → 1.7.1

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.
@@ -1,5 +1,25 @@
1
1
  ## Change Log
2
2
 
3
+ ### [v1.7.0](https://github.com/khiav223577/texture_packer/compare/v1.6.3...v1.7.0) 2020/04/17
4
+ - [#20](https://github.com/khiav223577/texture_packer/pull/20) Make sure some selector ordered as specified (@khiav223577)
5
+
6
+ ### [v1.6.3](https://github.com/khiav223577/texture_packer/compare/v1.6.2...v1.6.3) 2020/04/17
7
+ - [#19](https://github.com/khiav223577/texture_packer/pull/19) Fix: It will generate wrong scss where there is an image named `xxx-disabled-m` (@khiav223577)
8
+
9
+ ### [v1.6.2](https://github.com/khiav223577/texture_packer/compare/v1.6.1...v1.6.2) 2020/04/14
10
+ - [#18](https://github.com/khiav223577/texture_packer/pull/18) Fix: it needs global mixins when split type is by i18n + mobile (@khiav223577)
11
+
12
+ ### [v1.6.1](https://github.com/khiav223577/texture_packer/compare/v1.6.0...v1.6.1) 2020/04/13
13
+ - [#17](https://github.com/khiav223577/texture_packer/pull/17) auto correct coding style by rubocop (@khiav223577)
14
+
15
+ ### [v1.6.0](https://github.com/khiav223577/texture_packer/compare/v1.5.0...v1.6.0) 2020/04/13
16
+ - [#16](https://github.com/khiav223577/texture_packer/pull/16) Support split images by i18n + mobile. (@khiav223577)
17
+ - [#15](https://github.com/khiav223577/texture_packer/pull/15) Fix: the return value of Dir#[] method is different in different environments. (@khiav223577)
18
+
19
+ ### [v1.5.0](https://github.com/khiav223577/texture_packer/compare/v1.4.1...v1.5.0) 2020/04/08
20
+ - [#13](https://github.com/khiav223577/texture_packer/pull/13) Update version.rb (@Fatmylin)
21
+ - [#12](https://github.com/khiav223577/texture_packer/pull/12) Support using `-en`, `-tw`, `-cn` to set i18n. And support split pngs by i18n. (@khiav223577)
22
+
3
23
  ### [v1.4.0](https://github.com/khiav223577/texture_packer/compare/v1.3.0...v1.4.0) 2020/03/11
4
24
  - [#11](https://github.com/khiav223577/texture_packer/pull/11) Add options to export packed scss files and images to your project (@khiav223577)
5
25
  - [#10](https://github.com/khiav223577/texture_packer/pull/10) Remove backward compatibility of name as `packed_mobile` (@khiav223577)
data/README.md CHANGED
@@ -5,3 +5,13 @@
5
5
  [![RubyGems](http://img.shields.io/gem/dt/texture_packer.svg?style=flat)](https://rubygems.org/gems/texture_packer)
6
6
  [![Code Climate](https://codeclimate.com/github/khiav223577/texture_packer/badges/gpa.svg)](https://codeclimate.com/github/khiav223577/texture_packer)
7
7
  [![Test Coverage](https://codeclimate.com/github/khiav223577/texture_packer/badges/coverage.svg)](https://codeclimate.com/github/khiav223577/texture_packer/coverage)
8
+
9
+
10
+ ### Usage:
11
+
12
+ ```
13
+ pack_scss [options]
14
+ -v, --version show the version number
15
+ -h, --help Prints this help
16
+ -p, --project_dir=PATH Copy the generated scss files / images to specified project
17
+ ```
data/Rakefile CHANGED
@@ -1,10 +1,11 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
+ t.ruby_opts += ['-W1']
8
9
  end
9
10
 
10
- task :default => :test
11
+ task default: :test
@@ -8,8 +8,10 @@ class TexturePacker
8
8
  attr_reader :dir_without_theme
9
9
  attr_reader :output_paths_mapping
10
10
 
11
- SPLIT_BY_MOBILE = 'mobile'
12
- SPLIT_BY_I18N = 'i18n'
11
+ SPLIT_BY_MOBILE = 'mobile'
12
+ SPLIT_BY_I18N = 'i18n'
13
+ SPLIT_BY_I18N_AND_MOBILE = 'i18n_and_mobile'
14
+ SELECTOR_ORDER = %w[:hover :active :disabled].freeze
13
15
 
14
16
  def initialize(dir_name, output_paths_mapping, content, split_type = nil)
15
17
  @output_paths_mapping = output_paths_mapping
@@ -23,45 +25,58 @@ class TexturePacker
23
25
  end
24
26
 
25
27
  def parse!
26
- Dir['images/**/'].map{|s| s[/images\/(.*)\//, 1] }.compact.map{|s| "#{s.gsub('/', '-')}-" }.each do |path| #"images/aaa/bbb/ccc.png" => "aaa-bbb-"
27
- @content.gsub!(path, path.gsub('-', '_')) #aaa-bbb => aaa_bbb
28
+ Dir['images/**/'].map{|s| s[%r{images/(.*)/}, 1] }.compact.map{|s| "#{s.tr('/', '-')}-" }.each do |path| # "images/aaa/bbb/ccc.png" => "aaa-bbb-"
29
+ @content.gsub!(path, path.tr('-', '_')) # aaa-bbb => aaa_bbb
28
30
  end
29
31
 
30
32
  data = {}
31
33
  @content.gsub!(/-disabled \{/, ':disabled {') #-disabled => :disabled
32
34
  loop{ break if @content.gsub!(/-([\w]+)((?:[^\w][\w]+)*) \{/, '[\1]\2 {') == nil }
33
35
  output0 = @content
34
- output0.sub!(/(\/\*(.|\n)*?\*\/)/, '') #去掉註解
36
+ output0.sub!(%r{(/\*(.|\n)*?\*/)}, '') # 去掉註解
35
37
  output0 = $1 + "\n"
36
38
 
37
39
  loop do
38
- selector, prefix, css = extract_rule!
40
+ selector, string_prefix, css = extract_rule!
39
41
  break if selector == nil
40
- next if selector == "sprite"
41
- prefixs = prefix.scan(/\[\w+\]|\:\w+/) #[m]:disabled => ['[m]', ':disabled']
42
+ next if selector == 'sprite'
43
+ prefixs = string_prefix.scan(/\[\w+\]|\:\w+/) # [m]:disabled => ['[m]', ':disabled']
42
44
  prefixs.map! do |prefix|
43
45
  case prefix
44
- when '[active]' ; ':active' # 因為 TexturePacker 會把 xxx-active-hover 轉成 xxx-active:hover 而不是 xxx:active:hover
45
- when '[hover]' ; ':hover'
46
- else ; prefix
46
+ when '[active]' then ':active' # 因為 TexturePacker 會把 xxx-active-hover 轉成 xxx-active:hover 而不是 xxx:active:hover
47
+ when '[hover]' then ':hover'
48
+ when '[disabled]' then ':disabled'
49
+ else prefix
47
50
  end
48
51
  end
49
52
  # p [selector, prefix, css]
50
53
  (data[selector] ||= {})[prefixs] = "#{css};"
51
54
  end
52
55
  # data = {selector => {nil => 'xxx', ':disabeld' => 'xxx', '[m]' => 'xxx'}}
53
- output1 = "" #mixin的output
54
- @output_paths_mapping.map do |kind, name|
56
+ output1 = '' # mixin的output
57
+ @output_paths_mapping.map do |kind, _name|
55
58
  if kind == nil
56
59
  output1 += get_mixin("#{base_dir_name}_sprite", "background-image: image-url('#{@dir_name}.png');")
57
60
  else
58
61
  output1 += get_mixin("#{base_dir_name}_sprite_#{kind}", "background-image: image-url('#{@dir_name}_#{kind}.png');")
59
62
  end
60
63
  end
61
- output2 = "" #scss的output
64
+ output2 = '' # scss的output
62
65
  output2 += "body[theme='#{@theme}']{\n"
63
66
  output2 += " .#{@dir_without_theme}_sprite{\n"
64
67
  case @split_type
68
+ when SPLIT_BY_I18N_AND_MOBILE
69
+ output2 += " @include desktop{\n"
70
+ output2 += " &:lang(zh-TW){ @include #{base_dir_name}_sprite_tw; }\n"
71
+ output2 += " &:lang(zh-CN){ @include #{base_dir_name}_sprite_cn; }\n"
72
+ output2 += " &:lang(en){ @include #{base_dir_name}_sprite_en; }\n"
73
+ output2 += " }\n"
74
+
75
+ output2 += " @include mobile{\n"
76
+ output2 += " &:lang(zh-TW){ @include #{base_dir_name}_sprite_tw_m; }\n"
77
+ output2 += " &:lang(zh-CN){ @include #{base_dir_name}_sprite_cn_m; }\n"
78
+ output2 += " &:lang(en){ @include #{base_dir_name}_sprite_en_m; }\n"
79
+ output2 += " }\n"
65
80
  when SPLIT_BY_MOBILE
66
81
  output2 += " @include desktop{ @include #{base_dir_name}_sprite; }\n"
67
82
  output2 += " @include mobile{ @include #{base_dir_name}_sprite_m; }\n"
@@ -71,7 +86,7 @@ class TexturePacker
71
86
  output2 += " &:lang(en){ @include #{base_dir_name}_sprite_en; }\n"
72
87
  else
73
88
  if @output_paths_mapping.size > 1
74
- output2 += @output_paths_mapping.map do |kind, name|
89
+ output2 += @output_paths_mapping.map do |kind, _name|
75
90
  next " @include #{base_dir_name}_sprite;\n" if kind == nil
76
91
  next " &[kind=\"#{kind}\"] { @include #{base_dir_name}_sprite_#{kind}; }\n"
77
92
  end.join
@@ -80,12 +95,12 @@ class TexturePacker
80
95
  end
81
96
  end
82
97
  # output2 += " &.split_mobile{ @include mobile{ @include #{base_dir_name}_sprite_m; }}\n" if @split_type == SPLIT_BY_MOBILE
83
- for selector, css_data in data
98
+ data.each do |selector, css_data|
84
99
  func = "#{base_dir_name}_#{selector}"
85
100
  rules = CssRule.new
86
- css_data.each{|prefixs, css| #EX: prefixs == [':hover']
101
+ css_data.each do |prefixs, css| # EX: prefixs == [':hover']
87
102
  rules.add(prefixs, css)
88
- }
103
+ end
89
104
  output1 << get_mixin(func, rules.generate_css)
90
105
  output2 << " &.#{parse_language_selector!(selector)} { @include #{func}; }\n"
91
106
  end
@@ -95,8 +110,8 @@ class TexturePacker
95
110
  end
96
111
 
97
112
  def extract_rule!
98
- @content.sub!(/^\.([a-zA-Z0-9_-]+)((?:\:\w+|\[\w+\])*) \{(.*?)\}/, '') #抓 rule
99
- return [$1, $2, $3] #$1 = selector, $2 = prefix, $3 = css
113
+ @content.sub!(/^\.([a-zA-Z0-9_-]+)((?:\:\w+|\[\w+\])*) \{(.*?)\}/, '') # rule
114
+ return [$1, $2, $3] # $1 = selector, $2 = prefix, $3 = css
100
115
  end
101
116
 
102
117
  def get_mixin(func, css)
@@ -119,6 +134,7 @@ class TexturePacker
119
134
 
120
135
  def need_global_mixins?
121
136
  return true if @split_type == SPLIT_BY_MOBILE
137
+ return true if @split_type == SPLIT_BY_I18N_AND_MOBILE
122
138
  return false
123
139
  end
124
140
 
@@ -126,6 +142,7 @@ class TexturePacker
126
142
  def initialize
127
143
  @hash = {}
128
144
  end
145
+
129
146
  def add(prefixs, css)
130
147
  if prefixs.size > 0
131
148
  (@hash[prefixs.first] ||= CssRule.new).add(prefixs[1..-1], css)
@@ -133,23 +150,24 @@ class TexturePacker
133
150
  @css = css
134
151
  end
135
152
  end
153
+
136
154
  def generate_css
137
- inner_css = @hash.map do |prefix, obj|
155
+ inner_css = @hash.sort_by{|prefix, obj| SELECTOR_ORDER.index(prefix) || SELECTOR_ORDER.size }.map do |prefix, obj|
138
156
  case prefix
139
157
  when nil, ''
140
158
  [obj.generate_css]
141
159
  when /\A:/
142
- ["&#{prefix}, &.#{prefix[1..-1]}{ ", obj.generate_css, " }"]
160
+ ["&#{prefix}, &.#{prefix[1..-1]}{ ", obj.generate_css, ' }']
143
161
  when '[m]'
144
- ["@include mobile{ ", obj.generate_css, " }"]
162
+ ['@include mobile{ ', obj.generate_css, ' }']
145
163
  when '[tw]'
146
- ["&:lang(zh-TW){ ", obj.generate_css, " }"]
164
+ ['&:lang(zh-TW){ ', obj.generate_css, ' }']
147
165
  when '[cn]'
148
- ["&:lang(zh-CN){ ", obj.generate_css, " }"]
166
+ ['&:lang(zh-CN){ ', obj.generate_css, ' }']
149
167
  when '[en]'
150
- ["&:lang(en){ ", obj.generate_css, " }"]
168
+ ['&:lang(en){ ', obj.generate_css, ' }']
151
169
  else
152
- ["&#{prefix}{ ", obj.generate_css, " }"]
170
+ ["&#{prefix}{ ", obj.generate_css, ' }']
153
171
  end
154
172
  end
155
173
  inner = inner_css.size == 0 ? '' : " #{inner_css.join('')}"
@@ -37,23 +37,25 @@ class TexturePacker::Cli
37
37
  end
38
38
  end
39
39
 
40
- def create_packer
41
- split_type = case
42
- when File.exists?('packed_m.css') ; TexturePacker::SPLIT_BY_MOBILE
43
- when File.exists?('packed_tw.css') ; TexturePacker::SPLIT_I18N
44
- else ; nil
45
- end
40
+ def calculate_split_type
41
+ case
42
+ when File.exist?('packed_tw_m.css') ; return TexturePacker::SPLIT_BY_I18N_AND_MOBILE
43
+ when File.exist?('packed_m.css') ; return TexturePacker::SPLIT_BY_MOBILE
44
+ when File.exist?('packed_tw.css') ; return TexturePacker::SPLIT_BY_I18N
45
+ end
46
+ end
46
47
 
48
+ def create_packer
47
49
  # 由路徑計算 class 名字
48
- dir_name = File.expand_path(Dir.pwd).gsub(/.*\/Texture-Packer\/.*?\/(.*)/, '\1')
50
+ dir_name = File.expand_path(Dir.pwd).gsub(%r{.*/Texture-Packer/.*?/(.*)}, '\1')
49
51
 
50
52
  content = output_paths_mapping.map{|_, path| File.read("#{path}.css") }.join
51
- return TexturePacker.new(dir_name, output_paths_mapping, content, split_type)
53
+ return TexturePacker.new(dir_name, output_paths_mapping, content, calculate_split_type)
52
54
  end
53
55
 
54
56
  def output_paths_mapping
55
57
  @output_paths_mapping ||= begin
56
- Dir['*.css'].map do |path|
58
+ Dir['*.css'].sort.map do |path|
57
59
  name = File.basename(path, '.css')
58
60
  next [name[/packed_(.*)/, 1], name]
59
61
  end.to_h
@@ -82,12 +84,10 @@ class TexturePacker::Cli
82
84
  end
83
85
 
84
86
  def exec_cmd(*args)
85
- begin
86
- puts args.join(' ')
87
- puts system(*args)
88
- rescue => e
89
- puts e
90
- end
87
+ puts args.join(' ')
88
+ puts system(*args)
89
+ rescue => e
90
+ puts e
91
91
  end
92
92
 
93
93
  def write_to_file(path, content)
@@ -12,11 +12,11 @@ class TexturePacker::Cli::Options
12
12
  @hook_run = ->{ puts(TexturePacker::VERSION) }
13
13
  end
14
14
 
15
- opts.on("-h", "--help", "Prints this help") do
15
+ opts.on('-h', '--help', 'Prints this help') do
16
16
  @hook_run = ->{ puts(opts) }
17
17
  end
18
18
 
19
- opts.on("-pPATH", "--project_dir=PATH", "Copy the generated scss files / images to specified project") do |val|
19
+ opts.on('-pPATH', '--project_dir=PATH', 'Copy the generated scss files / images to specified project') do |val|
20
20
  @project_dir = val
21
21
  end
22
22
  end.parse!(argv)
@@ -1,3 +1,3 @@
1
1
  class TexturePacker
2
- VERSION = "1.5.0"
2
+ VERSION = '1.7.1'
3
3
  end
@@ -4,28 +4,28 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'texture_packer/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "texture_packer"
7
+ spec.name = 'texture_packer'
8
8
  spec.version = TexturePacker::VERSION
9
- spec.authors = ["khiav reoy"]
10
- spec.email = ["mrtmrt15xn@yahoo.com.tw"]
9
+ spec.authors = ['khiav reoy']
10
+ spec.email = ['mrtmrt15xn@yahoo.com.tw']
11
11
 
12
- spec.summary = %q{texture packer}
13
- spec.description = %q{texture packer}
14
- spec.homepage = "https://github.com/khiav223577/texture_packer"
15
- spec.license = "MIT"
12
+ spec.summary = 'texture packer'
13
+ spec.description = 'texture packer'
14
+ spec.homepage = 'https://github.com/khiav223577/texture_packer'
15
+ spec.license = 'MIT'
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
18
  # delete this section to allow pushing this gem to any host.
19
- #if spec.respond_to?(:metadata)
19
+ # if spec.respond_to?(:metadata)
20
20
  # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
- #else
21
+ # else
22
22
  # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
- #end
23
+ # end
24
24
 
25
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
- spec.bindir = "executables"
25
+ spec.files = `git ls-files -z`.split("\x0").reject{|f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = 'executables'
27
27
  spec.executables = ['pack_scss']
28
- spec.require_paths = ["lib"]
28
+ spec.require_paths = ['lib']
29
29
 
30
30
  spec.add_development_dependency 'bundler', '>= 1.17', '< 3.x'
31
31
  spec.add_development_dependency 'rake', '~> 12.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: texture_packer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - khiav reoy
8
8
  autorequire:
9
9
  bindir: executables
10
10
  cert_chain: []
11
- date: 2020-04-08 00:00:00.000000000 Z
11
+ date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,6 +81,7 @@ extensions: []
81
81
  extra_rdoc_files: []
82
82
  files:
83
83
  - ".gitignore"
84
+ - ".rubocop.yml"
84
85
  - ".travis.yml"
85
86
  - CHANGELOG.md
86
87
  - CODE_OF_CONDUCT.md
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  - !ruby/object:Gem::Version
114
115
  version: '0'
115
116
  requirements: []
116
- rubygems_version: 3.0.6
117
+ rubygems_version: 3.0.3
117
118
  signing_key:
118
119
  specification_version: 4
119
120
  summary: texture packer