sass 3.1.0.alpha.18 → 3.1.0.alpha.19
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.
- data/EDGE_GEM_VERSION +1 -1
- data/VERSION +1 -1
- data/lib/sass.rb +7 -3
- data/lib/sass/engine.rb +2 -2
- data/lib/sass/less.rb +31 -12
- data/lib/sass/script/funcall.rb +2 -1
- data/lib/sass/script/parser.rb +1 -1
- data/test/sass/engine_test.rb +10 -0
- data/test/sass/functions_test.rb +3 -1
- data/test/sass/less_conversion_test.rb +24 -3
- data/test/sass/script_conversion_test.rb +21 -11
- metadata +10 -10
data/EDGE_GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.0.alpha.
|
1
|
+
3.1.0.alpha.19
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.0.alpha.
|
1
|
+
3.1.0.alpha.19
|
data/lib/sass.rb
CHANGED
@@ -43,17 +43,21 @@ module Sass
|
|
43
43
|
# @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
|
44
44
|
#
|
45
45
|
# @overload compile_file(filename, options = {})
|
46
|
+
# Return the compiled CSS rather than writing it to a file.
|
47
|
+
#
|
46
48
|
# @return [String] The compiled CSS.
|
47
49
|
#
|
48
50
|
# @overload compile_file(filename, css_filename, options = {})
|
51
|
+
# Write the compiled CSS to a file.
|
52
|
+
#
|
49
53
|
# @param css_filename [String] The location to which to write the compiled CSS.
|
50
54
|
def self.compile_file(filename, *args)
|
51
55
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
52
|
-
css_filename
|
53
|
-
options[:css_filename] = css_filename
|
56
|
+
css_filename = args.shift
|
54
57
|
result = Sass::Engine.for_file(filename, options).render
|
55
58
|
if css_filename
|
56
|
-
|
59
|
+
options[:css_filename] ||= css_filename
|
60
|
+
open(css_filename,"w") {|css_file| css_file.write(result)}
|
57
61
|
nil
|
58
62
|
else
|
59
63
|
result
|
data/lib/sass/engine.rb
CHANGED
@@ -158,8 +158,8 @@ module Sass
|
|
158
158
|
options[:line_comments] ||= options[:line_numbers]
|
159
159
|
|
160
160
|
options[:load_paths] = options[:load_paths].map do |p|
|
161
|
-
next p unless p.is_a?(String)
|
162
|
-
options[:filesystem_importer].new(p)
|
161
|
+
next p unless p.is_a?(String) || (defined?(Pathname) && p.is_a?(Pathname))
|
162
|
+
options[:filesystem_importer].new(p.to_s)
|
163
163
|
end
|
164
164
|
|
165
165
|
# Backwards compatibility
|
data/lib/sass/less.rb
CHANGED
@@ -246,24 +246,43 @@ WARNING
|
|
246
246
|
private
|
247
247
|
|
248
248
|
LESS_TO_SASS_OPERATORS = {"-" => :minus, "+" => :plus, "*" => :times, "/" => :div, "=" => :single_eq}
|
249
|
+
|
249
250
|
def _to_sass_tree(arr)
|
250
|
-
|
251
|
-
|
251
|
+
e, rest = _to_sass_tree_plus_minus_eq(arr)
|
252
|
+
until rest.empty?
|
253
|
+
e2, rest = _to_sass_tree_plus_minus_eq(rest)
|
254
|
+
e = Sass::Script::Operation.new(e, e2, :concat)
|
255
|
+
end
|
256
|
+
return e
|
252
257
|
end
|
253
258
|
|
254
|
-
def
|
255
|
-
|
256
|
-
|
259
|
+
def _to_sass_tree_plus_minus_eq(arr)
|
260
|
+
e, rest = _to_sass_tree_times_div(arr)
|
261
|
+
while rest[0] && rest[0].is_a?(Operator) && %w[+ - =].include?(rest[0])
|
257
262
|
op = LESS_TO_SASS_OPERATORS[rest[0]]
|
258
|
-
|
259
|
-
|
260
|
-
return _to_sass_tree2(Sass::Script::Operation.new(first, second, op), rest)
|
261
|
-
else
|
262
|
-
return Sass::Script::Operation.new(first, _to_sass_tree(rest[1..-1]), op)
|
263
|
-
end
|
263
|
+
e2, rest = _to_sass_tree_times_div(rest[1..-1])
|
264
|
+
e = Sass::Script::Operation.new(e, e2, op)
|
264
265
|
end
|
266
|
+
return e, rest
|
267
|
+
end
|
265
268
|
|
266
|
-
|
269
|
+
def _to_sass_tree_times_div(arr)
|
270
|
+
e, rest = _to_sass_tree_unary(arr)
|
271
|
+
while rest[0] && rest[0].is_a?(Operator) && %w[* /].include?(rest[0])
|
272
|
+
op = LESS_TO_SASS_OPERATORS[rest[0]]
|
273
|
+
e2, rest = _to_sass_tree_unary(rest[1..-1])
|
274
|
+
e = Sass::Script::Operation.new(e, e2, op)
|
275
|
+
end
|
276
|
+
return e, rest
|
277
|
+
end
|
278
|
+
|
279
|
+
def _to_sass_tree_unary(arr)
|
280
|
+
if arr[0] == "-"
|
281
|
+
first, rest = _sass_split(arr[1..-1])
|
282
|
+
return Sass::Script::UnaryOperation.new(first, :minus), rest
|
283
|
+
else
|
284
|
+
return _sass_split(arr[0..-1])
|
285
|
+
end
|
267
286
|
end
|
268
287
|
|
269
288
|
def _sass_split(arr)
|
data/lib/sass/script/funcall.rb
CHANGED
data/lib/sass/script/parser.rb
CHANGED
data/test/sass/engine_test.rb
CHANGED
@@ -5,6 +5,7 @@ require File.dirname(__FILE__) + '/test_helper'
|
|
5
5
|
require 'sass/engine'
|
6
6
|
require 'stringio'
|
7
7
|
require 'mock_importer'
|
8
|
+
require 'pathname'
|
8
9
|
|
9
10
|
module Sass::Script::Functions::UserFunctions
|
10
11
|
def option(name)
|
@@ -545,6 +546,15 @@ CSS
|
|
545
546
|
assert File.exists?(sassc_file)
|
546
547
|
end
|
547
548
|
|
549
|
+
def test_sass_pathname_import
|
550
|
+
sassc_file = sassc_path("importee")
|
551
|
+
assert !File.exists?(sassc_file)
|
552
|
+
renders_correctly("import",
|
553
|
+
:style => :compact,
|
554
|
+
:load_paths => [Pathname.new(File.dirname(__FILE__) + "/templates")])
|
555
|
+
assert File.exists?(sassc_file)
|
556
|
+
end
|
557
|
+
|
548
558
|
def test_nonexistent_extensionless_import
|
549
559
|
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) do
|
550
560
|
File to import not found or unreadable: nonexistent.
|
data/test/sass/functions_test.rb
CHANGED
@@ -14,7 +14,7 @@ module Sass::Script::Functions
|
|
14
14
|
declare :only_var_args, [], :var_args => true
|
15
15
|
|
16
16
|
def only_kw_args(kwargs)
|
17
|
-
Sass::Script::String.new("only-kw-args("+kwargs.keys.join(", ")+")")
|
17
|
+
Sass::Script::String.new("only-kw-args(" + kwargs.keys.sort.join(", ") + ")")
|
18
18
|
end
|
19
19
|
declare :only_kw_args, [], :var_kwargs => true
|
20
20
|
end
|
@@ -629,9 +629,11 @@ MSG
|
|
629
629
|
def test_only_var_args
|
630
630
|
assert_equal "only-var-args(2px, 3px, 4px)", evaluate("only-var-args(1px, 2px, 3px)")
|
631
631
|
end
|
632
|
+
|
632
633
|
def test_only_kw_args
|
633
634
|
assert_equal "only-kw-args(a, b, c)", evaluate("only-kw-args($a: 1, $b: 2, $c: 3)")
|
634
635
|
end
|
636
|
+
|
635
637
|
private
|
636
638
|
|
637
639
|
def evaluate(value)
|
@@ -326,7 +326,14 @@ foo {
|
|
326
326
|
d: 1 + 2 - 3 + 4;
|
327
327
|
e: 1 / 2 - 3 / 4;
|
328
328
|
f: 1 - 2 / 3 - 4;
|
329
|
-
g: 1 / 2 * 3 / 4;
|
329
|
+
g: 1 / 2 * 3 / 4;
|
330
|
+
h: (1 + 2) * (3 + 4);
|
331
|
+
i: 1 * (2 + 3) * 4;
|
332
|
+
j: 1 - (2 + 2) - 4;
|
333
|
+
k: 1 + 2 - (3 + 4);
|
334
|
+
l: 1 / (2 - 3) / 4;
|
335
|
+
m: (1 - 2) / (3 - 4);
|
336
|
+
n: 1 / (2 * 3) / 4; }
|
330
337
|
SCSS
|
331
338
|
foo {
|
332
339
|
a: 1 + 2 * 3 + 4;
|
@@ -335,7 +342,14 @@ foo {
|
|
335
342
|
d: 1 + 2 - 3 + 4;
|
336
343
|
e: 1 / 2 - 3 / 4;
|
337
344
|
f: 1 - 2 / 3 - 4;
|
338
|
-
g: 1 / 2 * 3 / 4;
|
345
|
+
g: 1 / 2 * 3 / 4;
|
346
|
+
h: (1 + 2) * (3 + 4);
|
347
|
+
i: 1 * (2 + 3) * 4;
|
348
|
+
j: 1 - (2 + 2) - 4;
|
349
|
+
k: 1 + 2 - (3 + 4);
|
350
|
+
l: 1 / (2 - 3) / 4;
|
351
|
+
m: (1 - 2) / (3 - 4);
|
352
|
+
n: 1 / (2 * 3) / 4; }
|
339
353
|
LESS
|
340
354
|
end
|
341
355
|
|
@@ -628,5 +642,12 @@ LESS
|
|
628
642
|
end
|
629
643
|
|
630
644
|
rescue LoadError => e
|
631
|
-
|
645
|
+
unless defined?(Gem)
|
646
|
+
begin
|
647
|
+
require 'rubygems'
|
648
|
+
retry
|
649
|
+
rescue Exception
|
650
|
+
end
|
651
|
+
end
|
652
|
+
puts "\nCouldn't require less, skipping some tests."
|
632
653
|
end
|
@@ -124,25 +124,33 @@ RUBY
|
|
124
124
|
end
|
125
125
|
|
126
126
|
def self.assert_associative(op_name, sibling_name)
|
127
|
-
op =
|
128
|
-
sibling =
|
127
|
+
op = separator_for(op_name)
|
128
|
+
sibling = separator_for(sibling_name)
|
129
129
|
class_eval <<RUBY
|
130
130
|
def test_associative_#{op_name}_#{sibling_name}
|
131
|
-
assert_renders "$foo
|
131
|
+
assert_renders "$foo#{op}$bar#{op}$baz"
|
132
132
|
|
133
|
-
assert_equal "$foo
|
134
|
-
render("$foo
|
135
|
-
assert_equal "$foo
|
136
|
-
render("($foo
|
133
|
+
assert_equal "$foo#{op}$bar#{op}$baz",
|
134
|
+
render("$foo#{op}($bar#{op}$baz)")
|
135
|
+
assert_equal "$foo#{op}$bar#{op}$baz",
|
136
|
+
render("($foo#{op}$bar)#{op}$baz")
|
137
137
|
|
138
|
-
assert_equal "$foo
|
139
|
-
render("$foo
|
140
|
-
assert_equal "$foo
|
141
|
-
render("($foo
|
138
|
+
assert_equal "$foo#{op}$bar#{sibling}$baz",
|
139
|
+
render("$foo#{op}($bar#{sibling}$baz)")
|
140
|
+
assert_equal "$foo#{sibling}$bar#{op}$baz",
|
141
|
+
render("($foo#{sibling}$bar)#{op}$baz")
|
142
142
|
end
|
143
143
|
RUBY
|
144
144
|
end
|
145
145
|
|
146
|
+
def self.separator_for(op_name)
|
147
|
+
case op_name
|
148
|
+
when :comma; ", "
|
149
|
+
when :concat; " "
|
150
|
+
else; " #{Sass::Script::Lexer::OPERATORS_REVERSE[op_name]} "
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
146
154
|
def self.assert_non_associative(op_name, sibling_name)
|
147
155
|
op = Sass::Script::Lexer::OPERATORS_REVERSE[op_name]
|
148
156
|
sibling = Sass::Script::Lexer::OPERATORS_REVERSE[sibling_name]
|
@@ -174,6 +182,8 @@ RUBY
|
|
174
182
|
test_precedence :plus, :div
|
175
183
|
test_precedence :plus, :mod
|
176
184
|
|
185
|
+
assert_associative :comma, :concat
|
186
|
+
assert_associative :concat, :or
|
177
187
|
assert_associative :plus, :minus
|
178
188
|
assert_associative :times, :div
|
179
189
|
assert_associative :times, :mod
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.0.alpha.
|
4
|
+
version: 3.1.0.alpha.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Weizenbaum
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2010-10-
|
14
|
+
date: 2010-10-19 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -162,16 +162,16 @@ files:
|
|
162
162
|
- test/sass/plugin_test.rb
|
163
163
|
- test/sass/extend_test.rb
|
164
164
|
- test/sass/functions_test.rb
|
165
|
-
- test/sass/cache_test.rb
|
166
165
|
- test/sass/less_conversion_test.rb
|
167
|
-
- test/sass/
|
166
|
+
- test/sass/script_conversion_test.rb
|
167
|
+
- test/sass/util/subset_map_test.rb
|
168
168
|
- test/sass/more_results/more1.css
|
169
169
|
- test/sass/more_results/more1_with_line_comments.css
|
170
170
|
- test/sass/more_results/more_import.css
|
171
171
|
- test/sass/more_templates/_more_partial.sass
|
172
172
|
- test/sass/more_templates/more1.sass
|
173
173
|
- test/sass/more_templates/more_import.sass
|
174
|
-
- test/sass/
|
174
|
+
- test/sass/cache_test.rb
|
175
175
|
- test/sass/results/alt.css
|
176
176
|
- test/sass/results/basic.css
|
177
177
|
- test/sass/results/compact.css
|
@@ -193,7 +193,7 @@ files:
|
|
193
193
|
- test/sass/results/units.css
|
194
194
|
- test/sass/results/warn.css
|
195
195
|
- test/sass/results/warn_imported.css
|
196
|
-
- test/sass/
|
196
|
+
- test/sass/importer_test.rb
|
197
197
|
- test/sass/script_test.rb
|
198
198
|
- test/sass/scss/css_test.rb
|
199
199
|
- test/sass/scss/rx_test.rb
|
@@ -234,8 +234,8 @@ files:
|
|
234
234
|
- test/sass/templates/units.sass
|
235
235
|
- test/sass/templates/warn.sass
|
236
236
|
- test/sass/templates/warn_imported.sass
|
237
|
+
- test/sass/mock_importer.rb
|
237
238
|
- test/sass/test_helper.rb
|
238
|
-
- test/sass/util/subset_map_test.rb
|
239
239
|
- test/sass/util_test.rb
|
240
240
|
- test/test_helper.rb
|
241
241
|
- extra/update_watch.rb
|
@@ -285,13 +285,13 @@ test_files:
|
|
285
285
|
- test/sass/plugin_test.rb
|
286
286
|
- test/sass/extend_test.rb
|
287
287
|
- test/sass/functions_test.rb
|
288
|
-
- test/sass/cache_test.rb
|
289
288
|
- test/sass/less_conversion_test.rb
|
290
|
-
- test/sass/importer_test.rb
|
291
289
|
- test/sass/script_conversion_test.rb
|
290
|
+
- test/sass/util/subset_map_test.rb
|
291
|
+
- test/sass/cache_test.rb
|
292
|
+
- test/sass/importer_test.rb
|
292
293
|
- test/sass/script_test.rb
|
293
294
|
- test/sass/scss/css_test.rb
|
294
295
|
- test/sass/scss/rx_test.rb
|
295
296
|
- test/sass/scss/scss_test.rb
|
296
|
-
- test/sass/util/subset_map_test.rb
|
297
297
|
- test/sass/util_test.rb
|