haml-edge 2.3.191 → 2.3.192
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 -0
- data/lib/sass/scss/parser.rb +19 -2
- data/lib/sass/tree/raw_node.rb +33 -0
- data/test/sass/conversion_test.rb +12 -0
- data/test/sass/engine_test.rb +15 -0
- data/test/sass/scss/css_test.rb +9 -0
- metadata +3 -2
data/EDGE_GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.192
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.192
|
data/lib/sass/engine.rb
CHANGED
@@ -6,6 +6,7 @@ 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'
|
9
10
|
require 'sass/tree/variable_node'
|
10
11
|
require 'sass/tree/mixin_def_node'
|
11
12
|
require 'sass/tree/mixin_node'
|
@@ -485,6 +486,10 @@ WARNING
|
|
485
486
|
:line => @line + 1) unless line.children.empty?
|
486
487
|
offset = line.offset + line.text.index(value).to_i
|
487
488
|
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)
|
488
493
|
else
|
489
494
|
Tree::DirectiveNode.new(line.text)
|
490
495
|
end
|
data/lib/sass/scss/parser.rb
CHANGED
@@ -276,6 +276,13 @@ 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
|
+
|
279
286
|
tok!(/\}/)
|
280
287
|
node
|
281
288
|
end
|
@@ -376,8 +383,10 @@ module Sass
|
|
376
383
|
['.', expr!(:interp_ident)]
|
377
384
|
end
|
378
385
|
|
386
|
+
# @private
|
387
|
+
ID_START = /#(?=#{NMCHAR})/
|
379
388
|
def id_selector
|
380
|
-
return unless tok(
|
389
|
+
return unless tok(ID_START)
|
381
390
|
@expected = "id name"
|
382
391
|
['#', expr!(:interp_name)]
|
383
392
|
end
|
@@ -656,6 +665,15 @@ MESSAGE
|
|
656
665
|
pos = scanner.pos
|
657
666
|
|
658
667
|
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
|
+
|
659
677
|
# Get rid of whitespace between pos and the last token,
|
660
678
|
# but only if there's a newline in there
|
661
679
|
after.gsub!(/\s*\n\s*$/, '')
|
@@ -663,7 +681,6 @@ MESSAGE
|
|
663
681
|
after.gsub!(/.*\n/, '')
|
664
682
|
after = "..." + after[-15..-1] if after.size > 18
|
665
683
|
|
666
|
-
was = scanner.rest.dup
|
667
684
|
# Get rid of whitespace between pos and the next token,
|
668
685
|
# but only if there's a newline in there
|
669
686
|
was.gsub!(/^\s*\n\s*/, '')
|
@@ -0,0 +1,33 @@
|
|
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
|
@@ -777,6 +777,18 @@ SCSS
|
|
777
777
|
assert_sass_to_scss '$var: 12px $bar baz !default;', '$var ||= 12px $bar "baz"'
|
778
778
|
end
|
779
779
|
|
780
|
+
def test_hash_hack
|
781
|
+
assert_renders <<SASS, <<SCSS
|
782
|
+
foo
|
783
|
+
bar: baz
|
784
|
+
@raw #
|
785
|
+
SASS
|
786
|
+
foo {
|
787
|
+
bar: baz;
|
788
|
+
# }
|
789
|
+
SCSS
|
790
|
+
end
|
791
|
+
|
780
792
|
# Sass 3 Deprecation conversions
|
781
793
|
|
782
794
|
def test_simple_quoted_strings_unquoted_with_equals
|
data/test/sass/engine_test.rb
CHANGED
@@ -56,6 +56,7 @@ 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.",
|
59
60
|
"@import foo.sass" => <<MSG,
|
60
61
|
File to import not found or unreadable: foo.sass.
|
61
62
|
Load paths:
|
@@ -589,6 +590,20 @@ END
|
|
589
590
|
assert_equal("@a{b:c;#d{e:f}g:h}\n", render(to_render, :style => :compressed))
|
590
591
|
end
|
591
592
|
|
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
|
+
|
592
607
|
def test_line_annotations
|
593
608
|
assert_equal(<<CSS, render(<<SASS, :line_comments => true, :style => :compact))
|
594
609
|
/* line 2, test_line_annotations_inline.sass */
|
data/test/sass/scss/css_test.rb
CHANGED
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.192
|
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-08 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/sass/tree/variable_node.rb
|
120
120
|
- lib/sass/tree/while_node.rb
|
121
121
|
- lib/sass/tree/root_node.rb
|
122
|
+
- lib/sass/tree/raw_node.rb
|
122
123
|
- lib/sass/scss/css_parser.rb
|
123
124
|
- lib/sass/scss/parser.rb
|
124
125
|
- lib/sass/scss/rx.rb
|