module Fugit::Nat::Parser
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
def _tz(i); alt(:tz, i, :_tz_delta, :_tz_name); end
def _tz_delta(i)
def _tz_delta(i) rex(nil, i, /[-+]([01][0-9]|2[0-4]):?(00|15|30|45)/) end
def _tz_name(i)
def _tz_name(i) rex(nil, i, /[A-Z][a-zA-Z0-9+\-]+(\/[A-Z][a-zA-Z0-9+\-_]+){0,2}/) end
def biz_day(i); rex(:biz_day, i, /(biz|business|week) *day/i); end
def biz_day(i); rex(:biz_day, i, /(biz|business|week) *day/i); end
def datum(i)
def datum(i) alt(nil, i, :plain_day, :biz_day, :name_day, :_tz, :flag, :duration, :name_hour, :numeral_hour, :digital_hour, :simple_hour) end
def digital_hour(i)
def digital_hour(i) rex(:digital_hour, i, /(2[0-4]|[01][0-9]):?[0-5]\d/) end
def duration(i)
def duration(i) rex( :duration, i, / \d+ \s? (mon(ths?)?|d(ays?)?|h(ours?)?|m(in(ute)?s?)?|s(ec(ond)?s?)?) /ix) end
def elt(i); alt(nil, i, :sugar, :datum); end
def elt(i); alt(nil, i, :sugar, :datum); end
def flag(i); rex(:flag, i, /(every|at|after|am|pm|on|in)/i); end
def flag(i); rex(:flag, i, /(every|at|after|am|pm|on|in)/i); end
def name_day(i); rex(:name_day, i, /#{WEEKDAYS.reverse.join('|')}/i); end
def name_day(i); rex(:name_day, i, /#{WEEKDAYS.reverse.join('|')}/i); end
def name_hour(i)
def name_hour(i) rex(:name_hour, i, /(#{NHOURS.keys.join('|')})/i) end
def nat(i); rep(:nat, i, :elt, 1); end
def nat(i); rep(:nat, i, :elt, 1); end
def numeral_hour(i)
def numeral_hour(i) rex(:numeral_hour, i, /(#{NUMS.join('|')})/i) end
def plain_day(i); rex(:plain_day, i, /day/i); end
def plain_day(i); rex(:plain_day, i, /day/i); end
def rewrite_nat(t)
def rewrite_nat(t) o.pp(t, colours: true) t .subgather(nil) .collect { |tt| k = tt.name v = tt.string.downcase case k when :tz [ k, [ tt.string.strip, EtOrbi.get_tzone(tt.string.strip) ] ] when :duration [ k, [ Fugit::Duration.parse(tt.string.strip) ] ] when :numeral_hour [ k, NUMS.index(v) ] when :simple_hour [ k, v.to_i ] when :digital_hour v = v.gsub(/:/, '') [ k, [ v[0, 2], v[2, 2] ] ] when :name_hour [ :digital_hour, NHOURS[v] ] when :name_day [ k, WEEKDAYS.index(v[0, 3]) ] else [ k, v ] end } end
def simple_hour(i)
def simple_hour(i) rex(:simple_hour, i, /(2[0-4]|[01]?[0-9])/) end
def sugar(i); rex(nil, i, /(and|or|[, \t]+)/i); end
def sugar(i); rex(nil, i, /(and|or|[, \t]+)/i); end