oreorenasass 3.4.4 → 3.4.5
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/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.
|