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
January 2024| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | 31 | | | | |
| February 2024| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | | | |
| March 2024| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | 1 | 2 | 3 | | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | 11 | 12 | 13 | 14 | 15 | 16 | 17 | | 18 | 19 | 20 | 21 | 22 | 23 | 24 | | 25 | 26 | 27 | 28 | 29 | 30 | 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
2024
January| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | 31 | | | | |
| February| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | | | |
| March| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | 1 | 2 | 3 | | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | 11 | 12 | 13 | 14 | 15 | 16 | 17 | | 18 | 19 | 20 | 21 | 22 | 23 | 24 | | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| April| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | | | | | |
|
May| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 10 | 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | | 20 | 21 | 22 | 23 | 24 | 25 | 26 | | 27 | 28 | 29 | 30 | 31 | | |
| June| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | | 1 | 2 | | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | 10 | 11 | 12 | 13 | 14 | 15 | 16 | | 17 | 18 | 19 | 20 | 21 | 22 | 23 | | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| July| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | 31 | | | | |
| August| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | 30 | 31 | |
|
September| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | | | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | 16 | 17 | 18 | 19 | 20 | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | | 30 | | | | | | |
| October| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 14 | 15 | 16 | 17 | 18 | 19 | 20 | | 21 | 22 | 23 | 24 | 25 | 26 | 27 | | 28 | 29 | 30 | 31 | | | |
| November| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | 1 | 2 | 3 | | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | 11 | 12 | 13 | 14 | 15 | 16 | 17 | | 18 | 19 | 20 | 21 | 22 | 23 | 24 | | 25 | 26 | 27 | 28 | 29 | 30 | |
| December| Mo | Tu | We | Th | Fr | Sa | Su |
|---|
| | | | | | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | 16 | 17 | 18 | 19 | 20 | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | | 30 | 31 | | | | | |
|
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
TODO
- TODO Features
- DONE HTML
- DONE Full HTML calendar
- DONE Partial HTML calendar (e.g. equivalent of
cal -3) - DONE Highlighted days
- DONE Tooltips for days
- DONE Hyperlinks for days
- TODO Markdown
- TODO Full Markdown calendar
- TODO Partial Markdown calendar
- TODO Highlighted days
- TODO Tooltips for days
- TODO Hyperlinks for days
- Unit tests
- DONE Basic usage
- DONE Equivalence using different signatures
- TODO Correctness
- Documentation
- DONE Basic README
- TODO Diagrams
- TODO Comparisons
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.