sass 3.1.0 → 3.3.0
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 +7 -0
- data/CONTRIBUTING +1 -1
- data/MIT-LICENSE +2 -2
- data/README.md +29 -17
- data/Rakefile +43 -9
- data/VERSION +1 -1
- data/VERSION_DATE +1 -0
- data/VERSION_NAME +1 -1
- data/bin/sass +6 -1
- data/bin/sass-convert +6 -1
- data/bin/scss +6 -1
- data/ext/mkrf_conf.rb +27 -0
- data/lib/sass/cache_stores/base.rb +7 -3
- data/lib/sass/cache_stores/chain.rb +3 -2
- data/lib/sass/cache_stores/filesystem.rb +5 -7
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +2 -1
- data/lib/sass/css.rb +168 -53
- data/lib/sass/engine.rb +502 -174
- data/lib/sass/environment.rb +151 -111
- data/lib/sass/error.rb +7 -7
- data/lib/sass/exec.rb +176 -60
- data/lib/sass/features.rb +40 -0
- data/lib/sass/importers/base.rb +46 -7
- data/lib/sass/importers/deprecated_path.rb +51 -0
- data/lib/sass/importers/filesystem.rb +113 -30
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +30 -0
- data/lib/sass/logger/log_level.rb +45 -0
- data/lib/sass/logger.rb +12 -0
- data/lib/sass/media.rb +213 -0
- data/lib/sass/plugin/compiler.rb +194 -104
- data/lib/sass/plugin/configuration.rb +18 -25
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +37 -11
- data/lib/sass/plugin.rb +10 -13
- data/lib/sass/railtie.rb +2 -1
- data/lib/sass/repl.rb +5 -6
- data/lib/sass/script/css_lexer.rb +8 -4
- data/lib/sass/script/css_parser.rb +5 -2
- data/lib/sass/script/functions.rb +1547 -618
- data/lib/sass/script/lexer.rb +122 -72
- data/lib/sass/script/parser.rb +304 -135
- data/lib/sass/script/tree/funcall.rb +306 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +43 -13
- data/lib/sass/script/tree/list_literal.rb +77 -0
- data/lib/sass/script/tree/literal.rb +45 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +30 -12
- data/lib/sass/script/{operation.rb → tree/operation.rb} +33 -21
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +14 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +21 -9
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +15 -0
- data/lib/sass/script/value/arg_list.rb +36 -0
- data/lib/sass/script/value/base.rb +238 -0
- data/lib/sass/script/value/bool.rb +40 -0
- data/lib/sass/script/{color.rb → value/color.rb} +256 -74
- data/lib/sass/script/value/deprecated_false.rb +55 -0
- data/lib/sass/script/value/helpers.rb +155 -0
- data/lib/sass/script/value/list.rb +128 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +49 -0
- data/lib/sass/script/{number.rb → value/number.rb} +115 -62
- data/lib/sass/script/{string.rb → value/string.rb} +9 -11
- data/lib/sass/script/value.rb +12 -0
- data/lib/sass/script.rb +35 -9
- data/lib/sass/scss/css_parser.rb +2 -12
- data/lib/sass/scss/parser.rb +657 -230
- data/lib/sass/scss/rx.rb +17 -12
- data/lib/sass/scss/static_parser.rb +37 -6
- data/lib/sass/scss.rb +0 -1
- data/lib/sass/selector/abstract_sequence.rb +35 -3
- data/lib/sass/selector/comma_sequence.rb +29 -14
- data/lib/sass/selector/sequence.rb +371 -74
- data/lib/sass/selector/simple.rb +28 -13
- data/lib/sass/selector/simple_sequence.rb +163 -36
- data/lib/sass/selector.rb +138 -36
- data/lib/sass/shared.rb +3 -5
- data/lib/sass/source/map.rb +196 -0
- data/lib/sass/source/position.rb +39 -0
- data/lib/sass/source/range.rb +41 -0
- data/lib/sass/stack.rb +126 -0
- data/lib/sass/supports.rb +228 -0
- data/lib/sass/tree/at_root_node.rb +82 -0
- data/lib/sass/tree/comment_node.rb +34 -29
- data/lib/sass/tree/content_node.rb +9 -0
- data/lib/sass/tree/css_import_node.rb +60 -0
- data/lib/sass/tree/debug_node.rb +3 -3
- data/lib/sass/tree/directive_node.rb +33 -3
- data/lib/sass/tree/each_node.rb +9 -9
- data/lib/sass/tree/extend_node.rb +20 -6
- data/lib/sass/tree/for_node.rb +6 -6
- data/lib/sass/tree/function_node.rb +12 -4
- data/lib/sass/tree/if_node.rb +2 -15
- data/lib/sass/tree/import_node.rb +11 -5
- data/lib/sass/tree/media_node.rb +27 -11
- data/lib/sass/tree/mixin_def_node.rb +15 -4
- data/lib/sass/tree/mixin_node.rb +27 -7
- data/lib/sass/tree/node.rb +69 -35
- data/lib/sass/tree/prop_node.rb +47 -31
- data/lib/sass/tree/return_node.rb +4 -3
- data/lib/sass/tree/root_node.rb +20 -4
- data/lib/sass/tree/rule_node.rb +37 -26
- data/lib/sass/tree/supports_node.rb +38 -0
- data/lib/sass/tree/trace_node.rb +33 -0
- data/lib/sass/tree/variable_node.rb +10 -4
- data/lib/sass/tree/visitors/base.rb +5 -8
- data/lib/sass/tree/visitors/check_nesting.rb +67 -52
- data/lib/sass/tree/visitors/convert.rb +134 -53
- data/lib/sass/tree/visitors/cssize.rb +245 -51
- data/lib/sass/tree/visitors/deep_copy.rb +102 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +331 -105
- data/lib/sass/tree/visitors/set_options.rb +125 -0
- data/lib/sass/tree/visitors/to_css.rb +259 -95
- data/lib/sass/tree/warn_node.rb +3 -3
- data/lib/sass/tree/while_node.rb +3 -3
- data/lib/sass/util/cross_platform_random.rb +19 -0
- data/lib/sass/util/multibyte_string_scanner.rb +157 -0
- data/lib/sass/util/normalized_map.rb +130 -0
- data/lib/sass/util/ordered_hash.rb +192 -0
- data/lib/sass/util/subset_map.rb +11 -2
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +565 -39
- data/lib/sass/version.rb +27 -15
- data/lib/sass.rb +39 -4
- data/test/sass/cache_test.rb +15 -0
- data/test/sass/compiler_test.rb +223 -0
- data/test/sass/conversion_test.rb +901 -107
- data/test/sass/css2sass_test.rb +94 -0
- data/test/sass/engine_test.rb +1059 -164
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +933 -837
- data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/test/sass/functions_test.rb +995 -136
- data/test/sass/importer_test.rb +338 -18
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/more_results/more_import.css +2 -2
- data/test/sass/plugin_test.rb +114 -30
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/import.css +2 -2
- data/test/sass/results/import_charset.css +1 -0
- data/test/sass/results/import_charset_1_8.css +1 -0
- data/test/sass/results/import_charset_ibm866.css +1 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/script.css +1 -1
- data/test/sass/results/scss_import.css +2 -2
- data/test/sass/results/units.css +2 -2
- data/test/sass/script_conversion_test.rb +43 -1
- data/test/sass/script_test.rb +380 -36
- data/test/sass/scss/css_test.rb +257 -75
- data/test/sass/scss/scss_test.rb +2322 -110
- data/test/sass/source_map_test.rb +887 -0
- data/test/sass/templates/_cached_import_option_partial.scss +1 -0
- data/test/sass/templates/_double_import_loop2.sass +1 -0
- data/test/sass/templates/_filename_fn_import.scss +11 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/import_charset.sass +2 -0
- data/test/sass/templates/import_charset_1_8.sass +2 -0
- data/test/sass/templates/import_charset_ibm866.sass +2 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/same_name_different_ext.sass +2 -0
- data/test/sass/templates/same_name_different_ext.scss +1 -0
- data/test/sass/templates/same_name_different_partiality.scss +1 -0
- data/test/sass/templates/single_import_loop.sass +1 -0
- data/test/sass/templates/subdir/import_up1.scss +1 -0
- data/test/sass/templates/subdir/import_up2.scss +1 -0
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
- data/test/sass/util/normalized_map_test.rb +51 -0
- data/test/sass/util_test.rb +183 -0
- data/test/sass/value_helpers_test.rb +181 -0
- data/test/test_helper.rb +45 -5
- data/vendor/listen/CHANGELOG.md +228 -0
- data/vendor/listen/CONTRIBUTING.md +38 -0
- data/vendor/listen/Gemfile +30 -0
- data/vendor/listen/Guardfile +8 -0
- data/vendor/{fssm → listen}/LICENSE +1 -1
- data/vendor/listen/README.md +315 -0
- data/vendor/listen/Rakefile +47 -0
- data/vendor/listen/Vagrantfile +96 -0
- data/vendor/listen/lib/listen/adapter.rb +214 -0
- data/vendor/listen/lib/listen/adapters/bsd.rb +112 -0
- data/vendor/listen/lib/listen/adapters/darwin.rb +85 -0
- data/vendor/listen/lib/listen/adapters/linux.rb +113 -0
- data/vendor/listen/lib/listen/adapters/polling.rb +67 -0
- data/vendor/listen/lib/listen/adapters/windows.rb +87 -0
- data/vendor/listen/lib/listen/dependency_manager.rb +126 -0
- data/vendor/listen/lib/listen/directory_record.rb +371 -0
- data/vendor/listen/lib/listen/listener.rb +225 -0
- data/vendor/listen/lib/listen/multi_listener.rb +143 -0
- data/vendor/listen/lib/listen/turnstile.rb +28 -0
- data/vendor/listen/lib/listen/version.rb +3 -0
- data/vendor/listen/lib/listen.rb +40 -0
- data/vendor/listen/listen.gemspec +22 -0
- data/vendor/listen/spec/listen/adapter_spec.rb +183 -0
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +36 -0
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +37 -0
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +47 -0
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +30 -0
- data/vendor/listen/spec/listen/dependency_manager_spec.rb +107 -0
- data/vendor/listen/spec/listen/directory_record_spec.rb +1225 -0
- data/vendor/listen/spec/listen/listener_spec.rb +169 -0
- data/vendor/listen/spec/listen/multi_listener_spec.rb +174 -0
- data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
- data/vendor/listen/spec/listen_spec.rb +73 -0
- data/vendor/listen/spec/spec_helper.rb +21 -0
- data/vendor/listen/spec/support/adapter_helper.rb +629 -0
- data/vendor/listen/spec/support/directory_record_helper.rb +55 -0
- data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
- data/vendor/listen/spec/support/listeners_helper.rb +156 -0
- data/vendor/listen/spec/support/platform_helper.rb +15 -0
- metadata +344 -271
- data/lib/sass/less.rb +0 -382
- data/lib/sass/script/bool.rb +0 -18
- data/lib/sass/script/funcall.rb +0 -162
- data/lib/sass/script/list.rb +0 -76
- data/lib/sass/script/literal.rb +0 -245
- data/lib/sass/script/variable.rb +0 -54
- data/lib/sass/scss/sass_parser.rb +0 -11
- data/test/sass/less_conversion_test.rb +0 -653
- data/vendor/fssm/README.markdown +0 -55
- data/vendor/fssm/Rakefile +0 -59
- data/vendor/fssm/VERSION.yml +0 -5
- data/vendor/fssm/example.rb +0 -9
- data/vendor/fssm/fssm.gemspec +0 -77
- data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
- data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
- data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
- data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
- data/vendor/fssm/lib/fssm/monitor.rb +0 -26
- data/vendor/fssm/lib/fssm/path.rb +0 -91
- data/vendor/fssm/lib/fssm/pathname.rb +0 -502
- data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
- data/vendor/fssm/lib/fssm/state/file.rb +0 -24
- data/vendor/fssm/lib/fssm/support.rb +0 -63
- data/vendor/fssm/lib/fssm/tree.rb +0 -176
- data/vendor/fssm/lib/fssm.rb +0 -33
- data/vendor/fssm/profile/prof-cache.rb +0 -40
- data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
- data/vendor/fssm/profile/prof-pathname.rb +0 -68
- data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
- data/vendor/fssm/profile/prof.html +0 -2379
- data/vendor/fssm/spec/path_spec.rb +0 -75
- data/vendor/fssm/spec/root/duck/quack.txt +0 -0
- data/vendor/fssm/spec/root/file.css +0 -0
- data/vendor/fssm/spec/root/file.rb +0 -0
- data/vendor/fssm/spec/root/file.yml +0 -0
- data/vendor/fssm/spec/root/moo/cow.txt +0 -0
- data/vendor/fssm/spec/spec_helper.rb +0 -14
@@ -6,31 +6,31 @@ 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::Tree::Node}s representing `#{}`-interpolation
|
10
|
+
# if this is a loud comment.
|
9
11
|
#
|
10
|
-
# @return [String]
|
12
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
11
13
|
attr_accessor :value
|
12
14
|
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
# irrespective of compilation settings or the comment syntax used.
|
15
|
+
# The text of the comment
|
16
|
+
# after any interpolated SassScript has been resolved.
|
17
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
17
18
|
#
|
18
|
-
# @return [
|
19
|
-
attr_accessor :
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :resolved_value
|
20
21
|
|
21
|
-
#
|
22
|
+
# The type of the comment. `:silent` means it's never output to CSS,
|
23
|
+
# `:normal` means it's output in every compile mode except `:compressed`,
|
24
|
+
# and `:loud` means it's output even in `:compressed`.
|
22
25
|
#
|
23
|
-
# @return [
|
24
|
-
attr_accessor :
|
26
|
+
# @return [Symbol]
|
27
|
+
attr_accessor :type
|
25
28
|
|
26
|
-
# @param value [String] See \{#value}
|
27
|
-
# @param
|
28
|
-
def initialize(value,
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@value = normalize_indentation value
|
32
|
-
@loud = @value =~ %r{^(/[\/\*])?!}
|
33
|
-
@value.sub!("#{$1}!", $1.to_s) if @loud
|
29
|
+
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
|
30
|
+
# @param type [Symbol] See \{#type}
|
31
|
+
def initialize(value, type)
|
32
|
+
@value = Sass::Util.with_extracted_values(value) {|str| normalize_indentation str}
|
33
|
+
@type = type
|
34
34
|
super()
|
35
35
|
end
|
36
36
|
|
@@ -40,7 +40,7 @@ module Sass::Tree
|
|
40
40
|
# @return [Boolean] Whether or not this node and the other object
|
41
41
|
# are the same
|
42
42
|
def ==(other)
|
43
|
-
self.class == other.class && value == other.value &&
|
43
|
+
self.class == other.class && value == other.value && type == other.type
|
44
44
|
end
|
45
45
|
|
46
46
|
# Returns `true` if this is a silent comment
|
@@ -50,28 +50,33 @@ module Sass::Tree
|
|
50
50
|
#
|
51
51
|
# @return [Boolean]
|
52
52
|
def invisible?
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
case @type
|
54
|
+
when :loud; false
|
55
|
+
when :silent; true
|
56
|
+
else; style == :compressed
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
# Returns
|
61
|
-
|
62
|
-
|
60
|
+
# Returns the number of lines in the comment.
|
61
|
+
#
|
62
|
+
# @return [Fixnum]
|
63
|
+
def lines
|
64
|
+
@value.inject(0) do |s, e|
|
65
|
+
next s + e.count("\n") if e.is_a?(String)
|
66
|
+
next s
|
67
|
+
end
|
63
68
|
end
|
64
69
|
|
65
70
|
private
|
66
71
|
|
67
72
|
def normalize_indentation(str)
|
68
|
-
|
73
|
+
ind = str.split("\n").inject(str[/^[ \t]*/].split("")) do |pre, line|
|
69
74
|
line[/^[ \t]*/].split("").zip(pre).inject([]) do |arr, (a, b)|
|
70
75
|
break arr if a != b
|
71
|
-
arr
|
76
|
+
arr << a
|
72
77
|
end
|
73
78
|
end.join
|
74
|
-
str.gsub(/^#{
|
79
|
+
str.gsub(/^#{ind}/, '')
|
75
80
|
end
|
76
81
|
end
|
77
82
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Sass::Tree
|
2
|
+
# A node representing an `@import` rule that's importing plain CSS.
|
3
|
+
#
|
4
|
+
# @see Sass::Tree
|
5
|
+
class CssImportNode < DirectiveNode
|
6
|
+
# The URI being imported, either as a plain string or an interpolated
|
7
|
+
# script string.
|
8
|
+
#
|
9
|
+
# @return [String, Sass::Script::Tree::Node]
|
10
|
+
attr_accessor :uri
|
11
|
+
|
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.
|
14
|
+
#
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :resolved_uri
|
17
|
+
|
18
|
+
# The media query for this rule, interspersed with
|
19
|
+
# {Sass::Script::Tree::Node}s representing `#{}`-interpolation. Any adjacent
|
20
|
+
# strings will be merged together.
|
21
|
+
#
|
22
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
23
|
+
attr_accessor :query
|
24
|
+
|
25
|
+
# The media query for this rule, without any unresolved interpolation.
|
26
|
+
# It's only set once {Tree::Visitors::Perform} has been run.
|
27
|
+
#
|
28
|
+
# @return [Sass::Media::QueryList]
|
29
|
+
attr_accessor :resolved_query
|
30
|
+
|
31
|
+
# @param uri [String, Sass::Script::Tree::Node] See \{#uri}
|
32
|
+
# @param query [Array<String, Sass::Script::Tree::Node>] See \{#query}
|
33
|
+
def initialize(uri, query = [])
|
34
|
+
@uri = uri
|
35
|
+
@query = query
|
36
|
+
super('')
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param uri [String] See \{#resolved_uri}
|
40
|
+
# @return [CssImportNode]
|
41
|
+
def self.resolved(uri)
|
42
|
+
node = new(uri)
|
43
|
+
node.resolved_uri = uri
|
44
|
+
node
|
45
|
+
end
|
46
|
+
|
47
|
+
# @see DirectiveNode#value
|
48
|
+
def value; raise NotImplementedError; end
|
49
|
+
|
50
|
+
# @see DirectiveNode#resolved_value
|
51
|
+
def resolved_value
|
52
|
+
@resolved_value ||=
|
53
|
+
begin
|
54
|
+
str = "@import #{resolved_uri}"
|
55
|
+
str << " #{resolved_query.to_css}" if resolved_query
|
56
|
+
str
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
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::Node]
|
9
|
-
|
8
|
+
# @return [Script::Tree::Node]
|
9
|
+
attr_accessor :expr
|
10
10
|
|
11
|
-
# @param expr [Script::Node] The expression to print
|
11
|
+
# @param expr [Script::Tree::Node] The expression to print
|
12
12
|
def initialize(expr)
|
13
13
|
@expr = expr
|
14
14
|
super()
|
@@ -9,15 +9,45 @@ module Sass::Tree
|
|
9
9
|
#
|
10
10
|
# @see Sass::Tree
|
11
11
|
class DirectiveNode < Node
|
12
|
-
# The text of the directive, `@` and all.
|
12
|
+
# The text of the directive, `@` and all, with interpolation included.
|
13
13
|
#
|
14
|
-
# @return [String]
|
14
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
15
15
|
attr_accessor :value
|
16
16
|
|
17
|
-
#
|
17
|
+
# The text of the directive after any interpolated SassScript has been resolved.
|
18
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
19
|
+
#
|
20
|
+
# @return [String]
|
21
|
+
attr_accessor :resolved_value
|
22
|
+
|
23
|
+
# @see RuleNode#tabs
|
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}
|
18
30
|
def initialize(value)
|
19
31
|
@value = value
|
32
|
+
@tabs = 0
|
20
33
|
super()
|
21
34
|
end
|
35
|
+
|
36
|
+
# @param value [String] See \{#resolved_value}
|
37
|
+
# @return [DirectiveNode]
|
38
|
+
def self.resolved(value)
|
39
|
+
node = new([value])
|
40
|
+
node.resolved_value = value
|
41
|
+
node
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [String] The name of the directive, including `@`.
|
45
|
+
def name
|
46
|
+
value.first.gsub(/ .*$/, '')
|
47
|
+
end
|
48
|
+
|
49
|
+
def bubbles?
|
50
|
+
has_children
|
51
|
+
end
|
22
52
|
end
|
23
53
|
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 [String]
|
10
|
-
attr_reader :
|
8
|
+
# The names of the loop variables.
|
9
|
+
# @return [Array<String>]
|
10
|
+
attr_reader :vars
|
11
11
|
|
12
12
|
# The parse tree for the list.
|
13
|
-
# @
|
14
|
-
|
13
|
+
# @return [Script::Tree::Node]
|
14
|
+
attr_accessor :list
|
15
15
|
|
16
|
-
# @param
|
17
|
-
# @param list [Script::Node] The parse tree for the list
|
18
|
-
def initialize(
|
19
|
-
@
|
16
|
+
# @param vars [Array<String>] The names of the loop variables
|
17
|
+
# @param list [Script::Tree::Node] The parse tree for the list
|
18
|
+
def initialize(vars, list)
|
19
|
+
@vars = vars
|
20
20
|
@list = list
|
21
21
|
super()
|
22
22
|
end
|
@@ -11,18 +11,32 @@ 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::Node}s
|
14
|
+
# The CSS selector to extend, interspersed with {Sass::Script::Tree::Node}s
|
15
15
|
# representing `#{}`-interpolation.
|
16
16
|
#
|
17
|
-
# @return [Array<String, Sass::Script::Node>]
|
18
|
-
|
17
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
18
|
+
attr_accessor :selector
|
19
19
|
|
20
|
-
#
|
20
|
+
# The extended selector source range.
|
21
|
+
#
|
22
|
+
# @return [Sass::Source::Range]
|
23
|
+
attr_accessor :selector_source_range
|
24
|
+
|
25
|
+
# Whether the `@extend` is allowed to match no selectors or not.
|
26
|
+
#
|
27
|
+
# @return [Boolean]
|
28
|
+
def optional?; @optional; end
|
29
|
+
|
30
|
+
# @param selector [Array<String, Sass::Script::Tree::Node>]
|
21
31
|
# The CSS selector to extend,
|
22
|
-
# interspersed with {Sass::Script::Node}s
|
32
|
+
# interspersed with {Sass::Script::Tree::Node}s
|
23
33
|
# representing `#{}`-interpolation.
|
24
|
-
|
34
|
+
# @param optional [Boolean] See \{ExtendNode#optional?}
|
35
|
+
# @param selector_source_range [Sass::Source::Range] The extended selector source range.
|
36
|
+
def initialize(selector, optional, selector_source_range)
|
25
37
|
@selector = selector
|
38
|
+
@optional = optional
|
39
|
+
@selector_source_range = selector_source_range
|
26
40
|
super()
|
27
41
|
end
|
28
42
|
end
|
data/lib/sass/tree/for_node.rb
CHANGED
@@ -10,20 +10,20 @@ module Sass::Tree
|
|
10
10
|
attr_reader :var
|
11
11
|
|
12
12
|
# The parse tree for the initial expression.
|
13
|
-
# @return [Script::Node]
|
14
|
-
|
13
|
+
# @return [Script::Tree::Node]
|
14
|
+
attr_accessor :from
|
15
15
|
|
16
16
|
# The parse tree for the final expression.
|
17
|
-
# @return [Script::Node]
|
18
|
-
|
17
|
+
# @return [Script::Tree::Node]
|
18
|
+
attr_accessor :to
|
19
19
|
|
20
20
|
# Whether to include `to` in the loop or stop just before.
|
21
21
|
# @return [Boolean]
|
22
22
|
attr_reader :exclusive
|
23
23
|
|
24
24
|
# @param var [String] See \{#var}
|
25
|
-
# @param from [Script::Node] See \{#from}
|
26
|
-
# @param to [Script::Node] See \{#to}
|
25
|
+
# @param from [Script::Tree::Node] See \{#from}
|
26
|
+
# @param to [Script::Tree::Node] See \{#to}
|
27
27
|
# @param exclusive [Boolean] See \{#exclusive}
|
28
28
|
def initialize(var, from, to, exclusive)
|
29
29
|
@var = var
|
@@ -12,14 +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::Node>]
|
16
|
-
|
15
|
+
# @return [Array<Script::Tree::Node>]
|
16
|
+
attr_accessor :args
|
17
|
+
|
18
|
+
# The splat argument for this function, if one exists.
|
19
|
+
#
|
20
|
+
# @return [Script::Tree::Node?]
|
21
|
+
attr_accessor :splat
|
17
22
|
|
18
23
|
# @param name [String] The function name
|
19
|
-
# @param args [Array<(Script::Node, Script::Node)>]
|
20
|
-
|
24
|
+
# @param args [Array<(Script::Tree::Node, Script::Tree::Node)>]
|
25
|
+
# The arguments for the function.
|
26
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
27
|
+
def initialize(name, args, splat)
|
21
28
|
@name = name
|
22
29
|
@args = args
|
30
|
+
@splat = splat
|
23
31
|
super()
|
24
32
|
end
|
25
33
|
end
|
data/lib/sass/tree/if_node.rb
CHANGED
@@ -13,7 +13,7 @@ module Sass::Tree
|
|
13
13
|
# If this is nil, this is an `@else` node, not an `@else if`.
|
14
14
|
#
|
15
15
|
# @return [Script::Expr]
|
16
|
-
|
16
|
+
attr_accessor :expr
|
17
17
|
|
18
18
|
# The next {IfNode} in the if-else list, or `nil`.
|
19
19
|
#
|
@@ -35,14 +35,8 @@ module Sass::Tree
|
|
35
35
|
@last_else = node
|
36
36
|
end
|
37
37
|
|
38
|
-
# @see Node#options=
|
39
|
-
def options=(options)
|
40
|
-
super
|
41
|
-
self.else.options = options if self.else
|
42
|
-
end
|
43
|
-
|
44
38
|
def _dump(f)
|
45
|
-
Marshal.dump([
|
39
|
+
Marshal.dump([expr, self.else, children])
|
46
40
|
end
|
47
41
|
|
48
42
|
def self._load(data)
|
@@ -54,12 +48,5 @@ module Sass::Tree
|
|
54
48
|
node.else ? node.else.instance_variable_get('@last_else') : node)
|
55
49
|
node
|
56
50
|
end
|
57
|
-
|
58
|
-
# @see Node#deep_copy
|
59
|
-
def deep_copy
|
60
|
-
node = super
|
61
|
-
node.else = self.else.deep_copy if self.else
|
62
|
-
node
|
63
|
-
end
|
64
51
|
end
|
65
52
|
end
|
@@ -9,6 +9,9 @@ module Sass
|
|
9
9
|
# @return [String]
|
10
10
|
attr_reader :imported_filename
|
11
11
|
|
12
|
+
# Sets the imported file.
|
13
|
+
attr_writer :imported_file
|
14
|
+
|
12
15
|
# @param imported_filename [String] The name of the imported file
|
13
16
|
def initialize(imported_filename)
|
14
17
|
@imported_filename = imported_filename
|
@@ -43,14 +46,13 @@ module Sass
|
|
43
46
|
|
44
47
|
if @options[:importer]
|
45
48
|
f = @options[:importer].find_relative(
|
46
|
-
@imported_filename, @options[:filename],
|
49
|
+
@imported_filename, @options[:filename], options_for_importer)
|
47
50
|
return f if f
|
48
51
|
end
|
49
52
|
|
50
53
|
paths.each do |p|
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
+
f = p.find(@imported_filename, options_for_importer)
|
55
|
+
return f if f
|
54
56
|
end
|
55
57
|
|
56
58
|
message = "File to import not found or unreadable: #{@imported_filename}.\n"
|
@@ -61,7 +63,11 @@ module Sass
|
|
61
63
|
end
|
62
64
|
raise SyntaxError.new(message)
|
63
65
|
rescue SyntaxError => e
|
64
|
-
raise SyntaxError.new(e.message, :line =>
|
66
|
+
raise SyntaxError.new(e.message, :line => line, :filename => @filename)
|
67
|
+
end
|
68
|
+
|
69
|
+
def options_for_importer
|
70
|
+
@options.merge(:_from_import_node => true)
|
65
71
|
end
|
66
72
|
end
|
67
73
|
end
|
data/lib/sass/tree/media_node.rb
CHANGED
@@ -6,27 +6,43 @@ module Sass::Tree
|
|
6
6
|
#
|
7
7
|
# @see Sass::Tree
|
8
8
|
class MediaNode < DirectiveNode
|
9
|
-
#
|
9
|
+
# TODO: parse and cache the query immediately if it has no dynamic elements
|
10
|
+
|
11
|
+
# The media query for this rule, interspersed with {Sass::Script::Tree::Node}s
|
12
|
+
# representing `#{}`-interpolation. Any adjacent strings will be merged
|
13
|
+
# together.
|
10
14
|
#
|
11
|
-
# @return [String]
|
15
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
12
16
|
attr_accessor :query
|
13
17
|
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
# @
|
18
|
-
attr_accessor :
|
18
|
+
# The media query for this rule, without any unresolved interpolation. It's
|
19
|
+
# only set once {Tree::Visitors::Perform} has been run.
|
20
|
+
#
|
21
|
+
# @return [Sass::Media::QueryList]
|
22
|
+
attr_accessor :resolved_query
|
19
23
|
|
20
|
-
# @param query [String] See \{#query}
|
24
|
+
# @param query [Array<String, Sass::Script::Tree::Node>] See \{#query}
|
21
25
|
def initialize(query)
|
22
26
|
@query = query
|
23
|
-
@tabs = 0
|
24
27
|
super('')
|
25
28
|
end
|
26
29
|
|
27
30
|
# @see DirectiveNode#value
|
28
|
-
def value
|
29
|
-
|
31
|
+
def value; raise NotImplementedError; end
|
32
|
+
|
33
|
+
# @see DirectiveNode#name
|
34
|
+
def name; '@media'; end
|
35
|
+
|
36
|
+
# @see DirectiveNode#resolved_value
|
37
|
+
def resolved_value
|
38
|
+
@resolved_value ||= "@media #{resolved_query.to_css}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# True when the directive has no visible children.
|
42
|
+
#
|
43
|
+
# @return [Boolean]
|
44
|
+
def invisible?
|
45
|
+
children.all? {|c| c.invisible?}
|
30
46
|
end
|
31
47
|
end
|
32
48
|
end
|
@@ -12,14 +12,25 @@ 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::Node, Script::Node)>]
|
16
|
-
|
15
|
+
# @return [Array<(Script::Tree::Node, Script::Tree::Node)>]
|
16
|
+
attr_accessor :args
|
17
|
+
|
18
|
+
# The splat argument for this mixin, if one exists.
|
19
|
+
#
|
20
|
+
# @return [Script::Tree::Node?]
|
21
|
+
attr_accessor :splat
|
22
|
+
|
23
|
+
# Whether the mixin uses `@content`. Set during the nesting check phase.
|
24
|
+
# @return [Boolean]
|
25
|
+
attr_accessor :has_content
|
17
26
|
|
18
27
|
# @param name [String] The mixin name
|
19
|
-
# @param args [Array<(Script::Node, Script::Node)>] See \{#args}
|
20
|
-
|
28
|
+
# @param args [Array<(Script::Tree::Node, Script::Tree::Node)>] See \{#args}
|
29
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
30
|
+
def initialize(name, args, splat)
|
21
31
|
@name = name
|
22
32
|
@args = args
|
33
|
+
@splat = splat
|
23
34
|
super()
|
24
35
|
end
|
25
36
|
end
|
data/lib/sass/tree/mixin_node.rb
CHANGED
@@ -12,20 +12,40 @@ module Sass::Tree
|
|
12
12
|
attr_reader :name
|
13
13
|
|
14
14
|
# The arguments to the mixin.
|
15
|
-
# @return [Array<Script::Node>]
|
16
|
-
|
15
|
+
# @return [Array<Script::Tree::Node>]
|
16
|
+
attr_accessor :args
|
17
17
|
|
18
18
|
# A hash from keyword argument names to values.
|
19
|
-
# @return [
|
20
|
-
|
19
|
+
# @return [Sass::Util::NormalizedMap<Script::Tree::Node>]
|
20
|
+
attr_accessor :keywords
|
21
|
+
|
22
|
+
# The first splat argument for this mixin, if one exists.
|
23
|
+
#
|
24
|
+
# This could be a list of positional arguments, a map of keyword
|
25
|
+
# arguments, or an arglist containing both.
|
26
|
+
#
|
27
|
+
# @return [Node?]
|
28
|
+
attr_accessor :splat
|
29
|
+
|
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
|
21
37
|
|
22
38
|
# @param name [String] The name of the mixin
|
23
|
-
# @param args [Array<Script::Node>] See \{#args}
|
24
|
-
# @param
|
25
|
-
|
39
|
+
# @param args [Array<Script::Tree::Node>] See \{#args}
|
40
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
41
|
+
# @param kwarg_splat [Script::Tree::Node] See \{#kwarg_splat}
|
42
|
+
# @param keywords [Sass::Util::NormalizedMap<Script::Tree::Node>] See \{#keywords}
|
43
|
+
def initialize(name, args, keywords, splat, kwarg_splat)
|
26
44
|
@name = name
|
27
45
|
@args = args
|
28
46
|
@keywords = keywords
|
47
|
+
@splat = splat
|
48
|
+
@kwarg_splat = kwarg_splat
|
29
49
|
super()
|
30
50
|
end
|
31
51
|
end
|