class Crass::Parser

def parse_rule(input = @tokens)

5.3.4. http://dev.w3.org/csswg/css-syntax-3/#parse-a-rule

Parses a single rule and returns it.
def parse_rule(input = @tokens)
  input = TokenScanner.new(input) unless input.is_a?(TokenScanner)
  while input.peek && input.peek[:node] == :whitespace
    input.consume
  end
  if input.peek.nil?
    # Syntax error.
    return create_node(:error, :value => 'empty')
  elsif input.peek[:node] == :at_keyword
    rule = consume_at_rule(input)
  else
    rule = consume_qualified_rule(input)
  end
  while input.peek && input.peek[:node] == :whitespace
    input.consume
  end
  if input.peek.nil?
    rule
  else
    # Syntax error.
    create_node(:error, :value => 'extra-input')
  end
end