Rand Stats

Markup::Calendar

zef:antononcube

Markup::Calendar

Raku package with Markup (HTML, Markdown) calendar functions for displaying monthly, yearly, and custom calendars.

Motivation

The package "Text::Calendar", [AAp1], provides the core functions for making the calendars in this package. The packages "Data::Translators", [AAp2], and "Pretty::Table", [ULp1], provide additional formatting functionalities.

I want to keep "Text::Calendar" lightweight, without any dependencies. Hence I made this separate package, "Markup::Calendar", that has more involved dependencies and use-cases.

An "involved use case" is calendar in which some of the days have tooltips and hyperlinks.


Installation

From Zef ecosystem:

zef install Markup::Calendar

From GitHub:

zef install https://github.com/antononcube/Raku-Markup-Calendar.git

Examples

Basic HTML calendar

use Markup::Calendar;
use Text::Calendar;

calendar():html

June 2026

MoTuWeThFrSaSu
1234567
891011121314
15161718192021
22232425262728
2930

July 2026

MoTuWeThFrSaSu
12345
6789101112
13141516171819
20212223242526
2728293031

August 2026

MoTuWeThFrSaSu
12
3456789
10111213141516
17181920212223
24252627282930
31

HTML yearly calendar with highlights

Here is an HTML calendar that weekend days are highlighted and with larger font:

calendar-year( 
    per-row => 4, 
    highlight => (Date.new(2024,1,1)...Date.new(2024,12,31)).grep({ $_.day-of-week ≥ 6 }),
    highlight-style => 'color:orange; font-size:14pt'
):html

2026

January

MoTuWeThFrSaSu
1234
567891011
12131415161718
19202122232425
262728293031

February

MoTuWeThFrSaSu
1
2345678
9101112131415
16171819202122
232425262728

March

MoTuWeThFrSaSu
1
2345678
9101112131415
16171819202122
23242526272829
3031

April

MoTuWeThFrSaSu
12345
6789101112
13141516171819
20212223242526
27282930

May

MoTuWeThFrSaSu
123
45678910
11121314151617
18192021222324
25262728293031

June

MoTuWeThFrSaSu
1234567
891011121314
15161718192021
22232425262728
2930

July

MoTuWeThFrSaSu
12345
6789101112
13141516171819
20212223242526
2728293031

August

MoTuWeThFrSaSu
12
3456789
10111213141516
17181920212223
24252627282930
31

September

MoTuWeThFrSaSu
123456
78910111213
14151617181920
21222324252627
282930

October

MoTuWeThFrSaSu
1234
567891011
12131415161718
19202122232425
262728293031

November

MoTuWeThFrSaSu
1
2345678
9101112131415
16171819202122
23242526272829
30

December

MoTuWeThFrSaSu
123456
78910111213
14151617181920
21222324252627
28293031

Standalone calendar file

Here we make a standalone calendar file:

spurt('example.html', calendar-year(year => 2024, highlight => [3=>3, 5=>24, 9=>9], highlight-style=>'color:red', format=>'html'))
# True

CLI

The package provides the Command Line Interface (CLI) script mcal. Here is its usage message:

mcal --help
# Usage:
#   mcal [-y|--year=<Str>] [-m|--months=<Str>] [-h|--highlight=<Str>] [-t|--tooltip=<Str>] [-l|--hyperlink=<Str>] [-s|--highlight-style=<Str>] [--per-row[=UInt]] [--doc|--document] -- Displays a calendar in HTML format.
#   
#     -y|--year=<Str>               Year spec; if an empty string only the months spec is used. [default: '']
#     -m|--months=<Str>             Months spec, comma separated list of integers or month names. [default: 'Whatever']
#     -h|--highlight=<Str>          Highlight spec that is a comma separated list of days. [default: '']
#     -t|--tooltip=<Str>            Tooltip spec. [default: '']
#     -l|--hyperlink=<Str>          Hyperlink spec (per calendar day.) [default: '']
#     -s|--highlight-style=<Str>    Highlight style (HTML style.) [default: 'color:orange; font-…']
#     --per-row[=UInt]              Number of months per row. [default: 3]
#     --doc|--document              Should a complete HTML document be made or not? [default: False]

TODO


References

[AAp1] Anton Antonov, Text::Calendar Raku package, (2024), GitHub/antononcube.

[AAp2] Anton Antonov, Data::Translators Raku package, (2023), GitHub/antononcube.

[LUp1] Luis F. Uceta, Pretty::Table Raku package, (2020), GitLab/uzluisf.