Skip to content

Commit

Permalink
correctly handle css @import rules ( fix #thomaspierson#10 )
Browse files Browse the repository at this point in the history
  • Loading branch information
thomaspierson committed Feb 3, 2013
1 parent 78d7735 commit 5ab3ff4
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 6 deletions.
21 changes: 15 additions & 6 deletions lib/css2less.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ def generate_tree
if rules.include?('>')
rules = rules.gsub(/\s*>\s*/, ' &>')
end
if rules.include?("@import")
import_rule = rules.match(/@import.*;/)[0]
rules = rules.gsub(/@import.*;/, '')
add_rule(@tree, [], import_rule)
end
# leave multiple rules alone
if rules.include?(',')
add_rule(@tree, [rules], style[1])
Expand All @@ -92,13 +97,17 @@ def render_less(tree=nil, indent=0)
tree = @tree
end
tree.each do |element, children|
@less = @less + ' ' * indent + element + " {\n"
style = children.delete(:style)
if style
@less = @less + style.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| ' ' * (indent+4) + s + ";" }.join("\n") + "\n"
if element == :style
@less = @less + children.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| s + ";" }.join("\n") + "\n"
else
@less = @less + ' ' * indent + element + " {\n"
style = children.delete(:style)
if style
@less = @less + style.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| ' ' * (indent+4) + s + ";" }.join("\n") + "\n"
end
render_less(children, indent + 4)
@less = @less + ' ' * indent + "}\n"
end
render_less(children, indent + 4)
@less = @less + ' ' * indent + "}\n"
end
end

Expand Down
36 changes: 36 additions & 0 deletions spec/css2less_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,42 @@
}
}
}
EOF
converter = Css2Less::Converter.new(css)
converter.process_less
converter.get_less.should eq(less)
end

it "should correctly handle css @import rules" do
css = <<EOF
@import "style1.css";
@import "style2.css";
@import "style3.css";
#hello {
color: blue;
}
@import "style4.css";
#hello #buddy {
background: red;
}
@import "style5.css";
EOF
less = <<EOF
@import "style1.css";
@import "style2.css";
@import "style3.css";
@import "style4.css";
@import "style5.css";
#hello {
color: blue;
#buddy {
background: red;
}
}
EOF
converter = Css2Less::Converter.new(css)
converter.process_less
Expand Down

0 comments on commit 5ab3ff4

Please sign in to comment.