Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/antononcube/raku-text-calendar
Text calendar functions for displaying monthly, yearly, and custom calendars.
https://github.com/antononcube/raku-text-calendar
calendar monthly raku rakulang span text yearly
Last synced: about 1 month ago
JSON representation
Text calendar functions for displaying monthly, yearly, and custom calendars.
- Host: GitHub
- URL: https://github.com/antononcube/raku-text-calendar
- Owner: antononcube
- License: artistic-2.0
- Created: 2024-02-04T18:45:30.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-02-10T01:59:54.000Z (12 months ago)
- Last Synced: 2024-11-05T18:55:52.997Z (3 months ago)
- Topics: calendar, monthly, raku, rakulang, span, text, yearly
- Language: Raku
- Homepage: https://raku.land/zef:antononcube/Text::Calendar
- Size: 58.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README-work.md
- License: LICENSE
Awesome Lists containing this project
README
# Text::Calendar
Raku package with text calendar functions for displaying monthly, yearly, and custom calendars.
### Motivation
- For data science applications I need sparse calendars that contain only some of the dates
- I want to facilitate making and displaying calendars in Jupyter notebooks using Markdown and HTML layouts
- I like the "transposed" calendar layout of UNIX' `ncal`
- I am interested in comparisons of calendar making (i) with LLM applications, and (ii) in the "hard way"### Alternative implementations
- ["App::Cal"](https://raku.land/zef:coke/App::Cal), [WCp1].
- ["Calendar"](https://raku.land/zef:tbrowder/Calendar), [TBp1].Compared to [WCp1] and [TBp1], this package, "Text::Calendar", is lightweight and with no dependencies.
### Extensions
The package ["Markup::Calendar"](https://raku.land/zef:antononcube/Markup::Calendar), [AAp2],
provides calendars in HTML and Markdown formats.-----
## Installation
From [Zef ecosystem](https://raku.land):
```
zef install Text::Calendar
```From GitHub:
```
zef install https://github.com/antononcube/Raku-Text-Calendar.git
```-----
## Examples
### Emacs style: this month with ones before and after
Load the package and show today's date:
```raku
use Text::Calendar;
Date.today;
```Default, "Emacs style" calendar:
```raku
calendar();
```Compare the output above with the that of UNIX (macOS) function `cal`:
```shell
cal -3 -h
```Here is the "transposed" version (or UNIX `ncal` style):
```raku
say "ncal style:\n", calendar(:transposed);
```### Yearly
```raku
calendar-year(2024, per-row=>6)
```**Remark:** The command used above has the same effect as `calendar-year(per-row=>6)`.
I.e. the first, year argument can be `Whatever` and the current year be "deduced" as `Date.today.year`.### Specific year-month pairs
```raku
calendar([2022=>2, 2023=>11, 2024 => 2])
```### Month dataset
Using month dataset allows of utilizing HTML formatting in Markdown files or Jupyter notebooks.
Here is an example using ["Data::Translators"](https://raku.land/zef:antononcube/Data::Translators), [AAp2]:
```raku, results=asis
use Data::Translators;
my $m = 'February';
my $res = to-html(calendar-month-dataset(2024, $m), field-names => calendar-weekday-names);
'' ~ $m ~ '
' ~ $res.subst('7', '7')
```**Remark:** The package ["Markup::Calendar"](https://raku.land/zef:antononcube/Markup::Calendar), [AAp1],
provides extensions of "Text::Calendar" for getting calendars in HTML and Markdown formats.-----
## Implementation notes
The initial codes for `calendar-month-block` and `calendar` were taken from https://rosettacode.org/wiki/Calendar#Raku .
The modifications done are for:
- Different signatures for making calendars
- Using of specs that are lists of year-month pairs
- Have the transposed, `ncal` style layoutSignificant modifications are expected for calendars based on ranges of days.
(The lists can be both dense or sparse.)-----
## TODO
- [ ] Features
- [X] DONE Month block string
- [X] DONE Yearly calendar
- [X] DONE Calendar for span of months
- I.e. "Emacs style"
- [X] DONE Calendar for a spec that is a list of year-month pairs
- [ ] TODO Sparse calendar
- Only for specified days
- Days are specified with a list
- [X] DONE transposed or `ncal` mode
- [X] DONE Month block dataset
- [ ] TODO Language localization
- Using the short names of weekdays in "Date::Names", [TBp2]
- Specified first day of week (e.g. Monday, not Sunday)
- [ ] TODO Make sure month blocks align in multi-row layouts
- Like, year calendars
- For transposed only
- [ ] TODO Return a list of pairs with year-month keys and month-text-block keys
- Using adverb `:pairs`
- [ ] Unit tests
- [ ] DONE Sanity / signatures
- [ ] TODO Correctness
- [ ] Monthly
- [ ] Yearly
- [ ] Span
- [ ] Documentation
- [X] DONE Basic README
- [X] DONE Detailed usage messages
- [ ] TODO Comparison with LLMs-----
## References
[AAp1] Anton Antonov,
[Markup::Calendar Raku package](https://github.com/antononcube/Raku-Markup-Calendar),
(2024),
[GitHub/antononcube](https://github.com/antononcube).[AAp2] Anton Antonov,
[Data::Translators Raku package](https://github.com/antononcube/Raku-Data-Translators),
(2023),
[GitHub/antononcube](https://github.com/antononcube).[TBp1] Tom Browder,
[Calendar Raku package](https://github.com/tbrowder/Calendar),
(2020-2024),
[GitHub/tbrowder](https://github.com/tbrowder).[TBp2] Tom Browder,
[Date::Names Raku package](https://github.com/tbrowder/Date-Names),
(2019-2024),
[GitHub/tbrowder](https://github.com/tbrowder).[WCp1] Will Coleda,
[App::Cal Raku packate](https://github.com/coke/raku-cal),
(2022-2024),
[GitHub/coke](https://github.com/coke).