oreorenasass 3.4.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/.yardopts +11 -0
- data/CONTRIBUTING +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +221 -0
- data/Rakefile +370 -0
- data/VERSION +1 -0
- data/VERSION_NAME +1 -0
- data/bin/sass +13 -0
- data/bin/sass-convert +12 -0
- data/bin/scss +13 -0
- data/extra/update_watch.rb +13 -0
- data/init.rb +18 -0
- data/lib/sass/cache_stores/base.rb +88 -0
- data/lib/sass/cache_stores/chain.rb +34 -0
- data/lib/sass/cache_stores/filesystem.rb +60 -0
- data/lib/sass/cache_stores/memory.rb +47 -0
- data/lib/sass/cache_stores/null.rb +25 -0
- data/lib/sass/cache_stores.rb +15 -0
- data/lib/sass/callbacks.rb +67 -0
- data/lib/sass/css.rb +407 -0
- data/lib/sass/engine.rb +1181 -0
- data/lib/sass/environment.rb +191 -0
- data/lib/sass/error.rb +198 -0
- data/lib/sass/exec/base.rb +187 -0
- data/lib/sass/exec/sass_convert.rb +264 -0
- data/lib/sass/exec/sass_scss.rb +424 -0
- data/lib/sass/exec.rb +9 -0
- data/lib/sass/features.rb +47 -0
- data/lib/sass/importers/base.rb +182 -0
- data/lib/sass/importers/filesystem.rb +211 -0
- data/lib/sass/importers.rb +22 -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 +210 -0
- data/lib/sass/plugin/compiler.rb +565 -0
- data/lib/sass/plugin/configuration.rb +118 -0
- data/lib/sass/plugin/generic.rb +15 -0
- data/lib/sass/plugin/merb.rb +48 -0
- data/lib/sass/plugin/rack.rb +60 -0
- data/lib/sass/plugin/rails.rb +47 -0
- data/lib/sass/plugin/staleness_checker.rb +199 -0
- data/lib/sass/plugin.rb +133 -0
- data/lib/sass/railtie.rb +10 -0
- data/lib/sass/repl.rb +57 -0
- data/lib/sass/root.rb +7 -0
- data/lib/sass/script/css_lexer.rb +33 -0
- data/lib/sass/script/css_parser.rb +34 -0
- data/lib/sass/script/functions.rb +2626 -0
- data/lib/sass/script/lexer.rb +449 -0
- data/lib/sass/script/parser.rb +637 -0
- data/lib/sass/script/tree/funcall.rb +306 -0
- data/lib/sass/script/tree/interpolation.rb +118 -0
- 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/tree/node.rb +109 -0
- data/lib/sass/script/tree/operation.rb +103 -0
- data/lib/sass/script/tree/selector.rb +26 -0
- data/lib/sass/script/tree/string_interpolation.rb +104 -0
- data/lib/sass/script/tree/unary_operation.rb +69 -0
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +16 -0
- data/lib/sass/script/value/arg_list.rb +36 -0
- data/lib/sass/script/value/base.rb +240 -0
- data/lib/sass/script/value/bool.rb +35 -0
- data/lib/sass/script/value/color.rb +680 -0
- data/lib/sass/script/value/helpers.rb +262 -0
- data/lib/sass/script/value/list.rb +113 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +44 -0
- data/lib/sass/script/value/number.rb +530 -0
- data/lib/sass/script/value/string.rb +97 -0
- data/lib/sass/script/value.rb +11 -0
- data/lib/sass/script.rb +66 -0
- data/lib/sass/scss/css_parser.rb +42 -0
- data/lib/sass/scss/parser.rb +1209 -0
- data/lib/sass/scss/rx.rb +141 -0
- data/lib/sass/scss/script_lexer.rb +15 -0
- data/lib/sass/scss/script_parser.rb +25 -0
- data/lib/sass/scss/static_parser.rb +368 -0
- data/lib/sass/scss.rb +16 -0
- data/lib/sass/selector/abstract_sequence.rb +109 -0
- data/lib/sass/selector/comma_sequence.rb +175 -0
- data/lib/sass/selector/pseudo.rb +256 -0
- data/lib/sass/selector/sequence.rb +600 -0
- data/lib/sass/selector/simple.rb +117 -0
- data/lib/sass/selector/simple_sequence.rb +325 -0
- data/lib/sass/selector.rb +326 -0
- data/lib/sass/shared.rb +76 -0
- data/lib/sass/source/map.rb +210 -0
- data/lib/sass/source/position.rb +39 -0
- data/lib/sass/source/range.rb +41 -0
- data/lib/sass/stack.rb +120 -0
- data/lib/sass/supports.rb +227 -0
- data/lib/sass/tree/at_root_node.rb +83 -0
- data/lib/sass/tree/charset_node.rb +22 -0
- data/lib/sass/tree/comment_node.rb +82 -0
- 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 +18 -0
- data/lib/sass/tree/directive_node.rb +59 -0
- data/lib/sass/tree/each_node.rb +24 -0
- data/lib/sass/tree/error_node.rb +18 -0
- data/lib/sass/tree/extend_node.rb +43 -0
- data/lib/sass/tree/for_node.rb +36 -0
- data/lib/sass/tree/function_node.rb +39 -0
- data/lib/sass/tree/if_node.rb +52 -0
- data/lib/sass/tree/import_node.rb +74 -0
- data/lib/sass/tree/keyframe_rule_node.rb +15 -0
- data/lib/sass/tree/media_node.rb +48 -0
- data/lib/sass/tree/mixin_def_node.rb +38 -0
- data/lib/sass/tree/mixin_node.rb +52 -0
- data/lib/sass/tree/node.rb +238 -0
- data/lib/sass/tree/prop_node.rb +171 -0
- data/lib/sass/tree/return_node.rb +19 -0
- data/lib/sass/tree/root_node.rb +44 -0
- data/lib/sass/tree/rule_node.rb +145 -0
- 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 +36 -0
- data/lib/sass/tree/visitors/base.rb +72 -0
- data/lib/sass/tree/visitors/check_nesting.rb +177 -0
- data/lib/sass/tree/visitors/convert.rb +334 -0
- data/lib/sass/tree/visitors/cssize.rb +369 -0
- data/lib/sass/tree/visitors/deep_copy.rb +107 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +539 -0
- data/lib/sass/tree/visitors/set_options.rb +139 -0
- data/lib/sass/tree/visitors/to_css.rb +381 -0
- data/lib/sass/tree/warn_node.rb +18 -0
- data/lib/sass/tree/while_node.rb +18 -0
- 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 +110 -0
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +1318 -0
- data/lib/sass/version.rb +124 -0
- data/lib/sass.rb +102 -0
- data/rails/init.rb +1 -0
- data/test/sass/cache_test.rb +131 -0
- data/test/sass/callbacks_test.rb +61 -0
- data/test/sass/compiler_test.rb +232 -0
- data/test/sass/conversion_test.rb +2054 -0
- data/test/sass/css2sass_test.rb +477 -0
- data/test/sass/data/hsl-rgb.txt +319 -0
- data/test/sass/encoding_test.rb +219 -0
- data/test/sass/engine_test.rb +3301 -0
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +1661 -0
- 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 +1926 -0
- data/test/sass/importer_test.rb +412 -0
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/mock_importer.rb +49 -0
- data/test/sass/more_results/more1.css +9 -0
- data/test/sass/more_results/more1_with_line_comments.css +26 -0
- data/test/sass/more_results/more_import.css +29 -0
- data/test/sass/more_templates/_more_partial.sass +2 -0
- data/test/sass/more_templates/more1.sass +23 -0
- data/test/sass/more_templates/more_import.sass +11 -0
- data/test/sass/plugin_test.rb +554 -0
- data/test/sass/results/alt.css +4 -0
- data/test/sass/results/basic.css +9 -0
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/compact.css +5 -0
- data/test/sass/results/complex.css +86 -0
- data/test/sass/results/compressed.css +1 -0
- data/test/sass/results/expanded.css +19 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/if.css +3 -0
- data/test/sass/results/import.css +31 -0
- data/test/sass/results/import_charset.css +5 -0
- data/test/sass/results/import_charset_1_8.css +5 -0
- data/test/sass/results/import_charset_ibm866.css +5 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/line_numbers.css +49 -0
- data/test/sass/results/mixins.css +95 -0
- data/test/sass/results/multiline.css +24 -0
- data/test/sass/results/nested.css +22 -0
- data/test/sass/results/options.css +1 -0
- data/test/sass/results/parent_ref.css +13 -0
- data/test/sass/results/script.css +16 -0
- data/test/sass/results/scss_import.css +31 -0
- data/test/sass/results/scss_importee.css +2 -0
- data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
- data/test/sass/results/subdir/subdir.css +3 -0
- data/test/sass/results/units.css +11 -0
- data/test/sass/results/warn.css +0 -0
- data/test/sass/results/warn_imported.css +0 -0
- data/test/sass/script_conversion_test.rb +328 -0
- data/test/sass/script_test.rb +1054 -0
- data/test/sass/scss/css_test.rb +1215 -0
- data/test/sass/scss/rx_test.rb +156 -0
- data/test/sass/scss/scss_test.rb +3900 -0
- data/test/sass/scss/test_helper.rb +37 -0
- data/test/sass/source_map_test.rb +977 -0
- data/test/sass/superselector_test.rb +191 -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_charset_ibm866.sass +4 -0
- data/test/sass/templates/_imported_charset_utf8.sass +4 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_partial.sass +2 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/alt.sass +16 -0
- data/test/sass/templates/basic.sass +23 -0
- data/test/sass/templates/bork1.sass +2 -0
- data/test/sass/templates/bork2.sass +2 -0
- data/test/sass/templates/bork3.sass +2 -0
- data/test/sass/templates/bork4.sass +2 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/compact.sass +17 -0
- data/test/sass/templates/complex.sass +305 -0
- data/test/sass/templates/compressed.sass +15 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/expanded.sass +17 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/if.sass +11 -0
- data/test/sass/templates/import.sass +12 -0
- data/test/sass/templates/import_charset.sass +9 -0
- data/test/sass/templates/import_charset_1_8.sass +6 -0
- data/test/sass/templates/import_charset_ibm866.sass +11 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/importee.less +2 -0
- data/test/sass/templates/importee.sass +19 -0
- data/test/sass/templates/line_numbers.sass +13 -0
- data/test/sass/templates/mixin_bork.sass +5 -0
- data/test/sass/templates/mixins.sass +76 -0
- data/test/sass/templates/multiline.sass +20 -0
- data/test/sass/templates/nested.sass +25 -0
- data/test/sass/templates/nested_bork1.sass +2 -0
- data/test/sass/templates/nested_bork2.sass +2 -0
- data/test/sass/templates/nested_bork3.sass +2 -0
- data/test/sass/templates/nested_bork4.sass +2 -0
- data/test/sass/templates/nested_import.sass +2 -0
- data/test/sass/templates/nested_mixin_bork.sass +6 -0
- data/test/sass/templates/options.sass +2 -0
- data/test/sass/templates/parent_ref.sass +25 -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/script.sass +101 -0
- data/test/sass/templates/scss_import.scss +12 -0
- data/test/sass/templates/scss_importee.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/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
- data/test/sass/templates/subdir/subdir.sass +6 -0
- data/test/sass/templates/units.sass +11 -0
- data/test/sass/templates/warn.sass +3 -0
- data/test/sass/templates/warn_imported.sass +4 -0
- data/test/sass/test_helper.rb +8 -0
- 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/subset_map_test.rb +91 -0
- data/test/sass/util_test.rb +467 -0
- data/test/sass/value_helpers_test.rb +179 -0
- data/test/test_helper.rb +109 -0
- metadata +386 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
module Sass::Script::Tree
|
2
|
+
# A SassScript parse node representing a unary operation,
|
3
|
+
# such as `-$b` or `not true`.
|
4
|
+
#
|
5
|
+
# Currently only `-`, `/`, and `not` are unary operators.
|
6
|
+
class UnaryOperation < Node
|
7
|
+
# @return [Symbol] The operation to perform
|
8
|
+
attr_reader :operator
|
9
|
+
|
10
|
+
# @return [Script::Node] The parse-tree node for the object of the operator
|
11
|
+
attr_reader :operand
|
12
|
+
|
13
|
+
# @param operand [Script::Node] See \{#operand}
|
14
|
+
# @param operator [Symbol] See \{#operator}
|
15
|
+
def initialize(operand, operator)
|
16
|
+
@operand = operand
|
17
|
+
@operator = operator
|
18
|
+
super()
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [String] A human-readable s-expression representation of the operation
|
22
|
+
def inspect
|
23
|
+
"(#{@operator.inspect} #{@operand.inspect})"
|
24
|
+
end
|
25
|
+
|
26
|
+
# @see Node#to_sass
|
27
|
+
def to_sass(opts = {})
|
28
|
+
operand = @operand.to_sass(opts)
|
29
|
+
if @operand.is_a?(Operation) ||
|
30
|
+
(@operator == :minus &&
|
31
|
+
(operand =~ Sass::SCSS::RX::IDENT) == 0)
|
32
|
+
operand = "(#{@operand.to_sass(opts)})"
|
33
|
+
end
|
34
|
+
op = Sass::Script::Lexer::OPERATORS_REVERSE[@operator]
|
35
|
+
op + (op =~ /[a-z]/ ? " " : "") + operand
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns the operand of the operation.
|
39
|
+
#
|
40
|
+
# @return [Array<Node>]
|
41
|
+
# @see Node#children
|
42
|
+
def children
|
43
|
+
[@operand]
|
44
|
+
end
|
45
|
+
|
46
|
+
# @see Node#deep_copy
|
47
|
+
def deep_copy
|
48
|
+
node = dup
|
49
|
+
node.instance_variable_set('@operand', @operand.deep_copy)
|
50
|
+
node
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
# Evaluates the operation.
|
56
|
+
#
|
57
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
58
|
+
# @return [Sass::Script::Value] The SassScript object that is the value of the operation
|
59
|
+
# @raise [Sass::SyntaxError] if the operation is undefined for the operand
|
60
|
+
def _perform(environment)
|
61
|
+
operator = "unary_#{@operator}"
|
62
|
+
value = @operand.perform(environment)
|
63
|
+
value.send(operator)
|
64
|
+
rescue NoMethodError => e
|
65
|
+
raise e unless e.name.to_s == operator.to_s
|
66
|
+
raise Sass::SyntaxError.new("Undefined unary operation: \"#{@operator} #{value}\".")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Sass::Script::Tree
|
2
|
+
# A SassScript parse node representing a variable.
|
3
|
+
class Variable < Node
|
4
|
+
# The name of the variable.
|
5
|
+
#
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
# The underscored name of the variable.
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
attr_reader :underscored_name
|
13
|
+
|
14
|
+
# @param name [String] See \{#name}
|
15
|
+
def initialize(name)
|
16
|
+
@name = name
|
17
|
+
@underscored_name = name.gsub(/-/, "_")
|
18
|
+
super()
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [String] A string representation of the variable
|
22
|
+
def inspect(opts = {})
|
23
|
+
"$#{dasherize(name, opts)}"
|
24
|
+
end
|
25
|
+
alias_method :to_sass, :inspect
|
26
|
+
|
27
|
+
# Returns an empty array.
|
28
|
+
#
|
29
|
+
# @return [Array<Node>] empty
|
30
|
+
# @see Node#children
|
31
|
+
def children
|
32
|
+
[]
|
33
|
+
end
|
34
|
+
|
35
|
+
# @see Node#deep_copy
|
36
|
+
def deep_copy
|
37
|
+
dup
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
# Evaluates the variable.
|
43
|
+
#
|
44
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
45
|
+
# @return [Sass::Script::Value] The SassScript object that is the value of the variable
|
46
|
+
# @raise [Sass::SyntaxError] if the variable is undefined
|
47
|
+
def _perform(environment)
|
48
|
+
val = environment.var(name)
|
49
|
+
raise Sass::SyntaxError.new("Undefined variable: \"$#{name}\".") unless val
|
50
|
+
if val.is_a?(Sass::Script::Value::Number) && val.original
|
51
|
+
val = val.dup
|
52
|
+
val.original = nil
|
53
|
+
end
|
54
|
+
val
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# The module containing nodes in the SassScript parse tree. These nodes are
|
2
|
+
# all subclasses of {Sass::Script::Tree::Node}.
|
3
|
+
module Sass::Script::Tree
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'sass/script/tree/node'
|
7
|
+
require 'sass/script/tree/variable'
|
8
|
+
require 'sass/script/tree/funcall'
|
9
|
+
require 'sass/script/tree/operation'
|
10
|
+
require 'sass/script/tree/unary_operation'
|
11
|
+
require 'sass/script/tree/interpolation'
|
12
|
+
require 'sass/script/tree/string_interpolation'
|
13
|
+
require 'sass/script/tree/literal'
|
14
|
+
require 'sass/script/tree/list_literal'
|
15
|
+
require 'sass/script/tree/map_literal'
|
16
|
+
require 'sass/script/tree/selector'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Sass::Script::Value
|
2
|
+
# A SassScript object representing a variable argument list. This works just
|
3
|
+
# like a normal list, but can also contain keyword arguments.
|
4
|
+
#
|
5
|
+
# The keyword arguments attached to this list are unused except when this is
|
6
|
+
# passed as a glob argument to a function or mixin.
|
7
|
+
class ArgList < List
|
8
|
+
# Whether \{#keywords} has been accessed. If so, we assume that all keywords
|
9
|
+
# were valid for the function that created this ArgList.
|
10
|
+
#
|
11
|
+
# @return [Boolean]
|
12
|
+
attr_accessor :keywords_accessed
|
13
|
+
|
14
|
+
# Creates a new argument list.
|
15
|
+
#
|
16
|
+
# @param value [Array<Value>] See \{List#value}.
|
17
|
+
# @param keywords [Hash<String, Value>, NormalizedMap<Value>] See \{#keywords}
|
18
|
+
# @param separator [String] See \{List#separator}.
|
19
|
+
def initialize(value, keywords, separator)
|
20
|
+
super(value, separator)
|
21
|
+
if keywords.is_a?(Sass::Util::NormalizedMap)
|
22
|
+
@keywords = keywords
|
23
|
+
else
|
24
|
+
@keywords = Sass::Util::NormalizedMap.new(keywords)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# The keyword arguments attached to this list.
|
29
|
+
#
|
30
|
+
# @return [NormalizedMap<Value>]
|
31
|
+
def keywords
|
32
|
+
@keywords_accessed = true
|
33
|
+
@keywords
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,240 @@
|
|
1
|
+
module Sass::Script::Value
|
2
|
+
# The abstract superclass for SassScript objects.
|
3
|
+
#
|
4
|
+
# Many of these methods, especially the ones that correspond to SassScript operations,
|
5
|
+
# are designed to be overridden by subclasses which may change the semantics somewhat.
|
6
|
+
# The operations listed here are just the defaults.
|
7
|
+
class Base
|
8
|
+
# Returns the Ruby value of the value.
|
9
|
+
# The type of this value varies based on the subclass.
|
10
|
+
#
|
11
|
+
# @return [Object]
|
12
|
+
attr_reader :value
|
13
|
+
|
14
|
+
# The source range in the document on which this node appeared.
|
15
|
+
#
|
16
|
+
# @return [Sass::Source::Range]
|
17
|
+
attr_accessor :source_range
|
18
|
+
|
19
|
+
# Creates a new value.
|
20
|
+
#
|
21
|
+
# @param value [Object] The object for \{#value}
|
22
|
+
def initialize(value = nil)
|
23
|
+
value.freeze unless value.nil? || value == true || value == false
|
24
|
+
@value = value
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets the options hash for this node,
|
28
|
+
# as well as for all child nodes.
|
29
|
+
# See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
|
30
|
+
#
|
31
|
+
# @param options [{Symbol => Object}] The options
|
32
|
+
attr_writer :options
|
33
|
+
|
34
|
+
# Returns the options hash for this node.
|
35
|
+
#
|
36
|
+
# @return [{Symbol => Object}]
|
37
|
+
# @raise [Sass::SyntaxError] if the options hash hasn't been set.
|
38
|
+
# This should only happen when the value was created
|
39
|
+
# outside of the parser and \{#to\_s} was called on it
|
40
|
+
def options
|
41
|
+
return @options if @options
|
42
|
+
raise Sass::SyntaxError.new(<<MSG)
|
43
|
+
The #options attribute is not set on this #{self.class}.
|
44
|
+
This error is probably occurring because #to_s was called
|
45
|
+
on this value within a custom Sass function without first
|
46
|
+
setting the #options attribute.
|
47
|
+
MSG
|
48
|
+
end
|
49
|
+
|
50
|
+
# The SassScript `==` operation.
|
51
|
+
# **Note that this returns a {Sass::Script::Value::Bool} object,
|
52
|
+
# not a Ruby boolean**.
|
53
|
+
#
|
54
|
+
# @param other [Value] The right-hand side of the operator
|
55
|
+
# @return [Sass::Script::Value::Bool] True if this value is the same as the other,
|
56
|
+
# false otherwise
|
57
|
+
def eq(other)
|
58
|
+
Sass::Script::Value::Bool.new(self.class == other.class && value == other.value)
|
59
|
+
end
|
60
|
+
|
61
|
+
# The SassScript `!=` operation.
|
62
|
+
# **Note that this returns a {Sass::Script::Value::Bool} object,
|
63
|
+
# not a Ruby boolean**.
|
64
|
+
#
|
65
|
+
# @param other [Value] The right-hand side of the operator
|
66
|
+
# @return [Sass::Script::Value::Bool] False if this value is the same as the other,
|
67
|
+
# true otherwise
|
68
|
+
def neq(other)
|
69
|
+
Sass::Script::Value::Bool.new(!eq(other).to_bool)
|
70
|
+
end
|
71
|
+
|
72
|
+
# The SassScript `==` operation.
|
73
|
+
# **Note that this returns a {Sass::Script::Value::Bool} object,
|
74
|
+
# not a Ruby boolean**.
|
75
|
+
#
|
76
|
+
# @param other [Value] The right-hand side of the operator
|
77
|
+
# @return [Sass::Script::Value::Bool] True if this value is the same as the other,
|
78
|
+
# false otherwise
|
79
|
+
def unary_not
|
80
|
+
Sass::Script::Value::Bool.new(!to_bool)
|
81
|
+
end
|
82
|
+
|
83
|
+
# The SassScript `=` operation
|
84
|
+
# (used for proprietary MS syntax like `alpha(opacity=20)`).
|
85
|
+
#
|
86
|
+
# @param other [Value] The right-hand side of the operator
|
87
|
+
# @return [Script::Value::String] A string containing both values
|
88
|
+
# separated by `"="`
|
89
|
+
def single_eq(other)
|
90
|
+
Sass::Script::Value::String.new("#{to_s}=#{other.to_s}")
|
91
|
+
end
|
92
|
+
|
93
|
+
# The SassScript `+` operation.
|
94
|
+
#
|
95
|
+
# @param other [Value] The right-hand side of the operator
|
96
|
+
# @return [Script::Value::String] A string containing both values
|
97
|
+
# without any separation
|
98
|
+
def plus(other)
|
99
|
+
type = other.is_a?(Sass::Script::Value::String) ? other.type : :identifier
|
100
|
+
Sass::Script::Value::String.new(to_s(:quote => :none) + other.to_s(:quote => :none), type)
|
101
|
+
end
|
102
|
+
|
103
|
+
# The SassScript `-` operation.
|
104
|
+
#
|
105
|
+
# @param other [Value] The right-hand side of the operator
|
106
|
+
# @return [Script::Value::String] A string containing both values
|
107
|
+
# separated by `"-"`
|
108
|
+
def minus(other)
|
109
|
+
Sass::Script::Value::String.new("#{to_s}-#{other.to_s}")
|
110
|
+
end
|
111
|
+
|
112
|
+
# The SassScript `/` operation.
|
113
|
+
#
|
114
|
+
# @param other [Value] The right-hand side of the operator
|
115
|
+
# @return [Script::Value::String] A string containing both values
|
116
|
+
# separated by `"/"`
|
117
|
+
def div(other)
|
118
|
+
Sass::Script::Value::String.new("#{to_s}/#{other.to_s}")
|
119
|
+
end
|
120
|
+
|
121
|
+
# The SassScript unary `+` operation (e.g. `+$a`).
|
122
|
+
#
|
123
|
+
# @param other [Value] The right-hand side of the operator
|
124
|
+
# @return [Script::Value::String] A string containing the value
|
125
|
+
# preceded by `"+"`
|
126
|
+
def unary_plus
|
127
|
+
Sass::Script::Value::String.new("+#{to_s}")
|
128
|
+
end
|
129
|
+
|
130
|
+
# The SassScript unary `-` operation (e.g. `-$a`).
|
131
|
+
#
|
132
|
+
# @param other [Value] The right-hand side of the operator
|
133
|
+
# @return [Script::Value::String] A string containing the value
|
134
|
+
# preceded by `"-"`
|
135
|
+
def unary_minus
|
136
|
+
Sass::Script::Value::String.new("-#{to_s}")
|
137
|
+
end
|
138
|
+
|
139
|
+
# The SassScript unary `/` operation (e.g. `/$a`).
|
140
|
+
#
|
141
|
+
# @param other [Value] The right-hand side of the operator
|
142
|
+
# @return [Script::Value::String] A string containing the value
|
143
|
+
# preceded by `"/"`
|
144
|
+
def unary_div
|
145
|
+
Sass::Script::Value::String.new("/#{to_s}")
|
146
|
+
end
|
147
|
+
|
148
|
+
# Returns the hash code of this value. Two objects' hash codes should be
|
149
|
+
# equal if the objects are equal.
|
150
|
+
#
|
151
|
+
# @return [Fixnum] The hash code.
|
152
|
+
def hash
|
153
|
+
value.hash
|
154
|
+
end
|
155
|
+
|
156
|
+
def eql?(other)
|
157
|
+
self == other
|
158
|
+
end
|
159
|
+
|
160
|
+
# @return [String] A readable representation of the value
|
161
|
+
def inspect
|
162
|
+
value.inspect
|
163
|
+
end
|
164
|
+
|
165
|
+
# @return [Boolean] `true` (the Ruby boolean value)
|
166
|
+
def to_bool
|
167
|
+
true
|
168
|
+
end
|
169
|
+
|
170
|
+
# Compares this object with another.
|
171
|
+
#
|
172
|
+
# @param other [Object] The object to compare with
|
173
|
+
# @return [Boolean] Whether or not this value is equivalent to `other`
|
174
|
+
def ==(other)
|
175
|
+
eq(other).to_bool
|
176
|
+
end
|
177
|
+
|
178
|
+
# @return [Fixnum] The integer value of this value
|
179
|
+
# @raise [Sass::SyntaxError] if this value isn't an integer
|
180
|
+
def to_i
|
181
|
+
raise Sass::SyntaxError.new("#{inspect} is not an integer.")
|
182
|
+
end
|
183
|
+
|
184
|
+
# @raise [Sass::SyntaxError] if this value isn't an integer
|
185
|
+
def assert_int!; to_i; end
|
186
|
+
|
187
|
+
# Returns the separator for this value. For non-list-like values or the
|
188
|
+
# empty list, this will be `nil`. For lists or maps, it will be `:space` or
|
189
|
+
# `:comma`.
|
190
|
+
#
|
191
|
+
# @return [Symbol]
|
192
|
+
def separator; nil; end
|
193
|
+
|
194
|
+
# Returns the value of this value as a list.
|
195
|
+
# Single values are considered the same as single-element lists.
|
196
|
+
#
|
197
|
+
# @return [Array<Value>] This value as a list
|
198
|
+
def to_a
|
199
|
+
[self]
|
200
|
+
end
|
201
|
+
|
202
|
+
# Returns the value of this value as a hash. Most values don't have hash
|
203
|
+
# representations, but [Map]s and empty [List]s do.
|
204
|
+
#
|
205
|
+
# @return [Hash<Value, Value>] This value as a hash
|
206
|
+
# @raise [Sass::SyntaxError] if this value doesn't have a hash representation
|
207
|
+
def to_h
|
208
|
+
raise Sass::SyntaxError.new("#{inspect} is not a map.")
|
209
|
+
end
|
210
|
+
|
211
|
+
# Returns the string representation of this value
|
212
|
+
# as it would be output to the CSS document.
|
213
|
+
#
|
214
|
+
# @options opts :quote [String]
|
215
|
+
# The preferred quote style for quoted strings. If `:none`, strings are
|
216
|
+
# always emitted unquoted.
|
217
|
+
# @return [String]
|
218
|
+
def to_s(opts = {})
|
219
|
+
Sass::Util.abstract(self)
|
220
|
+
end
|
221
|
+
alias_method :to_sass, :to_s
|
222
|
+
|
223
|
+
# Returns whether or not this object is null.
|
224
|
+
#
|
225
|
+
# @return [Boolean] `false`
|
226
|
+
def null?
|
227
|
+
false
|
228
|
+
end
|
229
|
+
|
230
|
+
protected
|
231
|
+
|
232
|
+
# Evaluates the value.
|
233
|
+
#
|
234
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
235
|
+
# @return [Value] This value
|
236
|
+
def _perform(environment)
|
237
|
+
self
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Sass::Script::Value
|
2
|
+
# A SassScript object representing a boolean (true or false) value.
|
3
|
+
class Bool < Base
|
4
|
+
# The true value in SassScript.
|
5
|
+
#
|
6
|
+
# This is assigned before new is overridden below so that we use the default implementation.
|
7
|
+
TRUE = new(true)
|
8
|
+
|
9
|
+
# The false value in SassScript.
|
10
|
+
#
|
11
|
+
# This is assigned before new is overridden below so that we use the default implementation.
|
12
|
+
FALSE = new(false)
|
13
|
+
|
14
|
+
# We override object creation so that users of the core API
|
15
|
+
# will not need to know that booleans are specific constants.
|
16
|
+
#
|
17
|
+
# @param value A ruby value that will be tested for truthiness.
|
18
|
+
# @return [Bool] TRUE if value is truthy, FALSE if value is falsey
|
19
|
+
def self.new(value)
|
20
|
+
value ? TRUE : FALSE
|
21
|
+
end
|
22
|
+
|
23
|
+
# The Ruby value of the boolean.
|
24
|
+
#
|
25
|
+
# @return [Boolean]
|
26
|
+
attr_reader :value
|
27
|
+
alias_method :to_bool, :value
|
28
|
+
|
29
|
+
# @return [String] "true" or "false"
|
30
|
+
def to_s(opts = {})
|
31
|
+
@value.to_s
|
32
|
+
end
|
33
|
+
alias_method :to_sass, :to_s
|
34
|
+
end
|
35
|
+
end
|