0
@@ -6,7 +6,8 @@ module Chronic
0
{:time => [Handler.new([:repeater_time, :repeater_day_portion?], nil)],
0
- :date => [Handler.new([:repeater_month_name, :scalar_day, :scalar_year], :handle_rmn_sd_sy),
0
+ :date => [Handler.new([:repeater_day_name, :repeater_month_name, :scalar_day, :repeater_time, :time_zone, :scalar_year], :handle_rdn_rmn_sd_t_tz_sy),
0
+ Handler.new([:repeater_month_name, :scalar_day, :scalar_year], :handle_rmn_sd_sy),
0
Handler.new([:repeater_month_name, :scalar_day, :scalar_year, :separator_at?, 'time?'], :handle_rmn_sd_sy),
0
Handler.new([:repeater_month_name, :scalar_day, :separator_at?, 'time?'], :handle_rmn_sd),
0
Handler.new([:repeater_month_name, :ordinal_day, :separator_at?, 'time?'], :handle_rmn_od),
0
@@ -17,13 +18,17 @@ module Chronic
0
Handler.new([:scalar_year, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_day, :separator_at?, 'time?'], :handle_sy_sm_sd),
0
Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_year], :handle_sm_sy)],
0
:anchor => [Handler.new([:grabber?, :repeater, :separator_at?, :repeater?, :repeater?], :handle_r),
0
+ Handler.new([:grabber?, :repeater, :repeater, :separator_at?, :repeater?, :repeater?], :handle_r),
0
Handler.new([:repeater, :grabber, :repeater], :handle_r_g_r)],
0
+ # 3 weeks from now, in 2 months
0
:arrow => [Handler.new([:scalar, :repeater, :pointer], :handle_s_r_p),
0
Handler.new([:pointer, :scalar, :repeater], :handle_p_s_r),
0
Handler.new([:scalar, :repeater, :pointer, 'anchor'], :handle_s_r_p_a)],
0
:narrow => [Handler.new([:ordinal, :repeater, :separator_in, :repeater], :handle_o_r_s_r),
0
Handler.new([:ordinal, :repeater, :grabber, :repeater], :handle_o_r_g_r)]
0
@@ -34,6 +39,7 @@ module Chronic
0
self.definitions[:date].each do |handler|
0
if handler.match(tokens, self.definitions)
0
+ puts "-date" if Chronic.debug
0
good_tokens = tokens.select { |o| !o.get_tag Separator }
0
return self.send(handler.handler_method, good_tokens, options)
0
@@ -43,6 +49,7 @@ module Chronic
0
self.definitions[:anchor].each do |handler|
0
if handler.match(tokens, self.definitions)
0
+ puts "-anchor" if Chronic.debug
0
good_tokens = tokens.select { |o| !o.get_tag Separator }
0
return self.send(handler.handler_method, good_tokens, options)
0
@@ -52,21 +59,24 @@ module Chronic
0
self.definitions[:arrow].each do |handler|
0
if handler.match(tokens, self.definitions)
0
+ puts "-arrow" if Chronic.debug
0
good_tokens = tokens.reject { |o| o.get_tag(SeparatorAt) || o.get_tag(SeparatorSlashOrDash) || o.get_tag(SeparatorComma) }
0
return self.send(handler.handler_method, good_tokens, options)
0
- # not an arrow, let's hope it's a
n narrow
0
+ # not an arrow, let's hope it's a
narrow
0
self.definitions[:narrow].each do |handler|
0
if handler.match(tokens, self.definitions)
0
+ puts "-narrow" if Chronic.debug
0
#good_tokens = tokens.select { |o| !o.get_tag Separator }
0
return self.send(handler.handler_method, tokens, options)
0
# I guess you're out of luck!
0
+ puts "-none" if Chronic.debug
0
@@ -122,6 +132,19 @@ module Chronic
0
+ def handle_rdn_rmn_sd_t_tz_sy(tokens, options) #:nodoc:
0
+ month = tokens[1].get_tag(RepeaterMonthName).index
0
+ day = tokens[2].get_tag(ScalarDay).type
0
+ year = tokens[5].get_tag(ScalarYear).type
0
+ day_start = Time.local(year, month, day)
0
+ day_or_time(day_start, [tokens[3]], options)
0
def handle_rmn_sd_sy(tokens, options) #:nodoc:
0
month = tokens[0].get_tag(RepeaterMonthName).index
0
day = tokens[1].get_tag(ScalarDay).type
0
@@ -333,22 +356,54 @@ module Chronic
0
def dealias_and_disambiguate_times(tokens, options) #:nodoc:
0
# handle aliases of am/pm
0
- # 5:00 in the morning => 5:00 am
0
- # 7:00 in the evening => 7:00 pm
0
- tokens.each_with_index do |t0, i|
0
- if t1 && (t1tag = t1.get_tag(RepeaterDayPortion)) && t0.get_tag(RepeaterTime)
0
- if [:morning].include?(t1tag.type)
0
- t1.untag(RepeaterDayPortion)
0
- t1.tag(RepeaterDayPortion.new(:am))
0
- elsif [:afternoon, :evening, :night].include?(t1tag.type)
0
- t1.untag(RepeaterDayPortion)
0
- t1.tag(RepeaterDayPortion.new(:pm))
0
+ # 5:00 in the morning -> 5:00 am
0
+ # 7:00 in the evening -> 7:00 pm
0
+ day_portion_index = nil
0
+ tokens.each_with_index do |t, i|
0
+ if t.get_tag(RepeaterDayPortion)
0
+ tokens.each_with_index do |t, i|
0
+ if t.get_tag(RepeaterTime)
0
+ if (day_portion_index && time_index)
0
+ t1 = tokens[day_portion_index]
0
+ t1tag = t1.get_tag(RepeaterDayPortion)
0
+ if [:morning].include?(t1tag.type)
0
+ puts '--morning->am' if Chronic.debug
0
+ t1.untag(RepeaterDayPortion)
0
+ t1.tag(RepeaterDayPortion.new(:am))
0
+ elsif [:afternoon, :evening, :night].include?(t1tag.type)
0
+ puts "--#{t1tag.type}->pm" if Chronic.debug
0
+ t1.untag(RepeaterDayPortion)
0
+ t1.tag(RepeaterDayPortion.new(:pm))
0
+ # tokens.each_with_index do |t0, i|
0
+ # if t1 && (t1tag = t1.get_tag(RepeaterDayPortion)) && t0.get_tag(RepeaterTime)
0
+ # if [:morning].include?(t1tag.type)
0
+ # puts '--morning->am' if Chronic.debug
0
+ # t1.untag(RepeaterDayPortion)
0
+ # t1.tag(RepeaterDayPortion.new(:am))
0
+ # elsif [:afternoon, :evening, :night].include?(t1tag.type)
0
+ # puts "--#{t1tag.type}->pm" if Chronic.debug
0
+ # t1.untag(RepeaterDayPortion)
0
+ # t1.tag(RepeaterDayPortion.new(:pm))
0
# handle ambiguous times if :ambiguous_time_range is specified
0
if options[:ambiguous_time_range] != :none
Comments
No one has commented yet.