css_parser 1.4.2 → 1.4.3
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 +4 -4
- data/lib/css_parser/parser.rb +25 -2
- data/lib/css_parser/rule_set.rb +22 -22
- data/lib/css_parser/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2235852355e4765608d07c7f501095cdf831e99
|
4
|
+
data.tar.gz: e10526e998c3791112043380ae0e90d170f0af0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db43d815d770ac070f6d24a660566467e55ee80bcf88d0a7dd976b9e01c36fe5f22b10d749e28264101e26c4350b35f61b02ff2eab967334e9166d20fd92658a
|
7
|
+
data.tar.gz: af2feaacfd1770feb88fd301d8a994feb36735bb224d0a5004420e41b8e2d6e27d682680db64c90df3229f55e908b171f19dbda063a5702a87d213cc61d0246f
|
data/lib/css_parser/parser.rb
CHANGED
@@ -22,7 +22,9 @@ module CssParser
|
|
22
22
|
# Initial parsing
|
23
23
|
RE_AT_IMPORT_RULE = /\@import\s*(?:url\s*)?(?:\()?(?:\s*)["']?([^'"\s\)]*)["']?\)?([\w\s\,^\]\(\))]*)\)?[;\n]?/
|
24
24
|
|
25
|
-
|
25
|
+
MAX_REDIRECTS = 3
|
26
|
+
|
27
|
+
# Array of CSS files that have been loaded.
|
26
28
|
attr_reader :loaded_uris
|
27
29
|
|
28
30
|
#--
|
@@ -438,7 +440,21 @@ module CssParser
|
|
438
440
|
# TODO: add option to fail silently or throw and exception on a 404
|
439
441
|
#++
|
440
442
|
def read_remote_file(uri) # :nodoc:
|
441
|
-
|
443
|
+
if @redirect_count.nil?
|
444
|
+
@redirect_count = 0
|
445
|
+
else
|
446
|
+
@redirect_count += 1
|
447
|
+
end
|
448
|
+
|
449
|
+
unless circular_reference_check(uri.to_s)
|
450
|
+
@redirect_count = nil
|
451
|
+
return nil, nil
|
452
|
+
end
|
453
|
+
|
454
|
+
if @redirect_count > MAX_REDIRECTS
|
455
|
+
@redirect_count = nil
|
456
|
+
return nil, nil
|
457
|
+
end
|
442
458
|
|
443
459
|
src = '', charset = nil
|
444
460
|
|
@@ -466,8 +482,13 @@ module CssParser
|
|
466
482
|
charset = fh.respond_to?(:charset) ? fh.charset : 'utf-8'
|
467
483
|
|
468
484
|
if res.code.to_i >= 400
|
485
|
+
@redirect_count = nil
|
469
486
|
raise RemoteFileError if @options[:io_exceptions]
|
470
487
|
return '', nil
|
488
|
+
elsif res.code.to_i == 301 or res.code.to_i == 302
|
489
|
+
if res.response['Location'] != nil
|
490
|
+
return read_remote_file Addressable::URI.parse(URI::encode(res.response['Location']))
|
491
|
+
end
|
471
492
|
end
|
472
493
|
|
473
494
|
case res['content-encoding']
|
@@ -489,10 +510,12 @@ module CssParser
|
|
489
510
|
end
|
490
511
|
end
|
491
512
|
rescue
|
513
|
+
@redirect_count = nil
|
492
514
|
raise RemoteFileError if @options[:io_exceptions]
|
493
515
|
return nil, nil
|
494
516
|
end
|
495
517
|
|
518
|
+
@redirect_count = nil
|
496
519
|
return src, charset
|
497
520
|
end
|
498
521
|
|
data/lib/css_parser/rule_set.rb
CHANGED
@@ -9,7 +9,7 @@ module CssParser
|
|
9
9
|
|
10
10
|
# Array of selector strings.
|
11
11
|
attr_reader :selectors
|
12
|
-
|
12
|
+
|
13
13
|
# Integer with the specificity to use for this RuleSet.
|
14
14
|
attr_accessor :specificity
|
15
15
|
|
@@ -55,7 +55,7 @@ module CssParser
|
|
55
55
|
@declarations.delete(property)
|
56
56
|
return
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
value.gsub!(/;\Z/, '')
|
60
60
|
is_important = !value.gsub!(CssParser::IMPORTANT_IN_PROPERTY_RX, '').nil?
|
61
61
|
property = property.downcase.strip
|
@@ -173,7 +173,7 @@ module CssParser
|
|
173
173
|
split_declaration(k, "#{k}-color", value.slice!(CssParser::RE_COLOUR))
|
174
174
|
split_declaration(k, "#{k}-style", value.slice!(CssParser::RE_BORDER_STYLE))
|
175
175
|
|
176
|
-
@declarations.delete(k)
|
176
|
+
@declarations.delete(k)
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
@@ -182,20 +182,20 @@ module CssParser
|
|
182
182
|
def expand_dimensions_shorthand! # :nodoc:
|
183
183
|
{'margin' => 'margin-%s',
|
184
184
|
'padding' => 'padding-%s',
|
185
|
-
'border-color' => 'border-%s-color',
|
186
|
-
'border-style' => 'border-%s-style',
|
185
|
+
'border-color' => 'border-%s-color',
|
186
|
+
'border-style' => 'border-%s-style',
|
187
187
|
'border-width' => 'border-%s-width'}.each do |property, expanded|
|
188
188
|
|
189
189
|
next unless @declarations.has_key?(property)
|
190
|
-
|
190
|
+
|
191
191
|
value = @declarations[property][:value]
|
192
192
|
|
193
193
|
# RGB and HSL values in borders are the only units that can have spaces (within params).
|
194
|
-
# We cheat a bit here by stripping spaces after commas in RGB and HSL values so that we
|
194
|
+
# We cheat a bit here by stripping spaces after commas in RGB and HSL values so that we
|
195
195
|
# can split easily on spaces.
|
196
196
|
#
|
197
197
|
# TODO: rgba, hsl, hsla
|
198
|
-
value.gsub!(RE_COLOUR) { |c| c.gsub(/
|
198
|
+
value.gsub!(RE_COLOUR) { |c| c.gsub(/(\s?\,\s?)/, ',') }
|
199
199
|
|
200
200
|
matches = value.strip.split(/[\s]+/)
|
201
201
|
|
@@ -348,14 +348,14 @@ module CssParser
|
|
348
348
|
|
349
349
|
create_shorthand_properties! BACKGROUND_PROPERTIES, 'background'
|
350
350
|
end
|
351
|
-
|
351
|
+
|
352
352
|
# Combine border-color, border-style and border-width into border
|
353
353
|
# Should be run after create_dimensions_shorthand!
|
354
354
|
#
|
355
355
|
# TODO: this is extremely similar to create_background_shorthand! and should be combined
|
356
356
|
def create_border_shorthand! # :nodoc:
|
357
357
|
values = []
|
358
|
-
|
358
|
+
|
359
359
|
['border-width', 'border-style', 'border-color'].each do |property|
|
360
360
|
if @declarations.has_key?(property) and not @declarations[property][:is_important]
|
361
361
|
# can't merge if any value contains a space (i.e. has multiple values)
|
@@ -373,16 +373,16 @@ module CssParser
|
|
373
373
|
@declarations['border'] = {:value => values.join(' ')}
|
374
374
|
end
|
375
375
|
end
|
376
|
-
|
377
|
-
# Looks for long format CSS dimensional properties (margin, padding, border-color, border-style and border-width)
|
376
|
+
|
377
|
+
# Looks for long format CSS dimensional properties (margin, padding, border-color, border-style and border-width)
|
378
378
|
# and converts them into shorthand CSS properties.
|
379
379
|
def create_dimensions_shorthand! # :nodoc:
|
380
380
|
directions = ['top', 'right', 'bottom', 'left']
|
381
381
|
|
382
382
|
{'margin' => 'margin-%s',
|
383
383
|
'padding' => 'padding-%s',
|
384
|
-
'border-color' => 'border-%s-color',
|
385
|
-
'border-style' => 'border-%s-style',
|
384
|
+
'border-color' => 'border-%s-color',
|
385
|
+
'border-style' => 'border-%s-style',
|
386
386
|
'border-width' => 'border-%s-width'}.each do |property, expanded|
|
387
387
|
|
388
388
|
top, right, bottom, left = ['top', 'right', 'bottom', 'left'].map { |side| expanded % side }
|
@@ -396,7 +396,7 @@ module CssParser
|
|
396
396
|
directions.each { |d| values[d.to_sym] = @declarations[expanded % d][:value].downcase.strip }
|
397
397
|
|
398
398
|
if values[:left] == values[:right]
|
399
|
-
if values[:top] == values[:bottom]
|
399
|
+
if values[:top] == values[:bottom]
|
400
400
|
if values[:top] == values[:left] # All four sides are equal
|
401
401
|
new_value = values[:top]
|
402
402
|
else # Top and bottom are equal, left and right are equal
|
@@ -419,8 +419,8 @@ module CssParser
|
|
419
419
|
end
|
420
420
|
|
421
421
|
|
422
|
-
# Looks for long format CSS font properties (e.g. <tt>font-weight</tt>) and
|
423
|
-
# tries to convert them into a shorthand CSS <tt>font</tt> property. All
|
422
|
+
# Looks for long format CSS font properties (e.g. <tt>font-weight</tt>) and
|
423
|
+
# tries to convert them into a shorthand CSS <tt>font</tt> property. All
|
424
424
|
# font properties must be present in order to create a shorthand declaration.
|
425
425
|
def create_font_shorthand! # :nodoc:
|
426
426
|
['font-style', 'font-variant', 'font-weight', 'font-size',
|
@@ -468,17 +468,17 @@ module CssParser
|
|
468
468
|
|
469
469
|
if @declarations.has_key?(dest)
|
470
470
|
#puts "dest #{dest} already exists"
|
471
|
-
|
471
|
+
|
472
472
|
if @declarations[dest][:order] > @declarations[src][:order]
|
473
|
-
#puts "skipping #{dest}:#{v} due to order "
|
473
|
+
#puts "skipping #{dest}:#{v} due to order "
|
474
474
|
return
|
475
475
|
else
|
476
|
-
@declarations[dest] = {}
|
476
|
+
@declarations[dest] = {}
|
477
477
|
end
|
478
478
|
end
|
479
|
-
@declarations[dest] = @declarations[src].merge({:value => v.to_s.strip})
|
479
|
+
@declarations[dest] = @declarations[src].merge({:value => v.to_s.strip})
|
480
480
|
end
|
481
|
-
|
481
|
+
|
482
482
|
def parse_declarations!(block) # :nodoc:
|
483
483
|
@declarations = {}
|
484
484
|
|
data/lib/css_parser/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: css_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Dunae
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project:
|
59
|
-
rubygems_version: 2.
|
59
|
+
rubygems_version: 2.5.1
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: Ruby CSS parser.
|