Existing Holiday Data
As of Remind 05.00.00, I include holiday information for over 100 countries and many subdivisions. This data was extracted from the excellent Python holidays project. I have a disgustingly-hacked fork of that project that outputs Remind syntax for holidays. I am not proud of it, but it works.
Crowdsourcing Holiday Data
I'm still crowdsourcing holiday data for Remind! If you are able to, please contribute. This page will discuss the technical requirements for holiday data, if you do wish to contribute. To send in your contributions, please email me a tar file or a zip with your files. See the contact page for my email address. Before you send me holiday data, please check the latest Remind release to ensure I don't already have it.
If you contribute holiday data to me, you must explicitly grant me permission to redistribute your files or files derived from them. You must do so by licencing your contribution under one of the following licenses:
- The GNU General Public License, version 2.0 only.
- The GNU General Public License, version 2.0 or later.
- The MIT License
I cannot accept contributions licensed under a different license from the two above. All of the files you submit must indicate which license they are licensed under by including one of the following as the first line:
- # SPDX-License-Identifier: GPL-2.0-only
- # SPDX-License-Identifier: GPL-2.0-or-later
- # SPDX-License-Identifier: MIT
File Layout
- All holiday files should end up in the $SysInclude/holidays/ directory. If you email me a tar or zip file, all of the files inside should start with the relative directory holidays/.
- Holidays that are observed country-wide in a given country should go in cc.rem where cc is the two-character ISO-3166-1 alpha-2 code for the country. For example, country-wide Canadian holidays would go in ca.rem and country-wide Dutch holidays wouild go in nl.rem (under the holidays/ direcotry, of course!)
- Regionally-observed holidays go in cc/reg.rem where cc is the country code as before, and
reg subdivision code. For example, holidays in Ontario, Canada would go in ca/on.rem and holidays in New York, United States would go in us/ny.rem. Note that the regional files
must not include the nationally-observed holidays and there must not be duplication between the national file and the regional file.
If a caller wants both regional and national holidays, then the user must explicitly include them both. For example, for Ontario, Canada holidays:
INCLUDE [$SysInclude]/holidays/ca.rem INCLUDE [$SysInclude]/holidays/ca/on.rem
Specifying Holidays
- Holiday files must be as simple as possible. They must not define any functions or set any variables and must not rely on any user-defined functions or user-set variables.
- All files must use UTF-8 encoding.
- Don't use deltas (
+n
or++n
) for advanced warning; the user should be able to choose how much advance warning he or she wants using the $DefaultDelta system variable. - Don't include calendar-mode tags (
%" ... %"
) in the reminders. - For fixed holidays, use the form
For example:OMIT day month MSG Holiday Name
OMIT 1 January MSG New Year's Day
- For fixed holidays that are observed on a different day if the
holiday falls on a weekend, use code similar to the following:
In the above code, Canada Day is officially 1 July, but if that's a Saturday, it's observed on the previous Friday, and if it's a Sunday, then it's observed the following Monday. Only use SATISFY; avoid using IF...THEN in your files.OMIT 1 July MSG Canada Day REM 30 June SCANFROM -7 ADDOMIT SATISFY [$Tw == 5] MSG Canada Day (observed) REM 2 July SCANFROM -7 ADDOMIT SATISFY [$Tw == 1] MSG Canada Day (observed)
- For movable holidays, use code similar to the following:
Always include the SCANFROM -7 part and if the holiday is a statutory holiday, include ADDOMITREM First Monday in September SCANFROM -7 ADDOMIT MSG Labour Day
- For holidays that are not statutory holidays, do not use OMIT or
ADDOMIT. Simply use REM. For example, in Ontario, Remembrance Day is
widely observed, but is not a statutory holiday, so we have:
REM 11 November MSG Remembrance Day
- If you want to be very pedantic, you can include the start date when
a holiday became observed. For example, Family Day was proclaimed a holiday
in Ontario in 2008. So you could use:
so that the holiday does not show up in any pre-2008 calendars. Similarly, if a holiday used to be observed but no longer is, you can add an UNTIL clause to specify the date it stopped being observed.REM Third Monday in Feb SCANFROM -7 ADDOMIT SATISFY [$Ty >= 2008] MSG Family Day
Copyright © 2024 Dianne Skoll