xass 0.1.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 +201 -0
- data/Rakefile +349 -0
- data/VERSION +1 -0
- data/VERSION_NAME +1 -0
- data/bin/push +13 -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 +33 -0
- data/lib/sass/cache_stores/filesystem.rb +64 -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 +66 -0
- data/lib/sass/css.rb +409 -0
- data/lib/sass/engine.rb +930 -0
- data/lib/sass/environment.rb +101 -0
- data/lib/sass/error.rb +201 -0
- data/lib/sass/exec.rb +707 -0
- data/lib/sass/importers/base.rb +139 -0
- data/lib/sass/importers/filesystem.rb +186 -0
- data/lib/sass/importers.rb +22 -0
- data/lib/sass/logger/base.rb +32 -0
- data/lib/sass/logger/log_level.rb +49 -0
- data/lib/sass/logger.rb +15 -0
- data/lib/sass/media.rb +213 -0
- data/lib/sass/plugin/compiler.rb +406 -0
- data/lib/sass/plugin/configuration.rb +123 -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/arg_list.rb +52 -0
- data/lib/sass/script/bool.rb +18 -0
- data/lib/sass/script/color.rb +606 -0
- data/lib/sass/script/css_lexer.rb +29 -0
- data/lib/sass/script/css_parser.rb +31 -0
- data/lib/sass/script/funcall.rb +245 -0
- data/lib/sass/script/functions.rb +1543 -0
- data/lib/sass/script/interpolation.rb +79 -0
- data/lib/sass/script/lexer.rb +345 -0
- data/lib/sass/script/list.rb +85 -0
- data/lib/sass/script/literal.rb +221 -0
- data/lib/sass/script/node.rb +99 -0
- data/lib/sass/script/null.rb +37 -0
- data/lib/sass/script/number.rb +453 -0
- data/lib/sass/script/operation.rb +110 -0
- data/lib/sass/script/parser.rb +502 -0
- data/lib/sass/script/string.rb +51 -0
- data/lib/sass/script/string_interpolation.rb +103 -0
- data/lib/sass/script/unary_operation.rb +69 -0
- data/lib/sass/script/variable.rb +58 -0
- data/lib/sass/script.rb +39 -0
- data/lib/sass/scss/css_parser.rb +36 -0
- data/lib/sass/scss/parser.rb +1180 -0
- data/lib/sass/scss/rx.rb +133 -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 +54 -0
- data/lib/sass/scss.rb +16 -0
- data/lib/sass/selector/abstract_sequence.rb +94 -0
- data/lib/sass/selector/comma_sequence.rb +92 -0
- data/lib/sass/selector/sequence.rb +507 -0
- data/lib/sass/selector/simple.rb +119 -0
- data/lib/sass/selector/simple_sequence.rb +215 -0
- data/lib/sass/selector.rb +452 -0
- data/lib/sass/shared.rb +76 -0
- data/lib/sass/supports.rb +229 -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 +42 -0
- data/lib/sass/tree/each_node.rb +24 -0
- data/lib/sass/tree/extend_node.rb +36 -0
- data/lib/sass/tree/for_node.rb +36 -0
- data/lib/sass/tree/function_node.rb +34 -0
- data/lib/sass/tree/if_node.rb +52 -0
- data/lib/sass/tree/import_node.rb +75 -0
- data/lib/sass/tree/media_node.rb +58 -0
- data/lib/sass/tree/mixin_def_node.rb +38 -0
- data/lib/sass/tree/mixin_node.rb +39 -0
- data/lib/sass/tree/node.rb +196 -0
- data/lib/sass/tree/prop_node.rb +152 -0
- data/lib/sass/tree/return_node.rb +18 -0
- data/lib/sass/tree/root_node.rb +78 -0
- data/lib/sass/tree/rule_node.rb +132 -0
- data/lib/sass/tree/supports_node.rb +51 -0
- data/lib/sass/tree/trace_node.rb +32 -0
- data/lib/sass/tree/variable_node.rb +30 -0
- data/lib/sass/tree/visitors/base.rb +75 -0
- data/lib/sass/tree/visitors/check_nesting.rb +147 -0
- data/lib/sass/tree/visitors/convert.rb +316 -0
- data/lib/sass/tree/visitors/cssize.rb +241 -0
- 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 +446 -0
- data/lib/sass/tree/visitors/set_options.rb +125 -0
- data/lib/sass/tree/visitors/to_css.rb +228 -0
- data/lib/sass/tree/warn_node.rb +18 -0
- data/lib/sass/tree/while_node.rb +18 -0
- data/lib/sass/util/multibyte_string_scanner.rb +155 -0
- data/lib/sass/util/subset_map.rb +109 -0
- data/lib/sass/util/test.rb +10 -0
- data/lib/sass/util.rb +948 -0
- data/lib/sass/version.rb +126 -0
- data/lib/sass.rb +95 -0
- data/rails/init.rb +1 -0
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +10 -0
- data/test/sass/cache_test.rb +89 -0
- data/test/sass/callbacks_test.rb +61 -0
- data/test/sass/conversion_test.rb +1760 -0
- data/test/sass/css2sass_test.rb +458 -0
- data/test/sass/data/hsl-rgb.txt +319 -0
- data/test/sass/engine_test.rb +3244 -0
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +1482 -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 +1139 -0
- data/test/sass/importer_test.rb +192 -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 +564 -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 +299 -0
- data/test/sass/script_test.rb +622 -0
- data/test/sass/scss/css_test.rb +1100 -0
- data/test/sass/scss/rx_test.rb +156 -0
- data/test/sass/scss/scss_test.rb +2106 -0
- data/test/sass/scss/test_helper.rb +37 -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 +11 -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/subset_map_test.rb +91 -0
- data/test/sass/util_test.rb +382 -0
- data/test/test_helper.rb +80 -0
- metadata +354 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
module Sass::Script
|
|
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 Literal < Node
|
|
8
|
+
require 'sass/script/string'
|
|
9
|
+
require 'sass/script/number'
|
|
10
|
+
require 'sass/script/color'
|
|
11
|
+
require 'sass/script/bool'
|
|
12
|
+
require 'sass/script/null'
|
|
13
|
+
require 'sass/script/list'
|
|
14
|
+
require 'sass/script/arg_list'
|
|
15
|
+
|
|
16
|
+
# Returns the Ruby value of the literal.
|
|
17
|
+
# The type of this value varies based on the subclass.
|
|
18
|
+
#
|
|
19
|
+
# @return [Object]
|
|
20
|
+
attr_reader :value
|
|
21
|
+
|
|
22
|
+
# Creates a new literal.
|
|
23
|
+
#
|
|
24
|
+
# @param value [Object] The object for \{#value}
|
|
25
|
+
def initialize(value = nil)
|
|
26
|
+
@value = value
|
|
27
|
+
super()
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns an empty array.
|
|
31
|
+
#
|
|
32
|
+
# @return [Array<Node>] empty
|
|
33
|
+
# @see Node#children
|
|
34
|
+
def children
|
|
35
|
+
[]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @see Node#deep_copy
|
|
39
|
+
def deep_copy
|
|
40
|
+
dup
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns the options hash for this node.
|
|
44
|
+
#
|
|
45
|
+
# @return [{Symbol => Object}]
|
|
46
|
+
# @raise [Sass::SyntaxError] if the options hash hasn't been set.
|
|
47
|
+
# This should only happen when the literal was created
|
|
48
|
+
# outside of the parser and \{#to\_s} was called on it
|
|
49
|
+
def options
|
|
50
|
+
opts = super
|
|
51
|
+
return opts if opts
|
|
52
|
+
raise Sass::SyntaxError.new(<<MSG)
|
|
53
|
+
The #options attribute is not set on this #{self.class}.
|
|
54
|
+
This error is probably occurring because #to_s was called
|
|
55
|
+
on this literal within a custom Sass function without first
|
|
56
|
+
setting the #option attribute.
|
|
57
|
+
MSG
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The SassScript `==` operation.
|
|
61
|
+
# **Note that this returns a {Sass::Script::Bool} object,
|
|
62
|
+
# not a Ruby boolean**.
|
|
63
|
+
#
|
|
64
|
+
# @param other [Literal] The right-hand side of the operator
|
|
65
|
+
# @return [Bool] True if this literal is the same as the other,
|
|
66
|
+
# false otherwise
|
|
67
|
+
def eq(other)
|
|
68
|
+
Sass::Script::Bool.new(self.class == other.class && self.value == other.value)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# The SassScript `!=` operation.
|
|
72
|
+
# **Note that this returns a {Sass::Script::Bool} object,
|
|
73
|
+
# not a Ruby boolean**.
|
|
74
|
+
#
|
|
75
|
+
# @param other [Literal] The right-hand side of the operator
|
|
76
|
+
# @return [Bool] False if this literal is the same as the other,
|
|
77
|
+
# true otherwise
|
|
78
|
+
def neq(other)
|
|
79
|
+
Sass::Script::Bool.new(!eq(other).to_bool)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# The SassScript `==` operation.
|
|
83
|
+
# **Note that this returns a {Sass::Script::Bool} object,
|
|
84
|
+
# not a Ruby boolean**.
|
|
85
|
+
#
|
|
86
|
+
# @param other [Literal] The right-hand side of the operator
|
|
87
|
+
# @return [Bool] True if this literal is the same as the other,
|
|
88
|
+
# false otherwise
|
|
89
|
+
def unary_not
|
|
90
|
+
Sass::Script::Bool.new(!to_bool)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# The SassScript `=` operation
|
|
94
|
+
# (used for proprietary MS syntax like `alpha(opacity=20)`).
|
|
95
|
+
#
|
|
96
|
+
# @param other [Literal] The right-hand side of the operator
|
|
97
|
+
# @return [Script::String] A string containing both literals
|
|
98
|
+
# separated by `"="`
|
|
99
|
+
def single_eq(other)
|
|
100
|
+
Sass::Script::String.new("#{self.to_s}=#{other.to_s}")
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# The SassScript `+` operation.
|
|
104
|
+
#
|
|
105
|
+
# @param other [Literal] The right-hand side of the operator
|
|
106
|
+
# @return [Script::String] A string containing both literals
|
|
107
|
+
# without any separation
|
|
108
|
+
def plus(other)
|
|
109
|
+
if other.is_a?(Sass::Script::String)
|
|
110
|
+
return Sass::Script::String.new(self.to_s + other.value, other.type)
|
|
111
|
+
end
|
|
112
|
+
Sass::Script::String.new(self.to_s + other.to_s)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# The SassScript `-` operation.
|
|
116
|
+
#
|
|
117
|
+
# @param other [Literal] The right-hand side of the operator
|
|
118
|
+
# @return [Script::String] A string containing both literals
|
|
119
|
+
# separated by `"-"`
|
|
120
|
+
def minus(other)
|
|
121
|
+
Sass::Script::String.new("#{self.to_s}-#{other.to_s}")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# The SassScript `/` operation.
|
|
125
|
+
#
|
|
126
|
+
# @param other [Literal] The right-hand side of the operator
|
|
127
|
+
# @return [Script::String] A string containing both literals
|
|
128
|
+
# separated by `"/"`
|
|
129
|
+
def div(other)
|
|
130
|
+
Sass::Script::String.new("#{self.to_s}/#{other.to_s}")
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# The SassScript unary `+` operation (e.g. `+$a`).
|
|
134
|
+
#
|
|
135
|
+
# @param other [Literal] The right-hand side of the operator
|
|
136
|
+
# @return [Script::String] A string containing the literal
|
|
137
|
+
# preceded by `"+"`
|
|
138
|
+
def unary_plus
|
|
139
|
+
Sass::Script::String.new("+#{self.to_s}")
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# The SassScript unary `-` operation (e.g. `-$a`).
|
|
143
|
+
#
|
|
144
|
+
# @param other [Literal] The right-hand side of the operator
|
|
145
|
+
# @return [Script::String] A string containing the literal
|
|
146
|
+
# preceded by `"-"`
|
|
147
|
+
def unary_minus
|
|
148
|
+
Sass::Script::String.new("-#{self.to_s}")
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# The SassScript unary `/` operation (e.g. `/$a`).
|
|
152
|
+
#
|
|
153
|
+
# @param other [Literal] The right-hand side of the operator
|
|
154
|
+
# @return [Script::String] A string containing the literal
|
|
155
|
+
# preceded by `"/"`
|
|
156
|
+
def unary_div
|
|
157
|
+
Sass::Script::String.new("/#{self.to_s}")
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# @return [String] A readable representation of the literal
|
|
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 literal is equivalent to `other`
|
|
174
|
+
def ==(other)
|
|
175
|
+
eq(other).to_bool
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# @return [Fixnum] The integer value of this literal
|
|
179
|
+
# @raise [Sass::SyntaxError] if this literal isn't an integer
|
|
180
|
+
def to_i
|
|
181
|
+
raise Sass::SyntaxError.new("#{self.inspect} is not an integer.")
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# @raise [Sass::SyntaxError] if this literal isn't an integer
|
|
185
|
+
def assert_int!; to_i; end
|
|
186
|
+
|
|
187
|
+
# Returns the value of this literal as a list.
|
|
188
|
+
# Single literals are considered the same as single-element lists.
|
|
189
|
+
#
|
|
190
|
+
# @return [Array<Literal>] The of this literal as a list
|
|
191
|
+
def to_a
|
|
192
|
+
[self]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Returns the string representation of this literal
|
|
196
|
+
# as it would be output to the CSS document.
|
|
197
|
+
#
|
|
198
|
+
# @return [String]
|
|
199
|
+
def to_s(opts = {})
|
|
200
|
+
raise Sass::SyntaxError.new("[BUG] All subclasses of Sass::Literal must implement #to_s.")
|
|
201
|
+
end
|
|
202
|
+
alias_method :to_sass, :to_s
|
|
203
|
+
|
|
204
|
+
# Returns whether or not this object is null.
|
|
205
|
+
#
|
|
206
|
+
# @return [Boolean] `false`
|
|
207
|
+
def null?
|
|
208
|
+
false
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
protected
|
|
212
|
+
|
|
213
|
+
# Evaluates the literal.
|
|
214
|
+
#
|
|
215
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
|
216
|
+
# @return [Literal] This literal
|
|
217
|
+
def _perform(environment)
|
|
218
|
+
self
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
module Sass::Script
|
|
2
|
+
# The abstract superclass for SassScript parse tree nodes.
|
|
3
|
+
#
|
|
4
|
+
# Use \{#perform} to evaluate a parse tree.
|
|
5
|
+
class Node
|
|
6
|
+
# The options hash for this node.
|
|
7
|
+
#
|
|
8
|
+
# @return [{Symbol => Object}]
|
|
9
|
+
attr_reader :options
|
|
10
|
+
|
|
11
|
+
# The line of the document on which this node appeared.
|
|
12
|
+
#
|
|
13
|
+
# @return [Fixnum]
|
|
14
|
+
attr_accessor :line
|
|
15
|
+
|
|
16
|
+
# Sets the options hash for this node,
|
|
17
|
+
# as well as for all child nodes.
|
|
18
|
+
# See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
|
|
19
|
+
#
|
|
20
|
+
# @param options [{Symbol => Object}] The options
|
|
21
|
+
def options=(options)
|
|
22
|
+
@options = options
|
|
23
|
+
children.each do |c|
|
|
24
|
+
if c.is_a? Hash
|
|
25
|
+
c.values.each {|v| v.options = options }
|
|
26
|
+
else
|
|
27
|
+
c.options = options
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Evaluates the node.
|
|
33
|
+
#
|
|
34
|
+
# \{#perform} shouldn't be overridden directly;
|
|
35
|
+
# instead, override \{#\_perform}.
|
|
36
|
+
#
|
|
37
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
|
38
|
+
# @return [Literal] The SassScript object that is the value of the SassScript
|
|
39
|
+
def perform(environment)
|
|
40
|
+
_perform(environment)
|
|
41
|
+
rescue Sass::SyntaxError => e
|
|
42
|
+
e.modify_backtrace(:line => line)
|
|
43
|
+
raise e
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Returns all child nodes of this node.
|
|
47
|
+
#
|
|
48
|
+
# @return [Array<Node>]
|
|
49
|
+
def children
|
|
50
|
+
Sass::Util.abstract(self)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Returns the text of this SassScript expression.
|
|
54
|
+
#
|
|
55
|
+
# @return [String]
|
|
56
|
+
def to_sass(opts = {})
|
|
57
|
+
Sass::Util.abstract(self)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Returns a deep clone of this node.
|
|
61
|
+
# The child nodes are cloned, but options are not.
|
|
62
|
+
#
|
|
63
|
+
# @return [Node]
|
|
64
|
+
def deep_copy
|
|
65
|
+
Sass::Util.abstract(self)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
protected
|
|
69
|
+
|
|
70
|
+
# Converts underscores to dashes if the :dasherize option is set.
|
|
71
|
+
def dasherize(s, opts)
|
|
72
|
+
if opts[:dasherize]
|
|
73
|
+
s.gsub(/_/,'-')
|
|
74
|
+
else
|
|
75
|
+
s
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Evaluates this node.
|
|
80
|
+
# Note that all {Literal} objects created within this method
|
|
81
|
+
# should have their \{#options} attribute set, probably via \{#opts}.
|
|
82
|
+
#
|
|
83
|
+
# @param environment [Sass::Environment] The environment in which to evaluate the SassScript
|
|
84
|
+
# @return [Literal] The SassScript object that is the value of the SassScript
|
|
85
|
+
# @see #perform
|
|
86
|
+
def _perform(environment)
|
|
87
|
+
Sass::Util.abstract(self)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Sets the \{#options} field on the given literal and returns it
|
|
91
|
+
#
|
|
92
|
+
# @param literal [Literal]
|
|
93
|
+
# @return [Literal]
|
|
94
|
+
def opts(literal)
|
|
95
|
+
literal.options = options
|
|
96
|
+
literal
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'sass/script/literal'
|
|
2
|
+
|
|
3
|
+
module Sass::Script
|
|
4
|
+
# A SassScript object representing a null value.
|
|
5
|
+
class Null < Literal
|
|
6
|
+
# Creates a new null literal.
|
|
7
|
+
def initialize
|
|
8
|
+
super nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# @return [Boolean] `false` (the Ruby boolean value)
|
|
12
|
+
def to_bool
|
|
13
|
+
false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @return [Boolean] `true`
|
|
17
|
+
def null?
|
|
18
|
+
true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [String] '' (An empty string)
|
|
22
|
+
def to_s(opts = {})
|
|
23
|
+
''
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_sass(opts = {})
|
|
27
|
+
'null'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns a string representing a null value.
|
|
31
|
+
#
|
|
32
|
+
# @return [String]
|
|
33
|
+
def inspect
|
|
34
|
+
'null'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|