Add @while.

This commit is contained in:
Nathan Weizenbaum 2008-08-10 14:21:25 -04:00
parent 473fd84d3b
commit b4b6ce2c29
2 changed files with 35 additions and 0 deletions

View File

@ -324,6 +324,8 @@ END
parse_if(line, root, value)
elsif directive == "for"
parse_for(line, root, value)
elsif directive == "while"
parse_while(line, root, value)
else
Tree::DirectiveNode.new(line.text, @options)
end
@ -366,6 +368,14 @@ END
tree
end
def parse_while(line, root, text)
tree = []
while Sass::Constant.parse(text, @constants, line.index).to_bool
append_children(tree, line.children, root)
end
tree
end
def parse_mixin_definition(line)
name, args = line.text.scan(/^=\s*([^(]+)(\([^)]*\))?$/).first
raise SyntaxError.new("Invalid mixin \"#{line.text[1..-1]}\".", @line) if name.nil?

View File

@ -491,6 +491,31 @@ CSS
SASS
end
def test_while
assert_equal(<<CSS, render(<<SASS))
a-5 {
blooble: gloop; }
a-4 {
blooble: gloop; }
a-3 {
blooble: gloop; }
a-2 {
blooble: gloop; }
a-1 {
blooble: gloop; }
CSS
!a = 5
@while !a ~= 0
a-\#{!a}
blooble: gloop
!a = !a - 1
SASS
end
def test_argument_error
assert_raise(Sass::SyntaxError) { render("a\n b = hsl(1)") }
end