def parse(text, specified_options = {})
default_options = {:context => :future,
:now => Time.now,
:guess => true,
:ambiguous_time_range => 6}
options = default_options.merge specified_options
specified_options.keys.each do |key|
default_options.keys.include?(key) || raise(InvalidArgumentException, "#{key} is not a valid option key.")
end
[:past, :future, :none].include?(options[:context]) || raise(InvalidArgumentException, "Invalid value ':#{options[:context]}' for :context specified. Valid values are :past and :future.")
@now = options[:now]
text = self.pre_normalize(text)
@tokens = self.base_tokenize(text)
[Repeater].each do |tokenizer|
@tokens = tokenizer.scan(@tokens, options)
end
[Grabber, Pointer, Scalar, Ordinal, Separator, TimeZone].each do |tokenizer|
@tokens = tokenizer.scan(@tokens)
end
@tokens = @tokens.select { |token| token.tagged? }
if Chronic.debug
puts "+---------------------------------------------------"
puts "| " + @tokens.to_s
puts "+---------------------------------------------------"
end
begin
span = self.tokens_to_span(@tokens, options)
rescue
raise
return nil
end
if options[:guess]
return self.guess(span)
else
return span
end
end