haml 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/VERSION +1 -1
- data/vendor/sass/Rakefile +22 -46
- data/vendor/sass/VERSION +1 -1
- data/vendor/sass/VERSION_NAME +1 -1
- data/vendor/sass/bin/scss +8 -0
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +125 -9
- data/vendor/sass/doc-src/SASS_REFERENCE.md +84 -8
- data/vendor/sass/lib/sass.rb +0 -3
- data/vendor/sass/lib/sass/cache_stores.rb +1 -0
- data/vendor/sass/lib/sass/cache_stores/base.rb +2 -2
- data/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
- data/vendor/sass/lib/sass/cache_stores/filesystem.rb +6 -4
- data/vendor/sass/lib/sass/cache_stores/memory.rb +8 -12
- data/vendor/sass/lib/sass/engine.rb +65 -56
- data/vendor/sass/lib/sass/environment.rb +5 -2
- data/vendor/sass/lib/sass/exec.rb +52 -21
- data/vendor/sass/lib/sass/importers/filesystem.rb +32 -9
- data/vendor/sass/lib/sass/less.rb +1 -1
- data/vendor/sass/lib/sass/plugin.rb +11 -1
- data/vendor/sass/lib/sass/plugin/compiler.rb +21 -12
- data/vendor/sass/lib/sass/plugin/rails.rb +8 -82
- data/vendor/sass/lib/sass/plugin/staleness_checker.rb +10 -10
- data/vendor/sass/lib/sass/railtie.rb +3 -2
- data/vendor/sass/lib/sass/script.rb +2 -25
- data/vendor/sass/lib/sass/script/color.rb +4 -15
- data/vendor/sass/lib/sass/script/funcall.rb +63 -19
- data/vendor/sass/lib/sass/script/functions.rb +257 -19
- data/vendor/sass/lib/sass/script/lexer.rb +1 -4
- data/vendor/sass/lib/sass/script/list.rb +2 -2
- data/vendor/sass/lib/sass/script/node.rb +0 -27
- data/vendor/sass/lib/sass/script/number.rb +1 -1
- data/vendor/sass/lib/sass/script/operation.rb +0 -5
- data/vendor/sass/lib/sass/script/parser.rb +30 -12
- data/vendor/sass/lib/sass/script/string.rb +2 -17
- data/vendor/sass/lib/sass/script/string_interpolation.rb +1 -0
- data/vendor/sass/lib/sass/scss/parser.rb +58 -18
- data/vendor/sass/lib/sass/scss/rx.rb +2 -1
- data/vendor/sass/lib/sass/scss/script_lexer.rb +1 -1
- data/vendor/sass/lib/sass/selector/comma_sequence.rb +2 -3
- data/vendor/sass/lib/sass/selector/sequence.rb +3 -6
- data/vendor/sass/lib/sass/selector/simple_sequence.rb +2 -3
- data/vendor/sass/lib/sass/tree/charset_node.rb +0 -15
- data/vendor/sass/lib/sass/tree/comment_node.rb +20 -71
- data/vendor/sass/lib/sass/tree/debug_node.rb +4 -22
- data/vendor/sass/lib/sass/tree/directive_node.rb +0 -52
- data/vendor/sass/lib/sass/tree/each_node.rb +8 -38
- data/vendor/sass/lib/sass/tree/extend_node.rb +12 -48
- data/vendor/sass/lib/sass/tree/for_node.rb +20 -51
- data/vendor/sass/lib/sass/tree/function_node.rb +27 -0
- data/vendor/sass/lib/sass/tree/if_node.rb +22 -57
- data/vendor/sass/lib/sass/tree/import_node.rb +0 -56
- data/vendor/sass/lib/sass/tree/media_node.rb +0 -43
- data/vendor/sass/lib/sass/tree/mixin_def_node.rb +12 -45
- data/vendor/sass/lib/sass/tree/mixin_node.rb +13 -124
- data/vendor/sass/lib/sass/tree/node.rb +18 -304
- data/vendor/sass/lib/sass/tree/prop_node.rb +24 -92
- data/vendor/sass/lib/sass/tree/return_node.rb +18 -0
- data/vendor/sass/lib/sass/tree/root_node.rb +4 -133
- data/vendor/sass/lib/sass/tree/rule_node.rb +21 -164
- data/vendor/sass/lib/sass/tree/variable_node.rb +14 -23
- data/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
- data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +134 -0
- data/vendor/sass/lib/sass/tree/visitors/convert.rb +255 -0
- data/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
- data/vendor/sass/lib/sass/tree/visitors/perform.rb +301 -0
- data/vendor/sass/lib/sass/tree/visitors/to_css.rb +216 -0
- data/vendor/sass/lib/sass/tree/warn_node.rb +4 -28
- data/vendor/sass/lib/sass/tree/while_node.rb +5 -35
- data/vendor/sass/lib/sass/util.rb +0 -50
- data/vendor/sass/sass.gemspec +1 -1
- data/vendor/sass/test/sass/conversion_test.rb +53 -102
- data/vendor/sass/test/sass/engine_test.rb +416 -540
- data/vendor/sass/test/sass/functions_test.rb +306 -4
- data/vendor/sass/test/sass/importer_test.rb +0 -22
- data/vendor/sass/test/sass/plugin_test.rb +51 -21
- data/vendor/sass/test/sass/results/if.css +3 -0
- data/vendor/sass/test/sass/script_conversion_test.rb +0 -38
- data/vendor/sass/test/sass/script_test.rb +19 -4
- data/vendor/sass/test/sass/scss/scss_test.rb +32 -11
- data/vendor/sass/test/sass/templates/if.sass +11 -0
- data/vendor/sass/test/sass/templates/nested_import.sass +2 -0
- data/vendor/sass/test/sass/util_test.rb +0 -21
- data/vendor/sass/test/test_helper.rb +0 -3
- metadata +268 -258
- data/vendor/sass/bin/css2sass +0 -13
- data/vendor/sass/lib/sass/cache_stores/active_support.rb +0 -28
- data/vendor/sass/lib/sass/importers/rails.rb +0 -75
@@ -0,0 +1,216 @@
|
|
1
|
+
# A visitor for converting a Sass tree into CSS.
|
2
|
+
class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base
|
3
|
+
protected
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@tabs = 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def visit(node)
|
10
|
+
super
|
11
|
+
rescue Sass::SyntaxError => e
|
12
|
+
e.modify_backtrace(:filename => node.filename, :line => node.line)
|
13
|
+
raise e
|
14
|
+
end
|
15
|
+
|
16
|
+
def with_tabs(tabs)
|
17
|
+
old_tabs, @tabs = @tabs, tabs
|
18
|
+
yield
|
19
|
+
ensure
|
20
|
+
@tabs = old_tabs
|
21
|
+
end
|
22
|
+
|
23
|
+
def visit_root(node)
|
24
|
+
result = String.new
|
25
|
+
node.children.each do |child|
|
26
|
+
next if child.invisible?
|
27
|
+
child_str = visit(child)
|
28
|
+
result << child_str + (node.style == :compressed ? '' : "\n")
|
29
|
+
end
|
30
|
+
result.rstrip!
|
31
|
+
return "" if result.empty?
|
32
|
+
result << "\n"
|
33
|
+
unless Sass::Util.ruby1_8? || result.ascii_only?
|
34
|
+
if node.children.first.is_a?(Sass::Tree::CharsetNode)
|
35
|
+
begin
|
36
|
+
encoding = node.children.first.name
|
37
|
+
# Default to big-endian encoding, because we have to decide somehow
|
38
|
+
encoding << 'BE' if encoding =~ /\Autf-(16|32)\Z/i
|
39
|
+
result = result.encode(Encoding.find(encoding))
|
40
|
+
rescue EncodingError
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
result = "@charset \"#{result.encoding.name}\";#{
|
45
|
+
node.style == :compressed ? '' : "\n"
|
46
|
+
}".encode(result.encoding) + result
|
47
|
+
end
|
48
|
+
result
|
49
|
+
rescue Sass::SyntaxError => e
|
50
|
+
e.sass_template ||= node.template
|
51
|
+
raise e
|
52
|
+
end
|
53
|
+
|
54
|
+
def visit_charset(node)
|
55
|
+
"@charset \"#{node.name}\";"
|
56
|
+
end
|
57
|
+
|
58
|
+
def visit_comment(node)
|
59
|
+
return if node.invisible?
|
60
|
+
spaces = (' ' * [@tabs - node.value[/^ */].size, 0].max)
|
61
|
+
|
62
|
+
content = node.value.gsub(/^/, spaces).gsub(%r{^(\s*)//(.*)$}) do |md|
|
63
|
+
"#{$1}/*#{$2} */"
|
64
|
+
end
|
65
|
+
if content =~ /[^\\]\#\{.*\}/
|
66
|
+
Sass::Util.sass_warn <<MESSAGE
|
67
|
+
WARNING:
|
68
|
+
On line #{node.line}#{" of '#{node.filename}'" if node.filename}
|
69
|
+
Comments will evaluate the contents of interpolations (\#{ ... }) in Sass 3.2.
|
70
|
+
Please escape the interpolation by adding a backslash before the hash sign.
|
71
|
+
MESSAGE
|
72
|
+
elsif content =~ /\\\#\{.*\}/
|
73
|
+
content.gsub!(/\\(\#\{.*\})/, '\1')
|
74
|
+
end
|
75
|
+
content.gsub!(/\n +(\* *(?!\/))?/, ' ') if (node.style == :compact || node.style == :compressed) && !node.loud
|
76
|
+
content
|
77
|
+
end
|
78
|
+
|
79
|
+
def visit_directive(node)
|
80
|
+
return node.value + ";" unless node.has_children
|
81
|
+
return node.value + " {}" if node.children.empty?
|
82
|
+
result = if node.style == :compressed
|
83
|
+
"#{node.value}{"
|
84
|
+
else
|
85
|
+
"#{' ' * @tabs}#{node.value} {" + (node.style == :compact ? ' ' : "\n")
|
86
|
+
end
|
87
|
+
was_prop = false
|
88
|
+
first = true
|
89
|
+
node.children.each do |child|
|
90
|
+
next if child.invisible?
|
91
|
+
if node.style == :compact
|
92
|
+
if child.is_a?(Sass::Tree::PropNode)
|
93
|
+
with_tabs(first || was_prop ? 0 : @tabs + 1) {result << visit(child) << ' '}
|
94
|
+
else
|
95
|
+
result[-1] = "\n" if was_prop
|
96
|
+
rendered = with_tabs(@tabs + 1) {visit(child).dup}
|
97
|
+
rendered = rendered.lstrip if first
|
98
|
+
result << rendered.rstrip + "\n"
|
99
|
+
end
|
100
|
+
was_prop = child.is_a?(Sass::Tree::PropNode)
|
101
|
+
first = false
|
102
|
+
elsif node.style == :compressed
|
103
|
+
result << (was_prop ? ";" : "") << with_tabs(0) {visit(child)}
|
104
|
+
was_prop = child.is_a?(Sass::Tree::PropNode)
|
105
|
+
else
|
106
|
+
result << with_tabs(@tabs + 1) {visit(child)} + "\n"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
result.rstrip + if node.style == :compressed
|
110
|
+
"}"
|
111
|
+
else
|
112
|
+
(node.style == :expanded ? "\n" : " ") + "}\n"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def visit_media(node)
|
117
|
+
str = with_tabs(@tabs + node.tabs) {visit_directive(node)}
|
118
|
+
str.gsub!(/\n\Z/, '') unless node.style == :compressed || node.group_end
|
119
|
+
str
|
120
|
+
end
|
121
|
+
|
122
|
+
def visit_prop(node)
|
123
|
+
tab_str = ' ' * (@tabs + node.tabs)
|
124
|
+
if node.style == :compressed
|
125
|
+
"#{tab_str}#{node.resolved_name}:#{node.resolved_value}#{'!important' if node.important}"
|
126
|
+
else
|
127
|
+
"#{tab_str}#{node.resolved_name}: #{node.resolved_value}#{' !important' if node.important};"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def visit_rule(node)
|
132
|
+
with_tabs(@tabs + node.tabs) do
|
133
|
+
rule_separator = node.style == :compressed ? ',' : ', '
|
134
|
+
line_separator =
|
135
|
+
case node.style
|
136
|
+
when :nested, :expanded; "\n"
|
137
|
+
when :compressed; ""
|
138
|
+
else; " "
|
139
|
+
end
|
140
|
+
rule_indent = ' ' * @tabs
|
141
|
+
per_rule_indent, total_indent = [:nested, :expanded].include?(node.style) ? [rule_indent, ''] : ['', rule_indent]
|
142
|
+
|
143
|
+
joined_rules = node.resolved_rules.members.map do |seq|
|
144
|
+
rule_part = seq.to_a.join
|
145
|
+
rule_part.gsub!(/\s*([^,])\s*\n\s*/m, '\1 ') if node.style == :compressed
|
146
|
+
rule_part
|
147
|
+
end.join(rule_separator)
|
148
|
+
|
149
|
+
joined_rules.sub!(/\A\s*/, per_rule_indent)
|
150
|
+
joined_rules.gsub!(/\s*\n\s*/, "#{line_separator}#{per_rule_indent}")
|
151
|
+
total_rule = total_indent << joined_rules
|
152
|
+
|
153
|
+
to_return = ''
|
154
|
+
old_spaces = ' ' * @tabs
|
155
|
+
spaces = ' ' * (@tabs + 1)
|
156
|
+
if node.style != :compressed
|
157
|
+
if node.options[:debug_info]
|
158
|
+
to_return << visit(debug_info_rule(node.debug_info, node.options)) << "\n"
|
159
|
+
elsif node.options[:line_comments]
|
160
|
+
to_return << "#{old_spaces}/* line #{node.line}"
|
161
|
+
|
162
|
+
if node.filename
|
163
|
+
relative_filename = if node.options[:css_filename]
|
164
|
+
begin
|
165
|
+
Pathname.new(node.filename).relative_path_from(
|
166
|
+
Pathname.new(File.dirname(node.options[:css_filename]))).to_s
|
167
|
+
rescue ArgumentError
|
168
|
+
nil
|
169
|
+
end
|
170
|
+
end
|
171
|
+
relative_filename ||= node.filename
|
172
|
+
to_return << ", #{relative_filename}"
|
173
|
+
end
|
174
|
+
|
175
|
+
to_return << " */\n"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
if node.style == :compact
|
180
|
+
properties = with_tabs(0) {node.children.map {|a| visit(a)}.join(' ')}
|
181
|
+
to_return << "#{total_rule} { #{properties} }#{"\n" if node.group_end}"
|
182
|
+
elsif node.style == :compressed
|
183
|
+
properties = with_tabs(0) {node.children.map {|a| visit(a)}.join(';')}
|
184
|
+
to_return << "#{total_rule}{#{properties}}"
|
185
|
+
else
|
186
|
+
properties = with_tabs(@tabs + 1) {node.children.map {|a| visit(a)}.join("\n")}
|
187
|
+
end_props = (node.style == :expanded ? "\n" + old_spaces : ' ')
|
188
|
+
to_return << "#{total_rule} {\n#{properties}#{end_props}}#{"\n" if node.group_end}"
|
189
|
+
end
|
190
|
+
|
191
|
+
to_return
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
private
|
196
|
+
|
197
|
+
def debug_info_rule(debug_info, options)
|
198
|
+
node = Sass::Tree::DirectiveNode.new("@media -sass-debug-info")
|
199
|
+
debug_info.map {|k, v| [k.to_s, v.to_s]}.sort.each do |k, v|
|
200
|
+
rule = Sass::Tree::RuleNode.new([""])
|
201
|
+
rule.resolved_rules = Sass::Selector::CommaSequence.new(
|
202
|
+
[Sass::Selector::Sequence.new(
|
203
|
+
[Sass::Selector::SimpleSequence.new(
|
204
|
+
[Sass::Selector::Element.new(k.to_s.gsub(/[^\w-]/, "\\\\\\0"), nil)])
|
205
|
+
])
|
206
|
+
])
|
207
|
+
prop = Sass::Tree::PropNode.new([""], "", false, :new)
|
208
|
+
prop.resolved_name = "font-family"
|
209
|
+
prop.resolved_value = Sass::SCSS::RX.escape_ident(v.to_s)
|
210
|
+
rule << prop
|
211
|
+
node << rule
|
212
|
+
end
|
213
|
+
node.options = options.merge(:debug_info => false, :line_comments => false, :style => :compressed)
|
214
|
+
node
|
215
|
+
end
|
216
|
+
end
|
@@ -4,39 +4,15 @@ module Sass
|
|
4
4
|
#
|
5
5
|
# @see Sass::Tree
|
6
6
|
class WarnNode < Node
|
7
|
+
# The expression to print.
|
8
|
+
# @return [Script::Node]
|
9
|
+
attr_reader :expr
|
10
|
+
|
7
11
|
# @param expr [Script::Node] The expression to print
|
8
12
|
def initialize(expr)
|
9
13
|
@expr = expr
|
10
14
|
super()
|
11
15
|
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
# @see Node#to_src
|
16
|
-
def to_src(tabs, opts, fmt)
|
17
|
-
"#{' ' * tabs}@warn #{@expr.to_sass(opts)}#{semi fmt}\n"
|
18
|
-
end
|
19
|
-
|
20
|
-
# Prints the expression to STDERR with a stylesheet trace.
|
21
|
-
#
|
22
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
23
|
-
# variable and mixin values
|
24
|
-
def _perform(environment)
|
25
|
-
environment.push_frame(:filename => filename, :line => line)
|
26
|
-
res = @expr.perform(environment)
|
27
|
-
res = res.value if res.is_a?(Sass::Script::String)
|
28
|
-
msg = "WARNING: #{res}\n"
|
29
|
-
environment.stack.reverse.each_with_index do |entry, i|
|
30
|
-
msg << " #{i == 0 ? "on" : "from"} line #{entry[:line]}" <<
|
31
|
-
" of #{entry[:filename] || "an unknown file"}"
|
32
|
-
msg << ", in `#{entry[:mixin]}'" if entry[:mixin]
|
33
|
-
msg << "\n"
|
34
|
-
end
|
35
|
-
Sass::Util.sass_warn msg
|
36
|
-
[]
|
37
|
-
ensure
|
38
|
-
environment.pop_frame
|
39
|
-
end
|
40
16
|
end
|
41
17
|
end
|
42
18
|
end
|
@@ -5,44 +5,14 @@ module Sass::Tree
|
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class WhileNode < Node
|
8
|
-
#
|
8
|
+
# The parse tree for the continuation expression.
|
9
|
+
# @return [Script::Node]
|
10
|
+
attr_reader :expr
|
11
|
+
|
12
|
+
# @param expr [Script::Node] See \{#expr}
|
9
13
|
def initialize(expr)
|
10
14
|
@expr = expr
|
11
15
|
super()
|
12
16
|
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
|
16
|
-
# @see Node#to_src
|
17
|
-
def to_src(tabs, opts, fmt)
|
18
|
-
"#{' ' * tabs}@while #{@expr.to_sass(opts)}" + children_to_src(tabs, opts, fmt)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Runs the child nodes until the continue expression becomes false.
|
22
|
-
#
|
23
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
24
|
-
# variable and mixin values
|
25
|
-
# @return [Array<Tree::Node>] The resulting static nodes
|
26
|
-
# @see Sass::Tree
|
27
|
-
def _perform(environment)
|
28
|
-
children = []
|
29
|
-
new_environment = Sass::Environment.new(environment)
|
30
|
-
while @expr.perform(environment).to_bool
|
31
|
-
children += perform_children(new_environment)
|
32
|
-
end
|
33
|
-
children
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns an error message if the given child node is invalid,
|
37
|
-
# and false otherwise.
|
38
|
-
#
|
39
|
-
# {ExtendNode}s are valid within {WhileNode}s.
|
40
|
-
#
|
41
|
-
# @param child [Tree::Node] A potential child node.
|
42
|
-
# @return [Boolean, String] Whether or not the child node is valid,
|
43
|
-
# as well as the error message to display if it is invalid
|
44
|
-
def invalid_child?(child)
|
45
|
-
super unless child.is_a?(ExtendNode)
|
46
|
-
end
|
47
17
|
end
|
48
18
|
end
|
@@ -270,47 +270,6 @@ module Sass
|
|
270
270
|
version_gt(v1, v2) || !version_gt(v2, v1)
|
271
271
|
end
|
272
272
|
|
273
|
-
# A wrapper for `Marshal.dump` that calls `#_before_dump` on the object
|
274
|
-
# before dumping it, `#_after_dump` afterwards.
|
275
|
-
# It also calls `#_around_dump` and passes it a block in which the object is dumped.
|
276
|
-
#
|
277
|
-
# If any of these methods are undefined, they are not called.
|
278
|
-
#
|
279
|
-
# This will recursively call itself on members of arrays and hashes,
|
280
|
-
# but not of user-defined objects.
|
281
|
-
# This means that user-defined objects that need their members' `#_before_dump` etc. methods called
|
282
|
-
# must call `Haml::Util.dump` and `Haml::Util.load` manually on those members.
|
283
|
-
#
|
284
|
-
# @param obj [Object] The object to dump.
|
285
|
-
# @return [String] The dumped data.
|
286
|
-
def dump(obj)
|
287
|
-
obj._before_dump if obj.respond_to?(:_before_dump)
|
288
|
-
return convert_and_dump(obj) unless obj.respond_to?(:_around_dump)
|
289
|
-
res = nil
|
290
|
-
obj._around_dump {res = convert_and_dump(obj)}
|
291
|
-
res
|
292
|
-
ensure
|
293
|
-
obj._after_dump if obj.respond_to?(:_after_dump)
|
294
|
-
end
|
295
|
-
|
296
|
-
# A wrapper for `Marshal.load` that calls `#_after_load` on the object
|
297
|
-
# after loading it, if it's defined.
|
298
|
-
#
|
299
|
-
# @param data [String] The data to load.
|
300
|
-
# @return [Object] The loaded object.
|
301
|
-
def load(data)
|
302
|
-
obj = Marshal.load(data)
|
303
|
-
|
304
|
-
if obj.is_a?(Array)
|
305
|
-
obj = obj.map {|e| Sass::Util.load(e)}
|
306
|
-
elsif obj.is_a?(Hash)
|
307
|
-
obj = map_hash(obj) {|k, v| [Sass::Util.load(k), Sass::Util.load(v)]}
|
308
|
-
end
|
309
|
-
|
310
|
-
obj._after_load if obj.respond_to?(:_after_load)
|
311
|
-
obj
|
312
|
-
end
|
313
|
-
|
314
273
|
# Throws a NotImplementedError for an abstract method.
|
315
274
|
#
|
316
275
|
# @param obj [Object] `self`
|
@@ -706,14 +665,5 @@ MSG
|
|
706
665
|
return lcs_backtrace(c, x, y, i, j-1, &block) if c[i][j-1] > c[i-1][j]
|
707
666
|
return lcs_backtrace(c, x, y, i-1, j, &block)
|
708
667
|
end
|
709
|
-
|
710
|
-
def convert_and_dump(obj)
|
711
|
-
if obj.is_a?(Array)
|
712
|
-
obj = obj.map {|e| dump(e)}
|
713
|
-
elsif obj.is_a?(Hash)
|
714
|
-
obj = map_hash(obj) {|k, v| [dump(k), dump(v)]}
|
715
|
-
end
|
716
|
-
Marshal.dump(obj)
|
717
|
-
end
|
718
668
|
end
|
719
669
|
end
|
data/vendor/sass/sass.gemspec
CHANGED
@@ -22,7 +22,7 @@ SASS_GEMSPEC = Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency 'maruku', '>= 0.5.9'
|
23
23
|
|
24
24
|
readmes = Dir['*'].reject{ |x| x =~ /(^|[^.a-z])[a-z]+/ || x == "TODO" }
|
25
|
-
spec.executables = ['sass', '
|
25
|
+
spec.executables = ['sass', 'sass-convert']
|
26
26
|
spec.files = Dir['rails/init.rb', 'lib/**/*', 'vendor/**/*',
|
27
27
|
'bin/*', 'test/**/*', 'extra/**/*', 'Rakefile', 'init.rb',
|
28
28
|
'.yardopts'] + readmes
|
@@ -165,14 +165,6 @@ SASS
|
|
165
165
|
foo bar {
|
166
166
|
baz: 12 $bang "bip"; }
|
167
167
|
SCSS
|
168
|
-
|
169
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
170
|
-
foo bar {
|
171
|
-
baz: 12 $bang bip; }
|
172
|
-
SCSS
|
173
|
-
foo bar
|
174
|
-
baz= 12 $bang "bip"
|
175
|
-
SASS
|
176
168
|
end
|
177
169
|
|
178
170
|
def test_dynamic_properties_with_old
|
@@ -183,14 +175,6 @@ SASS
|
|
183
175
|
foo bar {
|
184
176
|
baz: 12 $bang "bip"; }
|
185
177
|
SCSS
|
186
|
-
|
187
|
-
assert_sass_to_scss <<SCSS, <<SASS, :old => true
|
188
|
-
foo bar {
|
189
|
-
baz: 12 $bang bip; }
|
190
|
-
SCSS
|
191
|
-
foo bar
|
192
|
-
:baz= 12 $bang "bip"
|
193
|
-
SASS
|
194
178
|
end
|
195
179
|
|
196
180
|
def test_multiline_properties
|
@@ -842,22 +826,12 @@ SASS
|
|
842
826
|
a: $baz $bang; } }
|
843
827
|
SCSS
|
844
828
|
|
845
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
846
|
-
=foo-bar($baz, $bang: foo)
|
847
|
-
baz
|
848
|
-
a: $baz $bang
|
849
|
-
SASS
|
850
|
-
@mixin foo-bar($baz, $bang = "foo") {
|
851
|
-
baz {
|
852
|
-
a: $baz $bang; } }
|
853
|
-
SCSS
|
854
|
-
|
855
829
|
assert_sass_to_scss <<SCSS, <<SASS
|
856
830
|
@mixin foo-bar($baz, $bang: foo) {
|
857
831
|
baz {
|
858
832
|
a: $baz $bang; } }
|
859
833
|
SCSS
|
860
|
-
=foo-bar($baz, $bang
|
834
|
+
=foo-bar($baz, $bang: foo)
|
861
835
|
baz
|
862
836
|
a: $baz $bang
|
863
837
|
SASS
|
@@ -901,6 +875,42 @@ foo {
|
|
901
875
|
SCSS
|
902
876
|
end
|
903
877
|
|
878
|
+
def test_argless_function_definition
|
879
|
+
assert_renders <<SASS, <<SCSS
|
880
|
+
@function foo()
|
881
|
+
$var: 1 + 1
|
882
|
+
@return $var
|
883
|
+
SASS
|
884
|
+
@function foo() {
|
885
|
+
$var: 1 + 1;
|
886
|
+
@return $var; }
|
887
|
+
SCSS
|
888
|
+
end
|
889
|
+
|
890
|
+
def test_function_definition_without_defaults
|
891
|
+
assert_renders <<SASS, <<SCSS
|
892
|
+
@function foo($var1, $var2)
|
893
|
+
@if $var1
|
894
|
+
@return $var1 + $var2
|
895
|
+
SASS
|
896
|
+
@function foo($var1, $var2) {
|
897
|
+
@if $var1 {
|
898
|
+
@return $var1 + $var2; } }
|
899
|
+
SCSS
|
900
|
+
end
|
901
|
+
|
902
|
+
def test_function_definition_with_defaults
|
903
|
+
assert_renders <<SASS, <<SCSS
|
904
|
+
@function foo($var1, $var2: foo)
|
905
|
+
@if $var1
|
906
|
+
@return $var1 + $var2
|
907
|
+
SASS
|
908
|
+
@function foo($var1, $var2: foo) {
|
909
|
+
@if $var1 {
|
910
|
+
@return $var1 + $var2; } }
|
911
|
+
SCSS
|
912
|
+
end
|
913
|
+
|
904
914
|
def test_variable_definition
|
905
915
|
assert_renders <<SASS, <<SCSS
|
906
916
|
$var1: 12px + 15px
|
@@ -915,8 +925,6 @@ foo {
|
|
915
925
|
$var2: flaz(#abcdef);
|
916
926
|
val: $var1 $var2; }
|
917
927
|
SCSS
|
918
|
-
|
919
|
-
assert_sass_to_scss '$var: 12px $bar baz;', '$var = 12px $bar "baz"'
|
920
928
|
end
|
921
929
|
|
922
930
|
def test_guarded_variable_definition
|
@@ -933,8 +941,6 @@ foo {
|
|
933
941
|
$var2: flaz(#abcdef) !default;
|
934
942
|
val: $var1 $var2; }
|
935
943
|
SCSS
|
936
|
-
|
937
|
-
assert_sass_to_scss '$var: 12px $bar baz !default;', '$var ||= 12px $bar "baz"'
|
938
944
|
end
|
939
945
|
|
940
946
|
def test_multiple_variable_definitions
|
@@ -1078,62 +1084,6 @@ SCSS
|
|
1078
1084
|
end
|
1079
1085
|
end
|
1080
1086
|
|
1081
|
-
# Sass 3 Deprecation conversions
|
1082
|
-
|
1083
|
-
def test_simple_quoted_strings_unquoted_with_equals
|
1084
|
-
assert_sass_to_scss '$var: 1px foo + bar baz;', '!var = 1px "foo" + "bar" baz'
|
1085
|
-
assert_sass_to_scss '$var: -foo-bar;', '!var = "-foo-bar"'
|
1086
|
-
end
|
1087
|
-
|
1088
|
-
def test_complex_quoted_strings_explicitly_unquoted_with_equals
|
1089
|
-
assert_sass_to_scss '$var: 1px unquote("foo + bar") baz;', '!var = 1px "foo + bar" baz'
|
1090
|
-
assert_sass_to_scss "$var: unquote('foo\"bar');", '!var = "foo\"bar"'
|
1091
|
-
end
|
1092
|
-
|
1093
|
-
def test_division_asserted_with_equals
|
1094
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1095
|
-
foo {
|
1096
|
-
a: (1px / 2px); }
|
1097
|
-
SCSS
|
1098
|
-
foo
|
1099
|
-
a = 1px / 2px
|
1100
|
-
SASS
|
1101
|
-
end
|
1102
|
-
|
1103
|
-
def test_division_not_asserted_with_equals_when_unnecessary
|
1104
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1105
|
-
$var: 1px / 2px;
|
1106
|
-
|
1107
|
-
foo {
|
1108
|
-
a: $var; }
|
1109
|
-
SCSS
|
1110
|
-
!var = 1px / 2px
|
1111
|
-
|
1112
|
-
foo
|
1113
|
-
a = !var
|
1114
|
-
SASS
|
1115
|
-
|
1116
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1117
|
-
$var: 1px;
|
1118
|
-
|
1119
|
-
foo {
|
1120
|
-
a: $var / 2px; }
|
1121
|
-
SCSS
|
1122
|
-
!var = 1px
|
1123
|
-
|
1124
|
-
foo
|
1125
|
-
a = !var / 2px
|
1126
|
-
SASS
|
1127
|
-
|
1128
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1129
|
-
foo {
|
1130
|
-
a: 1 + 1px / 2px; }
|
1131
|
-
SCSS
|
1132
|
-
foo
|
1133
|
-
a = 1 + 1px / 2px
|
1134
|
-
SASS
|
1135
|
-
end
|
1136
|
-
|
1137
1087
|
def test_nested_properties
|
1138
1088
|
assert_renders <<SASS, <<SCSS
|
1139
1089
|
div
|
@@ -1181,24 +1131,25 @@ div
|
|
1181
1131
|
SASS
|
1182
1132
|
end
|
1183
1133
|
|
1184
|
-
def
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
foo
|
1190
|
-
a: b \#{!c} d
|
1134
|
+
def test_loud_comment_conversion
|
1135
|
+
assert_renders(<<SASS, <<SCSS)
|
1136
|
+
/*! \#{"interpolated"}
|
1137
|
+
/*!
|
1138
|
+
* \#{"also interpolated"}
|
1191
1139
|
SASS
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1196
|
-
foo-\#{$c} {
|
1197
|
-
a: b; }
|
1140
|
+
/*! \#{"interpolated"} */
|
1141
|
+
/*!
|
1142
|
+
* \#{"also interpolated"} */
|
1198
1143
|
SCSS
|
1199
|
-
|
1200
|
-
|
1144
|
+
assert_renders(<<SASS, <<SCSS)
|
1145
|
+
//! \#{"interpolated"}
|
1146
|
+
//!
|
1147
|
+
//! \#{"also interpolated"}
|
1201
1148
|
SASS
|
1149
|
+
//! \#{"interpolated"}
|
1150
|
+
//!
|
1151
|
+
//! \#{"also interpolated"}
|
1152
|
+
SCSS
|
1202
1153
|
end
|
1203
1154
|
|
1204
1155
|
private
|