rendered paste bodysub parse_whole_date {
my ($remaining, $seconds) = @_;
if (!(defined($seconds))) { $seconds = time(); }
my ($orig_rem, $orig_sec) = ($remaining, $seconds);
my ($real_seconds, $message);
my ($in_seen, $at_seen, $on_seen) = (0, 0, 0);
while (defined($seconds)) {
$real_seconds = $seconds;
$message = $remaining;
my $orig_message = $message;
$message =~ s/^at // unless ($at_seen);
$message =~ s/^in // unless ($in_seen);
$message =~ s/^on // unless ($on_seen);
my %options = (
NOW => $seconds,
FUZZY => 1,
PREFER_FUTURE => 1,
);
my $orig_remain = $remaining;
($seconds, $remaining) = parsedate($message, %options);
if (defined($seconds)) {
my $pos = index($orig_message, $remaining);
# ADD ME
# Fix for: "noon"
if ($pos == 0) { return ($real_seconds,$orig_message,$orig_remain); }
# END SNIP
my $parsed = substr($orig_message, 0, $pos);
# if ($parsed =~ m/(^| )in /) { $in_seen = 1; }
# if ($parsed =~ m/(^| )at /) { $at_seen = 1; }
if ($parsed =~ m/^in\b/) { $in_seen = 1; }
if ($parsed =~ m/^at\b/) { $at_seen = 1; }
if ($parsed =~ m/^on\b/) { $on_seen = 1; }
if ($parsed =~ m/ in $/) { $remaining = "in $remaining"; }
if ($parsed =~ m/ at $/) { $remaining = "at $remaining"; }
if ($parsed =~ m/ on $/) { $remaining = "on $remaining"; }
}
$message = $orig_message;
}
if (($orig_rem eq $message) ||
($real_seconds == $orig_sec) ||
($real_seconds < 0)) {
return (undef, $message, $remaining);
} else {
return ($real_seconds, $message, $remaining);
}
}