oreorenasass 3.4.4 → 3.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +50 -70
- data/Rakefile +5 -26
- data/VERSION +1 -1
- data/VERSION_NAME +1 -1
- data/bin/sass +1 -1
- data/bin/scss +1 -1
- data/lib/sass.rb +12 -19
- data/lib/sass/cache_stores/base.rb +2 -2
- data/lib/sass/cache_stores/chain.rb +1 -2
- data/lib/sass/cache_stores/filesystem.rb +5 -1
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +0 -1
- data/lib/sass/css.rb +13 -11
- data/lib/sass/engine.rb +173 -424
- data/lib/sass/environment.rb +58 -148
- data/lib/sass/error.rb +14 -11
- data/lib/sass/exec.rb +703 -5
- data/lib/sass/importers/base.rb +6 -49
- data/lib/sass/importers/filesystem.rb +19 -44
- data/lib/sass/logger.rb +4 -1
- data/lib/sass/logger/base.rb +4 -2
- data/lib/sass/logger/log_level.rb +7 -3
- data/lib/sass/media.rb +23 -20
- data/lib/sass/plugin.rb +7 -7
- data/lib/sass/plugin/compiler.rb +145 -304
- data/lib/sass/plugin/configuration.rb +23 -18
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/repl.rb +3 -3
- data/lib/sass/script.rb +8 -35
- data/lib/sass/script/{value/arg_list.rb → arg_list.rb} +25 -9
- data/lib/sass/script/bool.rb +18 -0
- data/lib/sass/script/color.rb +606 -0
- data/lib/sass/script/css_lexer.rb +4 -8
- data/lib/sass/script/css_parser.rb +2 -5
- data/lib/sass/script/funcall.rb +245 -0
- data/lib/sass/script/functions.rb +408 -1491
- data/lib/sass/script/interpolation.rb +79 -0
- data/lib/sass/script/lexer.rb +68 -172
- data/lib/sass/script/list.rb +85 -0
- data/lib/sass/script/literal.rb +221 -0
- data/lib/sass/script/{tree/node.rb → node.rb} +12 -22
- data/lib/sass/script/{value/null.rb → null.rb} +7 -14
- data/lib/sass/script/{value/number.rb → number.rb} +75 -152
- data/lib/sass/script/{tree/operation.rb → operation.rb} +24 -17
- data/lib/sass/script/parser.rb +110 -245
- data/lib/sass/script/string.rb +51 -0
- data/lib/sass/script/{tree/string_interpolation.rb → string_interpolation.rb} +4 -5
- data/lib/sass/script/{tree/unary_operation.rb → unary_operation.rb} +6 -6
- data/lib/sass/script/variable.rb +58 -0
- data/lib/sass/scss/css_parser.rb +3 -9
- data/lib/sass/scss/parser.rb +421 -450
- data/lib/sass/scss/rx.rb +11 -19
- data/lib/sass/scss/static_parser.rb +7 -321
- data/lib/sass/selector.rb +194 -68
- data/lib/sass/selector/abstract_sequence.rb +14 -29
- data/lib/sass/selector/comma_sequence.rb +25 -108
- data/lib/sass/selector/sequence.rb +66 -159
- data/lib/sass/selector/simple.rb +25 -23
- data/lib/sass/selector/simple_sequence.rb +63 -173
- data/lib/sass/shared.rb +1 -1
- data/lib/sass/supports.rb +15 -13
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +11 -11
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +4 -21
- data/lib/sass/tree/each_node.rb +8 -8
- data/lib/sass/tree/extend_node.rb +7 -14
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +4 -9
- data/lib/sass/tree/if_node.rb +1 -1
- data/lib/sass/tree/import_node.rb +5 -4
- data/lib/sass/tree/media_node.rb +14 -4
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +8 -21
- data/lib/sass/tree/node.rb +12 -54
- data/lib/sass/tree/prop_node.rb +20 -39
- data/lib/sass/tree/return_node.rb +2 -3
- data/lib/sass/tree/root_node.rb +3 -19
- data/lib/sass/tree/rule_node.rb +22 -35
- data/lib/sass/tree/supports_node.rb +13 -0
- data/lib/sass/tree/trace_node.rb +1 -2
- data/lib/sass/tree/variable_node.rb +3 -9
- data/lib/sass/tree/visitors/base.rb +8 -5
- data/lib/sass/tree/visitors/check_nesting.rb +19 -49
- data/lib/sass/tree/visitors/convert.rb +56 -74
- data/lib/sass/tree/visitors/cssize.rb +74 -202
- data/lib/sass/tree/visitors/deep_copy.rb +5 -10
- data/lib/sass/tree/visitors/extend.rb +7 -7
- data/lib/sass/tree/visitors/perform.rb +185 -278
- data/lib/sass/tree/visitors/set_options.rb +6 -20
- data/lib/sass/tree/visitors/to_css.rb +81 -234
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util.rb +152 -522
- data/lib/sass/util/multibyte_string_scanner.rb +0 -2
- data/lib/sass/util/subset_map.rb +3 -4
- data/lib/sass/util/test.rb +1 -0
- data/lib/sass/version.rb +22 -20
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +10 -0
- data/test/sass/cache_test.rb +20 -62
- data/test/sass/callbacks_test.rb +1 -1
- data/test/sass/conversion_test.rb +2 -296
- data/test/sass/css2sass_test.rb +4 -23
- data/test/sass/engine_test.rb +354 -411
- data/test/sass/exec_test.rb +2 -2
- data/test/sass/extend_test.rb +145 -324
- data/test/sass/functions_test.rb +86 -873
- data/test/sass/importer_test.rb +21 -241
- data/test/sass/logger_test.rb +1 -1
- data/test/sass/more_results/more_import.css +1 -1
- data/test/sass/plugin_test.rb +26 -16
- data/test/sass/results/compact.css +1 -1
- data/test/sass/results/complex.css +4 -4
- data/test/sass/results/expanded.css +1 -1
- data/test/sass/results/import.css +1 -1
- data/test/sass/results/import_charset_ibm866.css +2 -2
- data/test/sass/results/mixins.css +17 -17
- data/test/sass/results/nested.css +1 -1
- data/test/sass/results/parent_ref.css +2 -2
- data/test/sass/results/script.css +3 -3
- data/test/sass/results/scss_import.css +1 -1
- data/test/sass/script_conversion_test.rb +7 -36
- data/test/sass/script_test.rb +53 -485
- data/test/sass/scss/css_test.rb +28 -143
- data/test/sass/scss/rx_test.rb +4 -4
- data/test/sass/scss/scss_test.rb +325 -2119
- data/test/sass/templates/scss_import.scss +1 -2
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
- data/test/sass/util/subset_map_test.rb +2 -2
- data/test/sass/util_test.rb +1 -86
- data/test/test_helper.rb +8 -37
- metadata +19 -66
- data/lib/sass/exec/base.rb +0 -187
- data/lib/sass/exec/sass_convert.rb +0 -264
- data/lib/sass/exec/sass_scss.rb +0 -424
- data/lib/sass/features.rb +0 -47
- data/lib/sass/script/tree.rb +0 -16
- data/lib/sass/script/tree/funcall.rb +0 -306
- data/lib/sass/script/tree/interpolation.rb +0 -118
- data/lib/sass/script/tree/list_literal.rb +0 -77
- data/lib/sass/script/tree/literal.rb +0 -45
- data/lib/sass/script/tree/map_literal.rb +0 -64
- data/lib/sass/script/tree/selector.rb +0 -26
- data/lib/sass/script/tree/variable.rb +0 -57
- data/lib/sass/script/value.rb +0 -11
- data/lib/sass/script/value/base.rb +0 -240
- data/lib/sass/script/value/bool.rb +0 -35
- data/lib/sass/script/value/color.rb +0 -680
- data/lib/sass/script/value/helpers.rb +0 -262
- data/lib/sass/script/value/list.rb +0 -113
- data/lib/sass/script/value/map.rb +0 -70
- data/lib/sass/script/value/string.rb +0 -97
- data/lib/sass/selector/pseudo.rb +0 -256
- data/lib/sass/source/map.rb +0 -210
- data/lib/sass/source/position.rb +0 -39
- data/lib/sass/source/range.rb +0 -41
- data/lib/sass/stack.rb +0 -120
- data/lib/sass/tree/at_root_node.rb +0 -83
- data/lib/sass/tree/error_node.rb +0 -18
- data/lib/sass/tree/keyframe_rule_node.rb +0 -15
- data/lib/sass/util/cross_platform_random.rb +0 -19
- data/lib/sass/util/normalized_map.rb +0 -130
- data/lib/sass/util/ordered_hash.rb +0 -192
- data/test/sass/compiler_test.rb +0 -232
- data/test/sass/encoding_test.rb +0 -219
- data/test/sass/source_map_test.rb +0 -977
- data/test/sass/superselector_test.rb +0 -191
- data/test/sass/util/normalized_map_test.rb +0 -51
- data/test/sass/value_helpers_test.rb +0 -179
@@ -6,10 +6,10 @@ module Sass::Tree
|
|
6
6
|
# @see Sass::Tree
|
7
7
|
class CommentNode < Node
|
8
8
|
# The text of the comment, not including `/*` and `*/`.
|
9
|
-
# Interspersed with {Sass::Script::
|
9
|
+
# Interspersed with {Sass::Script::Node}s representing `#{}`-interpolation
|
10
10
|
# if this is a loud comment.
|
11
11
|
#
|
12
|
-
# @return [Array<String, Sass::Script::
|
12
|
+
# @return [Array<String, Sass::Script::Node>]
|
13
13
|
attr_accessor :value
|
14
14
|
|
15
15
|
# The text of the comment
|
@@ -26,7 +26,7 @@ module Sass::Tree
|
|
26
26
|
# @return [Symbol]
|
27
27
|
attr_accessor :type
|
28
28
|
|
29
|
-
# @param value [Array<String, Sass::Script::
|
29
|
+
# @param value [Array<String, Sass::Script::Node>] See \{#value}
|
30
30
|
# @param type [Symbol] See \{#type}
|
31
31
|
def initialize(value, type)
|
32
32
|
@value = Sass::Util.with_extracted_values(value) {|str| normalize_indentation str}
|
@@ -6,31 +6,31 @@ module Sass::Tree
|
|
6
6
|
# The URI being imported, either as a plain string or an interpolated
|
7
7
|
# script string.
|
8
8
|
#
|
9
|
-
# @return [String, Sass::Script::
|
9
|
+
# @return [String, Sass::Script::Node]
|
10
10
|
attr_accessor :uri
|
11
11
|
|
12
12
|
# The text of the URI being imported after any interpolated SassScript has
|
13
|
-
# been resolved. Only set once {Tree::Visitors::Perform} has been run.
|
13
|
+
# been resolved. Only set once \{Tree::Visitors::Perform} has been run.
|
14
14
|
#
|
15
15
|
# @return [String]
|
16
16
|
attr_accessor :resolved_uri
|
17
17
|
|
18
|
-
# The media query for this rule, interspersed with
|
19
|
-
#
|
20
|
-
#
|
18
|
+
# The media query for this rule, interspersed with {Sass::Script::Node}s
|
19
|
+
# representing `#{}`-interpolation. Any adjacent strings will be merged
|
20
|
+
# together.
|
21
21
|
#
|
22
|
-
# @return [Array<String, Sass::Script::
|
22
|
+
# @return [Array<String, Sass::Script::Node>]
|
23
23
|
attr_accessor :query
|
24
24
|
|
25
|
-
# The media query for this rule, without any unresolved interpolation.
|
26
|
-
#
|
25
|
+
# The media query for this rule, without any unresolved interpolation. It's
|
26
|
+
# only set once {Tree::Node#perform} has been called.
|
27
27
|
#
|
28
28
|
# @return [Sass::Media::QueryList]
|
29
29
|
attr_accessor :resolved_query
|
30
30
|
|
31
|
-
# @param uri [String, Sass::Script::
|
32
|
-
# @param query [Array<String, Sass::Script::
|
33
|
-
def initialize(uri, query =
|
31
|
+
# @param uri [String, Sass::Script::Node] See \{#uri}
|
32
|
+
# @param query [Array<String, Sass::Script::Node>] See \{#query}
|
33
|
+
def initialize(uri, query = nil)
|
34
34
|
@uri = uri
|
35
35
|
@query = query
|
36
36
|
super('')
|
data/lib/sass/tree/debug_node.rb
CHANGED
@@ -5,10 +5,10 @@ module Sass
|
|
5
5
|
# @see Sass::Tree
|
6
6
|
class DebugNode < Node
|
7
7
|
# The expression to print.
|
8
|
-
# @return [Script::
|
8
|
+
# @return [Script::Node]
|
9
9
|
attr_accessor :expr
|
10
10
|
|
11
|
-
# @param expr [Script::
|
11
|
+
# @param expr [Script::Node] The expression to print
|
12
12
|
def initialize(expr)
|
13
13
|
@expr = expr
|
14
14
|
super()
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Sass::Tree
|
2
|
-
# A static node representing an
|
2
|
+
# A static node representing an unproccessed Sass `@`-directive.
|
3
3
|
# Directives known to Sass, like `@for` and `@debug`,
|
4
4
|
# are handled by their own nodes;
|
5
5
|
# only CSS directives like `@media` and `@font-face` become {DirectiveNode}s.
|
@@ -11,7 +11,7 @@ module Sass::Tree
|
|
11
11
|
class DirectiveNode < Node
|
12
12
|
# The text of the directive, `@` and all, with interpolation included.
|
13
13
|
#
|
14
|
-
# @return [Array<String, Sass::Script::
|
14
|
+
# @return [Array<String, Sass::Script::Node>]
|
15
15
|
attr_accessor :value
|
16
16
|
|
17
17
|
# The text of the directive after any interpolated SassScript has been resolved.
|
@@ -20,16 +20,9 @@ module Sass::Tree
|
|
20
20
|
# @return [String]
|
21
21
|
attr_accessor :resolved_value
|
22
22
|
|
23
|
-
# @
|
24
|
-
attr_accessor :tabs
|
25
|
-
|
26
|
-
# @see RuleNode#group_end
|
27
|
-
attr_accessor :group_end
|
28
|
-
|
29
|
-
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
|
23
|
+
# @param value [Array<String, Sass::Script::Node>] See \{#value}
|
30
24
|
def initialize(value)
|
31
25
|
@value = value
|
32
|
-
@tabs = 0
|
33
26
|
super()
|
34
27
|
end
|
35
28
|
|
@@ -43,17 +36,7 @@ module Sass::Tree
|
|
43
36
|
|
44
37
|
# @return [String] The name of the directive, including `@`.
|
45
38
|
def name
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
# Strips out any vendor prefixes and downcases the directive name.
|
50
|
-
# @return [String] The normalized name of the directive.
|
51
|
-
def normalized_name
|
52
|
-
@normalized_name ||= name.gsub(/^(@)(?:-[a-zA-Z0-9]+-)?/, '\1').downcase
|
53
|
-
end
|
54
|
-
|
55
|
-
def bubbles?
|
56
|
-
has_children
|
39
|
+
value.first.gsub(/ .*$/, '')
|
57
40
|
end
|
58
41
|
end
|
59
42
|
end
|
data/lib/sass/tree/each_node.rb
CHANGED
@@ -5,18 +5,18 @@ module Sass::Tree
|
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class EachNode < Node
|
8
|
-
# The
|
9
|
-
# @return [
|
10
|
-
attr_reader :
|
8
|
+
# The name of the loop variable.
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :var
|
11
11
|
|
12
12
|
# The parse tree for the list.
|
13
|
-
# @
|
13
|
+
# @param [Script::Node]
|
14
14
|
attr_accessor :list
|
15
15
|
|
16
|
-
# @param
|
17
|
-
# @param list [Script::
|
18
|
-
def initialize(
|
19
|
-
@
|
16
|
+
# @param var [String] The name of the loop variable
|
17
|
+
# @param list [Script::Node] The parse tree for the list
|
18
|
+
def initialize(var, list)
|
19
|
+
@var = var
|
20
20
|
@list = list
|
21
21
|
super()
|
22
22
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'sass/tree/node'
|
2
2
|
|
3
3
|
module Sass::Tree
|
4
|
-
# A static node
|
4
|
+
# A static node reprenting an `@extend` directive.
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class ExtendNode < Node
|
@@ -11,32 +11,25 @@ module Sass::Tree
|
|
11
11
|
# @return [Selector::CommaSequence]
|
12
12
|
attr_accessor :resolved_selector
|
13
13
|
|
14
|
-
# The CSS selector to extend, interspersed with {Sass::Script::
|
14
|
+
# The CSS selector to extend, interspersed with {Sass::Script::Node}s
|
15
15
|
# representing `#{}`-interpolation.
|
16
16
|
#
|
17
|
-
# @return [Array<String, Sass::Script::
|
17
|
+
# @return [Array<String, Sass::Script::Node>]
|
18
18
|
attr_accessor :selector
|
19
19
|
|
20
|
-
# The extended selector source range.
|
21
|
-
#
|
22
|
-
# @return [Sass::Source::Range]
|
23
|
-
attr_accessor :selector_source_range
|
24
|
-
|
25
20
|
# Whether the `@extend` is allowed to match no selectors or not.
|
26
21
|
#
|
27
22
|
# @return [Boolean]
|
28
23
|
def optional?; @optional; end
|
29
24
|
|
30
|
-
# @param selector [Array<String, Sass::Script::
|
25
|
+
# @param selector [Array<String, Sass::Script::Node>]
|
31
26
|
# The CSS selector to extend,
|
32
|
-
# interspersed with {Sass::Script::
|
27
|
+
# interspersed with {Sass::Script::Node}s
|
33
28
|
# representing `#{}`-interpolation.
|
34
|
-
# @param optional [Boolean] See \{
|
35
|
-
|
36
|
-
def initialize(selector, optional, selector_source_range)
|
29
|
+
# @param optional [Boolean] See \{#optional}
|
30
|
+
def initialize(selector, optional)
|
37
31
|
@selector = selector
|
38
32
|
@optional = optional
|
39
|
-
@selector_source_range = selector_source_range
|
40
33
|
super()
|
41
34
|
end
|
42
35
|
end
|
data/lib/sass/tree/for_node.rb
CHANGED
@@ -10,11 +10,11 @@ module Sass::Tree
|
|
10
10
|
attr_reader :var
|
11
11
|
|
12
12
|
# The parse tree for the initial expression.
|
13
|
-
# @return [Script::
|
13
|
+
# @return [Script::Node]
|
14
14
|
attr_accessor :from
|
15
15
|
|
16
16
|
# The parse tree for the final expression.
|
17
|
-
# @return [Script::
|
17
|
+
# @return [Script::Node]
|
18
18
|
attr_accessor :to
|
19
19
|
|
20
20
|
# Whether to include `to` in the loop or stop just before.
|
@@ -22,8 +22,8 @@ module Sass::Tree
|
|
22
22
|
attr_reader :exclusive
|
23
23
|
|
24
24
|
# @param var [String] See \{#var}
|
25
|
-
# @param from [Script::
|
26
|
-
# @param to [Script::
|
25
|
+
# @param from [Script::Node] See \{#from}
|
26
|
+
# @param to [Script::Node] See \{#to}
|
27
27
|
# @param exclusive [Boolean] See \{#exclusive}
|
28
28
|
def initialize(var, from, to, exclusive)
|
29
29
|
@var = var
|
@@ -12,27 +12,22 @@ module Sass
|
|
12
12
|
# containing the variable for argument and the parse tree for
|
13
13
|
# the default value of the argument
|
14
14
|
#
|
15
|
-
# @return [Array<Script::
|
15
|
+
# @return [Array<Script::Node>]
|
16
16
|
attr_accessor :args
|
17
17
|
|
18
18
|
# The splat argument for this function, if one exists.
|
19
19
|
#
|
20
|
-
# @return [Script::
|
20
|
+
# @return [Script::Node?]
|
21
21
|
attr_accessor :splat
|
22
22
|
|
23
23
|
# @param name [String] The function name
|
24
|
-
# @param args [Array<(Script::
|
25
|
-
#
|
26
|
-
# @param splat [Script::Tree::Node] See \{#splat}
|
24
|
+
# @param args [Array<(Script::Node, Script::Node)>] The arguments for the function.
|
25
|
+
# @param splat [Script::Node] See \{#splat}
|
27
26
|
def initialize(name, args, splat)
|
28
27
|
@name = name
|
29
28
|
@args = args
|
30
29
|
@splat = splat
|
31
30
|
super()
|
32
|
-
|
33
|
-
if %w[and or not].include?(name)
|
34
|
-
raise Sass::SyntaxError.new("Invalid function name \"#{name}\".")
|
35
|
-
end
|
36
31
|
end
|
37
32
|
end
|
38
33
|
end
|
data/lib/sass/tree/if_node.rb
CHANGED
@@ -51,8 +51,9 @@ module Sass
|
|
51
51
|
end
|
52
52
|
|
53
53
|
paths.each do |p|
|
54
|
-
f = p.find(@imported_filename, options_for_importer)
|
55
|
-
|
54
|
+
if f = p.find(@imported_filename, options_for_importer)
|
55
|
+
return f
|
56
|
+
end
|
56
57
|
end
|
57
58
|
|
58
59
|
message = "File to import not found or unreadable: #{@imported_filename}.\n"
|
@@ -63,11 +64,11 @@ module Sass
|
|
63
64
|
end
|
64
65
|
raise SyntaxError.new(message)
|
65
66
|
rescue SyntaxError => e
|
66
|
-
raise SyntaxError.new(e.message, :line => line, :filename => @filename)
|
67
|
+
raise SyntaxError.new(e.message, :line => self.line, :filename => @filename)
|
67
68
|
end
|
68
69
|
|
69
70
|
def options_for_importer
|
70
|
-
@options.merge(:
|
71
|
+
@options.merge(:_line => line)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
data/lib/sass/tree/media_node.rb
CHANGED
@@ -8,22 +8,29 @@ module Sass::Tree
|
|
8
8
|
class MediaNode < DirectiveNode
|
9
9
|
# TODO: parse and cache the query immediately if it has no dynamic elements
|
10
10
|
|
11
|
-
# The media query for this rule, interspersed with {Sass::Script::
|
11
|
+
# The media query for this rule, interspersed with {Sass::Script::Node}s
|
12
12
|
# representing `#{}`-interpolation. Any adjacent strings will be merged
|
13
13
|
# together.
|
14
14
|
#
|
15
|
-
# @return [Array<String, Sass::Script::
|
15
|
+
# @return [Array<String, Sass::Script::Node>]
|
16
16
|
attr_accessor :query
|
17
17
|
|
18
18
|
# The media query for this rule, without any unresolved interpolation. It's
|
19
|
-
# only set once {Tree::
|
19
|
+
# only set once {Tree::Node#perform} has been called.
|
20
20
|
#
|
21
21
|
# @return [Sass::Media::QueryList]
|
22
22
|
attr_accessor :resolved_query
|
23
23
|
|
24
|
-
# @
|
24
|
+
# @see RuleNode#tabs
|
25
|
+
attr_accessor :tabs
|
26
|
+
|
27
|
+
# @see RuleNode#group_end
|
28
|
+
attr_accessor :group_end
|
29
|
+
|
30
|
+
# @param query [Array<String, Sass::Script::Node>] See \{#query}
|
25
31
|
def initialize(query)
|
26
32
|
@query = query
|
33
|
+
@tabs = 0
|
27
34
|
super('')
|
28
35
|
end
|
29
36
|
|
@@ -44,5 +51,8 @@ module Sass::Tree
|
|
44
51
|
def invisible?
|
45
52
|
children.all? {|c| c.invisible?}
|
46
53
|
end
|
54
|
+
|
55
|
+
# @see Node#bubbles?
|
56
|
+
def bubbles?; true; end
|
47
57
|
end
|
48
58
|
end
|
@@ -12,12 +12,12 @@ module Sass
|
|
12
12
|
# Each element is a tuple containing the variable for argument
|
13
13
|
# and the parse tree for the default value of the argument.
|
14
14
|
#
|
15
|
-
# @return [Array<(Script::
|
15
|
+
# @return [Array<(Script::Node, Script::Node)>]
|
16
16
|
attr_accessor :args
|
17
17
|
|
18
18
|
# The splat argument for this mixin, if one exists.
|
19
19
|
#
|
20
|
-
# @return [Script::
|
20
|
+
# @return [Script::Node?]
|
21
21
|
attr_accessor :splat
|
22
22
|
|
23
23
|
# Whether the mixin uses `@content`. Set during the nesting check phase.
|
@@ -25,8 +25,8 @@ module Sass
|
|
25
25
|
attr_accessor :has_content
|
26
26
|
|
27
27
|
# @param name [String] The mixin name
|
28
|
-
# @param args [Array<(Script::
|
29
|
-
# @param splat [Script::
|
28
|
+
# @param args [Array<(Script::Node, Script::Node)>] See \{#args}
|
29
|
+
# @param splat [Script::Node] See \{#splat}
|
30
30
|
def initialize(name, args, splat)
|
31
31
|
@name = name
|
32
32
|
@args = args
|
data/lib/sass/tree/mixin_node.rb
CHANGED
@@ -12,40 +12,27 @@ module Sass::Tree
|
|
12
12
|
attr_reader :name
|
13
13
|
|
14
14
|
# The arguments to the mixin.
|
15
|
-
# @return [Array<Script::
|
15
|
+
# @return [Array<Script::Node>]
|
16
16
|
attr_accessor :args
|
17
17
|
|
18
18
|
# A hash from keyword argument names to values.
|
19
|
-
# @return [
|
19
|
+
# @return [{String => Script::Node}]
|
20
20
|
attr_accessor :keywords
|
21
21
|
|
22
|
-
# The
|
22
|
+
# The splat argument for this mixin, if one exists.
|
23
23
|
#
|
24
|
-
#
|
25
|
-
# arguments, or an arglist containing both.
|
26
|
-
#
|
27
|
-
# @return [Node?]
|
24
|
+
# @return [Script::Node?]
|
28
25
|
attr_accessor :splat
|
29
26
|
|
30
|
-
# The second splat argument for this mixin, if one exists.
|
31
|
-
#
|
32
|
-
# If this exists, it's always a map of keyword arguments, and
|
33
|
-
# \{#splat} is always either a list or an arglist.
|
34
|
-
#
|
35
|
-
# @return [Node?]
|
36
|
-
attr_accessor :kwarg_splat
|
37
|
-
|
38
27
|
# @param name [String] The name of the mixin
|
39
|
-
# @param args [Array<Script::
|
40
|
-
# @param splat [Script::
|
41
|
-
# @param
|
42
|
-
|
43
|
-
def initialize(name, args, keywords, splat, kwarg_splat)
|
28
|
+
# @param args [Array<Script::Node>] See \{#args}
|
29
|
+
# @param splat [Script::Node] See \{#splat}
|
30
|
+
# @param keywords [{String => Script::Node}] See \{#keywords}
|
31
|
+
def initialize(name, args, keywords, splat)
|
44
32
|
@name = name
|
45
33
|
@args = args
|
46
34
|
@keywords = keywords
|
47
35
|
@splat = splat
|
48
|
-
@kwarg_splat = kwarg_splat
|
49
36
|
super()
|
50
37
|
end
|
51
38
|
end
|
data/lib/sass/tree/node.rb
CHANGED
@@ -8,15 +8,14 @@ module Sass
|
|
8
8
|
# in addition to nodes for CSS rules and properties.
|
9
9
|
# Nodes that only appear in this state are called **dynamic nodes**.
|
10
10
|
#
|
11
|
-
# {Tree::Visitors::Perform} creates a static Sass tree, which is
|
12
|
-
#
|
13
|
-
# doesn't have any dynamic-generation-related nodes.
|
14
|
-
# this state are in
|
15
|
-
# and properties are nested beneath one another
|
16
|
-
#
|
17
|
-
# that can be in this state
|
18
|
-
# **static nodes
|
19
|
-
# **solely static nodes**.
|
11
|
+
# {Tree::Visitors::Perform} creates a static Sass tree, which is different.
|
12
|
+
# It still has nodes for CSS rules and properties
|
13
|
+
# but it doesn't have any dynamic-generation-related nodes.
|
14
|
+
# The nodes in this state are in the same structure as the Sass document:
|
15
|
+
# rules and properties are nested beneath one another.
|
16
|
+
# Nodes that can be in this state or in the dynamic state
|
17
|
+
# are called **static nodes**; nodes that can only be in this state
|
18
|
+
# are called **solely static nodes**.
|
20
19
|
#
|
21
20
|
# {Tree::Visitors::Cssize} is then used to create a static CSS tree.
|
22
21
|
# This is like a static Sass tree,
|
@@ -30,35 +29,10 @@ module Sass
|
|
30
29
|
class Node
|
31
30
|
include Enumerable
|
32
31
|
|
33
|
-
def self.inherited(base)
|
34
|
-
node_name = base.name.gsub(/.*::(.*?)Node$/, '\\1').downcase
|
35
|
-
base.instance_eval <<-METHODS
|
36
|
-
# @return [Symbol] The name that is used for this node when visiting.
|
37
|
-
def node_name
|
38
|
-
:#{node_name}
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [Symbol] The method that is used on the visitor to visit nodes of this type.
|
42
|
-
def visit_method
|
43
|
-
:visit_#{node_name}
|
44
|
-
end
|
45
|
-
|
46
|
-
# @return [Symbol] The method name that determines if the parent is invalid.
|
47
|
-
def invalid_child_method_name
|
48
|
-
:"invalid_#{node_name}_child?"
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [Symbol] The method name that determines if the node is an invalid parent.
|
52
|
-
def invalid_parent_method_name
|
53
|
-
:"invalid_#{node_name}_parent?"
|
54
|
-
end
|
55
|
-
METHODS
|
56
|
-
end
|
57
|
-
|
58
32
|
# The child nodes of this node.
|
59
33
|
#
|
60
34
|
# @return [Array<Tree::Node>]
|
61
|
-
|
35
|
+
attr_accessor :children
|
62
36
|
|
63
37
|
# Whether or not this node has child nodes.
|
64
38
|
# This may be true even when \{#children} is empty,
|
@@ -72,11 +46,6 @@ module Sass
|
|
72
46
|
# @return [Fixnum]
|
73
47
|
attr_accessor :line
|
74
48
|
|
75
|
-
# The source range in the document on which this node appeared.
|
76
|
-
#
|
77
|
-
# @return [Sass::Source::Range]
|
78
|
-
attr_accessor :source_range
|
79
|
-
|
80
49
|
# The name of the document on which this node appeared.
|
81
50
|
#
|
82
51
|
# @return [String]
|
@@ -158,21 +127,10 @@ module Sass
|
|
158
127
|
|
159
128
|
# Computes the CSS corresponding to this static CSS tree.
|
160
129
|
#
|
161
|
-
# @return [String] The resulting CSS
|
162
|
-
# @see Sass::Tree
|
163
|
-
def css
|
164
|
-
Sass::Tree::Visitors::ToCss.new.visit(self)
|
165
|
-
end
|
166
|
-
|
167
|
-
# Computes the CSS corresponding to this static CSS tree, along with
|
168
|
-
# the respective source map.
|
169
|
-
#
|
170
|
-
# @return [(String, Sass::Source::Map)] The resulting CSS and the source map
|
130
|
+
# @return [String, nil] The resulting CSS
|
171
131
|
# @see Sass::Tree
|
172
|
-
def
|
173
|
-
|
174
|
-
result = visitor.visit(self)
|
175
|
-
return result, visitor.source_mapping
|
132
|
+
def to_s
|
133
|
+
Sass::Tree::Visitors::ToCss.visit(self)
|
176
134
|
end
|
177
135
|
|
178
136
|
# Returns a representation of the node for debugging purposes.
|