PlotCalendar::Month - Plot an ASCII or HTML calendar
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.
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.
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;
Also look at Day.pm
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.
Alan Jackson March 1999 ajackson@icct.net
To install PlotCalendar::Day, copy and paste the appropriate command in to your terminal.
cpanm
cpanm PlotCalendar::Day
CPAN shell
perl -MCPAN -e shell install PlotCalendar::Day
For more information on module installation, please visit the detailed CPAN module installation guide.