NAME
PlotCalendar::Month - Plot an ASCII or HTML calendar
SYNOPSIS
Creates a Month object for plotting as ASCII, HTML, or in a Perl/Tk Canvas. Calls Day.pm for the individual days within the calendar.
DESCRIPTION
Measurements in pixels because - well, because. It seemed simpler when I made the decision. And it works for both Tk and HTML.
The month is laid out like this :
Month_name Year
---------------------------------------------------------------
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
---------------------------------------------------------------
| | | | | | | |
| day | day | | | | | |
| | | | | | | |
|--------|--------|--------|-------|--------|--------|--------|
| | | | | | | |
| day | day | | | | | |
| | | | | | | |
|--------|--------|--------|-------|--------|--------|--------|
| | | | | | | |
| day | day | | | | | |
| | | | | | | |
|--------|--------|--------|-------|--------|--------|--------|
| | | | | | | |
| day | day | | | | | |
| | | | | | | |
|--------|--------|--------|-------|--------|--------|--------|
| | | | | | | |
| day | day | | | | | |
| | | | | | | |
|--------|--------|--------|-------|--------|--------|--------|
| | | | | | | |
| day | day | | | | | | optional
| | | | | | | | row
|--------|--------|--------|-------|--------|--------|--------|
Globals : height, width, fgcol,
bgcolmain,
References expect to be given the entire thing, that is
<A HREF="http://yaddayaddayadda/">
or
<A HREF="mailto:george_tirebiter@noway.nohow">
The software will terminate it with a </A> at the right spot.
EXAMPLE
require PlotCalendar::Month;
my $month = PlotCalendar::Month->new(01,1999); # Jan 1999
# global values, to be applied to all cells
------------------------- size of whole calendar
$month -> size(700,700); # width, height in pixels
------------------------- font sizes for digit, name of day, and text
$month -> font('14','10','8');
------------------------- clip text if it wants to wrap?
$month -> cliptext('yes');
------------------------- This can be any day you want
$month -> firstday('Sun'); # First column is Sunday
------------------------- If this is not set, regular text will be used.
------------------------- If it is set, then in that directory should be
------------------------- gif files named 0.gif, 1.gif ... January.gif, ...
$month -> artwork('/home/ajackson/public_html/cgi-bin/Calendar/Calendar_art3/');
# arrays of values, if not an array, apply to all cells, if an array
# apply to each cell, indexed by day-of-month
The colors are the standard values used in html
Textstyle encoding is b=bold, i=italic, u=underline, n=normal
Fontsize = 6-14, roughly point sizes
my @text;
my @daynames;
my @nameref;
my @bgcolor;
my @colors = ('WHITE','#33cc00','#FF99FF','#FF7070','#FFB0B0',);
my (@textcol,@textsize,@textstyle,@textref);
my @style = ('i','u','b',);
my @url;
----------- build some random color and text fields as a demo
for (my $i=1;$i<=31;$i++) {
$daynames[$i] = "Day number $i";
$nameref[$i] = "<A HREF=\"http://www.$i.ca\">";
$bgcolor[$i] = $colors[$i%5];
@{$text[$i]} = ("Text 1 for $i","Second $i text","$i bit of text",);
@{$textref[$i]} = ("<A HREF=\"http://www.$i.com/\">","Second $i text","<A HREF=\"http://www.$i.net/\">",);
@{$textcol[$i]} = ($colors[($i+1)%5],$colors[($i+2)%5],$colors[($i+3)%5]);
@{$textsize[$i]} = ("8","10","8",);
@{$textstyle[$i]} = @style;
@style = reverse(@style);
$url[$i] = '<A href="http://some.org/name_number_' . $i . '">';
}
------------------------- Set global values
$month -> fgcolor('BLACK',); # Global foreground color
$month -> bgcolor(@bgcolor); # Background color per day
$month -> styles('b','bi','ui',); # Global text styles
# Comments
my @prefs = ('before','after','after');
my @comments = (['Comment one'],["Comment two","and so on"],['Comment three']);
my @comcol = qw(b g b);
my @comstyle = qw(n b bi);
my @comsize = qw(8 10 14);
------------------------- Comments get stuck into an otherwise empty cell
$month->comments(\@prefs,\@comments,\@comcol,\@comstyle,\@comsize);
------------------------- Wrap a hotlink around the whole day, for each day
$month -> htmlref(@url);
------------------------- set the names for every day
$month -> dayname(@daynames);
------------------------- wrap the name in a hotlink
$month -> nameref(@nameref);
------------------------- set the text and it's properties for each day
$month -> text(@text);
$month -> textcolor(@textcol);
$month -> textsize(@textsize);
$month -> textstyle(@textstyle);
$month -> textref(@textref);
# global HTML only options
----------------- allow days to expand vertically to accomodate text
$month -> htmlexpand('yes');
# grab an ascii calendar and print it
my $text = $month -> getascii;
print $text;
------------------- get the html calendar
my $html = $month -> gethtml;
print "<HTML><BODY>\n";
print $html;
SEE ALSO
Also look at Day.pm
DEPENDENCIES
PlotCalendar::DateTools
This is a pure perl replacement for Date::Calc. I needed it because Date::Calc contains C code which my web hosting service did not have available for CGI-BIN stuff.
AUTHOR
Alan Jackson
March 1999
ajackson@icct.net