[Kde-pim] KHolidays support for alternative calendar systems
Allen Winter
winter at kde.org
Tue Jan 19 22:53:08 GMT 2010
On Monday 18 January 2010 8:44:09 pm John Layt wrote:
> Hi,
>
> As an experiment and learning exercise, I tried to add support for alternative
> calendar systems to the current kholidays file format. Long story short,
> after almost completely rewriting the yacc/lex parser it actually works, so
> I've decided to submit this as a feature for 4.5.
>
> For example, a holiday file could include Islamic holidays defined in the
> Hijri calendar:
>
> "New Years Day" red on 1/1
> "Christmas Day" red gregorian on december 25
> "Muharram" red hijri on 1/1
> "Eid ul-Fitr" red hijri on shawwal 1
>
> Which for 2010 will generate the following holidays:
>
> 2010-01-01 "New Years Day"
> 2010-09-10 "Eid ul-Fitr"
> 2010-12-08 "Muharram"
> 2010-12-20 "Christmas Day"
>
> My plan is to work with the current file format and library to extend them to
> support as many of the desired features listed in the kholidays2 design, and
> to test their use out in the Plasma Calendar widget. In this way I hope to
> get a clearer idea of the requirements for kholidays2, and get a more useful
> Plasma Calendar in the process.
>
> The current state (as submitted to review board
> http://reviewboard.kde.org/r/2647/) is that the new parser correctly reads and
> calculates all the existing holiday files, can calculate alternative calendar
> systems, and parses some experimental file metadata.
>
> What I plan to do from here is:
>
> * Finalise the required file metadata fields (name, region, language, etc).
>
> * Add holiday class/category syntax (e.g. Public / Religious / Cultural /
> Financial Holiday etc). Holidays can have multiple classes/categories.
>
> * Improve the SHIFT syntax to cater for more complex rules (e.g. the Boxing
> Day problem). Add optional name for day shifted to.
>
> * Add a NOOP or EXCLUDE syntax to allow holidays to only occur in some years
> and not others.
>
> * Change the parser api to accept a required date, date range, or calendar
> year, and return a QList<Holiday>.
>
> * If holiday has a duration > 1 day return only one Holiday instance with a
> duration and/or end date attribute set, rather than multiple Holiday
> instances. This will allow the client app to choose whether to display as a
> singled spanned entry or multiple entries, and may make de-duping easier.
>
> * Return attributes of both original date of holiday and shifted to
> observation date, and if original date is still a holiday or not. Option to
> have different names shown for each date.
>
> * Add required new fields to Holiday class.
>
> * Possibly split the KHolidays source file into separate files for classes
> Holiday and HolidayRegion? The parser will need to include Holiday but not
> HolidayRegion?
>
> * Plug the new parser into HolidayRegion, add date range api in HolidayRegion.
>
> * Split the existing holiday files up into civil and religious files and
> create a better naming scheme including country, language, region and type.
>
> * Try sort out translation of the file names (I18N_NOOP the English names in a
> file somewhere?).
>
> * Figure what to do with the Hebrew calendar, the mid-year leap month makes
> things tricky.
>
> * Anything else I think of along the way.
>
> Some of this will see a change in behaviour of KHolidays if not api/abi, but
> with only 2 current clients I think the benefits outweigh the disadvantages.
>
> The Plasma Calendar widget will be the test case, where I will add support for
> showing multiple holiday regions, holiday types, etc.
>
> How does that sound? Apologies for the distraction from the Akonadi merge :-)
>
Sounds FABULOUS.
I'm so happy you're working this.
As the kholidays maintainer, I officially grant you full access to do whatever-the-hell
you want in the code. In fact, I'd be happy to pass maintainership to you if you want it.
Don't forget to document the new syntax along the way :)
And update the DESIGN doc accordingly.
I love all your ideas.
-Allen
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/
More information about the kde-pim
mailing list