The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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