From 83a7853ff96675340b671f46037da31ff52024ab Mon Sep 17 00:00:00 2001 From: nex3 Date: Tue, 3 Apr 2007 05:14:03 +0000 Subject: [PATCH] css2sass properly handles nested tags. git-svn-id: svn://hamptoncatlin.com/haml/trunk@483 7063305b-7217-0410-af8c-cdc13e5119b9 --- lib/sass/css.rb | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/sass/css.rb b/lib/sass/css.rb index 02948e83..5b7f8e8c 100644 --- a/lib/sass/css.rb +++ b/lib/sass/css.rb @@ -22,7 +22,7 @@ module Sass str = "#{' ' * tabs}#{rule}\n" children.each do |child| - str << "#{child.to_sass(tabs + 1)}\n" + str << "#{child.to_sass(tabs + 1)}" end str @@ -31,7 +31,7 @@ module Sass class AttrNode def to_sass(tabs) - "#{' ' * tabs}:#{name} #{value}" + "#{' ' * tabs}:#{name} #{value}\n" end end end @@ -79,6 +79,7 @@ module Sass root = Tree::Node.new(nil) whitespace rules(root) + sort_rules(root) root end @@ -136,5 +137,30 @@ module Sass end whitespace end + + def sort_rules(root) + root.children.sort! do |c1, c2| + c1.rule <=> c2.rule + end + + prev_rules = [] + prev_rule_values = [] + root.children.each do |child| + joined_prev_values = prev_rule_values.join(' ') + until prev_rules.empty? || child.rule =~ /^#{Regexp.escape(joined_prev_values)}/ + prev_rules.pop + prev_rule_values.pop + end + + unless prev_rules.empty? + child.rule.slice!(0..(joined_prev_values.size)) + prev_rules[-1] << child + root.children.delete child + end + + prev_rules << child + prev_rule_values << child.rule + end + end end end