package HTML::CalendarMonth::DateTool::Cal;
{
$HTML::CalendarMonth::DateTool::Cal::VERSION = '1.26';
}
# Interface to unix 'cal' command
use strict;
use warnings;
use Carp;
use base qw( HTML::CalendarMonth::DateTool );
sub dow1st_and_lastday {
my($self, $month, $year) = @_;
$month ||= $self->month;
$year ||= $self->year;
my $cmd = $self->_cal_cmd or croak "cal command not found\n";
my @cal = grep(!/^\s*$/,`$cmd $month $year`);
chomp @cal;
my @days = grep(/\d+/,split(/\s+/,$cal[2]));
my $dow1st = 6 - $#days;
my($lastday) = $cal[$#cal] =~ /(\d+)\s*$/;
# With dow1st and lastday, one builds a calendar sequentially.
# Historically, in particular Sep 1752, days have been skipped. Here's
# the chance to catch that.
$self->_skips(undef);
if ($month == 9 && $year == 1752) {
my %skips;
grep(++$skips{$_}, 3 .. 13);
$self->_skips(\%skips);
}
($dow1st, $lastday);
}
1;