haml-edge 2.3.193 → 2.3.194
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.
- data/EDGE_GEM_VERSION +1 -1
- data/VERSION +1 -1
- data/lib/sass/engine.rb +5 -7
- data/lib/sass/script/css_lexer.rb +1 -4
- data/lib/sass/script/lexer.rb +2 -2
- data/lib/sass/script/string.rb +0 -2
- data/lib/sass/script/string_interpolation.rb +36 -2
- data/lib/sass/scss/parser.rb +4 -21
- data/lib/sass/tree/prop_node.rb +4 -0
- data/test/sass/conversion_test.rb +58 -5
- data/test/sass/engine_test.rb +1 -15
- data/test/sass/results/script.css +4 -4
- data/test/sass/script_conversion_test.rb +20 -2
- data/test/sass/script_test.rb +3 -3
- data/test/sass/scss/css_test.rb +26 -3
- data/test/sass/templates/import.sass +1 -1
- metadata +2 -3
- data/lib/sass/tree/raw_node.rb +0 -33
data/EDGE_GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.194
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.194
|
data/lib/sass/engine.rb
CHANGED
@@ -6,7 +6,6 @@ require 'sass/tree/rule_node'
|
|
6
6
|
require 'sass/tree/comment_node'
|
7
7
|
require 'sass/tree/prop_node'
|
8
8
|
require 'sass/tree/directive_node'
|
9
|
-
require 'sass/tree/raw_node'
|
10
9
|
require 'sass/tree/variable_node'
|
11
10
|
require 'sass/tree/mixin_def_node'
|
12
11
|
require 'sass/tree/mixin_node'
|
@@ -462,10 +461,13 @@ WARNING
|
|
462
461
|
|
463
462
|
# If value begins with url( or ",
|
464
463
|
# it's a CSS @import rule and we don't want to touch it.
|
465
|
-
if directive == "import" && value !~ /^(url\(|")/
|
464
|
+
if directive == "import" && value !~ /^(url\(|["'])/
|
466
465
|
raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath import directives.",
|
467
466
|
:line => @line + 1) unless line.children.empty?
|
468
|
-
value.split(/,\s*/).map
|
467
|
+
value.split(/,\s*/).map do |f|
|
468
|
+
f = $1 || $2 || $3 if f =~ Sass::SCSS::RX::STRING || f =~ Sass::SCSS::RX::URI
|
469
|
+
Tree::ImportNode.new(f)
|
470
|
+
end
|
469
471
|
elsif directive == "mixin"
|
470
472
|
parse_mixin_definition(line)
|
471
473
|
elsif directive == "include"
|
@@ -486,10 +488,6 @@ WARNING
|
|
486
488
|
:line => @line + 1) unless line.children.empty?
|
487
489
|
offset = line.offset + line.text.index(value).to_i
|
488
490
|
Tree::DebugNode.new(parse_script(value, :offset => offset))
|
489
|
-
elsif directive == "raw"
|
490
|
-
raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath raw directives.",
|
491
|
-
:line => @line + 1) unless line.children.empty?
|
492
|
-
Tree::RawNode.new(value)
|
493
491
|
else
|
494
492
|
Tree::DirectiveNode.new(line.text)
|
495
493
|
end
|
@@ -7,10 +7,7 @@ module Sass
|
|
7
7
|
|
8
8
|
def string(*args)
|
9
9
|
return unless scan(STRING)
|
10
|
-
|
11
|
-
gsub(/\\([^0-9a-f])/, '\1').
|
12
|
-
gsub(/\\([0-9a-f]{1,4})/, "\\\\\\1")
|
13
|
-
[:string, Script::String.new(str, :string)]
|
10
|
+
[:string, Script::String.new((@scanner[1] || @scanner[2]).gsub(/\\(['"])/, '\1'), :string)]
|
14
11
|
end
|
15
12
|
|
16
13
|
def important
|
data/lib/sass/script/lexer.rb
CHANGED
@@ -237,13 +237,13 @@ module Sass
|
|
237
237
|
|
238
238
|
def ident
|
239
239
|
return unless s = scan(REGULAR_EXPRESSIONS[:ident])
|
240
|
-
[:ident, s
|
240
|
+
[:ident, s]
|
241
241
|
end
|
242
242
|
|
243
243
|
def string(re, open)
|
244
244
|
return unless scan(STRING_REGULAR_EXPRESSIONS[[re, open]])
|
245
245
|
@interpolation_stack << re if @scanner[2].empty? # Started an interpolated section
|
246
|
-
[:string, Script::String.new(@scanner[1].gsub(/\\([
|
246
|
+
[:string, Script::String.new(@scanner[1].gsub(/\\(['"]|\#\{)/, '\1'), :string)]
|
247
247
|
end
|
248
248
|
|
249
249
|
def number
|
data/lib/sass/script/string.rb
CHANGED
@@ -55,8 +55,6 @@ module Sass::Script
|
|
55
55
|
return self.value
|
56
56
|
end
|
57
57
|
|
58
|
-
# Replace single backslashes with double. Really.
|
59
|
-
value = self.value.gsub("\\", "\\\\\\\\")
|
60
58
|
return "\"#{value.gsub('"', "\\\"")}\"" if opts[:quote] == %q{"}
|
61
59
|
return "'#{value.gsub("'", "\\'")}'" if opts[:quote] == %q{'}
|
62
60
|
return "\"#{value}\"" unless value.include?('"')
|
@@ -11,10 +11,31 @@ module Sass::Script
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def to_sass(opts = {})
|
14
|
+
# We can get rid of all of this when we remove the deprecated :equals context
|
15
|
+
before_unquote, before_quote_char, before_str = parse_str(@before.to_sass(opts))
|
16
|
+
after_unquote, after_quote_char, after_str = parse_str(@after.to_sass(opts))
|
17
|
+
unquote = before_unquote || after_unquote ||
|
18
|
+
(before_quote_char && !after_quote_char && !after_str.empty?) ||
|
19
|
+
(!before_quote_char && after_quote_char && !before_str.empty?)
|
20
|
+
quote_char =
|
21
|
+
if before_quote_char && after_quote_char && before_quote_char != after_quote_char
|
22
|
+
before_str.gsub!("\\'", "'")
|
23
|
+
before_str.gsub!('"', "\\\"")
|
24
|
+
after_str.gsub!("\\'", "'")
|
25
|
+
after_str.gsub!('"', "\\\"")
|
26
|
+
'"'
|
27
|
+
else
|
28
|
+
before_quote_char || after_quote_char
|
29
|
+
end
|
30
|
+
|
14
31
|
res = ""
|
15
|
-
res <<
|
32
|
+
res << 'unquote(' if unquote
|
33
|
+
res << quote_char if quote_char
|
34
|
+
res << before_str
|
16
35
|
res << '#{' << @mid.to_sass(opts) << '}'
|
17
|
-
res <<
|
36
|
+
res << after_str
|
37
|
+
res << quote_char if quote_char
|
38
|
+
res << ')' if unquote
|
18
39
|
res
|
19
40
|
end
|
20
41
|
|
@@ -32,5 +53,18 @@ module Sass::Script
|
|
32
53
|
res << @after.perform(environment).value
|
33
54
|
Sass::Script::String.new(res, :string)
|
34
55
|
end
|
56
|
+
|
57
|
+
def parse_str(str)
|
58
|
+
case str
|
59
|
+
when /^unquote\((["'])(.*)\1\)$/
|
60
|
+
return true, $1, $2
|
61
|
+
when '""'
|
62
|
+
return false, nil, ""
|
63
|
+
when /^(["'])(.*)\1$/
|
64
|
+
return false, $1, $2
|
65
|
+
else
|
66
|
+
return false, nil, str
|
67
|
+
end
|
68
|
+
end
|
35
69
|
end
|
36
70
|
end
|
data/lib/sass/scss/parser.rb
CHANGED
@@ -276,13 +276,6 @@ module Sass
|
|
276
276
|
node.has_children = true
|
277
277
|
tok!(/\{/)
|
278
278
|
block_contents(node, context)
|
279
|
-
|
280
|
-
# Support the hack of having # after all properties.
|
281
|
-
if context == :ruleset && tok(/#/)
|
282
|
-
node << Sass::Tree::RawNode.new("#")
|
283
|
-
ss
|
284
|
-
end
|
285
|
-
|
286
279
|
tok!(/\}/)
|
287
280
|
node
|
288
281
|
end
|
@@ -383,10 +376,8 @@ module Sass
|
|
383
376
|
['.', expr!(:interp_ident)]
|
384
377
|
end
|
385
378
|
|
386
|
-
# @private
|
387
|
-
ID_START = /#(?=#{NMCHAR})/
|
388
379
|
def id_selector
|
389
|
-
return unless tok(
|
380
|
+
return unless tok(/#(?!\{)/)
|
390
381
|
@expected = "id name"
|
391
382
|
['#', expr!(:interp_name)]
|
392
383
|
end
|
@@ -463,8 +454,8 @@ module Sass
|
|
463
454
|
|
464
455
|
def declaration
|
465
456
|
# This allows the "*prop: val", ":prop: val", and ".prop: val" hacks
|
466
|
-
if s = tok(/[:\*\.]/)
|
467
|
-
@use_property_exception = s
|
457
|
+
if s = tok(/[:\*\.]|\#(?!\{)/)
|
458
|
+
@use_property_exception = s !~ /[\.\#]/
|
468
459
|
name = [s, str{ss}, *expr!(:interp_ident)]
|
469
460
|
else
|
470
461
|
return unless name = interp_ident
|
@@ -665,15 +656,6 @@ MESSAGE
|
|
665
656
|
pos = scanner.pos
|
666
657
|
|
667
658
|
after = scanner.string[0...pos]
|
668
|
-
was = scanner.rest.dup
|
669
|
-
|
670
|
-
# We support the foo {a: b; #} hack,
|
671
|
-
# but we don't want it cluttering our errors.
|
672
|
-
if after =~ /\#$/ && expected == '"}"'
|
673
|
-
after.slice!(-1)
|
674
|
-
was = '#' + was
|
675
|
-
end
|
676
|
-
|
677
659
|
# Get rid of whitespace between pos and the last token,
|
678
660
|
# but only if there's a newline in there
|
679
661
|
after.gsub!(/\s*\n\s*$/, '')
|
@@ -681,6 +663,7 @@ MESSAGE
|
|
681
663
|
after.gsub!(/.*\n/, '')
|
682
664
|
after = "..." + after[-15..-1] if after.size > 18
|
683
665
|
|
666
|
+
was = scanner.rest.dup
|
684
667
|
# Get rid of whitespace between pos and the next token,
|
685
668
|
# but only if there's a newline in there
|
686
669
|
was.gsub!(/^\s*\n\s*/, '')
|
data/lib/sass/tree/prop_node.rb
CHANGED
@@ -80,6 +80,10 @@ module Sass::Tree
|
|
80
80
|
|
81
81
|
def to_src(tabs, opts, fmt)
|
82
82
|
name = self.name.map {|n| n.is_a?(String) ? n : "\#{#{n.to_sass(opts)}}"}.join
|
83
|
+
if name[0] == ?:
|
84
|
+
raise Sass::SyntaxError.new("The \":#{name}: #{self.class.val_to_sass(value, opts)}\" hack is not allowed in the Sass indented syntax")
|
85
|
+
end
|
86
|
+
|
83
87
|
old = opts[:old] && fmt == :sass
|
84
88
|
initial = old ? ':' : ''
|
85
89
|
mid = old ? '' : ':'
|
@@ -777,18 +777,71 @@ SCSS
|
|
777
777
|
assert_sass_to_scss '$var: 12px $bar baz !default;', '$var ||= 12px $bar "baz"'
|
778
778
|
end
|
779
779
|
|
780
|
-
|
780
|
+
# Hacks
|
781
|
+
|
782
|
+
def test_declaration_hacks
|
781
783
|
assert_renders <<SASS, <<SCSS
|
782
784
|
foo
|
783
|
-
|
784
|
-
|
785
|
+
_name: val
|
786
|
+
*name: val
|
787
|
+
#name: val
|
788
|
+
.name: val
|
789
|
+
name: val
|
785
790
|
SASS
|
786
791
|
foo {
|
787
|
-
|
788
|
-
|
792
|
+
_name: val;
|
793
|
+
*name: val;
|
794
|
+
#name: val;
|
795
|
+
.name: val;
|
796
|
+
name: val; }
|
789
797
|
SCSS
|
790
798
|
end
|
791
799
|
|
800
|
+
def test_old_declaration_hacks
|
801
|
+
assert_renders <<SASS, <<SCSS, :old => true
|
802
|
+
foo
|
803
|
+
:_name val
|
804
|
+
:*name val
|
805
|
+
:#name val
|
806
|
+
:.name val
|
807
|
+
:name val
|
808
|
+
SASS
|
809
|
+
foo {
|
810
|
+
_name: val;
|
811
|
+
*name: val;
|
812
|
+
#name: val;
|
813
|
+
.name: val;
|
814
|
+
name: val; }
|
815
|
+
SCSS
|
816
|
+
end
|
817
|
+
|
818
|
+
def test_selector_hacks
|
819
|
+
assert_selector_renders = lambda do |s|
|
820
|
+
assert_renders <<SASS, <<SCSS
|
821
|
+
#{s}
|
822
|
+
a: b
|
823
|
+
SASS
|
824
|
+
#{s} {
|
825
|
+
a: b; }
|
826
|
+
SCSS
|
827
|
+
end
|
828
|
+
|
829
|
+
assert_selector_renders['> E']
|
830
|
+
assert_selector_renders['+ E']
|
831
|
+
assert_selector_renders['~ E']
|
832
|
+
assert_selector_renders['>> E']
|
833
|
+
|
834
|
+
assert_selector_renders['E*']
|
835
|
+
assert_selector_renders['E*.foo']
|
836
|
+
assert_selector_renders['E*:hover']
|
837
|
+
end
|
838
|
+
|
839
|
+
def test_disallowed_colon_hack
|
840
|
+
assert_raise(Sass::SyntaxError, '":foo: bar" is not allowed in the Sass syntax') do
|
841
|
+
to_sass("foo {:name: val;}", :syntax => :scss)
|
842
|
+
end
|
843
|
+
end
|
844
|
+
|
792
845
|
# Sass 3 Deprecation conversions
|
793
846
|
|
794
847
|
def test_simple_quoted_strings_unquoted_with_equals
|
data/test/sass/engine_test.rb
CHANGED
@@ -56,7 +56,6 @@ MSG
|
|
56
56
|
"@import foo.sass" => "File to import not found or unreadable: foo.sass.",
|
57
57
|
"a,\n$b: 1" => ["Rules can\'t end in commas.", 1],
|
58
58
|
"$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.",
|
59
|
-
"@raw foo {}\n a: b\n" => "Illegal nesting: Nothing may be nested beneath raw directives.",
|
60
59
|
"@import foo.sass" => <<MSG,
|
61
60
|
File to import not found or unreadable: foo.sass.
|
62
61
|
Load paths:
|
@@ -590,20 +589,6 @@ END
|
|
590
589
|
assert_equal("@a{b:c;#d{e:f}g:h}\n", render(to_render, :style => :compressed))
|
591
590
|
end
|
592
591
|
|
593
|
-
def test_raw_directive
|
594
|
-
assert_equal(<<CSS, render(<<SASS))
|
595
|
-
foo {
|
596
|
-
bar {
|
597
|
-
baz: bang;
|
598
|
-
# }
|
599
|
-
CSS
|
600
|
-
@raw foo {
|
601
|
-
bar
|
602
|
-
baz: bang
|
603
|
-
@raw #
|
604
|
-
SASS
|
605
|
-
end
|
606
|
-
|
607
592
|
def test_line_annotations
|
608
593
|
assert_equal(<<CSS, render(<<SASS, :line_comments => true, :style => :compact))
|
609
594
|
/* line 2, test_line_annotations_inline.sass */
|
@@ -1906,3 +1891,4 @@ SASS
|
|
1906
1891
|
Sass::Files.send(:sassc_filename, sassc_path, Sass::Engine::DEFAULT_OPTIONS)
|
1907
1892
|
end
|
1908
1893
|
end
|
1894
|
+
|
@@ -1,7 +1,7 @@
|
|
1
|
-
#main { content: Hello
|
2
|
-
#main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10
|
1
|
+
#main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color: black; color: #ffffaa; short-color: #112233; named-color: olive; con: "foo" bar(9 hi there "boom"); con2: "noquo" quo; }
|
2
|
+
#main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10 \+12; many: 6; order: 7; complex: #4c9db1hi16; }
|
3
3
|
|
4
|
-
#plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi there"; str-str2: "hi there"; str-col: "14em solid #112233"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; }
|
4
|
+
#plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi\ there"; str-str2: "hi there"; str-col: "14em solid #112233"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; }
|
5
5
|
|
6
6
|
#minus { num-num: 900; col-num: #f9f9f4; col-col: #000035; unary-num: -1; unary-const: 10; unary-paren: -11; unary-two: 12; unary-many: 12; unary-crazy: -15; }
|
7
7
|
|
@@ -11,6 +11,6 @@
|
|
11
11
|
|
12
12
|
#mod { num-num: 2; col-col: #0f0e05; col-num: #020001; }
|
13
13
|
|
14
|
-
#const { escaped-quote:
|
14
|
+
#const { escaped-quote: \$foo \!bar; default: Hello\! !important; }
|
15
15
|
|
16
16
|
#regression { a: 4; }
|
@@ -161,7 +161,23 @@ RUBY
|
|
161
161
|
assert_renders '"foo #{$bar} #{$bang} baz"'
|
162
162
|
assert_renders '"#{$bar}baz"'
|
163
163
|
assert_renders '"foo#{$bar}"'
|
164
|
-
|
164
|
+
assert_equal '#{$bar}', render('"#{$bar}"')
|
165
|
+
|
166
|
+
assert_equal '"foo#{$bar}baz"', render("'foo\#{$bar}baz'")
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_sass2_string_interpolation
|
170
|
+
assert_equal 'foo#{$bar}baz', render('"foo#{$bar}baz"', :context => :equals)
|
171
|
+
assert_equal '#{$bar}baz', render('"#{$bar}baz"', :context => :equals)
|
172
|
+
assert_equal 'foo#{$bar}', render('"foo#{$bar}"', :context => :equals)
|
173
|
+
|
174
|
+
assert_equal 'unquote(".foo#{$bar}.bar")', render('".foo#{$bar}.bar"', :context => :equals)
|
175
|
+
assert_equal 'unquote(".foo#{$bar}")', render('".foo#{$bar}"', :context => :equals)
|
176
|
+
assert_equal 'unquote("#{$bar}.bar")', render('"#{$bar}.bar"', :context => :equals)
|
177
|
+
|
178
|
+
assert_equal "unquote(\"f'o\#{$bar}b'z\")", render("'f\\'o\#{$bar}b\\'z'", :context => :equals)
|
179
|
+
assert_equal "unquote('f\"o\#{$bar}b\"z')", render("'f\\\"o\#{$bar}b\\\"z'", :context => :equals)
|
180
|
+
assert_equal "unquote(\"f'o\#{$bar}b\\\"z\")", render("'f\\'o\#{$bar}b\\\"z'", :context => :equals)
|
165
181
|
end
|
166
182
|
|
167
183
|
private
|
@@ -172,6 +188,8 @@ RUBY
|
|
172
188
|
|
173
189
|
def render(script, options = {})
|
174
190
|
munge_filename(options)
|
175
|
-
Sass::Script.parse(script, 1, 0, options)
|
191
|
+
node = Sass::Script.parse(script, 1, 0, options)
|
192
|
+
node.context = options[:context] if options[:context]
|
193
|
+
node.to_sass
|
176
194
|
end
|
177
195
|
end
|
data/test/sass/script_test.rb
CHANGED
@@ -25,12 +25,12 @@ class SassScriptTest < Test::Unit::TestCase
|
|
25
25
|
def test_string_escapes
|
26
26
|
assert_equal "'", resolve("\"'\"")
|
27
27
|
assert_equal '"', resolve("\"\\\"\"")
|
28
|
-
assert_equal "
|
28
|
+
assert_equal "\\\\", resolve("\"\\\\\"")
|
29
29
|
assert_equal "\\02fa", resolve("\"\\02fa\"")
|
30
30
|
|
31
31
|
assert_equal "'", resolve("'\\''")
|
32
32
|
assert_equal '"', resolve("'\"'")
|
33
|
-
assert_equal "
|
33
|
+
assert_equal "\\\\", resolve("'\\\\'")
|
34
34
|
assert_equal "\\02fa", resolve("'\\02fa'")
|
35
35
|
end
|
36
36
|
|
@@ -290,7 +290,7 @@ SASS
|
|
290
290
|
assert_equal "teal(12)", resolve("teal(12)")
|
291
291
|
assert_equal "tealbang(12)", resolve("tealbang(12)")
|
292
292
|
assert_equal "teal-bang(12)", resolve("teal-bang(12)")
|
293
|
-
assert_equal "teal
|
293
|
+
assert_equal "teal\\+bang(12)", resolve("teal\\+bang(12)")
|
294
294
|
end
|
295
295
|
|
296
296
|
def test_interpolation_after_hash
|
data/test/sass/scss/css_test.rb
CHANGED
@@ -348,6 +348,7 @@ foo {
|
|
348
348
|
*name: val;
|
349
349
|
:name: val;
|
350
350
|
.name: val;
|
351
|
+
#name: val;
|
351
352
|
name: val; }
|
352
353
|
SCSS
|
353
354
|
end
|
@@ -356,8 +357,8 @@ SCSS
|
|
356
357
|
assert_parses <<SCSS
|
357
358
|
foo {
|
358
359
|
foo: bar;
|
359
|
-
baz: bang;
|
360
|
-
# }
|
360
|
+
#baz: bang;
|
361
|
+
#bip: bop; }
|
361
362
|
SCSS
|
362
363
|
end
|
363
364
|
|
@@ -399,6 +400,28 @@ foo {
|
|
399
400
|
SCSS
|
400
401
|
end
|
401
402
|
|
403
|
+
def test_css_string_escapes
|
404
|
+
assert_parses <<SCSS
|
405
|
+
foo {
|
406
|
+
a: "\\foo bar";
|
407
|
+
b: "foo\\ bar";
|
408
|
+
c: "\\2022 \\0020";
|
409
|
+
d: "foo\\\\bar";
|
410
|
+
e: "foo\\"'bar"; }
|
411
|
+
SCSS
|
412
|
+
end
|
413
|
+
|
414
|
+
def test_css_ident_escapes
|
415
|
+
assert_parses <<SCSS
|
416
|
+
foo {
|
417
|
+
a: \\foo bar;
|
418
|
+
b: foo\\ bar;
|
419
|
+
c: \\2022 \\0020;
|
420
|
+
d: foo\\\\bar;
|
421
|
+
e: foo\\"\\'bar; }
|
422
|
+
SCSS
|
423
|
+
end
|
424
|
+
|
402
425
|
## Directives
|
403
426
|
|
404
427
|
def test_charset_directive
|
@@ -789,7 +812,7 @@ SCSS
|
|
789
812
|
|
790
813
|
def test_no_nested_rules
|
791
814
|
assert_not_parses('":"', 'foo {bar <err>{a: b}}')
|
792
|
-
assert_not_parses('"}"', 'foo {<err
|
815
|
+
assert_not_parses('"}"', 'foo {<err>[bar=baz] {a: b}}')
|
793
816
|
end
|
794
817
|
|
795
818
|
def test_no_nested_properties
|
@@ -3,7 +3,7 @@ $preconst: hello
|
|
3
3
|
=premixin
|
4
4
|
pre-mixin: here
|
5
5
|
|
6
|
-
@import importee.sass, scss_importee, basic.sass, basic.css, ../results/complex.css, partial.sass
|
6
|
+
@import importee.sass, scss_importee, "basic.sass", basic.css, ../results/complex.css, url(partial.sass)
|
7
7
|
|
8
8
|
nonimported
|
9
9
|
:myconst $preconst
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haml-edge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.194
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Weizenbaum
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-04-
|
13
|
+
date: 2010-04-09 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -118,7 +118,6 @@ files:
|
|
118
118
|
- lib/sass/tree/rule_node.rb
|
119
119
|
- lib/sass/tree/variable_node.rb
|
120
120
|
- lib/sass/tree/while_node.rb
|
121
|
-
- lib/sass/tree/raw_node.rb
|
122
121
|
- lib/sass/tree/root_node.rb
|
123
122
|
- lib/sass/scss/css_parser.rb
|
124
123
|
- lib/sass/scss/parser.rb
|
data/lib/sass/tree/raw_node.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Sass::Tree
|
2
|
-
# A static node representing raw CSS.
|
3
|
-
# This simply renders a string value.
|
4
|
-
#
|
5
|
-
# @see Sass::Tree
|
6
|
-
class RawNode < Node
|
7
|
-
# The text of the hack.
|
8
|
-
#
|
9
|
-
# @return [String]
|
10
|
-
attr_accessor :value
|
11
|
-
|
12
|
-
# @param value [String] See \{#value}
|
13
|
-
def initialize(value)
|
14
|
-
@value = value
|
15
|
-
super()
|
16
|
-
end
|
17
|
-
|
18
|
-
protected
|
19
|
-
|
20
|
-
def to_src(tabs, opts, fmt)
|
21
|
-
return "#{' ' * tabs}#{value}" if fmt == :scss
|
22
|
-
"#{' ' * tabs}@raw #{value}"
|
23
|
-
end
|
24
|
-
|
25
|
-
# Returns the value of the node.
|
26
|
-
#
|
27
|
-
# @param tabs [Fixnum] The level of indentation for the CSS
|
28
|
-
# @return [String] The resulting CSS
|
29
|
-
def _to_s(tabs)
|
30
|
-
"#{' ' * (tabs - 1)}#{value}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|