class Chronic::Handler

def match(tokens, definitions)

Returns true if a match is found.

definitions - A Hash of definitions to check against.
tokens - An Array of tokens to process.
def match(tokens, definitions)
  token_index = 0
  @pattern.each do |element|
    name = element.to_s
    optional = name[-1, 1] == '?'
    name = name.chop if optional
    case element
    when Symbol
      if tags_match?(name, tokens, token_index)
        token_index += 1
        next
      else
        if optional
          next
        else
          return false
        end
      end
    when String
      return true if optional && token_index == tokens.size
      if definitions.key?(name.to_sym)
        sub_handlers = definitions[name.to_sym]
      else
        raise ChronicPain, "Invalid subset #{name} specified"
      end
      sub_handlers.each do |sub_handler|
        return true if sub_handler.match(tokens[token_index..tokens.size], definitions)
      end
    else
      raise ChronicPain, "Invalid match type: #{element.class}"
    end
  end
  return false if token_index != tokens.size
  return true
end