css_parser 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/css_parser.rb CHANGED
@@ -7,7 +7,7 @@ require 'stringio'
7
7
  require 'iconv'
8
8
 
9
9
  module CssParser
10
- VERSION = '1.1.6'
10
+ VERSION = '1.1.7''
11
11
 
12
12
  # Merge multiple CSS RuleSets by cascading according to the CSS 2.1 cascading rules
13
13
  # (http://www.w3.org/TR/REC-CSS2/cascade.html#cascading-order).
@@ -215,6 +215,7 @@ module CssParser
215
215
  block.scan(/([\\]?[{}\s"]|(.[^\s"{}\\]*))/).each do |matches|
216
216
  #block.scan(/((.[^{}"\n\r\f\s]*)[\s]|(.[^{}"\n\r\f]*)\{|(.[^{}"\n\r\f]*)\}|(.[^{}"\n\r\f]*)\"|(.*)[\s]+)/).each do |matches|
217
217
  token = matches[0]
218
+
218
219
  #puts "TOKEN: #{token}" unless token =~ /^[\s]*$/
219
220
  if token =~ /\A"/ # found un-escaped double quote
220
221
  in_string = !in_string
@@ -277,6 +278,11 @@ module CssParser
277
278
  end
278
279
  end
279
280
  end
281
+
282
+ # check for unclosed braces
283
+ if in_declarations > 0
284
+ add_rule!(current_selectors, current_declarations, media_types)
285
+ end
280
286
  end
281
287
 
282
288
  # Load a remote CSS file.
@@ -125,31 +125,6 @@ module CssParser
125
125
  create_font_shorthand!
126
126
  end
127
127
 
128
- private
129
- def parse_declarations!(block) # :nodoc:
130
- @declarations = {}
131
-
132
- return unless block
133
-
134
- block.gsub!(/(^[\s]*)|([\s]*$)/, '')
135
-
136
- block.split(/[\;$]+/m).each do |decs|
137
- if matches = decs.match(/(.[^:]*)\:(.[^;]*)(;|\Z)/i)
138
- property, value, end_of_declaration = matches.captures
139
-
140
- add_declaration!(property, value)
141
- end
142
- end
143
- end
144
-
145
- #--
146
- # TODO: way too simplistic
147
- #++
148
- def parse_selectors!(selectors) # :nodoc:
149
- @selectors = selectors.split(',')
150
- end
151
-
152
- public
153
128
  # Split shorthand dimensional declarations (e.g. <tt>margin: 0px auto;</tt>)
154
129
  # into their constituent parts.
155
130
  def expand_dimensions_shorthand! # :nodoc:
@@ -390,5 +365,29 @@ public
390
365
  end
391
366
 
392
367
  end
368
+
369
+ private
370
+ def parse_declarations!(block) # :nodoc:
371
+ @declarations = {}
372
+
373
+ return unless block
374
+
375
+ block.gsub!(/(^[\s]*)|([\s]*$)/, '')
376
+
377
+ block.split(/[\;$]+/m).each do |decs|
378
+ if matches = decs.match(/(.[^:]*)\:(.[^;]*)(;|\Z)/i)
379
+ property, value, end_of_declaration = matches.captures
380
+
381
+ add_declaration!(property, value)
382
+ end
383
+ end
384
+ end
385
+
386
+ #--
387
+ # TODO: way too simplistic
388
+ #++
389
+ def parse_selectors!(selectors) # :nodoc:
390
+ @selectors = selectors.split(',')
391
+ end
393
392
  end
394
393
  end
@@ -27,6 +27,11 @@ class CssParserBasicTests < Test::Unit::TestCase
27
27
  assert_equal 'margin: 0px;', @cp.find_by_selector('body').join
28
28
  end
29
29
 
30
+ def test_adding_block_without_closing_brace
31
+ @cp.add_block!('p { color: red;')
32
+ assert_equal 'color: red;', @cp.find_by_selector('p').join
33
+ end
34
+
30
35
  def test_adding_a_rule
31
36
  @cp.add_rule!('div', 'color: blue;')
32
37
  assert_equal 'color: blue;', @cp.find_by_selector('div').join(' ')
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 6
9
- version: 1.1.6
8
+ - 7
9
+ version: 1.1.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alex Dunae
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-03-25 00:00:00 -07:00
17
+ date: 2011-03-29 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies: []
20
20