class Crass::Parser
def consume_declarations(input = @tokens, options = {})
`:semicolon`, and `:whitespace` nodes.
* **:strict** - Set to `true` to exclude non-standard `:comment`,
Options:
`:whitespace` nodes, which is non-standard.
By default, the returned list may include `:comment`, `:semicolon`, and
Consumes a list of declarations and returns them.
def consume_declarations(input = @tokens, options = {}) declarations = [] while token = input.consume case token[:node] # Non-standard: Preserve comments, semicolons, and whitespace. when :comment, :semicolon, :whitespace declarations << token unless options[:strict] when :at_keyword # When parsing a style rule, this is a parse error. Otherwise it's # not. input.reconsume declarations << consume_at_rule(input) when :ident decl_tokens = [token] while next_token = input.peek break if next_token[:node] == :semicolon decl_tokens << consume_component_value(input) end if decl = consume_declaration(TokenScanner.new(decl_tokens)) declarations << decl end else # Parse error (invalid property name, etc.). # # Note: The spec doesn't say we should append anything to the list of # declarations here, but Simon Sapin's CSS parsing tests expect an # error node. declarations << create_node(:error, :value => 'invalid') input.reconsume while next_token = input.peek break if next_token[:node] == :semicolon consume_component_value(input) end end end declarations end