habaki 0.5.1 → 0.5.2

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
  SHA256:
3
- metadata.gz: eb31379da24aff32519428d320bfd20e20445f009c8912cdbbf940822a64a35c
4
- data.tar.gz: ea74632fd8cb95ac348fcfc95463b8aa2cb1ee452f224fdc0b5c4774d276d669
3
+ metadata.gz: 0ee20d465ea2f474b8f107ecf41a360004ce2af899e743cd86670ed782627702
4
+ data.tar.gz: 59fb98647b7107ace1fbbc80e92d91520c06fa5853abdb1ef25cf65f28c78a73
5
5
  SHA512:
6
- metadata.gz: 116dbb8a23a4ec449e2544e9c9f63ce894b80d5e2c3dc5b3393fa6792baf3b616407817f0169cad20409e107942d90b699a79ce3dfa3a3f4e32d0bf4600877d4
7
- data.tar.gz: 844e6cf9e458d98a7458688a3335d4ccecd6b23cd73b798b755b575feda5ba6f1b853ac2abdd5d1cf4145f6e75c41e2ddf69f1794543b32020169d2ae6d6859a
6
+ metadata.gz: e0e5593ac13b7eff2064fb75a51a26e829fda0658fdb3b2d1491f1bdd6212299e00516f6776a0436f9f43939f9739f875f8c73d77dd5e88e05bb5755cc789b21
7
+ data.tar.gz: e660626ccaee9bec98a5392bc57cc3dc2ede8526437e4056f6fd2c771a1b4e1c14eabcec6e5b9817fb71fc80a247b3678d1f87b8d73f78db0767255432a22a11
@@ -98,8 +98,8 @@ module Habaki
98
98
  props[match.reference] << match.value
99
99
  end
100
100
 
101
- props.each do |k, v|
102
- new_decl = add_by_property(k, Values.new([v].flatten))
101
+ props.each do |prop, values|
102
+ new_decl = add_by_property(prop, values)
103
103
  new_decl.position = declaration.position
104
104
  end
105
105
 
@@ -122,10 +122,10 @@ module Habaki
122
122
  border_style_properties = %w[border-width border-style border-color]
123
123
 
124
124
  border_style_properties.each do |prop|
125
- create_shorthand_properties! prop unless find_by_property(prop)
125
+ create_shorthand_properties! prop unless has_property?(prop)
126
126
  end
127
127
 
128
- create_shorthand_properties! 'border' if border_style_properties.map{|prop| find_by_property(prop)}.all?
128
+ create_shorthand_properties! 'border' if border_style_properties.map{|prop| has_property?(prop)}.all?
129
129
  end
130
130
 
131
131
  # Looks for long format CSS background properties (e.g. <tt>background-color</tt>) and
@@ -159,15 +159,37 @@ module Habaki
159
159
  create_shorthand_properties! 'list-style'
160
160
  end
161
161
 
162
+ def self.shorthand_properties(shorthand_property)
163
+ nodes = []
164
+ FormalSyntax::Tree.tree.property("--shorthand-"+shorthand_property).traverse do |node|
165
+ nodes << {type: node.type, value: node.value, next_value: node.parent&.children&.last&.value} if [:ref, :token].include?(node.type)
166
+ end
167
+ nodes
168
+ end
169
+
170
+ PRECOMPUTED_SHORTHAND_PROPS = {
171
+ "background" => shorthand_properties("background"),
172
+ "font" => shorthand_properties("font"),
173
+ "list-style" => shorthand_properties("list-style"),
174
+ "border" => shorthand_properties("border"),
175
+ "border-top" => shorthand_properties("border-top"),
176
+ "border-bottom" => shorthand_properties("border-bottom"),
177
+ "border-left" => shorthand_properties("border-left"),
178
+ "border-right" => shorthand_properties("border-right"),
179
+ "border-width" => shorthand_properties("border-width"),
180
+ "border-style" => shorthand_properties("border-style"),
181
+ "border-color" => shorthand_properties("border-color"),
182
+ }
183
+
162
184
  # Combine several properties into a shorthand one
163
185
  def create_shorthand_properties!(shorthand_property, need_all = false)
164
186
  properties_to_delete = []
165
-
166
187
  new_values = []
167
- FormalSyntax::Tree.tree.property("--shorthand-"+shorthand_property).traverse do |node|
168
- case node.type
188
+
189
+ PRECOMPUTED_SHORTHAND_PROPS[shorthand_property].each do |node|
190
+ case node[:type]
169
191
  when :ref
170
- decl = find_by_property(node.value)
192
+ decl = find_by_property(node[:value])
171
193
  if decl
172
194
  properties_to_delete << decl.property
173
195
  new_values += decl.values
@@ -176,7 +198,7 @@ module Habaki
176
198
  end
177
199
  when :token
178
200
  # only if next node property is present (line-height, background-size)
179
- new_values << Operator.new(node.value) if node.parent&.children&.last&.value && find_by_property(node.parent.children.last.value)
201
+ new_values << Operator.new(node[:value]) if node[:next_value] && has_property?(node[:next_value])
180
202
  end
181
203
  end
182
204
 
@@ -251,11 +273,6 @@ module Habaki
251
273
  decls
252
274
  end
253
275
 
254
- def push_declaration(decl)
255
- @hash[decl.property] = decl
256
- push decl
257
- end
258
-
259
276
  # Parse inline declarations and append to current declarations
260
277
  # @param [String] data
261
278
  # @return [void]
@@ -268,6 +285,12 @@ module Habaki
268
285
  end
269
286
  end
270
287
 
288
+ # Does declaration with property present ?
289
+ # @return [Boolean]
290
+ def has_property?(property)
291
+ @hash.has_key?(property)
292
+ end
293
+
271
294
  # Find declaration with property
272
295
  # @param [String] property
273
296
  # @return [Declaration]
@@ -342,5 +365,13 @@ module Habaki
342
365
  push_declaration Declaration.read_from_katana(decl)
343
366
  end
344
367
  end
368
+
369
+ private
370
+
371
+ def push_declaration(decl)
372
+ @hash[decl.property] = decl
373
+ push decl
374
+ end
375
+
345
376
  end
346
377
  end
@@ -67,7 +67,7 @@ module Habaki
67
67
  when :token
68
68
  str += @value
69
69
  when :ref
70
- str += "'#{@value}'"
70
+ str += "<'#{@value}'>"
71
71
  when :type
72
72
  str += "<#{@value}>"
73
73
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: habaki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Boulnois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-10 00:00:00.000000000 Z
11
+ date: 2022-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement