class Sass::Engine
def parse_for(line, root, text)
def parse_for(line, root, text) var, from_expr, to_name, to_expr = text.scan(/^([^\s]+)\s+from\s+(.+)\s+(to|through)\s+(.+)$/).first if var.nil? # scan failed, try to figure out why for error message if text !~ /^[^\s]+/ expected = "variable name" elsif text !~ /^[^\s]+\s+from\s+.+/ expected = "'from <expr>'" else expected = "'to <expr>' or 'through <expr>'" end raise SyntaxError.new("Invalid for directive '@for #{text}': expected #{expected}.") end raise SyntaxError.new("Invalid variable \"#{var}\".") unless var =~ Script::VALIDATE if var.slice!(0) == ?! offset = line.offset + line.text.index("!" + var) + 1 Script.var_warning(var, @line, offset, @options[:filename]) end parsed_from = parse_script(from_expr, :offset => line.offset + line.text.index(from_expr)) parsed_to = parse_script(to_expr, :offset => line.offset + line.text.index(to_expr)) Tree::ForNode.new(var, parsed_from, parsed_to, to_name == 'to') end