From ae79bdb8ddfaecfcc8928823960df2570eb41c07 Mon Sep 17 00:00:00 2001 From: Cristi Balan Date: Thu, 27 Mar 2008 17:18:38 +0100 Subject: [PATCH] fix multiline selectors and tidy up group selector output * all multiline selectors are now outputed in one line * grouped selectors now honor :style => 'compressed' --- lib/sass/engine.rb | 9 +++++++++ lib/sass/tree/rule_node.rb | 12 +++++++----- test/sass/engine_test.rb | 8 ++++---- test/sass/results/multiline.css | 11 +++-------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/lib/sass/engine.rb b/lib/sass/engine.rb index 83ccbfb1..0b8790e5 100644 --- a/lib/sass/engine.rb +++ b/lib/sass/engine.rb @@ -138,6 +138,15 @@ module Sass if tabs - old_tabs > 1 raise SyntaxError.new("Illegal Indentation: Only two space characters are allowed as tabulation.", @line) end + line.strip! + next_line = @template[index+1] + if next_line + next_tabs = count_tabs(next_line) + if line[-1] == ?, && tabs == next_tabs + @template[index+1] = "#{' '*tabs}#{line} #{next_line.strip}" + next + end + end @lines << [line.strip, tabs] old_tabs = tabs diff --git a/lib/sass/tree/rule_node.rb b/lib/sass/tree/rule_node.rb index d8244cd2..6cbcc369 100644 --- a/lib/sass/tree/rule_node.rb +++ b/lib/sass/tree/rule_node.rb @@ -20,20 +20,22 @@ module Sass::Tree # Save this because the comma's removed by the super_rule additions was_continued = continued? + rule_split = /\s*,\s*/ + rule_separator = @style == :compressed ? ',' : ', ' total_rule = if super_rules - super_rules.split(/,\s*/).collect! do |s| - self.rule.split(/,\s*/).collect do |r| + super_rules.split(rule_split).collect! do |s| + self.rule.split(rule_split).collect do |r| if r.include?(PARENT) r.gsub(PARENT, s) else "#{s} #{r}" end - end.join(", ") - end.join(", ") + (was_continued ? ',' : '') + end.join(rule_separator) + end.join(rule_separator) + (was_continued ? rule_separator: "") elsif self.rule.include?(PARENT) raise Sass::SyntaxError.new("Base-level rules cannot contain the parent-selector-referencing character '#{PARENT}'", line) else - self.rule + self.rule.gsub(rule_split, rule_separator) end children.each do |child| diff --git a/test/sass/engine_test.rb b/test/sass/engine_test.rb index 602341aa..79e5a478 100644 --- a/test/sass/engine_test.rb +++ b/test/sass/engine_test.rb @@ -109,9 +109,9 @@ class SassEngineTest < Test::Unit::TestCase end def test_basic_multiline_selector - assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n", + assert_equal("#foo #bar, #baz #boom {\n foo: bar; }\n", render("#foo #bar,\n#baz #boom\n :foo bar")) - assert_equal("#foo #bar,\n#foo #baz {\n foo: bar; }\n", + assert_equal("#foo #bar, #foo #baz {\n foo: bar; }\n", render("#foo\n #bar,\n #baz\n :foo bar")) assert_equal("#foo #bar, #baz #boom { foo: bar; }\n", render("#foo #bar,\n#baz #boom\n :foo bar", :style => :compact)) @@ -179,11 +179,11 @@ class SassEngineTest < Test::Unit::TestCase assert_equal("@a{#b{a:b}#b #c{d:e}}\n", render("@a\n #b\n :a b\n #c\n :d e", :style => :compressed)) - assert_equal("@a {\n #foo,\n #bar {\n b: c; } }\n", + assert_equal("@a {\n #foo, #bar {\n b: c; } }\n", render("@a\n #foo, \n #bar\n :b c")) assert_equal("@a { #foo, #bar { b: c; } }\n", render("@a\n #foo, \n #bar\n :b c", :style => :compact)) - assert_equal("@a {\n #foo,\n #bar {\n b: c;\n }\n}\n", + assert_equal("@a {\n #foo, #bar {\n b: c;\n }\n}\n", render("@a\n #foo, \n #bar\n :b c", :style => :expanded)) assert_equal("@a{#foo,#bar{b:c}}\n", render("@a\n #foo, \n #bar\n :b c", :style => :compressed)) diff --git a/test/sass/results/multiline.css b/test/sass/results/multiline.css index 0a1ba9e9..a2903c0a 100644 --- a/test/sass/results/multiline.css +++ b/test/sass/results/multiline.css @@ -1,11 +1,6 @@ -#main, -#header { +#main, #header { height: 50px; } - #main div, - #header div { + #main div, #header div { width: 100px; } - #main div a span, - #main div em span, - #header div a span, - #header div em span { + #main div a span, #main div em span, #header div a span, #header div em span { color: pink; }