diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /libkcal/libical | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'libkcal/libical')
538 files changed, 85554 insertions, 0 deletions
diff --git a/libkcal/libical/AUTHORS b/libkcal/libical/AUTHORS new file mode 100644 index 000000000..ce25b7bd7 --- /dev/null +++ b/libkcal/libical/AUTHORS @@ -0,0 +1,4 @@ +John Gray <gray@agora-net.com> +Andrea Campi <a.campi@inet.it> + +Original author May 1998-December 2001, Eric Busboom <eric@softwarestudio.org> diff --git a/libkcal/libical/COPYING b/libkcal/libical/COPYING new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/libkcal/libical/COPYING diff --git a/libkcal/libical/ChangeLog b/libkcal/libical/ChangeLog new file mode 100644 index 000000000..97d25838f --- /dev/null +++ b/libkcal/libical/ChangeLog @@ -0,0 +1,811 @@ +2002-07-09 Andrea Campi <a.campi@inet.it> + + * src/libical/icalcomponent.c + * src/libical/icalcomponent.h: Added a check for valid component kind + before instancing a new one. + +2002-07-08 Andrea Campi <a.campi@inet.it> + + * src/python/Gauge.py + * src/python/LibicalWrap.i + * src/python/Property.py + * src/python/Store.py + * src/python/Time.py + * src/python/python-binding.txt + * src/python/test.py: Updated the python bindings to match the C API + changes. + Obtained from: Mark Tearle + +2002-07-04 Andrea Campi <a.campi@inet.it> + + * src/libical/icalderivedproperty.c.in + * src/libical/icalproperty.c + * src/libical/icalproperty.h: Added a check for valid property kind + before instancing a new one. + + * src/libical/icalvalue.c: Fixed icalvalue_new_clone to properly clone + X- properties. + +2002-06-28 Andrea Campi <a.campi@inet.it> + + * design-data/parameters.csv + * src/libicalss/icalgauge.c + * src/libicalss/icalgaugeimpl.h + * src/libicalss/icalsslexer.c + * src/libicalss/icalsslexer.l + * src/libicalss/icalssyacc.c + * src/libicalss/icalssyacc.h + * src/libicalss/icalssyacc.y: Added IS NULL to icalgauge + syntax. + Obtained from: Paul Lindner + + * src/libical/icallexer.c + * src/libical/icallexer.l + * src/libical/icalyacc.c + * src/libical/icalyacc.h + * src/libical/icalyacc.y: Sent lex/yacc code to Attic. + + * src/libical/icalparameter.c: Changed icalparameter_as_ical_string + to also quote the param value if it contains a , (comma), as per RFC2445. + + * src/libicalss/icalset.c + * src/libicalss/icalset.h: Added experimental code to support + dynamic loading of icalset derived classes. + + * src/libicalss/Makefile.am + * src/libicalss/icalspanlist_cxx.cpp + * src/libicalss/icalspanlist_cxx.h: Added C++ binding for libicalss. + Obtained from: Paul Lindner + +2002-06-28 Eric Busboom <eric@softwarestudio.org> + + * src/libical/Makefile.am + * src/libical/icalduration.c + * src/libical/icalparser.c + * src/libical/icalvalue.c + * src/libical/icalyacc.c + * src/libical/icalyacc.h: removed lex and yacc by writing + code to parse UTC-OFFSET + +2002-06-27 Andrea Campi <a.campi@inet.it> + + * src/libical/icalcomponent.c + * src/libical/icalcomponent.h: Added icalcomponent_foreach_recurrence + as a better way of handling recurrences; deprecated + icalcomponent_get_span + Obtained from: Paul Lindner + + * src/libical/icalderivedvalue.c.in + * src/libical/icalvalue.c + * src/libical/icalvalue.h: Added a check for valid value kind before + instancing a new one. + Obtained from: Paul Lindner + + * src/libical/icalproperty.c + * src/libical/icalproperty.h: Deprecated icalproperty_remove_parameter, + added 3 new functions to do the same in a safer way (wrt X- params). + Obtained from: Paul Lindner + + * src/libical/icaltime.c + * src/libical/icaltime.h: Added functions to work with time spans. + Obtained from: Paul Lindner + +2002-06-26 Andrea Campi <a.campi@inet.it> + + * src/libical/icalduration.c: Fixed icaldurationtype_from_int to + generate valid RFC2445 durations (it used to mix weeks and other + time units). + +2002-06-13 Andrea Campi <a.campi@inet.it> + + * src/libical/icalvalue.c: Fixed escaping of TEXT values and + formatting of UTCOFFSET values to more closely match RFC2445. + + * configure.in + * src/libical/Makefile.am + * src/libical/icalparameter_cxx.cpp + * src/libical/icalparameter_cxx.h + * src/libical/icalproperty_cxx.cpp + * src/libical/icalproperty_cxx.h + * src/libical/icalvalue_cxx.cpp + * src/libical/icalvalue_cxx.h + * src/libical/vcomponent.cpp + * src/libical/vcomponent.h + * src/libicalss/icalbdbset_cxx.h: Added C++ binding. + Obtained from: Paul Lindner + + * configure.in + * src/libicalss/Makefile.am + * src/libicalss/icalbdbset.c + * src/libicalss/icalbdbset.h + * src/libicalss/icalbdbset.h + * src/libicalss/icalbdbsetimpl.h + * src/test/Makefile.am + * src/test/storage.c: Added BerkeleyDB 4.0 icalset implementation. + Obtained from: Paul Lindner + +2002-06-11 Andrea Campi <a.campi@inet.it> + + * src/test/Makefile.am + * src/test/regression-classify.c + * src/test/regression-component.c + * src/test/regression-recur.c + * src/test/regression-utils.c + * src/test/regression.c + * src/test/regression.h + * src/test/test_fileset.ics: New regression test suite + Obtained from: Paul Lindner + + * src/libical/icalcomponent.c + * src/libical/icalproperty.c + * src/libical/icalproperty.h + * src/python/test.py + * src/test/regression.c: Improved X- parameter handling. + Obtained from: Mark Tearle + +2002-06-07 Andrea Campi <a.campi@inet.it> + + * configure.in + * src/libical/Makefile.am + * src/libical/icallexer.l + * src/libical/icalparser.c + * src/libical/icalparser.h + * src/libical/icalyacc.y + * src/libicalss/Makefile.am + * src/libicalss/icalgauge.c + * src/libicalss/icalsslexer.c + * src/libicalss/icalsslexer.l + * src/libicalss/icalssyacc.c + * src/libicalss/icalssyacc.h + * src/libicalss/icalssyacc.y: Made parser fully reentrant using + recent versions of flex/bison. Also committed the generated files + so that the library can be compiled even without those tools. + Obtained from: Paul Lindner + + * src/python/LibicalWrap.i + * src/python/Property.py + * src/python/test.py: Support X- properties in the Python wrapper. + Obtained from: Mark Tearle + +2002-06-04 Andrea Campi <a.campi@inet.it> + + * *: Constifed a lot of functions, also made a few of them static + Obtained from: Paul Lindner <lindner@inuus.com> + +2002-06-03 Andrea Campi <a.campi@inet.it> + * src/libical/icallangbind.c + * src/python/Component.py + * src/python/Gauge.py + * src/python/Libical.py + * src/python/LibicalWrap.i + * src/python/Store.py + * src/python/test.py: Fully implemented FileStore and Gauge + in the python bindings. + Obtained from: Mark Tearle <mtearle@tearle.com> + +2002-05-28 Andrea Campi <a.campi@inet.it> + + * src/libical/icalattach.c + * src/libical/icalattach.h + * src/libical/icalattachimpl.h + * src/libical/icalderivedproperty.c.in + * src/libical/icalderivedvalue.c.in + * src/libical/icalderivedvalue.h.in + * src/libical/icaltypes.c + * src/libical/icaltypes.h + * src/libical/icalvalue.c + * src/libical/icalvalueimpl.h: Changed ATTACH to be an opaque type + +2002-05-27 Eric Busboom <eric@softwarestudio.org> + + * scripts/mkderivedparameters.pl + * scripts/mkderivedproperties.pl + * scripts/mkderivedvalues.pl + * src/libical/icalderivedparameter.c.in + * src/libical/icalderivedparameter.h.in + * src/libical/icalderivedproperty.c.in + * src/libical/icalderivedproperty.h.in + * src/libical/icalderivedvalue.c.in + * src/libical/icalderivedvalue.h.in: changed the auto generated + files and scripts so that the generated code is inserted into the + middle of the template (.in) file, instead of the end. This means + we could get rid of the declaration for the maps. + +2002-05-27 Andrea Campi <a.campi@inet.it> + + * src/libical/icaltimezone.c: Worked around Outlook/Exchange brokenness. + Obtained from: evolution CVS repository + +2002-05-24 Andrea Campi <a.campi@inet.it> + + * src/libical/icalproperty.c: Implemented proper RFC2445 folding. + Obtained from: evolution CVS repository + + * src/libical/icalrecur.c: Worked around Outlook/Exchange brokenness. + Obtained from: evolution CVS repository + + +2002-05-21 Andrea Campi <a.campi@inet.it> + + * src/libical/*: Removed void * in favor of opaque typedef types. + This helped uncover a few bugs and made debugging easier. + Obtained from: Paul Lindner + +2002-05-10 Andrea Campi <a.campi@inet.it> + + * src/libical/icalmemory.c: Made the memory allocator threadsafe. + This code is currently conditional on USE_THREAD, but it might + become the default in the future. + Obtained from: Paul Lindner + + * src/libical/icaltime.c: Implemented icaltime_is_date(), with the + intent of removing all direct accesses to is_date. + +2002-05-09 Andrea Campi <a.campi@inet.it> + + * icaltime.c Rewrote and documented icaltime API, with the goal of + keeping it stable until release 1.0. Some functions and internal + implementation details are now declared obsolete and removed from + the documentation; they will be removed at a later time. + +2001-12-12 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c implemented recurrence rule for "FREQ=YEARLY", + with no BY rules. + +2001-12-11 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c Fixed bug in next_month for MONTHLY rules that have + only BYDAY rules. The code would miss valid dates that fell on the + first of the month. created new routine is_day_in_byday() + + * icaltime.c Fixed icaltime_from_day_of_year to correctly handle + negative and over-range day-of-years + + * icaltime.c collected all instances of leap year code into + icaltime_is_leap_year + + * icaltime.c icaltime_day_of_year. Changed an assert into code + that advances the year when the day of year is lager than the + number of days in the given year + + * icalerrno.c,h Added the function version + icalerror_set_errno. Only the define verson existed. + + * icaltime.c Moved all of the getenv/putenv operations into icaltimegm() + +2001-06-29 Eric Busboom <eric@softwarestudio.org> + + * icalderivedproperties.h,c Changed the signature if the CLASS + property from TEXT to CLASS. ( enum icalproperty_class) + +2001-06-22 Eric Busboom <eric@softwarestudio.org> + + * icaltypes.c Fixed bug in icaltriggertype_new_from_string htat + caused it to fail. + +2001-04-12 Eric Busboom <eric@softwarestudio.org> + + * icalvalue.c Added quoting to apostrophies ("'") in text + values. This is not required by the spec, but it is necessary in + icallangbind_property_eval_string, since ' is special in both perl + and python. + +2001-04-10 Eric Busboom <eric@softwarestudio.org> + + * icalvalue.c Added routine icalvalue_reset_kind. This routine is + now called by all autogenerated icalvalue_set_* + routines. icalvalue_reset_kind() will change the kind of the value + based on the data in the value. Currently, it will set a value to + either DATETIME or DATE based on the is_date flag of icaltimetype. + +2001-04-09 Eric Busboom <eric@softwarestudio.org> + + * icalproperty.h Converted REQUEST-STATUS to use the struct + icalreqstat structure instead of a string + +2001-04-01 Eric Busboom <eric@softwarestudio.org> + + * icalcomponent.h Changed meaning of + icalcomponent_new_from_string. It used to create a new component + given the text name of the component type to create. Now it calls + icalparser_parse_string to create a new component from the + complete iCalendar text representation of the component. + +2001-03-31 Eric Busboom <eric@softwarestudio.org> + + * icalvalue Changed ACTION properties to take an ACTION value + instead of TEXT. The ACTION value is enumerated. + +2001-03-26 Eric Busboom <eric@softwarestudio.org> + + * icalparameter.h icalparameter_rsvp_* routines now take, return + ICAL_RSVP_TRUE and ICAL_RSVP_FALSE, not 0 and 1 + +2001-03-25 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c Many changes to get YEARLY rules working and fix + other errors. Recurrences are stil broken, but more types of rue + now work. + +2001-03-16 Eric Busboom <eric@softwarestudio.org> + + * icalparameter.c Changed icalparameter_new_from_string() to + icalparameter_new_from_value_string(). Created new + icalparameter_new_from_string() that takes strings of + form"PARAMNAME=PARAMVALUE" + + * *_XNAME changes all _XNAME enumerations to _X + + * derived props, values, parameters. Seperated out derived + proeprties, parameters and values into their own files. This makes + it easier to auto generate all of the enumerations for values, + parameters and proeprties. + + * icalenum.h Major changes to icalenum. Movel all of the + icalenum_* values to other modules, and changed the names. Look + for #defines in icalenum.h tying the old name to the new + name. Also moved all of the enumerations into other files. + + + +2001-02-26 Eric Busboom <eric@softwarestudio.org> + + * src/libical/icalproperty.c Added + icalproperty_set_parameter_from_string and + icalproperty_set_value_from_string to aid in binding to Python + +2001-02-15 Eric Busboom <eric@softwarestudio.org> + + * design-data/prop-to-value.txt Made a new CSV file, + properties.cvs That collects property-to-value and default value + information + + * src/libical/icalproperty.{c,h}.in Moved auto generated code into + icalderivedproperty.{c,h} and created icalderivedproperty.{c,h}.in + + + +2001-02-14 JP Rosevear <jpr@ximian.com> + + * src/libical/Makefile.am: Sigh, automake is dumber than i thought + +2001-02-12 JP Rosevear <jpr@ximian.com> + + * src/test/Makefile.am: link with the static versions + + * src/python/Makefile.am: use include dir discovered in configure checks + + * src/python/.cvsignore: shush + + * src/libical/icalrestriction.c: remove autogenerated file + + * src/libical/Makefile.am: the generated files are now disted so + look for them in the source dir rather than the build dir + + * src/Makefile.am: Only build the python dir if all the configure + stuff checked out + + * configure.in: Remove shared library disabling and add a python + check and allow for the python bindings to not be built + +2001-02-11 Eric Busboom <eric@softwarestudio.org> + + * src/python/Makefile.am Tweaked makefile to use automake more, + but it stil isn't quie right. + +2001-02-09 JP Rosevear <jpr@ximian.com> + + * Shush cvs + +2001-02-09 JP Rosevear <jpr@ximian.com> + + * src/libical/Makefile.am: Slightly over zealous during the merge + +2001-02-09 JP Rosevear <jpr@ximian.com> + + * src/libical/Makefile.am: Correct typo + + * Removal of more auto generated files + +2001-02-09 JP Rosevear <jpr@ximian.com> + + * Removal of various auto generated files + +2001-02-09 JP Rosevear <jpr@ximian.com> + + * src/libical/icalparameter.c.in (icalparameter_new_from_string): + its NEEDS-ACTION rather than NEEDSACTION + (icalparameter_as_ical_string): ditto + +2001-02-09 Eric Busboom <eric@softwarestudio.org> + + * python Added src/python directory. Inserted SWIG wrapper files, + and a simple interface to Component, Time, Duration, Period and + Store. + + * icallangbind.c More experimental work + + * icalduration.{c,h}, icalperiod.{c,h} Broke out period and + duration types into their own files + +2001-02-06 Christopher James Lahey <clahey@ximian.com> + + * src/libical/icallangbind.c: Added a missing #include here. + + * src/libical/icalrecur.c (icalrecur_add_bydayrules): Copy the + passed in const vals since we change it. + +2001-02-06 Eric Busboom <eric@softwarestudio.org> + + * icaltime.c Changed icaltime_from_day_of_year to run mktime in + the UTC timezone. This fixed a bug where it would return one day + eariler for some timezones. + +2001-02-05 Ettore Perazzoli <ettore@ximian.com> + + * src/libical/Makefile.am (COMBINEDHEADERS): `icalvalue.h', + `icalparameter.h', `icalproperty.h' and `icalrestriction.h' are + created in the builddir so they shouldn't be prefixed with + `$(top_builddir)/src/libical'. + +2001-01-26 Eric Busboom <eric@softwarestudio.org> + + * icalproperty.c.in Improved icalproperty_as_ical_string() to + eliminate the possibility of having a VALUE parameter that does + not match the actual kind of value. + + * icalvalue.c.in made icalvalue_*_trigger() and + icalvalue_*_datetimeperiod non-autogenerated. These routines were + for combined value type -- non standard values that can have more + than on standard value type. These non-standard types now delegate + to stadard types. + +2001-01-24 Eric Busboom <eric@softwarestudio.org> + + * icalfileset.c fixed icalfileset_read-from_file so it will handle + lines longer than 80 char properly. + +2001-01-23 JP Rosevear <jpr@ximian.com> + + * configure.in: Don't AC_INIT on an autogenerated file that does not + exist beforehand + +2001-01-23 Eric Busboom <eric@softwarestudio.org> + + * icltime.c Removed all of the _local_ routines and simplified + icaltime_utc_offset and icaltime_as_timet + + * regression.c Added tests for triggers and improvements to icaltime.c + + * icaltypes.c Addedd icaltriggertype_from_string and changed + icaltriggertype to be a struct + +2001-01-22 Eric Busboom <eric@softwarestudio.org> + + * icaltime.c implemented icaldurationtype_from_string to parse the + string it self, rather than use lex/yacc + +2001-01-15 Eric Busboom <eric@softwarestudio.org> + + * icalfileset.c Many improvements. File locking now works, and so + does searching with icalfileset_select() + +2001-01-08 Eric Busboom <eric@softwarestudio.org> + + * Makefile.am Remove spaces after -I in several + Makefile.am routines. + + * icalset.c removed return statements from some void functions. + + * icalparameter.c.in Added break to default: case that had no + body. Compilers on Solaris and Tru64 UNIX complained. + +2001-01-02 Eric Busboom <eric@softwarestudio.org> + + * icaltime.c Changed icaldurationtype_from_time and _as_timet to + _from_int and _as_int. This is a change interface that may break + some code. + + * icalgauge.c icalgaugeimpl.h, icalgauge.h., Rewrote gauge code to + use pvl-lists directly, instead of trying to reuse icalcomponent. + +2000-12-13 Ettore Perazzoli <ettore@helixcode.com> + + * src/libicalvcal/Makefile.am (INCLUDES): Add + `$(top_builddir)/src/libical' to the include directory list. + + * src/libical/Makefile.am (icalparameter.h): Use `$(srcdir)'. + (icalparameter.c): Likewise. + (icalproperty.h): Likewise. + (icalproperty.c): Likewise. + (icalvalue.h): Likewise. + (icalvalue.c): Likewise. + (icalrestriction.c): Likewise. + (COMBINEDHEADERS): `icalvalue.h', `icalparameter.h' and + `icalproperty.h' are in builddir, not srcdir, so fix the list to + use `$(top_builddir)' instead of `$(top_srcdir)'. + (all): Removed. + (BUILT_SOURCES): Move `ical.h' here instead. + (ical.h): Don't depend on `(BUILT_SOURCES)'; this a built source + itself. + +2000-12-12 Eric Busboom <eric@softwarestudio.org> + + * icalparser.c Addedd support for x-parameters. + + * icalenum.c Fixed icalenum_parameter_type_to_string and + icalenum_property_type_to_string to property identify X- parameers + and properties. + + * icalparameter.c Fixed icalparameter_as_ical_string to property + write out X-Parameters. + + +2000-12-11 Eric Busboom <eric@softwarestudio.org> + + * icalcstp.c added empty bodies to prep_* routines so that shared + libraries would build. + +2000-12-11 JP Rosevear <jpr@helixcode.com> + + * src/libical/icaltime.c (icaltime_compare_date_only): New + function that compares only the dates, not the times as well. + + * src/libical/icaltime.h: Add prototype for the function above. + + * src/libical/icalrecur.h (struct icalrecurrencetype): Correct + header documentation. + + * src/libical/icaltypes.c: No longer include <limits.h>. + + * src/libical/icalrecur.c: Likewise. + + * src/libical/icalvalue.c: Likewise. + + * src/libical/icalyacc.y: Likewise. + +2000-12-11 Federico Mena Quintero <federico@helixcode.com> + + * configure.in (AC_OUTPUT): Fixed order of generated files to make + "make distcheck" work. Turn on AM_MAINTAINER_MODE. + + * src/libical/Makefile.am (EXTRA_DIST): Add icalversion.h.in. + (COMBINEDHEADERS): Added paths to make "make distcheck" work. + (libical_la_SOURCES): Added headers for distribution in our weird + setup. + +2000-12-06 Eric Busboom <eric@softwarestudio.org> + + * icaltime.c added icaltime_as_local to convert a UTC time to a + local time + + * icaltime.h icaltime.c Removed is_utc argument from + icaltime_from_timet + + +2000-11-29 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c More testing and bug fixes. Many more of the rules + in recur.txt work correctly. + +2000-11-28 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c Several changes to extract icalrecur.c from + libical. I'd like to make it into a reference impl for recurrence + rules. CHanges include moving all of the recurrence type and + recurrence enums from icalenum and icaltypes into icalrecur, and + adding code to parse recurrence rule strings. + + * icaltime.c Changed icaltime_from_string to parse the string + directly. Now icaltime.c has no dependency on icalvalue.c + +2000-11-21 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c Fixed a bug in the increment_* routines that made + incrementing by more then 1 insensible. Thanks to Martin Neimeier + +2000-11-20 Eric Busboom <eric@softwarestudio.org> + + * icalmessage.c Many routines to create new ical messages. + + * icalspanlist.c Code to generate a list of the busy time f the + VEVENTS in a set. Also includes routiens to generate free and busy + lists from the spanlist, and to find the next free time after a + given time. + + * icalvalue.c The STATUS property now has its own value type, + STATUS, which holds the enumeration icalproperty_status. + + * icalrestriction.c Added more restrictions. Now handles mutual + and exclusive consitions, and checks for the reight values in + STATUS properties + + +2000-11-10 Eric Busboom <eric@softwarestudio.org> + + * icaltypes.c Added routine to create durationtype from string: + icaldurationtype_from_string + +2000-11-09 Eric Busboom <eric@softwarestudio.org> + + * icalcomponet.c Add sever get/set convienience routines to access + and manipulate common component propoerties from the component + interface. This eliminates the need to create a lot of temporary + variables if you just want to change the start time of and event. + +2000-11-06 Eric Busboom <eric@softwarestudio.org> + + * icalcomponent.c Added new routines to icalcomponent: + _get_span -- returns the start and end times of the event in UTC + _get_first_real_component -- return ref to VTODO, VEVENT or VJOURNAL + + * icalspanlist.c Added new class, icalspanlist, that generates a + list of alternating busy and free times from an icalset. The class + includes routines to gnerate rfc2445 busy and free lists, and to + get the next avaliable busy or free time after a given time. + +2000-11-06 Federico Mena Quintero <federico@helixcode.com> + + * src/libical/icalvalue.c (icalvalue_recur_as_ical_string): Handle + both the position and weekday in the by_day field. + +2000-10-20 Eric Busboom <eric@agony.busboom.org> + + * Const correctness. Added 'const' all over everywhere. + +2000-10-19 Eric Busboom <eric@agony.busboom.org> + + * icalproperty, icalparameter, icalvalue .c, .h Changed most + instances of char* to const char* + + * icalclassify.h Added multiple include protection + + * icalset.h and others, got rid of parameter named "new" + +2000-10-15 Eric Busboom <eric@softwarestudio.org> + + * icalcomponent Added convienience functions for constructing + components: icalcomponent_new_vcalendar(), etc. + + * Makefile.am Incorporated build system patch from Federico + Quintero. Misc small fixes and cleanup + + * scripts Incorporated auto-gen patch from Frederico. Generated + code in libical now uses icalproperty.c.in (etc) instead of + editing file icalparoperty.c in place. + + * libical. Changed flex/bison to use the -P/-p options to set + ical_yy as a prefix. Removed prefix redefinition from icalyacc.y + +2000-10-12 Eric Busboom <eric@softwarestudio.org> + + * icalproperty.c Fixed icalproperty_get_{first,next}_parameter to + honor the parameter kind argument + + * icalparameter.c Added, but did not complete, a new version of + icalparameters_from_string that does not use the hairy nested + case/switch statements of the previous version + + +2000-10-02 Eric Busboom <eric@softwarestudio.org> + + * ical.h ical.h and icalss.h now are concatenations of all of the + public headers for their respective libraries. Thus, only ical.h, + icalss.h and icalvcal.h need to be installed. + +2000-09-11 Eric Busboom <eric@softwarestudio.org> + + * icalvcal.c Added more comments + +2000-08-31 JP Rosevear <jpr@helixcode.com> + + * configure.in: Don't list config.h in AC_OUTPUT + +2000-08-26 Ettore Perazzoli <ettore@helixcode.com> + + * examples/Makefile.am (INCLUDES): More `$(srcdir)' loving. + + * src/libicalvcal/Makefile.am (INCLUDES): Add `-I + $(srcdir)/../libical' for builddir != srcdir loving. + +2000-08-25 Christopher James Lahey <clahey@helixcode.com> + + * examples/access_properties_and_parameters.c, + src/libicalvcal/vcc.y: Got rid of some warnings. + + * src/libicalvcal/vcc.c: Checking in generated C file. + +2000-08-25 Christopher James Lahey <clahey@helixcode.com> + + * src/libical/icalcomponent.c: Fixed an incorrect struct name. + +2000-08-25 Peter Williams <peterw@helixcode.com> + + * src/libical/icalcomponent.c (icalcomponent_end_component): Compile fix; + use icalerror_check_arg_re so we can return an valid icalcompiter. + (icalcomponent_begin_component): Same. + +2000-08-24 Federico Mena Quintero <federico@helixcode.com> + + * src/test/Makefile.am: Make it work. + +2000-08-04 Eric Busboom <eric@softwarestudio.org> + + * stow.c Changed stow to write data to a file ( icalfileset) not a + calendar. Also added MIME parsing capability + + * sspm.c Core of the mime processor. Now handles quoted-printable + and base64 encodings + + * icalmime.h New file that parses mime data and returns an + icalcomponent that includes all of the parts. + + +2000-07-26 Eric Busboom <eric@softwarestudio.org> + + * icaldirset.h misc bug fixes to get deleting components to work + + * icalcomponent.h Eliminated internal use of _get_first_component + and _get_next_component, since these will reset the interal + iterators. + +2000-07-23 Eric Busboom <eric@softwarestudio.org> + + * icalcomponent.h Added external iterators to icalcomponent for + subcomponents: icalcompiter. These are still experimental, but they + seem to work OK and have a nice syntax + +2000-07-18 Eric Busboom <eric@softwarestudio.org> + + * icalset This is a new "superclass" for icalstore, icalcluster, + and others. It merges the interfaces of the old icalstore and + icalcluster + + * icalstore.{c,h} CHanged name to icaldirset + + * icalcluster.{c,h} Changed name to icalfileset + + +2000-06-12 Eric Busboom <eric@softwarestudio.org> + + * icalstow.c misc improvements and bug fixes to make it useful. + +2000-06-09 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c More extensive code changes for recurrence rule. + + * icalyacc.y Added support for integers in by day lists + +2000-06-01 Eric Busboom <eric@softwarestudio.org> + + * icalrecur.c moved recur code into new files + +2000-05-30 Eric Busboom <eric@softwarestudio.org> + + * icaltypes.c Extensive work on code to expand recurences + + * icaltypes.h Changed signature icaltimetype_from_timet to include + is_utc flag. + + +2000-03-17 Eric Busboom <eric@softwarestudio.org> + + * icalstore.c Vastly improved icalstore_test. + +2000-03-16 Eric Busboom <eric@softwarestudio.org> + + * icalcluster.c Added compile flag (ICAL_SAFESAVES) to switch how + icalcluster saves files during commits. When the flag is define, + it will write the data to a temorar file and rename the file to + the target file. + + * storage.c Added seterate test suite for sotage components + + * icalparser.c Created parser object, implemented line-oriented + parsering, and made message oriented parsing work in terms f line + oriented parsing. + + * icalparser.c Fixed icalparser_get_line to remove \r in input. + + diff --git a/libkcal/libical/INSTALL b/libkcal/libical/INSTALL new file mode 100644 index 000000000..b3f195d67 --- /dev/null +++ b/libkcal/libical/INSTALL @@ -0,0 +1,24 @@ +Building the library +-------------------- + +This distribution is developed on Red Hat Linux 6.0 and usually +compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of +previous version on MacOS ( with CodeWarrior ) and on UnixWare, but I +don't know about any other systems. + +The library is configured with automake. From the root directory, run + + ./configure + +To build all of the Makefiles for your system. If you will be installing the library, you may want to use the --prefix flag to set the directory where the library and header files will be installed. + + ./configure --prefix=/proj/local/ + +If configure runs fine, run "make" to build the library and +"make install" to install it. + +The current version of libical focuses on creating and +manipulating iCal objects. With it, you can parse text representations +of iCal components, add and remove sub-components, properties, +parameters and values, and print the components back out as strings. + diff --git a/libkcal/libical/Makefile.am b/libkcal/libical/Makefile.am new file mode 100644 index 000000000..baf9fc364 --- /dev/null +++ b/libkcal/libical/Makefile.am @@ -0,0 +1,11 @@ + +KDE_OPTIONS = foreign + +EXTRA_DIST = \ + ChangeLog \ + README \ + TEST \ + TODO + +SUBDIRS = doc scripts src zoneinfo + diff --git a/libkcal/libical/NEWS b/libkcal/libical/NEWS new file mode 100644 index 000000000..ad1299b2f --- /dev/null +++ b/libkcal/libical/NEWS @@ -0,0 +1,522 @@ +Version 0.24, XX Xxx 2002 ( cvs tag libical-0-24 ) +-------------------------------------------------- + +**** Incompatibilities with previous version **** + +CSTP client/server code has been removed from libicalss. +Future versions will eventually contain a full CAP 6.0 +client/server implementation. + +icalproperty_get_name() is deprecated and will change +in a future release. Use icalproperty_get_icalproperty_name() +instead. + +icalcomponent_get_span() is deprecated in this release +because it does not handle recurring events. See +icalcomponent_foreach_recurrence() for an alternate +interface. + +The icalproperty_remove_parameter() call is deprecated +because it improperly deals with extended parameters. +See icalproperty_remove_parameter_by_kind() for a +compatible call. + +Code that deals with the TRANSPARENT property now +uses enumeration values to get/set values instead of +strings. + +The code for dealing with icalsets was overhauled. You +will want to use the common icalset_* routines +directly instead of calling into the icalfileset_* or +icaldirset_* routines. + +A number of routines now expect to be called with +const arguments. A number of routines now +return pointers to const data. + + +**** New Features **** + +Major cleanup of the time-handling routines. New API is +available that deals with timezones much more cleanly. + +The regression routines in src/test are much cleaner. +Test runs summarize which tests fail and do not +immediately abort() like the old set of tests. A +number of old, commented tests were resurrected. + +C++ Interface: New libraries libical_cxx.la and libicalss_cxx.la +are build when you configure with the --enable-cxx option. + +Java Interface: A JNI interface to libical is build when +you configure with the --enable-java option. + +Most of libical is now reentrant and thread safe. The Lex/Yacc +query parser is pre-built with flex 2.5.8 and bison 1.34. To +rebuild these files you will need to specify the --with-devel +option. The --enable-reentrant option also adds the -D_REENTRANT +flag for systems that require it. The build system attempts to +add the pthread libraries to support a thread safe memory allocator +and thread-safe error handling. + +A new storage mechanism for Berkeley DB 4.0 was contributed +by Critical Path. Specify the --with-bdb4 and --with-bdb4-dir +options to enable. + +Embedded code comments are slowly being migrated to be +doxygen compliant. See http://www.doxygen.org/ for +more on this wonderful tool. + +The code should now compile with non-gcc compilers. Certain +parts of the autogenerated code were causing problems. The +code base has also been ported to the windows Visual C +environment. + + +Version 0.23, 26 Mar 01 ( cvs tag libical-0-23 ) +------------------------------------------------ + +**** Incompatibilities with previous versions **** + +icalparameter_new_rsvp +icalparameter_get_rsvp +icalparameter_set_rsvp + + These routines now take and return ICAL_RSVP_TRUE and + ICAL_RSVP_FALSE instead of 0 and 1 + +icalenum_*_to_* + + These routines have been moved to icalproperty, icalparameter + or icalvalue + + + +Python interface: An alpha level python interface is available in +src/python. + +Perl interface: A pre-alpha level interface is available in +src/Net-ICal-Libical + +Code Autogeneration: Converted all of the important files in +design-data/ to .csv files and improved the code that is generated +from them. Now all of the enumerations for property, parameters and +values are generated from thes files, as are the string +representations for the enumerations. You can add a new property or +parameter to the system simply by adding a line to the appropriate +file in design-data/ + +Recurrences: Improved the recurrence code by fixing bugs in MONTHLY +recurrences and completely re-implementing expand_year_days() for +YEARLY recurrences. Hubert V's aided in testing. + +Build system: JP Rosevear made several improvements to the build +system. Now checking out the code from cvs should give to a complete +but minimal distribution, without any of the autognerated files. + +Interface changes: Nearly all of the icalenum routines for converting +between strings and enumerations have been moved out of icalenum into +icalproperty, icalparameter and icalvalue. This means that their names +have changed, although #defines have been added to icalenum.h to map +back to the old names. + +Added src/libical/icllangbind.c that has some functions to make it +easier to bind libical to other languages. + + +Version 0.22, 15 Jan 01 ( cvs tag libical-0-22) +---------------------------------------------- + +Many improvements to the time routines in icaltime.c. I think that +they actually make sense now. Note that there is an interface change +with icaltime_from_timet() -- I removed the is_utc parameter, since +all timet values are in UTC. Use icaltime_from_int() if you really +want the old interface + +Major improvements to icalfileset. icalfileset_select now works and so +does file locking. + +Minor revision to the documentation, but it does include a new section +on file storage ( icalfileset ) and time ( icaltime.c) + +Lots of bug fixes and small patches. + +I improved the regression test in src/test/regression.c. It now have +command line switches to select specific tests ( undocumentated, of +course ) and more of the tests include asserts, so you can just run it +without looking at the output. If the test runs without crashing, it +is mostly OK. + + + +Version 0.21, 20 Nov 00 ( cvs tag libical-0-21) +---------------------------------------------- + + * icalmessage.c Many routines to create new ical messages. + + * icalspanlist.c Code to generate a list of the busy time f the + VEVENTS in a set. Also includes routiens to generate free and busy + lists from the spanlist, and to find the next free time after a + given time. + + * icalvalue.c The STATUS property now has its own value type, + STATUS, which holds the enumeration icalproperty_status. + + * icalrestriction.c Added more restrictions. Now handles mutual + and exclusive consitions, and checks for the reight values in + STATUS properties + + * icaltypes.c Added routine to create durationtype from string: + icaldurationtype_from_string + + + * icalcomponet.c Add sever get/set convienience routines to access + and manipulate common component propoerties from the component + interface. This eliminates the need to create a lot of temporary + variables if you just want to change the start time of and event. + + + * icalcomponent.c Added new routines to icalcomponent: + _get_span -- returns the start and end times of the event in UTC + _get_first_real_component -- return ref to VTODO, VEVENT or VJOURNAL + + * icalspanlist.c Added new class, icalspanlist, that generates a + list of alternating busy and free times from an icalset. The class + includes routines to gnerate rfc2445 busy and free lists, and to + get the next avaliable busy or free time after a given time. + + +Version 0.20D 3 Nov 00 +----------------------- + +Many miscelaneous tweaks to the build system + +More work to icalclassify. + +Aded routines to icaltime.c to convert to and from specific timezones +in Olsen format ("America/Los_Angeles") + + +Version 0.20 7 Sept 00 (cvs tag libical-0-20 ) +---------------------------------------------- + +Addedd icalclassify() which looks at a message and determine how to +process it. + +Misc bug fixes and tweaks. + +Version 0.19 6 August 00 (cvs tag libical-0-19) +----------------------------------------------- + +Created a MIME parser in icalmime.c. This will take any complex MIME +encapsulated message and return an icalcomponent with the same +structure. Each MIME part is represented by a component of type +X-LIC-MIMEPART. + +Added MIME partsing to stow.c + +Added external iterators to icalcomponent. See test_iterators() in +test/regression.c + +Refactored icalcluster and icalstore into icalset, icalfileset and +icaldirset, which have a pseudo inheritance relationship between them. + +Fixed more memory leaks. + +Version 0.18a 10 June 00 ( cvs tag libical-0-18a ) +----------------------------------------------- + +Did the final tweaks to stow.c, a program to recieve and store iMIP +messages. + + +Version 0.18 10 June 00 ( cvs tag libical-0-18 ) +----------------------------------------------- + +Added libicalvcal, which includes the Versit code for parsing vCal +files and a routine (icalvcal_convert() ) that converts a vCal object +to an iCal object. The test program is src/test/testvcal. + +Added marginally functional recurrence code. The curent code does not +handle all of the examples in rfc2445 ( which are extracted in +test-data/recur.txt ) but it can do all of the obvious cases. See the +test program in src/test/recur.c for an example. In particular, the +code cannot handle the integer values in BYDAY, nor negative integers +in BYMONTH or BYMONTHDAY. It also cannot handle BYSETPOS. + +Moved some code to the examples directory and improved the comments. + +Did a little more work on the documentation in the doc directory. The +documentation is in LyX source, but there is a text version in +UsingLibical.txt + + +Version 0.17 15 May 00 (cvs tag libical-0-17 ) +--------------------------------------------- + +Fixed two bugs that added extraneous '/' to test values + +Fixed type in internal string for the COUNTER method + +Eliminated a memory leak in icalparser.c + + +Version 0.16a 29 April 00 +---------------------------------------------- + +Fixed bug in icalvalue_new_from_string that caused METHOD value to +choke on non standard input. + +Fixed a memory leak in icalparser_add_line -- failed to free 'line' + + +Version 0.16 5 April 00 ( cvs tag libical-0-16) +---------------------------------------------- + +Now using automake. + +Substantial changes to the parser. New interfaces let you parser +multiple components from a single stream by feading the parser object +one line at a time. + +Added a STRING value type. this type is like TEXT, but does not +backslash magic characters. It is used in PRODID and REQUEST-STATUS, +where the '/' and ';' are literal. + +Added several convience functions for REQUEST-STATUS to icalenums.c + +Addedd a routine to icalcomponent to convert X-LIC errors to +REQUEST-STATUS return values. + +Version 0.15a 5 Mar 00 (cvs tag libical-0-15a) +--------------------- + +Experimented with CVS + +Fixed icalvalue_set_text to convert escaped characters into the proper +values. + +Other minor code tweaks. + + +Version 0.15 7 Feb 00 +--------------------- + +Split the storage classess ( icalstore, icalcluster, icalcalendar ) +into a seperate library, libicalss + +Implemented restriction checking in file icalrestrictions.c. The +checking is not complete, but can handle the bulk of the restrictions +described in RFC 2446. + +Created a new value type, METHOD. Changed METHOD property to use the +new value. The METHOD value uses an enumeration. + + +Version 0.14b +------------- + +Implemented parsing of RECUR values, although it does not handle BYDAY +specs with numbers. + +Fixed error in icalparser_next_line that mangled lines longer than the +temp buffer (1024 chars.) The temp buffer is now 80 chars, and it can +handle (apparently) arbitrary length lines + +Fixed severe brokenness in a value, but I forgot which one. + +Cleaned cruft out of the distribution, so the tarfile is smaller. + + +Version 0.14a 14 Jan 00 +----------------------- + +Fixed bug in ROLE parameter -- missing '-' in the text of allowed values + +Fixed bug in X-parameters + +Version 0.14 11 Jan 00 +---------------------- + +Fixed wrong value type for TRIGGER property + +Added Calendar object. Calendar is an aggregate of two stores and two +clusters, and can store all of the inforamation associated with a +calendar. + +icalcomponent_add_property and icalcomponent_add_component will +complain if you try to add a component or property that is already +part of an other component. The *_free routines wil complain if you try +to free a linked component or property. + +More improvements to error handling. + +Parser is much more robust. + +Minor memory enhancements. + +Regression test runs without memory leaks. + +Version 0.13d 21Dec99 +--------------------- + +Seperated perl interface and library + +Added autoconf support + +Scripts that generate derived properties, values and parameters now +change source and header files inline. + +Changed icalstore to cluster all components with DTSTART in a month +into a single file. This should reduce number of file accesses by a +factor of 60. + +Ran code through Purify and fixed memory leaks. + + +Version 0.13 16Nov99 +--------------------- + +Yet more bug fixes! Yeah! + +Added better error handling. The Parser inserts X-LIC-*ERROR +properties to warn of parsing errors. + +The imip source/sink programs in /src/imip is demonstrably functional. + +Version 0.12b 17Oct99 +--------------------- + +More bug fixes, particularily in parse from string routines + +ICal::Store is mostly functional + +This is version is a checkpoint, not a release. + +Version 0.12a 10Oct99 +--------------------- + +Expanded perl interface: + Added 1/2 of Store module + Fixed bugs + Implemeted get_{first,next}_property + +Extended C interface + Made get_{first,next}_property work properly + Fixed bugs + + +This is version is a checkpoint, not a release. + +Version 0.12 27Aug99 +-------------------- + +Added a rudimentatry perl interface + +This is version is a checkpoint, not a release. + + +Version 0.11 11Aug99 +-------------------- + +Eliminated most use of flex/bison -- all parsing, except for the +values, is done in C. + +Cleaned up memory leaks. Purify claims that I got them all. + +Moved all derived component/prop/param/value code ( in .inc / .h +files) into main files ( icalcomponent.{c,h}, icalproperty.{c,h}, etc/ +) + +Implemented *_clone routines. + +Fixed a lot of bugs. + +Implemented more value types. Still unimplemeneted are BINARY and RECUR + +Included MacOS/Code Warior files from Graham Davison + + +Version 0.10 8Jul99 +------------------- + +Eliminated shift/reduce and reduce/reduce conflicts in the parser. +This version is almost feature complete -- it has the basic structure +for all of the library's functionality, and it will only require +implementing procedure shells and fixing bugs. I think that all of the +hard work is done... + +Version 0.09a,b 3,7 Jul99 +------------------------- + +Various improvements to the parser, added some functionality. The parser code +is mostly complete, and should be fully functional, except for a horde of +bugs. Also added support for X-Properties. + +Version 0.09 25Jun99 +-------------------- + +Added a parser in files src/comp/icalitip.{y,l} The lexer is mostly +functional, but the parser is not. + + +Version 0.08 2Jun99 +-------------------- + +All files now have MPL licensing + +Implement enough of the code to perform some rudimentary testing + + +Version 0.07 14May99 +-------------------- + +Remove all interfaces that construct object from a string + +Moved most code back into comp directory + +Implemented C files for most headers -- usecases.c now links. + +Many improvements to generation scripts. + + + +Version 0.06 25Apr99 +-------------------- + +Expanded distribution to include: + Directory structure that can accomodate future expansion + Several levels of Makefiles + This CHANGES file + +Added headers for irip and parse modules + +Added several files with design information + +Added scripts that I had used to generate much of the ical header code. + +Split C headers from CC headers + +Added data for iTIP and iCAL component restrictions in restrictions.csv + +Version 0.05 11Apr99 +---------------------- + +Changes to ical headers + + Added derived Property classes. + + Improved the interface to the derived property and parameter classes + + Added derived component classes. + + Created usecases.c and ccusecases.cc to demonstrate use + + C++ interface compile + + +Version 0.04 5Apr99 +------------------- + +Version 0.02 30Mar99 +-------------------- diff --git a/libkcal/libical/README b/libkcal/libical/README new file mode 100644 index 000000000..19a4740e9 --- /dev/null +++ b/libkcal/libical/README @@ -0,0 +1,102 @@ + +LIBICAL -- An implementation of basic iCAL protocols + +The code and datafiles in this distribution are licensed under the +Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html +for a copy of the license. Alternately, you may use libical under the +terms of the GNU Library General Public License. See +http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. + +This dual license ensures that the library can be incorporated into +both proprietary code and GPL'd programs, and will benefit from +improvements made by programmers in both realms. I will only accept +changes into my version of the library if they are similarly +dual-licensed. + +Portions of this distribution are (C) Copyright 1996 Apple Computer, +Inc., AT&T Corp., International Business Machines Corporation and +Siemens Rolm Communications Inc. See src/libicalvcal/README.TXT for +details. + +Portions of this distribution are Copyright (c) 1997 Theo de +Raadt. See the header for src/libical/vsnprintf.c for the full +copyright statement. + +This code is under active development. If you would like to contribute +to the project, you can contact me, Eric Busboom, at +eric@softwarestudio.org. The project has a webpage at + + http://softwarestudio.org/libical/index.html + +and a mailing list that you can join by sending the following mail: + + ------------ + To: minimalist@softwarestudio.org + Subject: subscribe libical + ------------ + + +Building the library +-------------------- + +This distribution is developed on Red Hat Linux 6.0 and usually +compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of +previous version on MacOS ( with CodeWarrior ) and on UnixWare, but I +don't know about any other systems. + +The library is configured with automake. IF YOU ARE BUILDING THE +SOURCE FROM A TARBALL, From the root directory, run + + ./configure + +To build all of the Makefiles for your system. If you will be +installing the library, you may want to use the --prefix flag to set +the directory where the library and header files will be installed. + + ./configure --prefix=/proj/local/ + +If configure runs fine, run "make" to build the library and +"make install" to install it. + +Although the distribution uses libtool to generate libraries, it has +shared libraries turned off by default. To create and install shared +libraries use: + + ./configure --enable-shared + + +IF YOU ARE BUILDING FROM CVS, there will be no configure file until +you create one with autogen.sh. YOu can pass configure parameters to +autogen.sh on the command line. + +The current version of libical focuses on creating and +manipulating iCal objects. With it, you can parse text representations +of iCal components, add and remove sub-components, properties, +parameters and values, and print the components back out as strings. + + +Notes for Libical Developers +------------------- + +If you don't want to use gcc as the compiler, and you got the sources +from CVS, you should set the CC variable to the path to the compiler +and run "automake --include-deps" to keep automake from using +gcc-specific automatic dependancy tracking. + + > CC=/pkg/SUNWspro/bin/cc; export CC + > automake --include-deps + > ./configure --prefix=/proj/local/ + > make + +You will not need to re-run automake unless you got the sources from CVS. + +Using the Library +----------------- + +There is rudimentary, unfinished documentation in the /doc directory, +and annotated examples in /examples and the test code in src/test. + + + +Eric Busboom +eric@softwarestudio.org diff --git a/libkcal/libical/README.zoneinfo b/libkcal/libical/README.zoneinfo new file mode 100644 index 000000000..57ce26c7a --- /dev/null +++ b/libkcal/libical/README.zoneinfo @@ -0,0 +1,44 @@ +To generate our zoneinfo .ics files: + + 1. Download and untar the most recent tzdataXXX.tar.gz package + from ftp://elsie.nci.nih.gov/pub/ to the tzdata subdir + + % cd tzdata + % wget ftp://elsie.nci.nih.gov/pub/tzdata2007h.tar.gz + % cat tzdata2007h.tar.gz | gunzip -c | tar xvf - + % rm tzdata2007h.tar.gz + % cd .. + + 2. Make sure we have the most recent version of the vzic program + which can be found at + http://dialspace.dial.pipex.com/prod/dialspace/town/pipexdsl/s/asbm26/vzic + + % wget http://dialspace.dial.pipex.com/prod/dialspace/town/pipexdsl/s/asbm26/vzic/vzic-1.3.tgz + % cat vzic-1.3.tgz | gunzip -c | tar xvf - + % rm vzic-1.3.tgz + + 3. Configure and build vzic + + % cd vzic-1.3 + % vi Makefile + + make the following changes: + OLSON_DIR = ../tzdata + PRODUCT_ID = -//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN + TZID_PREFIX = /kde.org/Olson_%D_1/ + + % make + % cd .. + + 4. Do it! + + % cd vzic-1.3 + % ./vzic --pure --output-dir ../zoneinfo + + 5. Cleanup + + % make clean + + 6. Commit new tzdata and vzic, if necessary + + 7. Commit new zoneinfo diff --git a/libkcal/libical/TEST b/libkcal/libical/TEST new file mode 100644 index 000000000..786ce3ce5 --- /dev/null +++ b/libkcal/libical/TEST @@ -0,0 +1,4 @@ + +Parser Tests +------------ +Use iCAL keywords as first words of unquoted strings diff --git a/libkcal/libical/THANKS b/libkcal/libical/THANKS new file mode 100644 index 000000000..d795eecaa --- /dev/null +++ b/libkcal/libical/THANKS @@ -0,0 +1,69 @@ +Thanks to: + +Allan Clark <allanc@atlas.platypus.bc.ca> for testing libical against +UnixWare. + +Graham Davison <g.m.davison@computer.org> for MacOS support and +miscelaneous code bits + +Seth Alves <alves@hungry.com> for the first cut at the Makefile.am +files and various utility functions. + +Russ Steinthal <rms39@columbia.edu> for several utility functions and +comments. + +Ola Lundqvist <olalu526@student.liu.se> for the vCal test data file. + +Colin DuPlantis <colin@cp.net> for new functions in icalparser.c + +Holger Schmidt <hschmidt@chronolabs.de> for all of icalcstp.c, The +CSTP protocol implementation, and modifications to icalcstp.h + +Gisle Hannemyr <gisle@oslonett.no> The decode*() functions in sspm.c +are based on the decode() routine in the mimelite program, Copyright +(c) 1994 Gisle Hannemyr. + +The Evolution team at Helixcode ( Federico Mena Quintero +<federico@helixcode.com>, JP Rosevear <jpr@helixcode.com>, Ettore +Perazzoli <ettore@helixcode.com>, Christopher James Lahey +<clahey@helixcode.com>, Peter Williams <peterw@helixcode.com>) for +miscelaneous patches and adjustments to the build system. + +Cornelius Schumacher <schumacher@kde.org> for many insightful +suggestions and a few patches. + +Mark D. Anderson <mda@discerning.com> for discussions and ideas. + +Martin Neimeier <nei@ibn.de> for correcting bugs in icalrecur.c + +Tom Leitner <tom@radar.tu-graz.ac.at> For several bug fixes in +compiling on Tru64 UNIX. + +Patrick Lewis <plewis@inetarena.com> for several bug reports and +substantial ( co-authorship) contributions to the Python bindings + +Larry W. Virden <lvirden@cas.org> for several bug reports in compiling +on Solaris. + +Bryan Bartone <bsb@mesasys.com> for code changes based on porting +libical to Windows. + +Hubert V <hubertv@bigfoot.com> for checking and analyzing the output +of the recurrence rule system. + +Jonathan Yue <jonathan.yue@cp.net> for icalproperty_get_name() + +Jeff Mace <jhm18@psu.edu> for finding bugs in gauges. + +John Gray <gray@agora-net.com> for routing memory leaks, porting to +WIN32, and taking over leadership of the project. + +Andrea Campi <a.campi@inet.it> for miscellaneous updates and beginning +of Doxygen documentation. + +Paul Lindner <plindner@cp.net> for several contributions, including +C++ binding, reentrant parser, thread safe memory allocator, and a +lot of documentation. + +Mark Tearle <mtearle@tearle.com> for keeping the Python bindings up +to date. diff --git a/libkcal/libical/TODO b/libkcal/libical/TODO new file mode 100644 index 000000000..f707c2a52 --- /dev/null +++ b/libkcal/libical/TODO @@ -0,0 +1,39 @@ + +TODOs for libical +----------------- + +libical treats properties with multiple values incorrecty -- it always +seperates multiple values into multiple properties. This is not +acceptable for CATEGORIES and RESOURCES. + +Some TEXT valued properties, like METHOD, have a limited set of valid +values. The code should check that the values of these properites are +valid. ( Although METHOD now uses enums, and is not really TEXT valued ) + +Finish implementing values + ATTACH/BINARY + content_type + language + +Check for buffer overflow on external input. + +Error Handling + + Dates and times: the parser will accept many illegal date time + values + +RECUR values ignore integers in BYDAY clauses, ie 'FREQ=MONTHLY;BYDAY=-1SU' + +Restrictions code does not catch lack of DTEND or DURATION + +For some value types, if there illegal characters in the value ( like +4.56 in an integer value), the parser will output the characters to +stdout. + +Check all uses of strcpy and sprinf for buffer overflows + +Make the mime parsing code in sspm grow the list of parts as needed, +rather than having a hard limit. + +in sspm.c, and unrecognized content-transfer-encoding values must +force a content type of application/octet-stream. diff --git a/libkcal/libical/configure.in.in b/libkcal/libical/configure.in.in new file mode 100644 index 000000000..79aafbc30 --- /dev/null +++ b/libkcal/libical/configure.in.in @@ -0,0 +1,20 @@ +dnl Checks for programs. +AC_PROG_YACC +AM_PROG_LEX + +AC_CHECK_PROGS(PERL, perl5 perl) + +AC_DEFINE(ICAL_SAFESAVES,1, [safe saves]) +AC_DEFINE(ICAL_UNIX_NEWLINE,1, [unix newline]) + +AC_CHECK_HEADERS(time.h sys/types.h assert.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_STRUCT_TM +AM_PROG_LEX + +dnl Checks for library functions. +AC_CHECK_FUNCS(strdup) + diff --git a/libkcal/libical/design-data/Makefile.am b/libkcal/libical/design-data/Makefile.am new file mode 100644 index 000000000..8f27cd6ce --- /dev/null +++ b/libkcal/libical/design-data/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST =\ + properties.csv \ + parameters.csv \ + restrictions.csv \ + status.txt \ + value-types.csv diff --git a/libkcal/libical/design-data/parameters.csv b/libkcal/libical/design-data/parameters.csv new file mode 100644 index 000000000..56cae99d1 --- /dev/null +++ b/libkcal/libical/design-data/parameters.csv @@ -0,0 +1,25 @@ +"#Name ","C Type","Enumeration Values" +"ALTREP","const char*", +"CHARSET","const char*", +"CN","const char*", +"CUTYPE","icalparameter_cutype","INDIVIDUAL;GROUP;RESOURCE;ROOM;UNKNOWN" +"DELEGATED-FROM","const char*", +"DELEGATED-TO","const char*", +"DIR","const char*", +"ENCODING","icalparameter_encoding","8BIT;BASE64" +"FBTYPE","icalparameter_fbtype","FREE;BUSY;BUSYUNAVAILABLE;BUSYTENTATIVE" +"FMTTYPE","const char*", +"LANGUAGE","const char*", +"MEMBER","const char*", +"PARTSTAT","icalparameter_partstat","NEEDS-ACTION;ACCEPTED;DECLINED;TENTATIVE;DELEGATED;COMPLETED;INPROCESS" +"RANGE","icalparameter_range","THISANDPRIOR;THISANDFUTURE" +"RELATED","icalparameter_related","START;END" +"RELTYPE","icalparameter_reltype","PARENT;CHILD;SIBLING" +"ROLE","icalparameter_role","CHAIR;REQ-PARTICIPANT;OPT-PARTICIPANT;NON-PARTICIPANT" +"RSVP","icalparameter_rsvp","TRUE;FALSE" +"SENT-BY","const char*", +"TZID","const char*", +"VALUE","icalparameter_value","BINARY;BOOLEAN;DATE;DURATION;FLOAT;INTEGER;PERIOD;RECUR;TEXT;URI;ERROR;DATE-TIME;UTC-OFFSET;CAL-ADDRESS" +"X","const char*", +"X-LIC-ERRORTYPE","icalparameter_xlicerrortype","COMPONENT-PARSE-ERROR;PROPERTY-PARSE-ERROR;PARAMETER-NAME-PARSE-ERROR;PARAMETER-VALUE-PARSE-ERROR;VALUE-PARSE-ERROR;INVALID-ITIP;UNKNOWN-VCAL-PROP-ERROR;MIME-PARSE-ERROR;VCAL-PROP-PARSE-ERROR" +"X-LIC-COMPARETYPE","icalparameter_xliccomparetype","EQUAL;NOTEQUAL;LESS;GREATER;LESSEQUAL;GREATEREQUAL;REGEX;ISNULL;ISNOTNULL" diff --git a/libkcal/libical/design-data/properties.csv b/libkcal/libical/design-data/properties.csv new file mode 100644 index 000000000..57b837b8f --- /dev/null +++ b/libkcal/libical/design-data/properties.csv @@ -0,0 +1,78 @@ +,, +"#Property Name","libical Value type","iCalendar default value" +"ACTION","ACTION","ACTION" +"ALLOW-CONFLICT","TEXT","TEXT" +"ATTACH","ATTACH","URI" +"ATTENDEE","CAL-ADDRESS","CAL-ADDRESS" +"CALSCALE","TEXT","TEXT" +"CATEGORIES","TEXT","TEXT" +"CALID","TEXT","TEXT" +"CARID","TEXT","TEXT" +"CLASS","CLASS","CLASS" +"COMMENT","TEXT","TEXT" +"COMPLETED","DATE-TIME","DATE-TIME" +"CONTACT","TEXT","TEXT" +"CREATED","DATE-TIME","DATE-TIME" +"DECREED","TEXT","TEXT" +"DEFAULT-CHARSET","TEXT","TEXT" +"DEFAULT-LOCALE","TEXT","TEXT" +"DEFAULT-TZID","TEXT","TEXT" +"DESCRIPTION","TEXT","TEXT" +"DTEND","DATE-TIME","DATE-TIME" +"DTSTAMP","DATE-TIME","DATE-TIME" +"DTSTART","DATE-TIME","DATE-TIME" +"DUE","DATE-TIME","DATE-TIME" +"DURATION","DURATION","DURATION" +"EXDATE","DATE-TIME","DATE-TIME" +"EXRULE","RECUR","RECUR" +"FREEBUSY","PERIOD","PERIOD" +"GEO","GEO","GEO" +"LAST-MODIFIED","DATE-TIME","DATE-TIME" +"LOCATION","TEXT","TEXT" +"METHOD","METHOD","METHOD" +"ORGANIZER","CAL-ADDRESS","CAL-ADDRESS" +"OWNER","TEXT","TEXT" +"PERCENT-COMPLETE","INTEGER","INTEGER" +"PRIORITY","INTEGER","INTEGER" +"PRODID","TEXT","TEXT" +"RDATE","DATE-TIME-PERIOD","DATE-TIME" +"RECURRENCE-ID","DATE-TIME","DATE-TIME" +"RELATED-TO","TEXT","TEXT" +"RELCALID","TEXT","TEXT" +"REPEAT","INTEGER","INTEGER" +"REQUEST-STATUS","REQUEST-STATUS","REQUEST-STATUS" +"RESOURCES","TEXT","TEXT" +"RRULE","RECUR","RECUR" +"SEQUENCE","INTEGER","INTEGER" +"STATUS","STATUS","STATUS" +"SUMMARY","TEXT","TEXT" +"TRANSP","TRANSP","TRANSP" +"TRIGGER","TRIGGER","DURATION" +"TZID","TEXT","TEXT" +"TZNAME","TEXT","TEXT" +"TZOFFSETFROM","UTC-OFFSET","UTC-OFFSET" +"TZOFFSETTO","UTC-OFFSET","UTC-OFFSET" +"TZURL","URI","URI" +"UID","TEXT","TEXT" +"URL","URI","URI" +"VERSION","TEXT","TEXT" +"X","X","X" +"SCOPE","TEXT","TEXT" +"MAXRESULTS","INTEGER","INTEGER" +"MAXRESULTSSIZE","INTEGER","INTEGER" +"QUERY","QUERY","QUERY" +"QUERYNAME","TEXT","TEXT" +"EXPAND","INTEGER","INTEGER" +"TARGET","CAL-ADDRESS","CAL-ADDRESS" +"X-LIC-ERROR","TEXT","TEXT" +"X-LIC-CLUSTERCOUNT","STRING","STRING" +"X-LIC-MIMECONTENTTYPE","STRING","STRING" +"X-LIC-MIMECHARSET","STRING","STRING" +"X-LIC-MIMEENCODING","STRING","STRING" +"X-LIC-MIMEOPTINFO","STRING","STRING" +"X-LIC-MIMECID","STRING","STRING" +"X-LIC-MIMEFILENAME","STRING","STRING" +"CALMASTER","TEXT","TEXT" +"X-LIC-CLASS","X-LIC-CLASS","X-LIC-CLASS" +"ANY","NO","NO" +"NO","NO","NO" diff --git a/libkcal/libical/design-data/restrictions.csv b/libkcal/libical/design-data/restrictions.csv new file mode 100644 index 000000000..bded85069 --- /dev/null +++ b/libkcal/libical/design-data/restrictions.csv @@ -0,0 +1,1420 @@ +# Method, Target component, Property, Sub-component, Restriction +PUBLISH,VEVENT,NONE,NONE,ONEPLUS +PUBLISH,VEVENT,DTSTAMP,NONE,ONE +PUBLISH,VEVENT,DTSTART,NONE,ONE +PUBLISH,VEVENT,ORGANIZER,NONE,ONE +PUBLISH,VEVENT,SUMMARY,NONE,ONE +PUBLISH,VEVENT,UID,NONE,ONE +PUBLISH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +PUBLISH,VEVENT,SEQUENCE,NONE,ZEROORONE +PUBLISH,VEVENT,ATTACH,NONE,ZEROPLUS +PUBLISH,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +PUBLISH,VEVENT,CLASS,NONE,ZEROORONE +PUBLISH,VEVENT,COMMENT,NONE,ZEROORONE +PUBLISH,VEVENT,CONTACT,NONE,ZEROPLUS +PUBLISH,VEVENT,CREATED,NONE,ZEROORONE +PUBLISH,VEVENT,DESCRIPTION,NONE,ZEROORONE +PUBLISH,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +PUBLISH,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +PUBLISH,VEVENT,EXDATE,NONE,ZEROPLUS +PUBLISH,VEVENT,EXRULE,NONE,ZEROPLUS +PUBLISH,VEVENT,GEO,NONE,ZEROORONE +PUBLISH,VEVENT,LASTMODIFIED,NONE,ZEROORONE +PUBLISH,VEVENT,LOCATION,NONE,ZEROORONE +PUBLISH,VEVENT,PRIORITY,NONE,ZEROORONE +PUBLISH,VEVENT,RDATE,NONE,ZEROPLUS +PUBLISH,VEVENT,RELATEDTO,NONE,ZEROPLUS +PUBLISH,VEVENT,RESOURCES,NONE,ZEROORONE +PUBLISH,VEVENT,RRULE,NONE,ZEROPLUS +PUBLISH,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel +PUBLISH,VEVENT,TRANSP,NONE,ZEROORONE +PUBLISH,VEVENT,URL,NONE,ZEROORONE +PUBLISH,VEVENT,X,NONE,ZEROPLUS +PUBLISH,VEVENT,ATTENDEE,NONE,ZERO +PUBLISH,VEVENT,REQUESTSTATUS,NONE,ZERO +PUBLISH,VEVENT,NONE,VALARM,ZEROPLUS +PUBLISH,VEVENT,NONE,VFREEBUSY,ZERO +PUBLISH,VEVENT,NONE,VJOURNAL,ZERO +PUBLISH,VEVENT,NONE,VTODO,ZERO +PUBLISH,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref +PUBLISH,VEVENT,NONE,X,ZEROPLUS +PUBLISH,VEVENT,RELCALID,NONE,ZEROORONE +REQUEST,VEVENT,NONE,NONE,ONEPLUS +REQUEST,VEVENT,ATTENDEE,NONE,ONEPLUS +REQUEST,VEVENT,DTSTAMP,NONE,ONE +REQUEST,VEVENT,DTSTART,NONE,ONE +REQUEST,VEVENT,ORGANIZER,NONE,ONE +REQUEST,VEVENT,SEQUENCE,NONE,ZEROORONE +REQUEST,VEVENT,SUMMARY,NONE,ONE +REQUEST,VEVENT,UID,NONE,ONE +REQUEST,VEVENT,ATTACH,NONE,ZEROPLUS +REQUEST,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +REQUEST,VEVENT,CLASS,NONE,ZEROORONE +REQUEST,VEVENT,COMMENT,NONE,ZEROORONE +REQUEST,VEVENT,CONTACT,NONE,ZEROPLUS +REQUEST,VEVENT,CREATED,NONE,ZEROORONE +REQUEST,VEVENT,DESCRIPTION,NONE,ZEROORONE +REQUEST,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +REQUEST,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +REQUEST,VEVENT,EXDATE,NONE,ZEROPLUS +REQUEST,VEVENT,EXRULE,NONE,ZEROPLUS +REQUEST,VEVENT,GEO,NONE,ZEROORONE +REQUEST,VEVENT,LASTMODIFIED,NONE,ZEROORONE +REQUEST,VEVENT,LOCATION,NONE,ZEROORONE +REQUEST,VEVENT,PRIORITY,NONE,ZEROORONE +REQUEST,VEVENT,RDATE,NONE,ZEROPLUS +REQUEST,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REQUEST,VEVENT,RELATEDTO,NONE,ZEROPLUS +REQUEST,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS +REQUEST,VEVENT,RESOURCES,NONE,ZEROORONE +REQUEST,VEVENT,RRULE,NONE,ZEROPLUS +REQUEST,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf +REQUEST,VEVENT,TRANSP,NONE,ZEROORONE +REQUEST,VEVENT,URL,NONE,ZEROORONE +REQUEST,VEVENT,X,NONE,ZEROPLUS +REQUEST,VEVENT,NONE,VALARM,ZEROPLUS +REQUEST,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref +REQUEST,VEVENT,NONE,X,ZEROPLUS +REQUEST,VEVENT,NONE,VFREEBUSY,ZERO +REQUEST,VEVENT,NONE,VJOURNAL,ZERO +REQUEST,VEVENT,NONE,VTODO,ZERO +REQUEST,VEVENT,RELCALID,NONE,ZEROORONE +REPLY,VEVENT,NONE,NONE,ONEPLUS +REPLY,VEVENT,ATTENDEE,NONE,ONE +REPLY,VEVENT,DTSTAMP,NONE,ONE +REPLY,VEVENT,ORGANIZER,NONE,ONE +REPLY,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REPLY,VEVENT,UID,NONE,ONE +REPLY,VEVENT,SEQUENCE,NONE,ZEROORONE +REPLY,VEVENT,ATTACH,NONE,ZEROPLUS +REPLY,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +REPLY,VEVENT,CLASS,NONE,ZEROORONE +REPLY,VEVENT,COMMENT,NONE,ZEROORONE +REPLY,VEVENT,CONTACT,NONE,ZEROPLUS +REPLY,VEVENT,CREATED,NONE,ZEROORONE +REPLY,VEVENT,DESCRIPTION,NONE,ZEROORONE +REPLY,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +REPLY,VEVENT,DTSTART,NONE,ZEROORONE +REPLY,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +REPLY,VEVENT,EXDATE,NONE,ZEROPLUS +REPLY,VEVENT,EXRULE,NONE,ZEROPLUS +REPLY,VEVENT,GEO,NONE,ZEROORONE +REPLY,VEVENT,LASTMODIFIED,NONE,ZEROORONE +REPLY,VEVENT,LOCATION,NONE,ZEROORONE +REPLY,VEVENT,PRIORITY,NONE,ZEROORONE +REPLY,VEVENT,RDATE,NONE,ZEROPLUS +REPLY,VEVENT,RELATEDTO,NONE,ZEROPLUS +REPLY,VEVENT,RESOURCES,NONE,ZEROORONE +REPLY,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS +REPLY,VEVENT,RRULE,NONE,ZEROPLUS +REPLY,VEVENT,STATUS,NONE,ZEROORONE +REPLY,VEVENT,SUMMARY,NONE,ZEROORONE +REPLY,VEVENT,TRANSP,NONE,ZEROORONE +REPLY,VEVENT,URL,NONE,ZEROORONE +REPLY,VEVENT,X,NONE,ZEROPLUS +REPLY,VEVENT,NONE,VTIMEZONE,ZEROORONE,must_if_tz_ref +REPLY,VEVENT,NONE,X,ZEROPLUS +REPLY,VEVENT,NONE,VALARM,ZERO +REPLY,VEVENT,NONE,VFREEBUSY,ZERO +REPLY,VEVENT,NONE,VJOURNAL,ZERO +REPLY,VEVENT,NONE,VTODO,ZERO +REPLY,VEVENT,RELCALID,NONE,ZEROORONE +ADD,VEVENT,NONE,NONE,ONE +ADD,VEVENT,DTSTAMP,NONE,ONE +ADD,VEVENT,DTSTART,NONE,ONE +ADD,VEVENT,ORGANIZER,NONE,ONE +ADD,VEVENT,SEQUENCE,NONE,ONE +ADD,VEVENT,SUMMARY,NONE,ONE +ADD,VEVENT,UID,NONE,ONE +ADD,VEVENT,ATTACH,NONE,ZEROPLUS +ADD,VEVENT,ATTENDEE,NONE,ZEROPLUS +ADD,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +ADD,VEVENT,CLASS,NONE,ZEROORONE +ADD,VEVENT,COMMENT,NONE,ZEROORONE +ADD,VEVENT,CONTACT,NONE,ZEROPLUS +ADD,VEVENT,CREATED,NONE,ZEROORONE +ADD,VEVENT,DESCRIPTION,NONE,ZEROORONE +ADD,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +ADD,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +ADD,VEVENT,EXDATE,NONE,ZEROPLUS +ADD,VEVENT,EXRULE,NONE,ZEROPLUS +ADD,VEVENT,GEO,NONE,ZEROORONE +ADD,VEVENT,LASTMODIFIED,NONE,ZEROORONE +ADD,VEVENT,LOCATION,NONE,ZEROORONE +ADD,VEVENT,PRIORITY,NONE,ZEROORONE +ADD,VEVENT,RDATE,NONE,ZEROPLUS +ADD,VEVENT,RELATEDTO,NONE,ZEROPLUS +ADD,VEVENT,RESOURCES,NONE,ZEROORONE +ADD,VEVENT,RRULE,NONE,ZEROPLUS +ADD,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf +ADD,VEVENT,TRANSP,NONE,ZEROORONE +ADD,VEVENT,URL,NONE,ZEROORONE +ADD,VEVENT,X,NONE,ZEROPLUS +ADD,VEVENT,RECURRENCEID,NONE,ZERO,must_be_recurring +ADD,VEVENT,REQUESTSTATUS,NONE,ZERO +ADD,VEVENT,NONE,VALARM,ZEROPLUS +ADD,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref +ADD,VEVENT,NONE,X,ZEROPLUS +ADD,VEVENT,NONE,VFREEBUSY,ZERO +ADD,VEVENT,NONE,VTODO,ZERO +ADD,VEVENT,NONE,VJOURNAL,ZERO +ADD,VEVENT,RELCALID,NONE,ZEROORONE +CANCEL,VEVENT,NONE,NONE,ONEPLUS +CANCEL,VEVENT,ATTENDEE,NONE,ZEROPLUS +CANCEL,VEVENT,DTSTAMP,NONE,ONE +CANCEL,VEVENT,ORGANIZER,NONE,ONE +CANCEL,VEVENT,SEQUENCE,NONE,ONE +CANCEL,VEVENT,UID,NONE,ONE +CANCEL,VEVENT,COMMENT,NONE,ZEROORONE +CANCEL,VEVENT,ATTACH,NONE,ZEROPLUS +CANCEL,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +CANCEL,VEVENT,CLASS,NONE,ZEROORONE +CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS +CANCEL,VEVENT,CREATED,NONE,ZEROORONE +CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE +CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE ,no_duration +CANCEL,VEVENT,DTSTART,NONE,ZEROORONE +CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS +CANCEL,VEVENT,EXRULE,NONE,ZEROPLUS +CANCEL,VEVENT,GEO,NONE,ZEROORONE +CANCEL,VEVENT,LASTMODIFIED,NONE,ZEROORONE +CANCEL,VEVENT,LOCATION,NONE,ZEROORONE +CANCEL,VEVENT,PRIORITY,NONE,ZEROORONE +CANCEL,VEVENT,RDATE,NONE,ZEROPLUS +CANCEL,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS +CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE +CANCEL,VEVENT,RRULE,NONE,ZEROPLUS +CANCEL,VEVENT,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee +CANCEL,VEVENT,SUMMARY,NONE,ZEROORONE +CANCEL,VEVENT,TRANSP,NONE,ZEROORONE +CANCEL,VEVENT,URL,NONE,ZEROORONE +CANCEL,VEVENT,X,NONE,ZEROPLUS +CANCEL,VEVENT,REQUESTSTATUS,NONE,ZERO +CANCEL,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref +CANCEL,VEVENT,NONE,X,ZEROPLUS +CANCEL,VEVENT,NONE,VTODO,ZERO +CANCEL,VEVENT,NONE,VJOURNAL,ZERO +CANCEL,VEVENT,NONE,VFREEBUSY,ZERO +CANCEL,VEVENT,NONE,VALARM,ZERO +CANCEL,VEVENT,RELCALID,NONE,ZEROORONE +REFRESH,VEVENT,NONE,NONE,ONE +REFRESH,VEVENT,ATTENDEE,NONE,ONE +REFRESH,VEVENT,DTSTAMP,NONE,ONE +REFRESH,VEVENT,ORGANIZER,NONE,ONE +REFRESH,VEVENT,UID,NONE,ONE +REFRESH,VEVENT,COMMENT,NONE,ZEROORONE +REFRESH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REFRESH,VEVENT,X,NONE,ZEROPLUS +REFRESH,VEVENT,ATTACH,NONE,ZERO +REFRESH,VEVENT,CATEGORIES,NONE,ZERO +REFRESH,VEVENT,CLASS,NONE,ZERO +REFRESH,VEVENT,CONTACT,NONE,ZERO +REFRESH,VEVENT,CREATED,NONE,ZERO +REFRESH,VEVENT,DESCRIPTION,NONE,ZERO +REFRESH,VEVENT,DTEND,NONE,ZERO +REFRESH,VEVENT,DTSTART,NONE,ZERO +REFRESH,VEVENT,DURATION,NONE,ZERO +REFRESH,VEVENT,EXDATE,NONE,ZERO +REFRESH,VEVENT,EXRULE,NONE,ZERO +REFRESH,VEVENT,GEO,NONE,ZERO +REFRESH,VEVENT,LASTMODIFIED,NONE,ZERO +REFRESH,VEVENT,LOCATION,NONE,ZERO +REFRESH,VEVENT,PRIORITY,NONE,ZERO +REFRESH,VEVENT,RDATE,NONE,ZERO +REFRESH,VEVENT,RELATEDTO,NONE,ZERO +REFRESH,VEVENT,REQUESTSTATUS,NONE,ZERO +REFRESH,VEVENT,RESOURCES,NONE,ZERO +REFRESH,VEVENT,RRULE,NONE,ZERO +REFRESH,VEVENT,SEQUENCE,NONE,ZERO +REFRESH,VEVENT,STATUS,NONE,ZERO +REFRESH,VEVENT,SUMMARY,NONE,ZERO +REFRESH,VEVENT,TRANSP,NONE,ZERO +REFRESH,VEVENT,URL,NONE,ZERO +REFRESH,VEVENT,NONE,X,ZEROPLUS +REFRESH,VEVENT,NONE,VTODO,ZERO +REFRESH,VEVENT,NONE,VJOURNAL,ZERO +REFRESH,VEVENT,NONE,VFREEBUSY,ZERO +REFRESH,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref +REFRESH,VEVENT,NONE,VALARM,ZERO +REFRESH,VEVENT,RELCALID,NONE,ZEROORONE +COUNTER,VEVENT,NONE,NONE,ONE +COUNTER,VEVENT,DTSTAMP,NONE,ONE +COUNTER,VEVENT,DTSTART,NONE,ONE +COUNTER,VEVENT,ORGANIZER,NONE,ONE +COUNTER,VEVENT,SEQUENCE,NONE,ONE +COUNTER,VEVENT,SUMMARY,NONE,ONE +COUNTER,VEVENT,UID,NONE,ONE +COUNTER,VEVENT,ATTACH,NONE,ZEROPLUS +COUNTER,VEVENT,ATTENDEE,NONE,ZEROPLUS +COUNTER,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard +COUNTER,VEVENT,CLASS,NONE,ZEROORONE +COUNTER,VEVENT,COMMENT,NONE,ZEROORONE +COUNTER,VEVENT,CONTACT,NONE,ZEROPLUS +COUNTER,VEVENT,CREATED,NONE,ZEROORONE +COUNTER,VEVENT,DESCRIPTION,NONE,ZEROORONE +COUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +COUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +COUNTER,VEVENT,EXDATE,NONE,ZEROPLUS +COUNTER,VEVENT,EXRULE,NONE,ZEROPLUS +COUNTER,VEVENT,GEO,NONE,ZEROORONE +COUNTER,VEVENT,LASTMODIFIED,NONE,ZEROORONE +COUNTER,VEVENT,LOCATION,NONE,ZEROORONE +COUNTER,VEVENT,PRIORITY,NONE,ZEROORONE +COUNTER,VEVENT,RDATE,NONE,ZEROPLUS +COUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +COUNTER,VEVENT,RELATEDTO,NONE,ZEROPLUS +COUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS +COUNTER,VEVENT,RESOURCES,NONE,ZEROORONE +COUNTER,VEVENT,RRULE,NONE,ZEROPLUS +COUNTER,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel +COUNTER,VEVENT,TRANSP,NONE,ZEROORONE +COUNTER,VEVENT,URL,NONE,ZEROORONE +COUNTER,VEVENT,X,NONE,ZEROPLUS +COUNTER,VEVENT,NONE,VALARM,ZEROPLUS +COUNTER,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref +COUNTER,VEVENT,NONE,X,ZEROPLUS +COUNTER,VEVENT,NONE,VTODO,ZERO +COUNTER,VEVENT,NONE,VJOURNAL,ZERO +COUNTER,VEVENT,NONE,VFREEBUSY,ZERO +COUNTER,VEVENT,RELCALID,NONE,ZEROORONE +DECLINECOUNTER,VEVENT,NONE,NONE,ONE +DECLINECOUNTER,VEVENT,DTSTAMP,NONE,ONE +DECLINECOUNTER,VEVENT,ORGANIZER,NONE,ONE +DECLINECOUNTER,VEVENT,UID,NONE,ONE +DECLINECOUNTER,VEVENT,COMMENT,NONE,ZEROORONE +DECLINECOUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +DECLINECOUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS +DECLINECOUNTER,VEVENT,SEQUENCE,NONE,ZERO +DECLINECOUNTER,VEVENT,X,NONE,ZEROPLUS +DECLINECOUNTER,VEVENT,ATTACH,NONE,ZERO +DECLINECOUNTER,VEVENT,ATTENDEE,NONE,ZERO +DECLINECOUNTER,VEVENT,CATEGORIES,NONE,ZERO +DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO +DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO +DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO +DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO +DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO +DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO +DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO +DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO +DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO +DECLINECOUNTER,VEVENT,GEO,NONE,ZERO +DECLINECOUNTER,VEVENT,LASTMODIFIED,NONE,ZERO +DECLINECOUNTER,VEVENT,LOCATION,NONE,ZERO +DECLINECOUNTER,VEVENT,PRIORITY,NONE,ZERO +DECLINECOUNTER,VEVENT,RDATE,NONE,ZERO +DECLINECOUNTER,VEVENT,RELATEDTO,NONE,ZERO +DECLINECOUNTER,VEVENT,RESOURCES,NONE,ZERO +DECLINECOUNTER,VEVENT,RRULE,NONE,ZERO +DECLINECOUNTER,VEVENT,STATUS,NONE,ZERO +DECLINECOUNTER,VEVENT,SUMMARY,NONE,ZERO +DECLINECOUNTER,VEVENT,TRANSP,NONE,ZERO +DECLINECOUNTER,VEVENT,URL,NONE,ZERO +DECLINECOUNTER,VEVENT,NONE,X,ZEROPLUS +DECLINECOUNTER,VEVENT,NONE,VTODO,ZERO +DECLINECOUNTER,VEVENT,NONE,VJOURNAL,ZERO +DECLINECOUNTER,VEVENT,NONE,VFREEBUSY,ZERO +DECLINECOUNTER,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref +DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO +DECLINECOUNTER,VEVENT,RELCALID,NONE,ZEROORONE +PUBLISH,VFREEBUSY,NONE,NONE,ONEPLUS +PUBLISH,VFREEBUSY,DTSTAMP,NONE,ONE +PUBLISH,VFREEBUSY,DTSTART,NONE,ONE +PUBLISH,VFREEBUSY,DTEND,NONE,ONE +PUBLISH,VFREEBUSY,FREEBUSY,NONE,ONEPLUS +PUBLISH,VFREEBUSY,ORGANIZER,NONE,ONE +PUBLISH,VFREEBUSY,COMMENT,NONE,ZEROORONE +PUBLISH,VFREEBUSY,CONTACT,NONE,ZEROPLUS +PUBLISH,VFREEBUSY,X,NONE,ZEROPLUS +PUBLISH,VFREEBUSY,URL,NONE,ZEROORONE +PUBLISH,VFREEBUSY,ATTENDEE,NONE,ZERO +PUBLISH,VFREEBUSY,DURATION,NONE,ZERO +PUBLISH,VFREEBUSY,REQUESTSTATUS,NONE,ZERO +PUBLISH,VFREEBUSY,UID,NONE,ZERO +PUBLISH,VFREEBUSY,NONE,X,ZEROPLUS +PUBLISH,VFREEBUSY,NONE,VEVENT,ZERO +PUBLISH,VFREEBUSY,NONE,VTODO,ZERO +PUBLISH,VFREEBUSY,NONE,VJOURNAL,ZERO +PUBLISH,VFREEBUSY,NONE,VTIMEZONE,ZERO,must_if_tz_ref +PUBLISH,VFREEBUSY,NONE,VALARM,ZERO +REQUEST,VFREEBUSY,NONE,NONE,ONE +REQUEST,VFREEBUSY,ATTENDEE,NONE,ONEPLUS +REQUEST,VFREEBUSY,DTEND,NONE,ONE +REQUEST,VFREEBUSY,DTSTAMP,NONE,ONE +REQUEST,VFREEBUSY,DTSTART,NONE,ONE +REQUEST,VFREEBUSY,ORGANIZER,NONE,ONE +REQUEST,VFREEBUSY,UID,NONE,ONE +REQUEST,VFREEBUSY,COMMENT,NONE,ZEROORONE +REQUEST,VFREEBUSY,CONTACT,NONE,ZEROPLUS +REQUEST,VFREEBUSY,X,NONE,ZEROPLUS +REQUEST,VFREEBUSY,FREEBUSY,NONE,ZERO +REQUEST,VFREEBUSY,DURATION,NONE,ZERO +REQUEST,VFREEBUSY,REQUESTSTATUS,NONE,ZERO +REQUEST,VFREEBUSY,URL,NONE,ZERO +REQUEST,VFREEBUSY,NONE,X,ZEROPLUS +REQUEST,VFREEBUSY,NONE,VALARM,ZERO +REQUEST,VFREEBUSY,NONE,VEVENT,ZERO +REQUEST,VFREEBUSY,NONE,VTODO,ZERO +REQUEST,VFREEBUSY,NONE,VJOURNAL,ZERO +REQUEST,VFREEBUSY,NONE,VTIMEZONE,ZERO +REPLY,VFREEBUSY,NONE,NONE,ONE +REPLY,VFREEBUSY,ATTENDEE,NONE,ONE +REPLY,VFREEBUSY,DTSTAMP,NONE,ONE +REPLY,VFREEBUSY,DTEND,NONE,ONE +REPLY,VFREEBUSY,DTSTART,NONE,ONE +REPLY,VFREEBUSY,FREEBUSY,NONE,ONEPLUS +REPLY,VFREEBUSY,ORGANIZER,NONE,ONE +REPLY,VFREEBUSY,UID,NONE,ONE +REPLY,VFREEBUSY,COMMENT,NONE,ZEROORONE +REPLY,VFREEBUSY,CONTACT,NONE,ZEROPLUS +REPLY,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS +REPLY,VFREEBUSY,URL,NONE,ZEROORONE +REPLY,VFREEBUSY,X,NONE,ZEROPLUS +REPLY,VFREEBUSY,DURATION,NONE,ZERO +REPLY,VFREEBUSY,SEQUENCE,NONE,ZERO +REPLY,VFREEBUSY,NONE,X,ZEROPLUS +REPLY,VFREEBUSY,NONE,VALARM,ZERO +REPLY,VFREEBUSY,NONE,VEVENT,ZERO +REPLY,VFREEBUSY,NONE,VTODO,ZERO +REPLY,VFREEBUSY,NONE,VJOURNAL,ZERO +REPLY,VFREEBUSY,NONE,VTIMEZONE,ZERO +PUBLISH,VTODO,NONE,NONE,ONEPLUS +PUBLISH,VTODO,DTSTAMP,NONE,ONE +PUBLISH,VTODO,DTSTART,NONE,ONE +PUBLISH,VTODO,ORGANIZER,NONE,ONE +PUBLISH,VTODO,PRIORITY,NONE,ONE +PUBLISH,VTODO,SEQUENCE,NONE,ZEROORONE +PUBLISH,VTODO,SUMMARY,NONE,ONE +PUBLISH,VTODO,UID,NONE,ONE +PUBLISH,VTODO,ATTACH,NONE,ZEROPLUS +PUBLISH,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard +PUBLISH,VTODO,CLASS,NONE,ZEROORONE +PUBLISH,VTODO,COMMENT,NONE,ZEROORONE +PUBLISH,VTODO,CONTACT,NONE,ZEROPLUS +PUBLISH,VTODO,CREATED,NONE,ZEROORONE +PUBLISH,VTODO,DESCRIPTION,NONE,ZEROORONE +PUBLISH,VTODO,DUE,NONE,ZEROORONE +PUBLISH,VTODO,DURATION,NONE,ZEROORONE +PUBLISH,VTODO,EXDATE,NONE,ZEROPLUS +PUBLISH,VTODO,EXRULE,NONE,ZEROPLUS +PUBLISH,VTODO,GEO,NONE,ZEROORONE +PUBLISH,VTODO,LASTMODIFIED,NONE,ZEROORONE +PUBLISH,VTODO,LOCATION,NONE,ZEROORONE +PUBLISH,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +PUBLISH,VTODO,RDATE,NONE,ZEROPLUS +PUBLISH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +PUBLISH,VTODO,RELATEDTO,NONE,ZEROPLUS +PUBLISH,VTODO,RESOURCES,NONE,ZEROORONE +PUBLISH,VTODO,RRULE,NONE,ZEROPLUS +PUBLISH,VTODO,STATUS,NONE,ZEROORONE +PUBLISH,VTODO,URL,NONE,ZEROORONE +PUBLISH,VTODO,X,NONE,ZEROPLUS +PUBLISH,VTODO,ATTENDEE,NONE,ZERO +PUBLISH,VTODO,REQUESTSTATUS,NONE,ZERO +PUBLISH,VTODO,NONE,VTIMEZONE,ZEROPLUS +PUBLISH,VTODO,NONE,VALARM,ZEROPLUS +PUBLISH,VTODO,NONE,X,ZEROPLUS +PUBLISH,VTODO,NONE,VFREEBUSY,ZERO +PUBLISH,VTODO,NONE,VEVENT,ZERO +PUBLISH,VTODO,NONE,VJOURNAL,ZERO +PUBLISH,VTODO,RELCALID,NONE,ZEROORONE +REQUEST,VTODO,NONE,NONE,ONEPLUS +REQUEST,VTODO,ATTENDEE,NONE,ONEPLUS +REQUEST,VTODO,DTSTAMP,NONE,ONE +REQUEST,VTODO,DTSTART,NONE,ONE +REQUEST,VTODO,ORGANIZER,NONE,ONE +REQUEST,VTODO,PRIORITY,NONE,ONE +REQUEST,VTODO,SEQUENCE,NONE,ZEROORONE +REQUEST,VTODO,SUMMARY,NONE,ONE +REQUEST,VTODO,UID,NONE,ONE +REQUEST,VTODO,ATTACH,NONE,ZEROPLUS +REQUEST,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard +REQUEST,VTODO,CLASS,NONE,ZEROORONE +REQUEST,VTODO,COMMENT,NONE,ZEROORONE +REQUEST,VTODO,CONTACT,NONE,ZEROPLUS +REQUEST,VTODO,CREATED,NONE,ZEROORONE +REQUEST,VTODO,DESCRIPTION,NONE,ZEROORONE +REQUEST,VTODO,DUE,NONE,ZEROORONE +REQUEST,VTODO,DURATION,NONE,ZEROORONE +REQUEST,VTODO,EXDATE,NONE,ZEROPLUS +REQUEST,VTODO,EXRULE,NONE,ZEROPLUS +REQUEST,VTODO,GEO,NONE,ZEROORONE +REQUEST,VTODO,LASTMODIFIED,NONE,ZEROORONE +REQUEST,VTODO,LOCATION,NONE,ZEROORONE +REQUEST,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +REQUEST,VTODO,RDATE,NONE,ZEROPLUS +REQUEST,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS +REQUEST,VTODO,RESOURCES,NONE,ZEROORONE +REQUEST,VTODO,RRULE,NONE,ZEROPLUS +REQUEST,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +REQUEST,VTODO,URL,NONE,ZEROORONE +REQUEST,VTODO,X,NONE,ZEROPLUS +REQUEST,VTODO,REQUESTSTATUS,NONE,ZERO +REQUEST,VTODO,NONE,VALARM,ZEROPLUS +REQUEST,VTODO,NONE,VTIMEZONE,ZEROPLUS +REQUEST,VTODO,NONE,X,ZEROPLUS +REQUEST,VTODO,NONE,VEVENT,ZERO +REQUEST,VTODO,NONE,VFREEBUSY,ZERO +REQUEST,VTODO,NONE,VJOURNAL,ZERO +REQUEST,VTODO,RELCALID,NONE,ZEROORONE +REPLY,VTODO,NONE,NONE,ONEPLUS +REPLY,VTODO,ATTENDEE,NONE,ONEPLUS +REPLY,VTODO,DTSTAMP,NONE,ONE +REPLY,VTODO,ORGANIZER,NONE,ONE +REPLY,VTODO,REQUESTSTATUS,NONE,ONEPLUS +REPLY,VTODO,UID,NONE,ONE +REPLY,VTODO,ATTACH,NONE,ZEROPLUS +REPLY,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard +REPLY,VTODO,CLASS,NONE,ZEROORONE +REPLY,VTODO,COMMENT,NONE,ZEROORONE +REPLY,VTODO,CONTACT,NONE,ZEROPLUS +REPLY,VTODO,CREATED,NONE,ZEROORONE +REPLY,VTODO,DESCRIPTION,NONE,ZEROORONE +REPLY,VTODO,DTSTART,NONE,ZEROORONE +REPLY,VTODO,DUE,NONE,ZEROORONE +REPLY,VTODO,DURATION,NONE,ZEROORONE +REPLY,VTODO,EXDATE,NONE,ZEROPLUS +REPLY,VTODO,EXRULE,NONE,ZEROPLUS +REPLY,VTODO,GEO,NONE,ZEROORONE +REPLY,VTODO,LASTMODIFIED,NONE,ZEROORONE +REPLY,VTODO,LOCATION,NONE,ZEROORONE +REPLY,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +REPLY,VTODO,PRIORITY,NONE,ZEROORONE +REPLY,VTODO,RDATE,NONE,ZEROPLUS +REPLY,VTODO,RELATEDTO,NONE,ZEROPLUS +REPLY,VTODO,RESOURCES,NONE,ZEROORONE +REPLY,VTODO,RRULE,NONE,ZEROPLUS +REPLY,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REPLY,VTODO,SEQUENCE,NONE,ZEROORONE +REPLY,VTODO,STATUS,NONE,ZEROORONE +REPLY,VTODO,SUMMARY,NONE,ZEROORONE +REPLY,VTODO,URL,NONE,ZEROORONE +REPLY,VTODO,X,NONE,ZEROPLUS +REPLY,VTODO,NONE,VTIMEZONE,ZEROORONE +REPLY,VTODO,NONE,X,ZEROPLUS +REPLY,VTODO,NONE,VALARM,ZERO +REPLY,VTODO,NONE,VEVENT,ZERO +REPLY,VTODO,NONE,VFREEBUSY,ZERO +REPLY,VTODO,RELCALID,NONE,ZEROORONE +ADD,VTODO,NONE,NONE,ONE +ADD,VTODO,DTSTAMP,NONE,ONE +ADD,VTODO,ORGANIZER,NONE,ONE +ADD,VTODO,PRIORITY,NONE,ONE +ADD,VTODO,SEQUENCE,NONE,ONE +ADD,VTODO,SUMMARY,NONE,ONE +ADD,VTODO,UID,NONE,ONE +ADD,VTODO,ATTACH,NONE,ZEROPLUS +ADD,VTODO,ATTENDEE,NONE,ZEROPLUS +ADD,VTODO,CATEGORIES,NONE,ZEROPLUS +ADD,VTODO,CLASS,NONE,ZEROORONE +ADD,VTODO,COMMENT,NONE,ZEROORONE +ADD,VTODO,CONTACT,NONE,ZEROPLUS +ADD,VTODO,CREATED,NONE,ZEROORONE +ADD,VTODO,DESCRIPTION,NONE,ZEROORONE +ADD,VTODO,DTSTART,NONE,ZEROORONE +ADD,VTODO,DUE,NONE,ZEROORONE +ADD,VTODO,DURATION,NONE,ZEROORONE +ADD,VTODO,EXDATE,NONE,ZEROPLUS +ADD,VTODO,EXRULE,NONE,ZEROPLUS +ADD,VTODO,GEO,NONE,ZEROORONE +ADD,VTODO,LASTMODIFIED,NONE,ZEROORONE +ADD,VTODO,LOCATION,NONE,ZEROORONE +ADD,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +ADD,VTODO,RDATE,NONE,ZEROPLUS +ADD,VTODO,RELATEDTO,NONE,ZEROPLUS +ADD,VTODO,RESOURCES,NONE,ZEROORONE +ADD,VTODO,RRULE,NONE,ZEROPLUS +ADD,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +ADD,VTODO,URL,NONE,ZEROORONE +ADD,VTODO,X,NONE,ZEROPLUS +ADD,VTODO,RECURRENCEID,NONE,ZERO,must_be_recurring +ADD,VTODO,REQUESTSTATUS,NONE,ZERO +ADD,VTODO,NONE,VALARM,ZEROPLUS +ADD,VTODO,NONE,VTIMEZONE,ZEROPLUS +ADD,VTODO,NONE,X,ZEROPLUS +ADD,VTODO,NONE,VEVENT,ZERO +ADD,VTODO,NONE,VJOURNAL,ZERO +ADD,VTODO,NONE,VFREEBUSY,ZERO +ADD,VTODO,RELCALID,NONE,ZEROORONE +CANCEL,VTODO,NONE,NONE,ONE +CANCEL,VTODO,ATTENDEE,NONE,ZEROPLUS +CANCEL,VTODO,UID,NONE,ONE +CANCEL,VTODO,DTSTAMP,NONE,ONE +CANCEL,VTODO,ORGANIZER,NONE,ONE +CANCEL,VTODO,SEQUENCE,NONE,ONE +CANCEL,VTODO,ATTACH,NONE,ZEROPLUS +CANCEL,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard +CANCEL,VTODO,CLASS,NONE,ZEROORONE +CANCEL,VTODO,COMMENT,NONE,ZEROORONE +CANCEL,VTODO,CONTACT,NONE,ZEROPLUS +CANCEL,VTODO,CREATED,NONE,ZEROORONE +CANCEL,VTODO,DESCRIPTION,NONE,ZEROORONE +CANCEL,VTODO,DTSTART,NONE,ZEROORONE +CANCEL,VTODO,DUE,NONE,ZEROORONE +CANCEL,VTODO,DURATION,NONE,ZEROORONE +CANCEL,VTODO,EXDATE,NONE,ZEROPLUS +CANCEL,VTODO,EXRULE,NONE,ZEROPLUS +CANCEL,VTODO,GEO,NONE,ZEROORONE +CANCEL,VTODO,LASTMODIFIED,NONE,ZEROORONE +CANCEL,VTODO,LOCATION,NONE,ZEROORONE +CANCEL,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +CANCEL,VTODO,RDATE,NONE,ZEROPLUS +CANCEL,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +CANCEL,VTODO,RELATEDTO,NONE,ZEROPLUS +CANCEL,VTODO,RESOURCES,NONE,ZEROORONE +CANCEL,VTODO,RRULE,NONE,ZEROPLUS +CANCEL,VTODO,PRIORITY,NONE,ZEROORONE +CANCEL,VTODO,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee +CANCEL,VTODO,URL,NONE,ZEROORONE +CANCEL,VTODO,X,NONE,ZEROPLUS +CANCEL,VTODO,REQUESTSTATUS,NONE,ZERO +CANCEL,VTODO,NONE,VTIMEZONE,ZEROORONE +CANCEL,VTODO,NONE,X,ZEROPLUS +CANCEL,VTODO,NONE,VALARM,ZERO +CANCEL,VTODO,NONE,VEVENT,ZERO +CANCEL,VTODO,NONE,VFREEBUSY,ZERO +CANCEL,VTODO,RELCALID,NONE,ZEROORONE +REFRESH,VTODO,NONE,NONE,ONE +REFRESH,VTODO,ATTENDEE,NONE,ONE +REFRESH,VTODO,DTSTAMP,NONE,ONE +REFRESH,VTODO,UID,NONE,ONE +REFRESH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +REFRESH,VTODO,X,NONE,ZEROPLUS +REFRESH,VTODO,ATTACH,NONE,ZERO +REFRESH,VTODO,CATEGORIES,NONE,ZERO +REFRESH,VTODO,CLASS,NONE,ZERO +REFRESH,VTODO,COMMENT,NONE,ZERO +REFRESH,VTODO,CONTACT,NONE,ZERO +REFRESH,VTODO,CREATED,NONE,ZERO +REFRESH,VTODO,DESCRIPTION,NONE,ZERO +REFRESH,VTODO,DTSTART,NONE,ZERO +REFRESH,VTODO,DUE,NONE,ZERO +REFRESH,VTODO,DURATION,NONE,ZERO +REFRESH,VTODO,EXDATE,NONE,ZERO +REFRESH,VTODO,EXRULE,NONE,ZERO +REFRESH,VTODO,GEO,NONE,ZERO +REFRESH,VTODO,LASTMODIFIED,NONE,ZERO +REFRESH,VTODO,LOCATION,NONE,ZERO +REFRESH,VTODO,ORGANIZER,NONE,ZERO +REFRESH,VTODO,PERCENTCOMPLETE,NONE,ZERO +REFRESH,VTODO,PRIORITY,NONE,ZERO +REFRESH,VTODO,RDATE,NONE,ZERO +REFRESH,VTODO,RELATEDTO,NONE,ZERO +REFRESH,VTODO,REQUESTSTATUS,NONE,ZERO +REFRESH,VTODO,RESOURCES,NONE,ZERO +REFRESH,VTODO,RRULE,NONE,ZERO +REFRESH,VTODO,SEQUENCE,NONE,ZERO +REFRESH,VTODO,STATUS,NONE,ZERO +REFRESH,VTODO,URL,NONE,ZERO +REFRESH,VTODO,NONE,X,ZEROPLUS +REFRESH,VTODO,NONE,VALARM,ZERO +REFRESH,VTODO,NONE,VEVENT,ZERO +REFRESH,VTODO,NONE,VFREEBUSY,ZERO +REFRESH,VTODO,NONE,VTIMEZONE,ZERO +REFRESH,VTODO,RELCALID,NONE,ZEROORONE +COUNTER,VTODO,NONE,NONE,ONE +COUNTER,VTODO,ATTENDEE,NONE,ONEPLUS +COUNTER,VTODO,DTSTAMP,NONE,ONE +COUNTER,VTODO,ORGANIZER,NONE,ONE +COUNTER,VTODO,PRIORITY,NONE,ONE +COUNTER,VTODO,SUMMARY,NONE,ONE +COUNTER,VTODO,UID,NONE,ONE +COUNTER,VTODO,ATTACH,NONE,ZEROPLUS +COUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard +COUNTER,VTODO,CLASS,NONE,ZEROORONE +COUNTER,VTODO,COMMENT,NONE,ZEROORONE +COUNTER,VTODO,CONTACT,NONE,ZEROPLUS +COUNTER,VTODO,CREATED,NONE,ZEROORONE +COUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE +COUNTER,VTODO,DTSTART,NONE,ZEROORONE +COUNTER,VTODO,DUE,NONE,ZEROORONE +COUNTER,VTODO,DURATION,NONE,ZEROORONE +COUNTER,VTODO,EXDATE,NONE,ZEROPLUS +COUNTER,VTODO,EXRULE,NONE,ZEROPLUS +COUNTER,VTODO,GEO,NONE,ZEROORONE +COUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE +COUNTER,VTODO,LOCATION,NONE,ZEROORONE +COUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +COUNTER,VTODO,RDATE,NONE,ZEROPLUS +COUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +COUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS +COUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS +COUNTER,VTODO,RESOURCES,NONE,ZEROORONE +COUNTER,VTODO,RRULE,NONE,ZEROORONE +COUNTER,VTODO,SEQUENCE,NONE,ZEROORONE +COUNTER,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +COUNTER,VTODO,URL,NONE,ZEROORONE +COUNTER,VTODO,X,NONE,ZEROPLUS +COUNTER,VTODO,NONE,VALARM,ZEROPLUS +COUNTER,VTODO,NONE,VTIMEZONE,ZEROORONE +COUNTER,VTODO,NONE,X,ZEROPLUS +COUNTER,VTODO,NONE,VEVENT,ZERO +COUNTER,VTODO,NONE,VFREEBUSY,ZERO +COUNTER,VTODO,RELCALID,NONE,ZEROORONE +DECLINECOUNTER,VTODO,NONE,NONE,ONE +DECLINECOUNTER,VTODO,ATTENDEE,NONE,ONEPLUS +DECLINECOUNTER,VTODO,DTSTAMP,NONE,ONE +DECLINECOUNTER,VTODO,ORGANIZER,NONE,ONE +DECLINECOUNTER,VTODO,SEQUENCE,NONE,ONE +DECLINECOUNTER,VTODO,UID,NONE,ONE +DECLINECOUNTER,VTODO,ATTACH,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard +DECLINECOUNTER,VTODO,CLASS,NONE,ZEROORONE +DECLINECOUNTER,VTODO,COMMENT,NONE,ZEROORONE +DECLINECOUNTER,VTODO,CONTACT,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,CREATED,NONE,ZEROORONE +DECLINECOUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE +DECLINECOUNTER,VTODO,DTSTART,NONE,ZEROORONE +DECLINECOUNTER,VTODO,DUE,NONE,ZEROORONE +DECLINECOUNTER,VTODO,DURATION,NONE,ZEROORONE +DECLINECOUNTER,VTODO,EXDATE,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,EXRULE,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,GEO,NONE,ZEROORONE +DECLINECOUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE +DECLINECOUNTER,VTODO,LOCATION,NONE,ZEROORONE +DECLINECOUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +DECLINECOUNTER,VTODO,PRIORITY,NONE,ZEROORONE +DECLINECOUNTER,VTODO,RDATE,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +DECLINECOUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,RESOURCES,NONE,ZEROORONE +DECLINECOUNTER,VTODO,RRULE,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,STATUS,NONE,ZEROORONE +DECLINECOUNTER,VTODO,URL,NONE,ZEROORONE +DECLINECOUNTER,VTODO,X,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,VTIMEZONE,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,X,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,VALARM,ZERO +DECLINECOUNTER,VTODO,NONE,VEVENT,ZERO +DECLINECOUNTER,VTODO,NONE,VFREEBUSY,ZERO +DECLINECOUNTER,VTODO,RELCALID,NONE,ZEROORONE +PUBLISH,VJOURNAL,NONE,NONE,ONEPLUS +PUBLISH,VJOURNAL,DESCRIPTION,NONE,ONE +PUBLISH,VJOURNAL,DTSTAMP,NONE,ONE +PUBLISH,VJOURNAL,DTSTART,NONE,ONE +PUBLISH,VJOURNAL,ORGANIZER,NONE,ONE +PUBLISH,VJOURNAL,UID,NONE,ONE +PUBLISH,VJOURNAL,ATTACH,NONE,ZEROPLUS +PUBLISH,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard +PUBLISH,VJOURNAL,CLASS,NONE,ZEROORONE +PUBLISH,VJOURNAL,COMMENT,NONE,ZEROORONE +PUBLISH,VJOURNAL,CONTACT,NONE,ZEROPLUS +PUBLISH,VJOURNAL,CREATED,NONE,ZEROORONE +PUBLISH,VJOURNAL,EXDATE,NONE,ZEROPLUS +PUBLISH,VJOURNAL,EXRULE,NONE,ZEROPLUS +PUBLISH,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE +PUBLISH,VJOURNAL,RDATE,NONE,ZEROPLUS +PUBLISH,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS +PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE +PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE,may_be_draft_final_canceled +PUBLISH,VJOURNAL,SUMMARY,NONE,ZEROORONE +PUBLISH,VJOURNAL,URL,NONE,ZEROORONE +PUBLISH,VJOURNAL,X,NONE,ZEROPLUS +PUBLISH,VJOURNAL,ATTENDEE,NONE,ZERO +PUBLISH,VJOURNAL,NONE,VALARM,ZEROPLUS +PUBLISH,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS +PUBLISH,VJOURNAL,NONE,X,ZEROPLUS +PUBLISH,VJOURNAL,NONE,VEVENT,ZERO +PUBLISH,VJOURNAL,NONE,VFREEBUSY,ZERO +PUBLISH,VJOURNAL,NONE,VTODO,ZERO +ADD,VJOURNAL,NONE,NONE,ONE +ADD,VJOURNAL,DESCRIPTION,NONE,ONE +ADD,VJOURNAL,DTSTAMP,NONE,ONE +ADD,VJOURNAL,DTSTART,NONE,ONE +ADD,VJOURNAL,ORGANIZER,NONE,ONE +ADD,VJOURNAL,SEQUENCE,NONE,ONE +ADD,VJOURNAL,UID,NONE,ONE +ADD,VJOURNAL,ATTACH,NONE,ZEROPLUS +ADD,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard +ADD,VJOURNAL,CLASS,NONE,ZEROORONE +ADD,VJOURNAL,COMMENT,NONE,ZEROORONE +ADD,VJOURNAL,CONTACT,NONE,ZEROPLUS +ADD,VJOURNAL,CREATED,NONE,ZEROORONE +ADD,VJOURNAL,EXDATE,NONE,ZEROPLUS +ADD,VJOURNAL,EXRULE,NONE,ZEROPLUS +ADD,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE +ADD,VJOURNAL,RDATE,NONE,ZEROPLUS +ADD,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +ADD,VJOURNAL,RRULE,NONE,ZEROPLUS +ADD,VJOURNAL,STATUS,NONE,ZEROORONE +ADD,VJOURNAL,SUMMARY,NONE,ZEROORONE +ADD,VJOURNAL,URL,NONE,ZEROORONE +ADD,VJOURNAL,X,NONE,ZEROPLUS +ADD,VJOURNAL,ATTENDEE,NONE,ZERO +ADD,VJOURNAL,RECURRENCEID,NONE,ZERO +ADD,VJOURNAL,NONE,VALARM,ZEROPLUS +ADD,VJOURNAL,NONE,VTIMEZONE,ZEROORONE +ADD,VJOURNAL,NONE,X,ZEROPLUS +ADD,VJOURNAL,NONE,VEVENT,ZERO +ADD,VJOURNAL,NONE,VFREEBUSY,ZERO +ADD,VJOURNAL,NONE,VTODO,ZERO +CANCEL,VJOURNAL,NONE,NONE,ONEPLUS +CANCEL,VJOURNAL,DTSTAMP,NONE,ONE +CANCEL,VJOURNAL,ORGANIZER,NONE,ONE +CANCEL,VJOURNAL,SEQUENCE,NONE,ONE +CANCEL,VJOURNAL,UID,NONE,ONE +CANCEL,VJOURNAL,ATTACH,NONE,ZEROPLUS +CANCEL,VJOURNAL,ATTENDEE,NONE,ZEROPLUS +CANCEL,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard +CANCEL,VJOURNAL,CLASS,NONE,ZEROORONE +CANCEL,VJOURNAL,COMMENT,NONE,ZEROORONE +CANCEL,VJOURNAL,CONTACT,NONE,ZEROPLUS +CANCEL,VJOURNAL,CREATED,NONE,ZEROORONE +CANCEL,VJOURNAL,DESCRIPTION,NONE,ZEROORONE +CANCEL,VJOURNAL,DTSTART,NONE,ZEROORONE +CANCEL,VJOURNAL,EXDATE,NONE,ZEROPLUS +CANCEL,VJOURNAL,EXRULE,NONE,ZEROPLUS +CANCEL,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE +CANCEL,VJOURNAL,RDATE,NONE,ZEROPLUS +CANCEL,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS +CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present +CANCEL,VJOURNAL,SUMMARY,NONE,ZEROORONE +CANCEL,VJOURNAL,URL,NONE,ZEROORONE +CANCEL,VJOURNAL,X,NONE,ZEROPLUS +CANCEL,VJOURNAL,REQUESTSTATUS,NONE,ZERO +CANCEL,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS +CANCEL,VJOURNAL,NONE,X,ZEROPLUS +CANCEL,VJOURNAL,NONE,VALARM,ZERO +CANCEL,VJOURNAL,NONE,VEVENT,ZERO +CANCEL,VJOURNAL,NONE,VFREEBUSY,ZERO +CANCEL,VJOURNAL,NONE,VTODO,ZERO +PUBLISH,VAGENDA,NONE,NONE,ONEPLUS +PUBLISH,VAGENDA,CALMASTER,NONE,ONE +PUBLISH,VAGENDA,OWNER,NONE,ZEROORONE +PUBLISH,VAGENDA,RELCALID,NONE,ZEROORONE +PUBLISH,VAGENDA,TZID,NONE,ONE +REQUEST,VAGENDA,NONE,NONE,ONEPLUS +REQUEST,VAGENDA,CALMASTER,NONE,ONE +REQUEST,VAGENDA,OWNER,NONE,ZEROORONE +REQUEST,VAGENDA,RELCALID,NONE,ZEROORONE +REQUEST,VAGENDA,TZID,NONE,ONE +REPLY,VAGENDA,NONE,NONE,ONEPLUS +REPLY,VAGENDA,CALMASTER,NONE,ONE +REPLY,VAGENDA,OWNER,NONE,ZEROORONE +REPLY,VAGENDA,RELCALID,NONE,ZEROORONE +REPLY,VAGENDA,TZID,NONE,ONE +ADD,VAGENDA,NONE,NONE,ONEPLUS +ADD,VAGENDA,CALMASTER,NONE,ONE +ADD,VAGENDA,OWNER,NONE,ZEROORONE +ADD,VAGENDA,RELCALID,NONE,ZEROORONE +ADD,VAGENDA,TZID,NONE,ONE +CANCEL,VAGENDA,NONE,NONE,ONEPLUS +CANCEL,VAGENDA,CALMASTER,NONE,ONE +CANCEL,VAGENDA,OWNER,NONE,ZEROORONE +CANCEL,VAGENDA,RELCALID,NONE,ZEROORONE +CANCEL,VAGENDA,TZID,NONE,ONE +REFRESH,VAGENDA,NONE,NONE,ONEPLUS +REFRESH,VAGENDA,CALMASTER,NONE,ONE +REFRESH,VAGENDA,OWNER,NONE,ZEROORONE +REFRESH,VAGENDA,RELCALID,NONE,ZEROORONE +REFRESH,VAGENDA,TZID,NONE,ONE +COUNTER,VAGENDA,NONE,NONE,ONEPLUS +COUNTER,VAGENDA,CALMASTER,NONE,ONE +COUNTER,VAGENDA,OWNER,NONE,ZEROORONE +COUNTER,VAGENDA,RELCALID,NONE,ZEROORONE +COUNTER,VAGENDA,TZID,NONE,ONE +DECLINECOUNTER,VAGENDA,NONE,NONE,ONEPLUS +DECLINECOUNTER,VAGENDA,CALMASTER,NONE,ONE +DECLINECOUNTER,VAGENDA,OWNER,NONE,ZEROORONE +DECLINECOUNTER,VAGENDA,RELCALID,NONE,ZEROORONE +DECLINECOUNTER,VAGENDA,TZID,NONE,ONE +NONE,VAGENDA,ALLOWCONFLICT,NONE,ONE +NONE,VAGENDA,CALMASTER,NONE,ONE +NONE,VAGENDA,OWNER,NONE,ZEROORONE +NONE,VAGENDA,RELCALID,NONE,ZEROORONE +NONE,VAGENDA,TZID,NONE,ONE +NONE,VAGENDA,DEFAULTCHARSET,NONE,ONE +NONE,VAGENDA,DEFAULTLOCALE,NONE,ONE +NONE,VAGENDA,DEFAULTTZID,NONE,ONE +NONE,VCALENDAR,ACTION,NONE,ZERO +NONE,VCALENDAR,ATTACH,NONE,ZERO +NONE,VCALENDAR,ATTENDEE,NONE,ZERO +NONE,VCALENDAR,RELCALID,NONE,ZEROORONE +NONE,VCALENDAR,CALSCALE,NONE,ZEROORONE +NONE,VCALENDAR,CATEGORIES,NONE,ZERO +NONE,VCALENDAR,CLASS,NONE,ZERO +NONE,VCALENDAR,COMMENT,NONE,ZERO +NONE,VCALENDAR,COMPLETED,NONE,ZERO +NONE,VCALENDAR,CONTACT,NONE,ZERO +NONE,VCALENDAR,CREATED,NONE,ZERO +NONE,VCALENDAR,DESCRIPTION,NONE,ZERO +NONE,VCALENDAR,DTEND,NONE,ZERO +NONE,VCALENDAR,DTSTAMP,NONE,ZERO +NONE,VCALENDAR,DTSTART,NONE,ZERO +NONE,VCALENDAR,DUE,NONE,ZERO +NONE,VCALENDAR,DURATION,NONE,ZERO +NONE,VCALENDAR,EXDATE,NONE,ZERO +NONE,VCALENDAR,EXRULE,NONE,ZERO +NONE,VCALENDAR,FREEBUSY,NONE,ZERO +NONE,VCALENDAR,GEO,NONE,ZERO +NONE,VCALENDAR,LASTMODIFIED,NONE,ZERO +NONE,VCALENDAR,LOCATION,NONE,ZERO +NONE,VCALENDAR,METHOD,NONE,ZEROORONE +NONE,VCALENDAR,ORGANIZER,NONE,ZERO +NONE,VCALENDAR,PERCENTCOMPLETE,NONE,ZERO +NONE,VCALENDAR,PRIORITY,NONE,ZERO +NONE,VCALENDAR,PRODID,NONE,ONE +NONE,VCALENDAR,RDATE,NONE,ZERO +NONE,VCALENDAR,RECURRENCEID,NONE,ZERO +NONE,VCALENDAR,RELATEDTO,NONE,ZERO +NONE,VCALENDAR,REPEAT,NONE,ZERO +NONE,VCALENDAR,REQUESTSTATUS,NONE,ZERO +NONE,VCALENDAR,RESOURCES,NONE,ZERO +NONE,VCALENDAR,RRULE,NONE,ZERO +NONE,VCALENDAR,SEQUENCE,NONE,ZERO +NONE,VCALENDAR,STATUS,NONE,ZERO +NONE,VCALENDAR,SUMMARY,NONE,ZERO +NONE,VCALENDAR,TRANSP,NONE,ZERO +NONE,VCALENDAR,TRIGGER,NONE,ZERO +NONE,VCALENDAR,TZID,NONE,ZERO +NONE,VCALENDAR,TZNAME,NONE,ZERO +NONE,VCALENDAR,TZOFFSETFROM,NONE,ZERO +NONE,VCALENDAR,TZOFFSETTO,NONE,ZERO +NONE,VCALENDAR,TZURL,NONE,ZERO +NONE,VCALENDAR,UID,NONE,ZERO +NONE,VCALENDAR,URL,NONE,ZERO +NONE,VCALENDAR,VERSION,NONE,ONE +NONE,VCALENDAR,X,NONE,ZEROPLUS +NONE,VEVENT,ACTION,NONE,ZERO +NONE,VEVENT,ATTACH,NONE,ZEROPLUS +NONE,VEVENT,ATTENDEE,NONE,ZEROPLUS +NONE,VEVENT,CALSCALE,NONE,ZERO +NONE,VEVENT,CATEGORIES,NONE,ZEROPLUS +NONE,VEVENT,CLASS,NONE,ZEROORONE +NONE,VEVENT,COMMENT,NONE,ZEROPLUS +NONE,VEVENT,COMPLETED,NONE,ZERO +NONE,VEVENT,CONTACT,NONE,ZEROPLUS +NONE,VEVENT,CREATED,NONE,ZEROORONE +NONE,VEVENT,DESCRIPTION,NONE,ZEROORONE +NONE,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration +NONE,VEVENT,DTSTAMP,NONE,ZEROORONE +NONE,VEVENT,DTSTART,NONE,ZEROORONE +NONE,VEVENT,DUE,NONE,ZERO +NONE,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend +NONE,VEVENT,EXDATE,NONE,ZEROPLUS +NONE,VEVENT,EXRULE,NONE,ZEROPLUS +NONE,VEVENT,FREEBUSY,NONE,ZERO +NONE,VEVENT,GEO,NONE,ZEROORONE +NONE,VEVENT,LASTMODIFIED,NONE,ZEROORONE +NONE,VEVENT,LOCATION,NONE,ZEROORONE +NONE,VEVENT,METHOD,NONE,ZERO +NONE,VEVENT,ORGANIZER,NONE,ZEROORONE +NONE,VEVENT,PERCENTCOMPLETE,NONE,ZERO +NONE,VEVENT,PRIORITY,NONE,ZEROORONE +NONE,VEVENT,PRODID,NONE,ZERO +NONE,VEVENT,RDATE,NONE,ZEROPLUS +NONE,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +NONE,VEVENT,RELATEDTO,NONE,ZEROPLUS +NONE,VEVENT,REPEAT,NONE,ZERO +NONE,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS +NONE,VEVENT,RESOURCES,NONE,ZEROPLUS +NONE,VEVENT,RRULE,NONE,ZEROPLUS +NONE,VEVENT,SEQUENCE,NONE,ZEROORONE +NONE,VEVENT,STATUS,NONE,ZEROORONE +NONE,VEVENT,SUMMARY,NONE,ZEROORONE +NONE,VEVENT,TRANSP,NONE,ZEROORONE +NONE,VEVENT,TRIGGER,NONE,ZERO +NONE,VEVENT,TZID,NONE,ZERO +NONE,VEVENT,TZNAME,NONE,ZERO +NONE,VEVENT,TZOFFSETFROM,NONE,ZERO +NONE,VEVENT,TZOFFSETTO,NONE,ZERO +NONE,VEVENT,TZURL,NONE,ZERO +NONE,VEVENT,UID,NONE,ZEROORONE +NONE,VEVENT,URL,NONE,ZEROORONE +NONE,VEVENT,VERSION,NONE,ZERO +NONE,VEVENT,X,NONE,ZEROPLUS +NONE,VEVENT,RELCALID,NONE,ZEROORONE +NONE,VTODO,ACTION,NONE,ZERO +NONE,VTODO,ATTACH,NONE,ZEROPLUS +NONE,VTODO,ATTENDEE,NONE,ZEROPLUS +NONE,VTODO,CALSCALE,NONE,ZERO +NONE,VTODO,CATEGORIES,NONE,ZEROPLUS +NONE,VTODO,CLASS,NONE,ZEROORONE +NONE,VTODO,COMMENT,NONE,ZEROPLUS +NONE,VTODO,COMPLETED,NONE,ZEROORONE +NONE,VTODO,CONTACT,NONE,ZEROPLUS +NONE,VTODO,CREATED,NONE,ZEROORONE +NONE,VTODO,DESCRIPTION,NONE,ZEROORONE +NONE,VTODO,DTEND,NONE,ZERO +NONE,VTODO,DTSTAMP,NONE,ZEROORONE +NONE,VTODO,DTSTART,NONE,ZEROORONE +NONE,VTODO,DUE,NONE,ONEEXCLUSIVE +NONE,VTODO,DURATION,NONE,ONEEXCLUSIVE +NONE,VTODO,EXDATE,NONE,ZEROPLUS +NONE,VTODO,EXRULE,NONE,ZEROPLUS +NONE,VTODO,FREEBUSY,NONE,ZERO +NONE,VTODO,GEO,NONE,ZEROORONE +NONE,VTODO,LASTMODIFIED,NONE,ZEROORONE +NONE,VTODO,LOCATION,NONE,ZEROORONE +NONE,VTODO,METHOD,NONE,ZERO +NONE,VTODO,ORGANIZER,NONE,ZEROORONE +NONE,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE +NONE,VTODO,PRIORITY,NONE,ZEROORONE +NONE,VTODO,PRODID,NONE,ZERO +NONE,VTODO,RDATE,NONE,ZEROPLUS +NONE,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +NONE,VTODO,RELATEDTO,NONE,ZEROPLUS +NONE,VTODO,REPEAT,NONE,ZERO +NONE,VTODO,REQUESTSTATUS,NONE,ZEROPLUS +NONE,VTODO,RESOURCES,NONE,ZEROPLUS +NONE,VTODO,RRULE,NONE,ZEROPLUS +NONE,VTODO,SEQUENCE,NONE,ZEROORONE +NONE,VTODO,STATUS,NONE,ZEROORONE +NONE,VTODO,SUMMARY,NONE,ZEROORONE +NONE,VTODO,TRANSP,NONE,ZERO +NONE,VTODO,TRIGGER,NONE,ZERO +NONE,VTODO,TZID,NONE,ZERO +NONE,VTODO,TZNAME,NONE,ZERO +NONE,VTODO,TZOFFSETFROM,NONE,ZERO +NONE,VTODO,TZOFFSETTO,NONE,ZERO +NONE,VTODO,TZURL,NONE,ZERO +NONE,VTODO,UID,NONE,ZEROORONE +NONE,VTODO,URL,NONE,ZEROORONE +NONE,VTODO,VERSION,NONE,ZERO +NONE,VTODO,X,NONE,ZEROPLUS +NONE,VTODO,RELCALID,NONE,ZEROORONE +NONE,VJOURNAL,ACTION,NONE,ZERO +NONE,VJOURNAL,ATTACH,NONE,ZEROPLUS +NONE,VJOURNAL,ATTENDEE,NONE,ZEROPLUS +NONE,VJOURNAL,CALSCALE,NONE,ZERO +NONE,VJOURNAL,CATEGORIES,NONE,ZEROPLUS +NONE,VJOURNAL,CLASS,NONE,ZEROORONE +NONE,VJOURNAL,COMMENT,NONE,ZEROPLUS +NONE,VJOURNAL,COMPLETED,NONE,ZERO +NONE,VJOURNAL,CONTACT,NONE,ZEROPLUS +NONE,VJOURNAL,CREATED,NONE,ZEROORONE +NONE,VJOURNAL,DESCRIPTION,NONE,ZEROORONE +NONE,VJOURNAL,DTEND,NONE,ZERO +NONE,VJOURNAL,DTSTAMP,NONE,ZEROORONE +NONE,VJOURNAL,DTSTART,NONE,ZEROORONE +NONE,VJOURNAL,DUE,NONE,ONEEXCLUSIVE +NONE,VJOURNAL,DURATION,NONE,ONEEXCLUSIVE +NONE,VJOURNAL,EXDATE,NONE,ZEROPLUS +NONE,VJOURNAL,EXRULE,NONE,ZEROPLUS +NONE,VJOURNAL,FREEBUSY,NONE,ZERO +NONE,VJOURNAL,GEO,NONE,ZERO +NONE,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE +NONE,VJOURNAL,LOCATION,NONE,ZERO +NONE,VJOURNAL,METHOD,NONE,ZERO +NONE,VJOURNAL,ORGANIZER,NONE,ZEROORONE +NONE,VJOURNAL,PERCENTCOMPLETE,NONE,ZERO +NONE,VJOURNAL,PRIORITY,NONE,ZERO +NONE,VJOURNAL,PRODID,NONE,ZERO +NONE,VJOURNAL,RDATE,NONE,ZEROPLUS +NONE,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring +NONE,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +NONE,VJOURNAL,REPEAT,NONE,ZERO +NONE,VJOURNAL,REQUESTSTATUS,NONE,ZEROPLUS +NONE,VJOURNAL,RESOURCES,NONE,ZERO +NONE,VJOURNAL,RRULE,NONE,ZEROPLUS +NONE,VJOURNAL,SEQUENCE,NONE,ZEROORONE +NONE,VJOURNAL,STATUS,NONE,ZEROORONE +NONE,VJOURNAL,SUMMARY,NONE,ZEROORONE +NONE,VJOURNAL,TRANSP,NONE,ZERO +NONE,VJOURNAL,TRIGGER,NONE,ZERO +NONE,VJOURNAL,TZID,NONE,ZERO +NONE,VJOURNAL,TZNAME,NONE,ZERO +NONE,VJOURNAL,TZOFFSETFROM,NONE,ZERO +NONE,VJOURNAL,TZOFFSETTO,NONE,ZERO +NONE,VJOURNAL,TZURL,NONE,ZERO +NONE,VJOURNAL,UID,NONE,ZEROORONE +NONE,VJOURNAL,URL,NONE,ZEROORONE +NONE,VJOURNAL,VERSION,NONE,ZERO +NONE,VJOURNAL,X,NONE,ZEROPLUS +NONE,VFREEBUSY,ACTION,NONE,ZERO +NONE,VFREEBUSY,ATTACH,NONE,ZERO +NONE,VFREEBUSY,ATTENDEE,NONE,ZEROPLUS +NONE,VFREEBUSY,CALSCALE,NONE,ZERO +NONE,VFREEBUSY,CATEGORIES,NONE,ZERO +NONE,VFREEBUSY,CLASS,NONE,ZERO +NONE,VFREEBUSY,COMMENT,NONE,ZEROPLUS +NONE,VFREEBUSY,COMPLETED,NONE,ZERO +NONE,VFREEBUSY,CONTACT,NONE,ZEROORONE +NONE,VFREEBUSY,CREATED,NONE,ZERO +NONE,VFREEBUSY,DESCRIPTION,NONE,ZERO +NONE,VFREEBUSY,DTEND,NONE,ZEROORONE +NONE,VFREEBUSY,DTSTAMP,NONE,ZERO +NONE,VFREEBUSY,DTSTART,NONE,ZEROORONE +NONE,VFREEBUSY,DUE,NONE,ZERO +NONE,VFREEBUSY,DURATION,NONE,ZEROORONE +NONE,VFREEBUSY,EXDATE,NONE,ZERO +NONE,VFREEBUSY,EXRULE,NONE,ZERO +NONE,VFREEBUSY,FREEBUSY,NONE,ZEROPLUS +NONE,VFREEBUSY,GEO,NONE,ZERO +NONE,VFREEBUSY,LASTMODIFIED,NONE,ZERO +NONE,VFREEBUSY,LOCATION,NONE,ZERO +NONE,VFREEBUSY,METHOD,NONE,ZERO +NONE,VFREEBUSY,ORGANIZER,NONE,ZEROORONE +NONE,VFREEBUSY,PERCENTCOMPLETE,NONE,ZERO +NONE,VFREEBUSY,PRIORITY,NONE,ZERO +NONE,VFREEBUSY,PRODID,NONE,ZERO +NONE,VFREEBUSY,RDATE,NONE,ZERO +NONE,VFREEBUSY,RECURRENCEID,NONE,ZERO +NONE,VFREEBUSY,RELATEDTO,NONE,ZERO +NONE,VFREEBUSY,REPEAT,NONE,ZERO +NONE,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS +NONE,VFREEBUSY,RESOURCES,NONE,ZERO +NONE,VFREEBUSY,RRULE,NONE,ZERO +NONE,VFREEBUSY,SEQUENCE,NONE,ZERO +NONE,VFREEBUSY,STATUS,NONE,ZERO +NONE,VFREEBUSY,SUMMARY,NONE,ZERO +NONE,VFREEBUSY,TRANSP,NONE,ZERO +NONE,VFREEBUSY,TRIGGER,NONE,ZERO +NONE,VFREEBUSY,TZID,NONE,ZERO +NONE,VFREEBUSY,TZNAME,NONE,ZERO +NONE,VFREEBUSY,TZOFFSETFROM,NONE,ZERO +NONE,VFREEBUSY,TZOFFSETTO,NONE,ZERO +NONE,VFREEBUSY,TZURL,NONE,ZERO +NONE,VFREEBUSY,UID,NONE,ZEROORONE +NONE,VFREEBUSY,URL,NONE,ZEROORONE +NONE,VFREEBUSY,VERSION,NONE,ZERO +NONE,VFREEBUSY,X,NONE,ZEROPLUS +NONE,VTIMEZONE,ACTION,NONE,ZERO +NONE,VTIMEZONE,ATTACH,NONE,ZERO +NONE,VTIMEZONE,ATTENDEE,NONE,ZERO +NONE,VTIMEZONE,CALSCALE,NONE,ZERO +NONE,VTIMEZONE,CATEGORIES,NONE,ZERO +NONE,VTIMEZONE,CLASS,NONE,ZERO +NONE,VTIMEZONE,COMMENT,NONE,ZERO +NONE,VTIMEZONE,COMPLETED,NONE,ZERO +NONE,VTIMEZONE,CONTACT,NONE,ZERO +NONE,VTIMEZONE,CREATED,NONE,ZERO +NONE,VTIMEZONE,DESCRIPTION,NONE,ZERO +NONE,VTIMEZONE,DTEND,NONE,ZERO +NONE,VTIMEZONE,DTSTAMP,NONE,ZERO +NONE,VTIMEZONE,DTSTART,NONE,ZERO +NONE,VTIMEZONE,DUE,NONE,ZERO +NONE,VTIMEZONE,DURATION,NONE,ZERO +NONE,VTIMEZONE,EXDATE,NONE,ZERO +NONE,VTIMEZONE,EXRULE,NONE,ZERO +NONE,VTIMEZONE,FREEBUSY,NONE,ZERO +NONE,VTIMEZONE,GEO,NONE,ZERO +NONE,VTIMEZONE,LASTMODIFIED,NONE,ZEROORONE +NONE,VTIMEZONE,LOCATION,NONE,ZERO +NONE,VTIMEZONE,METHOD,NONE,ZERO +NONE,VTIMEZONE,ORGANIZER,NONE,ZERO +NONE,VTIMEZONE,PERCENTCOMPLETE,NONE,ZERO +NONE,VTIMEZONE,PRIORITY,NONE,ZERO +NONE,VTIMEZONE,PRODID,NONE,ZERO +NONE,VTIMEZONE,RDATE,NONE,ZERO +NONE,VTIMEZONE,RECURRENCEID,NONE,ZERO +NONE,VTIMEZONE,RELATEDTO,NONE,ZERO +NONE,VTIMEZONE,REPEAT,NONE,ZERO +NONE,VTIMEZONE,REQUESTSTATUS,NONE,ZERO +NONE,VTIMEZONE,RESOURCES,NONE,ZERO +NONE,VTIMEZONE,RRULE,NONE,ZERO +NONE,VTIMEZONE,SEQUENCE,NONE,ZERO +NONE,VTIMEZONE,STATUS,NONE,ZERO +NONE,VTIMEZONE,SUMMARY,NONE,ZERO +NONE,VTIMEZONE,TRANSP,NONE,ZERO +NONE,VTIMEZONE,TRIGGER,NONE,ZERO +NONE,VTIMEZONE,TZID,NONE,ONE +NONE,VTIMEZONE,TZNAME,NONE,ZERO +NONE,VTIMEZONE,TZOFFSETFROM,NONE,ZERO +NONE,VTIMEZONE,TZOFFSETTO,NONE,ZERO +NONE,VTIMEZONE,TZURL,NONE,ZEROPLUS +NONE,VTIMEZONE,UID,NONE,ZERO +NONE,VTIMEZONE,URL,NONE,ZERO +NONE,VTIMEZONE,VERSION,NONE,ZERO +NONE,VTIMEZONE,X,NONE,ZEROORONE +NONE,VTIMEZONE,NONE,XSTANDARD,ZEROPLUS +NONE,VTIMEZONE,NONE,XDAYLIGHT,ZEROPLUS +NONE,XSTANDARD,ACTION,NONE,ZERO +NONE,XSTANDARD,ATTACH,NONE,ZERO +NONE,XSTANDARD,ATTENDEE,NONE,ZERO +NONE,XSTANDARD,CALSCALE,NONE,ZERO +NONE,XSTANDARD,CATEGORIES,NONE,ZERO +NONE,XSTANDARD,CLASS,NONE,ZERO +NONE,XSTANDARD,COMMENT,NONE,ZEROPLUS +NONE,XSTANDARD,COMPLETED,NONE,ZERO +NONE,XSTANDARD,CONTACT,NONE,ZERO +NONE,XSTANDARD,CREATED,NONE,ZERO +NONE,XSTANDARD,DESCRIPTION,NONE,ZERO +NONE,XSTANDARD,DTEND,NONE,ZERO +NONE,XSTANDARD,DTSTAMP,NONE,ZERO +NONE,XSTANDARD,DTSTART,NONE,ONE +NONE,XSTANDARD,DUE,NONE,ZERO +NONE,XSTANDARD,DURATION,NONE,ZERO +NONE,XSTANDARD,EXDATE,NONE,ZERO +NONE,XSTANDARD,EXRULE,NONE,ZERO +NONE,XSTANDARD,FREEBUSY,NONE,ZERO +NONE,XSTANDARD,GEO,NONE,ZERO +NONE,XSTANDARD,LASTMODIFIED,NONE,ZERO +NONE,XSTANDARD,LOCATION,NONE,ZERO +NONE,XSTANDARD,METHOD,NONE,ZERO +NONE,XSTANDARD,ORGANIZER,NONE,ZERO +NONE,XSTANDARD,PERCENTCOMPLETE,NONE,ZERO +NONE,XSTANDARD,PRIORITY,NONE,ZERO +NONE,XSTANDARD,PRODID,NONE,ZERO +NONE,XSTANDARD,RDATE,NONE,ZEROPLUS +NONE,XSTANDARD,RECURRENCEID,NONE,ZERO +NONE,XSTANDARD,RELATEDTO,NONE,ZERO +NONE,XSTANDARD,REPEAT,NONE,ZERO +NONE,XSTANDARD,REQUESTSTATUS,NONE,ZERO +NONE,XSTANDARD,RESOURCES,NONE,ZERO +NONE,XSTANDARD,RRULE,NONE,ZEROPLUS +NONE,XSTANDARD,SEQUENCE,NONE,ZERO +NONE,XSTANDARD,STATUS,NONE,ZERO +NONE,XSTANDARD,SUMMARY,NONE,ZERO +NONE,XSTANDARD,TRANSP,NONE,ZERO +NONE,XSTANDARD,TRIGGER,NONE,ZERO +NONE,XSTANDARD,TZID,NONE,ZERO +NONE,XSTANDARD,TZNAME,NONE,ZEROPLUS +NONE,XSTANDARD,TZOFFSETFROM,NONE,ONE +NONE,XSTANDARD,TZOFFSETTO,NONE,ONE +NONE,XSTANDARD,TZURL,NONE,ZERO +NONE,XSTANDARD,UID,NONE,ZERO +NONE,XSTANDARD,URL,NONE,ZERO +NONE,XSTANDARD,VERSION,NONE,ZERO +NONE,XSTANDARD,X,NONE,ZEROPLUS +NONE,XDAYLIGHT,ACTION,NONE,ZERO +NONE,XDAYLIGHT,ATTACH,NONE,ZERO +NONE,XDAYLIGHT,ATTENDEE,NONE,ZERO +NONE,XDAYLIGHT,CALSCALE,NONE,ZERO +NONE,XDAYLIGHT,CATEGORIES,NONE,ZERO +NONE,XDAYLIGHT,CLASS,NONE,ZERO +NONE,XDAYLIGHT,COMMENT,NONE,ZEROPLUS +NONE,XDAYLIGHT,COMPLETED,NONE,ZERO +NONE,XDAYLIGHT,CONTACT,NONE,ZERO +NONE,XDAYLIGHT,CREATED,NONE,ZERO +NONE,XDAYLIGHT,DESCRIPTION,NONE,ZERO +NONE,XDAYLIGHT,DTEND,NONE,ZERO +NONE,XDAYLIGHT,DTSTAMP,NONE,ZERO +NONE,XDAYLIGHT,DTSTART,NONE,ONE +NONE,XDAYLIGHT,DUE,NONE,ZERO +NONE,XDAYLIGHT,DURATION,NONE,ZERO +NONE,XDAYLIGHT,EXDATE,NONE,ZERO +NONE,XDAYLIGHT,EXRULE,NONE,ZERO +NONE,XDAYLIGHT,FREEBUSY,NONE,ZERO +NONE,XDAYLIGHT,GEO,NONE,ZERO +NONE,XDAYLIGHT,LASTMODIFIED,NONE,ZERO +NONE,XDAYLIGHT,LOCATION,NONE,ZERO +NONE,XDAYLIGHT,METHOD,NONE,ZERO +NONE,XDAYLIGHT,ORGANIZER,NONE,ZERO +NONE,XDAYLIGHT,PERCENTCOMPLETE,NONE,ZERO +NONE,XDAYLIGHT,PRIORITY,NONE,ZERO +NONE,XDAYLIGHT,PRODID,NONE,ZERO +NONE,XDAYLIGHT,RDATE,NONE,ZEROPLUS +NONE,XDAYLIGHT,RECURRENCEID,NONE,ZERO +NONE,XDAYLIGHT,RELATEDTO,NONE,ZERO +NONE,XDAYLIGHT,REPEAT,NONE,ZERO +NONE,XDAYLIGHT,REQUESTSTATUS,NONE,ZERO +NONE,XDAYLIGHT,RESOURCES,NONE,ZERO +NONE,XDAYLIGHT,RRULE,NONE,ZEROPLUS +NONE,XDAYLIGHT,SEQUENCE,NONE,ZERO +NONE,XDAYLIGHT,STATUS,NONE,ZERO +NONE,XDAYLIGHT,SUMMARY,NONE,ZERO +NONE,XDAYLIGHT,TRANSP,NONE,ZERO +NONE,XDAYLIGHT,TRIGGER,NONE,ZERO +NONE,XDAYLIGHT,TZID,NONE,ZERO +NONE,XDAYLIGHT,TZNAME,NONE,ZEROPLUS +NONE,XDAYLIGHT,TZOFFSETFROM,NONE,ONE +NONE,XDAYLIGHT,TZOFFSETTO,NONE,ONE +NONE,XDAYLIGHT,TZURL,NONE,ZERO +NONE,XDAYLIGHT,UID,NONE,ZERO +NONE,XDAYLIGHT,URL,NONE,ZERO +NONE,XDAYLIGHT,VERSION,NONE,ZERO +NONE,XDAYLIGHT,X,NONE,ZEROPLUS +NONE,XAUDIOALARM,ACTION,NONE,ONE +NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE +NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO +NONE,XAUDIOALARM,CALSCALE,NONE,ZERO +NONE,XAUDIOALARM,CATEGORIES,NONE,ZERO +NONE,XAUDIOALARM,CLASS,NONE,ZERO +NONE,XAUDIOALARM,COMMENT,NONE,ZERO +NONE,XAUDIOALARM,COMPLETED,NONE,ZERO +NONE,XAUDIOALARM,CONTACT,NONE,ZERO +NONE,XAUDIOALARM,CREATED,NONE,ZERO +NONE,XAUDIOALARM,DESCRIPTION,NONE,ZERO +NONE,XAUDIOALARM,DTEND,NONE,ZERO +NONE,XAUDIOALARM,DTSTAMP,NONE,ZERO +NONE,XAUDIOALARM,DTSTART,NONE,ZERO +NONE,XAUDIOALARM,DUE,NONE,ZERO +NONE,XAUDIOALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat +NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration +NONE,XAUDIOALARM,EXDATE,NONE,ZERO +NONE,XAUDIOALARM,EXRULE,NONE,ZERO +NONE,XAUDIOALARM,FREEBUSY,NONE,ZERO +NONE,XAUDIOALARM,GEO,NONE,ZERO +NONE,XAUDIOALARM,LASTMODIFIED,NONE,ZERO +NONE,XAUDIOALARM,LOCATION,NONE,ZERO +NONE,XAUDIOALARM,METHOD,NONE,ZERO +NONE,XAUDIOALARM,ORGANIZER,NONE,ZERO +NONE,XAUDIOALARM,PERCENTCOMPLETE,NONE,ZERO +NONE,XAUDIOALARM,PRIORITY,NONE,ZERO +NONE,XAUDIOALARM,PRODID,NONE,ZERO +NONE,XAUDIOALARM,RDATE,NONE,ZERO +NONE,XAUDIOALARM,RECURRENCEID,NONE,ZERO +NONE,XAUDIOALARM,RELATEDTO,NONE,ZERO +NONE,XAUDIOALARM,REQUESTSTATUS,NONE,ZERO +NONE,XAUDIOALARM,RESOURCES,NONE,ZERO +NONE,XAUDIOALARM,RRULE,NONE,ZERO +NONE,XAUDIOALARM,SEQUENCE,NONE,ZERO +NONE,XAUDIOALARM,STATUS,NONE,ZERO +NONE,XAUDIOALARM,SUMMARY,NONE,ZERO +NONE,XAUDIOALARM,TRANSP,NONE,ZERO +NONE,XAUDIOALARM,TRIGGER,NONE,ONE +NONE,XAUDIOALARM,TZID,NONE,ZERO +NONE,XAUDIOALARM,TZNAME,NONE,ZERO +NONE,XAUDIOALARM,TZOFFSETFROM,NONE,ZERO +NONE,XAUDIOALARM,TZOFFSETTO,NONE,ZERO +NONE,XAUDIOALARM,TZURL,NONE,ZERO +NONE,XAUDIOALARM,UID,NONE,ZERO +NONE,XAUDIOALARM,URL,NONE,ZERO +NONE,XAUDIOALARM,VERSION,NONE,ZERO +NONE,XAUDIOALARM,X,NONE,ZEROPLUS +NONE,XDISPLAYALARM,ACTION,NONE,ONE +NONE,XDISPLAYALARM,ATTACH,NONE,ZERO +NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO +NONE,XDISPLAYALARM,CALSCALE,NONE,ZERO +NONE,XDISPLAYALARM,CATEGORIES,NONE,ZERO +NONE,XDISPLAYALARM,CLASS,NONE,ZERO +NONE,XDISPLAYALARM,COMMENT,NONE,ZERO +NONE,XDISPLAYALARM,COMPLETED,NONE,ZERO +NONE,XDISPLAYALARM,CONTACT,NONE,ZERO +NONE,XDISPLAYALARM,CREATED,NONE,ZERO +NONE,XDISPLAYALARM,DESCRIPTION,NONE,ONE +NONE,XDISPLAYALARM,DTEND,NONE,ZERO +NONE,XDISPLAYALARM,DTSTAMP,NONE,ZERO +NONE,XDISPLAYALARM,DTSTART,NONE,ZERO +NONE,XDISPLAYALARM,DUE,NONE,ZERO +NONE,XDISPLAYALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat +NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration +NONE,XDISPLAYALARM,EXDATE,NONE,ZERO +NONE,XDISPLAYALARM,EXRULE,NONE,ZERO +NONE,XDISPLAYALARM,FREEBUSY,NONE,ZERO +NONE,XDISPLAYALARM,GEO,NONE,ZERO +NONE,XDISPLAYALARM,LASTMODIFIED,NONE,ZERO +NONE,XDISPLAYALARM,LOCATION,NONE,ZERO +NONE,XDISPLAYALARM,METHOD,NONE,ZERO +NONE,XDISPLAYALARM,ORGANIZER,NONE,ZERO +NONE,XDISPLAYALARM,PERCENTCOMPLETE,NONE,ZERO +NONE,XDISPLAYALARM,PRIORITY,NONE,ZERO +NONE,XDISPLAYALARM,PRODID,NONE,ZERO +NONE,XDISPLAYALARM,RDATE,NONE,ZERO +NONE,XDISPLAYALARM,RECURRENCEID,NONE,ZERO +NONE,XDISPLAYALARM,RELATEDTO,NONE,ZERO +NONE,XDISPLAYALARM,REQUESTSTATUS,NONE,ZERO +NONE,XDISPLAYALARM,RESOURCES,NONE,ZERO +NONE,XDISPLAYALARM,RRULE,NONE,ZERO +NONE,XDISPLAYALARM,SEQUENCE,NONE,ZERO +NONE,XDISPLAYALARM,STATUS,NONE,ZERO +NONE,XDISPLAYALARM,SUMMARY,NONE,ZERO +NONE,XDISPLAYALARM,TRANSP,NONE,ZERO +NONE,XDISPLAYALARM,TRIGGER,NONE,ONE +NONE,XDISPLAYALARM,TZID,NONE,ZERO +NONE,XDISPLAYALARM,TZNAME,NONE,ZERO +NONE,XDISPLAYALARM,TZOFFSETFROM,NONE,ZERO +NONE,XDISPLAYALARM,TZOFFSETTO,NONE,ZERO +NONE,XDISPLAYALARM,TZURL,NONE,ZERO +NONE,XDISPLAYALARM,UID,NONE,ZERO +NONE,XDISPLAYALARM,URL,NONE,ZERO +NONE,XDISPLAYALARM,VERSION,NONE,ZERO +NONE,XDISPLAYALARM,X,NONE,ZEROPLUS +NONE,XEMAILALARM,ACTION,NONE,ONE,must_be_email +NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS +NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS +NONE,XEMAILALARM,CALSCALE,NONE,ZERO +NONE,XEMAILALARM,CATEGORIES,NONE,ZERO +NONE,XEMAILALARM,CLASS,NONE,ZERO +NONE,XEMAILALARM,COMMENT,NONE,ZERO +NONE,XEMAILALARM,COMPLETED,NONE,ZERO +NONE,XEMAILALARM,CONTACT,NONE,ZERO +NONE,XEMAILALARM,CREATED,NONE,ZERO +NONE,XEMAILALARM,DESCRIPTION,NONE,ONE +NONE,XEMAILALARM,DTEND,NONE,ZERO +NONE,XEMAILALARM,DTSTAMP,NONE,ZERO +NONE,XEMAILALARM,DTSTART,NONE,ZERO +NONE,XEMAILALARM,DUE,NONE,ZERO +NONE,XEMAILALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat +NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration +NONE,XEMAILALARM,EXDATE,NONE,ZERO +NONE,XEMAILALARM,EXRULE,NONE,ZERO +NONE,XEMAILALARM,FREEBUSY,NONE,ZERO +NONE,XEMAILALARM,GEO,NONE,ZERO +NONE,XEMAILALARM,LASTMODIFIED,NONE,ZERO +NONE,XEMAILALARM,LOCATION,NONE,ZERO +NONE,XEMAILALARM,METHOD,NONE,ZERO +NONE,XEMAILALARM,ORGANIZER,NONE,ZERO +NONE,XEMAILALARM,PERCENTCOMPLETE,NONE,ZERO +NONE,XEMAILALARM,PRIORITY,NONE,ZERO +NONE,XEMAILALARM,PRODID,NONE,ZERO +NONE,XEMAILALARM,RDATE,NONE,ZERO +NONE,XEMAILALARM,RECURRENCEID,NONE,ZERO +NONE,XEMAILALARM,RELATEDTO,NONE,ZERO +NONE,XEMAILALARM,REQUESTSTATUS,NONE,ZERO +NONE,XEMAILALARM,RESOURCES,NONE,ZERO +NONE,XEMAILALARM,RRULE,NONE,ZERO +NONE,XEMAILALARM,SEQUENCE,NONE,ZERO +NONE,XEMAILALARM,STATUS,NONE,ZERO +NONE,XEMAILALARM,SUMMARY,NONE,ONE +NONE,XEMAILALARM,TRANSP,NONE,ZERO +NONE,XEMAILALARM,TRIGGER,NONE,ONE +NONE,XEMAILALARM,TZID,NONE,ZERO +NONE,XEMAILALARM,TZNAME,NONE,ZERO +NONE,XEMAILALARM,TZOFFSETFROM,NONE,ZERO +NONE,XEMAILALARM,TZOFFSETTO,NONE,ZERO +NONE,XEMAILALARM,TZURL,NONE,ZERO +NONE,XEMAILALARM,UID,NONE,ZERO +NONE,XEMAILALARM,URL,NONE,ZERO +NONE,XEMAILALARM,VERSION,NONE,ZERO +NONE,XEMAILALARM,X,NONE,ZEROPLUS +NONE,XPROCEDUREALARM,ACTION,NONE,ONE +NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE +NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO +NONE,XPROCEDUREALARM,CALSCALE,NONE,ZERO +NONE,XPROCEDUREALARM,CATEGORIES,NONE,ZERO +NONE,XPROCEDUREALARM,CLASS,NONE,ZERO +NONE,XPROCEDUREALARM,COMMENT,NONE,ZERO +NONE,XPROCEDUREALARM,COMPLETED,NONE,ZERO +NONE,XPROCEDUREALARM,CONTACT,NONE,ZERO +NONE,XPROCEDUREALARM,CREATED,NONE,ZERO +NONE,XPROCEDUREALARM,DESCRIPTION,NONE,ZEROORONE +NONE,XPROCEDUREALARM,DTEND,NONE,ZERO +NONE,XPROCEDUREALARM,DTSTAMP,NONE,ZERO +NONE,XPROCEDUREALARM,DTSTART,NONE,ZERO +NONE,XPROCEDUREALARM,DUE,NONE,ZERO +NONE,XPROCEDUREALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat +NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration +NONE,XPROCEDUREALARM,EXDATE,NONE,ZERO +NONE,XPROCEDUREALARM,EXRULE,NONE,ZERO +NONE,XPROCEDUREALARM,FREEBUSY,NONE,ZERO +NONE,XPROCEDUREALARM,GEO,NONE,ZERO +NONE,XPROCEDUREALARM,LASTMODIFIED,NONE,ZERO +NONE,XPROCEDUREALARM,LOCATION,NONE,ZERO +NONE,XPROCEDUREALARM,METHOD,NONE,ZERO +NONE,XPROCEDUREALARM,ORGANIZER,NONE,ZERO +NONE,XPROCEDUREALARM,PERCENTCOMPLETE,NONE,ZERO +NONE,XPROCEDUREALARM,PRIORITY,NONE,ZERO +NONE,XPROCEDUREALARM,PRODID,NONE,ZERO +NONE,XPROCEDUREALARM,RDATE,NONE,ZERO +NONE,XPROCEDUREALARM,RECURRENCEID,NONE,ZERO +NONE,XPROCEDUREALARM,RELATEDTO,NONE,ZERO +NONE,XPROCEDUREALARM,REQUESTSTATUS,NONE,ZERO +NONE,XPROCEDUREALARM,RESOURCES,NONE,ZERO +NONE,XPROCEDUREALARM,RRULE,NONE,ZERO +NONE,XPROCEDUREALARM,SEQUENCE,NONE,ZERO +NONE,XPROCEDUREALARM,STATUS,NONE,ZERO +NONE,XPROCEDUREALARM,SUMMARY,NONE,ZERO +NONE,XPROCEDUREALARM,TRANSP,NONE,ZERO +NONE,XPROCEDUREALARM,TRIGGER,NONE,ONE +NONE,XPROCEDUREALARM,TZID,NONE,ZERO +NONE,XPROCEDUREALARM,TZNAME,NONE,ZERO +NONE,XPROCEDUREALARM,TZOFFSETFROM,NONE,ZERO +NONE,XPROCEDUREALARM,TZOFFSETTO,NONE,ZERO +NONE,XPROCEDUREALARM,TZURL,NONE,ZERO +NONE,XPROCEDUREALARM,UID,NONE,ZERO +NONE,XPROCEDUREALARM,URL,NONE,ZERO +NONE,XPROCEDUREALARM,VERSION,NONE,ZERO +NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS +NONE,VQUERY,QUERY,NONE,ZEROORONE +NONE,VQUERY,QUERYNAME,NONE,ONE +NONE,VQUERY,EXPAND,NONE,ONE diff --git a/libkcal/libical/design-data/status.txt b/libkcal/libical/design-data/status.txt new file mode 100644 index 000000000..9e7bbf83a --- /dev/null +++ b/libkcal/libical/design-data/status.txt @@ -0,0 +1,56 @@ +2.0 STATOK Operation was successfully performed. +2.0.1 STARTSENDATA Start ICAL input; end with <CRLF>.<CRLF> +2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with <CRLF>.<CRLF> +2.0.2 REPLYPENDING A timeout has occurred. The server is still working on the reply. Use CONTINUE to continue waiting for the reply or ABORT to terminate the command. +2.0.3 ABORTED The command currently underway was successsfully aborted. +2.0.4 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. +2.0.5 TRUSTEDWILLQUEUE The request or reply will be queued and delivered to the target calendar when its iRIP server contacts this server and issues the SWITCH command. +2.0.6 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. +2.0.7 QUEUED The message has been queued for delivery. +2.0.8 QUEUEEMPTY There are no more queued messages. +2.1 FALLBACK Success. Fallback taken on one or more property values. +2.2 NOCOMMANDINPROGRESS An ABORT or CONTINUE was received when no command was in progress +2.2 IGPROP Success. Invalid property ignored. +2.3 IGPARAM Success. invalid property parameter ignored. +2.4 IGXPROP Success. Unknown non-standard property ignored. +2.5 IGXPARAM Success. Unknown non standard property value ignored. +2.6 IGCOMP Success. Invalid calendar component ignored. +2.7 FORWARD Success. Request forwarded to Calendar User. +2.8 ONEEVENT Success. Repeating event ignored. Scheduled as a single component. +2.9 TRUNC Success. Truncated end date time to date boundary. +2.10 ONETODO Success. Repeating VTODO ignored. Scheduled as a single VTODO. +2.11 TRUNCRRULE Success. Unbounded RRULE clipped at some finite number of instances +3.0 INVPROPNAME Invalid property name. +3.1 INVPROPVAL Invalid property value. +3.2 INVPARAM Invalid property parameter. +3.3 INVPARAMVAL Invalid property parameter value. +3.4 INVCOMP Invalid calendar component sequence. +3.5 INVTIME Invalid date or time. +3.6 INVRULE Invalid rule. +3.7 INVCU Invalid Calendar User. +3.8 NOAUTH No authority. +3.9 BADVERSION Unsupported version. +3.10 TOOBIG Request entity too large. +3.11 MISSREQCOMP Required component or property missing. +3.12 UNKCOMP Unknown component or property found. +3.13 BADCOMP Unsupported component or property found +3.14 NOCAP Unsupported capability. +4.0 BUSY Event conflict. Date/time is busy. +5.0 MAYBE Request MAY supported. +5.1 UNAVAIL Service unavailable. +5.2 NOSERVICE Invalid calendar service. +5.3 NOSCHED No scheduling support for user. +6.1 AUTHENTICATEFAILURE Unsupported authentication mechanism, credentials rejected +6.2 AUTHENTICATIONABORTED Sender aborted authentication, authentication exchange cancelled +8.0 GENERALFAILURE A failure has occurred in the Receiver that prevents the operation from succeeding. +8.1 SERVERTOOBUSY The iRIP Receiver is too busy. +8.2 ICALOBJECTTOOBIG Object has exceeded the server's size limit. +8.3 DATETOOLARGE A DATETIME value was too far in the future to be represented on this Calendar. +8.4 DATETOOSMALL A DATETIME value was too far in the past to be represented on this Calendar. +9.0 INVALIDIRIPCOMMAND An unrecongnized command was received. +9.1 UNEXPECTEDCOMMAND The command is not allowed for the server's current state. +10.1 REFERRAL Accompanied by an alternate address. +10.2 SERVERSHUTDOWN The server is shutting down. +10.3 SERVERSTOPPING FLOOD 2 +10.4 EXCEEDEDQUOTAS The operation would cause a resource to exceed the allocated quota +10.5 QUEUEDTOOLONG The ITIP message has been queued too long. Delivery has been aborted. diff --git a/libkcal/libical/design-data/value-types.csv b/libkcal/libical/design-data/value-types.csv new file mode 100644 index 000000000..feb5c476f --- /dev/null +++ b/libkcal/libical/design-data/value-types.csv @@ -0,0 +1,31 @@ +"#Name","C type& gen flag","Python","Component Values","Enum Values" +"BINARY","(a)const char*","file","unitary", +"BOOLEAN","(a)int","integer","unitary", +"CAL-ADDRESS","(a)const char*","string","unitary", +"DATE","(a)struct icaltimetype","Time","unitary", +"DATE-TIME","(a)struct icaltimetype","Time","unitary", +"DURATION","(a)struct icaldurationtype","Duration","unitary", +"FLOAT","(a)float","float","unitary", +"INTEGER","(a)int","integer","unitary", +"PERIOD","(a)struct icalperiodtype","Period","unitary", +"RECUR","(m)struct icalrecurrencetype","RecurrenceSet","unitary", +"TEXT","(a)const char*","string","unitary", +"URI","(a)const char*","string","unitary", +"UTC-OFFSET","(a)int","integer","unitary", +"QUERY","(a)const char*","string","unitary", +"#Non-standard multi-valued types",,,, +"ATTACH","(m)icalattach *","none","URI;BINARY", +"DATE-TIME-PERIOD","(m)struct icaldatetimeperiodtype","none","DATE-TIME;PERIOD", +"TRIGGER","(m)struct icaltriggertype","string","DURATION;DATE-TIME", +"#Non-standard property enumeration types",,,, +"METHOD","(a)enum icalproperty_method","string","unitary","PUBLISH;REQUEST;REPLY;ADD;CANCEL;REFRESH;COUNTER;DECLINECOUNTER;CREATE;READ;RESPONSE;MOVE;MODIFY;GENERATEUID;DELETE" +"X-LIC-CLASS","(a)enum icalproperty_xlicclass","string","unitary","PUBLISH-NEW;PUBLISH-UPDATE;PUBLISH-FREEBUSY;REQUEST-NEW;REQUEST-UPDATE;REQUEST-RESCHEDULE;REQUEST-DELEGATE;REQUEST-NEW-ORGANIZER;REQUEST-FORWARD;REQUEST-STATUS;REQUEST-FREEBUSY;REPLY-ACCEPT;REPLY-DECLINE;REPLY-DELEGATE;REPLY-CRASHER-ACCEPT;REPLY-CRASHER-DECLINE;ADD-INSTANCE;CANCEL-EVENT;CANCEL-INSTANCE;CANCEL-ALL;REFRESH;COUNTER;DECLINECOUNTER;MALFORMED;OBSOLETE;MISSEQUENCED;UNKNOWN" +"ACTION","(a)enum icalproperty_action","string","unitary","AUDIO;DISPLAY;EMAIL;PROCEDURE" +"STATUS","(a)enum icalproperty_status","string","unitary","TENTATIVE;CONFIRMED;COMPLETED;NEEDS-ACTION;CANCELLED;IN-PROCESS;DRAFT;FINAL" +"TRANSP","(a)enum icalproperty_transp","string","unitary","OPAQUE;OPAQUE-NOCONFLICT;TRANSPARENT;TRANSPARENT-NOCONFLICT" +"CLASS","(a)enum icalproperty_class","string","unitary","PUBLIC;PRIVATE;CONFIDENTIAL" +"#Other non-standard",,,, +"REQUEST-STATUS","(a)struct icalreqstattype","string","unitary" +"GEO","(a)struct icalgeotype","tuple","unitary", +"STRING","(a)const char*","string","unitary", +"X","(m)const char*","string","unitary", diff --git a/libkcal/libical/doc/Makefile.am b/libkcal/libical/doc/Makefile.am new file mode 100644 index 000000000..70b008a36 --- /dev/null +++ b/libkcal/libical/doc/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = UsingLibical.lyx UsingLibical.ps UsingLibical.txt diff --git a/libkcal/libical/doc/UsingLibical.lyx b/libkcal/libical/doc/UsingLibical.lyx new file mode 100644 index 000000000..c29a61f6e --- /dev/null +++ b/libkcal/libical/doc/UsingLibical.lyx @@ -0,0 +1,2578 @@ +#LyX 1.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 2.16 +\textclass article +\language default +\inputencoding latin1 +\fontscheme default +\graphics default +\paperfontsize default +\spacing single +\papersize Default +\paperpackage a4 +\use_geometry 0 +\use_amsmath 0 +\paperorientation portrait +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\quotes_times 2 +\papercolumns 1 +\papersides 1 +\paperpagestyle default + +\layout Title + +Using Libical +\layout Author + +Eric Busboom (eric@softwarestudio.org) +\layout Date + +January 2001 +\layout Standard + + +\begin_inset LatexCommand \tableofcontents{} + +\end_inset + + +\layout Section + +Introduction +\layout Standard + +Libical is an Open Source implementation of the iCalendar protocols and + protocol data units. + The iCalendar specification describes how calendar clients can communicate + with calendar servers so users can store their calendar data and arrange + meetings with other users. + +\layout Standard + +Libical implements RFC2445, RFC2446 and some of RFC2447 and the CAP draft. + +\layout Standard + +This documentation assumes that you are familiar with the iCalendar standards + RFC2445 and RFC2446. + these specifications are online on the CALSCH webpage at: +\layout LyX-Code + +http://www.imc.org/ietf-calendar/ +\layout Subsection + +The libical project +\layout Standard + +This code is under active development. + If you would like to contribute to the project, you can contact me, Eric + Busboom, at eric@softwarestudio.org. + The project has a webpage at +\layout LyX-Code + +http://softwarestudio.org/libical/index.html +\layout Standard + +and a mailing list that you can join by sending the following mail: +\layout LyX-Code + +To: minimalist@softwarestudio.org +\layout LyX-Code + +Subject: subscribe libical +\layout Subsection + +License +\layout Standard + +The code and datafiles in this distribution are licensed under the Mozilla + Public License. + See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the license. + Alternately, you may use libical under the terms of the GNU Library General + Public License. + See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. +\layout Standard + +This dual license ensures that the library can be incorporated into both + proprietary code and GPL'd programs, and will benefit from improvements + made by programmers in both realms. + I will only accept changes into my version of the library if they are similarly + dual-licensed. +\layout Subsection + +Example Code +\layout Standard + +A lot of the documentation for this library is in the form of example code. + These examples are in the +\begin_inset Quotes eld +\end_inset + +examples +\begin_inset Quotes erd +\end_inset + + directory of the distribution. + Also look in +\begin_inset Quotes eld +\end_inset + +src/test +\begin_inset Quotes erd +\end_inset + + for additional annotated examples. + +\layout Section + +Building and Installing the Library +\layout Standard + +Libical uses autoconf to generate makefiles. + It should built with no adjustments on Linux, FreeBSD and Solaris under + gcc. + Some version have been successfully been build on MacOS, Solaris, UnixWare, + And Tru64 UNIX without gcc, but you may run into problems with a particular + later version. + +\layout Standard + +For a more complete guide to building the library, see the README file in + the distribution. + +\layout Standard + + +\begin_inset Quotes eld +\end_inset + +make install +\begin_inset Quotes erd +\end_inset + + will install the libraries and header files for three modules: libical, + libicalss. + and libicalvcal. + If you build shared objects, then these files will be installed: +\layout Itemize + +ical.h +\layout Itemize + +libical.a +\layout Itemize + +libical.so +\layout Itemize + +icalss.h +\layout Itemize + +libicalss.a +\layout Itemize + +libicalss.so +\layout Itemize + +icalvcal.h +\layout Itemize + +libicalvcal.a +\layout Itemize + +libicalvcal.so +\layout Standard + +The header files ical.h and icalss.h are combined header files, generated + by concatenating together all of the header files in src/libical and src/libica +lss respectively. + +\layout Section + +Structure +\layout Standard + +The iCal calendar model is based on four types of objects: components, propertie +s, values and parameters. + +\layout Standard + +Properties are the fundamental unit of information in iCal, and they work + a bit like a hash entry, with a constant key and a variable value. + Properties may also have modifiers, called parameters. + In the iCal content line +\layout LyX-Code + +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com +\layout Standard + +The property name is +\begin_inset Quotes eld +\end_inset + +ORGANIZER, +\begin_inset Quotes erd +\end_inset + + the value of the property is +\begin_inset Quotes eld +\end_inset + +mrbig@host.com +\begin_inset Quotes erd +\end_inset + + and the +\begin_inset Quotes eld +\end_inset + +ROLE +\begin_inset Quotes erd +\end_inset + + parameter specifies that Mr Big is the chair of the meetings associated + with this property. + +\layout Standard + +Components are groups of properties that represent the core objects of a + calendar system, such as events or timezones. + Components are delimited by +\begin_inset Quotes eld +\end_inset + +BEGIN +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +END +\begin_inset Quotes erd +\end_inset + + tags. + +\layout Standard +\added_space_bottom 0.3cm +When a component is sent across a network, if it is un-encrypted, it will + look something like: +\layout LyX-Code + +BEGIN:VCALENDAR +\layout LyX-Code + +METHOD:REQUEST +\layout LyX-Code + +PRODID: -//hacksw/handcal//NONSGML v1.0//EN +\layout LyX-Code + +BEGIN:VEVENT +\layout LyX-Code + +DTSTAMP:19980309T231000Z +\layout LyX-Code + +UID:guid-1.host1.com +\layout LyX-Code + +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com +\layout LyX-Code + +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: +\layout LyX-Code + + MAILTO:employee-A@host.com +\layout LyX-Code + +DESCRIPTION:Project XYZ Review Meeting +\layout LyX-Code + +CATEGORIES:MEETING +\layout LyX-Code + +CLASS:PUBLIC +\layout LyX-Code + +CREATED:19980309T130000Z +\layout LyX-Code + +SUMMARY:XYZ Project Review +\layout LyX-Code + +DTSTART;TZID=US-Eastern:19980312T083000 +\layout LyX-Code + +DTEND;TZID=US-Eastern:19980312T093000 +\layout LyX-Code + +LOCATION:1CP Conference Room 4350 +\layout LyX-Code + +END:VEVENT +\layout LyX-Code + +END:VCALENDAR +\layout Standard + +Note that components can be nested; this example has both a VCALENDAR and + a VEVENT component, one nested inside the other. + +\layout Standard + +The main goal of Libical is to offer a structured, type-safe to create, + access and manipulate components and their properties, values and parameters. + +\layout Subsection + +Core iCal classes +\layout Standard + +Libical is an object-based, data-oriented library. + There are no real-objects, but the way the routines are named and organized + results in the same sort of encapsulations and abstraction that are major + features of Object-Orieted languages. + Nearly all of the routines in the library are associated with an opaque + data types and perform some operation on that data type. + For instnace, a Property is declared as: +\layout LyX-Code + +icalproperty *prop; +\layout Standard + +Icalproperty is typedef'd to void, so the only way to manipulate it is through + the accessor routines, all of which have a form similar to: +\layout LyX-Code + +char* icalproperty_as_ical_string(icalproperty* prop); +\layout Standard + +That is, the name of the 'class' is the first word in the routine name, + and the first parameter is a pointer to the 'object.' +\layout Standard + +Although the library does not actually have classes, we will use those terms + since the behavior of these associations of data and routines is very similar + to a class. + +\layout Subsubsection + +Properties +\layout LyX-Code + +icalproperty *prop; +\layout Standard + +Properties are represented with the icalproperty class and its many +\begin_inset Quotes eld +\end_inset + +derived +\begin_inset Quotes erd +\end_inset + + classes with on +\begin_inset Quotes eld +\end_inset + +derived +\begin_inset Quotes erd +\end_inset + + class per property type in RFC2445. + Again, there is no actual inheritance relations, but there are clusters + of routines that make this term useful. + A property is a container for a single value and a set of parameters. + +\layout Subsubsection + +Components +\layout LyX-Code + +icalcomponent *comp; +\layout Standard + +In libical, components are represented with the icalcomponent class. + Icalcomponent is a container for a set of other components and properties. +\layout Subsubsection + +Values +\layout LyX-Code + +icalvalue *value; +\layout Standard + +Values are represented in a similar way to properties; a base class and + many +\begin_inset Quotes eld +\end_inset + +derived +\begin_inset Quotes eld +\end_inset + + classes. + A value is essentially a abstract handle on a single fundamental type, + a structure or a union. + You probably will never use a value directly, since for most operations + you can get to its data through the property that holds it. + +\layout Subsubsection + +Parameters +\layout LyX-Code + +icalparameter *param; +\layout Standard + +Parameters are represetned in a similar way to properties, except that they + contain only one value +\layout Subsection + +Other elements of libical +\layout Standard + +In addition to the core iCal classes, libical has many other types, structures, + classes that aid in creating and using iCal components. + +\layout Subsubsection + +Enumerations and types +\layout Standard + +Libical is strongly typed, so every component, property, parameter, and + value type has an enumeration, and some have an associated structure or + union. + +\layout Subsubsection + +The parser +\layout Standard + +The libical parser offers a variety of ways to convert RFC2445 text into + a libical iinsteral component structure. + the parser can parse blocks of text as a string, or it can parse lin-by-line. +\layout Subsubsection + +Error objects +\layout Standard + +Libical has a substantial error reporting system for both programming errors + and component usage errors. + +\layout Subsubsection + +Memory Management +\layout Standard + +Since many of libicals interfaces return strings, the library has its own + memory management system to elimiate the need to free every string returned + from the libraru. + +\layout Subsubsection + +Storage classes +\layout Standard + +The library also offers several classes to store components to flies, memory + or databases. + +\layout Section + +Differences From RFCs +\layout Standard + +Libical has been designed to follow the standards as closely as possible, + so that the key objects in the standards are also key objects in the library. + However, there are a few areas where the specifications are (arguably) + irregular, and following them exactly would result in an unfriendly interface. + These deviations make libical easier to use by maintaining a self-similar + interface. + +\layout Subsection + +Pseudo Components +\layout Standard + +Libical defines components for groups of properties that look and act like + components, but are not defined as components in the specification. + XDAYLIGHT and XSTANDARD are notable examples. + These pseudo components group properties within the VTIMEZONE components. + For instanace, the timezone properties associated with daylight savings + time starts with +\begin_inset Quotes eld +\end_inset + +BEGIN:DAYLIGHT +\begin_inset Quotes erd +\end_inset + + and ends with +\begin_inset Quotes eld +\end_inset + +END:DAYLIGHT, just like other components, but is not defined as a component + in RFC2445. + ( See RFC2445, page 61 ) In Libical,this grouping is represented by the + XDAYLIGHT component. + Standard iCAL components all start with the letter +\begin_inset Quotes eld +\end_inset + +V, +\begin_inset Quotes erd +\end_inset + + while pseudo components start with +\begin_inset Quotes erd +\end_inset + +X. +\begin_inset Quotes erd +\end_inset + + +\layout Standard + +There are also pseudo components that are conceptually derived classes of + VALARM. + RFC2446 defines what properties may be included in each component, and + for VALARM, the set of properties it may have depends on the value of the + ACTION property. + +\layout Standard + +For instance, if a VALARM component has an ACTION property with the value + of +\begin_inset Quotes eld +\end_inset + +AUDIO, +\begin_inset Quotes erd +\end_inset + + the component must also have an +\begin_inset Quotes eld +\end_inset + +ATTACH +\begin_inset Quotes erd +\end_inset + + property. + However, if the ACTION value is +\begin_inset Quotes eld +\end_inset + +DISPLAY, +\begin_inset Quotes erd +\end_inset + + the component must have a DESCRIPTION property. + +\layout Standard + +To handle these various, complex restrictions, libical has pseudo components + for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREA +LARM. + +\layout Subsection + +Combined Values +\layout Standard + +Many values can take more than one type. + TRIGGER, for instance, can have a value type of with DURATION or of DATE-TIME. + These multiple types make it difficult to create routines to return the + value associated with a property. + +\layout Standard + +It is natural to have interfaces that would return the value of a property, + but it is cumbersome for a single routine to return multiple types. + So, in libical, properties that can have multiple types are given a single + type that is the union of their RFC2445 types. + For instance, in libical, the value of the TRIGGER property resolves to + struct icaltriggertype. + This type is a union of a DURATION and a DATE-TIME. + +\layout Subsection + +Multi-Valued Properties +\layout Standard + +Some properties, such as CATEGORIES have only one value type, but each CATEGORIE +S property can have multiple value instances. + This also results in a cumbersome interface -- CATEGORIES accessors would + have to return a list while all other accessors returned a single value. + In libical, all properties have a single value, and multi-valued properties + are broken down into multiple single valued properties during parsing. + That is, an input line like, +\layout LyX-Code + +CATEGORIES: work, home +\layout Standard + +becomes in libical's internal representation +\layout LyX-Code + +CATEGORIES: work +\layout LyX-Code + +CATEGORIES: home +\layout Standard + +Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY ) to + exist as both a multi-values property and as multiple single value properties, + while others ( like CATEGORIES ) can only exist as single multi-valued + properties. + This makes the internal representation for CATEGORIES illegal. + However when you convert a component to a string, the library will collect + all of the CATEGORIES properties into one. + +\layout Section + +Using libical +\layout Subsection + +Creating Components +\layout Standard + +There are three ways to create components in Libical: +\layout Itemize + +Create individual components, properties and parameters and assemble them + into structures +\layout Itemize + +Build complete components with nested vaargs calls +\layout Itemize + +Parse bits of text +\layout Itemize + +Parse entire files +\layout Subsubsection + +Constructor Interfaces +\layout Standard + +Using constructor interfaces, you create each of the objects separately + and then assemble them in to components: +\layout LyX-Code + +icalcomponent *event; +\layout LyX-Code + +icalproperty *prop; +\layout LyX-Code + +icalparameter *param; +\layout LyX-Code + +struct icaltimetype atime; +\layout LyX-Code + +\layout LyX-Code + +event = icalcomponent_new(ICAL_VEVENT_COMPONENT); +\layout LyX-Code + +prop = icalproperty_new_dtstamp(atime); +\layout LyX-Code + +icalcomponent_add_property(event, prop); +\layout LyX-Code + +\layout LyX-Code + +prop = icalproperty_new_uid(''guid-1.host1.com'') ); +\layout LyX-Code + +icalcomponent_add_property(event,prop); +\layout LyX-Code + +\layout LyX-Code + +prop=icalproperty_new_organizer(''mrbig@host.com''); +\layout LyX-Code + +param = icalparameter_new_role(ICAL_ROLE_CHAIR) +\layout LyX-Code + +icalproperty_add_parameter(prop, param); +\layout LyX-Code + +\layout LyX-Code + +icalcomponent_add_property(event,prop); +\layout Standard + +Notice that libical uses a semi-object-oriented style of interface. + Most things you work with are objects, that are instantiated with a constructor + that has +\begin_inset Quotes eld +\end_inset + +new +\begin_inset Quotes erd +\end_inset + + in the name. + Also note that, other than the object reference, most structure data is + passed in to libical routines by value. + Libical has some complex but very regular memory handling rules. + These are detailed in section +\begin_inset LatexCommand \ref{sec:memory} + +\end_inset + +. +\layout Standard + +If any of the constructors fail, they will return 0. + If you try to insert 0 into a property or component, or use a zero-valued + object reference, libical will either silently ignore the error or will + abort with an error message. + This behavior is controlled by a compile time flag (ICAL_ERRORS_ARE_FATAL), + and will abort by default. + +\layout Subsubsection + +vaargs Constructors +\layout Standard + +There is another way to create complex components, which is arguably more + elegant, if you are not horrified by varargs. + The varargs constructor interface allows you to create intricate components + in a single block of code. + Here is the previous examples in the vaargs style. + +\layout LyX-Code + + calendar = +\layout LyX-Code + + icalcomponent_vanew( +\layout LyX-Code + + ICAL_VCALENDAR_COMPONENT, +\layout LyX-Code + + icalproperty_new_version(''2.0''), +\layout LyX-Code + + icalproperty_new_prodid( +\layout LyX-Code + + ''-//RDU Software//NONSGML HandCal//EN''), +\layout LyX-Code + + icalcomponent_vanew( +\layout LyX-Code + + ICAL_VEVENT_COMPONENT, +\layout LyX-Code + + icalproperty_new_dtstamp(atime), +\layout LyX-Code + + icalproperty_new_uid(''guid-1.host1.com''), +\layout LyX-Code + + icalproperty_vanew_organizer( +\layout LyX-Code + + ''mrbig@host.com''), +\layout LyX-Code + + icalparameter_new_role(ICAL_ROLE_CHAIR), +\layout LyX-Code + + 0 +\layout LyX-Code + + ), +\layout LyX-Code + + icalproperty_vanew_attendee( +\layout LyX-Code + + ''employee-A@host.com'', +\layout LyX-Code + + icalparameter_new_role( +\layout LyX-Code + + ICAL_ROLE_REQPARTICIPANT), +\layout LyX-Code + + icalparameter_new_rsvp(1), +\layout LyX-Code + + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), +\layout LyX-Code + + 0 +\layout LyX-Code + + ), +\layout LyX-Code + + icalproperty_new_location( +\layout LyX-Code + + "1CP Conference Room 4350"), +\layout LyX-Code + + 0 +\layout LyX-Code + + ), +\layout LyX-Code + + 0 +\layout LyX-Code + + ); +\layout Standard + +This form is similar to the constructor form , except that the constructors + have +\begin_inset Quotes eld +\end_inset + +vanew +\begin_inset Quotes erd +\end_inset + + instead of +\begin_inset Quotes eld +\end_inset + +new +\begin_inset Quotes erd +\end_inset + + in the name. + The arguments are similar too, except that the component constructor can + have a list of properties, and the property constructor can have a list + of parameters. + Be sure to terminate every list with a '0', or your code will crash, if + you are lucky. + +\layout Subsubsection + +Parsing Text +\layout Standard + +Several routines are available for generating objects from text. + For properties, use: +\layout LyX-Code + +icalproperty* p; +\layout LyX-Code + +p = icalproperty_new_from_string("DTSTART:19970101T120000Z +\backslash +n"); +\layout Standard + +For parameters, use: +\layout LyX-Code + +icalparameter *param +\layout LyX-Code + +param = icalparameter_new_from_string("PARTSTAT=ACCEPTED"); +\layout Standard + +The final way to create components will probably be the most common; you + can create components from RFC2445 compliant text. + If you have the string in memory, use +\layout LyX-Code + +icalcomponent* icalcomponent_new_from_string(char* str); +\layout Standard + +If the string contains only one component, the routine will return the component + in libical form. + If the string contains multiple components, the multiple components will + be returned as the children of an ICAL_XROOT_COMPONENT component. + This routine is identical to ( and actually uses ) icalparser_parse_string(char +* str). +\layout Standard + +Parsing a whole string may seem wasteful if you want to pull a large component + off of the network or from a file; you may prefer to parse the component + line by line. + This is possible too by using: +\layout LyX-Code + +icalparser* icalparser_new(); +\layout LyX-Code + +void icalparser_free(icalparser* parser); +\layout LyX-Code + +icalparser_get_line(parser,read_stream); +\layout LyX-Code + +icalparser_add_line(parser,line); +\layout LyX-Code + +icalparser_set_gen_data(parser,stream) +\layout Standard + +These routines will construct a parser object to which you can add lines + of input and retrieve any components that the parser creates from the input. + These routines work by specifing an adaptor routine to get string data + from a source. + For an example: +\layout LyX-Code + +char* read_stream(char *s, size_t size, void *d) +\layout LyX-Code + +{ +\layout LyX-Code + + char *c = fgets(s,size, (FILE*)d); +\layout LyX-Code + + return c; +\layout LyX-Code + +} +\layout LyX-Code + +main() { +\layout LyX-Code + + char* line; +\layout LyX-Code + + icalcomponent *c; +\layout LyX-Code + + icalparser *parser = icalparser_new(); +\layout LyX-Code + + FILE* stream = fopen(argv[1],"r"); +\layout LyX-Code + + icalparser_set_gen_data(parser,stream); +\layout LyX-Code + + do{ +\layout LyX-Code + + line = icalparser_get_line(parser,read_stream); +\layout LyX-Code + + c = icalparser_add_line(parser,line); +\layout LyX-Code + + if (c != 0){ +\layout LyX-Code + + printf("%s",icalcomponent_as_ical_string(c)); +\layout LyX-Code + + icalparser_claim(parser); +\layout LyX-Code + + printf(" +\backslash +n--------------- +\backslash +n"); +\layout LyX-Code + + icalcomponent_free(c); +\layout LyX-Code + + } +\layout LyX-Code + + } while ( line != 0); +\layout LyX-Code + +} +\layout Standard + +The parser object parameterizes the routine used to get input lines with + icalparser_set_gen_data() and +\emph on + +\emph default +icalparser_get_line(). + In this example, the routine read_stream() will fetch the next line from + a stream, with the stream passed in as the void* parameter d. + The parser calls read_stream() from icalparser_get_line(), but it also + needs to know what stream to use. + This is set by the call to icalparser_set_gen_data(). + By using a different routine for read_stream or passing in different data + with icalparser_set_gen_data, you can connect to any data source. + +\layout Standard + +Using the same mechanism, other implementations could read from memory buffers, + sockets or other interfaces. + +\layout Standard + +Since the example code is a very common way to use the parser, there is + a convenience routine; +\layout LyX-Code + +icalcomponent* icalparser_parse(icalparser *parser, +\layout LyX-Code + + char* (*line_gen_func)(char *s, size_t size, void* d)) +\layout Standard + +To use this routine, you still must construct the parser object and pass + in a reference to a line reading routine. + If the parser can create a single component from the input, it will return + a pointer to the newly constructed component. + If the parser can construct multiple components from the input, it will + return a reference to an XROOT component ( of type ICAL_XROOT_COMPONENT.) + This XROOT component will hold all of the components constructed from the + input as children. + +\layout Subsection + +Accessing Components +\layout Standard + +Given a reference to a component, you probably will want to access the propertie +s, parameters and values inside. + Libical interfaces let you find sub-components, add and remove sub-components, + and do the same three operations on properties. + +\layout Subsubsection + +Finding Components +\layout Standard + +To find a sub-component of a component, use: +\layout LyX-Code + +icalcomponent* icalcomponent_get_first_component( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalcomponent_kind kind); +\layout Standard + +This routine will return a reference to the first component of the type + 'kind.' The key kind values, listed in icalenums.h are: +\layout LyX-Code + +ICAL_ANY_COMPONENT +\layout LyX-Code + +ICAL_VEVENT_COMPONENT +\layout LyX-Code + +ICAL_VTODO_COMPONENT +\layout LyX-Code + +ICAL_VJOURNAL_COMPONENT +\layout LyX-Code + +ICAL_VCALENDAR_COMPONENT +\layout LyX-Code + +ICAL_VFREEBUSY_COMPONENT +\layout LyX-Code + +ICAL_VALARM_COMPONENT +\layout Standard + +These are only the most common components; there are many more listed in + icalenums.h. +\layout Standard + +As you might guess, if there is more than one subcomponent of the type you + have chosen, this routine will return only the first. + to get at the others, you need to iterate through the component. + +\layout Subsubsection + +Iterating Through Components +\layout Standard + +Iteration requires a second routine to get the next subcomponent after the + first: +\layout LyX-Code + +icalcomponent* icalcomponent_get_next_component( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalcomponent_kind kind); +\layout Standard + +With the 'first' and 'next' routines, you can create a for loop to iterate + through all of a components subcomponents +\layout LyX-Code + + for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); +\layout LyX-Code + + c != 0; +\layout LyX-Code + + c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) +\layout LyX-Code + +{ +\layout LyX-Code + + do_something(c); +\layout LyX-Code + +} +\layout Standard + +This code bit wil iterate through all of the subcomponents in 'comp' but + you can select a specific type of component by changing ICAL_ANY_COMPONENT + to another component type. +\layout Subsubsection + +Using Component Iterators +\layout Standard + +The iteration model in the previous section requires the component to keep + the state of the iteration. + So, you could not use this model to perform a sorting operations, since + you'd need two iterators and there is only space for one. + If you ever call icalcomponent_get_first_component() when an iteration + is in progress, the pointer will be reset to the beginning. + +\layout Standard + +To solve this problem, there are also external iterators for components. + The routines associated with these external iterators are: +\layout LyX-Code + +icalcompiter icalcomponent_begin_component(icalcomponent* component, icalcompone +nt_kind kind); +\layout LyX-Code + +icalcompiter icalcomponent_end_component(icalcomponent* component, icalcomponent +_kind kind); +\layout LyX-Code + +icalcomponent* icalcompiter_next(icalcompiter* i); +\layout LyX-Code + +icalcomponent* icalcompiter_prior(icalcompiter* i); +\layout LyX-Code + +icalcomponent* icalcompiter_deref(icalcompiter* i); +\layout Standard + +The _begin_() and _end_() routines return a new iterator that points to + the beginning and ending of the list of subcomponent for the given component, + and the kind argument works like the kind argument for internal iterators. + +\layout Standard + +After creating an iterators, use _next_() and _prior_() to step forward + and backward through the list and get the component that the iterator points + to, and use _deref() to return the component that the iterator points to + without moving the iterator. + All routines will return 0 when they move to point off the end of the list. + +\layout Standard + +Here is an example of a loop using these routines: +\layout LyX-Code + +for( +\layout LyX-Code + + i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT); + +\layout LyX-Code + + icalcompiter_deref(&i)!= 0; +\layout LyX-Code + + icalcompiter_next(&i) +\layout LyX-Code + +) { +\layout LyX-Code + + icalcomponent *this = icalcompiter_deref(&i); +\layout LyX-Code + +} +\layout Subsubsection + +Removing Components +\layout Standard + +Removing an element from a list while iterating through the list with the + internal iterators can cause problems, since you will probably be removing + the element that the internal iterator points to. + The _remove() routine will keep the iterator valid by moving it to the + next component, but in a normal loop, this will result in two advances + per iteration, and you will remove only every other component. + To avoid the problem, you will need to step the iterator ahead of the + element you are going to remove, like this: +\layout LyX-Code + +for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); + +\layout LyX-Code + + c != 0; +\layout LyX-Code + + c = next +\layout LyX-Code + +{ +\layout LyX-Code + + next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); +\layout LyX-Code + + icalcomponent_remove_component(parent_comp,c); +\layout LyX-Code + +} +\layout Standard + +Another way to remove components is to rely on the side effect of icalcomponent_ +remove_component: if component iterator in the parent component is pointing + to the child that will be removed, it will move the iterator to the component + after the child. + The following code will exploit this behavior: +\layout LyX-Code + +icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT); +\layout LyX-Code + +while((c=icalcomponent_get_current_component(c)) != 0 ){ +\layout LyX-Code + + if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){ +\layout LyX-Code + + icalcomponent_remove_component(parent_comp,inner); +\layout LyX-Code + + } else { +\layout LyX-Code + + icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT); + +\layout LyX-Code + + } +\layout LyX-Code + +} +\layout Subsubsection + +Working with properties and parameters +\layout Standard + +Finding, iterating and removing properties works the same as it does for + components, using the property-specific or parameter-specific interfaces: + +\layout LyX-Code + +icalproperty* icalcomponent_get_first_property( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalproperty_kind kind); +\layout LyX-Code + +icalproperty* icalcomponent_get_next_property( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalproperty_kind kind); +\layout LyX-Code + +void icalcomponent_add_property( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalproperty* property); +\layout LyX-Code + +void icalcomponent_remove_property( +\layout LyX-Code + + icalcomponent* component, +\layout LyX-Code + + icalproperty* property); +\layout Standard + +For parameters: +\layout LyX-Code + +icalparameter* icalproperty_get_first_parameter( +\layout LyX-Code + + icalproperty* prop, +\layout LyX-Code + + icalparameter_kind kind); +\layout LyX-Code + +icalparameter* icalproperty_get_next_parameter( +\layout LyX-Code + + icalproperty* prop, +\layout LyX-Code + + icalparameter_kind kind); +\layout LyX-Code + +void icalproperty_add_parameter( +\layout LyX-Code + + icalproperty* prop, +\layout LyX-Code + + icalparameter* parameter); +\layout LyX-Code + +void icalproperty_remove_parameter( +\layout LyX-Code + + icalproperty* prop, +\layout LyX-Code + + icalparameter_kind kind); +\layout Standard + +Note that since there should be only one parameter of each type in a property, + you will rarely need to use icalparameter_get_nect_paameter. +\layout Subsubsection + +Working with values +\layout Standard + +Values are typically part of a property, although they can exist on their + own. + You can manipulate them either as part of the property or independently. +\layout Standard + +The most common way to work with values to is to manipulate them from they + properties that contain them. + This involves fewer routine calls and intermediate variables than working + with them independently, and it is type-safe. + +\layout Standard + +For each property, there are a _get_ and a _set_ routine that access the + internal value. + For instanace, for the UID property, the routines are: +\layout LyX-Code + +void icalproperty_set_uid(icalproperty* prop, const char* v) +\layout LyX-Code + +const char* icalproperty_get_uid(icalproperty* prop) +\layout Standard + +For multi-valued properties, like ATTACH, the value type is usually a struct + or union that holds both possible types. + +\layout Standard + +If you want to work with the underlying value object, you can get and set + it with: +\layout LyX-Code + +icalvalue* icalproperty_get_value (icalproperty* prop) +\layout LyX-Code + +void icalproperty_set_value(icalproperty* prop, icalvalue* value); +\layout Standard + +Icalproperty_get_value() will return a reference that you can manipulate + with other icalvalue routines. + Most of the time, you will have to know what the type of the value is. + For instance, if you know that the value is a DATETIME type, you can manipulate + it with: +\layout LyX-Code + +struct icaltimetype icalvalue_get_datetime(icalvalue* value); +\layout LyX-Code + +void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); +\layout Standard + +When working with an extension property or value (and X-PROPERTY or a property + that has the parameter VALUE=x-name ) the value type is always a string. + To get and set the value, use: +\layout LyX-Code + +void icalproperty_set_x(icalproperty* prop, char* v); +\layout LyX-Code + +char* icalproperty_get_x(icalproperty* prop); +\layout Standard + +All X properties have the type of ICAL_X_PROPERTY, so you will need these + routines to get and set the name of the property: +\layout LyX-Code + +char* icalproperty_get_x_name(icalproperty* prop) +\layout LyX-Code + +void icalproperty_set_x_name(icalproperty* prop, char* name); +\layout Subsubsection + +Checking Component Validity +\layout Standard + +RFC 2446 defines rules for what properties must exist in a component to + be used for transferring scheduling data. + Most of these rules relate to the existence of properties relative to the + METHOD property, which declares what operation a remote receiver should + use to process a component. + For instance, if the METHOD is REQUEST and the component is a VEVENT, the + sender is probably asking the receiver to join in a meeting. + In this case, RFC2446 says that the component must specify a start time + (DTSTART) and list the receiver as an attendee (ATTENDEE). + +\layout Standard + +Libical can check these restrictions with the routine: +\layout LyX-Code + +int icalrestriction_check(icalcomponent* comp); +\layout Standard + +This routine returns 0 if the component does not pass RFC2446 restrictions, + or if the component is malformed. + The component you pass in +\emph on +must +\emph default + be a VCALENDAR, with one or more children, like the examples in RFC2446. + +\layout Standard + +When this routine runs, it will insert new properties into the component + to indicate any errors it finds. + See section 6.5.3, X-LIC-ERROR for more information about these error properties. + +\layout Subsubsection + +Converting Components to Text +\layout Standard + +To create an RFC2445 compliant text representation of an object, use one + of the *_as_ical_string() routines: +\layout LyX-Code + +char* icalcomponent_as_ical_string (icalcomponent* component) +\layout LyX-Code + +char* icalproperty_as_ical_string (icalproperty* property) +\layout LyX-Code + +char* icalparameter_as_ical_string (icalparameter* parameter) +\layout LyX-Code + +char* icalvalue_as_ical_string (icalvalue* value) +\layout Standard + +In most cases, you will only use icalcomponent_as_ical_string (), since + it will cascade and convert all of the parameters, properties and values + that are attached to the root component. +\layout Standard + +Icalproperty_as_ical_string() will terminate each line with the RFC2445 + specified line terminator +\begin_inset Quotes eld +\end_inset + + +\backslash + +\backslash +n +\begin_inset Quotes erd +\end_inset + + However, if you compile with the symbol ICAL_UNIX_NEWLINE undefined, ( + it is defined by default) it will terminate lines with +\begin_inset Quotes eld +\end_inset + + +\backslash + +\backslash +n +\backslash + +\backslash +r +\begin_inset Quotes erd +\end_inset + + +\layout Standard + +Remember that the string returned by these routines is owned by the library, + and will eventually be re-written. + You should copy it if you want to preserve it. + +\layout Subsection + +Time +\layout Subsubsection + +Time structure +\layout Standard + +LIbical defines it's own time structure for storing all dates and times. + It would have been nice to re-use the C library's +\emph on +struct tm, +\emph default +but that structure does not differentiate between dates and times, and between + local time and UTC. + The libical structure is: +\layout LyX-Code + +struct icaltimetype { +\layout LyX-Code + + int year; +\layout LyX-Code + + int month; +\layout LyX-Code + + int day; +\layout LyX-Code + + int hour; +\layout LyX-Code + + int minute; +\layout LyX-Code + + int second; +\layout LyX-Code + + int is_utc; /* 1-> time is in UTC timezone */ +\layout LyX-Code + + int is_date; /* 1 -> interpret this as date. + */ }; +\layout Standard + +The year, month, day, hour, minute and second fields hold the broken-out + time values. + The is_utc field distinguishes between times in UTC and a local time zone. + The is_date field indicates if the time should be interpreted only as a + date. + If it is a date, the hour, minute and second fields are assumed to be zero, + regardless of their actual vaules. + +\layout Subsubsection + +Creating time structures +\layout Standard + +There are several ways to create a new icaltimetype structure: +\layout LyX-Code + +struct icaltimetype icaltime_from_string(const char* str); +\layout LyX-Code + +struct icaltimetype icaltime_from_timet(time_t v, int is_date); +\layout LyX-Code + +\layout Standard + +Icaltime_from_string takes any RFC2445 compliant time string: +\layout LyX-Code + +struct icaltimetype tt = icaltime_from_string("19970101T103000"); +\layout Standard + +Icaltime_from_timet takes a timet value, representing seconds past the POSIX + epoch, and a flag to indicate if the time is a date. + Dates have an identical structure to a time, but the time portion ( hours, + minuts and seconds ) is always 00:00:00. + Dates act differently in sorting an comparision, and they have a different + string representation in RFC2445. + +\layout Subsubsection + +Time manipulating routines +\layout Standard + +The null time value is used to indicate that the data in the structure is + not a valid time. +\layout LyX-Code + +struct icaltimetype icaltime_null_time(void); +\layout LyX-Code + +int icaltime_is_null_time(struct icaltimetype t); +\layout Standard + +It is sensible for the broken-out time fields to contain values that are + not permitted in an ISO compliant time string. + For instance, the seconds field can hold values greater than 59, and the + hours field can hold values larger than 24. + The excessive values will be rolled over into the next larger field when + the structure is normalized. + +\layout LyX-Code + +struct icaltimetype icaltime_normalize(struct icaltimetype t); +\layout Standard + +Normalizing allows you to do arithmetic operations on time values. + +\layout LyX-Code + +struct icaltimetype tt = icaltime_from_string( +\begin_inset Quotes eld +\end_inset + +19970101T103000 +\begin_inset Quotes erd +\end_inset + +); +\layout LyX-Code + +tt.days +=3 +\layout LyX-Code + +tt.second += 70; +\layout LyX-Code + +tt = icaltime_normalize(tt); +\layout Standard + +There are several routines to get the day of the week or month, etc, from + a time structure. +\layout LyX-Code + +short icaltime_day_of_year(struct icaltimetype t); +\layout LyX-Code + +struct icaltimetype icaltime_from_day_of_year(short doy, short year); +\layout LyX-Code + +short icaltime_day_of_week(struct icaltimetype t); +\layout LyX-Code + +short icaltime_start_doy_of_week(struct icaltimetype t); +\layout LyX-Code + +short icaltime_week_number(short day_of_month, short month, short year); +\layout LyX-Code + +struct icaltimetype icaltime_from_week_number(short week_number, short year); +\layout LyX-Code + +short icaltime_days_in_month(short month,short year); +\layout Standard + +Two routines convert time structures to and from the number of seconds since + the POSIX epoch. + The is_date field indicates whether or not the hour, minute and second + fields should be used in the conversion. +\layout LyX-Code + +struct icaltimetype icaltime_from_timet(time_t v, int is_date); +\layout LyX-Code + +time_t icaltime_as_timet(struct icaltimetype); +\layout Standard + +The compare routine works exactly like strcmp, but on time structures. + +\layout LyX-Code + +int icaltime_compare(struct icaltimetype a,struct icaltimetype b); +\layout Standard + +The following routines convert between UTC and a named timezone. + The tzid field must be a timezone name from the Olsen database, such as + +\begin_inset Quotes eld +\end_inset + +America/Los_Angeles. +\begin_inset Quotes erd +\end_inset + + +\layout Standard + +The utc_offset routine returns the offset of the named time zone from UTC, + in seconds. + +\layout Standard + +The tt parameter in the following routines indicates the date on which the + conversion should be made. + The tt parameter is necessary because timezones have many different rules + for when daylight savings time is used, and these rules can change over + time. + So, for a single timezone one year may have daylight savings time on March + 15, but for other years March 15 may be standard time, and some years may + have standard time all year. + +\layout LyX-Code + +int icaltime_utc_offset(struct icaltimetype tt, char* tzid); +\layout LyX-Code + +int icaltime_local_utc_offset(); +\layout LyX-Code + +struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid); +\layout LyX-Code + +struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid); +\layout LyX-Code + +struct icaltimetype icaltime_as_local(struct icaltimetype tt); +\layout Subsection + +Storing Objects +\layout Standard + +The libical distribution includes a separate library, libicalss, that allows + you to store iCal component data to disk in a variety of ways. + This library also includes code to implement the CSTP protocol of CAP and + has some routines for deciphering incomming messages. + +\layout Standard + +The file storage routines are organized in an inheritance heirarchy that + is rooted in icalset, with the derived class icalfileset and icaldirset. + Icalfileset stores components to a file, while icaldirset stores components + to multiple files, one per month based on DTSTAMP. + Other storages classess, for storage to a heap or a mysql database are + planned for the future. + +\layout Standard + +All of the icalset derived classes have the same interface: +\layout LyX-Code + +\layout LyX-Code + +icaldirset* icaldirset_new(const char* path); +\layout LyX-Code + +void icaldirset_free(icaldirset* store); +\layout LyX-Code + +const char* icaldirset_path(icaldirset* store); +\layout LyX-Code + +void icaldirset_mark(icaldirset* store); +\layout LyX-Code + +icalerrorenum icaldirset_commit(icaldirset* store); +\layout LyX-Code + +icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent* + comp); +\layout LyX-Code + +icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent* + comp); +\layout LyX-Code + +int icaldirset_count_components(icaldirset* store, icalcomponent_kind kind); +\layout LyX-Code + +icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge); +\layout LyX-Code + +void icaldirset_clear(icaldirset* store); +\layout LyX-Code + +icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid); +\layout LyX-Code + +int icaldirset_has_uid(icaldirset* store, const char* uid); +\layout LyX-Code + +icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent *c); +\layout LyX-Code + +icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc, + icalcomponent *newc); +\layout LyX-Code + +icalcomponent* icaldirset_get_current_component(icaldirset* store); +\layout LyX-Code + +icalcomponent* icaldirset_get_first_component(icaldirset* store); +\layout LyX-Code + +icalcomponent* icaldirset_get_next_component(icaldirset* store); +\layout Subsubsection + +Creating a new set +\layout Standard + +You can create a new set from either the base class or the direved class. + From the base class use one of: +\layout LyX-Code + +icalset* icalset_new_file(const char* path); +\layout LyX-Code + +icalset* icalset_new_dir(const char* path); +\layout LyX-Code + +icalset* icalset_new_heap(void); +\layout LyX-Code + +icalset* icalset_new_mysql(const char* path); +\layout Standard + +You can also create a new set based on the derived class, For instance, + with icalfileset: +\layout LyX-Code + +icalfileset* icalfileset_new(const char* path); +\layout LyX-Code + +icalfileset* icalfileset_new_open(const char* path, int flags, mode_t mode); +\layout Standard + +Icaset_new_file is identical to icalfileset_new. + BOth routines will open an existing file for readinga and writing, or create + a new file if it does not exist. + Icalfilset_new_open takes the same arguments as the open() system routine + and behaves in the same way. + +\layout Standard + +The icalset and icalfilset objects are somewhat interchangable -- you can + use an icalfileset* as an argument to any of the icalset routines. +\layout Standard + +The following examples will all use icalfileset routines; using the other + icalset derived classess will be similar. + +\layout Subsubsection + +Adding, Finding and Removing Components +\layout Standard + +To add components to a set, use: +\layout LyX-Code + +icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent* + child); +\layout Standard + +The fileset keeps an inmemory copy of the components, and this set must + be written back to the file ocassionally. + There are two routines to manage this: +\layout LyX-Code + +void icalfileset_mark(icalfileset* cluster); +\layout LyX-Code + +icalerrorenum icalfileset_commit(icalfileset* cluster); +\layout Standard + +Icalfileset_mark indicates that the in-memory components have changed. + Calling the _add_component routine will call _mark automatically, but you + may need to call it yourself if you have made a change to an existing component. + The _commit routine writes the data base to disk, but only if it is marked. + The _commit routine is called automatically when the icalfileset is freed. + +\layout Standard + +To iterate through the components in a set, use: +\layout LyX-Code + +icalcomponent* icalfileset_get_first_component(icalfileset* cluster); +\layout LyX-Code + +icalcomponent* icalfileset_get_next_component(icalfileset* cluster); +\layout LyX-Code + +icalcomponent* icalfileset_get_current_component (icalfileset* cluster); + +\layout Standard + +These routines work like the corresponding routines from icalcomponent, + except that their output is filtered through a gauge. + A gauge is a test for the properties within a components; only components + that pass the test are returned. + A gauge can be constructed from a MINSQL string with: +\layout LyX-Code + +icalgauge* icalgauge_new_from_sql(char* sql); +\layout Standard + +Then, you can add the gauge to the set with : +\layout LyX-Code + +icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge); +\layout Standard + +Here is an example that puts all of these routines together: +\layout LyX-Code + + +\latex no_latex +void test_fileset() +\layout LyX-Code + + +\latex no_latex +{ +\layout LyX-Code + + +\latex no_latex + icalfileset *fs; +\layout LyX-Code + + +\latex no_latex + icalcomponent *c; +\layout LyX-Code + + +\latex no_latex + int i; +\layout LyX-Code + + +\latex no_latex + char *path = "test_fileset.ics"; +\layout LyX-Code + + +\latex no_latex + icalgauge *g = icalgauge_new_from_sql( +\layout LyX-Code + + +\latex no_latex + "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND DTSTART + <= '20000106T120000Z'"); +\layout LyX-Code + + +\latex no_latex + +\layout LyX-Code + + +\latex no_latex +fs = icalfileset_new(path); +\layout LyX-Code + + +\layout LyX-Code + + +\latex no_latex +for (i = 0; i!= 10; i++){ +\layout LyX-Code + + +\latex no_latex + c = make_component(i); +\latex default + /* Make a new component where DTSTART has month of i */ +\layout LyX-Code + + +\latex no_latex + icalfileset_add_component(fs,c); +\layout LyX-Code + + +\latex no_latex + } +\layout LyX-Code + +\layout LyX-Code + + +\latex no_latex + icalfileset_commit(fs); +\latex default + /* Write to disk */ +\layout LyX-Code + +\layout LyX-Code + + +\latex no_latex + icalfileset_select(fs,g); +\latex default + /* Set the gauge to filter components */ +\layout LyX-Code + + +\latex no_latex + +\layout LyX-Code + + +\latex no_latex + for (c = icalfileset_get_first_component(fs); +\layout LyX-Code + + +\latex no_latex + c != 0; +\layout LyX-Code + + +\latex no_latex + c = icalfileset_get_next_component(fs)){ +\layout LyX-Code + + +\latex no_latex + struct icaltimetype t = icalcomponent_get_dtstart(c); +\layout LyX-Code + + +\latex no_latex + +\layout LyX-Code + + +\latex no_latex + printf("%s +\backslash +n",icaltime_as_ctime(t)); +\layout LyX-Code + + +\latex no_latex + } +\layout LyX-Code + + +\latex no_latex +icalfileset_free(fs); +\layout LyX-Code + + +\latex no_latex +} +\layout Subsubsection + +Other routines +\layout Standard + +There are several other routines in the icalset interface, but they not + fully implemented yet. + +\layout Subsection + + +\begin_inset LatexCommand \label{sec:memory} + +\end_inset + +Memory Management +\layout Standard + +Libical relies heavily on dynamic allocation for both the core objects and + for the strings used to hold values. + Some of this memory the library caller owns and must free, and some of + the memory is managed by the library. + Here is a summary of the memory rules. + +\layout Description + +1) If the function name has "new" in it, the caller gets control of the + memory. + ( such as icalcomponent_new(), or icalproperty_new_clone() ) +\layout Description + +2) If you got the memory from a routine with new in it, you must call the + corresponding *_free routine to free the memory. + ( Use icalcomponent_free() to free objects created with icalcomponent_new()) + +\layout Description + +3) If the function name has "add" in it, the caller is transferring control + of the memory to the routine. + ( icalproperty_add_parameter() ) +\layout Description + +4) If the function name has "remove" in it, the caller passes in a pointer + to an object and after the call returns, the caller owns the object. + So, before you call icalcomponent_remove_property(comp,foo), you do not + own "foo" and after the call returns, you do. + +\layout Description + +5) If the routine returns a string, libical owns the memory and will put + it on a ring buffer to reclaim later. + For example, icalcomponent_as_ical_string(). + You'd better strdup() it if you want to keep it, and you don't have to + delete it. + +\layout Subsection + +Error Handling +\layout Standard + +Libical has several error handling mechanisms for the various types of programmi +ng, semantic and syntactic errors you may encounter. +\layout Subsubsection + +Return values +\layout Standard + +Many library routines signal errors through their return values. + All routines that return a pointer, such as icalcomponent_new(), will return + 0 ( zero ) on a fatal error. + Some routines will return a value of enum icalerrorenum. + +\layout Subsubsection + +icalerrno +\layout Standard + +Most routines will set the global error value icalerrno on errors. + This variable is an enumeration; permissible values can be found in libical/ica +lerror.h. + If the routine returns an enum icalerrorenum, then the return value will + be the same as icalerrno. + You can use icalerror_strerror() to get a string that describes the error. + The enumerations are: +\layout Standard +\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable +multicol5 +12 2 0 0 -1 -1 -1 -1 +1 1 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 1 0 0 +2 1 0 "" "" +2 1 1 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" + + +\newline + +\newline +ICAL_BADARG_ERROR +\newline +One of the argument to a routine was bad. + Typically for a null pointer. +\newline +ICAL_NEWFAILED_ERROR +\newline +A new() or malloc() failed +\newline +ICAL_MALFORMEDDATA_ERROR +\newline +An input string was not in the correct format +\newline +ICAL_PARSE_ERROR +\newline +the parser failed to parse an incomming component +\newline +ICAL_INTERNAL_ERROR +\newline +Largely equivalent to an assert; it indicates a bug in the libical code +\newline +ICAL_FILE_ERROR +\newline +A file operation failed. + Check errno for more detai +\newline +ICAL_ALLOCATION_ERROR +\newline + +\newline +ICAL_NO_ERROR +\newline +No error has occurred +\newline +ICAL_TIMEDOUT_ERROR +\newline +Failed to acquire a lock on a file, or the CSTP protocol timed out. + +\newline +ICAL_MULTIPLEINCLUSION_ERROR +\newline + +\newline +ICAL_UNKNOWN_ERROR +\newline + +\layout Subsubsection + +X-LIC-ERROR and X-LIC-INVALID-COMPONENT +\layout Standard + +The library handles semantic and syntactic errors in components by inserting + errors properties into the components. + If the parser cannot parse incoming text ( a syntactic error ) or if the + icalrestriction_check() routine indicates that the component does not meet + the requirements of RFC2446 ( a semantic error) the library will insert + properties of the type X-LIC-ERROR to describe the error. + Here is an example of the error property: +\layout LyX-Code + +X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions for property + DTSTART. + +\layout LyX-Code + +Expected 1 instances of the property and got 0 +\layout Standard + +This error resulted from a call to icalrestriction_check(), which discovered + that the component does not have a DTSTART property, as required by RFC2445. + +\layout Standard + +There are a few routines to manipulate error properties: +\layout Standard +\LyXTable +multicol5 +10 2 0 0 -1 -1 -1 -1 +1 1 0 0 +0 0 0 0 +0 1 1 0 +0 0 0 0 +0 1 1 0 +0 1 0 0 +0 1 1 0 +0 1 0 0 +0 1 1 0 +0 1 1 0 +2 1 1 "" "" +2 1 1 "3in" "" +0 2 1 1 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 1 0 1 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 1 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 1 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 1 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 1 1 0 1 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 1 1 0 1 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 1 0 0 1 "" "" + +Routine +\newline +Purpose +\newline +void icalrestriction_check() +\newline +Check a component against RFC2446 and insert +\newline + +\newline +error properties to indicate non compliance +\newline +int icalcomponent_count_errors() +\newline +Return the number of error properties +\newline + +\newline +in a component +\newline +void icalcomponent_strip_errors() +\newline +Remove all error properties in as +\newline + +\newline +component +\newline +void icalcomponent_convert_errors() +\newline +Convert some error properties into +\newline + +\newline +REQUESTS-STATUS proprties to indicate the inability to +\newline + +\newline +process the component as an iTIP request. + +\layout Standard + +The types of errors are listed in icalerror.h. + They are: +\layout LyX-Code + +ICAL_XLICERRORTYPE_COMPONENTPARSEERROR +\layout LyX-Code + +ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR +\layout LyX-Code + +ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR +\layout LyX-Code + +ICAL_XLICERRORTYPE_PROPERTYPARSEERROR +\layout LyX-Code + +ICAL_XLICERRORTYPE_VALUEPARSEERROR +\layout LyX-Code + +ICAL_XLICERRORTYPE_UNKVCALPROP +\layout LyX-Code + +ICAL_XLICERRORTYPE_INVALIDITIP +\layout Standard + +The libical parser will generate the error that end in PARSEERROR when it + encounters garbage in the input steam. + ICAL_XLICERRORTYPE_INVALIDITIP is inserted by icalrestriction_check(), + and ICAL_XLICERRORTYPE_UNKVCALPROP is generated by icalvcal_convert() when + it encounters a vCal property that it cannot convert or does not know about. + +\layout Standard + +Icalcomponent_convert_errors() converts some of the error properties in + a component into REQUEST-STATUS properties that indicate a failure. + As of libical version0.18, this routine only convert *PARSEERROR errors + and it always generates a 3.x ( failure ) code. + This makes it more of a good idea than a really useful bit of code. + +\layout Subsubsection + +ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal +\layout Standard + +If the global variable icalerror_errors_are_fatal is set to 1, then any + error condition will cause the program to abort. + The abort occurs in icalerror_set_errno(), and is done with an assert(0) + if NDEBUG is undefined, and with icalerror_crash_here if NDEBUG is defined. + The default value of icalerror_errors_are_fatal is 1 when ICAL_ERRORS_ARE_FATAL + is defined, and 0 otherwise. + Since ICAL_ERRORS_ARE_FATAL is defined by default, icalerror_errors_are_fatal + is also defined by default. + +\layout Subsection + +Naming Standard +\layout Standard + +Structures that you access with the +\begin_inset Quotes eld +\end_inset + +struct +\begin_inset Quotes erd +\end_inset + + keyword, such as +\begin_inset Quotes eld +\end_inset + +struct icaltimetype +\begin_inset Quotes erd +\end_inset + + are things that you are allowed to see inside and poke at. + +\layout Standard + +Structures that you access though a typedef, such as +\begin_inset Quotes eld +\end_inset + +icalcomponent +\begin_inset Quotes erd +\end_inset + + are things where all of the data is hidden. + +\layout Standard + +Component names that start with +\begin_inset Quotes eld +\end_inset + +V +\begin_inset Quotes erd +\end_inset + + are part of RFC 2445 or another iCal standard. + Component names that start with +\begin_inset Quotes eld +\end_inset + +X +\begin_inset Quotes erd +\end_inset + + are also part of the spec, but they are not actually components in the + spec. + However, they look and act like components, so they are components in libical. + Names that start with +\begin_inset Quotes eld +\end_inset + +XLIC +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +X-LIC +\begin_inset Quotes erd +\end_inset + + are not part of any iCal spec. + They are used internally by libical. + +\layout Standard + +Enums that identify a component, property, value or parameter end with +\begin_inset Quotes eld +\end_inset + +_COMPONENT, +\begin_inset Quotes erd +\end_inset + + +\begin_inset Quotes eld +\end_inset + +_PROPERTY, +\begin_inset Quotes erd +\end_inset + + +\begin_inset Quotes eld +\end_inset + +_VALUE, +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +_PARAMETER +\begin_inset Quotes erd +\end_inset + +s +\layout Standard + +Enums that identify a parameter value have the name of the parameter as + the second word. + For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. +\layout Standard + +The enums for the parts of a recurarance rule and request statuses are irregular. + +\layout Section + +Hacks and Bugs +\layout Standard + +There are a lot of hacks in the library -- bits of code that I am not proud + of and should probably be changed. + These are marked with the comment string +\begin_inset Quotes eld +\end_inset + +HACK. +\begin_inset Quotes erd +\end_inset + + +\the_end diff --git a/libkcal/libical/doc/UsingLibical.ps b/libkcal/libical/doc/UsingLibical.ps new file mode 100644 index 000000000..6223144e3 --- /dev/null +++ b/libkcal/libical/doc/UsingLibical.ps @@ -0,0 +1,2327 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software +%%Title: UsingLibical.dvi +%%Pages: 22 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -t letter -o +%+ /usr/local/home/eric/proj/FreeAssociation/libical/doc/UsingLibical.ps +%+ UsingLibical.dvi +%DVIPSParameters: dpi=600, compressed +%DVIPSSource: TeX output 2001.01.09:0928 +%%BeginProcSet: texc.pro +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 +1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx +0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx +sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ +rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp +gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B +/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ +/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ +A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy +get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} +ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp +fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 +{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add +chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ +1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} +forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +TeXDict begin 40258431 52099146 1000 600 600 (UsingLibical.dvi) +@start +%DVIPSBitmapFont: Fa ecti1000 10 7 +/Fa 7 118 df<EA03C0EA07F0120F121F13F8A313F0EA07B0EA003013701360A213E013 +C01201EA038013005A120E5A5A5A5A5A0D197A8819>44 D<147F903803FFC090380FC1E0 +90381F0070017E13784913383901F801F83803F003120713E0120FD81FC013F091C7FC48 +5AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB03C0EC0F80 +6CEB3E00380F81F83803FFE0C690C7FC1D2677A426>99 D<D801E001FEEB07F03C07F803 +FF801FFC3C0E3C0F07C0783E3C1E3E3C03E1E01F261C1F78D9F3C013803C383FF001F780 +0F02E01400007801C013FE007018C002805B4A4848EB1F80EAF07FD8E07E5CA200000207 +143F01FE1700495CA2030F5C0001177E495C18FE031F5C120349DA8001131C18F8033F15 +3C00070403133849020013F0A24B1570000F17E049017E15F019E003FEECE1C0001FEE01 +E34949903800FF000007C70038143C3E2679A444>109 D<3903C003F0390FF01FFC391E +783C0F381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FC +EAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E2126 +79A423>114 D<14FE903807FF8090380F83C090383E00E04913F00178137001F813F000 +01130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C013 +00143F141F140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB4 +5AD801FEC7FC1C267AA422>I<EB0380EB07C0130FA4131F1480A3133F1400A35B137E00 +7FB5FCA2B6FC3800FC00A312015BA312035BA312075BA3120F5BA3121FEB801CA2143C00 +3F1338EB0078147014F014E0EB01C0EA3E03381F0780380F0F00EA07FCEA01F0183579B3 +1C>I<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C0 +1270013F131F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE12 +0349EBFC0EA20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A +00F83C78E090393FF03FC090390FC00F00272679A42D>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fb ecbx1200 12 42 +/Fb 42 122 df<B612F8A91D097F9A25>45 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA +7FFCEA3FF8EA1FF0EA07C00F0F788E1F>I<EC03C01407141F147FEB03FF133FB6FCA413 +C3EA0003B3B3ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E00003 +15F82607FC0313FE3A0FE0007FFFD81F806D138048C7000F13C0488001C015E001F07F00 +FF6E13F07F17F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC +4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D9 +07E014F0495A495A49C8FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D41 +7BC038>I<ECFFF0010713FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81 +D80FF86D138013FE001F16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B +020F1380902607FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0 +A26F13F0A217F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80 +491380D81FF0491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D +427BC038>I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87 +EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A +485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038> +I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9 +FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13 +804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C +4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB6 +12F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F13FC +49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFFE048495A5A1400 +485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF8000FF +017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F13E0 +A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913806C +018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC9038003FF02D42 +7BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8EA3F +00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14035D +14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A2F44 +7AC238>I<EE1F80A24C7EA24C7EA34C7EA24B7FA34B7FA24B7FA34B7F169F031F80161F +82033F80ED3E07037E80157C8203FC804B7E02018115F0820203814B137F0207815D173F +020F814B7F021F8292C77EA24A82023E80027E82027FB7FCA291B87EA2498302F0C8FCA2 +0103834A157F0107834A153FA249488284011F8491C97E4984133E017E82B6020FB612F0 +A54C457CC455>65 D<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791 +B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E494881494881494816 +7F4849163F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C7FC12 +FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17C06E16077E6C6DEE0F806C6D +EE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F0010101FEEC1FE06D903AFFF0 +01FF80023F90B6C7FC020715FC020115F0DA001F1480030001F8C8FC44467AC451>67 +D<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E193EA3191EA21778A2 +85A405F890C7FCA316011603161F92B5FCA5ED001F160316011600A2F101E01778A2F103 +C0A494C7FC1907A21A80A2190FA2191FA2193FF17F0061601807181F4DB5FCBBFC61A443 +447DC34A>69 D<B7D88003B612FEA526003FFEC9EBF800B3A791B9FCA54AC9FCB3AAB7D8 +8003B612FEA54F447CC358>72 D<B712F0A526003FFECAFCB3B1F00780A4180F1900A460 +A360A2187EA218FE170117031707171F177FEE03FFB95AA539447CC343>76 +D<B500FE067FB512806E95B6FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6DEE079F +A26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A26E6DEC +03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F6D485A +A26F6D485AA26F6D485AA3706C48C7FCA293383FF81EA2706C5AA2706C5AA3706C5AA270 +5BA2705BA2705BA2B6057FB6128071C7FCA2173E171C61447CC36A>I<B64BB512FE8181 +A281D8003F6D91C7EA780081013D7F81133C6E7E6E7F6E7F6E7F6E7F82806E7F6E7F6F7E +6F7F83816F7F6F7F6F7F6F7F6F7F8382707F707F707F707F8482707F707F717E71138071 +13C019E0837113F07113F87113FC7113FE19FF847213F884848484A28484197F193F191F +A2190F1907B61603190119001A78A24F447CC358>I<923807FFC092B512FE0207ECFFC0 +021F15F091267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E +6C7E49486F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13E0A2 +4819F04982003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A2 +6D5E6C19F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D +6C4B5A6D6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F802 +0715C002004AC8FC030713C047467AC454>I<B9FC18F018FE727E19E0D8001F90C7000F +7F05017F716C7E727E727E721380A21AC084A21AE0A91AC0A24E1380A21A00604E5A4E5A +4D485A050F5B92B712C096C7FC18FC18C092CBFCB3A7B712E0A543447DC34D>I<DAFFE0 +131C010701FE133C013F9038FF807C90B6EAE0FC4815F9489038801FFF3907FC00014848 +EB007F4848143F4848140F491407007F15035B1601160012FF177CA27FA26D153C7F7F6D +92C7FC6C7EEBFFE014FE6CEBFFF015FF6C15E016FC6C816C6F7E6C826C826C6C81011F81 +0107811300020F80140003077FED007F82040F1380828212F082A282A27EA218007EA26C +5D6C5E6D14036D5D6D140701F84A5A01FFEC3FF002F8EBFFE0486CB65AD8FC1F92C7FCD8 +F80714FC48C614F0480107138031467AC43E>83 D<003FBA12E0A59026FE000FEB8003D8 +7FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8481978 +A5C81700B3B3A20107B8FCA545437CC24E>I<B792B6FCA526003FFECAEAFC00806D606F +15016D608119036D606F15076D606F150F6D6081191F6D6D93C7FC61027F163E6F157E02 +3F167C8119FC6E6D5C18016E5E7013036E5E8218076E6D5C180F6E5E70131F6E93C8FC70 +5B037F143E82187E033F147C7013FC6F5C17816F5C17C117C36F5C17E76F5C17FF6F5CA3 +6F91C9FCA2705AA2705AA3705AA2705AA2705AA250457EC355>86 +D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E +A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 +0313E0481380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEB +FFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 +D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F +FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18 +F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9 +F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90 +397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED +00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00 +6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32 +>I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8 +07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC +127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F +EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E +010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F +ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F +17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE +011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13 +F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03 +F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E +010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848 +903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C +495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F +7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748 +48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B +07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F +C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91 +39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48 +B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF +A512037EB3AFB6FCA518467CC520>I<EC03E0EC0FF8EC1FFCEC3FFEA2EC7FFFA5EC3FFE +A2EC1FFCEC0FF8EC03E091C7FCAAEC01FF0103B5FCA5EB000F80B3B3A7EA1F80EA3FC0EA +7FE0EAFFF0EC0FFEA215FC141F01E013F8007FEB3FF0393FC0FFE06CB512806C14000003 +13FCC613C0205A86C522>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457CC420>108 +D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E4880913D +87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C13 +0F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E> +I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F801F00039039 +9F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>I<EC1F +FC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848C7EA3FE000 +078248486E7E49140F001F82A2003F82491407007F82A400FF1780AA007F1700A46C6C4A +5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F90C7FC6DB5 +5A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590B57E02C314 +E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E0 +5C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E49 +13006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536 +407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE +6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E> +114 D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E +00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C80000380 +6C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C14 +1FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7C +AD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FC +A4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5 +FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA50003EC000F +6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C7010F14070103 +13FE9026007FF0EBFC00372E7CAC3E>I<B500FE90383FFFF0A5C601F0903803E0006D6C +495A6D6C495A011F4AC7FC6E5B6D6C137E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06E +B45A806E90C8FC5D6E7E6E7F6E7FA24A7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E4948 +6C7F01036D7F49487E02C08049486C7F49C76C7E013E6E7E017E141FB500E090B512FCA5 +362C7EAB3B>120 D<B6903803FFFCA5000101E09038003E006C163C80017F5D8017F801 +3F5D6E1301011F5D6E1303010F5D6E13076D5DED800F6D92C7FC15C05E6DEBE01E163E6D +143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA2 +6E5AA21578A215F85D14015D001F1303D83F805B387FC007D8FFE05B140F92C9FC5C143E +495A387FC1F8EB07F06CB45A6C5B000790CAFCEA01FC36407EAB3B>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fc ectt1000 10 78 +/Fc 78 123 df<121FEA3F80EA7FC0EAFFE0B0EA7FC0AEEA1F00C7FCA7121FEA3F80EA7F +C0EAFFE0A5EA7FC0EA3F80EA1F000B3470B32C>33 D<003C131E007F137F481480A66C14 +00A6007E7FA6003E133EA3003C131E001C131C191977B32C>I<EA0F80EA1FE0EA3FF012 +7F13F8A213FCA2123F121F120FEA007CA313FC13F8A2120113F01203EA07E0A2EA0FC0EA +3F80127FEAFF005A12F812700E1D71B22C>39 D<143814FC13011303EB07F8EB0FF0EB1F +C0EB3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5A +AC7E127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0F +F0EB07F8EB03FC130113001438164272B92C>I<127012FC7E7E6C7E6C7EEA0FE06C7E6C +7E6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301A314FC1300AC13 +0114F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE485A485A485A485A +EA3FC0485A48C7FC5A5A1270164279B92C>I<EB0380497EA60020140800F8143E00FE14 +FE00FF13C1EBC7C7EBE7CF003FB512F8000F14E0000314806C140038007FFCA248B5FC48 +1480000F14E0003F14F839FFE7CFFEEBC7C7EB07C100FE13C000F8143E00201408000014 +00A66D5A1F247AAA2C>I<147014F8AF003FB612E0B712F8A4C700F8C7FCB0147025267D +AB2C>I<EA0F80EA1FE0EA3FF0EA7FF8A213FCA3123F121F120F120013F8A21201EA03F0 +1207EA1FE0EA7FC0EAFF80130012FC12700E17718A2C>I<007FB512F0B612F8A36C14F0 +1D0579942C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507 +ED0F80A2151F16005D153E157E157CA215FC5D14015D14035D14075D140F5D141F92C7FC +5C143EA2147E147C14FC5C13015C13035C13075C130F5C131F91C8FC5B133EA2137E137C +13FC5B12015B12035B12075B120F5B121F90C9FCA25A123E127E127C12FC5AA212702141 +7BB92C>I<EB03F8EB0FFE90383FFF80497F90B57E3901FE0FF03903F803F848486C7EEB +E0004848137EA248487FA248C7EA1F80A2003E140F007E15C0A3007C140700FC15E0AC6C +140F007E15C0A46CEC1F80A36C6CEB3F00A26C6C137E6D13FE00075CEBF0016C6C485A39 +01FE0FF06CB55A6D5B6D5BD90FFEC7FCEB03F823357CB32C>I<1307497EA2131FA2133F +137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C34 +77B32C>I<EB0FF890387FFF8048B512E00007804814FC391FF80FFE393FE001FF903880 +007F48C7EA3F80007E141F00FE15C0150F6C15E01507A3127E123CC8FCA2150F16C0151F +1680153F16005D15FE4A5A14034A5A4A5A4A5A4A5AECFF804948C7FC495A495A495AEB3F +E0EB7F8049C8FC485A4848EB03C04848EB07E0EA1FE0485A48B6FCB7FCA36C15C023347C +B32C>I<EB0FFC90387FFF8048B512E0000714F84880391FF807FEEBC0004848137F6D7F +1680151FA26C5A6CC7FCC8FC153F16005D15FE14014A5AEC1FF890381FFFF0495BA215F8 +6D7F90380007FEEC00FF81ED3F80ED1FC0150FA216E01507A2123C127EB4FC150F16C0A2 +48141F007FEC3F806DEB7F006C6C5B391FF807FE6CB55A6C5C6C14E0C66C1380D90FFCC7 +FC23357CB32C>I<EC07F04A7E141F143FA2147EA214FCEB01F8A2EB03F0EB07E0A2EB0F +C0EB1F80A2EB3F00137EA25B485AA2485A5B1207485AA2485A48C7FCA2127E5AB712FC16 +FEA36C15FCC8EAF800AA91387FFFF091B512F8A36E13F027347EB32C>I<000FB512FE48 +80A35D0180C8FCADEB83FE90389FFF8090B512E015F8819038FE03FE9038F000FF01C07F +49EB3F8090C7121F6C15C0C8120FA2ED07E0A4123C127EB4FC150F16C0A248141F007EEC +3F80007FEC7F006C6C5B6D485A391FF80FFC6CB55A6C5C000114C06C6C90C7FCEB0FF823 +347CB22C>I<EC3FC0903801FFF801077F011F7F497F90387FE07F9039FF003F80484813 +7FEA03F8485A5B000FEC3F004848131E4990C7FC123F90C9FCA25A127EEB03FE90381FFF +80D8FC7F13E000FDB57EB67E9038FE07FC9038F001FE9038C0007F49EB3F8090C7121F16 +C048140F16E01507A3127EA47E150F6D14C0001F141F6D1480000F143F6DEB7F003907F8 +01FE3903FE07FC6CB55A6C5C6D5B011F1380D907FCC7FC23357CB32C>I<1278B712C016 +E0A316C000FCC7EA3F80ED7F0015FE00785CC712014A5A4A5A5D140F5D4A5A143F92C7FC +5C147E14FE5C13015CA2495AA213075CA3495AA4495AA5133F91C8FCAA131E23357CB32C +>I<EB07FC90383FFF8090B512E0000314F84880390FFC07FE391FF001FF9038C0007F48 +48EB3F8090C7121F4815C0007E140FA56CEC1F80A26C6CEB3F006D5B390FF001FE3903FC +07F86CB55A6C6C13C0D907FCC7FC90387FFFC048B512F03903FC07F8390FF001FE391FC0 +007F497F48C7EA1F80007EEC0FC0A248EC07E0A7007EEC0FC0A2007F141F6C6CEB3F806C +6CEB7F009038F001FF390FFC07FE6CB55A6C5CC614E0013F1380D907FCC7FC23357CB32C +>I<EB07FCEB3FFF90B512C0488048803907FC07F8390FF001FC48486C7ED83F80137E15 +7F48C77E007EEC1F8012FE5AED0FC0A416E0A37E127E007F141F7E6D133F6C6C137F390F +F001FF3807FC0F6CB6FC6C14F76C14C7013F130FD90FF813C090C7FCA2151F1680153F16 +00000F5C486C137E486C13FE4A5A4A5A14079038801FF0391FE07FE090B55A6C91C7FC6C +5B000113F838007FC023357CB32C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F +00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>I<EA0F80EA +1FC0EA3FE0EA7FF0A5EA3FE0EA1FC0EA0F80C7FCAEEA0F80EA1FE0EA3FF0EA7FF8A213FC +A3123F121F120F120013F8A21201EA03F01207EA1FE0EA7FC0EAFF80130012FC12700E30 +71A32C>I<007FB612F0B712F8A36C15F0CAFCA8007FB612F0B712F8A36C15F025127DA1 +2C>61 D<EC7F80903803FFE0010F7F013F7F497F9038FFC0FE3901FE007FD803F87F4848 +EB1F809038E00FCF390FC03FFF48484813C091B5FCEA3F01393E03F87F903907F03FE000 +7EEBE01F397C0FC00FEC8007A2EAFC1F00F8EB0003A900FCEB8007D87C0F14C0A2ECC00F +3A7E07E01F80003EEBF03F903903F87F00393F01FFFED81F805B6E5A6C6C6C5A3907E00F +C09039F00007C06C6CEB0FE0D801FE131F3900FFC0FF6DB512C06D1480010FEBFE000103 +13F89038007FC023337CB22C>64 D<14FE497EA4497FA214EFA2130781A214C7A2010F7F +A314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FEA34880A29038F800 +3FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15FC497E27347EB32C +>I<007FB512E015F8B612FE6C8016C03903F0003FED0FE0ED07F01503A2ED01F8A6ED03 +F0A21507ED0FE0ED1FC0EDFF8090B612005D5D15FF16C09039F0001FE0ED07F0ED03F815 +01ED00FCA216FE167EA616FE16FC1501ED03F8150FED3FF0007FB612E016C0B712806CEC +FE0015F027337FB22C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE +007F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212 +FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC13 +1F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>I<00 +7FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716F015 +0316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80EDFF00 +EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E3903F0 +0001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8007F +B612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA716781600 +A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C>I< +903901FC038090390FFF87C04913EF017F13FF90B6FC4813073803FC01497E4848137F48 +48133F49131F121F5B003F140F90C7FCA2127EED078092C7FCA212FE5AA8913803FFF84A +13FCA27E007E6D13F89138000FC0A36C141FA27F121F6D133F120F6D137F6C7E6C6C13FF +6D5A3801FF076C90B5FC6D13EF011F13CF6DEB0780D901FCC7FC26357DB32C>I<D87FFE +EBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E0000FB3D87FFEEBFFFC +B54813FEA36C486C13FC27337EB22C>I<007FB512F8B612FCA36C14F839000FC000B3B3 +A5007FB512F8B612FCA36C14F81E3379B22C>I<0107B512804914C0A36D148090390003 +F000B3AF1218127EA2B4FCA24A5A48130F007F131F9038C07FC06CB55A6C91C7FC6C5B00 +0313F838007FC022347BB22C>I<D87FFCEB7FF8486CEBFFFCA36C48EB7FF8D807C0EB1F +80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7FC147E5CEBC1F813C3EBC7FC +A2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF00301E07FEBC001816E7EA215 +7E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB3FFEA36C48EB1FFC27337EB2 +2C>I<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15F025 +337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F15FC000F15E001BC137BA4019E +13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201831383A214EFA201811303A214 +FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFEA36C48EB1FFC27337EB22C>I< +D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA2148013C7 +14C0A213C314E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587A21407 +15C7A2140315E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F8027337EB2 +2C>I<EB7FFF0003B512E0000F14F848804880EBE003EB800048C7127FA2007E80A300FE +158048141FB3A86C143FA2007E1500A3007F5CA26C6C13FEEBF00790B5FC6C5C6C5C0003 +14E0C66C90C7FC21357BB32C>I<007FB512C0B612F88115FF6C15802603F00013C0153F +ED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280160015 +FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<EB7FFF0003B512E0000F14 +F848804880EBF007EB800048C7127FA2007E80A300FE158048141FB3A7EB01F0EB03F800 +FE143F267E01FC1300A2EB00FE007F5C147FD83F8013FEEBF03F90B5FC6C5C6C5C000314 +E0C67E90380007F0A26E7EA26E7EA26E7EA2157FA2153E21407BB32C>I<387FFFFCB67E +15E015F86C803907E007FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE14 +0790B55A5D15E081819038E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5 +ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381FF80790B5EA0F804814CF000714 +FF5A381FF01F383FC003497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC +127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07 +FF02001380153FED1FC0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0 +EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007F +B612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA22733 +7EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C03B03F00001F800B3AF6D130300 +015DA26D130700005D6D130F017F495A6D6C485AECE0FF6DB5C7FC6D5B010313F86D5B90 +38003F802B3480B22C>I<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD80FC0EB07E06D13 +0F000715C0A36D131F00031580A36D133F00011500A36D5B0000147EA4017E5BA46D485A +A490381F83F0A4010F5B14C7A301075BA214EFA201035BA214FFA26D90C7FCA46D5A2734 +7EB22C>I<D87FF0EB07FF486C491380A36C486D1300001FC8127CA46C6C5CA76C6C495A +A4143E147FA33A03E0FF83E0A214F7A201E113C3A3000101E35BA201F113C701F313E7A3 +14C1A200005DA201F713F71480A301FF13FF017F91C7FC4A7EA4013E133E29347FB22C> +I<3A3FFF03FFE0484913F0148714076C6D13E03A01F800FE007F0000495A13FE017E5BEB +7F03013F5B1487011F5B14CF010F5B14FF6D5BA26D90C7FCA26D5AA26D5AA2497EA2497E +A2497F81EB0FCF81EB1FC7EC87F0EB3F83EC03F8EB7F01017E7FEBFE00497F0001147E49 +137F000380491480151FD87FFEEBFFFC6D5AB514FE6C15FC497E27337EB22C>I<D87FFC +EB7FFC486CEBFFFEA36C48EB7FFCD807F0EB0FC0151F000315806D133F12016DEB7F0012 +006D137E017E13FE017F5BEB3F01EC81F8131FEC83F0EB0FC314C7903807E7E0A201035B +14EF6DB45AA292C7FC7F5C147EB0903807FFE0497FA36D5B27337EB22C>I<003FB612C0 +4815E0A4007EC7EA1FC0ED3F80A2ED7F00157E15FE4A5A003C5CC712034A5AA24A5A4A5A +A24A5A4AC7FCA214FE495AA2495A495AA2495A495AA2495A49C8FCA213FE485AA24848EB +03C049EB07E01207485A5B121F485AA248C7FCB7FCA46C15C023337CB22C>I<007FB6FC +B71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF8 +1407EC01FC381F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF8 +00EA7FC090C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EB +FE1F3A003FF007FC27247CA32C>97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13 +FE90B6FC16809138F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE16 +7EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B512801600 +01FB5B01F813F83900F03FC027337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48 +804848C6FCEA0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB +1F806C7E6D133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC2124 +7AA32C>I<EC0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380F +F00348487E497E48487F90C7FC007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A38 +0FF0073807FC1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03 +FE90381FFFC0017F13F048B57E48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1F +C090C7120F5A007E15E015075AB7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E0 +6C7ED80FF0130F6C6CEB3FC001FF13FF000190B512806C1500013F13FC010F13F0010113 +8023247CA32C>I<EC0FF8EC3FFE91B5FC4914805B903807FC7F14F090390FE03F0014C0 +92C7FCA6007FB512FEB7FCA36C5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB2 +2C>I<ED03F8903907F80FFC90391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607 +F003133E3A0FE001FC1CD9C0001300001F8049137EA66D13FE000F5CEBE0016C6C485A39 +03FC0FF048B5FC5D481480D99FFEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48EC +FF804815E04815F03A3FC0001FF848C7EA03FC007E1400007C157C00FC157E48153EA46C +157E007E15FCD87F801303D83FE0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D800 +3F13F8010713C028387EA42C>I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE +01FB7F90B6FC9138F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480 +A36C01E0140029337FB22C>I<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFF +C080B5FC7EA2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2 +EC7FC0A3EC3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3B3A2141F003C1480 +007E133FB414005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467CB32C>I<EA7FE048 +7EA3127F1201AA91381FFFF04A13F8A36E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A +4AC7FC14FEEBF1FC13F3EBF7FE90B5FCA2EC9F80EC0FC001FE7FEBFC07496C7E496C7E81 +1400157E811680151F3A7FFFC0FFFCB500E113FEA36C01C013FC27337EB22C>I<387FFF +E0B57EA37EEA0003B3B3A5007FB61280B712C0A36C158022337BB22C>I<3A7F83F007E0 +9039CFFC1FF83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01 +F013E001E013C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0 +023F137F2D2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038 +F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E014002924 +7FA32C>I<EB07FCEB1FFF017F13C048B512F048803907FC07FC390FF001FE48486C7E01 +80133F003F158090C7121F007EEC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15 +806D133F6C6CEB7F006D5B6C6C485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07 +FC23247CA32C>I<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000019038F07FC091 +38801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D +13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8EC3FC091C8 +FCAD387FFFE0B57EA36C5B27367FA32C>I<903903FC078090391FFF0FC0017F13CF48B5 +12EF4814FF3807FE07380FF00148487E49137F4848133F90C7FC48141F127E150F5AA87E +007E141FA26C143F7F6C6C137F6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D13 +0FEB07F890C7FCAD0203B5FC4A1480A36E140029367DA32C>I<D87FFEEB3FC0B53801FF +F0020713F8021F13FC6C5B39003F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391 +C8FCAF007FB512E0B67EA36C5C26247EA32C>I<90387FF8700003B512F8120F5A5A387F +C00F387E00034813015AA36CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0 +C66C13F8010113FCEB0007EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE90 +38F007FC90B5FC15F815E000F8148039701FFC0020247AA32C>I<131E133FA9007FB6FC +B71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB5128016 +0001035B6D13F89038003FE0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB +000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF902603FE0713002924 +7FA32C>I<3A7FFF01FFFCB514FE148314016C15FC3A03E0000F80A26D131F00011500A2 +6D5B0000143EA26D137E017C137CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA2 +14C701075BA214EF01035BA214FF6D90C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF +6EB5FCB515806C16004A7ED807C0EB01F0A66C6C495AA3143E147FA2D801F0495AECFF87 +A214F7A201F113C700005D9038F9E3CFA201FB13EFA3D97BC190C7FC017F13FFA21480A2 +013F5B90381F007C29247FA32C>I<3A3FFF03FFF048018713F8A36C010313F03A00FC00 +7E005D90387E01F8013F5BEB1F83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D +5A147C14FE130180903803EF80903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E0001 +7C137C49137E0001803A7FFF01FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01 +FFFCB5008113FE148314816C010113FC3A03E0000F806C7E151F6D140012005D6D133E13 +7C017E137E013E137CA2013F13FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C013 +0114F75DEB00FFA292C7FC80A2143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87 +E0EA7E0F495A387FFF806C90C8FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0 +A4007EC7EA1FE0ED3FC0ED7F80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FC +EB01FC495AEB0FF0495A495A495A49C8FC4848EB01E04848EB03F0485A485A485A485A48 +5AB7FCA46C15E024247DA32C>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fd ecbx1000 10 57 +/Fd 57 122 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF +FE0FF0D93FF8ECF81F90267FE0019038F03FF849485A4816E014804816C00200ED1FF081 +F007C06F91C7FCA8B912E0A4000390C701C0C7FCB3ABB5D8FC3FEBFF80A43D3A7EB938> +27 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F12007F137E137FA2EB3F80A214C013 +1F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A414E0131FA214C0133F1480A2EB +7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC123E5A12F05A16537BBD25>41 +D<EA0F80EA3FE0EA7FF0A2EAFFF8A213FCA3127FA2123FEA0F9CEA001C133C1338A31378 +137013F0EA01E0A2EA03C0EA0780EA0F005A121C12180E1D798C1B>44 +D<B61280A819087F9620>I<EA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F80 +0D0D798C1B>I<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB61280A42136 +79B530>49 D<EB0FFE90387FFFC048B512F0000714FC390FE03FFF261F800F1380263F00 +0313C0D87F8014E0EBE00100FF6D13F07FA2ED7FF8A46C5A6C5A0006C7FCC8FCEDFFF0A2 +16E05C16C04A138016004A5A4A5AEC1FF05D4A5A4AC7FC14FE495AD903F01378495A495A +495A49C712F8017C14F05B49130148B6FC5A5A5A5A5A4815E0B7FCA425367BB530>I<EB +03FF011F13F0017F13FC3901FC07FF2603F003138048486C13C0496C13E0EA0FF86D14F0 +487EA66C4814E06C5A6C485AC714C04A138016004A5A4A5AEC3FF090380FFFC05D15F090 +380007FE913801FF806E13C016E0ED7FF016F8ED3FFCA216FEEA1FC0487E487E487EA416 +FCA249137F007F15F801C0EBFFF06C5A6C6C4813E0260FFC0713806CB61200000114FC6C +6C13F0010790C7FC27377CB530>I<ED07C0150FA2151F153F157F15FF5CA25C5C5C5C14 +3E143C5C5C1301495A5C495A495A5B133E5B13785B485A1203485A5B48C7FC121E5A127C +5AB81280A4C70001EBC000AA0103B61280A429367DB530>I<001C15C0D81F80130701F8 +137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFFE0017F13 +F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0A216F8A3 +121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F4913806C6C +481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>I<EC0FF8EC +FFFE0103EBFF8090390FF80FC090393FE003E090397F8001F09038FF000F48EC1FF84848 +133F485A120F5B121FA2003FEC1FF0ED0FE0484890C7FCA31408EC7FF039FFF1FFFC01F3 +13FFD9F78013809039FF007FC049EB3FE04914F0ED1FF85B16FCA34914FEA4127FA5123F +16FCA26C7E16F8000F143F6D14F0000715E06C6CEB7FC03A01FF81FF806C90B51200013F +13FC010F13F00101138027377CB530>I<123C123EEA3FE090B71280A41700485D5E5E5E +5EA2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA24A5A143F +4AC8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A29397BB7 +30>I<49B47E010F13F0013F13FC9038FE01FF3A01F8007F804848EB3FC04848EB1FE015 +0F484814F01507121FA27F7F7F6D130F01FF14E014C09138E01FC06CEBF83F9138FE7F80 +6C9038FFFE005D6C14F06C14FC6C14FF6D14806D14C090B612E0D803FD14F02607F07F13 +F848487E261FC00F13FC383F8003007F010013FE90C7127F151F00FE140715031501A215 +00A216FC7E6C14016D14F86C6C13036DEB07F06C6CEB0FE0D80FFEEB7FC00003B61200C6 +14FC013F13F00103138027377CB530>I<ED03E04B7EA24B7EA34B7EA24B7EA34B7EA292 +B57EA34A8015F302038015E1A202078015C0020F80ED807FA2021F80ED003F4A80023E13 +1FA2027E80027C7F02FC814A7FA20101824A7F49B77EA3498202C0C7FC010F824A147FA2 +011F8291C8123F4982013E151FA2017E82017C8101FE83B500F80107B61280A4413A7DB9 +48>65 D<B812C017FC17FF18C028007FF000037F04007F717E717E171F84A2717EA74D5A +A260173F4D5A4D5A4C13C0040F5B91B600FCC7FCA2EFFF8002F0C713F0EF3FF8717E717E +717E19807113C0A319E0A719C0A25F4D138019005FEF7FFE4C485AB912F018C095C7FC17 +F03B397DB844>I<DB3FFCEB01C00203B5EAC003021FECF00791B6EAFC0F01039039FC00 +FF3F4901C0EB1FFFD91FFEC77E49481403D97FF080494880485B48177F4849153F4890C9 +FC181F485A180F123F5B1807127FA24993C7FC12FFAD127F7FF003C0123FA27F001F1707 +A26C6C1780180F6C6D16006C6D5D6C173E6C6D157ED97FF85D6D6C4A5A6DB44A5A010701 +C0EB0FE06D01FCEBFF80010090B548C7FC021F14F8020314E09126003FFEC8FC3A3B7BB9 +45>I<B87E17F817FF18C028007FF8000713F09338007FF8EF1FFE717E050313807113C0 +A27113E0F07FF0A2F03FF8A219FC181FA219FEA419FFAC19FEA419FC183FA219F8187F19 +F0F0FFE0A24D13C04D13804D1300EF1FFEEF7FFC933807FFF0B912C095C7FC17FC178040 +397DB849>I<B912F0A426007FF8C7FCEF1FF8170717031701A21700A21878A3043C137C +183CA41800167CA216FC150391B5FCA4ECF8031500167CA2163C180FA3181EA293C7FCA2 +183EA2183C187CA218FCA2EF01F81703170F173FEE01FFB9FC18F0A338397DB83F>I<B9 +12C0A43A007FF800039338007FE0171F170F1707A21703A21701A318F0EE7800A41800A2 +16F8A21501150791B5FCA4ECF80715011500A21678A693C8FCADB7FCA434397DB83C>I< +B6D8FC03B612F0A426007FF8C70001EBE000B3A391B8FCA402F8C71201B3A6B6D8FC03B6 +12F0A444397DB84B>72 D<B612FCA439007FF800B3B3ADB612FCA41E397DB824>I<B7FC +A426007FF8C9FCB3ACEF0780A5170F1800A35FA25FA25F5F5E5EEE0FFE167FB8FCA43139 +7DB839>76 D<B500F80403B512F06E5EA26E5ED8007FF1E000A2D97BFF161EA201796D5D +A201786D5DA26E6C5DA36E6C4A5AA26E6C4A5AA26E6C4A5AA26E6C4A5AA26E6C141EA36E +6D5BA26E6D5BA26F6C5BA26F6C485AA36F6C485AA26F6C485AA26F6C48C7FCA2923803FF +1EA36F13BCA26F13F8A2705AA2705AA213FCB500FC6D4848B612F0A2EE0F80EE07005439 +7DB85B>I<B500FC0203B512F0A28080C66C6D90390003F0006F6E5A81017B7F13798101 +787F6E7E6E7E6E7F6E7FA26E7F6E7F6E7F6E7F6F7E153F826F13806F13C06F13E06F13F0 +6F13F88117FCEE7FFEEE3FFF7013817013C17013E18218F17013F97013FDEF7FFF8383A2 +8383838383187FA2183F181F01FC160FB500FC150718031801A244397DB84B>I<EDFFF8 +020FEBFF80027F14F0903A01FFC01FFC010790380007FFD91FFC010113C0D93FF06D6C7E +49486E7E49486E7E48496E7E48834890C86C7EA248486F1380A248486F13C0A2003F18E0 +A348486F13F0A400FF18F8AC007F18F06D5DA3003F18E0A26D5D001F18C0A26C6C4B1380 +6C18006E5C6C6D4A5A6C5F6C6D4A5A6D6C4A5AD93FFC49485A6DB401075B0107D9C01F90 +C7FC010190B512FC6D6C14F0020F1480020001F8C8FC3D3B7BB948>I<B8FC17F017FEEF +FF8028007FF8000F13C0040113E07013F0EF7FF8EF3FFCA2EF1FFEA218FFA818FEA2EF3F +FCA2EF7FF8EFFFF04C13E0040F13C091B7120017FC17E002F8C9FCB3A4B612FCA438397D +B841>I<B712FCEEFFE017FC17FF28007FF8000F13C004017F707F717E717EA2717EA284 +A760A24D5A604D5A4D5A04035B041F90C8FC91B612FC17E0839139F8003FFCEE0FFF707F +707F8284A2707FA584A51A601AF084177F1901DD3FFE13E0B600FC011F130394390FFF87 +C071EBFF8005011400CBEA1FFC443A7DB848>82 D<D907FF130E013FEBE01E90B5EAF83E +0003ECFE7E3A07FC01FFFE390FF0001F4848130F48481303491301007F140090C8FC167E +5A163EA27F161E7F7F6D91C7FC13FC387FFFE014FEECFFF06C14FE6F7E6C816C15F06C81 +6C81C681133F010F801301D9000F1480EC007F030F13C01503818100F0157FA3163FA27E +17807E167F6C16007E6D14FE01E0495A01F813039039FF801FF800FC90B512E0D8F83F5C +D8F00749C7FC39E0007FF02A3B7BB935>I<003FB91280A4D9F800EBF003D87FC0923800 +7FC049161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE01 +0FB7FCA43B387DB742>I<B600FC011FB512C0A426007FF8C8381FC000725AB3B3181F01 +3F94C7FC8060011F163E6D6C157E187C6D6C15FC6D6D495A6D6DEB07F06D01F0EB1FE0DA +7FFEEBFFC0021FB6C8FC02075C020014F0030F1380423A7DB849>I<B600F00103B512E0 +A4C601F0C83807F0006E5E017F5F6E150FA2013F5F6E151F011F94C7FC6E5D6D163E6F14 +7E6D167CA26F14FC6D5E6F13016D5E6F13036D5E811707027F5D6F130F023F5D6F131F02 +1F92C8FC815F6E143EEE807E6E147CEEC0FC6E5C16E016E16E5C16F36E5C16FF6F5BA36F +5BA26F90C9FCA26F5AA36F5AA26F5AA26F5A433A7EB848>I<B6D8E01FB500FC90383FFF +FCA4000101F0C7D83FFCC8EA7E006C71153C171F6E197C017F701578836E7014F8013F6F +5E6E1801011F4B6D5CA26E18036D4B6D5CA26D6D496D495A173C6F170F6D037C6D91C7FC +EF787F6F5F6D4B6C6C131E816D02016E5BEFE01F03F8177C027F01036E13784D7E03FCEE +80F8023F49486C5C15FE021F010FEDC1E04D7E03FF16C36E49EDE3C0041E7F049E15F76E +01BC6D5C04FC15FF6E95C8FC4C80A26E5F4C143F6E5F4C141FA2037F5E4C140FA26F486E +5AA2031F5E93C812036F5E5E3A7EB863>I<007FB5D8F803B512F8A4C66C48C7D80FF0C7 +FC6D6C5D6D5E6F495A6D6D49C8FC7F6D6D137E6F5B6DEBF8016D5D6F485A6E6C485A023F +130FDA1FFF5BEE9F806E01FFC9FC805E6E5B6E5B80826F7E153F826F7F5D4B7F92B57EA2 +DA01F97FDA03F17F03F07F913807E07FDA0FC07F021F6D7E4B7E4A486C7F027E8102FE6D +7F4A7F49488149486D7F0107804A6E7E49488149486E7E013F81017F83B60107B61280A4 +41397DB848>I<EB3FFE0003B512E0000F14F8391FF00FFE003FEB03FF6D6C7F6E7FA26F +7EA26C5A6C5AEA0380C8FCA2EC3FFF010FB5FC137F3901FFF87F00071380380FFE00EA3F +F85B485A12FF5BA415FF6D5A127F263FF00713F83B1FFC1FBFFFC0390FFFFE1F0003EBF8 +0F39003FE0032A257DA42E>97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138 +FE03FFDAF00013804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3 +EE1FF8A217F06E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8 +D9E00F13E0D9C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF801380 +2603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127F +A27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13 +F00101138023257DA42A>I<EE7F80ED7FFFA4150381AF903801FF81010F13F1013F13FD +9038FFC07F0003EB001FD807FC1307000F8048487F5B123FA2485AA312FFAA127FA27F12 +3FA26C6C5B000F5C6C6C5B6C6C4913C02701FF80FD13FE39007FFFF9011F13E101011301 +2F3A7DB935>I<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F48 +4814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA3 +6C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13 +FC010113E025257DA42C>I<EC1FF0903801FFFC010713FF90391FF87F8090383FE0FFD9 +FFC113C0A2481381A24813016E1380A2ED3E0092C7FCA8B6FCA4000390C8FCB3ABB512FE +A4223A7DB91D>I<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801 +131F48486C138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C +4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512 +F8EDFF8016E06C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA36C157F +6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B +377DA530>I<13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F03FFDA3C0113 +8014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935>I<EA01F0EA07 +FC487EA2487EA56C5AA26C5AEA01F0C8FCA913FF127FA412077EB3A9B512F8A4153B7DBA +1B>I<141FEC7FC0ECFFE0A24913F0A56D13E0A2EC7FC0EC1F0091C7FCA9EC0FF0EB0FFF +A4EB007F143FB3B0121FEA3F80EA7FC0EAFFE0EC7FE0A215C014FF6C481380903883FE00 +6CB45A000F13F0000113801C4B86BA1D>I<13FFB5FCA412077EAF92380FFFE0A4923803 +FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7FE04A7E8181A2ECCF +FEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13F8A42D3A7EB932> +I<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97FE0EB0FFC00FF902601 +FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00903887801F000749DA +CF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB50083B512F0 +A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F03FFDA3C0113800007 +13780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435>I<903801 +FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D7E48486D7EA2003F81 +491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA26C6C495A6C6C495A6C +6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430>I<9039FF01FF80B500 +0F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7FE091C713F0EE3FF8A2 +EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEBFFC0DAF00313809139 +FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F357EA435>I<9038FE +03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5CA29138807F80ED3F00 +150C92C7FC91C8FCB3A2B512FEA422257EA427>114 D<90383FF0383903FFFEF8000F13 +FF381FC00F383F0003007E1301007C130012FC15787E7E6D130013FCEBFFE06C13FCECFF +806C14C06C14F06C14F81203C614FC131F9038007FFE140700F0130114007E157E7E157C +6C14FC6C14F8EB80019038F007F090B512C000F8140038E01FF81F257DA426>I<130FA5 +5BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7FCB21578A815F86CEB80F014816C +EBC3E090383FFFC06D1380903803FE001D357EB425>I<01FFEC3FC0B5EB3FFFA4000714 +016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90387FFFFC011F13F0010313803025 +7DA435>I<B539F001FFF8A4000390C7EA1F00161E6E133E6C153C6E137C6C15786E13F8 +017F5CECF001013F5C14F8011F495AA2ECFC07010F5CECFE0F010791C7FC6E5A6D131E15 +BE6D13BC15FC6D5BA36E5AA26E5AA26E5AA26E5AA22D257EA432>I<B500F1B538803FFF +A43D07FE000FF80003E06C6C010715C082028015076C6E6C148015076C01C0ED0F00826E +485C017FED801E5D90273FF01E7F5B17C0DAF83E147C011F90393C3FE078037C14F8903B +0FFC781FF0F0A29139FEF00FF10107EDF9E002FF14FB6D496CB45AA24B7E6D5EA26D496C +90C7FCA292C7FC6E5CA2023E147C023C143C40257EA445>I<B539F01FFFF0A400039039 +8003F8006C01C013E06C1407D97FE05B6D6C485A6E48C7FC90381FFC3E010F5B903807FE +FC6D6C5A5D6D5B6D5B6E7E6E7E814A7EA24A7E903801F3FFD903E37FD907C17FEB0FC049 +486C7E4A6C7E013E80496D7E49130F00016E7EB590383FFFF8A42D257EA432>I<B539F0 +01FFF8A4000390C7EA1F00161E6E133E6C153C6E137C6C15786E13F8017F5CECF001013F +5C14F8011F495AA2ECFC07010F5CECFE0F010791C7FC6E5A6D131E15BE6D13BC15FC6D5B +A36E5AA26E5AA26E5AA26E5AA292C8FCA25C141E003F133E387F803C38FFC07C147814F8 +EBC1F0EBC3E06C485A387D1F80D83FFFC9FCEA1FFCEA07F02D357EA432>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fe ecbx1440 14.4 35 +/Fe 35 122 df<DC7FFEECFFC0031FB5D8801F13F092B6D8E07F13FC020703F9B57E021F +D9C007B5EAC1FF91277FFE000102071380DAFFF8010713FC010301E049494813C0495B49 +494913F04990C7FC19E0495A741380017F17C04A6E6E130071EC00FC98C7FCAEBB12FEA5 +26007FFCC7000701C0C8FCB3B3A7007FB5D8FC07B612F0A552547DD34D>27 +D<151E153E15FE1403140F147FEB07FF0003B5FCB6FCA3EBF87FEAFC00C7FCB3B3B3A600 +7FB712FCA52E4E76CD42>49 D<EC1FFE49B512F0010F14FC013FECFF804915E02701FF80 +3F7F2703FC000713FCD807F001017F48486D7FD81F806E138048C87E7013C0D87FE016E0 +01F8806D16F000FF817F7013F8A56C5AA26C5A6C5AEA0380C914F05EA218E05E18C05E18 +804C13005F4C5A4C5A5F4B5B4B5B4B5B94C7FCED0FFC4B5A4B5AED7FC04B5A4A90C8FCEC +03FC4A5A4A4814F84A5A4A5A4AC8FC02FEEC01F0495A495A495A5CD90F80140349C8FC01 +3E1507017FB7FC90B812E05A5A5A5A5A5A5AB9FC18C0A4354E7ACD42>I<913807FFC002 +7F13FC0103B67E010F15E090261FF80313F890267FC0007F01FEC7EA3FFE48488148486E +138013FE486C6C6D13C0804817E080A66C5B18C06C5B6C90C75AD80038168090C8FC4C13 +00A24C5A5F4C5A4B5B4B13C0030F5BDB7FFEC7FC91387FFFF816C016FCEEFF80DA000313 +E09238007FF8EE3FFE707E70138018C07013E018F07013F8A218FC82A218FEA3EA03C0EA +0FF0EA3FFC487EA2B5FCA218FCA25E18F8A26C4816F0495C4916E0D83FE04A13C06C485C +D80FF04A1380D807FE91387FFE003B03FFE003FFFC6C90B65A6C6C15E0010F92C7FC0101 +14FCD9001F1380374F7BCD42>I<17FC1601A216031607160FA2161F163F167FA216FF5D +5DA25D5D5D167F153E157E15FC15F8EC01F01403EC07E015C0EC0F80141FEC3F00143E5C +14FC495A5C495A1307495A5C49C7FC5B137E137C5B1201485A5B485A120F485A90C8FC12 +3E127E5ABA1280A5C901FCC7FCAF021FB71280A5394F7CCE42>I<486C150601F0153E01 +FEEC01FED9FFF0133F91B65A5F5F5F5F5F94C7FC16FC5E16E093C8FC15FC01F0138091CA +FCAC913807FF80023F13F891B512FE01F36E7E9026FFFC0113E09139E0007FF891C76C7E +496E7E01F86E7E5B7013804916C0C9FC18E08218F0A418F8A31203EA0FE0EA3FF8487EA2 +12FF7FA218F0A25B5E6C4816E05B01C016C06CC85A18806C6C4A13007FD80FF04A5A6C6C +ECFFFCD803FE4913F02701FFE00F5B6C6CB612806D92C7FC010F14F8010114C09026003F +FCC8FC354F7ACD42>I<ED07FE92B512C0020314F0021F14FC91397FFC01FE9139FFE000 +7F01030180EB3F804990C7121F4948EC7FC0494814FF4948010313E0495A49485B5A485B +A2485BA2486F13C091C7FC4803001300177E94C7FC5AA25B127FA2ED3FF04AB5FC020714 +C000FF4914F091391F807FF891393E001FFE02786D7E4A6D13807013C06D5A4A6D13E018 +F05C7013F8A291C813FCA44916FEA3127FA6123FA37F6C17FCA36C17F85E7E6E15F06C17 +E06C6D5B6E15C06C4B13806D6C491300D93FFC495A6DB4EBFFFC010790B512F06D5D0100 +1580021F01FCC7FC020313C0374F7BCD42>I<B912FEF0FFF019FE737E1AE0D8000F01C0 +C7001F7F06037F727F726C7E867313807313C0A27313E0A37313F0A94F13E0A34F13C01B +80614F1300624F5A06035B4E13E0063F5B92B8C7FC19F8A2F1FF8003C0C7001F13E00601 +13F89538007FFE737E070F13C01BE07313F0851BF87313FCA27313FEA31BFFA91BFEA261 +1BFCA2614F13F81BF0614F13E0077F13C04EB51280060FEBFE00BB5A1AF01AC04FC7FC19 +C050527BD15D>66 D<932603FFF01407047F01FF140F0307B600E0131F033F03F8133F92 +B700FE137F02039126C003FF13FF020F01F8C7EA3FC1023F01C0EC0FE391B5C80003B5FC +4901FC814949814901E082011F498249498292CA7E4948834948835A4A83485B4885A248 +49187FA2485B1B3FA2485B1B1FA25AA21B0091CDFCA2B5FCAE7EA280A36C1A1FA36C7FA2 +1B3F6C7F1B3E6C7F1B7E6C6D187C6C1AFC6E18F86C19016D6CEF03F06D7E6FEE07E06D6D +EE0FC001076DEE1F806D01F8EE3F006D6D16FE6D01FF4B5A023F01C0EC07F8020F01FCEC +3FF00203903AFFC001FFC0020091B6C7FC033F15FC030715F0DB007F1480040301F0C8FC +505479D25F>I<BAFC19F819FF1AE01AF8D8000701F0C7001F13FE06017FDE003F13C007 +0F7F07037F737F737F747E747E747F86747F8886888688A2747FA3881B7FA288A51D80AF +1D00A564A21BFF64A3505BA2505BA2505BA2505B505B99C7FC505A1A7F4F485A4F13F007 +0F5B073F5B4EB55A061F49C8FCBB12F81AE097C9FC19F896CAFC59527CD165>I<BB12FC +A5D8000701F0C7000F7F1800191F190F19071903190119001A7E1A7F86A386A51B80DD03 +E0130FA497C7FCA31707A3170F171F173FEE01FF92B6FCA5EDF001EE003F171F170F1707 +A31703A794CAFCB3A2B812F0A549527CD153>70 D<B8D88007B712FCA5D8000701F0C900 +3FEB8000B3AE92BAFCA503F0C9123FB3B1B8D88007B712FCA55E527CD167>72 +D<B81280A5D8000701F0C7FCB3B3B3B2B81280A529527DD130>I<B812E0A5D8000F01E0 +CAFCB3B3A91AF8A419011AF0A51903A31907A2190F1AE0191FA2193F197F19FF60180760 +187F0503B5FCBB12C0A545527CD14F>76 D<B912E018FF19F019FE737ED8000701F0C714 +E0060F7F060313FC06007F737E737F8587737FA28785A287A863A261636361634F90C8FC +4F5A4F5A06035B060F13E095B5128092B748C9FC19F019C019F09226F0000713FC050013 +FF063F7F727F727F727F727FA2727FA28486A886A71D707513F8A2851C017301C013F0A2 +73EBE003B86C6D9038F007E0739038FC1FC0070190B51280736C1400080F5BCE13F85D53 +7CD162>82 D<DA0FFE141C91B500F0133C010702FC137C011F02FF13FC017F15C19026FF +F00113E148903980001FFB4890C7EA07FFD807FC14014848804848153F171F4848150FA2 +007F1607491503A2170112FFA217007FA26D167CA27F7F6D93C7FC6C7E14C014F8ECFF80 +6C14F8EDFFC06C15FC6CEDFF8017F06C16FC6C826C707E6C836D82011F8201078213016D +6C81020781EC007F030380ED003F040314801600173F837113C0838312F883A3837EA319 +807EA26C5E19007F6D4B5A7F6D4B5A01FC4B5A6D151FD9FFC04A5AD97FF8ECFFE028FE1F +FF80075B010790B6C7FCD8FC0115FC486C6C14F048010F14C0489026007FFCC8FC3A5479 +D249>I<B700FE4AB612F0A5D8000F01E0CA387FC000091FC7FCB3B3B26D611B3E811B7E +6D197CA26D6D17FC636D6D1601027F4D5A6F4C5A023F170F6E6C4C5A6E6D4B5A6E01E003 +FFC8FC6E01F8EC03FE020001FEEC1FFC923B7FFFE001FFF8031F90B612E0030716800300 +4BC9FC041F14F0040091CAFC5C537CD165>85 D<EC3FFE0107B512E0011F14FC017F14FF +2701FFC00F13C02703FE00037F486C01007F6E6D7E486D80707EA2707EA3707F6C5B6C90 +C7FC6C5AC9FCA60307B5FC0203B6FC147F0103B7FC011FEBF00F017F1300EBFFFC000313 +F04813C0485B4890C7FC5A5B485AF081F012FF5BA35EA26D5C127F6D5C003F03F713C36D +D901E314E06CD9C00714FF00079026F01F8114C06C90B5C61480C602FC6D1300011F01F0 +EB3FFC01010180EB07F03C387CB642>97 D<EB3FF8B5FCA51203C6FCB3A4EE7FF00307B5 +FC031F14C0037F14F0913AF9FF007FFCDAFFF8EB1FFF03E001077F03806D7F92C76C7F4A +6E7F5C4A6F7E85183F85A38584A31A80AD1A00A36061A261187F616E15FF616E4A5B6E4A +5B6F495BDACFE04990C7FCDA87F0EB3FFE913A01FE01FFF8496CB65A49013F14C0490107 +49C8FC90C813E041547DD249>I<913803FFE0023F13FE91B67E010315E0010F9038003F +F8D93FFCEB07FC4948497E4948131F4849497E485B485BA24890C7FC5A5B003F6F5A705A +705A007F92C8FC5BA312FFAD127F7FA3123F7F6CEE0F80A26C6D141F18006C6D5C6C6D14 +3E6C6D147E6C6D5C6D6C495A6DB4EB07F0010F9038C01FE06D90B5128001014AC7FCD900 +3F13F80203138031387CB63A>I<943803FF80040FB5FCA5EE003F170FB3A4913803FF80 +023F13F849B512FE0107ECFF8F011F9038C03FEF90273FFE0007B5FCD97FF8130149487F +484980484980484980488291C8FC5A5B123FA2127F5BA312FFAD127FA37F123FA3121F7F +6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D4914E0D97FFCD90FEFEBFF80D91FFFEB7F8F0107 +90B5120F010114FC6D6C13E00207010049C7FC41547CD249>I<913807FF80027F13F849 +B512FE01076E7E011F010313E0903A3FFC007FF0D97FF06D7E49486D7E4849130F48496D +7E48824890C77E1880485A82003F17C0A3485A18E082A212FFA290B8FCA401FCCAFCA612 +7FA37F123FA2EF03E06C7E17076C17C06C6D140F18806C6D141F6C6DEC3F006C6D147ED9 +7FFC495AD91FFFEB07F86D9038E03FF0010390B512C001005D023F01FCC7FC020113E033 +387CB63C>I<DA1FFE14FE49B539E007FF80010FDAFC1F13C0013FDAFF7F13E090267FF8 +07EBFF072701FFE001EBF07F48497E484990387FF83F91C7003F14C048EEFC1F489338FE +070049021F90C7FCA2003F82A9001F5EA26D143F6C5E6C5E6E137F6C6D495A6C6D485B6C +D9F80713804890B6C8FCD803EF14FC01C114E02707C01FFEC9FC49CBFCA2487EA37FA27F +13FC90B612FE6CEDFFF017FCEFFF806C8318F06C836C837F48B87E1207D80FFCC700037F +4848EC003F4848150F48486F138083485A83A56D5D007F18006D5D003F5F6C6C4B5A01FE +153FD807FFED7FF06C01C049485AC601FC011F1380013FB648C7FC010F15F8010115C0D9 +000F01F8C8FC3B4F7CB542>103 D<EB3FF8B5FCA51203C6FCB3A4EE1FFC93B57E030314 +E0030F14F892391FC07FFC92397E003FFE03F86D7EECF9F04B6D7FECFBC0ECFF8092C76C +7FA25CA25CA45CB3ACB6D8F807B612C0A542537CD249>I<133FEBFFC0487F487FA2487F +A66C5BA26C5B6C5B013FC7FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD3 +24>I<EB3FF8B5FCA51203C6FCB3A50407B512F0A59339007FF000EF3FC04D5A4DC7FCEE +01FC4C5AEE0FF04C5A4C5A4CC8FC16FEED03FC4B5A4B5A4B5A4B7E4B7EECF9FF02FB7F91 +B57EA28203BF7F031F7F14FE4A6C7FDAF0077F6F7FA26F7F6F7F167F83707F707FA2707F +707F707FA2707F707F84B6D8F00F14FEA53F537DD245>107 D<EB3FF8B5FCA51203C6FC +B3B3B3B1B612F8A51D537CD224>I<D93FF0D91FF84AB47EB591B56C010F13F8030302E0 +013F13FE030F6E90B6FCDB3F809027F803F80F7F922A7E007FFC07E0077F000302F89028 +3FFE0F80037FC6D9F1F0011F49487EDAF3E0DAFF3E814B153CDAF7805D92C76C496D7F14 +FF4A5EA24A5EA34A5EB3ADB6D8F80FB66CB612F8A565367BB56E>I<D93FF0EB1FFCB591 +B57E030314E0030F14F892391FC07FFC92397E003FFE000302F86D7EC6EBF1F04B6D7FEC +F3C0ECF78092C76C7F14FF5CA25CA45CB3ACB6D8F807B612C0A542367CB549>I<913801 +FFC0023F13FE91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF49486D7F +48496D7F48496D7F91C8127F4883488349153F001F83A2003F8349151FA2007F83A400FF +1880AC007F1800A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D495B6C6D +495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F49C8FC02 +0313E039387CB642>I<90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138 +F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC +5CA45CB3ABB612FEA52E367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315 +FE3907FE003FD80FF0130F4848130348481301491300127F90C8127EA248153EA27FA27F +01F091C7FC13FCEBFF806C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F01 +0F15801301D9000F14C0EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D +143F17807F6DEC7F0001F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791 +C7FC39E0007FF02B387CB634>I<147CA614FCA41301A31303A21307A2130F131F133F13 +7F13FF1203000F90B512FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E +806D6D5A6DEBC1F86DEBFFF001005C023F1380DA03FEC7FC294D7ECB33>I<D93FF89138 +01FFC0B50207B5FCA50003ED001FC61607B3AE5FA35FA25F137F5F6D6C14F7DC01E713F0 +6D6CD907C7EBFFC0903A0FFF801F876D90B51207010114FC6D6C13F0020701C091C7FC42 +377CB549>I<B600E090381FFFFCA5000101F8C7000113006CEE007C6E15FC017F5E6E14 +01013F5E8017036D6D5C17076D5E6F130F6D5E6F131F6D93C7FC815F6D6D133E177E6D15 +7C6F13FC027F5C811601DA3FFF5B16036E5C16876E5C16CF6E5C16EF16FF6E91C8FCA26E +5BA26E5BA26F5AA36F5AA26F5AA26F5AA35E151F93C9FC5D153E157ED81FC0137C487E48 +6C13FC486C5B14015D4A5A14074A5A6C48485A4948CAFC495A383F81FC6CB45A6C5B0003 +13C0C648CBFC3E4D7DB445>121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Ff ecrm1000 10 81 +/Ff 81 123 df<B81280A2290280962A>21 D<DA0FF813FC91397FFF07FF903B01F807DF +83C0903A07E001FF0F903B1F8007FE1FE090393F000FFC137E16F85B9338F00780484801 +0790C7FC1503ACB812F8A32801F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7F +BA30>27 D<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E +497EA25BA2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E26 +7FFFE0B512C0A32A3B7FBA2E>I<EC0FFC91387FFF70903901F803F0903807E00790381F +800FEB3F00137EA25B150748481303ADB7FCA33901F80003B3AB486C497E267FFFE0B512 +C0A32A3B7FBA2E>I<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F00F903C07E001CFC0 +0380903C1F8000FF0001C090273F0007FE130F017E4948497EA2495CA248485C03076E5A +03030203C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA486C496C497E267F +FFE0B500C1B51280A3413B7FBA45>I<007C137C00FE13FEEAFF01A3EAFE00A7007E13FC +007C137CA8003C137800381338A700181330171E77BA2A>34 D<121C127FEAFF80A213C0 +A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39 +D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FC +A25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E +1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F +6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0 +B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7 +FC120E5A5A5A5A5A13527CBD20>I<EB0380497EA7397803803C00FC147E00FE14FE397F +8383FC393FC387F8390FE38FE03903FBBF803900FFFE00EB3FF8EB0FE0A2EB3FF8EBFFFE +3903FBBF80390FE38FE0393FC387F8397F8383FC39FE0380FE00FC147E0078143C390007 +C000A76D5A1F247BBD2A>I<121C127FEAFF80A213C0A3127F121C1200A412011380A212 +0313005A1206120E5A5A5A12600A19798817>44 D<B512FCA516057F941C>I<121C127F +EAFF80A5EA7F00121C0909798817>I<1506A2150E150CA2151C151815381530A2157015 +60A215E015C0A214011580A2140315005C1406A2140E140CA2141C1418A214381430A214 +70146014E05CA213015CA2130391C7FCA25B1306A2130E130C131C1318A213381330A213 +701360A213E05BA212015B120390C8FCA25A1206A2120E120CA2121C1218A21238123012 +701260A212E05AA21F537BBD2A>I<EB03F8EB1FFF90387E0FC09038F803E03901E000F0 +484813780007147C48487FA248C77EA2481580A3007EEC0FC0A500FE15E0B3007E15C0A4 +007F141F6C1580A36C1500A26C6C133EA26C6C5B6C6C5BEBF0013900F803E090387E0FC0 +D91FFFC7FCEB03F823397DB62A>I<EB01C013031307131F13FFB5FCA2131F1200B3B3A7 +497E007FB512F0A31C3779B62A>I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0001E +6D7E001C6D7E486D7E5A6E7E126012FE6CEC7F807FA56CC7FC121CC8FCEDFF00A25D1401 +5D14035D4A5A4A5A5D4A5A4AC7FC147E5C495A14E0495A495A49C8FC011EEB01805B5B49 +130348481400485A485A90C75A48B6FC5A5A485CB6FCA321377CB62A>I<EB07F8EB3FFF +90B512C03901F80FF03903C007F848486C7E390E0001FEEA0F80391FE000FF7FA56C5A6C +5AC7485AA25D14035D4A5A5DEC0F80027FC7FCEB1FFCECFF809038000FE06E7EEC01FC81 +6E7EED7F80A216C0A2153F16E0A2121EEA7F80A2487EA316C0157F491480007EC7FC0070 +ECFF006C495A121E390F8003F83907F00FF00001B512C06C6C90C7FCEB0FF823397DB62A +>I<1538A2157815F8A2140114031407A2140F141F141B14331473146314C313011483EB +030313071306130C131C131813301370136013C01201EA038013005A120E120C5A123812 +305A12E0B712F8A3C73803F800AA4A7E0103B512F8A325387EB72A>I<0006140CD80780 +133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB1FFE903878 +0F809038E007E03907C003F0496C7E130000066D7E81C8FC8181A21680A4121C127F5A7F +A390C713005D12FC00605C12704A5A6C5C6C1303001E495A6C6C485A3907E03F800001B5 +C7FC38007FFCEB1FE021397CB62A>I<EC3FC0903801FFF0010713FC90380FE03E90383F +800790387E001F49EB3F804848137F485A12075B000FEC3F0049131E001F91C7FC5B123F +A3127F90C9FCEB01FC903807FF8039FF1E07E090383801F0496C7E01607F01E0137E497F +16805BED1FC0A390C713E0A57EA47F123F16C0A2001FEC3F807F000F15006D5B000714FE +6C6C5B6C6C485A3900FE07F090387FFFC0011F90C7FCEB03FC23397DB62A>I<12301238 +123E003FB612E0A316C05A168016000070C712060060140E5D5D00E014304814705D5DC7 +12014A5A4AC7FC1406140E5CA25C1478147014F05C1301A213035C1307A2130FA3131F5C +A2133FA5137FA96DC8FC131E233A7BB72A>I<EB03F8EB1FFF017F13C09038FC07F03901 +E001F83903C0007C4848133C90C7123E48141E000E141F001E80A3121FA26D5B6D131E7F +D80FF85B6D137C01FF13786C6D5A6CEBE3E0ECF780C601FFC7FC6D5A6D6C7E010F13E001 +3F7F01F97F3901E07FFE48486C7E380F800F48486C1380001E010113C0487F007C143F00 +78EC1FE0150F00F81407481403A21501A36C15C0A200781403007C15806C14076CEC0F00 +6C6C131ED807E0137C3903F803F0C6B55A013F1380D907FCC7FC23397DB62A>I<EB03F8 +EB1FFF017F13C03901FC07E048486C7E3907E001F8000F6D7E4848137E5B003F80A248C7 +1380A25AED1FC0A516E0A56C143FA36C7E157F121F6C6C13FF6C6C13DF000313013901F0 +039F3900FC0F1FD93FFC13C0EB07F090C7FCA2153F1680A216005D120F486C137E486C5B +A24A5A4A5A49485A381F000F001CEB1F80260F807FC7FC3807FFFE000113F838003FC023 +397DB62A>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C09 +2479A317>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A213C0A3127F12 +1C1200A412011380A2120313005A1206120E5A5A5A12600A3479A317>I<007FB812F8B9 +12FCCCFCB0B912FC6C17F836147B9E41>61 D<EC03FF021F13E09138FC00FCD901E0131E +D90780EB0780011EC7EA01E00138EC00704981498148488148488190C97E48D901FC1480 +000ED907FFEB01C0000C90391F03C000001C90267E00E013E000184901701360263801F8 +6D13700030496D13300103EC0FE0267007E00107133800601718495AA200E0171C484848 +150CAA6C6C7E1260A26D6C151C00701718263003F0130F0101141F00386D013F13382618 +00FC01771330001C017E9038E3F070000C90261F03C113E0000E903A07FF00FFC06CD901 +FCEB3F006C90CAFC7F6C7E6C7E13706D167C011EED03FCD90780EC1FF0D901E0ECFF80D9 +00FC90383FFC00021FB51280020301E0C7FC363C7BBA41>64 D<1538A3157CA315FEA34A +7EA34A6C7EA202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A20270 +7FEC6003A202C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7 +121FA2496E7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512 +FEA3373C7DBB3E>I<B712E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707E +A2707EA283A75F16035F4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0 +EE07F0707E707E83707EA21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486D +EB7FF0B812C094C7FC16F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A +01FF807E07903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE15 +3F12014848151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD +127F6DED0180A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F +15386D6C5CD91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F +13F002011380313D7BBA3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0F +F0EE03F8707E707E177FA2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF +0FF0A218E0A2171F18C0EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7 +FC16F816C036397DB83F>I<B812FEA3000190388000076C90C8FC173F838383A383A318 +80170116C0A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318 +E093C712C0A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397EB8 +38>I<B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706 +A2ED0180A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813 +C0B612C0A32F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC +000787D90FF0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507 +A248481503A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3F +C0A2123F7F121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB +03C7D903FEEB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41 +>I<B648B512FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D +497EB648B512FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A39 +7EB81E>I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380 +D87F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I< +B649B5FCA3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8 +FC160E5E5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C +7E14704A6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA270 +7E707F8484486D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9 +FCB3AD1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397D +B834>I<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F015 +63A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318 +A26E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F +8CA2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045 +397DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EB +C7FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC0 +16E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE +0FFEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA217063739 +7DB83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80 +EB07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F +17E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A2 +6C6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D +6C495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC +363D7BBA41>I<B712C016FC16FF0001D9800013C06C90C7EA1FE0707EEE03F883707EA2 +707EA21880A71800A24C5AA24C5A5FEE0FF04C5AEEFF8091B548C7FC16F091CAFCB3A548 +7FB6FCA331397EB838>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049 +486D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F0007178049153F000F17 +C049151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF17FCAC007F17F8A26D15 +0FA2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4FC3C03F80383807F003B +01FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77F0D91FCCEB3FE0D907EE +14806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E131C161F183CEF807CEFC0 +F8EE0FFFA318F08218E07013C07013809338007E00364B7BBA41>I<B612FEEDFFE016F8 +000190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283A65FA24C5AA24C5A4C5A +EE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE82707E707EA2161F83A5 +83A6F00180A217F8160F1803486D01071400B66D6C5A04011306933800FE0ECAEA3FFCEF +07F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F807E33907E000F7484813 +7F4848133F48C7121F003E140F007E1407A2007C140312FC1501A36C1400A37E6D14006C +7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F1480010714C0EB007F02 +0713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37EA216F07E15036C15E06C +14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFFF8010F13E0D8C00190 +C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F000781600 +00701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A33539 +7DB83C>I<B6903807FFFEA3000101809038007FE06C90C8EA1F80EF0F001706B3B2170E +6D150C80171C133F17186D6C14385F6D6C14F06D6C5C6D6C495A6D6CEB07806D6C49C7FC +91387F807E91381FFFF8020713E09138007F80373B7DB83E>I<B500FC91387FFF80A300 +03018091380FFC006C90C8EA07E0715A6C705A6E1403017F93C7FCA280013F1506A26E14 +0E011F150C80010F5DA28001075DA26E147001031560A26D6C5CA2806D4A5AA2ED800302 +7F91C8FCA291383FC006A215E0021F5BA2EDF01C020F1318A26E6C5AA215FC02035BA2ED +FEE002015BA26E6C5AA36FC9FCA3153EA2151CA3393B7EB83E>I<B5D8FC07B5D8F001B5 +FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307ED03C01B807F6C6F6C +1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE067FA26D6C010E6D5BEE +0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE6007A26D6C4CC7FC93 +38C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF0CA203E3151CDA1FE6 +EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA202015E4B1407A20200 +93C8FC4B80503B7EB855>I<007FB590383FFFFCA3C601F801071380D97FE0D903FCC7FC +013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C1306160E6D6C5B6DEB801816389138 +7FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC5D14036E7EA26E7F6F7EA24B7E15 +DF9138019FF09138038FF8150F91380607FC91380E03FE140C4A6C7EEC38000230804A6D +7E14E04A6D7E49486D7E130391C76C7E01066E7E130E010C6E7E011C1401013C8101FE82 +2607FF80010713E0B500E0013FEBFF80A339397EB83E>I<B500FE91383FFFE0A3000301 +E0913807FE00C649EC03F0017F6F5A606D6C5D6D6C140395C7FC6D6C1406A26D6C5C6D6C +141C17186D6C143817306D6D5B6E6C13E05F91383FE0015F91381FF003DA0FF890C8FC16 +06913807FC0E160C913803FE1C913801FF185E6E13B016E0157F6F5AB3A24B7E023FB512 +C0A33B397FB83E>I<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E +0038141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F +4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC +5B1203485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>I< +007FB81280B912C0A26C17803204797041>95 D<EB1FE0EBFFFC3803E03F3907000F8039 +0F8007E0486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8 +EA0FF0EA1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383F +C01E3A0FE0781FF03A03FFF00FE03A007F8007C026277DA52A>97 +D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3801F809039F7000FC001 +FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA167E16FEA216FC15016D14 +F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E903800FFF8C7EA1FC028 +3B7EB92E>I<EB03FC90381FFF8090387E03E03901F80070484813F83907E001FC380FC0 +03A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E127FA26C14067F001F14 +0E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090381FFF00EB07F81F277D +A525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0 +007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C +131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F90381FFE0FD907F813 +C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001F0D807E013F8380F +C0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14 +037F001F14076C6C13060007140E6D131CD801F013386C6C137090387E03E090381FFF80 +903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213 +FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I< +ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E0 +10000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38 +060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048 +C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB +0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3 +120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0EBF70013FE496D7EA25B +A35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380 +C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717>I<EB01C0EB07F0EB0F +F8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A2123C127E00FF13F01303A2 +14E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA03F012FFA3120F1203B1 +913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EB +F3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E157F811680ED1FC0486C +EB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203B3B3AD487EB512C0A312 +3A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F8380 +3F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A348 +6C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F90 +39F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280 +A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F84848137C48487F48487F +4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14 +076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090 +381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F +803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3 +ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FF +F8EC1FC091C8FCAB487EB512C0A328357EA42E>I<D903F813C090381FFE0190387E0781 +9038FC01C33903F000E3000714774848133749133F001F141F485A150F48C7FCA312FEAA +127FA37E6D131F121F6D133F120F6C6C137F6C6C13EF3901F801CF39007E078F90381FFE +0FEB07F890C7FCABED1FE00203B5FCA328357DA42C>I<3807E01F00FFEB7FC09038E1E3 +E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512 +F0A31C257EA421>I<EBFF03000313E7380F80FF381E003F487F487F00707F12F0A2807E +A27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB +0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A27 +7DA521>I<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215 +C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E0 +00FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7 +FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF800 +0FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2 +EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA214 +7CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E0 +18C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C717 +1CD93F01EBE01815830281EBF038D91F831430150102C3EBF87090260FC6001360A2D907 +E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100141E4A130E026013 +0C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092C7FC017E131C6D13 +186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF9038 +01C7E090380383F090380703F8EB0601496C7E011C137E49137F01787F496D7E486C8000 +0FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C0 +0003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A2 +6D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A21430A214701460A25C +A2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I<00 +3FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F80006013 +7F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A000714 +0E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fg ecss2074 20.74 10 +/Fg 10 116 df<EAFFC0B3B3B3B3B3B390B912FCA83E7570F456>76 +D<D8FFC0F03FF0B3B3B3B3AD6C6CF07FE0A46C6CF0FFC0A36D5F001F1A80A26C6C4D1300 +A26C6C4D5A6D170F6C616E161F6C6D4C5A6C6D4C5A6E16FF6D6C4B5B6D6C4B5B6D6C4B5B +6D6C6C021F90C7FC6D01E0EC7FFE6D01F849485A6D9026FF801F5B6D91B65A6E5E021F16 +8002074BC8FC020115F86E6C14E0030F91C9FC030013F04C7770F46D>85 +D<91380FFF8049B512F0010F14FC017F14FF48B712C0000782001F824882DAE0007F49C7 +EA3FFE01F8140FD81FC06E7E90C86C1380121E00186F13C0001081CAFCEF7FE0A318F017 +3FAD93B5FC157F0207B6FC143F49B7FC1307011F153F017FEBF80090B512804801F8C7FC +4813C04890C8FCEA0FFC485A485A5B485A5BA248C9FCA5177FA26D15FFA26C6C5C6D5C6D +140F6C6C5C01FF91B5FC6CEBE00791B612BF6CEDFE3F16FC6C15F06C15C06CECFE006C6C +13F0D91FFCC9FC344C77CA4C>97 D<EAFFC0B3B3ADED0FFC92B57E020714E0021F80027F +14FC91B67E01C38101C7829026CFFE0080D9DFF0131FD9FFC001037F4A6D7F49C86C7E49 +153F496F7E170F496F7E5B717E4981A2711380A2187FA219C0183FA419E0181FAD183F19 +C0A3187FA2198018FFA24D1300A25F6D5E17076D4B5A6D151F4D5A6D4B5A6D15FF6D0203 +5B6E495BD9DFE0013F5B9026CFFC01B5C7FC01C7B65A01C35D01C15D01C05D023F14C002 +0F5C020301FCC8FCC8EA3FE03B7C72FA52>I<ED3FFF4AB512F8020F14FF023F15C04A15 +F049B712FC4916FF49178049EBE0004990C7120FD93FFC02011300D97FF06E7E4948151F +0280814890C912034894C7FC5B485A5B120F5B121F5B123F5BA3485AA548CCFCAD6C7EA4 +7F123FA27F121F7FA26C7EA26C6C17806D1601000317036C6C160F6E151F6C01E0ED7FC0 +6D6CEC01FFD93FFC14076DB4143F6DD9E003B512806D90B6EAFE006D5E6D16F06D6C5D6E +1580020F02FCC7FC020114E09126003FFCC8FC3A4C78CA47>I<DB1FE04AB4FC912601FF +FE143F02079026FF8003B5FC4AECC01F023F02F0B6FC4A02FB158091BAFC49EBE01F49D9 +000302FCC7FC49486D01F8C8FC02F89038007F8049486E7E49486E7E4A140F013F824A14 +07A249C86C7EA401FE6F7EAA017F4B5AA46D6C4A5AA26E140F011F5E6E141F6D6C4A5A6D +6C4A5A02FEEB01FF496C4990C9FC499038E01FFE92B55A495D02BF5C020F14C0496C5CD9 +7E0149CAFC9138001FE001FE90CCFCA67FA27F8080EB3FF091B612FE6DEDFFF818FF6D17 +C019F0013F17FC498390BA7E48854801E0C71203480180DA001F7F4848C900037F484816 +0049EF3FF84848171F49717E127F4917078648481703A76D1707007F616D170F003F616D +171FD81FFCEF7FF06C6C4D5A6D5E6C01C003075B6C01F8033F5BC601FF4AB448C7FC6D01 +F0011F5B6D90B75A010F17E00103178001004CC8FC021F15F002031580DA000F01E0C9FC +496D7CC950>103 D<EAFFE0ABC7FCB3A9EA7FE0B3B3B3B30B6F74EE25>105 +D<EAFFC0B3B3B3B3B3B3AF0A7B73FA25>108 D<ED1FF826FFC001B57E020714E0021F14 +F8027F8091B67E01C18101C316809038C7FE00D9CFF0011F13C0D9DFE0010713E0D9FF80 +130191C8FC18F049157F5B173F4916F8A249151FA35BA45BB3B3AC354A72C952>110 +D<91380FFFC091B512FE0107ECFFC0011F15F8017F15FE90B812804817C05A489038F000 +3F4890C70003138049EC007FD81FF8151F491507003F16014992C7FCA2485AA77FA26C7E +7F7F6CB4FC6C13C014F86CEBFF806C14FC6CECFFE06C15FC6D14FF6D15C0010F81010315 +F8010081020F80DA007F7F03071480DB003F13C0160F040313E01600EF7FF0173FA2EF1F +F8A2170FA7EF1FF0A20070163F127C007FEE7FE001C015FF01F0020313C0B5020F138002 +F0137F91B712006C5E001F5E000716F0C65E011F1580010302FCC7FCD9000F13C0354C7C +CA3D>115 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + +%%EndSetup +%%Page: 1 1 +1 0 bop 0 201 a Fg(Using)54 b(Libical)p 0 315 3900 24 +v 0 428 a Ff(Eric)28 b(Busb)r(o)r(om)f(\(eric@soft)n(w)n +(arestudio.org\))1948 b(Jan)n(uary)26 b(2001)0 1072 y +Fe(Con)l(ten)l(ts)0 1312 y Fd(1)77 b(In)m(tro)s(duction)3201 +b(2)125 1468 y Ff(1.1)83 b(The)28 b(libical)f(pro)5 b(ject)67 +b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(3)125 1625 y(1.2)83 +b(License)22 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)134 b(3)125 1781 y(1.3)83 b(Example)28 b(Co)r(de)78 +b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(3)0 2021 +y Fd(2)77 b(Building)30 b(the)h(Library)2865 b(3)0 2260 +y(3)77 b(Structure)3330 b(3)125 2417 y Ff(3.1)83 b(Core)27 +b(iCal)g(classes)62 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 +b(4)315 2573 y(3.1.1)94 b(Prop)r(erties)34 b(.)42 b(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)134 b(4)315 2730 y(3.1.2)94 b(Comp)r(onen)n(ts)84 +b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315 2886 y(3.1.3)94 +b(V)-7 b(alues)108 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 +b(5)315 3043 y(3.1.4)94 b(P)n(arameters)61 b(.)41 b(.)h(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)134 b(5)125 3199 y(3.2)83 b(Other)27 b(elemen)n(ts)h(of)f(libical)42 +b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +f(.)h(.)f(.)h(.)134 b(5)315 3356 y(3.2.1)94 b(En)n(umerations)27 +b(and)g(t)n(yp)r(es)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315 3512 y(3.2.2)94 b(The)28 +b(parser)78 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315 +3669 y(3.2.3)94 b(Error)26 b(ob)5 b(jects)57 b(.)42 b(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)134 b(5)315 3825 y(3.2.4)94 b(Memory)27 b(Managemen)n(t)65 +b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f +(.)h(.)134 b(5)315 3981 y(3.2.5)94 b(Storage)26 b(classes)64 +b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)134 b(5)0 4221 y Fd(4)77 b(Di\033erences)30 +b(F)-8 b(rom)31 b(RF)m(Cs)2750 b(6)125 4377 y Ff(4.1)83 +b(Pseudo)28 b(Comp)r(onen)n(ts)62 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 +b(6)125 4534 y(4.2)83 b(Com)n(bined)28 b(V)-7 b(alues)108 +b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(6)125 4690 y(4.3)83 +b(Multi-V)-7 b(alued)28 b(Prop)r(erties)54 b(.)41 b(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 +b(6)0 4930 y Fd(5)77 b(Using)31 b(libical)3208 b(7)125 +5086 y Ff(5.1)83 b(Creating)27 b(Comp)r(onen)n(ts)73 +b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)134 b(7)315 5243 y(5.1.1)94 b(Constructor)26 +b(In)n(terfaces)48 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)134 b(7)315 5399 y(5.1.2)94 b(v)-5 +b(aargs)26 b(Constructors)70 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(8)p eop +%%Page: 2 2 +2 1 bop 0 -167 3900 5 v 0 -200 a Fd(1.)73 b(In)m(tro)s(duction)3184 +b Ff(2)315 162 y(5.1.3)94 b(P)n(arsing)26 b(T)-7 b(ext)28 +b(Files)68 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)134 b(8)125 318 y(5.2)83 b(A)n(ccessing)27 +b(Comp)r(onen)n(ts)105 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(10)315 475 +y(5.2.1)h(Finding)28 b(Comp)r(onen)n(ts)99 b(.)42 b(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(10)315 +631 y(5.2.2)h(Iterating)27 b(Through)f(Comp)r(onen)n(ts)45 +b(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(10)315 788 y(5.2.3)h(Using)27 b(Comp)r(onen)n(t)h(Iterators)59 +b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(11)315 944 y(5.2.4)h(Remo)n(ving)27 b(Comp)r(onen)n(ts)83 +b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)93 b(12)315 1101 y(5.2.5)h(W)-7 b(orking)27 b(with)h(prop)r(erties)e +(and)i(parameters)e(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(12)315 1257 y(5.2.6)h(W)-7 b(orking)27 b(with)h(v)-5 +b(alues)52 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +h(.)f(.)h(.)f(.)h(.)93 b(13)315 1413 y(5.2.7)h(Chec)n(king)27 +b(Comp)r(onen)n(t)g(V)-7 b(alidit)n(y)25 b(.)42 b(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(14)315 1570 y(5.2.8)h(Con)n(v)n +(erting)26 b(Comp)r(onen)n(ts)h(to)g(T)-7 b(ext)74 b(.)41 +b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(14)125 +1726 y(5.3)83 b(Time)33 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +f(.)h(.)f(.)h(.)93 b(15)315 1883 y(5.3.1)h(Time)28 b(structure)56 +b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)93 b(15)315 2039 y(5.3.2)h(Creating)26 +b(time)j(structures)j(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)93 b(15)315 2196 y(5.3.3)h(Time)28 +b(manipulating)f(routines)38 b(.)j(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +h(.)f(.)h(.)f(.)h(.)93 b(15)125 2352 y(5.4)83 b(Storing)27 +b(Ob)5 b(jects)39 b(.)i(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) +f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(17)315 2509 y(5.4.1)h(Creating)26 b(a)i(new)f(set)48 +b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) +h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)93 b(17)315 2665 y(5.4.2)h(A)n(dding,)28 +b(Finding)f(and)h(Remo)n(ving)e(Comp)r(onen)n(ts)76 b(.)41 +b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h +(.)f(.)h(.)f(.)h(.)93 b(18)315 2822 y(5.4.3)h(Other)27 +b(routines)70 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f +(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) +f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(19)125 2978 +y(5.5)83 b(Memory)27 b(Managemen)n(t)73 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g +(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(19)125 3135 y(5.6)83 b(Error)27 b(Handling)56 b(.)41 +b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) +h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)315 3291 y(5.6.1)h(Return)28 +b(v)-5 b(alues)34 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)315 +3448 y(5.6.2)h(icalerrno)28 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h +(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 +b(20)315 3604 y(5.6.3)h(X-LIC-ERR)n(OR)27 b(and)g(X-LIC-INV)-9 +b(ALID-COMPONENT)70 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) +f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)125 3760 y(5.7)83 b(Naming)28 +b(Standard)h(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) +f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(21)0 +4000 y Fd(6)77 b(Hac)m(ks)32 b(and)g(Bugs)3009 b(22)0 +4338 y Fe(1)131 b(In)l(tro)t(duction)0 4577 y Ff(Libical)23 +b(is)f(an)h(Op)r(en)g(Source)f(implemen)n(tation)h(of)g(the)g +(iCalendar)f(proto)r(cols)f(and)i(proto)r(col)e(data)i(units.)35 +b(The)23 b(iCalendar)0 4691 y(sp)r(eci\034cation)29 b(describ)r(es)f +(ho)n(w)h(calendar)f(clien)n(ts)h(can)f(comm)n(unicate)h(with)h +(calendar)d(serv)n(ers)g(so)i(users)f(can)h(store)f(their)0 +4804 y(calendar)e(data)h(and)h(arrange)d(meetings)i(with)h(other)f +(users.)0 4961 y(Libical)g(implemen)n(ts)h(RF)n(C2445,)e(RF)n(C2446)f +(and)j(some)f(of)g(RF)n(C2447)f(and)h(the)h(CAP)g(draft.)0 +5117 y(This)k(do)r(cumen)n(tation)g(assumes)g(that)g(y)n(ou)g(are)f +(familiar)h(with)h(the)f(iCalendar)f(standards)g(RF)n(C2445)g(and)h(RF) +n(C2446.)0 5231 y(these)c(sp)r(eci\034cations)e(are)h(online)g(on)h +(the)g(CALSCH)g(w)n(ebpage)e(at:)p eop +%%Page: 3 3 +3 2 bop 0 -167 3900 5 v 0 -200 a Fd(2.)73 b(Building)31 +b(the)g(Library)2847 b Ff(3)0 162 y Fc(http://www.imc.o)o(rg)o(/ie)o +(tf)o(-c)o(ale)o(nd)o(ar)o(/)0 453 y Fb(1.1)112 b(The)38 +b(libical)c(pro)6 b(ject)0 663 y Ff(This)29 b(co)r(de)g(is)g(under)g +(activ)n(e)f(dev)n(elopmen)n(t.)40 b(If)30 b(y)n(ou)e(w)n(ould)h(lik)n +(e)f(to)h(con)n(tribute)g(to)g(the)g(pro)5 b(ject,)29 +b(y)n(ou)f(can)h(con)n(tact)f(me,)0 777 y(Eric)g(Busb)r(o)r(om,)f(at)g +(eric@soft)n(w)n(arestudio.org.)33 b(The)27 b(pro)5 b(ject)27 +b(has)g(a)g(w)n(ebpage)g(at)0 1016 y Fc(http://softwares)o(tu)o(dio)o +(.o)o(rg)o(/li)o(bi)o(ca)o(l/i)o(nd)o(ex)o(.ht)o(ml)0 +1256 y Ff(and)g(a)h(mailing)f(list)g(that)h(y)n(ou)f(can)g(join)h(b)n +(y)f(sending)g(the)h(follo)n(wing)f(mail:)0 1495 y Fc(To:)42 +b(minimalist@softwa)o(re)o(st)o(udi)o(o.)o(or)o(g)0 1609 +y(Subject:)e(subscribe)g(libical)0 1900 y Fb(1.2)112 +b(License)0 2111 y Ff(The)60 b(co)r(de)f(and)h(data\034les)f(in)h(this) +g(distribution)g(are)e(licensed)i(under)g(the)g(Mozilla)f(Public)h +(License.)133 b(See)0 2224 y(h)n(ttp://www.mozilla.org/NPL/MPL-1.0.h)n +(tml)37 b(for)j(a)h(cop)n(y)f(of)g(the)i(license.)76 +b(Alternately)-7 b(,)44 b(y)n(ou)c(ma)n(y)g(use)g(libical)0 +2338 y(under)32 b(the)g(terms)g(of)g(the)g(GNU)h(Library)d(General)h +(Public)i(License.)50 b(See)32 b(h)n(ttp://www.fsf.org/cop)n +(yleft/lesser.h)n(tml)0 2451 y(for)27 b(a)g(cop)n(y)g(of)g(the)h(LGPL.) +0 2608 y(This)j(dual)g(license)f(ensures)h(that)g(the)g(library)f(can)g +(b)r(e)i(incorp)r(orated)d(in)n(to)i(b)r(oth)g(proprietary)e(co)r(de)i +(and)f(GPL'd)i(pro-)0 2721 y(grams,)23 b(and)h(will)h(b)r(ene\034t)g +(from)f(impro)n(v)n(emen)n(ts)e(made)i(b)n(y)g(programmers)e(in)i(b)r +(oth)h(realms.)34 b(I)25 b(will)f(only)g(accept)g(c)n(hanges)0 +2835 y(in)n(to)j(m)n(y)h(v)n(ersion)e(of)h(the)h(library)e(if)i(they)g +(are)f(similarly)f(dual-licensed.)0 3126 y Fb(1.3)112 +b(Example)37 b(Co)s(de)0 3336 y Ff(A)h(lot)f(of)h(the)g(do)r(cumen)n +(tation)f(for)g(this)h(library)e(is)i(in)g(the)g(form)f(of)g(example)g +(co)r(de.)67 b(These)37 b(examples)g(are)g(in)h(the)0 +3450 y("examples")26 b(directory)g(of)i(the)g(distribution.)36 +b(Also)28 b(lo)r(ok)e(in)i("src/test")e(for)h(additional)g(annotated)g +(examples.)0 3788 y Fe(2)131 b(Building)46 b(the)e(Library)0 +4027 y Ff(Libical)33 b(uses)h(auto)r(conf)f(to)h(generate)e(mak)n +(e\034les.)55 b(It)34 b(should)g(built)g(with)g(no)g(adjustmen)n(ts)g +(on)f(Lin)n(ux,)j(F)-7 b(reeBSD)33 b(and)0 4141 y(Solaris)22 +b(under)i(gcc.)34 b(Some)24 b(v)n(ersion)e(ha)n(v)n(e)g(b)r(een)i +(successfully)f(b)r(een)h(build)g(on)f(MacOS,)g(Solaris,)g(UnixW)-7 +b(are,)24 b(And)g(T)-7 b(ru64)0 4254 y(UNIX)28 b(without)g(gcc,)f(but)i +(y)n(ou)d(ma)n(y)h(run)h(in)n(to)f(problems)g(with)h(a)f(particular)f +(later)h(v)n(ersion.)0 4411 y(F)-7 b(or)27 b(a)g(more)g(complete)g +(guide)h(to)f(building)h(the)g(library)-7 b(,)26 b(see)h(the)h(README)i +(\034le)e(in)f(the)h(distribution.)0 4749 y Fe(3)131 +b(Structure)0 4988 y Ff(The)28 b(iCal)f(calendar)f(mo)r(del)i(is)f +(based)g(on)h(four)f(t)n(yp)r(es)g(of)h(ob)5 b(jects:)36 +b(comp)r(onen)n(ts,)27 b(prop)r(erties,)g(v)-5 b(alues)27 +b(and)g(parameters.)0 5144 y(Prop)r(erties)32 b(are)f(the)i(fundamen)n +(tal)f(unit)i(of)e(information)g(in)g(iCal,)i(and)e(they)g(w)n(ork)f(a) +h(bit)h(lik)n(e)f(a)g(hash)g(en)n(try)-7 b(,)34 b(with)e(a)0 +5258 y(constan)n(t)21 b(k)n(ey)h(and)g(a)f(v)-5 b(ariable)21 +b(v)-5 b(alue.)35 b(Prop)r(erties)21 b(ma)n(y)h(also)f(ha)n(v)n(e)g(mo) +r(di\034ers,)h(called)g(parameters.)33 b(In)22 b(the)h(iCal)f(con)n +(ten)n(t)0 5371 y(line)p eop +%%Page: 4 4 +4 3 bop 0 -167 3900 5 v 0 -200 a Fd(3.)73 b(Structure)3313 +b Ff(4)0 162 y Fc(ORGANIZER;ROLE=C)o(HA)o(IR:)o(MA)o(IL)o(TO:)o(mr)o +(bi)o(g@h)o(os)o(t.)o(com)0 401 y Ff(The)34 b(prop)r(ert)n(y)f(name)h +(is)g("OR)n(GANIZER,")g(the)g(v)-5 b(alue)34 b(of)h(the)f(prop)r(ert)n +(y)f(is)h("mrbig@host.com")e(and)i(the)g("R)n(OLE")0 +515 y(parameter)26 b(sp)r(eci\034es)h(that)h(Mr)g(Big)f(is)g(the)h(c)n +(hair)e(of)i(the)g(meetings)f(asso)r(ciated)f(with)i(this)g(prop)r(ert) +n(y)-7 b(.)0 671 y(Comp)r(onen)n(ts)26 b(are)f(groups)g(of)h(prop)r +(erties)f(that)i(represen)n(t)e(the)i(core)e(ob)5 b(jects)26 +b(of)g(a)g(calendar)f(system,)h(suc)n(h)g(as)g(ev)n(en)n(ts)f(or)0 +785 y(timezones.)36 b(Comp)r(onen)n(ts)27 b(are)g(delimited)h(b)n(y)g +("BEGIN")f(and)g("END")h(tags.)0 941 y(When)g(a)f(comp)r(onen)n(t)g(is) +h(sen)n(t)f(across)f(a)h(net)n(w)n(ork,)f(if)i(it)g(is)g(un-encrypted,) +f(it)h(will)g(lo)r(ok)f(something)g(lik)n(e:)0 1181 y +Fc(BEGIN:VCALENDAR)0 1294 y(METHOD:REQUEST)0 1408 y(PRODID:)41 +b(-//hacksw/handc)o(al)o(//N)o(ON)o(SG)o(ML)c(v1.0//EN)0 +1521 y(BEGIN:VEVENT)0 1635 y(DTSTAMP:19980309)o(T2)o(310)o(00)o(Z)0 +1749 y(UID:guid-1.host1)o(.c)o(om)0 1862 y(ORGANIZER;ROLE=C)o(HA)o(IR:) +o(MA)o(IL)o(TO:)o(mr)o(bi)o(g@h)o(os)o(t.)o(com)0 1976 +y(ATTENDEE;RSVP=TR)o(UE)o(;RO)o(LE)o(=R)o(EQ-)o(PA)o(RT)o(ICI)o(PA)o +(NT)o(;CU)o(TY)o(PE)o(=GR)o(OU)o(P:)87 2089 y(MAILTO:employee-)o(A@h)o +(os)o(t.)o(com)0 2203 y(DESCRIPTION:Proj)o(ec)o(t)h(XYZ)k(Review)f +(Meeting)0 2317 y(CATEGORIES:MEETI)o(NG)0 2430 y(CLASS:PUBLIC)0 +2544 y(CREATED:19980309)o(T1)o(300)o(00)o(Z)0 2657 y(SUMMARY:XYZ)e +(Project)i(Review)0 2771 y(DTSTART;TZID=US-)o(Ea)o(ste)o(rn)o(:1)o(998) +o(03)o(12)o(T08)o(30)o(00)0 2884 y(DTEND;TZID=US-Ea)o(st)o(ern)o(:1)o +(99)o(803)o(12)o(T0)o(930)o(00)0 2998 y(LOCATION:1CP)d(Conference)i +(Room)i(4350)0 3112 y(END:VEVENT)0 3225 y(END:VCALENDAR)0 +3465 y Ff(Note)28 b(that)h(comp)r(onen)n(ts)f(can)g(b)r(e)h(nested;)g +(this)g(example)e(has)h(b)r(oth)h(a)f(V)n(CALEND)n(AR)i(and)e(a)g +(VEVENT)i(comp)r(onen)n(t,)0 3578 y(one)d(nested)h(inside)f(the)h +(other.)0 3870 y Fb(3.1)112 b(Core)37 b(iCal)f(classes)0 +4080 y Ff(Libical)25 b(is)h(an)g(ob)5 b(ject-based,)25 +b(data-orien)n(ted)f(library)-7 b(.)34 b(Nearly)25 b(all)h(of)g(the)g +(routines)f(in)h(the)g(library)e(are)h(asso)r(ciated)g(with)0 +4193 y(an)e(opaque)g(data)f(t)n(yp)r(es)i(and)f(p)r(erform)g(some)g(op) +r(eration)f(on)h(that)h(data)e(t)n(yp)r(e.)36 b(Although)24 +b(the)f(library)f(do)r(es)h(not)h(actually)0 4307 y(ha)n(v)n(e)32 +b(classes,)h(w)n(e)g(will)g(use)g(those)g(terms)f(since)h(the)h(b)r +(eha)n(vior)d(of)i(these)g(asso)r(ciations)e(of)j(data)e(and)h +(routines)f(is)h(v)n(ery)0 4420 y(similar)27 b(to)g(a)g(class.)0 +4693 y Fd(3.1.1)94 b(Prop)s(erties)0 4903 y Ff(Prop)r(erties)23 +b(are)g(represen)n(ted)f(with)j(the)f(icalprop)r(ert)n(y)e(class)h(and) +g(its)h(man)n(y)f("deriv)n(ed")f(classes)g(with)j(on)e("deriv)n(ed")f +(class)0 5017 y(p)r(er)35 b(prop)r(ert)n(y)g(t)n(yp)r(e)g(in)h(RF)n +(C2445.)59 b(Again,)37 b(there)e(is)h(no)f(actual)g(inheritance)g +(relations,)h(but)g(there)g(are)e(clusters)h(of)0 5130 +y(routines)27 b(that)h(mak)n(e)e(this)i(term)g(useful.)37 +b(A)28 b(prop)r(ert)n(y)e(is)i(a)f(con)n(tainer)f(for)h(a)g(single)g(v) +-5 b(alue)28 b(and)f(a)g(set)h(of)f(parameters.)p eop +%%Page: 5 5 +5 4 bop 0 -167 3900 5 v 0 -200 a Fd(3.)73 b(Structure)3313 +b Ff(5)0 162 y Fd(3.1.2)94 b(Comp)s(onen)m(ts)0 372 y +Ff(In)29 b(libical,)f(comp)r(onen)n(ts)g(are)g(represen)n(ted)f(with)i +(the)g(icalcomp)r(onen)n(t)e(class.)39 b(Icalcomp)r(onen)n(t)27 +b(is)i(a)f(con)n(tainer)f(for)h(a)g(set)0 485 y(of)g(other)e(comp)r +(onen)n(ts)h(and)h(prop)r(erties.)0 758 y Fd(3.1.3)94 +b(V)-8 b(alues)0 968 y Ff(V)h(alues)29 b(are)g(represen)n(ted)f(in)i(a) +f(similar)f(w)n(a)n(y)g(to)i(prop)r(erties;)f(a)g(base)g(class)g(and)g +(man)n(y)g("deriv)n(ed)f(")h(classes.)41 b(A)30 b(v)-5 +b(alue)29 b(is)0 1082 y(essen)n(tially)d(a)i(abstract)e(handle)i(on)f +(a)g(single)g(fundamen)n(tal)h(t)n(yp)r(e,)f(a)h(structure)f(or)f(a)h +(union.)0 1354 y Fd(3.1.4)94 b(P)m(arameters)0 1564 y +Ff(P)n(arameters)26 b(are)g(represetned)h(in)h(a)f(similar)g(w)n(a)n(y) +f(to)i(prop)r(erties,)e(except)i(that)g(they)f(con)n(tain)g(only)g(one) +g(v)-5 b(alue)0 1856 y Fb(3.2)112 b(Other)37 b(elemen)m(ts)g(of)g +(libical)0 2066 y Ff(In)26 b(addition)f(to)h(the)g(core)e(iCal)h +(classes,)g(libical)g(has)g(man)n(y)g(other)g(t)n(yp)r(es,)h +(structures,)g(classes)e(that)i(aid)f(in)h(creating)e(and)0 +2179 y(using)j(iCal)g(comp)r(onen)n(ts.)0 2452 y Fd(3.2.1)94 +b(En)m(umerations)30 b(and)i(t)m(yp)s(es)0 2662 y Ff(Libical)h(is)f +(strongly)g(t)n(yp)r(ed,)i(so)r(o)e(ev)n(ery)g(comp)r(onen)n(t,)i(prop) +r(ert)n(y)-7 b(,)33 b(parameter,)g(and)f(v)-5 b(alue)33 +b(t)n(yp)r(e)g(has)g(an)f(en)n(umeration,)0 2776 y(and)27 +b(some)g(ha)n(v)n(e)g(an)g(asso)r(ciated)f(structure)h(or)g(union.)0 +3048 y Fd(3.2.2)94 b(The)32 b(parser)0 3258 y Ff(The)20 +b(libical)f(parser)f(o\033ers)h(a)g(v)-5 b(ariet)n(y)19 +b(of)h(w)n(a)n(ys)e(to)h(con)n(v)n(ert)f(RF)n(C2445)g(text)i(in)n(to)g +(a)f(libical)g(iinsteral)g(comp)r(onen)n(t)h(structure.)0 +3372 y(the)28 b(parser)e(can)h(parse)f(blo)r(c)n(ks)h(of)h(text)g(as)f +(a)g(string,)g(or)f(it)i(can)g(parse)e(lin-b)n(y-line.)0 +3645 y Fd(3.2.3)94 b(Error)32 b(ob)5 b(jects)0 3855 y +Ff(Libical)27 b(has)g(a)g(substan)n(tial)g(error)f(rep)r(orting)g +(system)i(for)f(b)r(oth)h(programming)d(errors)g(and)j(comp)r(onen)n(t) +f(usage)f(errors.)0 4127 y Fd(3.2.4)94 b(Memory)30 b(Managemen)m(t)0 +4337 y Ff(Since)38 b(man)n(y)g(of)h(libicals)e(in)n(terfaces)h(return)g +(strings,)i(the)e(library)f(has)h(its)h(o)n(wn)e(memory)h(managemen)n +(t)f(system)h(to)0 4451 y(elimiate)28 b(the)g(need)f(to)h(free)f(ev)n +(ery)f(string)h(returned)g(from)g(the)h(libraru.)0 4724 +y Fd(3.2.5)94 b(Storage)32 b(classes)0 4934 y Ff(The)c(library)e(also)g +(o\033ers)h(sev)n(eral)f(classes)g(to)h(store)g(comp)r(onen)n(ts)g(to)g +(\035ies,)h(memory)f(or)f(databases.)p eop +%%Page: 6 6 +6 5 bop 0 -167 3900 5 v 0 -200 a Fd(4.)73 b(Di\033erences)31 +b(F)-8 b(rom)31 b(RF)m(Cs)2732 b Ff(6)0 162 y Fe(4)131 +b(Di\033erences)44 b(F)-11 b(rom)43 b(RF)l(Cs)0 400 y +Ff(Libical)c(has)f(b)r(een)h(designed)g(to)f(follo)n(w)h(the)g +(standards)e(as)i(closely)f(as)g(p)r(ossible,)j(so)e(that)g(the)g(k)n +(ey)f(ob)5 b(jects)39 b(in)g(the)0 514 y(standards)32 +b(are)g(also)g(k)n(ey)g(ob)5 b(jects)33 b(in)g(the)h(library)-7 +b(.)52 b(Ho)n(w)n(ev)n(er,)32 b(there)h(are)f(a)h(few)g(areas)f(where)g +(the)i(sp)r(eci\034cations)e(are)0 628 y(\(arguably\))e(irregular,)h +(and)g(follo)n(wing)g(them)h(exactly)f(w)n(ould)g(result)h(in)g(an)f +(unfriendly)h(in)n(terface.)49 b(These)31 b(deviations)0 +741 y(mak)n(e)c(libical)g(easier)f(to)i(use)f(b)n(y)h(main)n(taining)e +(a)h(self-similar)g(in)n(terface.)0 1033 y Fb(4.1)112 +b(Pseudo)38 b(Comp)s(onen)m(ts)0 1243 y Ff(Libical)29 +b(de\034nes)g(comp)r(onen)n(ts)g(for)g(groups)f(of)h(prop)r(erties)f +(that)i(lo)r(ok)f(and)g(act)g(lik)n(e)g(comp)r(onen)n(ts,)g(but)h(are)e +(not)i(de\034ned)0 1356 y(as)e(comp)r(onen)n(ts)h(in)g(the)g(sp)r +(eci\034cation.)41 b(XD)n(A)-7 b(YLIGHT)30 b(and)f(XST)-7 +b(AND)n(ARD)30 b(are)e(notable)h(examples.)40 b(These)29 +b(pseudo)0 1470 y(comp)r(onen)n(ts)d(group)f(prop)r(erties)g(within)i +(the)g(VTIMEZONE)g(comp)r(onen)n(ts.)36 b(F)-7 b(or)25 +b(instanace,)h(the)h(timezone)f(prop)r(erties)0 1583 +y(asso)r(ciated)f(with)i(da)n(yligh)n(t)e(sa)n(vings)g(time)i(starts)e +(with)i("BEGIN:D)n(A)-7 b(YLIGHT")27 b(and)f(ends)h(with)f("END:D)n(A) +-7 b(YLIGHT,)0 1697 y(just)32 b(lik)n(e)g(other)f(comp)r(onen)n(ts,)h +(but)g(is)g(not)g(de\034ned)g(as)f(a)g(comp)r(onen)n(t)g(in)h(RF)n +(C2445.)48 b(\()32 b(See)f(RF)n(C2445,)g(page)g(61)g(\))h(In)0 +1811 y(Libical,this)d(grouping)e(is)i(represen)n(ted)e(b)n(y)i(the)g +(XD)n(A)-7 b(YLIGHT)30 b(comp)r(onen)n(t.)41 b(Standard)28 +b(iCAL)h(comp)r(onen)n(ts)f(all)h(start)0 1924 y(with)f(the)g(letter)g +("V,")f(while)g(pseudo)g(comp)r(onen)n(ts)g(start)g(with"X.")0 +2081 y(There)22 b(are)g(also)g(pseudo)h(comp)r(onen)n(ts)f(that)h(are)f +(conceptually)g(deriv)n(ed)g(classes)g(of)h(V)-9 b(ALARM.)23 +b(RF)n(C2446)e(de\034nes)i(what)0 2194 y(prop)r(erties)g(ma)n(y)h(b)r +(e)g(included)h(in)f(eac)n(h)g(comp)r(onen)n(t,)g(and)g(for)g(V)-9 +b(ALARM,)25 b(the)f(set)g(of)h(prop)r(erties)e(it)h(ma)n(y)g(ha)n(v)n +(e)f(dep)r(ends)0 2308 y(on)k(the)h(v)-5 b(alue)28 b(of)f(the)h(A)n +(CTION)f(prop)r(ert)n(y)-7 b(.)0 2464 y(F)g(or)19 b(instance,)j(if)e(a) +g(V)-9 b(ALARM)20 b(comp)r(onen)n(t)g(has)f(an)h(A)n(CTION)g(prop)r +(ert)n(y)e(with)j(the)f(v)-5 b(alue)20 b(of)g("A)n(UDIO,")f(the)h(comp) +r(onen)n(t)0 2578 y(m)n(ust)h(also)g(ha)n(v)n(e)f(an)h("A)-7 +b(TT)g(A)n(CH")21 b(prop)r(ert)n(y)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)20 +b(if)i(the)g(A)n(CTION)f(v)-5 b(alue)21 b(is)g("DISPLA)-7 +b(Y,")22 b(the)g(comp)r(onen)n(t)f(m)n(ust)0 2691 y(ha)n(v)n(e)26 +b(a)i(DESCRIPTION)g(prop)r(ert)n(y)-7 b(.)0 2848 y(T)g(o)28 +b(handle)g(these)g(v)-5 b(arious,)27 b(complex)h(restrictions,)f +(libical)h(has)g(pseudo)g(comp)r(onen)n(ts)f(for)h(eac)n(h)f(t)n(yp)r +(e)i(of)f(alarm:)37 b(XA)n(U-)0 2961 y(DIO)n(ALARM,)28 +b(XDISPLA)-7 b(Y)g(ALARM,)30 b(XEMAILALARM)f(and)f(XPR)n(OCEDUREALARM.) +0 3253 y Fb(4.2)112 b(Com)m(bined)37 b(V)-9 b(alues)0 +3463 y Ff(Man)n(y)34 b(v)-5 b(alues)34 b(can)g(tak)n(e)g(more)g(than)g +(one)h(t)n(yp)r(e.)58 b(TRIGGER,)35 b(for)f(instance,)i(can)e(ha)n(v)n +(e)g(a)g(v)-5 b(alue)34 b(t)n(yp)r(e)h(of)g(with)g(DU-)0 +3577 y(RA)-7 b(TION)32 b(or)f(of)h(D)n(A)-7 b(TE-TIME.)33 +b(These)f(m)n(ultiple)g(t)n(yp)r(es)g(mak)n(e)f(it)i(di\036cult)g(to)e +(create)g(routines)h(to)f(return)h(the)g(v)-5 b(alue)0 +3690 y(asso)r(ciated)26 b(with)i(a)f(prop)r(ert)n(y)-7 +b(.)0 3847 y(It)29 b(is)g(natural)f(to)h(ha)n(v)n(e)f(in)n(terfaces)g +(that)h(w)n(ould)f(return)h(the)g(v)-5 b(alue)29 b(of)f(a)h(prop)r(ert) +n(y)-7 b(,)28 b(but)i(it)f(is)g(cum)n(b)r(ersome)f(for)g(a)h(single)0 +3960 y(routine)j(to)g(return)g(m)n(ultiple)h(t)n(yp)r(es.)51 +b(So,)33 b(in)g(libical,)g(prop)r(erties)e(that)i(can)f(ha)n(v)n(e)f(m) +n(ultiple)i(t)n(yp)r(es)f(are)f(giv)n(en)h(a)g(single)0 +4074 y(t)n(yp)r(e)26 b(that)g(is)g(the)g(union)g(of)g(their)g(RF)n +(C2445)e(t)n(yp)r(es.)36 b(F)-7 b(or)26 b(instance,)g(in)g(libical,)g +(the)g(v)-5 b(alue)26 b(of)g(the)g(TRIGGER)h(prop)r(ert)n(y)0 +4187 y(resolv)n(es)e(to)j(struct)f(icaltriggert)n(yp)r(e.)35 +b(This)28 b(t)n(yp)r(e)f(is)h(a)f(union)h(of)f(a)g(DURA)-7 +b(TION)29 b(and)e(a)g(D)n(A)-7 b(TE-TIME.)0 4479 y Fb(4.3)112 +b(Multi-V)-9 b(alued)36 b(Prop)s(erties)0 4689 y Ff(Some)31 +b(prop)r(erties,)h(suc)n(h)f(as)g(CA)-7 b(TEGORIES)33 +b(ha)n(v)n(e)d(only)h(one)g(v)-5 b(alue)32 b(t)n(yp)r(e,)h(but)f(eac)n +(h)e(CA)-7 b(TEGORIES)33 b(prop)r(ert)n(y)d(can)0 4803 +y(ha)n(v)n(e)24 b(m)n(ultiple)h(v)-5 b(alue)25 b(instances.)35 +b(This)25 b(also)f(results)g(in)h(a)g(cum)n(b)r(ersome)f(in)n(terface)g +(\025)g(CA)-7 b(TEGORIES)26 b(accessors)d(w)n(ould)0 +4916 y(ha)n(v)n(e)k(to)i(return)f(a)g(list)g(while)h(all)f(other)g +(accessors)e(returned)i(a)g(single)g(v)-5 b(alue.)39 +b(In)29 b(libical,)g(all)f(prop)r(erties)f(ha)n(v)n(e)h(a)g(single)0 +5030 y(v)-5 b(alue,)35 b(and)e(m)n(ulti-v)-5 b(alued)33 +b(prop)r(erties)f(are)h(brok)n(en)f(do)n(wn)g(in)n(to)h(m)n(ultiple)h +(single)f(v)-5 b(alued)33 b(prop)r(erties)g(during)f(parsing.)0 +5143 y(That)c(is,)f(an)g(input)i(line)e(lik)n(e,)0 5383 +y Fc(CATEGORIES:)39 b(work,)i(home)p eop +%%Page: 7 7 +7 6 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3190 b Ff(7)0 162 y(b)r(ecomes)27 b(in)h(libical's)f(in)n +(ternal)g(represen)n(tation)0 401 y Fc(CATEGORIES:)39 +b(work)0 515 y(CATEGORIES:)g(home)0 754 y Ff(Oddly)-7 +b(,)34 b(RF)n(C2445)d(allo)n(ws)g(some)h(m)n(ulti-v)-5 +b(alued)33 b(prop)r(erties)f(\()h(lik)n(e)g(FREEBUSY)h(\))f(to)g(exist) +g(as)f(b)r(oth)h(a)f(m)n(ulti-v)-5 b(alues)0 868 y(prop)r(ert)n(y)24 +b(and)h(as)f(m)n(ultiple)h(single)g(v)-5 b(alue)24 b(prop)r(erties,)h +(while)g(others)f(\()i(lik)n(e)e(CA)-7 b(TEGORIES)26 +b(\))f(can)g(only)g(exist)f(as)h(single)0 981 y(m)n(ulti-v)-5 +b(alued)32 b(prop)r(erties.)48 b(This)31 b(mak)n(es)g(the)h(in)n +(ternal)f(represen)n(tation)e(for)i(CA)-7 b(TEGORIES)33 +b(illegal.)48 b(Ho)n(w)n(ev)n(er)30 b(when)0 1095 y(y)n(ou)d(con)n(v)n +(ert)f(a)h(comp)r(onen)n(t)g(to)h(a)f(string,)g(the)h(library)e(will)i +(collect)f(all)g(of)h(the)g(CA)-7 b(TEGORIES)28 b(prop)r(erties)f(in)n +(to)g(one.)0 1433 y Fe(5)131 b(Using)44 b(libical)0 1691 +y Fb(5.1)112 b(Creating)37 b(Comp)s(onen)m(ts)0 1901 +y Ff(There)e(are)g(three)h(w)n(a)n(ys)e(to)i(create)e(comp)r(onen)n(ts) +i(in)g(Libical:)53 b(creating)34 b(individual)i(ob)5 +b(jects)35 b(and)h(assem)n(bling)e(them,)0 2015 y(building)28 +b(en)n(tire)f(ob)5 b(jects)27 b(in)h(massiv)n(e)e(v)-5 +b(aargs)26 b(calls,)h(and)g(parsing)f(a)h(text)h(\034le)g(con)n +(taining)e(iCalendar)h(data.)0 2287 y Fd(5.1.1)94 b(Constructor)32 +b(In)m(terfaces)0 2497 y Ff(Using)e(constructor)f(in)n(terfaces,)i(y)n +(ou)f(create)f(eac)n(h)h(of)h(the)g(ob)5 b(jects)30 b(separately)f(and) +i(then)g(assem)n(ble)e(them)i(in)g(to)g(com-)0 2611 y(p)r(onen)n(ts:)0 +2850 y Fc(icalcomponent)38 b(*event;)0 2964 y(icalproperty)g(*prop;)0 +3077 y(icalparameter)g(*param;)0 3191 y(struct)j(icaltimetype)e(atime;) +0 3305 y(event)i(=)j(icalcomponent_n)o(ew)o(\(IC)o(AL)o(_V)o(EVE)o(NT)o +(_C)o(OMP)o(ON)o(EN)o(T\);)0 3418 y(prop)e(=)h(icalproperty_new)o(_d)o +(tst)o(am)o(p\()o(ati)o(me)o(\))37 b(;)0 3532 y(icalcomponent_ad)o(d_)o +(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o(,)h(prop\);)0 3645 +y(prop)k(=)h(icalproperty_new)o(_u)o(id\()o('')o(gu)o(id-)o(1.)o(ho)o +(st1)o(.c)o(om)o(''\))37 b(\);)0 3759 y(icalcomponent_ad)o(d_)o(pro)o +(pe)o(rt)o(y\(e)o(ve)o(nt)o(,pr)o(op)o(\);)0 3872 y(prop=icalpropert)o +(y_)o(new)o(_o)o(rg)o(ani)o(ze)o(r\()o(''m)o(rb)o(ig)o(@ho)o(st)o(.c)o +(om')o('\))o(;)0 3986 y(param)k(=)j(icalparameter_n)o(ew)o(_ro)o(le)o +(\(I)o(CAL)o(_R)o(OL)o(E_C)o(HA)o(IR)o(\))0 4100 y(icalproperty_add)o +(_p)o(ara)o(me)o(te)o(r\(p)o(ro)o(p,)37 b(param\);)0 +4213 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o(,pr)o +(op)o(\);)0 4453 y Ff(Notice)e(that)g(libical)g(uses)f(a)h(semi-ob)5 +b(ject-orien)n(ted)32 b(st)n(yle)j(of)g(in)n(terface.)58 +b(Most)34 b(things)h(y)n(ou)f(w)n(ork)f(with)j(are)e(ob)5 +b(jects,)0 4566 y(that)28 b(are)e(instan)n(tiated)h(with)h(a)f +(constructor)f(that)i(has)f("new")g(in)g(the)h(name.)37 +b(Also)27 b(note)g(that,)h(other)f(than)g(the)h(ob)5 +b(ject)0 4680 y(reference,)30 b(most)g(structure)f(data)h(is)g(passed)f +(in)h(to)g(libical)g(routines)f(b)n(y)h(v)-5 b(alue.)44 +b(Libical)30 b(has)g(some)f(complex)h(but)g(v)n(ery)0 +4793 y(regular)c(memory)g(handling)i(rules.)36 b(These)27 +b(are)g(detailed)g(in)h(section)f(5.5)g(\(\).)0 4950 +y(If)33 b(an)n(y)e(of)h(the)h(constructors)d(fail,)k(they)f(will)f +(return)g(0.)50 b(If)33 b(y)n(ou)f(try)g(to)g(insert)g(0)f(in)n(to)h(a) +g(prop)r(ert)n(y)f(or)h(comp)r(onen)n(t,)h(or)0 5063 +y(use)j(a)g(zero-v)-5 b(alued)34 b(ob)5 b(ject)36 b(reference,)h +(libical)f(will)h(either)f(silen)n(tly)f(ignore)g(the)i(error)d(or)h +(will)h(ab)r(ort)g(with)g(an)g(error)0 5177 y(message.)61 +b(This)36 b(b)r(eha)n(vior)e(is)i(con)n(trolled)f(b)n(y)g(a)h(compile)g +(time)g(\035ag)f(\(ICAL_ERR)n(ORS_ARE_F)-9 b(A)i(T)g(AL\),)37 +b(and)f(will)0 5291 y(ab)r(ort)27 b(b)n(y)g(default.)p +eop +%%Page: 8 8 +8 7 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3190 b Ff(8)0 162 y Fd(5.1.2)94 b(v)-5 b(aargs)32 +b(Constructors)0 372 y Ff(There)24 b(is)g(another)g(w)n(a)n(y)f(to)i +(create)e(complex)h(comp)r(onen)n(ts,)h(whic)n(h)f(is)h(arguably)d +(more)i(elegan)n(t,)g(if)h(y)n(ou)f(are)g(not)g(horri\034ed)0 +485 y(b)n(y)k(v)-5 b(arargs.)35 b(The)28 b(v)-5 b(arargs)26 +b(constructor)g(in)n(terface)i(allo)n(ws)e(y)n(ou)i(to)f(create)h(in)n +(tricate)f(comp)r(onen)n(ts)g(in)i(a)e(single)h(blo)r(c)n(k)f(of)0 +599 y(co)r(de.)37 b(Here)27 b(is)g(the)h(previous)f(examples)f(in)i +(the)g(v)-5 b(aargs)26 b(st)n(yle.)174 830 y Fc(calendar)40 +b(=)349 943 y(icalcomponent_v)o(an)o(ew\()523 1057 y(ICAL_VCALENDAR_C)o +(OM)o(PO)o(NEN)o(T,)523 1171 y(icalproperty_new)o(_v)o(er)o(sio)o(n\()o +('')o(2.0)o('')o(\),)523 1284 y(icalproperty_new)o(_p)o(ro)o(did)o(\() +741 1398 y(''-//RDU)g(Software//NONSGM)o(L)d(HandCal//EN''\),)523 +1511 y(icalcomponent_va)o(ne)o(w\()697 1625 y(ICAL_VEVENT_COMP)o(ONE)o +(NT)o(,)697 1738 y(icalproperty_new)o(_dt)o(st)o(am)o(p\(a)o(ti)o(me)o +(\),)697 1852 y(icalproperty_new)o(_ui)o(d\()o('')o(gui)o(d-)o(1.)o +(hos)o(t1)o(.co)o(m')o('\))o(,)697 1966 y(icalproperty_van)o(ew_)o(or)o +(ga)o(niz)o(er)o(\()872 2079 y(''mrbig@host.co)o(m')o('\))o(,)872 +2193 y(icalparameter_n)o(ew)o(_r)o(ole)o(\(I)o(CA)o(L_R)o(OL)o(E_C)o +(HA)o(IR)o(\),)872 2306 y(0)872 2420 y(\),)697 2533 y(icalproperty_van) +o(ew_)o(at)o(te)o(nde)o(e\()872 2647 y(''employee-A@ho)o(st)o(.c)o(om') +o(',)872 2761 y(icalparameter_n)o(ew)o(_r)o(ole)o(\()1046 +2874 y(ICAL_ROLE_REQPA)o(RTI)o(CI)o(PA)o(NT\))o(,)872 +2988 y(icalparameter_n)o(ew)o(_r)o(svp)o(\(1)o(\),)872 +3101 y(icalparameter_n)o(ew)o(_c)o(uty)o(pe)o(\(I)o(CAL)o(_C)o(UTY)o +(PE)o(_G)o(ROU)o(P\))o(,)872 3215 y(0)872 3328 y(\),)697 +3442 y(icalproperty_new)o(_lo)o(ca)o(ti)o(on\()828 3556 +y(1CP)42 b(Conference)e(Room)h(4350\),)697 3669 y(0)697 +3783 y(\),)523 3896 y(0)523 4010 y(\);)0 4241 y Ff(This)30 +b(form)f(is)h(similar)f(to)h(the)g(constructor)f(form)g(,)i(except)f +(that)g(the)g(constructors)e(ha)n(v)n(e)h("v)-5 b(anew")29 +b(instead)g(of)h("new")0 4354 y(in)38 b(the)f(name.)66 +b(The)37 b(argumen)n(ts)f(are)h(similar)f(to)r(o,)k(except)d(that)g +(the)h(comp)r(onen)n(t)f(constructor)f(can)h(ha)n(v)n(e)f(a)h(list)g +(of)0 4468 y(prop)r(erties,)26 b(and)i(the)f(prop)r(ert)n(y)g +(constructor)e(can)i(ha)n(v)n(e)g(a)g(list)g(of)h(parameters.)35 +b(Be)27 b(sure)f(to)i(terminate)f(ev)n(ery)f(list)i(with)0 +4582 y(a)f('0',)h(or)e(y)n(our)g(co)r(de)i(will)g(crash,)e(if)i(y)n(ou) +f(are)g(luc)n(ky)-7 b(.)0 4853 y Fd(5.1.3)94 b(P)m(arsing)32 +b(T)-8 b(ext)32 b(Files)0 5063 y Ff(The)g(\034nal)g(w)n(a)n(y)f(to)h +(create)f(comp)r(onen)n(ts)h(will)g(probably)f(b)r(e)h(the)h(most)f +(common;)i(y)n(ou)d(can)h(create)f(comp)r(onen)n(ts)g(from)0 +5176 y(RF)n(C2445)26 b(complian)n(t)h(text.)37 b(If)28 +b(y)n(ou)f(ha)n(v)n(e)f(the)i(string)f(in)h(memory)-7 +b(,)26 b(use)0 5407 y Fc(icalcomponent*)38 b(icalparser_pars)o(e_)o +(str)o(in)o(g\()o(cha)o(r*)f(str\);)p eop +%%Page: 9 9 +9 8 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3190 b Ff(9)0 162 y(If)38 b(the)g(string)f(con)n(tains)f +(only)h(one)h(comp)r(onen)n(t,)h(the)f(parser)e(will)i(return)f(the)h +(comp)r(onen)n(t)f(in)h(libical)f(form.)67 b(If)38 b(the)0 +275 y(string)45 b(con)n(tains)g(m)n(ultiple)h(comp)r(onen)n(ts,)k(the)c +(m)n(ultiple)g(comp)r(onen)n(ts)f(will)h(b)r(e)g(returned)f(as)g(the)h +(c)n(hildren)g(of)f(an)0 389 y(ICAL_XR)n(OOT_COMPONENT)26 +b(comp)r(onen)n(t.)0 545 y(P)n(arsing)h(a)h(whole)g(string)f(ma)n(y)h +(seem)g(w)n(asteful)f(if)i(y)n(ou)f(w)n(an)n(t)f(to)h(pull)h(a)f(large) +e(comp)r(onen)n(t)i(o\033)h(of)f(the)g(net)n(w)n(ork)f(or)g(from)0 +659 y(a)g(\034le;)h(y)n(ou)f(ma)n(y)g(prefer)g(to)g(parse)f(the)i(comp) +r(onen)n(t)g(line)f(b)n(y)h(line.)37 b(This)27 b(is)h(p)r(ossible)f(to) +r(o)g(b)n(y)g(using:)0 898 y Fc(icalparser*)39 b(icalparser_new\(\))o +(;)0 1012 y(void)j(icalparser_free\()o(ic)o(al)o(par)o(se)o(r*)37 +b(parser\);)0 1125 y(icalparser_get_l)o(in)o(e\(p)o(ar)o(se)o(r,r)o(ea) +o(d_)o(str)o(ea)o(m\))o(;)0 1239 y(icalparser_add_l)o(in)o(e\(p)o(ar)o +(se)o(r,l)o(in)o(e\))o(;)0 1353 y(icalparser_set_g)o(en)o(_da)o(ta)o +(\(p)o(ars)o(er)o(,s)o(tre)o(am)o(\))0 1592 y Ff(These)21 +b(routines)f(will)i(construct)f(a)f(parser)g(ob)5 b(ject)21 +b(to)g(whic)n(h)g(y)n(ou)g(can)g(add)g(lines)g(of)g(input)h(and)f +(retriev)n(e)f(an)n(y)h(comp)r(onen)n(ts)0 1705 y(that)32 +b(the)g(parser)f(creates)f(from)i(the)g(input.)51 b(These)31 +b(routines)g(w)n(ork)g(b)n(y)g(sp)r(eci\034ng)h(an)g(adaptor)e(routine) +h(to)h(get)g(string)0 1819 y(data)27 b(from)g(a)g(source.)36 +b(F)-7 b(or)27 b(an)g(example:)0 2058 y Fc(char*)41 b +(read_stream\(char)c(*s,)43 b(size_t)e(size,)g(void)h(*d\))87 +2286 y(char)g(*c)h(=)g(fgets\(s,size,)38 b(\(FILE*\)d\);)87 +2399 y(return)j(c;)0 2626 y(main\(\))87 2740 y(char*)h(line;)87 +2853 y(icalcomponent)c(*c;)87 2967 y(icalparser)h(*parser)i(=)i +(icalparser_new\(\))o(;)87 3081 y(FILE*)f(stream)f(=)i +(fopen\(argv1,r\);)87 3194 y(icalparser_set_g)o(en_)o(da)o(ta)o(\(pa)o +(rs)o(er)o(,st)o(re)o(am)o(\);)87 3308 y(do)174 3421 +y(line)f(=)h(icalparser_get_li)o(ne)o(\(p)o(ars)o(er)o(,r)o(ead)o(_s)o +(tr)o(eam)o(\);)174 3535 y(c)g(=)h(icalparser_add_)o(li)o(ne\()o(pa)o +(rs)o(er,)o(li)o(ne)o(\);)174 3648 y(if)f(\(c)g(!=)f(0\))218 +3762 y(printf\(s,icalcom)o(po)o(ne)o(nt_)o(as)o(_i)o(cal)o(_s)o(tr)o +(ing)o(\(c)o(\)\))o(;)218 3876 y(icalparser_claim)o(\(p)o(ar)o(ser)o +(\);)218 3989 y(printf\(n--------)o(--)o(--)o(---)o(n\))o(;)218 +4103 y(icalcomponent_fr)o(ee)o(\(c)o(\);)131 4330 y(while)f(\()i(line)f +(!=)h(0\);)0 4569 y Ff(The)48 b(parser)f(ob)5 b(ject)48 +b(parameterizes)f(the)i(routine)f(used)g(to)g(get)h(input)g(lines)f +(with)h(icalparser_set_gen_data\(\))0 4683 y +(andicalparser_get_line\(\).)81 b(In)44 b(this)f(example,)k(the)d +(routine)f(read_stream\(\))e(will)j(fetc)n(h)g(the)f(next)h(line)g +(from)e(a)0 4796 y(stream,)51 b(with)d(the)f(stream)g(passed)f(in)h(as) +g(the)g(v)n(oid*)f(parameter)f(d.)96 b(The)47 b(parser)f(calls)g +(read_stream\(\))f(from)0 4910 y(icalparser_get_line\(\),)e(but)g(it)g +(also)e(needs)h(to)h(kno)n(w)e(what)h(stream)g(to)g(use.)81 +b(This)42 b(is)h(set)f(b)n(y)g(the)h(call)f(to)g(ical-)0 +5024 y(parser_set_gen_data\(\).)64 b(By)37 b(using)g(a)h(di\033eren)n +(t)f(routine)h(for)f(read_stream)e(or)i(passing)g(in)h(di\033eren)n(t)f +(data)h(with)0 5137 y(icalparser_set_gen_data,)23 b(y)n(ou)k(can)g +(connect)g(to)h(an)n(y)e(data)i(source.)0 5294 y(Using)g(the)h(same)e +(mec)n(hanism,)h(other)g(implemen)n(tations)g(could)g(read)f(from)h +(memory)g(bu\033ers,)g(so)r(c)n(k)n(ets)f(or)g(other)h(in)n(ter-)0 +5407 y(faces.)p eop +%%Page: 10 10 +10 9 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(10)0 162 y(Since)28 b(the)g(example)f(co)r(de)g(is) +h(a)f(v)n(ery)f(common)h(w)n(a)n(y)f(to)i(use)f(the)h(parser,)e(there)i +(is)f(a)g(con)n(v)n(enience)f(routine;)0 401 y Fc(icalcomponent*)38 +b(icalparser_pars)o(e\()o(ica)o(lp)o(ar)o(ser)f(*parser,)654 +515 y(char*)k(\(*line_gen_func\))o(\(c)o(har)c(*s,)42 +b(size_t)f(size,)85 b(void*)42 b(d\)\))0 754 y Ff(T)-7 +b(o)36 b(use)h(this)g(routine,)i(y)n(ou)d(still)h(m)n(ust)g(construct)f +(the)h(parser)f(ob)5 b(ject)36 b(and)h(pass)f(in)h(a)f(reference)g(to)h +(a)f(line)h(reading)0 868 y(routine.)50 b(If)33 b(the)f(parser)f(can)h +(create)f(a)h(single)f(comp)r(onen)n(t)h(from)g(the)g(input,)i(it)f +(will)f(return)g(a)g(p)r(oin)n(ter)g(to)g(the)g(newly)0 +981 y(constructed)h(comp)r(onen)n(t.)54 b(If)34 b(the)g(parser)e(can)h +(construct)f(m)n(ultiple)i(comp)r(onen)n(ts)f(from)g(the)h(input,)i(it) +e(will)g(return)e(a)0 1095 y(reference)c(to)h(an)g(XR)n(OOT)g(comp)r +(onen)n(t)g(\()h(of)f(t)n(yp)r(e)g(ICAL_XR)n(OOT_COMPONENT.\))g(This)g +(XR)n(OOT)f(comp)r(onen)n(t)0 1209 y(will)g(hold)f(all)h(of)f(the)h +(comp)r(onen)n(ts)f(constructed)g(from)g(the)h(input)g(as)f(c)n +(hildren.)0 1500 y Fb(5.2)112 b(A)m(ccessing)37 b(Comp)s(onen)m(ts)0 +1710 y Ff(Giv)n(en)30 b(a)g(reference)f(to)i(a)e(comp)r(onen)n(t,)i(y)n +(ou)f(probably)f(will)h(w)n(an)n(t)g(to)g(access)f(the)i(prop)r +(erties,)f(parameters)e(and)j(v)-5 b(alues)0 1824 y(inside.)56 +b(Libical)34 b(in)n(terfaces)f(let)i(y)n(ou)e(\034nd)i(sub-comp)r(onen) +n(t,)g(add)e(and)h(remo)n(v)n(e)f(sub-comp)r(onen)n(ts,)i(and)e(do)h +(the)h(same)0 1937 y(three)27 b(op)r(erations)g(on)g(prop)r(erties.)0 +2210 y Fd(5.2.1)94 b(Finding)30 b(Comp)s(onen)m(ts)0 +2420 y Ff(T)-7 b(o)27 b(\034nd)h(a)f(sub-comp)r(onen)n(t)g(of)h(a)f +(comp)r(onen)n(t,)g(use:)0 2659 y Fc(icalcomponent*)38 +b(icalcomponent_g)o(et)o(_fi)o(rs)o(t_)o(com)o(po)o(ne)o(nt\()1525 +2773 y(icalcomponent*)g(component,)1525 2887 y(icalcomponent_ki)o(nd)f +(kind\);)0 3126 y Ff(This)27 b(routine)g(will)h(return)f(a)g(reference) +g(to)g(the)h(\034rst)f(comp)r(onen)n(t)g(of)h(the)f(t)n(yp)r(e)h +('kind.')37 b(The)28 b(k)n(ey)e(kind)i(v)-5 b(alues,)27 +b(listed)h(in)0 3240 y(icalen)n(ums.h)f(are:)0 3479 y +Fc(ICAL_ANY_COMPONE)o(NT)0 3593 y(ICAL_VEVENT_COMP)o(ON)o(ENT)0 +3706 y(ICAL_VTODO_COMPO)o(NE)o(NT)0 3820 y(ICAL_VJOURNAL_CO)o(MP)o(ONE) +o(NT)0 3933 y(ICAL_VCALENDAR_C)o(OM)o(PON)o(EN)o(T)0 +4047 y(ICAL_VFREEBUSY_C)o(OM)o(PON)o(EN)o(T)0 4161 y(ICAL_VALARM_COMP)o +(ON)o(ENT)0 4400 y Ff(These)g(are)g(only)g(the)h(most)f(common)g(comp)r +(onen)n(ts;)g(there)h(are)e(man)n(y)h(more)g(listed)h(in)g(icalen)n +(ums.h.)0 4557 y(As)h(y)n(ou)f(migh)n(t)h(guess,)g(if)g(there)g(is)g +(more)f(than)h(one)f(sub)r(comp)r(onen)n(t)h(of)g(the)h(t)n(yp)r(e)f(y) +n(ou)f(ha)n(v)n(e)g(c)n(hosen,)g(this)h(routine)g(will)0 +4670 y(return)e(only)g(the)h(\034rst.)37 b(to)27 b(get)h(at)f(the)h +(others,)f(y)n(ou)f(need)i(to)g(iterate)f(through)f(the)i(comp)r(onen)n +(t.)0 4943 y Fd(5.2.2)94 b(Iterating)32 b(Through)g(Comp)s(onen)m(ts)0 +5153 y Ff(Iteration)27 b(requires)f(a)h(second)g(routine)g(to)h(get)f +(the)h(next)g(sub)r(comp)r(onen)n(t)f(after)g(the)h(\034rst:)p +eop +%%Page: 11 11 +11 10 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(11)0 162 y Fc(icalcomponent*)38 b(icalcomponent_g)o +(et)o(_ne)o(xt)o(_c)o(omp)o(on)o(en)o(t\()654 275 y(icalcomponent*)f +(component,)654 389 y(icalcomponent_k)o(in)o(d)h(kind\);)0 +610 y Ff(With)25 b(the)g('\034rst')f(and)g('next')h(routines,)g(y)n(ou) +e(can)h(create)g(a)g(for)f(lo)r(op)h(to)h(iterate)f(through)f(all)h(of) +h(a)f(comp)r(onen)n(ts)g(sub)r(com-)0 723 y(p)r(onen)n(ts)87 +944 y Fc(for\(c)42 b(=)h(icalcomponent_g)o(et_)o(fi)o(rs)o(t_c)o(om)o +(po)o(nen)o(t\()o(co)o(mp,)o(IC)o(AL_)o(AN)o(Y_)o(COM)o(PO)o(NE)o(NT\)) +o(;)392 1058 y(c)g(!=)g(0;)44 1171 y(c)g(=)g(icalcomponent_ge)o(t_)o +(ne)o(xt_)o(co)o(mp)o(one)o(nt)o(\(c)o(omp)o(,I)o(CA)o(L_A)o(NY)o(_CO)o +(MP)o(ON)o(ENT)o(\)\))261 1398 y(do_something\(c\);)0 +1619 y Ff(This)32 b(co)r(de)f(bit)h(wil)g(iterate)g(through)f(all)g(of) +h(the)g(sub)r(comp)r(onen)n(ts)f(in)h('comp')g(but)g(y)n(ou)f(can)g +(select)h(a)f(sp)r(eci\034c)h(t)n(yp)r(e)g(of)0 1733 +y(comp)r(onen)n(t)27 b(b)n(y)h(c)n(hanging)e(ICAL_ANY_COMPONENT)i(to)f +(another)g(comp)r(onen)n(t)g(t)n(yp)r(e.)0 2002 y Fd(5.2.3)94 +b(Using)31 b(Comp)s(onen)m(t)f(Iterators)0 2212 y Ff(The)h(iteration)f +(mo)r(del)h(in)h(the)f(previous)f(section)g(requires)g(the)h(comp)r +(onen)n(t)g(to)g(k)n(eep)f(the)i(state)f(of)g(the)g(iteration.)46 +b(So,)0 2326 y(y)n(ou)32 b(could)g(not)h(use)f(this)h(mo)r(del)g(to)f +(p)r(erform)g(a)g(sorting)f(op)r(erations,)i(since)f(y)n(ou'd)g(need)h +(t)n(w)n(o)f(iterators)f(and)h(there)g(is)0 2440 y(only)26 +b(space)h(for)f(one.)36 b(If)27 b(y)n(ou)f(ev)n(er)g(call)h(icalcomp)r +(onen)n(t_get_\034rst_comp)r(onen)n(t\(\))d(when)j(an)f(iteration)h(is) +f(in)h(progress,)0 2553 y(the)h(p)r(oin)n(ter)f(will)h(b)r(e)g(reset)f +(to)g(the)h(b)r(eginning.)0 2710 y(T)-7 b(o)28 b(solv)n(e)g(this)h +(problem,)g(there)f(are)g(also)g(external)f(iterators)h(for)g(comp)r +(onen)n(ts.)40 b(The)28 b(routines)g(asso)r(ciated)g(with)h(these)0 +2823 y(external)e(iterators)f(are:)0 3044 y Fc(icalcompiter)38 +b(icalcomponent_beg)o(in)o(_co)o(mp)o(on)o(ent)o(\(i)o(ca)o(lco)o(mp)o +(one)o(nt)o(*)f(component,)j(icalcomponent_k)o(ind)d(kind\);)0 +3158 y(icalcompiter)h(icalcomponent_end)o(_c)o(omp)o(on)o(en)o(t\(i)o +(ca)o(lc)o(omp)o(on)o(ent)o(*)f(component,)j(icalcomponent_k)o(in)o(d)e +(kind\);)0 3271 y(icalcomponent*)g(icalcompiter_ne)o(xt)o(\(ic)o(al)o +(co)o(mpi)o(te)o(r*)f(i\);)0 3385 y(icalcomponent*)h(icalcompiter_pr)o +(io)o(r\(i)o(ca)o(lc)o(omp)o(it)o(er)o(*)g(i\);)0 3498 +y(icalcomponent*)g(icalcompiter_de)o(re)o(f\(i)o(ca)o(lc)o(omp)o(it)o +(er)o(*)g(i\);)0 3719 y Ff(The)27 b(_b)r(egin_\(\))g(and)g(_end_\(\))g +(routines)g(return)g(a)g(new)g(iterator)f(that)h(p)r(oin)n(ts)g(to)h +(the)f(b)r(eginning)g(and)g(ending)h(of)f(the)0 3833 +y(list)36 b(of)f(sub)r(comp)r(onen)n(t)h(for)f(the)h(giv)n(en)f(comp)r +(onen)n(t,)i(and)e(the)h(kind)g(argumen)n(t)e(w)n(orks)g(lik)n(e)h(the) +h(kind)g(argumen)n(t)f(for)0 3946 y(in)n(ternal)27 b(iterators.)0 +4103 y(After)f(creating)e(an)h(iterators,)g(use)g(_next_\(\))g(and)h +(_prior_\(\))e(to)h(step)h(forw)n(ard)d(and)j(bac)n(kw)n(ard)d(through) +i(the)h(list)f(and)0 4216 y(get)30 b(the)g(comp)r(onen)n(t)g(that)g +(the)g(iterator)e(p)r(oin)n(ts)i(to,)h(and)e(use)h(_deref\(\))g(to)g +(return)f(the)h(comp)r(onen)n(t)g(that)g(the)g(iterator)0 +4330 y(p)r(oin)n(ts)c(to)g(without)h(mo)n(ving)e(the)i(iterator.)35 +b(All)27 b(routines)f(will)g(return)g(0)g(when)g(they)h(mo)n(v)n(e)e +(to)h(p)r(oin)n(t)h(o\033)f(the)h(end)f(of)h(the)0 4444 +y(list.)0 4600 y(Here)g(is)h(an)f(example)g(of)h(a)f(lo)r(op)g(using)g +(these)h(routines:)0 4821 y Fc(for\()131 4934 y(i)43 +b(=)g(icalcomponent_be)o(gi)o(n_c)o(om)o(po)o(nen)o(t\()o(im)o(pl-)o +(cl)o(us)o(ter)o(,I)o(CAL)o(_A)o(NY)o(_CO)o(MP)o(ON)o(ENT)o(\);)131 +5048 y(icalcompiter_de)o(ref)o(\(i)o(\)!)o(=)38 b(0;)131 +5162 y(icalcompiter_ne)o(xt\()o(i\))0 5275 y(\))261 5389 +y(icalcomponent)h(*this)i(=)i(icalcompiter_der)o(ef)o(\(i\))o(;)p +eop +%%Page: 12 12 +12 11 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(12)0 162 y Fd(5.2.4)94 b(Remo)m(ving)29 +b(Comp)s(onen)m(ts)0 372 y Ff(Remo)n(ving)40 b(an)h(elemen)n(t)g(from)g +(a)g(list)g(while)h(iterating)e(through)h(the)g(list)h(with)f(the)h(in) +n(ternal)e(iterators)g(can)h(cause)0 485 y(problems,)20 +b(since)e(y)n(ou)g(will)h(probably)e(b)r(e)i(remo)n(ving)e(the)i +(elemen)n(t)g(that)g(the)g(in)n(ternal)f(iterator)f(p)r(oin)n(ts)h(to.) +34 b(The)19 b(_remo)n(v)n(e\(\))0 599 y(routine)24 b(will)g(k)n(eep)f +(the)i(iterator)d(v)-5 b(alid)24 b(b)n(y)g(mo)n(ving)f(it)h(to)g(the)h +(next)f(comp)r(onen)n(t,)g(but)h(in)f(a)g(normal)f(lo)r(op,)h(this)g +(will)g(result)0 712 y(in)k(t)n(w)n(o)f(adv)-5 b(ances)26 +b(p)r(er)i(iteration,)e(and)i(y)n(ou)f(will)g(remo)n(v)n(e)f(only)h(ev) +n(ery)f(other)h(comp)r(onen)n(t.)37 b(T)-7 b(o)27 b(a)n(v)n(oid)f(the)i +(problem,)f(y)n(ou)0 826 y(will)h(need)f(to)h(step)g(the)g(iterator)e +(ahead)h(of)g(the)h(elemen)n(t)g(y)n(ou)e(are)h(going)f(to)i(remo)n(v)n +(e,)e(lik)n(e)h(this:)0 1066 y Fc(for\(c)41 b(=)j(icalcomponent_g)o(et) +o(_fi)o(rs)o(t_)o(com)o(po)o(ne)o(nt\()o(pa)o(re)o(nt_)o(co)o(mp,)o(IC) +o(AL)o(_AN)o(Y_)o(CO)o(MPO)o(NE)o(NT)o(\);)305 1179 y(c)f(!=)g(0;)305 +1293 y(c)g(=)g(next)174 1520 y(next)f(=)h(icalcomponent_get)o(_n)o(ex)o +(t_c)o(om)o(po)o(nen)o(t\()o(pa)o(ren)o(t_)o(com)o(p,)o(IC)o(AL_)o(AN)o +(Y_)o(COM)o(PO)o(NE)o(NT\))o(;)174 1633 y(icalcomponent_rem)o(ov)o(e_)o +(com)o(po)o(ne)o(nt\()o(pa)o(re)o(nt_)o(co)o(mp)o(,c\))o(;)0 +1873 y Ff(Another)32 b(w)n(a)n(y)e(to)i(remo)n(v)n(e)e(comp)r(onen)n +(ts)i(is)g(to)f(rely)h(on)f(the)i(side)f(e\033ect)g(of)g(icalcomp)r +(onen)n(t_remo)n(v)n(e_comp)r(onen)n(t:)42 b(if)0 1986 +y(comp)r(onen)n(t)28 b(iterator)g(in)h(the)g(paren)n(t)f(comp)r(onen)n +(t)h(is)f(p)r(oin)n(ting)h(to)g(the)g(c)n(hild)g(that)g(will)g(b)r(e)g +(remo)n(v)n(ed,)f(it)h(will)g(mo)n(v)n(e)f(the)0 2100 +y(iterator)e(to)i(the)g(comp)r(onen)n(t)f(after)g(the)h(c)n(hild.)37 +b(The)27 b(follo)n(wing)g(co)r(de)g(will)h(exploit)f(this)h(b)r(eha)n +(vior:)0 2340 y Fc(icalcomponent_ge)o(t_)o(fir)o(st)o(_c)o(omp)o(on)o +(en)o(t\(p)o(ar)o(en)o(t_c)o(om)o(p,)o(ICA)o(L_)o(VEV)o(EN)o(T_)o(COM)o +(PO)o(NE)o(NT\))o(;)0 2453 y(while\(\(c=icalcom)o(po)o(nen)o(t_)o(ge)o +(t_c)o(ur)o(re)o(nt_)o(co)o(mp)o(one)o(nt)o(\(c)o(\)\))37 +b(!=)43 b(0)g(\))131 2567 y(if\(icalcomponen)o(t_i)o(sa)o(\(c)o(\))38 +b(==)k(ICAL_VEVENT_COMP)o(ONE)o(NT)o(\))261 2680 y(icalcomponent_rem)o +(ov)o(e_c)o(om)o(po)o(nen)o(t\()o(pa)o(ren)o(t_)o(co)o(mp,)o(in)o(ner)o +(\);)174 2794 y(else)261 2907 y(icalcomponent_get)o(_n)o(ext)o(_c)o(om) +o(pon)o(en)o(t\()o(par)o(en)o(t_)o(com)o(p,)o(ICA)o(L_)o(VE)o(VEN)o(T_) +o(CO)o(MPO)o(NE)o(NT)o(\);)0 3294 y Fd(5.2.5)94 b(W)-8 +b(orking)31 b(with)g(prop)s(erties)g(and)h(parameters)0 +3504 y Ff(Finding,)g(iterating)f(and)g(remo)n(ving)e(prop)r(erties)h(w) +n(orks)g(the)h(same)g(as)f(it)i(do)r(es)e(for)h(comp)r(onen)n(ts,)g +(using)g(the)h(prop)r(ert)n(y-)0 3617 y(sp)r(eci\034c)c(or)e +(parameter-sp)r(eci\034c)g(in)n(terfaces:)0 3857 y Fc(icalproperty*)38 +b(icalcomponent_ge)o(t_)o(fir)o(st)o(_p)o(rop)o(er)o(ty)o(\()218 +3970 y(icalcomponent*)g(component,)218 4084 y(icalproperty_kin)o(d)f +(kind\);)0 4197 y(icalproperty*)h(icalcomponent_ge)o(t_)o(nex)o(t_)o +(pr)o(ope)o(rt)o(y\()218 4311 y(icalcomponent*)g(component,)218 +4425 y(icalproperty_kin)o(d)f(kind\);)0 4538 y(void)42 +b(icalcomponent_ad)o(d_)o(pr)o(ope)o(rt)o(y\()218 4652 +y(icalcomponent*)c(component,)218 4765 y(icalproperty*)g(property\);)0 +4879 y(void)k(icalcomponent_re)o(mo)o(ve)o(_pr)o(op)o(er)o(ty\()218 +4992 y(icalcomponent*)c(component,)218 5106 y(icalproperty*)g +(property\);)0 5346 y Ff(F)-7 b(or)27 b(parameters:)p +eop +%%Page: 13 13 +13 12 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(13)0 162 y Fc(icalparameter*)38 b(icalproperty_ge)o +(t_)o(fir)o(st)o(_p)o(ara)o(me)o(te)o(r\()218 275 y(icalproperty*)g +(prop,)218 389 y(icalparameter_ki)o(nd)f(kind\);)0 502 +y(icalparameter*)h(icalproperty_ge)o(t_)o(nex)o(t_)o(pa)o(ram)o(et)o +(er)o(\()218 616 y(icalproperty*)g(prop,)218 730 y(icalparameter_ki)o +(nd)f(kind\);)0 843 y(void)42 b(icalproperty_add)o(_p)o(ar)o(ame)o(te)o +(r\()218 957 y(icalproperty*)c(prop,)218 1070 y(icalparameter*)g +(parameter\);)0 1184 y(void)k(icalproperty_rem)o(ov)o(e_)o(par)o(am)o +(et)o(er\()218 1297 y(icalproperty*)c(prop,)218 1411 +y(icalparameter_ki)o(nd)f(kind\);)0 1650 y Ff(Note)30 +b(that)g(since)f(there)h(should)f(b)r(e)i(only)e(one)g(parameter)f(of)i +(eac)n(h)f(t)n(yp)r(e)h(in)g(a)f(prop)r(ert)n(y)-7 b(,)30 +b(y)n(ou)f(will)h(rarely)e(need)i(to)f(use)0 1764 y +(icalparameter_get_nect_paameter.)0 2037 y Fd(5.2.6)94 +b(W)-8 b(orking)31 b(with)g(v)-5 b(alues)0 2247 y Ff(V)e(alues)33 +b(are)g(t)n(ypically)g(part)h(of)f(a)h(prop)r(ert)n(y)-7 +b(,)34 b(although)f(they)h(can)f(exist)h(on)f(their)h(o)n(wn.)55 +b(Y)-7 b(ou)34 b(can)f(manipulate)h(them)0 2360 y(either)27 +b(as)g(part)g(of)h(the)g(prop)r(ert)n(y)e(or)h(indep)r(enden)n(tly)-7 +b(.)0 2517 y(The)36 b(most)f(common)g(w)n(a)n(y)f(to)h(w)n(ork)f(with)i +(v)-5 b(alues)35 b(to)h(is)f(to)g(manipulate)h(them)g(from)f(they)h +(prop)r(erties)e(that)i(con)n(tain)0 2630 y(them.)46 +b(This)31 b(in)n(v)n(olv)n(es)d(few)n(er)i(routine)g(calls)g(and)h(in)n +(termediate)f(v)-5 b(ariables)29 b(than)h(w)n(orking)f(with)i(them)g +(indep)r(enden)n(tly)-7 b(,)0 2744 y(and)27 b(it)h(is)g(t)n(yp)r +(e-safe.)0 2900 y(F)-7 b(or)26 b(eac)n(h)g(prop)r(ert)n(y)-7 +b(,)26 b(there)h(are)f(a)g(_get_)g(and)h(a)f(_set_)g(routine)h(that)g +(access)e(the)j(in)n(ternal)e(v)-5 b(alue.)36 b(F)-7 +b(or)26 b(instanace,)h(for)0 3014 y(the)h(UID)g(prop)r(ert)n(y)-7 +b(,)27 b(the)h(routines)f(are:)0 3253 y Fc(void)42 b(icalproperty_set)o +(_u)o(id)o(\(ic)o(al)o(pr)o(ope)o(rt)o(y*)37 b(prop,)k(const)h(char*)f +(v\))0 3367 y(const)g(char*)h(icalproperty_get)o(_u)o(id)o(\(ic)o(al)o +(pr)o(ope)o(rt)o(y*)37 b(prop\))0 3607 y Ff(F)-7 b(or)19 +b(m)n(ulti-v)-5 b(alued)20 b(prop)r(erties,)h(lik)n(e)f(A)-7 +b(TT)g(A)n(CH,)20 b(the)h(v)-5 b(alue)20 b(t)n(yp)r(e)g(is)g(usually)f +(a)h(struct)g(or)f(union)h(that)g(holds)g(b)r(oth)g(p)r(ossible)0 +3720 y(t)n(yp)r(es.)0 3877 y(If)28 b(y)n(ou)f(w)n(an)n(t)g(to)g(w)n +(ork)f(with)i(the)g(underlying)f(v)-5 b(alue)28 b(ob)5 +b(ject,)27 b(y)n(ou)g(can)g(get)g(and)h(set)f(it)h(with:)0 +4116 y Fc(icalvalue*)39 b(icalproperty_get_)o(va)o(lu)o(e)f +(\(icalproperty*)f(prop\))0 4230 y(void)42 b(icalproperty_set)o(_v)o +(al)o(ue\()o(ic)o(al)o(pro)o(pe)o(rt)o(y*)37 b(prop,)42 +b(icalvalue*)d(value\);)0 4469 y Ff(Icalprop)r(ert)n(y_get_v)-5 +b(alue\(\))36 b(will)i(return)g(a)g(reference)f(that)h(y)n(ou)g(can)g +(manipulate)g(with)h(other)e(icalv)-5 b(alue)38 b(routines.)0 +4583 y(Most)30 b(of)h(the)g(time,)g(y)n(ou)f(will)h(ha)n(v)n(e)e(to)i +(kno)n(w)e(what)i(the)g(t)n(yp)r(e)f(of)h(the)g(v)-5 +b(alue)30 b(is.)46 b(F)-7 b(or)30 b(instance,)g(if)i(y)n(ou)d(kno)n(w)h +(that)h(the)0 4696 y(v)-5 b(alue)27 b(is)h(a)f(D)n(A)-7 +b(TETIME)29 b(t)n(yp)r(e,)f(y)n(ou)f(can)g(manipulate)g(it)h(with:)0 +4936 y Fc(struct)41 b(icaltimetype)e(icalvalue_get_d)o(at)o(et)o(ime)o +(\(i)o(ca)o(lva)o(lu)o(e*)e(value\);)0 5049 y(void)42 +b(icalvalue_set_da)o(te)o(ti)o(me\()o(ic)o(al)o(val)o(ue)o(*)37 +b(value,)k(struct)h(icaltimetype)c(v\);)0 5289 y Ff(When)21 +b(w)n(orking)e(with)i(an)f(extension)g(prop)r(ert)n(y)f(or)h(v)-5 +b(alue)20 b(\(and)h(X-PR)n(OPER)-7 b(TY)21 b(or)f(a)g(prop)r(ert)n(y)f +(that)i(has)f(the)h(parameter)0 5402 y(V)-9 b(ALUE=x-name)27 +b(\))h(the)g(v)-5 b(alue)28 b(t)n(yp)r(e)f(is)h(alw)n(a)n(ys)d(a)j +(string.)36 b(T)-7 b(o)27 b(get)g(and)h(set)f(the)h(v)-5 +b(alue,)28 b(use:)p eop +%%Page: 14 14 +14 13 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(14)0 162 y Fc(void)42 b(icalproperty_set)o(_x)o +(\(i)o(cal)o(pr)o(op)o(ert)o(y*)37 b(prop,)k(char*)h(v\);)0 +275 y(char*)f(icalproperty_get_)o(x\()o(ica)o(lp)o(ro)o(per)o(ty)o(*)c +(prop\);)0 515 y Ff(All)26 b(X)g(prop)r(erties)f(ha)n(v)n(e)f(the)i(t)n +(yp)r(e)g(of)g(ICAL_X_PR)n(OPER)-7 b(TY,)26 b(so)f(y)n(ou)g(will)h +(need)g(these)g(routines)f(to)g(get)h(and)f(set)h(the)0 +628 y(name)h(of)h(the)g(prop)r(ert)n(y:)0 868 y Fc(char*)41 +b(icalproperty_get_)o(x_)o(nam)o(e\()o(ic)o(alp)o(ro)o(pe)o(rty)o(*)c +(prop\))0 981 y(void)42 b(icalproperty_set)o(_x)o(_n)o(ame)o(\(i)o(ca)o +(lpr)o(op)o(er)o(ty*)37 b(prop,)k(char*)h(name\);)0 1254 +y Fd(5.2.7)94 b(Chec)m(king)32 b(Comp)s(onen)m(t)d(V)-8 +b(alidit)m(y)0 1464 y Ff(RF)n(C)25 b(2446)e(de\034nes)j(rules)e(for)h +(what)g(prop)r(erties)f(m)n(ust)h(exist)g(in)h(a)e(comp)r(onen)n(t)h +(to)g(b)r(e)h(used)f(for)f(transferring)g(sc)n(heduling)0 +1578 y(data.)58 b(Most)35 b(of)g(these)g(rules)f(relate)g(to)h(the)g +(existence)f(of)h(prop)r(erties)f(relativ)n(e)g(to)h(the)g(METHOD)h +(prop)r(ert)n(y)-7 b(,)35 b(whic)n(h)0 1691 y(declares)22 +b(what)h(op)r(eration)f(a)h(remote)g(receiv)n(er)f(should)h(use)g(to)g +(pro)r(cess)f(a)h(comp)r(onen)n(t.)35 b(F)-7 b(or)23 +b(instance,)h(if)g(the)f(METHOD)0 1805 y(is)36 b(REQUEST)h(and)e(the)i +(comp)r(onen)n(t)e(is)h(a)f(VEVENT,)j(the)e(sender)f(is)h(probably)f +(asking)f(the)j(receiv)n(er)d(to)h(join)h(in)g(a)0 1918 +y(meeting.)g(In)25 b(this)g(case,)g(RF)n(C2446)d(sa)n(ys)i(that)h(the)g +(comp)r(onen)n(t)g(m)n(ust)g(sp)r(ecify)g(a)f(start)g(time)i(\(DTST)-7 +b(AR)g(T\))26 b(and)f(list)g(the)0 2032 y(receiv)n(er)h(as)h(an)g +(attendee)h(\(A)-7 b(TTENDEE\).)0 2188 y(Libical)27 b(can)g(c)n(hec)n +(k)g(these)h(restrictions)e(with)i(the)g(routine:)0 2428 +y Fc(int)42 b(icalrestriction_c)o(he)o(ck)o(\(ic)o(al)o(co)o(mpo)o(ne)o +(nt)o(*)c(comp\);)0 2667 y Ff(This)19 b(routine)f(returns)g(0)h(if)g +(the)g(comp)r(onen)n(t)g(do)r(es)f(not)h(pass)f(RF)n(C2446)f +(restrictions,)i(or)f(if)h(the)g(comp)r(onen)n(t)g(is)g(malformed.)0 +2781 y(The)38 b(comp)r(onen)n(t)g(y)n(ou)f(pass)g(in)h +Fa(must)45 b Ff(b)r(e)38 b(a)g(V)n(CALEND)n(AR,)h(with)g(one)e(or)g +(more)h(c)n(hildren,)i(lik)n(e)d(the)i(examples)e(in)0 +2895 y(RF)n(C2446.)0 3051 y(When)28 b(this)f(routine)g(runs,)f(it)i +(will)f(insert)g(new)g(prop)r(erties)f(in)n(to)h(the)h(comp)r(onen)n(t) +e(to)h(indicate)h(an)n(y)e(errors)f(it)i(\034nds.)37 +b(See)0 3165 y(section)27 b(6.5.3,)f(X-LIC-ERR)n(OR)i(for)f(more)f +(information)h(ab)r(out)h(these)f(error)f(prop)r(erties.)0 +3437 y Fd(5.2.8)94 b(Con)m(v)m(erting)32 b(Comp)s(onen)m(ts)d(to)j(T)-8 +b(ext)0 3647 y Ff(T)h(o)19 b(create)g(an)h(RF)n(C2445)e(complian)n(t)h +(text)h(represen)n(tation)e(of)i(an)f(ob)5 b(ject,)21 +b(use)f(one)f(of)h(the)g(*_as_ical_string\(\))d(routines:)0 +3887 y Fc(char*)41 b(icalcomponent_as_)o(ic)o(al_)o(st)o(ri)o(ng)c +(\(icalcomponent*)g(component\))0 4000 y(char*)k(icalproperty_as_i)o +(ca)o(l_s)o(tr)o(in)o(g)d(\(icalproperty*)f(property\))0 +4114 y(char*)k(icalparameter_as_)o(ic)o(al_)o(st)o(ri)o(ng)c +(\(icalparameter*)g(parameter\))0 4227 y(char*)k(icalvalue_as_ical)o +(_s)o(tri)o(ng)c(\(icalvalue*)i(value\))0 4467 y Ff(In)32 +b(most)h(cases,)f(y)n(ou)f(will)i(only)f(use)g(icalcomp)r(onen)n +(t_as_ical_string)c(\(\),)34 b(since)e(it)h(will)f(cascade)f(and)h(con) +n(v)n(ert)f(all)h(of)0 4581 y(the)c(parameters,)e(prop)r(erties)g(and)i +(v)-5 b(alues)27 b(that)h(are)e(attac)n(hed)h(to)h(the)g(ro)r(ot)e +(comp)r(onen)n(t.)0 4737 y(Icalprop)r(ert)n(y_as_ical_string\(\))37 +b(will)k(terminate)g(eac)n(h)g(line)g(with)h(the)f(RF)n(C2445)f(sp)r +(eci\034ed)h(line)h(terminator)e("n")0 4851 y(Ho)n(w)n(ev)n(er,)27 +b(if)h(y)n(ou)g(compile)g(with)h(the)f(sym)n(b)r(ol)g +(ICAL_UNIX_NEWLINE)i(unde\034ned,)f(\()g(it)g(is)f(de\034ned)h(b)n(y)f +(default\))h(it)0 4964 y(will)f(terminate)f(lines)h(with)g("nr")0 +5121 y(Remem)n(b)r(er)35 b(that)h(the)f(string)g(returned)f(b)n(y)h +(these)h(routines)e(is)h(o)n(wned)g(b)n(y)g(the)h(library)-7 +b(,)36 b(and)f(will)g(ev)n(en)n(tually)f(b)r(e)i(re-)0 +5234 y(written.)h(Y)-7 b(ou)28 b(should)f(cop)n(y)g(it)h(if)g(y)n(ou)e +(w)n(an)n(t)h(to)h(preserv)n(e)e(it.)p eop +%%Page: 15 15 +15 14 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(15)0 162 y Fb(5.3)112 b(Time)0 372 +y Fd(5.3.1)94 b(Time)30 b(structure)0 582 y Ff(LIbical)d(de\034nes)g +(it's)g(o)n(wn)f(time)i(structure)e(for)h(storing)f(all)h(dates)f(and)h +(times.)37 b(It)28 b(w)n(ould)e(ha)n(v)n(e)g(b)r(een)i(nice)f(to)g +(re-use)f(the)0 695 y(C)j(library's)e Fa(struct)j(tm,)h +Ff(but)e(that)h(structure)e(do)r(es)g(not)h(di\033eren)n(tiate)g(b)r +(et)n(w)n(een)g(dates)f(and)h(times,)g(and)g(b)r(et)n(w)n(een)g(lo)r +(cal)0 809 y(time)f(and)f(UTC.)h(The)g(libical)f(structure)g(is:)0 +1031 y Fc(struct)41 b(icaltimetype)87 1144 y(int)h(year;)87 +1258 y(int)g(month;)87 1371 y(int)g(day;)87 1485 y(int)g(hour;)87 +1599 y(int)g(minute;)87 1712 y(int)g(second;)87 1826 +y(int)g(is_utc;)f(/*)i(1-)g(time)e(is)i(in)g(UTC)f(timezone)e(*/)87 +1939 y(int)i(is_date;)f(/*)h(1)i(-)f(interpret)c(this)j(as)h(date.)e +(*/)i(;)0 2161 y Ff(The)35 b(y)n(ear,)h(mon)n(th,)g(da)n(y)-7 +b(,)37 b(hour,)f(min)n(ute)f(and)g(second)g(\034elds)g(ho)n(w)f(the)h +(brok)n(en-out)f(time)h(v)-5 b(alues.)59 b(The)35 b(is_utc)g(\034eld)0 +2275 y(distinguishes)30 b(b)r(et)n(w)n(een)h(times)g(UTC)g(and)g(a)f +(lo)r(cal)g(time)i(zone.)45 b(The)31 b(is_date)f(\034eld)h(indicates)g +(if)g(the)g(in)n(tra-da)n(y)e(\034elds)0 2388 y(hold)e(v)-5 +b(alid)28 b(data.)0 2658 y Fd(5.3.2)94 b(Creating)31 +b(time)f(structures)0 2868 y Ff(There)d(are)g(sev)n(eral)e(w)n(a)n(ys)h +(to)i(create)e(a)i(new)f(icaltimet)n(yp)r(e)h(structure:)0 +3089 y Fc(struct)41 b(icaltimetype)e(icaltime_from_s)o(tr)o(in)o(g\(c)o +(on)o(st)e(char*)42 b(str\);)0 3203 y(struct)f(icaltimetype)e +(icaltime_from_t)o(im)o(et)o(\(ti)o(me)o(_t)e(v,)43 b(int)f(is_date\);) +0 3317 y(struct)f(icaltimetype)e(icaltime_from_i)o(nt)o(\(i)o(nt)e(v,) +43 b(int)f(is_date,)e(int)j(is_utc\);)0 3538 y Ff(Icaltime_from_string) +25 b(tak)n(es)i(an)n(y)g(RF)n(C2445)e(complian)n(t)i(time)h(string:)0 +3760 y Fc(struct)41 b(icaltimetype)e(tt)j(=)h(icaltime_from_str)o(in)o +(g\()o(199)o(70)o(101)o(T1)o(03)o(000)o(\);)0 3982 y +Ff(Icaltime_from_timet)22 b(tak)n(es)g(a)h(timet)g(v)-5 +b(alue,)24 b(represen)n(ting)e(seconds)g(past)g(the)i(POSIX)f(ep)r(o)r +(c)n(h,)h(and)f(a)f(\035ag)g(to)h(indicate)0 4095 y(if)k(the)f(time)g +(is)g(a)g(date.)36 b(Dates)26 b(ha)n(v)n(e)f(an)h(iden)n(tical)f +(structure)h(to)g(a)f(time,)i(but)g(they)f(time)h(p)r(ortion)e(\()i +(hours,)e(min)n(uts)h(and)0 4209 y(seconds)d(\))i(is)g(alw)n(a)n(ys)d +(00:00:00.)33 b(Dates)24 b(act)h(di\033eren)n(tly)f(in)h(sorting)e(an)h +(comparision,)f(and)i(they)f(ha)n(v)n(e)f(a)h(di\033eren)n(t)h(string)0 +4322 y(represen)n(tation)h(in)i(RF)n(C2445.)0 4479 y(The)20 +b(icaltime_from_in)n(t)e(is)h(lik)n(e)g(icaltime_from_timet,)i(but)f +(with)g(an)f(arbitrary)f(ep)r(o)r(c)n(h.)34 b(This)19 +b(routine)g(w)n(as)g(a)g(mistak)n(e)0 4592 y(and)27 b(is)h(deprecated.) +0 4862 y Fd(5.3.3)94 b(Time)30 b(manipulating)f(routines)0 +5072 y Ff(The)f(n)n(ull)f(time)h(v)-5 b(alue)28 b(is)f(used)h(to)f +(indicate)h(that)g(the)g(data)f(in)g(the)h(structure)f(is)h(not)f(a)h +(v)-5 b(alid)27 b(time.)0 5294 y Fc(struct)41 b(icaltimetype)e +(icaltime_null_t)o(im)o(e\()o(voi)o(d\))o(;)0 5407 y(int)j +(icaltime_is_null_)o(ti)o(me)o(\(st)o(ru)o(ct)37 b(icaltimetype)h(t\);) +p eop +%%Page: 16 16 +16 15 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(16)0 162 y(It)33 b(is)g(sensible)g(for)g(the)g +(brok)n(en-out)f(time)h(\034elds)g(to)g(con)n(tain)g(v)-5 +b(alues)32 b(that)i(are)e(not)h(p)r(ermitted)h(in)f(an)g(ISO)g +(complian)n(t)0 275 y(time)g(string.)53 b(F)-7 b(or)32 +b(instance,)i(the)g(seconds)e(\034eld)h(can)g(hold)g(v)-5 +b(alues)32 b(greater)f(than)j(59,)f(and)g(the)g(hours)f(\034eld)i(can)e +(hold)0 389 y(v)-5 b(alues)29 b(larger)e(than)j(24.)41 +b(The)29 b(excessiv)n(e)f(v)-5 b(alues)29 b(will)g(b)r(e)h(rolled)e(o)n +(v)n(er)g(in)n(to)h(the)g(next)h(larger)d(\034eld)j(when)f(the)h +(structure)0 502 y(is)d(normalized.)0 712 y Fc(struct)41 +b(icaltimetype)e(icaltime_normal)o(iz)o(e\()o(str)o(uc)o(t)e +(icaltimetype)i(t\);)0 921 y Ff(Normalizing)26 b(allo)n(ws)g(y)n(ou)h +(to)h(do)f(arithmetic)g(op)r(erations)g(on)g(time)h(v)-5 +b(alues.)0 1130 y Fc(struct)41 b(icaltimetype)e(tt)j(=)h +(icaltime_from_str)o(in)o(g\()o("19)o(97)o(010)o(1T)o(10)o(300)o(0")o +(\);)0 1244 y(tt.days)e(+=3)0 1357 y(tt.second)f(+=)i(70;)0 +1471 y(tt)h(=)g(icaltime_normali)o(ze)o(\(t)o(t\);)0 +1680 y Ff(There)27 b(are)g(sev)n(eral)e(routines)i(to)h(get)f(the)h(da) +n(y)f(of)g(the)h(w)n(eek)f(or)g(mon)n(th,)g(etc,)h(from)f(a)h(time)g +(structure.)0 1889 y Fc(short)41 b(icaltime_day_of_y)o(ea)o(r\(s)o(tr)o +(uc)o(t)d(icaltimetype)g(t\);)0 2003 y(struct)j(icaltimetype)e +(icaltime_from_d)o(ay)o(_o)o(f_y)o(ea)o(r\()o(sho)o(rt)e(doy,)42 +b(short)f(year\);)0 2117 y(short)g(icaltime_day_of_w)o(ee)o(k\(s)o(tr)o +(uc)o(t)d(icaltimetype)g(t\);)0 2230 y(short)j(icaltime_start_do)o(y_)o +(of_)o(we)o(ek)o(\(st)o(ru)o(ct)c(icaltimetype)i(t\);)0 +2344 y(short)i(icaltime_week_num)o(be)o(r\(s)o(ho)o(rt)c(day_of_month,) +h(short)k(month,)f(short)g(year\);)0 2457 y(struct)g(icaltimetype)e +(icaltime_from_w)o(ee)o(k_)o(num)o(be)o(r\()o(sho)o(rt)e(week_number,)h +(short)k(year\);)0 2571 y(short)f(icaltime_days_in_)o(mo)o(nth)o(\(s)o +(ho)o(rt)c(month,short)i(year\);)0 2780 y Ff(T)-7 b(w)n(o)37 +b(routines)g(con)n(v)n(ert)g(time)h(structures)f(to)h(and)f(from)h(the) +g(n)n(um)n(b)r(er)g(of)f(seconds)g(since)h(the)g(POSIX)g(ep)r(o)r(c)n +(h.)68 b(The)0 2894 y(is_date)27 b(\034eld)h(indicates)f(whether)g(or)g +(not)h(the)g(hour,)e(min)n(ute)i(and)g(second)f(\034elds)g(should)h(b)r +(e)g(used)f(in)h(the)g(con)n(v)n(ersion.)0 3103 y Fc(struct)41 +b(icaltimetype)e(icaltime_from_t)o(im)o(et)o(\(ti)o(me)o(_t)e(v,)43 +b(int)f(is_date\);)0 3217 y(time_t)f(icaltime_as_time)o(t\()o(str)o(uc) +o(t)c(icaltimetype\);)0 3426 y Ff(The)28 b(compare)e(routine)h(w)n +(orks)f(exactly)h(lik)n(e)g(strcmp,)g(but)h(on)g(time)g(structures.)0 +3635 y Fc(int)42 b(icaltime_compare\()o(st)o(ru)o(ct)37 +b(icaltimetype)i(a,struct)h(icaltimetype)e(b\);)0 3844 +y Ff(The)d(follo)n(wing)e(routines)h(con)n(v)n(ert)g(b)r(et)n(w)n(een)g +(UTC)h(and)g(a)f(named)h(timezone.)58 b(The)35 b(tzid)g(\034eld)g(m)n +(ust)g(b)r(e)g(a)f(timezone)0 3958 y(name)27 b(from)h(the)f(Olsen)h +(database,)e(suc)n(h)h(as)g("America/Los_Angeles.")0 +4114 y(The)h(utc_o\033set)f(routine)g(returns)g(the)h(o\033set)f(of)h +(the)g(named)f(time)h(zone)f(from)h(UTC,)f(in)h(seconds.)0 +4271 y(The)f(tt)g(parameter)e(in)i(the)g(follo)n(wing)e(routines)h +(indicates)h(the)g(date)f(on)h(whic)n(h)f(the)h(con)n(v)n(ersion)d +(should)j(b)r(e)g(made.)36 b(The)0 4384 y(tt)23 b(parameter)e(is)h +(necessary)f(b)r(ecause)h(timezones)g(ha)n(v)n(e)f(man)n(y)g +(di\033eren)n(t)i(rules)f(for)g(when)g(da)n(yligh)n(t)f(sa)n(vings)g +(time)i(is)f(used,)0 4498 y(and)27 b(these)h(rules)f(can)g(c)n(hange)f +(o)n(v)n(er)g(time.)37 b(So,)27 b(for)g(a)g(single)g(timezone)g(one)g +(y)n(ear)f(ma)n(y)h(ha)n(v)n(e)f(da)n(yligh)n(t)h(sa)n(vings)e(time)j +(on)0 4612 y(Marc)n(h)f(15,)f(but)j(for)e(other)g(y)n(ears)f(Marc)n(h)g +(15)h(ma)n(y)g(b)r(e)h(standard)f(time,)h(and)f(some)g(y)n(ears)f(ma)n +(y)h(ha)n(v)n(e)g(standard)f(time)i(all)0 4725 y(y)n(ear.)0 +4934 y Fc(int)42 b(icaltime_utc_offs)o(et)o(\(s)o(tru)o(ct)37 +b(icaltimetype)h(tt,)43 b(char*)e(tzid\);)0 5048 y(int)h +(icaltime_local_ut)o(c_)o(of)o(fse)o(t\()o(\);)0 5162 +y(struct)f(icaltimetype)e(icaltime_as_utc)o(\(s)o(tr)o(uct)e +(icaltimetype)h(tt,char*)i(tzid\);)0 5275 y(struct)h(icaltimetype)e +(icaltime_as_zon)o(e\()o(st)o(ruc)o(t)e(icaltimetype)i(tt,char*)h +(tzid\);)0 5389 y(struct)h(icaltimetype)e(icaltime_as_loc)o(al)o(\(s)o +(tru)o(ct)e(icaltimetype)h(tt\);)p eop +%%Page: 17 17 +17 16 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(17)0 162 y Fb(5.4)112 b(Storing)37 +b(Ob)6 b(jects)0 372 y Ff(The)31 b(libical)f(distribution)h(includes)g +(a)f(separate)f(library)-7 b(,)30 b(libicalss,)h(that)g(allo)n(ws)e(y)n +(ou)h(to)g(store)g(iCal)g(comp)r(onen)n(t)h(data)0 485 +y(to)f(disk)g(in)h(a)f(v)-5 b(ariet)n(y)29 b(of)i(w)n(a)n(ys.)43 +b(This)30 b(library)f(also)h(includes)g(co)r(de)g(to)g(implemen)n(t)h +(the)g(CSTP)g(proto)r(col)e(of)h(CAP)h(and)0 599 y(has)c(some)g +(routines)g(for)g(deciphering)g(incomming)g(messages.)0 +755 y(The)f(\034le)h(storage)e(routines)g(are)h(organized)e(in)j(an)f +(inheritance)g(heirarc)n(h)n(y)f(that)h(is)h(ro)r(oted)e(in)i(icalset,) +f(with)h(the)g(deriv)n(ed)0 869 y(class)k(ical\034leset)g(and)h +(icaldirset.)48 b(Ical\034leset)32 b(stores)e(comp)r(onen)n(ts)h(to)h +(a)g(\034le,)h(while)f(icaldirset)e(stores)h(comp)r(onen)n(ts)g(to)0 +983 y(m)n(ultiple)c(\034les,)f(one)g(p)r(er)g(mon)n(th)g(based)g(on)g +(DTST)-7 b(AMP)g(.)28 b(Other)e(storages)e(classess,)h(for)g(storage)g +(to)h(a)g(heap)g(or)f(a)h(m)n(ysql)0 1096 y(database)g(are)h(planned)g +(for)g(the)h(future.)0 1253 y(All)g(of)g(the)g(icalset)f(deriv)n(ed)f +(classes)h(ha)n(v)n(e)f(the)i(same)f(in)n(terface:)0 +1579 y Fc(icaldirset*)39 b(icaldirset_new\(c)o(on)o(st)e(char*)k +(path\);)0 1693 y(void)h(icaldirset_free\()o(ic)o(al)o(dir)o(se)o(t*)37 +b(store\);)0 1806 y(const)k(char*)h(icaldirset_path\()o(ic)o(al)o(dir)o +(se)o(t*)37 b(store\);)0 1920 y(void)42 b(icaldirset_mark\()o(ic)o(al)o +(dir)o(se)o(t*)37 b(store\);)0 2033 y(icalerrorenum)h(icaldirset_commi) +o(t\()o(ica)o(ld)o(ir)o(set)o(*)f(store\);)0 2147 y(icalerrorenum)h +(icaldirset_add_c)o(om)o(pon)o(en)o(t\()o(ica)o(ld)o(ir)o(set)o(*)f +(store,)k(icalcomponent*)d(comp\);)0 2260 y(icalerrorenum)g +(icaldirset_remov)o(e_)o(com)o(po)o(ne)o(nt\()o(ic)o(al)o(dir)o(se)o +(t*)f(store,)k(icalcomponent*)d(comp\);)0 2374 y(int)k +(icaldirset_count_)o(co)o(mp)o(one)o(nt)o(s\()o(ica)o(ld)o(ir)o(set)o +(*)37 b(store,)k(icalcomponent_kin)o(d)c(kind\);)0 2488 +y(icalerrorenum)h(icaldirset_selec)o(t\()o(ica)o(ld)o(ir)o(set)o(*)f +(store,)k(icalcomponent*)d(gauge\);)0 2601 y(void)k(icaldirset_clear)o +(\(i)o(ca)o(ldi)o(rs)o(et)o(*)c(store\);)0 2715 y(icalcomponent*)g +(icaldirset_fetc)o(h\()o(ica)o(ld)o(ir)o(set)o(*)f(store,)k(const)h +(char*)f(uid\);)0 2828 y(int)h(icaldirset_has_ui)o(d\()o(ic)o(ald)o(ir) +o(se)o(t*)37 b(store,)k(const)h(char*)f(uid\);)0 2942 +y(icalcomponent*)d(icaldirset_fetc)o(h_)o(mat)o(ch)o(\(i)o(cal)o(di)o +(rs)o(et*)f(set,)42 b(icalcomponent)c(*c\);)0 3055 y(icalerrorenum)g +(icaldirset_modif)o(y\()o(ica)o(ld)o(ir)o(set)o(*)f(store,)k +(icalcomponent)d(*oldc,)j(icalcomponent)e(*newc\);)0 +3169 y(icalcomponent*)f(icaldirset_get_)o(cu)o(rre)o(nt)o(_c)o(omp)o +(on)o(en)o(t\(i)o(ca)o(ldi)o(rs)o(et)o(*)g(store\);)0 +3283 y(icalcomponent*)g(icaldirset_get_)o(fi)o(rst)o(_c)o(om)o(pon)o +(en)o(t\()o(ica)o(ld)o(irs)o(et)o(*)f(store\);)0 3396 +y(icalcomponent*)h(icaldirset_get_)o(ne)o(xt_)o(co)o(mp)o(one)o(nt)o +(\(i)o(cal)o(di)o(rse)o(t*)f(store\);)0 3664 y Fd(5.4.1)94 +b(Creating)31 b(a)h(new)g(set)0 3874 y Ff(Y)-7 b(ou)28 +b(can)f(create)f(a)i(new)f(set)h(from)f(either)g(the)h(base)f(class)g +(or)g(the)g(direv)n(ed)g(class.)36 b(F)-7 b(rom)27 b(the)h(base)f +(class)g(use)g(one)g(of:)0 4087 y Fc(icalset*)40 b(icalset_new_file)o +(\(co)o(ns)o(t)d(char*)42 b(path\);)0 4201 y(icalset*)e +(icalset_new_dir\()o(con)o(st)d(char*)k(path\);)0 4314 +y(icalset*)f(icalset_new_heap)o(\(vo)o(id)o(\);)0 4428 +y(icalset*)g(icalset_new_mysq)o(l\(c)o(on)o(st)d(char*)k(path\);)0 +4641 y Ff(Y)-7 b(ou)28 b(can)f(also)f(create)h(a)g(new)h(set)f(based)g +(on)h(the)f(deriv)n(ed)g(class,)g(F)-7 b(or)27 b(instance,)g(with)h +(ical\034leset:)0 4854 y Fc(icalfileset*)38 b(icalfileset_new\(c)o(on)o +(st)f(char*)42 b(path\);)0 4967 y(icalfileset*)c(icalfileset_new_o)o +(pe)o(n\(c)o(on)o(st)f(char*)k(path,)h(int)g(flags,)f(mode_t)g(mode\);) +0 5180 y Ff(Icaset_new_\034le)33 b(is)h(iden)n(tical)g(to)g +(ical\034leset_new.)55 b(BOth)34 b(routines)g(will)g(op)r(en)g(an)g +(existing)g(\034le)g(for)g(readinga)e(and)0 5294 y(writing,)24 +b(or)e(create)g(a)h(new)g(\034le)g(if)h(it)f(do)r(es)g(not)g(exist.)35 +b(Ical\034lset_new_op)r(en)22 b(tak)n(es)g(the)h(same)g(argumen)n(ts)f +(as)g(the)i(op)r(en\(\))0 5407 y(system)j(routine)g(and)h(b)r(eha)n(v)n +(es)e(in)i(the)g(same)f(w)n(a)n(y)-7 b(.)p eop +%%Page: 18 18 +18 17 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(18)0 162 y(The)29 b(icalset)g(and)g(ical\034lset)g +(ob)5 b(jects)29 b(are)f(somewhat)h(in)n(terc)n(hangable)e(\025)i(y)n +(ou)f(can)h(use)g(an)g(ical\034leset*)g(as)f(an)h(argumen)n(t)0 +275 y(to)e(an)n(y)g(of)h(the)g(icalset)f(routines.)0 +432 y(The)d(follo)n(wing)f(examples)h(will)g(all)g(use)g(ical\034leset) +g(routines;)g(using)g(the)h(other)e(icalset)h(deriv)n(ed)f(classess)g +(will)h(b)r(e)h(similar.)0 704 y Fd(5.4.2)94 b(A)m(dding,)31 +b(Finding)g(and)h(Remo)m(ving)d(Comp)s(onen)m(ts)0 914 +y Ff(T)-7 b(o)27 b(add)h(comp)r(onen)n(ts)f(to)g(a)g(set,)h(use:)0 +1154 y Fc(icalerrorenum)38 b(icalfileset_add_)o(co)o(mpo)o(ne)o(nt)o +(\(ic)o(al)o(fi)o(les)o(et)o(*)g(cluster,)i(icalcomponent*)d(child\);)0 +1393 y Ff(The)k(\034leset)h(k)n(eeps)e(an)h(inmemory)g(cop)n(y)f(of)h +(the)h(comp)r(onen)n(ts,)i(and)d(this)g(set)h(m)n(ust)f(b)r(e)g +(written)h(bac)n(k)e(to)h(the)h(\034le)0 1507 y(o)r(cassionally)-7 +b(.)35 b(There)27 b(are)f(t)n(w)n(o)h(routines)g(to)g(manage)g(this:)0 +1746 y Fc(void)42 b(icalfileset_mark)o(\(i)o(ca)o(lfi)o(le)o(se)o(t*)37 +b(cluster\);)0 1860 y(icalerrorenum)h(icalfileset_comm)o(it)o(\(ic)o +(al)o(fi)o(les)o(et)o(*)f(cluster\);)0 2099 y Ff(Ical\034leset_mark)d +(indicates)i(that)h(the)g(in-memory)e(comp)r(onen)n(ts)h(ha)n(v)n(e)f +(c)n(hanged.)62 b(Calling)36 b(the)h(_add_comp)r(onen)n(t)0 +2212 y(routine)32 b(will)h(call)f(_mark)f(automatically)-7 +b(,)33 b(but)g(y)n(ou)f(ma)n(y)g(need)h(to)f(call)h(it)g(y)n(ourself)e +(if)i(y)n(ou)f(ha)n(v)n(e)f(made)i(a)f(c)n(hange)f(to)0 +2326 y(an)g(existing)h(comp)r(onen)n(t.)49 b(The)32 b(_commit)f +(routine)g(writes)h(the)g(data)f(base)g(to)h(disk,)g(but)h(only)e(if)h +(it)g(is)g(mark)n(ed.)48 b(The)0 2440 y(_commit)27 b(routine)g(is)h +(called)f(automatically)f(when)i(the)g(ical\034leset)f(is)h(freed.)0 +2596 y(T)-7 b(o)27 b(iterate)g(through)g(the)h(comp)r(onen)n(ts)f(in)h +(a)f(set,)h(use:)0 2835 y Fc(icalcomponent*)38 b(icalfileset_get)o(_f)o +(irs)o(t_)o(co)o(mpo)o(ne)o(nt)o(\(ic)o(al)o(fil)o(es)o(et)o(*)g +(cluster\);)0 2949 y(icalcomponent*)g(icalfileset_get)o(_n)o(ext)o(_c)o +(om)o(pon)o(en)o(t\()o(ica)o(lf)o(ile)o(se)o(t*)f(cluster\);)0 +3063 y(icalcomponent*)h(icalfileset_get)o(_c)o(urr)o(en)o(t_)o(com)o +(po)o(ne)o(nt)f(\(icalfileset*)h(cluster\);)0 3302 y +Ff(These)25 b(routines)g(w)n(ork)g(lik)n(e)g(the)h(corresp)r(onding)e +(routines)h(from)g(icalcomp)r(onen)n(t,)g(except)h(that)g(their)f +(output)i(is)e(\034ltered)0 3415 y(through)j(a)h(gauge.)39 +b(A)29 b(gauge)f(is)h(a)f(test)h(for)g(the)g(prop)r(erties)f(within)h +(a)g(comp)r(onen)n(ts;)g(only)f(comp)r(onen)n(ts)g(that)i(pass)e(the)0 +3529 y(test)g(are)e(returned.)37 b(A)28 b(gauge)e(can)h(b)r(e)h +(constructed)f(from)g(a)g(MINSQL)h(string)f(with:)0 3768 +y Fc(icalgauge*)39 b(icalgauge_new_fro)o(m_)o(sq)o(l\(c)o(ha)o(r*)e +(sql\);)0 4008 y Ff(Then,)28 b(y)n(ou)f(can)g(add)g(the)h(gauge)e(to)i +(the)g(set)f(with)h(:)0 4247 y Fc(icalerrorenum)38 b(icalfileset_sele)o +(ct)o(\(ic)o(al)o(fi)o(les)o(et)o(*)f(store,)42 b(icalgauge*)d +(gauge\);)0 4486 y Ff(Here)27 b(is)h(an)f(example)g(that)h(puts)g(all)f +(of)h(these)f(routines)g(together:)0 4726 y Fc(void)42 +b(test_fileset\(\))174 4953 y(icalfileset)d(*fs;)174 +5066 y(icalcomponent)f(*c;)174 5180 y(int)43 b(i;)174 +5294 y(char)f(*path)g(=)h(test_fileset.ic)o(s;)174 5407 +y(icalgauge)84 b(*g)42 b(=)i(icalgauge_new_f)o(ro)o(m_)o(sql)o(\()p +eop +%%Page: 19 19 +19 18 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(19)349 162 y Fc(SELECT)41 b(*)i(FROM)f(VEVENT)f +(WHERE)g(DTSTART)84 b('20000103T120000Z)o(')37 b(AND)43 +b(DTSTART)d(=)j('20000106T120000Z)o('\))o(;)174 389 y(fs)g(=)g +(icalfileset_new\()o(pat)o(h\))o(;)174 616 y(for)g(\(i)f(=)h(0;)g(i!=)g +(10;)f(i++\))349 730 y(c)h(=)g(make_component\(i)o(\);)37 +b(/*)43 b(Make)e(a)j(new)e(component)e(where)h(DTSTART)g(has)h(month)f +(of)i(i)g(*/)349 843 y(icalfileset_add)o(_c)o(omp)o(on)o(en)o(t\(f)o +(s,)o(c\))o(;)174 1184 y(icalfileset_commi)o(t\()o(fs)o(\);)37 +b(/*)43 b(Write)e(to)i(disk)f(*/)174 1411 y(icalfileset_selec)o(t\()o +(fs)o(,g\))o(;)37 b(/*)43 b(Set)f(the)h(gauge)e(to)i(filter)e +(components)e(*/)174 1638 y(for)k(\(c)f(=)h(icalfileset_get_f)o(ir)o +(st_)o(co)o(mp)o(one)o(nt)o(\(f)o(s\);)392 1752 y(c)g(!=)g(0;)392 +1865 y(c)g(=)g(icalfileset_get_n)o(ex)o(t_c)o(om)o(po)o(nen)o(t\()o(fs) +o(\)\))349 1979 y(struct)e(icaltimetype)d(t)43 b(=)g(icalcomponent_get) +o(_d)o(tst)o(ar)o(t\()o(c\);)349 2206 y(printf\(sn,icalt)o(im)o(e_a)o +(s_)o(ct)o(ime)o(\(t)o(\)\))o(;)174 2433 y(icalfileset_free\()o(fs)o +(\);)0 2706 y Fd(5.4.3)94 b(Other)31 b(routines)0 2916 +y Ff(There)c(are)g(sev)n(eral)e(other)i(routines)g(in)h(the)g(icalset)f +(in)n(terface,)g(but)h(they)g(not)f(fully)h(implemen)n(ted)h(y)n(et.)0 +3207 y Fb(5.5)112 b(Memory)37 b(Managemen)m(t)0 3417 +y Ff(Libical)25 b(relies)f(hea)n(vily)g(on)h(dynamic)g(allo)r(cation)f +(for)h(b)r(oth)h(the)f(core)f(ob)5 b(jects)25 b(and)g(for)f(the)i +(strings)e(used)h(to)g(hold)g(v)-5 b(alues.)0 3531 y(Some)34 +b(of)f(this)h(memory)f(the)h(library)f(caller)g(o)n(wns)g(and)g(m)n +(ust)h(free,)h(and)f(some)f(of)h(the)g(memory)f(is)h(managed)e(b)n(y)i +(the)0 3645 y(library)-7 b(.)36 b(Here)27 b(is)g(a)g(summary)g(of)h +(the)g(memory)e(rules.)0 3884 y Fd(1\))208 4031 y Ff(If)40 +b(the)h(function)g(name)g(has)f(new)g(in)h(it,)j(the)d(caller)e(gets)h +(con)n(trol)f(of)i(the)g(memory)-7 b(.)75 b(\()40 b(suc)n(h)h(as)e +(icalcomp)r(o-)208 4144 y(nen)n(t_new\(\),)27 b(or)g(icalprop)r(ert)n +(y_new_clone\(\))e(\))0 4324 y Fd(2\))208 4471 y Ff(If)j(y)n(ou)g(got)g +(the)h(memory)f(from)g(a)g(routine)g(with)h(new)f(in)h(it,)g(y)n(ou)f +(m)n(ust)h(call)f(the)h(corresp)r(onding)d(*_free)i(routine)208 +4585 y(to)f(free)g(the)h(memory)-7 b(.)36 b(\()28 b(Use)g(icalcomp)r +(onen)n(t_free\(\))e(to)i(free)f(ob)5 b(jects)27 b(created)g(with)h +(icalcomp)r(onen)n(t_new\(\)\))0 4765 y Fd(3\))208 4912 +y Ff(If)j(the)h(function)f(name)g(has)g(add)g(in)g(it,)i(the)f(caller)e +(is)h(transferring)e(con)n(trol)h(of)h(the)h(memory)e(to)h(the)h +(routine.)47 b(\()208 5025 y(icalprop)r(ert)n(y_add_parameter\(\))23 +b(\))0 5205 y Fd(4\))p eop +%%Page: 20 20 +20 19 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(20)208 162 y(If)34 b(the)g(function)g(name)g(has)f +(remo)n(v)n(e)f(in)i(it,)i(the)e(caller)f(passes)f(in)i(a)g(p)r(oin)n +(ter)f(to)g(an)h(ob)5 b(ject)33 b(and)h(after)f(the)h(call)208 +275 y(returns,)e(the)h(caller)e(o)n(wns)g(the)h(ob)5 +b(ject.)50 b(So,)33 b(b)r(efore)f(y)n(ou)f(call)h(icalcomp)r(onen)n +(t_remo)n(v)n(e_prop)r(ert)n(y\(comp,fo)r(o\),)208 389 +y(y)n(ou)26 b(do)i(not)f(o)n(wn)g(fo)r(o)g(and)h(after)f(the)h(call)f +(returns,)g(y)n(ou)g(do.)0 561 y Fd(5\))208 703 y Ff(If)d(the)g +(routine)f(returns)g(a)g(string,)h(libical)g(o)n(wns)f(the)h(memory)f +(and)g(will)h(put)g(it)h(on)e(a)g(ring)g(bu\033er)h(to)g(reclaim)f +(later.)208 817 y(F)-7 b(or)32 b(example,)i(icalcomp)r(onen)n +(t_as_ical_string\(\).)50 b(Y)-7 b(ou'd)33 b(b)r(etter)g(strdup\(\))h +(it)g(if)f(y)n(ou)f(w)n(an)n(t)h(to)g(k)n(eep)f(it,)j(and)208 +931 y(y)n(ou)26 b(don't)i(ha)n(v)n(e)e(to)i(delete)g(it.)0 +1219 y Fb(5.6)112 b(Error)36 b(Handling)0 1429 y Ff(Libical)25 +b(has)g(sev)n(eral)e(error)h(handling)h(mec)n(hanisms)f(for)h(the)h(v) +-5 b(arious)24 b(t)n(yp)r(es)h(of)g(programming,)f(seman)n(tic)h(and)g +(syn)n(tactic)0 1542 y(errors)g(y)n(ou)i(ma)n(y)g(encoun)n(ter.)0 +1811 y Fd(5.6.1)94 b(Return)31 b(v)-5 b(alues)0 2022 +y Ff(Man)n(y)29 b(library)f(routines)g(signal)h(errors)e(through)h +(their)h(return)g(v)-5 b(alues.)42 b(All)30 b(routines)e(that)i(return) +f(a)f(p)r(oin)n(ter,)i(suc)n(h)f(as)0 2135 y(icalcomp)r(onen)n +(t_new\(\),)36 b(will)f(return)f(0)g(\()h(zero)f(\))h(on)f(a)g(fatal)h +(error.)56 b(Some)35 b(routines)f(will)g(return)h(a)f(v)-5 +b(alue)34 b(of)h(en)n(um)0 2249 y(icalerroren)n(um.)0 +2518 y Fd(5.6.2)94 b(icalerrno)0 2728 y Ff(Most)24 b(routines)f(will)i +(set)f(the)g(global)f(error)f(v)-5 b(alue)24 b(icalerrno)f(on)h +(errors.)33 b(This)24 b(v)-5 b(ariable)23 b(is)h(an)g(en)n(umeration;)g +(p)r(ermissible)0 2841 y(v)-5 b(alues)35 b(can)f(b)r(e)h(found)h(in)f +(libical/icalerror.h.)56 b(If)35 b(the)g(routine)g(returns)f(an)h(en)n +(um)g(icalerroren)n(um,)f(then)h(the)h(return)0 2955 +y(v)-5 b(alue)27 b(will)h(b)r(e)f(the)h(same)f(as)f(icalerrno.)35 +b(Y)-7 b(ou)27 b(can)g(use)g(icalerror_strerror\(\))c(to)k(get)g(a)g +(string)f(that)i(describ)r(es)e(the)i(error)0 3224 y +Fd(5.6.3)94 b(X-LIC-ERR)m(OR)30 b(and)j(X-LIC-INV)-11 +b(ALID-COMPONENT)0 3434 y Ff(The)38 b(library)f(handles)g(seman)n(tic)g +(and)h(syn)n(tactic)f(errors)f(in)i(comp)r(onen)n(ts)g(b)n(y)f +(inserting)g(errors)f(prop)r(erties)h(in)n(to)h(the)0 +3548 y(comp)r(onen)n(ts.)k(If)30 b(the)g(parser)d(cannot)i(parse)g +(incoming)g(text)g(\()h(a)f(syn)n(tactic)g(error)e(\))j(or)f(if)h(the)g +(icalrestriction_c)n(hec)n(k\(\))0 3661 y(routine)h(indicates)g(that)h +(the)f(comp)r(onen)n(t)g(do)r(es)g(not)h(meet)f(the)h(requiremen)n(ts)e +(of)h(RF)n(C2446)f(\()h(a)g(seman)n(tic)g(error\))f(the)0 +3775 y(library)i(will)h(insert)g(prop)r(erties)f(of)h(the)h(t)n(yp)r(e) +f(X-LIC-ERR)n(OR)g(to)g(describ)r(e)g(the)g(error.)52 +b(Here)33 b(is)g(an)g(example)g(of)g(the)0 3889 y(error)26 +b(prop)r(ert)n(y:)0 4108 y Fc(X-LIC-ERROR;X-LI)o(C-)o(ERR)o(OR)o(TY)o +(PE=)o(IN)o(VA)o(LID)o(_I)o(TI)o(P)38 b(:Failed)i(iTIP)i(restrictions)d +(for)j(property)e(DTSTART.)0 4221 y(Expected)g(1)j(instances)d(of)j +(the)f(property)e(and)j(got)f(0)0 4441 y Ff(This)35 b(error)f(resulted) +h(from)g(a)g(call)g(to)h(icalrestriction_c)n(hec)n(k\(\),)f(whic)n(h)g +(disco)n(v)n(ered)e(that)j(the)g(comp)r(onen)n(t)f(do)r(es)g(not)0 +4554 y(ha)n(v)n(e)26 b(a)i(DTST)-7 b(AR)g(T)28 b(prop)r(ert)n(y)-7 +b(,)27 b(as)g(required)f(b)n(y)h(RF)n(C2445.)0 4711 y(There)g(are)g(a)g +(few)h(routines)e(to)i(manipulate)f(error)f(prop)r(erties:)0 +4867 y(The)35 b(follo)n(wing)g(data)g(is)g(supp)r(osed)g(to)g(b)r(e)h +(in)g(a)f(table.)60 b(It)36 b(lo)r(oks)e(OK)h(in)h(LyX,)f(but)h(do)r +(es)f(not)g(format)g(prop)r(ertly)g(in)0 4981 y(output.)0 +5137 y(Routine)28 b(Purp)r(ose)f(v)n(oid)g(icalrestriction_c)n(hec)n +(k\(\))e(Chec)n(k)i(a)g(comp)r(onen)n(t)g(against)g(RF)n(C2446)e(and)j +(insert)0 5294 y(error)g(prop)r(erties)g(to)i(indicate)f(non)g +(compliance)g(in)n(t)h(icalcomp)r(onen)n(t_coun)n(t_errors\(\))c +(Return)j(the)h(n)n(um)n(b)r(er)g(of)f(error)0 5407 y(prop)r(erties)p +eop +%%Page: 21 21 +21 20 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32 +b(libical)3149 b Ff(21)0 162 y(in)28 b(a)f(comp)r(onen)n(t)g(v)n(oid)g +(icalcomp)r(onen)n(t_strip_errors\(\))d(Remo)n(v)n(e)i(all)i(error)d +(prop)r(erties)i(in)h(as)0 318 y(comp)r(onen)n(t)f(v)n(oid)g(icalcomp)r +(onen)n(t_con)n(v)n(ert_errors\(\))c(Con)n(v)n(ert)j(some)h(error)e +(prop)r(erties)i(in)n(to)0 475 y(REQUESTS-ST)-7 b(A)g(TUS)29 +b(proprties)e(to)g(indicate)h(the)g(inabilit)n(y)f(to)0 +631 y(pro)r(cess)f(the)i(comp)r(onen)n(t)g(as)e(an)i(iTIP)g(request.)0 +788 y(The)g(t)n(yp)r(es)f(of)h(errors)d(are)i(listed)g(in)h +(icalerror.h.)35 b(They)27 b(are:)0 1027 y Fc(ICAL_XLICERRORTY)o(PE)o +(_CO)o(MP)o(ON)o(ENT)o(PA)o(RS)o(EER)o(RO)o(R)0 1141 +y(ICAL_XLICERRORTY)o(PE)o(_PA)o(RA)o(ME)o(TER)o(VA)o(LU)o(EPA)o(RS)o +(EE)o(RRO)o(R)0 1254 y(ICAL_XLICERRORTY)o(PE)o(_PA)o(RA)o(ME)o(TER)o +(NA)o(ME)o(PAR)o(SE)o(ER)o(ROR)0 1368 y(ICAL_XLICERRORTY)o(PE)o(_PR)o +(OP)o(ER)o(TYP)o(AR)o(SE)o(ERR)o(OR)0 1481 y(ICAL_XLICERRORTY)o(PE)o +(_VA)o(LU)o(EP)o(ARS)o(EE)o(RR)o(OR)0 1595 y(ICAL_XLICERRORTY)o(PE)o +(_UN)o(KV)o(CA)o(LPR)o(OP)0 1709 y(ICAL_XLICERRORTY)o(PE)o(_IN)o(VA)o +(LI)o(DIT)o(IP)0 1948 y Ff(The)46 b(libical)f(parser)f(will)i(generate) +e(the)i(error)d(that)j(end)g(in)g(P)-7 b(ARSEERR)n(OR)47 +b(when)e(it)h(encoun)n(ters)f(garbage)e(in)0 2062 y(the)d(input)g +(steam.)72 b(ICAL_XLICERR)n(OR)-7 b(TYPE_INV)e(ALIDITIP)42 +b(is)d(inserted)g(b)n(y)g(icalrestriction_c)n(hec)n(k\(\),)h(and)0 +2175 y(ICAL_XLICERR)n(OR)-7 b(TYPE_UNKV)n(CALPR)n(OP)21 +b(is)e(generated)f(b)n(y)i(icalv)n(cal_con)n(v)n(ert\(\))c(when)k(it)g +(encoun)n(ters)f(a)g(vCal)0 2289 y(prop)r(ert)n(y)26 +b(that)i(it)g(cannot)f(con)n(v)n(ert)f(or)h(do)r(es)g(not)h(kno)n(w)f +(ab)r(out.)0 2445 y(Icalcomp)r(onen)n(t_con)n(v)n(ert_errors\(\))33 +b(con)n(v)n(erts)k(some)g(of)i(the)f(error)f(prop)r(erties)g(in)h(a)g +(comp)r(onen)n(t)g(in)n(to)g(REQUEST-)0 2559 y(ST)-7 +b(A)g(TUS)29 b(prop)r(erties)e(that)h(indicate)g(a)g(failure.)38 +b(As)28 b(of)g(libical)g(v)n(ersion0.18,)e(this)i(routine)g(only)f(con) +n(v)n(ert)g(*P)-7 b(ARSEER-)0 2672 y(R)n(OR)29 b(errors)d(and)j(it)h +(alw)n(a)n(ys)d(generates)h(a)g(3.x)h(\()g(failure)g(\))g(co)r(de.)42 +b(This)29 b(mak)n(es)f(it)h(more)f(of)h(a)g(go)r(o)r(d)g(idea)f(than)h +(a)g(really)0 2786 y(useful)f(bit)g(of)g(co)r(de.)0 3077 +y Fb(5.7)112 b(Naming)36 b(Standard)0 3288 y Ff(Structures)26 +b(that)i(y)n(ou)e(access)f(with)j(the)f("struct")f(k)n(eyw)n(ord,)f +(suc)n(h)h(as)h("struct)f(icaltimet)n(yp)r(e")g(are)g(things)h(that)g +(y)n(ou)f(are)0 3401 y(allo)n(w)n(ed)g(to)i(see)f(inside)g(and)h(p)r +(ok)n(e)f(at.)0 3558 y(Structures)33 b(that)h(y)n(ou)e(access)g(though) +i(a)f(t)n(yp)r(edef,)i(suc)n(h)e(as)g("icalcomp)r(onen)n(t")e(are)i +(things)g(where)g(all)g(of)h(the)f(data)g(is)0 3671 y(hidden.)0 +3828 y(Comp)r(onen)n(t)28 b(names)g(that)h(start)f(with)h("V")f(are)f +(part)h(of)h(RF)n(C)f(2445)f(or)g(another)h(iCal)g(standard.)38 +b(Comp)r(onen)n(t)29 b(names)0 3941 y(that)h(start)f(with)i("X")e(are)g +(also)g(part)g(of)h(the)g(sp)r(ec,)g(but)h(they)f(are)f(not)h(actually) +f(comp)r(onen)n(ts)g(in)h(the)g(sp)r(ec.)44 b(Ho)n(w)n(ev)n(er,)0 +4055 y(they)34 b(lo)r(ok)f(and)g(act)h(lik)n(e)f(comp)r(onen)n(ts,)h +(so)f(they)h(are)f(comp)r(onen)n(ts)g(in)h(libical.)55 +b(Names)33 b(that)h(start)f(with)h("XLIC")f(or)0 4168 +y("X-LIC")26 b(are)h(not)h(part)f(of)g(an)n(y)g(iCal)g(sp)r(ec.)37 +b(They)27 b(are)g(used)h(in)n(ternally)e(b)n(y)i(libical.)0 +4325 y(En)n(ums)34 b(that)h(iden)n(tify)f(a)g(comp)r(onen)n(t,)h(prop)r +(ert)n(y)-7 b(,)35 b(v)-5 b(alue)33 b(or)h(parameter)e(end)i(with)h +("_COMPONENT,")e("_PR)n(OP-)0 4438 y(ER)-7 b(TY,")28 +b("_V)-9 b(ALUE,")27 b(or)g("_P)-7 b(ARAMETER"s)0 4595 +y(En)n(ums)31 b(that)f(iden)n(tify)h(a)f(parameter)f(v)-5 +b(alue)30 b(ha)n(v)n(e)f(the)i(name)f(of)h(the)f(parameter)f(as)h(the)h +(second)e(w)n(ord.)45 b(F)-7 b(or)29 b(instance:)0 4708 +y(ICAL_R)n(OLE_REQP)-7 b(AR)g(TICIP)g(ANT)29 b(or)d(ICAL_P)-7 +b(AR)g(TST)g(A)g(T_A)n(CCEPTED.)0 4865 y(The)28 b(en)n(ums)f(for)g(the) +h(parts)f(of)g(a)g(recurarance)e(rule)j(and)f(request)g(statuses)g(are) +f(irregular.)p eop +%%Page: 22 22 +22 21 bop 0 -167 3900 5 v 0 -200 a Fd(6.)73 b(Hac)m(ks)33 +b(and)f(Bugs)2997 b Ff(22)0 162 y Fe(6)131 b(Hac)l(ks)45 +b(and)e(Bugs)0 400 y Ff(There)24 b(are)f(a)g(lot)h(of)g(hac)n(ks)f(in)i +(the)f(library)f(\025)h(bits)g(of)g(co)r(de)g(that)g(I)g(am)g(not)g +(proud)g(of)g(and)g(should)g(probably)f(b)r(e)h(c)n(hanged.)0 +514 y(These)j(are)g(mark)n(ed)f(with)i(the)g(commen)n(t)g(string)e("HA) +n(CK.")p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/libkcal/libical/doc/UsingLibical.txt b/libkcal/libical/doc/UsingLibical.txt new file mode 100644 index 000000000..6b203d43d --- /dev/null +++ b/libkcal/libical/doc/UsingLibical.txt @@ -0,0 +1,1384 @@ + + +Using Libical + +Eric Busboom (eric@softwarestudio.org) + +January 2001 + + + +1 Introduction + +Libical is an Open Source implementation of the iCalendar protocols +and protocol data units. The iCalendar specification describes how +calendar clients can communicate with calendar servers so users can +store their calendar data and arrange meetings with other users. + +Libical implements RFC2445, RFC2446 and some of RFC2447 and the CAP +draft. + +This documentation assumes that you are familiar with the iCalendar +standards RFC2445 and RFC2446. these specifications are online on +the CALSCH webpage at: + +http://www.imc.org/ietf-calendar/ + +1.1 The libical project + +This code is under active development. If you would like to contribute +to the project, you can contact me, Eric Busboom, at eric@softwarestudio.org. +The project has a webpage at + +http://softwarestudio.org/libical/index.html + +and a mailing list that you can join by sending the following mail: + +To: minimalist@softwarestudio.org + +Subject: subscribe libical + +1.2 License + +The code and datafiles in this distribution are licensed under the +Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html +for a copy of the license. Alternately, you may use libical under +the terms of the GNU Library General Public License. See http://www.fsf.org/copyleft/lesser.html +for a copy of the LGPL. + +This dual license ensures that the library can be incorporated into +both proprietary code and GPL'd programs, and will benefit from improvements +made by programmers in both realms. I will only accept changes into +my version of the library if they are similarly dual-licensed. + +1.3 Example Code + +A lot of the documentation for this library is in the form of example +code. These examples are in the "examples" directory of the distribution. +Also look in "src/test" for additional annotated examples. + +2 Building the Library + +Libical uses autoconf to generate makefiles. It should built with no +adjustments on Linux, FreeBSD and Solaris under gcc. Some version +have been successfully been build on MacOS, Solaris, UnixWare, And +Tru64 UNIX without gcc, but you may run into problems with a particular +later version. + +For a more complete guide to building the library, see the README file +in the distribution. + +3 Structure + +The iCal calendar model is based on four types of objects: components, +properties, values and parameters. + +Properties are the fundamental unit of information in iCal, and they +work a bit like a hash entry, with a constant key and a variable value. +Properties may also have modifiers, called parameters. In the iCal +content line + +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com + +The property name is "ORGANIZER," the value of the property is "mrbig@host.com" +and the "ROLE" parameter specifies that Mr Big is the chair of the +meetings associated with this property. + +Components are groups of properties that represent the core objects +of a calendar system, such as events or timezones. Components are +delimited by "BEGIN" and "END" tags. + +When a component is sent across a network, if it is un-encrypted, it +will look something like: + +BEGIN:VCALENDAR + +METHOD:REQUEST + +PRODID: -//hacksw/handcal//NONSGML v1.0//EN + +BEGIN:VEVENT + +DTSTAMP:19980309T231000Z + +UID:guid-1.host1.com + +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com + +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: + + MAILTO:employee-A@host.com + +DESCRIPTION:Project XYZ Review Meeting + +CATEGORIES:MEETING + +CLASS:PUBLIC + +CREATED:19980309T130000Z + +SUMMARY:XYZ Project Review + +DTSTART;TZID=US-Eastern:19980312T083000 + +DTEND;TZID=US-Eastern:19980312T093000 + +LOCATION:1CP Conference Room 4350 + +END:VEVENT + +END:VCALENDAR + +Note that components can be nested; this example has both a VCALENDAR +and a VEVENT component, one nested inside the other. + +3.1 Core iCal classes + +Libical is an object-based, data-oriented library. Nearly all of the +routines in the library are associated with an opaque data types and +perform some operation on that data type. Although the library does +not actually have classes, we will use those terms since the behavior +of these associations of data and routines is very similar to a class. + +3.1.1 Properties + +Properties are represented with the icalproperty class and its many +"derived" classes with on "derived" class per property type in RFC2445. +Again, there is no actual inheritance relations, but there are clusters +of routines that make this term useful. A property is a container +for a single value and a set of parameters. + +3.1.2 Components + +In libical, components are represented with the icalcomponent class. +Icalcomponent is a container for a set of other components and properties. + +3.1.3 Values + +Values are represented in a similar way to properties; a base class +and many "derived " classes. A value is essentially a abstract handle +on a single fundamental type, a structure or a union. + +3.1.4 Parameters + +Parameters are represetned in a similar way to properties, except that +they contain only one value + +3.2 Other elements of libical + +In addition to the core iCal classes, libical has many other types, +structures, classes that aid in creating and using iCal components. + +3.2.1 Enumerations and types + +Libical is strongly typed, soo every component, property, parameter, +and value type has an enumeration, and some have an associated structure +or union. + +3.2.2 The parser + +The libical parser offers a variety of ways to convert RFC2445 text +into a libical iinsteral component structure. the parser can parse +blocks of text as a string, or it can parse lin-by-line. + +3.2.3 Error objects + +Libical has a substantial error reporting system for both programming +errors and component usage errors. + +3.2.4 Memory Management + +Since many of libicals interfaces return strings, the library has its +own memory management system to elimiate the need to free every string +returned from the libraru. + +3.2.5 Storage classes + +The library also offers several classes to store components to flies, +memory or databases. + +4 Differences From RFCs + +Libical has been designed to follow the standards as closely as possible, +so that the key objects in the standards are also key objects in the +library. However, there are a few areas where the specifications are +(arguably) irregular, and following them exactly would result in an +unfriendly interface. These deviations make libical easier to use +by maintaining a self-similar interface. + +4.1 Pseudo Components + +Libical defines components for groups of properties that look and act +like components, but are not defined as components in the specification. +XDAYLIGHT and XSTANDARD are notable examples. These pseudo components +group properties within the VTIMEZONE components. For instanace, the +timezone properties associated with daylight savings time starts with +"BEGIN:DAYLIGHT" and ends with "END:DAYLIGHT, just like other components, +but is not defined as a component in RFC2445. ( See RFC2445, page +61 ) In Libical,this grouping is represented by the XDAYLIGHT component. +Standard iCAL components all start with the letter "V," while pseudo +components start with"X." + +There are also pseudo components that are conceptually derived classes +of VALARM. RFC2446 defines what properties may be included in each +component, and for VALARM, the set of properties it may have depends +on the value of the ACTION property. + +For instance, if a VALARM component has an ACTION property with the +value of "AUDIO," the component must also have an "ATTACH" property. +However, if the ACTION value is "DISPLAY," the component must have +a DESCRIPTION property. + +To handle these various, complex restrictions, libical has pseudo components +for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and +XPROCEDUREALARM. + +4.2 Combined Values + +Many values can take more than one type. TRIGGER, for instance, can +have a value type of with DURATION or of DATE-TIME. These multiple +types make it difficult to create routines to return the value associated +with a property. + +It is natural to have interfaces that would return the value of a property, +but it is cumbersome for a single routine to return multiple types. +So, in libical, properties that can have multiple types are given +a single type that is the union of their RFC2445 types. For instance, +in libical, the value of the TRIGGER property resolves to struct icaltriggertype. +This type is a union of a DURATION and a DATE-TIME. + +4.3 Multi-Valued Properties + +Some properties, such as CATEGORIES have only one value type, but each +CATEGORIES property can have multiple value instances. This also results +in a cumbersome interface -- CATEGORIES accessors would have to return +a list while all other accessors returned a single value. In libical, +all properties have a single value, and multi-valued properties are +broken down into multiple single valued properties during parsing. +That is, an input line like, + +CATEGORIES: work, home + +becomes in libical's internal representation + +CATEGORIES: work + +CATEGORIES: home + +Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY +) to exist as both a multi-values property and as multiple single +value properties, while others ( like CATEGORIES ) can only exist +as single multi-valued properties. This makes the internal representation +for CATEGORIES illegal. However when you convert a component to a +string, the library will collect all of the CATEGORIES properties +into one. + +5 Using libical + +5.1 Creating Components + +There are three ways to create components in Libical: creating individual +objects and assembling them, building entire objects in massive vaargs +calls, and parsing a text file containing iCalendar data. + +5.1.1 Constructor Interfaces + +Using constructor interfaces, you create each of the objects separately +and then assemble them in to components: + +icalcomponent *event; + +icalproperty *prop; + +icalparameter *param; + +struct icaltimetype atime; + +event = icalcomponent_new(ICAL_VEVENT_COMPONENT); + +prop = icalproperty_new_dtstamp(atime) ; + +icalcomponent_add_property(event, prop); + +prop = icalproperty_new_uid(''guid-1.host1.com'') ); + +icalcomponent_add_property(event,prop); + +prop=icalproperty_new_organizer(''mrbig@host.com''); + +param = icalparameter_new_role(ICAL_ROLE_CHAIR) + +icalproperty_add_parameter(prop, param); + +icalcomponent_add_property(event,prop); + +Notice that libical uses a semi-object-oriented style of interface. +Most things you work with are objects, that are instantiated with +a constructor that has "new" in the name. Also note that, other than +the object reference, most structure data is passed in to libical +routines by value. Libical has some complex but very regular memory +handling rules. These are detailed in section [sec:memory]. + +If any of the constructors fail, they will return 0. If you try to +insert 0 into a property or component, or use a zero-valued object +reference, libical will either silently ignore the error or will abort +with an error message. This behavior is controlled by a compile time +flag (ICAL_ERRORS_ARE_FATAL), and will abort by default. + +5.1.2 vaargs Constructors + +There is another way to create complex components, which is arguably +more elegant, if you are not horrified by varargs. The varargs constructor +interface allows you to create intricate components in a single block +of code. Here is the previous examples in the vaargs style. + + calendar = + + icalcomponent_vanew( + + ICAL_VCALENDAR_COMPONENT, + + icalproperty_new_version(''2.0''), + + icalproperty_new_prodid( + + ''-//RDU Software//NONSGML HandCal//EN''), + + icalcomponent_vanew( + + ICAL_VEVENT_COMPONENT, + + icalproperty_new_dtstamp(atime), + + icalproperty_new_uid(''guid-1.host1.com''), + + icalproperty_vanew_organizer( + + ''mrbig@host.com''), + + icalparameter_new_role(ICAL_ROLE_CHAIR), + + 0 + + ), + + icalproperty_vanew_attendee( + + ''employee-A@host.com'', + + icalparameter_new_role( + + ICAL_ROLE_REQPARTICIPANT), + + icalparameter_new_rsvp(1), + + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), + + 0 + + ), + + icalproperty_new_location( + + "1CP Conference Room 4350"), + + 0 + + ), + + 0 + + ); + +This form is similar to the constructor form , except that the constructors +have "vanew" instead of "new" in the name. The arguments are similar +too, except that the component constructor can have a list of properties, +and the property constructor can have a list of parameters. Be sure +to terminate every list with a '0', or your code will crash, if you +are lucky. + +5.1.3 Parsing Text Files + +The final way to create components will probably be the most common; +you can create components from RFC2445 compliant text. If you have +the string in memory, use + +icalcomponent* icalparser_parse_string(char* str); + +If the string contains only one component, the parser will return the +component in libical form. If the string contains multiple components, +the multiple components will be returned as the children of an ICAL_XROOT_COMPONENT +component. + +Parsing a whole string may seem wasteful if you want to pull a large +component off of the network or from a file; you may prefer to parse +the component line by line. This is possible too by using: + +icalparser* icalparser_new(); + +void icalparser_free(icalparser* parser); + +icalparser_get_line(parser,read_stream); + +icalparser_add_line(parser,line); + +icalparser_set_gen_data(parser,stream) + +These routines will construct a parser object to which you can add +lines of input and retrieve any components that the parser creates +from the input. These routines work by specifing an adaptor routine +to get string data from a source. For an example: + +char* read_stream(char *s, size_t size, void *d) + +{ + + char *c = fgets(s,size, (FILE*)d); + + return c; + +} + +main() { + + char* line; + + icalcomponent *c; + + icalparser *parser = icalparser_new(); + + FILE* stream = fopen(argv[1],"r"); + + icalparser_set_gen_data(parser,stream); + + do{ + + line = icalparser_get_line(parser,read_stream); + + c = icalparser_add_line(parser,line); + + if (c != 0){ + + printf("%s",icalcomponent_as_ical_string(c)); + + icalparser_claim(parser); + + printf("\n---------------\n"); + + icalcomponent_free(c); + + } + + } while ( line != 0); + +} + +The parser object parameterizes the routine used to get input lines +with icalparser_set_gen_data() and icalparser_get_line(). In this +example, the routine read_stream() will fetch the next line from a +stream, with the stream passed in as the void* parameter d. The parser +calls read_stream() from icalparser_get_line(), but it also needs +to know what stream to use. This is set by the call to icalparser_set_gen_data(). +By using a different routine for read_stream or passing in different +data with icalparser_set_gen_data, you can connect to any data source. + +Using the same mechanism, other implementations could read from memory +buffers, sockets or other interfaces. + +Since the example code is a very common way to use the parser, there +is a convenience routine; + +icalcomponent* icalparser_parse(icalparser *parser, + + char* (*line_gen_func)(char *s, size_t size, void* +d)) + +To use this routine, you still must construct the parser object and +pass in a reference to a line reading routine. If the parser can create +a single component from the input, it will return a pointer to the +newly constructed component. If the parser can construct multiple +components from the input, it will return a reference to an XROOT +component ( of type ICAL_XROOT_COMPONENT.) This XROOT component will +hold all of the components constructed from the input as children. + +5.2 Accessing Components + +Given a reference to a component, you probably will want to access +the properties, parameters and values inside. Libical interfaces let +you find sub-component, add and remove sub-components, and do the +same three operations on properties. + +5.2.1 Finding Components + +To find a sub-component of a component, use: + +icalcomponent* icalcomponent_get_first_component( + + icalcomponent* component, + + icalcomponent_kind kind); + +This routine will return a reference to the first component of the +type 'kind.' The key kind values, listed in icalenums.h are: + +ICAL_ANY_COMPONENT + +ICAL_VEVENT_COMPONENT + +ICAL_VTODO_COMPONENT + +ICAL_VJOURNAL_COMPONENT + +ICAL_VCALENDAR_COMPONENT + +ICAL_VFREEBUSY_COMPONENT + +ICAL_VALARM_COMPONENT + +These are only the most common components; there are many more listed +in icalenums.h. + +As you might guess, if there is more than one subcomponent of the type +you have chosen, this routine will return only the first. to get at +the others, you need to iterate through the component. + +5.2.2 Iterating Through Components + +Iteration requires a second routine to get the next subcomponent after +the first: + +icalcomponent* icalcomponent_get_next_component( + + icalcomponent* component, + + icalcomponent_kind kind); + +With the 'first' and 'next' routines, you can create a for loop to +iterate through all of a components subcomponents + + for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); + + c != 0; + + c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) + +{ + + do_something(c); + +} + +This code bit wil iterate through all of the subcomponents in 'comp' +but you can select a specific type of component by changing ICAL_ANY_COMPONENT +to another component type. + +5.2.3 Using Component Iterators + +The iteration model in the previous section requires the component +to keep the state of the iteration. So, you could not use this model +to perform a sorting operations, since you'd need two iterators and +there is only space for one. If you ever call icalcomponent_get_first_component() +when an iteration is in progress, the pointer will be reset to the +beginning. + +To solve this problem, there are also external iterators for components. +The routines associated with these external iterators are: + +icalcompiter icalcomponent_begin_component(icalcomponent* component, +icalcomponent_kind kind); + +icalcompiter icalcomponent_end_component(icalcomponent* component, +icalcomponent_kind kind); + +icalcomponent* icalcompiter_next(icalcompiter* i); + +icalcomponent* icalcompiter_prior(icalcompiter* i); + +icalcomponent* icalcompiter_deref(icalcompiter* i); + +The _begin_() and _end_() routines return a new iterator that points +to the beginning and ending of the list of subcomponent for the given +component, and the kind argument works like the kind argument for +internal iterators. + +After creating an iterators, use _next_() and _prior_() to step forward +and backward through the list and get the component that the iterator +points to, and use _deref() to return the component that the iterator +points to without moving the iterator. All routines will return 0 +when they move to point off the end of the list. + +Here is an example of a loop using these routines: + +for( + + i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT); + + icalcompiter_deref(&i)!= 0; + + icalcompiter_next(&i) + +) { + + icalcomponent *this = icalcompiter_deref(&i); + +} + +5.2.4 Removing Components + +Removing an element from a list while iterating through the list with +the internal iterators can cause problems, since you will probably +be removing the element that the internal iterator points to. The +_remove() routine will keep the iterator valid by moving it to the +next component, but in a normal loop, this will result in two advances +per iteration, and you will remove only every other component. To +avoid the problem, you will need to step the iterator ahead of the +element you are going to remove, like this: + +for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); + + c != 0; + + c = next + +{ + + next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); + + icalcomponent_remove_component(parent_comp,c); + +} + +Another way to remove components is to rely on the side effect of icalcomponent_remove_component: +if component iterator in the parent component is pointing to the child +that will be removed, it will move the iterator to the component after +the child. The following code will exploit this behavior: + +icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT); + +while((c=icalcomponent_get_current_component(c)) != 0 ){ + + if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){ + + icalcomponent_remove_component(parent_comp,inner); + + } else { + + icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT); + + } + +} + +5.2.5 Working with properties and parameters + +Finding, iterating and removing properties works the same as it does +for components, using the property-specific or parameter-specific +interfaces: + +icalproperty* icalcomponent_get_first_property( + + icalcomponent* component, + + icalproperty_kind kind); + +icalproperty* icalcomponent_get_next_property( + + icalcomponent* component, + + icalproperty_kind kind); + +void icalcomponent_add_property( + + icalcomponent* component, + + icalproperty* property); + +void icalcomponent_remove_property( + + icalcomponent* component, + + icalproperty* property); + +For parameters: + +icalparameter* icalproperty_get_first_parameter( + + icalproperty* prop, + + icalparameter_kind kind); + +icalparameter* icalproperty_get_next_parameter( + + icalproperty* prop, + + icalparameter_kind kind); + +void icalproperty_add_parameter( + + icalproperty* prop, + + icalparameter* parameter); + +void icalproperty_remove_parameter( + + icalproperty* prop, + + icalparameter_kind kind); + +Note that since there should be only one parameter of each type in +a property, you will rarely need to use icalparameter_get_nect_paameter. + +5.2.6 Working with values + +Values are typically part of a property, although they can exist on +their own. You can manipulate them either as part of the property +or independently. + +The most common way to work with values to is to manipulate them from +they properties that contain them. This involves fewer routine calls +and intermediate variables than working with them independently, and +it is type-safe. + +For each property, there are a _get_ and a _set_ routine that access +the internal value. For instanace, for the UID property, the routines +are: + +void icalproperty_set_uid(icalproperty* prop, const char* v) + +const char* icalproperty_get_uid(icalproperty* prop) + +For multi-valued properties, like ATTACH, the value type is usually +a struct or union that holds both possible types. + +If you want to work with the underlying value object, you can get and +set it with: + +icalvalue* icalproperty_get_value (icalproperty* prop) + +void icalproperty_set_value(icalproperty* prop, icalvalue* value); + +Icalproperty_get_value() will return a reference that you can manipulate +with other icalvalue routines. Most of the time, you will have to +know what the type of the value is. For instance, if you know that +the value is a DATETIME type, you can manipulate it with: + +struct icaltimetype icalvalue_get_datetime(icalvalue* value); + +void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); + +When working with an extension property or value (and X-PROPERTY or +a property that has the parameter VALUE=x-name ) the value type is +always a string. To get and set the value, use: + +void icalproperty_set_x(icalproperty* prop, char* v); + +char* icalproperty_get_x(icalproperty* prop); + +All X properties have the type of ICAL_X_PROPERTY, so you will need +these routines to get and set the name of the property: + +char* icalproperty_get_x_name(icalproperty* prop) + +void icalproperty_set_x_name(icalproperty* prop, char* name); + +5.2.7 Checking Component Validity + +RFC 2446 defines rules for what properties must exist in a component +to be used for transferring scheduling data. Most of these rules relate +to the existence of properties relative to the METHOD property, which +declares what operation a remote receiver should use to process a +component. For instance, if the METHOD is REQUEST and the component +is a VEVENT, the sender is probably asking the receiver to join in +a meeting. In this case, RFC2446 says that the component must specify +a start time (DTSTART) and list the receiver as an attendee (ATTENDEE). + +Libical can check these restrictions with the routine: + +int icalrestriction_check(icalcomponent* comp); + +This routine returns 0 if the component does not pass RFC2446 restrictions, +or if the component is malformed. The component you pass in must be +a VCALENDAR, with one or more children, like the examples in RFC2446. + +When this routine runs, it will insert new properties into the component +to indicate any errors it finds. See section 6.5.3, X-LIC-ERROR for +more information about these error properties. + +5.2.8 Converting Components to Text + +To create an RFC2445 compliant text representation of an object, use +one of the *_as_ical_string() routines: + +char* icalcomponent_as_ical_string (icalcomponent* component) + +char* icalproperty_as_ical_string (icalproperty* property) + +char* icalparameter_as_ical_string (icalparameter* parameter) + +char* icalvalue_as_ical_string (icalvalue* value) + +In most cases, you will only use icalcomponent_as_ical_string (), since +it will cascade and convert all of the parameters, properties and +values that are attached to the root component. + +Icalproperty_as_ical_string() will terminate each line with the RFC2445 +specified line terminator "\\n" However, if you compile with the symbol +ICAL_UNIX_NEWLINE undefined, ( it is defined by default) it will terminate +lines with "\\n\\r" + +Remember that the string returned by these routines is owned by the +library, and will eventually be re-written. You should copy it if +you want to preserve it. + +5.3 Time + +5.3.1 Time structure + +LIbical defines it's own time structure for storing all dates and times. +It would have been nice to re-use the C library's struct tm, but that +structure does not differentiate between dates and times, and between +local time and UTC. The libical structure is: + +struct icaltimetype { + + int year; + + int month; + + int day; + + int hour; + + int minute; + + int second; + + int is_utc; /* 1-> time is in UTC timezone */ + + int is_date; /* 1 -> interpret this as date. */ }; + +The year, month, day, hour, minute and second fields hold the broken-out +time values. The is_utc field distinguishes between times in UTC and +a local time zone. The is_date field indicates if the time should +be interpreted only as a date. If it is a date, the hour, minute and +second fields are assumed to be zero, regardless of their actual vaules. + +5.3.2 Creating time structures + +There are several ways to create a new icaltimetype structure: + +struct icaltimetype icaltime_from_string(const char* str); + +struct icaltimetype icaltime_from_timet(time_t v, int is_date); + +struct icaltimetype icaltime_from_int(int v, int is_date, int is_utc); + +Icaltime_from_string takes any RFC2445 compliant time string: + +struct icaltimetype tt = icaltime_from_string("19970101T103000"); + +Icaltime_from_timet takes a timet value, representing seconds past +the POSIX epoch, and a flag to indicate if the time is a date. Dates +have an identical structure to a time, but the time portion ( hours, +minuts and seconds ) is always 00:00:00. Dates act differently in +sorting an comparision, and they have a different string representation +in RFC2445. + +The icaltime_from_int is like icaltime_from_timet, but with an arbitrary +epoch. This routine was a mistake and is deprecated. + +5.3.3 Time manipulating routines + +The null time value is used to indicate that the data in the structure +is not a valid time. + +struct icaltimetype icaltime_null_time(void); + +int icaltime_is_null_time(struct icaltimetype t); + +It is sensible for the broken-out time fields to contain values that +are not permitted in an ISO compliant time string. For instance, the +seconds field can hold values greater than 59, and the hours field +can hold values larger than 24. The excessive values will be rolled +over into the next larger field when the structure is normalized. + +struct icaltimetype icaltime_normalize(struct icaltimetype t); + +Normalizing allows you to do arithmetic operations on time values. + +struct icaltimetype tt = icaltime_from_string("19970101T103000"); + +tt.days +=3 + +tt.second += 70; + +tt = icaltime_normalize(tt); + +There are several routines to get the day of the week or month, etc, +from a time structure. + +short icaltime_day_of_year(struct icaltimetype t); + +struct icaltimetype icaltime_from_day_of_year(short doy, short year); + +short icaltime_day_of_week(struct icaltimetype t); + +short icaltime_start_doy_of_week(struct icaltimetype t); + +short icaltime_week_number(short day_of_month, short month, short year); + +struct icaltimetype icaltime_from_week_number(short week_number, short +year); + +short icaltime_days_in_month(short month,short year); + +Two routines convert time structures to and from the number of seconds +since the POSIX epoch. The is_date field indicates whether or not +the hour, minute and second fields should be used in the conversion. + +struct icaltimetype icaltime_from_timet(time_t v, int is_date); + +time_t icaltime_as_timet(struct icaltimetype); + +The compare routine works exactly like strcmp, but on time structures. + +int icaltime_compare(struct icaltimetype a,struct icaltimetype b); + +The following routines convert between UTC and a named timezone. The +tzid field must be a timezone name from the Olsen database, such as +"America/Los_Angeles." + +The utc_offset routine returns the offset of the named time zone from +UTC, in seconds. + +The tt parameter in the following routines indicates the date on which +the conversion should be made. The tt parameter is necessary because +timezones have many different rules for when daylight savings time +is used, and these rules can change over time. So, for a single timezone +one year may have daylight savings time on March 15, but for other +years March 15 may be standard time, and some years may have standard +time all year. + +int icaltime_utc_offset(struct icaltimetype tt, char* tzid); + +int icaltime_local_utc_offset(); + +struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid); + +struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid); + +struct icaltimetype icaltime_as_local(struct icaltimetype tt); + +5.4 Storing Objects + +The libical distribution includes a separate library, libicalss, that +allows you to store iCal component data to disk in a variety of ways. +This library also includes code to implement the CSTP protocol of +CAP and has some routines for deciphering incomming messages. + +The file storage routines are organized in an inheritance heirarchy +that is rooted in icalset, with the derived class icalfileset and +icaldirset. Icalfileset stores components to a file, while icaldirset +stores components to multiple files, one per month based on DTSTAMP. +Other storages classess, for storage to a heap or a mysql database +are planned for the future. + +All of the icalset derived classes have the same interface: + +icaldirset* icaldirset_new(const char* path); + +void icaldirset_free(icaldirset* store); + +const char* icaldirset_path(icaldirset* store); + +void icaldirset_mark(icaldirset* store); + +icalerrorenum icaldirset_commit(icaldirset* store); + +icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent* +comp); + +icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent* +comp); + +int icaldirset_count_components(icaldirset* store, icalcomponent_kind +kind); + +icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge); + +void icaldirset_clear(icaldirset* store); + +icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid); + +int icaldirset_has_uid(icaldirset* store, const char* uid); + +icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent +*c); + +icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc, +icalcomponent *newc); + +icalcomponent* icaldirset_get_current_component(icaldirset* store); + +icalcomponent* icaldirset_get_first_component(icaldirset* store); + +icalcomponent* icaldirset_get_next_component(icaldirset* store); + +5.4.1 Creating a new set + +You can create a new set from either the base class or the direved +class. From the base class use one of: + +icalset* icalset_new_file(const char* path); + +icalset* icalset_new_dir(const char* path); + +icalset* icalset_new_heap(void); + +icalset* icalset_new_mysql(const char* path); + +You can also create a new set based on the derived class, For instance, +with icalfileset: + +icalfileset* icalfileset_new(const char* path); + +icalfileset* icalfileset_new_open(const char* path, int flags, mode_t +mode); + +Icaset_new_file is identical to icalfileset_new. BOth routines will +open an existing file for readinga and writing, or create a new file +if it does not exist. Icalfilset_new_open takes the same arguments +as the open() system routine and behaves in the same way. + +The icalset and icalfilset objects are somewhat interchangable -- you +can use an icalfileset* as an argument to any of the icalset routines. + +The following examples will all use icalfileset routines; using the +other icalset derived classess will be similar. + +5.4.2 Adding, Finding and Removing Components + +To add components to a set, use: + +icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent* +child); + +The fileset keeps an inmemory copy of the components, and this set +must be written back to the file ocassionally. There are two routines +to manage this: + +void icalfileset_mark(icalfileset* cluster); + +icalerrorenum icalfileset_commit(icalfileset* cluster); + +Icalfileset_mark indicates that the in-memory components have changed. +Calling the _add_component routine will call _mark automatically, +but you may need to call it yourself if you have made a change to +an existing component. The _commit routine writes the data base to +disk, but only if it is marked. The _commit routine is called automatically +when the icalfileset is freed. + +To iterate through the components in a set, use: + +icalcomponent* icalfileset_get_first_component(icalfileset* cluster); + +icalcomponent* icalfileset_get_next_component(icalfileset* cluster); + +icalcomponent* icalfileset_get_current_component (icalfileset* cluster); + +These routines work like the corresponding routines from icalcomponent, +except that their output is filtered through a gauge. A gauge is a +test for the properties within a components; only components that +pass the test are returned. A gauge can be constructed from a MINSQL +string with: + +icalgauge* icalgauge_new_from_sql(char* sql); + +Then, you can add the gauge to the set with : + +icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge); + +Here is an example that puts all of these routines together: + +void test_fileset() + +{ + + icalfileset *fs; + + icalcomponent *c; + + int i; + + char *path = "test_fileset.ics"; + + icalgauge *g = icalgauge_new_from_sql( + + "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND +DTSTART <= '20000106T120000Z'"); + + + + fs = icalfileset_new(path); + + + + for (i = 0; i!= 10; i++){ + + c = make_component(i); /* Make a new component where DTSTART +has month of i */ + + icalfileset_add_component(fs,c); + + } + + icalfileset_commit(fs); /* Write to disk */ + + icalfileset_select(fs,g); /* Set the gauge to filter components +*/ + + + + for (c = icalfileset_get_first_component(fs); + + c != 0; + + c = icalfileset_get_next_component(fs)){ + + struct icaltimetype t = icalcomponent_get_dtstart(c); + + + + printf("%s\n",icaltime_as_ctime(t)); + + } + + icalfileset_free(fs); + +} + +5.4.3 Other routines + +There are several other routines in the icalset interface, but they +not fully implemented yet. + +5.5 <sec:memory>Memory Management + +Libical relies heavily on dynamic allocation for both the core objects +and for the strings used to hold values. Some of this memory the library +caller owns and must free, and some of the memory is managed by the +library. Here is a summary of the memory rules. + +1) If the function name has "new" in it, the caller gets control + of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone() + ) + +2) If you got the memory from a routine with new in it, you must + call the corresponding *_free routine to free the memory. ( Use + icalcomponent_free() to free objects created with icalcomponent_new()) + +3) If the function name has "add" in it, the caller is transferring + control of the memory to the routine. ( icalproperty_add_parameter() ) + +4) If the function name has "remove" in it, the caller passes in + a pointer to an object and after the call returns, the caller owns + the object. So, before you call icalcomponent_remove_property(comp,foo), + you do not own "foo" and after the call returns, you do. + +5) If the routine returns a string, libical owns the memory and will + put it on a ring buffer to reclaim later. For example, icalcomponent_as_ical_string(). + You'd better strdup() it if you want to keep it, and you don't have + to delete it. + +5.6 Error Handling + +Libical has several error handling mechanisms for the various types +of programming, semantic and syntactic errors you may encounter. + +5.6.1 Return values + +Many library routines signal errors through their return values. All +routines that return a pointer, such as icalcomponent_new(), will +return 0 ( zero ) on a fatal error. Some routines will return a value +of enum icalerrorenum. + +5.6.2 icalerrno + +Most routines will set the global error value icalerrno on errors. +This variable is an enumeration; permissible values can be found in +libical/icalerror.h. If the routine returns an enum icalerrorenum, +then the return value will be the same as icalerrno. You can use icalerror_strerror() +to get a string that describes the error. The enumerations are: + +* ICAL_BADARG_ERROR -- One of the argument to a routine was bad. Typically + for a null pointer. + +* ICAL_NEWFAILED_ERROR -- A new() or malloc() failed + +* ICAL_MALFORMEDDATA_ERROR -- An input string was not in the correct + format + +* ICAL_PARSE_ERROR -- The parser failed to parse an incomming component + +* ICAL_INTERNAL_ERROR -- Largely equivalent to an assert + +* ICAL_FILE_ERROR -- A file operation failed. Check errno for more + detail. + +* ICAL_ALLOCATION_ERROR -- ? + +* ICAL_USAGE_ERROR -- ? + +* ICAL_NO_ERROR -- No error + +* ICAL_MULTIPLEINCLUSION_ERROR -- ? + +* ICAL_TIMEDOUT_ERROR -- For CSTP and acquiring locks + +* ICAL_UNKNOWN_ERROR -- ? + +5.6.3 X-LIC-ERROR and X-LIC-INVALID-COMPONENT + +The library handles semantic and syntactic errors in components by +inserting errors properties into the components. If the parser cannot +parse incoming text ( a syntactic error ) or if the icalrestriction_check() +routine indicates that the component does not meet the requirements +of RFC2446 ( a semantic error) the library will insert properties +of the type X-LIC-ERROR to describe the error. Here is an example +of the error property: + +X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions +for property DTSTART. + +Expected 1 instances of the property and got 0 + +This error resulted from a call to icalrestriction_check(), which discovered +that the component does not have a DTSTART property, as required by +RFC2445. + +There are a few routines to manipulate error properties: + +[ The following data is supposed to be in a table. It looks OK in LyX, +but does not format propertly in output. ] + ++-------------------------------------+---------------------------------------------------------+ +| Routine | Purpose | ++-------------------------------------+---------------------------------------------------------+ +| void icalrestriction_check() | Check a component against RFC2446 and insert | ++-------------------------------------+---------------------------------------------------------+ +| | error properties to indicate non compliance | ++-------------------------------------+---------------------------------------------------------+ +| int icalcomponent_count_errors() | Return the number of error properties | ++-------------------------------------+---------------------------------------------------------+ +| | in a component | ++-------------------------------------+---------------------------------------------------------+ +| void icalcomponent_strip_errors() | Remove all error properties in as | ++-------------------------------------+---------------------------------------------------------+ +| | component | ++-------------------------------------+---------------------------------------------------------+ +| void icalcomponent_convert_errors() | Convert some error properties into | ++-------------------------------------+---------------------------------------------------------+ +| | REQUESTS-STATUS proprties to indicate the inability to | ++-------------------------------------+---------------------------------------------------------+ +| | process the component as an iTIP request. | ++-------------------------------------+---------------------------------------------------------+ + + +The types of errors are listed in icalerror.h. They are: + +ICAL_XLICERRORTYPE_COMPONENTPARSEERROR + +ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR + +ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR + +ICAL_XLICERRORTYPE_PROPERTYPARSEERROR + +ICAL_XLICERRORTYPE_VALUEPARSEERROR + +ICAL_XLICERRORTYPE_UNKVCALPROP + +ICAL_XLICERRORTYPE_INVALIDITIP + +The libical parser will generate the error that end in PARSEERROR when +it encounters garbage in the input steam. ICAL_XLICERRORTYPE_INVALIDITIP +is inserted by icalrestriction_check(), and ICAL_XLICERRORTYPE_UNKVCALPROP +is generated by icalvcal_convert() when it encounters a vCal property +that it cannot convert or does not know about. + +Icalcomponent_convert_errors() converts some of the error properties +in a component into REQUEST-STATUS properties that indicate a failure. +As of libical version0.18, this routine only convert *PARSEERROR errors +and it always generates a 3.x ( failure ) code. This makes it more +of a good idea than a really useful bit of code. + +5.6.4 ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal + +If the global variable icalerror_errors_are_fatal is set to 1, then +any error condition will cause the program to abort. The abort occurs +in icalerror_set_errno(), and is done with an assert(0) if NDEBUG +is undefined, and with icalerror_crash_here if NDEBUG is defined. +The default value of icalerror_errors_are_fatal is 1 when ICAL_ERRORS_ARE_FATAL +is defined, and 0 otherwise. Since ICAL_ERRORS_ARE_FATAL is defined +by default, icalerror_errors_are_fatal is also defined by default. + +5.7 Naming Standard + +Structures that you access with the "struct" keyword, such as "struct +icaltimetype" are things that you are allowed to see inside and poke +at. + +Structures that you access though a typedef, such as "icalcomponent" +are things where all of the data is hidden. + +Component names that start with "V" are part of RFC 2445 or another +iCal standard. Component names that start with "X" are also part of +the spec, but they are not actually components in the spec. However, +they look and act like components, so they are components in libical. +Names that start with "XLIC" or "X-LIC" are not part of any iCal spec. +They are used internally by libical. + +Enums that identify a component, property, value or parameter end with +"_COMPONENT," "_PROPERTY," "_VALUE," or "_PARAMETER"s + +Enums that identify a parameter value have the name of the parameter +as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. + +The enums for the parts of a recurarance rule and request statuses +are irregular. + +6 Hacks and Bugs + +There are a lot of hacks in the library -- bits of code that I am not +proud of and should probably be changed. These are marked with the +comment string "HACK." + +7 Library Reference + +7.1 Manipulating struct icaltimetype + +7.1.1 Struct icaltimetype + +struct icaltimetype + +{ + + int year; + + int month; + + int day; + + int hour; + + int minute; + + int second; + + int is_utc; + + int is_date; + + const char* zone; + +}; diff --git a/libkcal/libical/examples/Makefile.am b/libkcal/libical/examples/Makefile.am new file mode 100644 index 000000000..95076dbaf --- /dev/null +++ b/libkcal/libical/examples/Makefile.am @@ -0,0 +1,16 @@ + +noinst_PROGRAMS = doesnothing + +doesnothing_LDADD = ../src/libical/libical.la ../src/libicalss/libicalss.la ../src/libicalvcal/libicalvcal.la + +#LIBS = @PTHREAD_LIBS@ + +INCLUDES = -I. -I../src/libical -I../src/libicalss -I../src/libicalvcal + +doesnothing_SOURCES = \ + access_components.c \ + access_properties_and_parameters.c \ + errors.c \ + main.c \ + parse_text.c + diff --git a/libkcal/libical/examples/access_components.c b/libkcal/libical/examples/access_components.c new file mode 100644 index 000000000..dc92b64a7 --- /dev/null +++ b/libkcal/libical/examples/access_components.c @@ -0,0 +1,318 @@ +/* Access_component.c */ + +#include "ical.h" + +#include <assert.h> +#include <string.h> /* for strdup */ +#include <stdlib.h> /* for malloc */ +#include <stdio.h> /* for printf */ +#include <time.h> /* for time() */ + +void do_something(icalcomponent *c); + +/* Creating iCal Components + + There are two ways to create new component in libical. You can + build the component from primitive parts, or you can create it + from a string. + + There are two variations of the API for building the component from + primitive parts. In the first variation, you add each parameter and + value to a property, and then add each property to a + component. This results in a long series of function calls. This + style is show in create_new_component() + + The second variation uses vargs lists to nest many primitive part + constructors, resulting in a compact, neatly formated way to create + components. This style is shown in create_new_component_with_va_args() + + + +*/ + +icalcomponent* create_new_component() +{ + + /* variable definitions */ + icalcomponent* calendar; + icalcomponent* event; + struct icaltimetype atime = icaltime_from_timet( time(0),0); + struct icalperiodtype rtime; + icalproperty* property; + + /* Define a time type that will use as data later. */ + rtime.start = icaltime_from_timet( time(0),0); + rtime.end = icaltime_from_timet( time(0),0); + rtime.end.hour++; + + /* Create calendar and add properties */ + + calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); + + /* Nearly every libical function call has the same general + form. The first part of the name defines the 'class' for the + function, and the first argument will be a pointer to a struct + of that class. So, icalcomponent_ functions will all take + icalcomponent* as their first argument. */ + + /* The next call creates a new proeprty and immediately adds it to the + 'calendar' component. */ + + icalcomponent_add_property( + calendar, + icalproperty_new_version("2.0") + ); + + + /* Here is the short version of the memory rules: + + If the routine name has "new" in it: + Caller owns the returned memory. + If you pass in a string, the routine takes the memory. + + If the routine name has "add" in it: + The routine takes control of the component, property, + parameter or value memory. + + If the routine returns a string ( "get" and "as_ical_string" ) + The library owns the returned memory. + + There are more rules, so refer to the documentation for more + details. + + */ + + icalcomponent_add_property( + calendar, + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") + ); + + /* Add an event */ + + event = icalcomponent_new(ICAL_VEVENT_COMPONENT); + + icalcomponent_add_property( + event, + icalproperty_new_dtstamp(atime) + ); + + /* In the previous call, atime is a struct, and it is passed in by value. + This is how all compound types of values are handled. */ + + icalcomponent_add_property( + event, + icalproperty_new_uid("guid-1.host1.com") + ); + + /* add a property that has parameters */ + property = icalproperty_new_organizer("mailto:mrbig@host.com"); + + icalproperty_add_parameter( + property, + icalparameter_new_role(ICAL_ROLE_CHAIR) + ); + + icalcomponent_add_property(event,property); + + /* In this style of component creation, you need to use an extra + call to add parameters to properties, but the form of this + operation is the same as adding a property to a component */ + + /* add another property that has parameters */ + property = icalproperty_new_attendee("mailto:employee-A@host.com"); + + icalproperty_add_parameter( + property, + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) + ); + + icalproperty_add_parameter( + property, + icalparameter_new_rsvp(1) + ); + + icalproperty_add_parameter( + property, + icalparameter_new_cutype(ICAL_CUTYPE_GROUP) + ); + + icalcomponent_add_property(event,property); + + + /* more properties */ + + icalcomponent_add_property( + event, + icalproperty_new_description("Project XYZ Review Meeting") + ); + + icalcomponent_add_property( + event, + icalproperty_new_categories("MEETING") + ); + + icalcomponent_add_property( + event, + icalproperty_new_class(ICAL_CLASS_PUBLIC) + ); + + icalcomponent_add_property( + event, + icalproperty_new_created(atime) + ); + + icalcomponent_add_property( + event, + icalproperty_new_summary("XYZ Project Review") + ); + + property = icalproperty_new_dtstart(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid("US-Eastern") + ); + + icalcomponent_add_property(event,property); + + + property = icalproperty_new_dtend(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid("US-Eastern") + ); + + icalcomponent_add_property(event,property); + + icalcomponent_add_property( + event, + icalproperty_new_location("1CP Conference Room 4350") + ); + + icalcomponent_add_component(calendar,event); + + return calendar; +} + + +/* Now, create the same component as in the previous routine, but use +the constructor style. */ + +icalcomponent* create_new_component_with_va_args() +{ + + /* This is a similar set up to the last routine */ + icalcomponent* calendar; + struct icaltimetype atime = icaltime_from_timet( time(0),0); + struct icalperiodtype rtime; + + rtime.start = icaltime_from_timet( time(0),0); + rtime.end = icaltime_from_timet( time(0),0); + rtime.end.hour++; + + /* Some of these routines are the same as those in the previous + routine, but we've also added several 'vanew' routines. These + 'vanew' routines take a list of properties, parameters or + values and add each of them to the parent property or + component. */ + + calendar = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstamp(atime), + icalproperty_new_uid("guid-1.host1.com"), + icalproperty_vanew_organizer( + "mailto:mrbig@host.com", + icalparameter_new_role(ICAL_ROLE_CHAIR), + 0 + ), + icalproperty_vanew_attendee( + "mailto:employee-A@host.com", + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), + icalparameter_new_rsvp(1), + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), + 0 + ), + icalproperty_new_description("Project XYZ Review Meeting"), + + icalproperty_new_categories("MEETING"), + icalproperty_new_class(ICAL_CLASS_PUBLIC), + icalproperty_new_created(atime), + icalproperty_new_summary("XYZ Project Review"), + icalproperty_vanew_dtstart( + atime, + icalparameter_new_tzid("US-Eastern"), + 0 + ), + icalproperty_vanew_dtend( + atime, + icalparameter_new_tzid("US-Eastern"), + 0 + ), + icalproperty_new_location("1CP Conference Room 4350"), + 0 + ), + 0 + ); + + + /* Note that properties with no parameters can use the regular + 'new' constructor, while those with parameters use the 'vanew' + constructor. And, be sure that the last argument in the 'vanew' + call is a zero. Without, your program will probably crash. */ + + return calendar; +} + + +void find_sub_components(icalcomponent* comp) +{ + icalcomponent *c; + + /* The second parameter to icalcomponent_get_first_component + indicates the type of component to search for. This will + iterate through all sub-components */ + for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ + + do_something(c); + } + + /* This will iterate only though VEVENT sub-components */ + + for(c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT)){ + + do_something(c); + } + +} + +/* Ical components only have one internal iterator, so removing the + object that the iterator points to can cause problems. Here is the + right way to remove components */ + +void remove_vevent_sub_components(icalcomponent* comp){ + + icalcomponent *c, *next; + + for( c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); + c != 0; + c = next) + { + next = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT); + + icalcomponent_remove_component(comp,c); + + do_something(c); + } + +} + diff --git a/libkcal/libical/examples/access_properties_and_parameters.c b/libkcal/libical/examples/access_properties_and_parameters.c new file mode 100644 index 000000000..ba3d7fcc0 --- /dev/null +++ b/libkcal/libical/examples/access_properties_and_parameters.c @@ -0,0 +1,144 @@ +/* access_properties_and_parameters.c */ + +#include "ical.h" +#include <string.h> + +/* Get a particular parameter out of a component. This routine will + return a list of strings of all attendees who are required. Note + that this routine assumes that the component that we pass in is a + VEVENT. */ + +void get_required_attendees(icalcomponent* event) +{ + icalproperty* p; + icalparameter* parameter; + + assert(event != 0); + assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); + + /* This loop iterates over all of the ATTENDEE properties in the + event */ + + /* The iteration routines save their state in the event + struct, so the are not thread safe unless you lock the whole + component. */ + + for( + p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) + ) { + + /* Get the first ROLE parameter in the property. There should + only be one, so we won't bother to iterate over them. But, + you can iterate over parameters just like with properties */ + + parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); + + /* If the parameter indicates the participant is required, get + the attendees name and stick a copy of it into the output + array */ + + if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) + { + /* Remember, the caller does not own this string, so you + should strdup it if you want to change it. */ + const char *attendee = icalproperty_get_attendee(p); + } + } + +} + +/* Here is a similar example. If an attendee has a PARTSTAT of + NEEDSACTION or has no PARTSTAT parameter, change it to + TENTATIVE. */ + +void update_attendees(icalcomponent* event) +{ + icalproperty* p; + icalparameter* parameter; + + assert(event != 0); + assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); + + for( + p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) + ) { + + parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); + + if (parameter == 0) { + + /* There was no PARTSTAT parameter, so add one. */ + icalproperty_add_parameter( + p, + icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) + ); + + } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { + /* Remove the NEEDSACTION parameter and replace it with + TENTATIVE */ + + icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER); + + /* Don't forget to free it */ + icalparameter_free(parameter); + + /* Add a new one */ + icalproperty_add_parameter( + p, + icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) + ); + } + + } +} + +/* Here are some examples of manipulating properties */ + +void test_properties() +{ + icalproperty *prop; + icalparameter *param; + icalvalue *value; + + icalproperty *clone; + + /* Create a new property */ + prop = icalproperty_vanew_comment( + "Another Comment", + icalparameter_new_cn("A Common Name 1"), + icalparameter_new_cn("A Common Name 2"), + icalparameter_new_cn("A Common Name 3"), + icalparameter_new_cn("A Common Name 4"), + 0); + + /* Iterate through all of the parameters in the property */ + for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); + param != 0; + param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { + + printf("Prop parameter: %s\n",icalparameter_get_cn(param)); + } + + /* Get a string representation of the property's value */ + printf("Prop value: %s\n",icalproperty_get_comment(prop)); + + /* Spit out the property in its RFC 2445 representation */ + printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop)); + + /* Make a copy of the property. Caller owns the memory */ + clone = icalproperty_new_clone(prop); + + /* Get a reference to the value within the clone property */ + value = icalproperty_get_value(clone); + + printf("Value: %s",icalvalue_as_ical_string(value)); + + /* Free the original and the clone */ + icalproperty_free(clone); + icalproperty_free(prop); + +} diff --git a/libkcal/libical/examples/errors.c b/libkcal/libical/examples/errors.c new file mode 100644 index 000000000..86d963bd7 --- /dev/null +++ b/libkcal/libical/examples/errors.c @@ -0,0 +1,70 @@ +/* errors.c */ + +#include "ical.h" +#include <stdio.h> + +void program_errors() +{ + /*Most routines will set icalerrno on errors. This is an + enumeration defined in icalerror.h */ + + icalcomponent *c; + + icalerror_clear_errno(); + + c = icalcomponent_new(ICAL_VEVENT_COMPONENT); + + if (icalerrno != ICAL_NO_ERROR){ + + fprintf(stderr,"Horrible libical error: %s\n", + icalerror_strerror(icalerrno)); + + } + +} + +void component_errors(icalcomponent *comp) +{ + int errors; + icalproperty *p; + + /* presume that we just got this component from the parser */ + + errors = icalcomponent_count_errors(comp); + + printf("This component has %d parsing errors\n", errors); + + /* Print out all of the parsing errors. This is not strictly + correct, because it does not descend into any sub-components, + as icalcomponent_count_errors() does. */ + + for(p = icalcomponent_get_first_property(comp,ICAL_XLICERROR_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(comp,ICAL_XLICERROR_PROPERTY)) + { + + printf("-- The error is %s:\n",icalproperty_get_xlicerror(p)); + } + + + + /* Check the component for iTIP compilance, and add more + X-LIC-ERROR properties if it is non-compilant. */ + icalrestriction_check(comp); + + + /* Count the new errors. */ + if(errors != icalcomponent_count_errors(comp)){ + printf(" -- The component also has iTIP restriction errors \n"); + } + + /* Since there are iTIP restriction errors, it may be impossible + to process this component as an iTIP request. In this case, the + X-LIC-ERROR proeprties should be expressed as REQUEST-STATUS + properties in the reply. This following routine makes this + conversion */ + + + icalcomponent_convert_errors(comp); + +} diff --git a/libkcal/libical/examples/main.c b/libkcal/libical/examples/main.c new file mode 100644 index 000000000..1be2de5c9 --- /dev/null +++ b/libkcal/libical/examples/main.c @@ -0,0 +1,12 @@ +/* This is just to make the code in the example directory link properly. */ +#include "ical.h" + +int main() +{ + + return 1; +} + + +void do_something(icalcomponent* comp){ +} diff --git a/libkcal/libical/examples/parse_text.c b/libkcal/libical/examples/parse_text.c new file mode 100644 index 000000000..b7eba43b8 --- /dev/null +++ b/libkcal/libical/examples/parse_text.c @@ -0,0 +1,68 @@ +/* parse_text.c + + */ +#include <stdio.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include "ical.h" + +#include <stdlib.h> + +/* The icalparser_get_line routine will create a single *content* line +out of one or more input lines. The content line is all of the +properties and values for a single property, and it can span several +input lines. So, icalparser_get_line will need to be able to get more +data on its own. Read_string is a routine that does this. You can +write your own version of read stream to get data from other types of +files, sockets, etc. */ + +char* read_stream(char *s, size_t size, void *d) +{ + char *c = fgets(s,size, (FILE*)d); + + return c; + +} + +void parse_text(int argc, char* argv[]) +{ + + char* line; + FILE* stream; + icalcomponent *c; + + /* Create a new parser object */ + icalparser *parser = icalparser_new(); + + stream = fopen(argv[1],"r"); + + assert(stream != 0); + + /* Tell the parser what input routie it should use. */ + icalparser_set_gen_data(parser,stream); + + do{ + + /* Get a single content line by making one or more calls to + read_stream()*/ + line = icalparser_get_line(parser,read_stream); + + /* Now, add that line into the parser object. If that line + completes a component, c will be non-zero */ + c = icalparser_add_line(parser,line); + + + if (c != 0){ + printf("%s",icalcomponent_as_ical_string(c)); + + printf("\n---------------\n"); + + icalcomponent_free(c); + } + + } while ( line != 0); + + + icalparser_free(parser); +} diff --git a/libkcal/libical/scripts/Makefile.am b/libkcal/libical/scripts/Makefile.am new file mode 100644 index 000000000..47ce3e6e4 --- /dev/null +++ b/libkcal/libical/scripts/Makefile.am @@ -0,0 +1,9 @@ +EXTRA_DIST = \ +mkderivedcomponents.pl \ +mkderivedparameters.pl \ +mkderivedproperties.pl \ +mkderivedvalues.pl \ +mkparameterrestrictions.pl \ +mkrestrictionrecords.pl \ +mkrestrictiontable.pl \ +readvaluesfile.pl diff --git a/libkcal/libical/scripts/mkderivedcomponents.pl b/libkcal/libical/scripts/mkderivedcomponents.pl new file mode 100755 index 000000000..31743c3ba --- /dev/null +++ b/libkcal/libical/scripts/mkderivedcomponents.pl @@ -0,0 +1,170 @@ +#!/usr/bin/env perl + +use Getopt::Std; +getopts('chspi:'); + + +# ARG 0 is components.txt +open(PV,"$ARGV[0]") || die "Can't open components file $ARGV[0]:$!"; + +my @components; + +while (<PV>){ + + s/#.*//; + + chop; + + push(@components,$_); + +} + +close PV; + +# Write the file inline by copying everything before a demarcation +# line, and putting the generated data after the demarcation + +if ($opt_i) { + + open(IN,$opt_i) || die "Can't open input file \"$opt_i\""; + + while(<IN>){ + + if (/Do not edit/){ + last; + } + + print; + + } + + if($opt_i){ + print "# Everything below this line is machine generated. Do not edit. \n"; + } else { + print "/* Everything below this line is machine generated. Do not edit. */\n"; + } + +} + +if ($opt_c or $opt_h and !$opt_i){ + +print <<EOM; +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedproperties.{c,h} + CREATOR: eric 09 May 1999 + + \044Id:\044 + + (C) COPYRIGHT 1999 Eric Busboom + http://www.softwarestudio.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + ======================================================================*/ + +/* + * THIS FILE IS MACHINE GENERATED DO NOT EDIT + */ + +#include <stdarg.h> /* for va_arg functions */ + +EOM + +} + +if ($opt_p and !$opt_i){ + +print <<EOM; + +EOM + +} + + +foreach $comp (@components) { + + next if !$comp; + + my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$comp)); + my $lc = lc($ucf); + my $uc = uc($lc); + + if($opt_c) { # Make C source + print<<EOM; + +/* $comp */ + +icalcomponent* icalcomponent_new_${lc}() +{ + return (icalcomponent*)icalcomponent_new_impl(ICAL_${uc}_COMPONENT); +} + +icalcomponent* icalcomponent_vanew_${lc}(...) +{ + va_list args; + struct icalcomponent_impl *impl = icalcomponent_new_impl(ICAL_${uc}_component); + + va_start(args,v); + icalcomponent_add_properties(impl, args); + va_end(args); + + return (icalcomponent*)impl; +} + +EOM + + + } elsif ($opt_h) { # Make a C header + print<<EOM; + +/* $comp */ +icalcomponent* icalcomponent_new_${lc}(); +icalcomponent* icalcomponent_vanew_${lc}(...); +EOM + +} elsif ($opt_s) { # Make something for a switch statement + +print <<EOM; +case ICAL_${uc}_PROPERTY: +EOM + +} elsif ($opt_p) { # make perl source + +print <<EOM; + +# $comp +package Net::ICal::Component::${ucf}; +\@ISA=qw(Net::ICal::Component); + +sub new +{ + my \$package = shift; + my \$c = Net::ICal::icalcomponent_new(\$Net::ICal::ICAL_${uc}_COMPONENT); + + my \$self = Net::ICal::Component::new_from_ref(\$c); + Net::ICal::Component::_add_elements(\$self,\\\@_); + + # Self is blessed in new_from_ref + + return \$self; + +} +EOM + +} + + + +} + + diff --git a/libkcal/libical/scripts/mkderivedparameters.pl b/libkcal/libical/scripts/mkderivedparameters.pl new file mode 100755 index 000000000..9e8f92cdb --- /dev/null +++ b/libkcal/libical/scripts/mkderivedparameters.pl @@ -0,0 +1,332 @@ +#!/usr/bin/env perl + +require "readvaluesfile.pl"; + +use Getopt::Std; +getopts('chspi:'); + +%no_xname = (RELATED=>1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1); + +%params = read_parameters_file($ARGV[0]); + + +# Write the file inline by copying everything before a demarcation +# line, and putting the generated data after the demarcation + +if ($opt_i) { + + open(IN,$opt_i) || die "Can't open input file $opt_i"; + + while(<IN>){ + if (/<insert_code_here>/){ + insert_code(); + } else { + print; + } + + } + + if($opt_p){ + print "# Everything below this line is machine generated. Do not edit. \n"; + } else { + print "/* Everything below this line is machine generated. Do not edit. */\n"; + } + +} + +sub insert_code +{ + +# Write parameter enumerations and datatypes + +if($opt_h){ + print "typedef enum icalparameter_kind {\n ICAL_ANY_PARAMETER = 0,\n"; + foreach $param (sort keys %params) { + + next if !$param; + + next if $param eq 'NO' or $param eq 'ANY'; + + my $uc = join("",map {uc($_);} split(/-/,$param)); + + my @enums = @{$params{$param}->{'enums'}}; + + print " ICAL_${uc}_PARAMETER, \n"; + + } + print " ICAL_NO_PARAMETER\n} icalparameter_kind;\n\n"; + + # Now create enumerations for parameter values + $idx = 20000; + + print "#define ICALPARAMETER_FIRST_ENUM $idx\n\n"; + + foreach $param (sort keys %params) { + + next if !$param; + + next if $param eq 'NO' or $prop eq 'ANY'; + + my $type = $params{$param}->{"C"}; + my $ucv = join("",map {uc(lc($_));} split(/-/,$param)); + my @enums = @{$params{$param}->{'enums'}}; + + if(@enums){ + + print "typedef enum $type {\n"; + my $first = 1; + + unshift(@enums,"X"); + + push(@enums,"NONE"); + + foreach $e (@enums) { + if (!$first){ + print ",\n"; + } else { + $first = 0; + } + + my $uce = join("",map {uc(lc($_));} split(/-/,$e)); + + print " ICAL_${ucv}_${uce} = $idx"; + + $idx++; + } + $c_type =~ s/enum //; + + print "\n} $type;\n\n"; + } + } + + print "#define ICALPARAMETER_LAST_ENUM $idx\n\n"; + +} + +if ($opt_c){ + + + # Create the icalparameter_value to icalvalue_kind conversion table + my $count = 0; + my $out; + + foreach $enum (@{$params{'VALUE'}->{'enums'}}){ + next if $enum eq 'NO' or $enum eq 'ERROR'; + $uc = join("",map {uc(lc($_));} split(/-/,$enum)); + $out.=" {ICAL_VALUE_${uc},ICAL_${uc}_VALUE},\n"; + $count++; + } + + $count+=2; + print "struct icalparameter_value_kind_map value_kind_map[$count] = {\n"; + print $out; + print " {ICAL_VALUE_X,ICAL_X_VALUE},\n"; + print " {ICAL_VALUE_NONE,ICAL_NO_VALUE}\n};\n\n"; + + #Create the parameter Name map + + $out=""; + $count=0; + foreach $param (sort keys %params) { + + next if !$param; + + next if $param eq 'NO' or $prop eq 'ANY'; + + my $lc = join("",map {lc($_);} split(/-/,$param)); + my $uc = join("",map {uc(lc($_));} split(/-/,$param)); + + $count++; + $out.=" {ICAL_${uc}_PARAMETER,\"$param\"},\n"; + + } + $count+=1; + print "struct icalparameter_kind_map parameter_map[$count] = { \n"; + print $out; + print " { ICAL_NO_PARAMETER, \"\"}\n};\n\n"; + + # Create the parameter value map + $out =""; + $count=0; + foreach $param (sort keys %params) { + + next if !$param; + + next if $param eq 'NO' or $prop eq 'ANY'; + + my $type = $params{$param}->{"C"}; + my $uc = join("",map {uc(lc($_));} split(/-/,$param)); + my @enums = @{$params{$param}->{'enums'}}; + + if(@enums){ + + foreach $e (@enums){ + my $uce = join("",map {uc(lc($_));} split(/-/,$e)); + + $count++; + $out.=" {ICAL_${uc}_PARAMETER,ICAL_${uc}_${uce},\"$e\"},\n"; + } + + } + } + + $count+=3; + print "struct icalparameter_map icalparameter_map[] = {\n"; + print "{ICAL_ANY_PARAMETER,0,\"\"},\n"; + print $out; + print " {ICAL_NO_PARAMETER,0,\"\"}};\n\n"; + +} + +foreach $param (keys %params){ + + my $type = $params{$param}->{'C'}; + + my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param)); + + my $lc = lc($ucf); + my $uc = uc($lc); + + my $charorenum; + my $set_code; + my $pointer_check; + my $pointer_check_v; + my $xrange; + + if ($type=~/char/ ) { + + $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return param->string;"; + + $set_code = "((struct icalparameter_impl*)param)->string = icalmemory_strdup(v);"; + + $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; + $pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");"; + + } else { + + $xrange =" if (param->string != 0){\n return ICAL_${uc}_X;\n }\n" if !exists $no_xname{$uc}; + + $charorenum= "icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn ($type)(param->data);"; + + $pointer_check = "icalerror_check_arg_rz(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rz(v < ICAL_${uc}_NONE,\"v\");"; + + $pointer_check_v = "icalerror_check_arg_rv(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rv(v < ICAL_${uc}_NONE,\"v\");"; + + $set_code = "((struct icalparameter_impl*)param)->data = (int)v;"; + + } + + + + if ($opt_c) { + + print <<EOM; +/* $param */ +icalparameter* icalparameter_new_${lc}($type v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + $pointer_check + impl = icalparameter_new_impl(ICAL_${uc}_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_${lc}((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +${type} icalparameter_get_${lc}(const icalparameter* param) +{ + icalerror_clear_errno(); +$charorenum +} + +void icalparameter_set_${lc}(icalparameter* param, ${type} v) +{ + $pointer_check_v + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + $set_code +} + +EOM + + } elsif( $opt_h) { + + print <<EOM; +/* $param */ +icalparameter* icalparameter_new_${lc}($type v); +${type} icalparameter_get_${lc}(const icalparameter* value); +void icalparameter_set_${lc}(icalparameter* value, ${type} v); + +EOM + +} + +if ($opt_p) { + + print <<EOM; + +# $param + +package Net::ICal::Parameter::${ucf}; +\@ISA=qw(Net::ICal::Parameter); + +sub new +{ + my \$self = []; + my \$package = shift; + my \$value = shift; + + bless \$self, \$package; + + my \$p; + + if (\$value) { + \$p = Net::ICal::icalparameter_new_from_string(\$Net::ICal::ICAL_${uc}_PARAMETER,\$value); + } else { + \$p = Net::ICal::icalparameter_new(\$Net::ICal::ICAL_${uc}_PARAMETER); + } + + \$self->[0] = \$p; + + return \$self; +} + +sub get +{ + my \$self = shift; + my \$impl = \$self->_impl(); + + return Net::ICal::icalparameter_as_ical_string(\$impl); + +} + +sub set +{ + # This is hard to implement, so I've punted for now. + die "Set is not implemented"; +} + +EOM + +} + +} + +if ($opt_h){ + +print <<EOM; +#endif /*ICALPARAMETER_H*/ + +EOM +} + +} diff --git a/libkcal/libical/scripts/mkderivedproperties.pl b/libkcal/libical/scripts/mkderivedproperties.pl new file mode 100755 index 000000000..4eafb1927 --- /dev/null +++ b/libkcal/libical/scripts/mkderivedproperties.pl @@ -0,0 +1,258 @@ +#!/usr/bin/env perl + +require "readvaluesfile.pl"; + +use Getopt::Std; +getopts('chspmi:'); + +# ARG 0 is properties.csv +%propmap = read_properties_file($ARGV[0]); + +# ARG 1 is value-types.txt +%valuemap = read_values_file($ARGV[1]); + + +$include_vanew = 1; + +# Write the file inline by copying everything before a demarcation +# line, and putting the generated data after the demarcation + +if ($opt_i) { + + open(IN,$opt_i) || die "Can't open input file $opt_i"; + + while(<IN>){ + + if (/<insert_code_here>/){ + insert_code(); + } else { + print; + } + + } + +} + +sub fudge_data { + my $prop = shift; + + my $value = $propmap{$prop}->{'lic_value'}; + + if (!$value){ + die "Can't find value for property \"$prop\"\n"; + } + my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$prop)); + my $lc = lc($ucf); + my $uc = uc($lc); + + my $ucfvalue = join("",map {ucfirst(lc($_));} split(/-/,$value)); + my $lcvalue = lc($ucfvalue); + my $ucvalue = uc($lcvalue); + + my $type = $valuemap{$value}->{C}->[1]; + + return ($uc,$lc,$lcvalue,$ucvalue,$type); + +} + +sub insert_code { + +# Create the property map data +if($opt_c){ + + + my @props = sort keys %propmap; + my $count = scalar(@props); + + + print "struct icalproperty_map property_map[$count] = {\n"; + + foreach $prop (@props) { + + next if !$prop; + + next if $prop eq 'NO'; + + my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); + + print "{ICAL_${uc}_PROPERTY,\"$prop\",ICAL_${ucvalue}_VALUE},\n"; + + } + + $prop = "NO"; + + my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); + + print "{ICAL_${uc}_PROPERTY,\"\",ICAL_NO_VALUE}};\n\n"; + + $idx = 10000; + $count = 1; + my $out = ""; + + foreach $value (sort keys %valuemap) { + + next if !$value; + next if $value eq 'NO' or $prop eq 'ANY'; + + my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); + my @enums = @{$valuemap{$value}->{'enums'}}; + + if(@enums){ + + my ($c_autogen,$c_type) = @{$valuemap{$value}->{'C'}}; + + unshift(@enums,"X"); + push(@enums,"NONE"); + + foreach $e (@enums) { + + my $uce = join("",map {uc(lc($_));} split(/-/,$e)); + + if($e ne "X" and $e ne "NONE"){ + $str = $e; + } else { + $str = ""; + } + + $out.=" {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_${uce},\"$str\" }, /*$idx*/\n"; + + $idx++; + $count++; + } + + } + } + + $count++; + print "struct icalproperty_enum_map enum_map[$count] = {\n"; + print $out; + print " {ICAL_NO_PROPERTY,0,\"\"}\n};\n\n"; + + + +} + + +if($opt_h){ + + # Create the property enumerations list + print "typedef enum icalproperty_kind {\n ICAL_ANY_PROPERTY = 0,\n"; + foreach $prop (sort keys %propmap) { + + next if !$prop; + + next if $prop eq 'NO' or $prop eq 'ANY'; + + my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); + + print " ICAL_${uc}_PROPERTY, \n"; + + } + print " ICAL_NO_PROPERTY\n} icalproperty_kind;\n\n"; + + +} + + +foreach $prop (sort keys %propmap) { + + next if !$prop; + + next if $prop eq 'NO' or $prop eq 'ANY'; + + my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); + + + my $pointer_check; + if ($type =~ /\*/){ + $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; + } elsif ( $type eq "void" ){ + $pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; + + } + + my $set_pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; + + if($opt_c) { # Generate C source + + if ($include_vanew) { + print<<EOM; +icalproperty* icalproperty_vanew_${lc}($type v, ...){ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check + icalproperty_set_${lc}((icalproperty*)impl,v); + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + return (icalproperty*)impl; +} +EOM +} + print<<EOM; + +/* $prop */ +icalproperty* icalproperty_new_${lc}($type v) { + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check + icalproperty_set_${lc}((icalproperty*)impl,v); + return (icalproperty*)impl; +} + +EOM + # Allow DTSTART, DTEND, DUE, EXDATE and RECURRENCE-ID to take DATE values. + if ($lc eq "dtstart" || $lc eq "dtend" || $lc eq "due" || $lc eq "exdate" + || $lc eq "recurrenceid") { + print<<EOM; +void icalproperty_set_${lc}(icalproperty* prop, $type v){ + icalvalue *value; + $set_pointer_check + icalerror_check_arg_rv( (prop!=0),"prop"); + if (v.is_date) + value = icalvalue_new_date(v); + else + value = icalvalue_new_datetime(v); + icalproperty_set_value(prop,value); +} +EOM + } else { + + print<<EOM; +void icalproperty_set_${lc}(icalproperty* prop, $type v){ + $set_pointer_check + icalerror_check_arg_rv( (prop!=0),"prop"); + icalproperty_set_value(prop,icalvalue_new_${lcvalue}(v)); +} +EOM + } + print<<EOM; +$type icalproperty_get_${lc}(const icalproperty* prop){ + icalerror_check_arg( (prop!=0),"prop"); + return icalvalue_get_${lcvalue}(icalproperty_get_value(prop)); +} +EOM + } elsif ($opt_h) { # Generate C Header file + + + print "\ +/* $prop */\ +icalproperty* icalproperty_new_${lc}($type v);\ +void icalproperty_set_${lc}(icalproperty* prop, $type v);\ +$type icalproperty_get_${lc}(const icalproperty* prop);"; + + +if ($include_vanew){ + print "icalproperty* icalproperty_vanew_${lc}($type v, ...);\n"; +} + +} + + +} # This brace terminates the main loop + + + +if ($opt_h){ + +print "\n\n#endif /*ICALPROPERTY_H*/\n" +} + +} diff --git a/libkcal/libical/scripts/mkderivedvalues.pl b/libkcal/libical/scripts/mkderivedvalues.pl new file mode 100755 index 000000000..fef659c30 --- /dev/null +++ b/libkcal/libical/scripts/mkderivedvalues.pl @@ -0,0 +1,236 @@ +#!/usr/bin/perl + +use lib '.'; + +require 'readvaluesfile.pl'; + +use Getopt::Std; +getopts('chi:'); + + #Options + # c -> generate c code file + # h-> generate header file + + # Open with value-types.txt + +my %h = read_values_file($ARGV[0]); + + + # Write the file inline by copying everything before a demarcation + # line, and putting the generated data after the demarcation + +if ($opt_i) { + + open(IN,$opt_i) || die "Can't open input file $opt_i"; + + while(<IN>){ + if (/<insert_code_here>/){ + insert_code(); + } else { + print; + } + + + } +} + +sub insert_code +{ + # Map type names to the value in the icalvalue_impl data union */ + +%union_map = ( + BOOLEAN => 'int', + CALADDRESS=>'string', + DATE=>'time', + DATETIME=>'time', + DATETIMEDATE=>'time', + DATETIMEPERIOD=>'period', + DURATION=>'duration', + INTEGER=>'int', + TEXT=>'string', + URI=>'string', + UTCOFFSET=>'int', + QUERY=>'string', + BINARY=>'string', + X=>'string' + ); + + +if($opt_h){ + + # First print out the value enumerations + $idx = 5000; + print "typedef enum icalvalue_kind {\n"; + print " ICAL_ANY_VALUE=$idx,\n"; + + foreach $value (keys %h) { + + $idx++; + my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); + + next if $value eq "NO"; + + print " ICAL_${ucv}_VALUE=$idx,\n"; + } + + $idx++; + print " ICAL_NO_VALUE=$idx\n} icalvalue_kind ;\n\n"; + + # Now create enumerations for property values + $idx = 10000; + + print "#define ICALPROPERTY_FIRST_ENUM $idx\n\n"; + + foreach $value (sort keys %h) { + + next if !$value; + + next if $value eq 'NO' or $prop eq 'ANY'; + + my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); + my @enums = @{$h{$value}->{'enums'}}; + + if(@enums){ + + my ($c_autogen,$c_type) = @{$h{$value}->{'C'}}; + print "typedef $c_type {\n"; + my $first = 1; + + unshift(@enums,"X"); + + push(@enums,"NONE"); + + foreach $e (@enums) { + if (!$first){ + print ",\n"; + } else { + $first = 0; + } + + my $uce = join("",map {uc(lc($_));} split(/-/,$e)); + + print " ICAL_${ucv}_${uce} = $idx"; + + $idx++; + } + + $c_type =~ s/enum //; + + print "\n} $c_type;\n\n"; + } + } + + print "#define ICALPROPERTY_LAST_ENUM $idx\n\n"; + +} + + +if($opt_c){ + + # print out the value to string map + + my $count = scalar(keys %h) + 1; + print "struct icalvalue_kind_map value_map[$count]={\n"; + + foreach $value (keys %h) { + + $idx++; + my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); + + next if $value eq "NO"; + + print " {ICAL_${ucv}_VALUE,\"$value\"},\n"; + } + + + print " {ICAL_NO_VALUE,\"\"}\n};"; + +} + + +foreach $value (keys %h) { + + my $autogen = $h{$value}->{C}->[0]; + my $type = $h{$value}->{C}->[1]; + + my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$value)); + + my $lc = lc($ucf); + my $uc = uc($lc); + + my $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; + my $pointer_check_rv = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; + + my $assign; + + if ($type =~ /char/){ + $assign = "icalmemory_strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n"; + } else { + $assign = "v;"; + } + + my $union_data; + + if(@{$h{$value}->{'enums'}}){ + $union_data = 'enum'; + + } elsif (exists $union_map{$uc} ){ + $union_data=$union_map{$uc}; + } else { + $union_data = $lc; + } + + if ($opt_c && $autogen) { + + print "\n\n\ +icalvalue* icalvalue_new_${lc} ($type v){\ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\ + $pointer_check\ + icalvalue_set_${lc}((icalvalue*)impl,v);\ + return (icalvalue*)impl;\ +}\ +void icalvalue_set_${lc}(icalvalue* value, $type v) {\ + struct icalvalue_impl* impl; \ + icalerror_check_arg_rv( (value!=0),\"value\");\ + $pointer_check_rv\ + icalerror_check_value_type(value, ICAL_${uc}_VALUE);\ + impl = (struct icalvalue_impl*)value;\n"; + + if( $union_data eq 'string') { + + print " if(impl->data.v_${union_data}!=0) {free((void*)impl->data.v_${union_data});}\n"; + } + + + print "\n\ + impl->data.v_$union_data = $assign \n\ + icalvalue_reset_kind(impl);\n}\n"; + + print "$type\ icalvalue_get_${lc}(const icalvalue* value)\ {\n"; + if ($type =~ m/(\*|int|float)$/) { + print " icalerror_check_arg_rz( (value!=0),\"value\");\n"; + } else { + print " icalerror_check_arg( (value!=0),\"value\");\n"; + } + print " icalerror_check_value_type(value, ICAL_${uc}_VALUE);\ + return ((struct icalvalue_impl*)value)->data.v_${union_data};\n}\n"; + + + } elsif($opt_h && $autogen) { + + print "\n /* $value */ \ +icalvalue* icalvalue_new_${lc}($type v); \ +$type icalvalue_get_${lc}(const icalvalue* value); \ +void icalvalue_set_${lc}(icalvalue* value, ${type} v);\n\n"; + + } + +} + + +if ($opt_h){ + print "#endif /*ICALVALUE_H*/\n"; + } + + +} diff --git a/libkcal/libical/scripts/mkparameterrestrictions.pl b/libkcal/libical/scripts/mkparameterrestrictions.pl new file mode 100755 index 000000000..2c57eb4ca --- /dev/null +++ b/libkcal/libical/scripts/mkparameterrestrictions.pl @@ -0,0 +1,85 @@ +#!/usr/bin/perl + +# Version: 1.0 +# Script last updated: 30May1999 GMD +# Change log: +# <none> + + +# usually open params-in-prop.txt +open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; + +print <<EOM; +/* + ====================================================================== + File: parameterrestrictions.c + + (C) COPYRIGHT 1999 Graham Davison + mailto:g.m.davison\@computer.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + ======================================================================*/ + +/* + * THIS FILE IS MACHINE GENERATED DO NOT EDIT + */ + + +int icalrestriction_is_parameter_allowed(icalproperty_kind prop,icalparameter_kind param) +{ + switch (prop) + { +EOM + +while(<F>) +{ + chop; + + # split line by whitespace + my @v = split(/\s+/,$_); + # property is first item on line + my $prop = shift @v; + my $prop_name = $prop; + if (substr($prop,0,1) eq "X") { $prop = "X"; } + $prop = join("",split(/-/,$prop)); + +print <<EOM; + + /* ${prop_name} */ + case ICAL_${prop}_PROPERTY: + switch (param) + { +EOM + + foreach $param (@v) + { + $param = join("",split(/-/,$param)); + print "\t\t\t\tcase ICAL_${param}_PARAMETER:\n"; + } + +print <<EOM; + return 1; + default: + return 0; + } + +EOM + +} + +print <<EOM; + } + + return 0; +} +EOM diff --git a/libkcal/libical/scripts/mkrestrictionrecords.pl b/libkcal/libical/scripts/mkrestrictionrecords.pl new file mode 100755 index 000000000..dd28d7770 --- /dev/null +++ b/libkcal/libical/scripts/mkrestrictionrecords.pl @@ -0,0 +1,109 @@ +#!/usr/bin/env perl + +# Version: 1.0 +# Script last updated: 30May1999 GMD +# Change log: +# <none> + +# usually open restrictions.csv +open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; + +print <<EOM; +/* + ====================================================================== + File: restrictionrecords.c + + (C) COPYRIGHT 1999 Graham Davison + mailto:g.m.davison\@computer.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + ======================================================================*/ + + +/* + * THIS FILE IS MACHINE GENERATED DO NOT EDIT + */ + + +typedef struct icalrestriction_record { + icalproperty_method method; + icalcomponent_kind component; + icalproperty_kind property; + icalcomponent_kind subcomponent; + icalrestriction_kind restriction; +} icalrestriction_record; + + +icalrestriction_record icalrestriction_records[] = +{ +EOM + +my $last_method = ""; +my $last_component = ""; +my $last_property = ""; +my $need_header = 0; + +while(<F>) +{ + chop; + + # split line at commas + my ($method,$component,$property,$subcomponent,$restriction)=split(/\,/,$_); + + # + #put in code to generate comments here! + # + if ($method ne $last_method) + { + $need_header = 1; + $last_method = $method; + } + if ($component ne $last_component) + { + $need_header = 1; + $last_component = $component; + } + + if ($need_header) + { + print "\n\t/* METHOD: ${method}, COMPONENT: ${component} */\n"; + $need_header = 0; + } + + foreach $item ($component,$property,$subcomponent,$restriction) + { + # handle special cases. + if ($item eq "NONE") + { $item = "NO"; } + else { if (substr($item,0,1) eq "X") + { $item = "X"; }} + + # strip out dashes + $item = join("",split(/-/,$item)); + } + # strip leading V from component names + $component =~ s/^(V?)(\w+?)((SAVINGS)?)((TIME)?)$/$2/; + $subcomponent =~ s/^V(\w+)/$1/; + + print "\t\{ICAL_METHOD_${method},ICAL_${component}_COMPONENT,"; + print "ICAL_${property}_PROPERTY,ICAL_${subcomponent}_COMPONENT,"; + print "ICAL_RESTRICTION_${restriction}\},\n"; + +} + +print <<EOM; + + /* END */ + {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE} +}; +EOM diff --git a/libkcal/libical/scripts/mkrestrictiontable.pl b/libkcal/libical/scripts/mkrestrictiontable.pl new file mode 100755 index 000000000..0e4e65c09 --- /dev/null +++ b/libkcal/libical/scripts/mkrestrictiontable.pl @@ -0,0 +1,98 @@ +#!/usr/bin/env perl + +use Getopt::Std; +getopts('i:'); + +# the argument should be the path to the restriction datafile, usually +# design-data/restrictions.csv +open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!"; + +# Write the file inline by copying everything before a demarcation +# line, and putting the generated data after the demarcation + +if ($opt_i) { + + open(IN,$opt_i) || die "Can't open input file $opt_i"; + + while(<IN>){ + + if (/Do not edit/){ + last; + } + + print; + + } + + print "/* Everything below this line is machine generated. Do not edit. */\n"; + + + close IN; +} + +# First build the property restriction table +print "icalrestriction_property_record icalrestriction_property_records[] = {\n"; + +while(<F>) +{ + + chop; + + s/\#.*$//; + + my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); + + next if !$method; + + if(!$sub) { + $sub = "0"; + } else { + $sub = "icalrestriction_".$sub; + } + + if($prop ne "NONE"){ + print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub},\n"); + } + +} + + +# Print the terminating line +print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE, 0}\n"; + +print "};\n"; + +print "icalrestriction_component_record icalrestriction_component_records[] = {\n"; + + +# Go back through the entire file and build the component restriction table +close(F); +open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!"; + +while(<F>) +{ + + chop; + + s/\#.*$//; + + my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); + + next if !$method; + + if(!$sub) { + $sub = "0"; + } else { + $sub = "icalrestriction_".$sub; + } + + + if($subcomp ne "NONE"){ + print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr},$sub\},\n"); + } + +} + +# print the terminating line +print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE, 0}\n"; +print "};\n"; diff --git a/libkcal/libical/scripts/readvaluesfile.pl b/libkcal/libical/scripts/readvaluesfile.pl new file mode 100644 index 000000000..d5e2d36fd --- /dev/null +++ b/libkcal/libical/scripts/readvaluesfile.pl @@ -0,0 +1,130 @@ + + +sub read_values_file { + + my $path = shift; + my %h; + + open(F,$path) || die "Can't open values file $path"; + + while(<F>){ + + chop; + + s/#.*$//g; + s/\"//g; + + next if ! $_; + + @column = split(/,/,$_); + + my $value_name = $column[0]; + + my $c_type_str = $column[1]; + my $c_autogen = ($c_type_str =~ /\(a\)/); + + my $c_type = $c_type_str; + $c_type =~ s/\(.\)//; + + my $python_type = $column[2]; + my $components = $column[3]; + my $enum_values = $column[4]; + + my @components; + if($components ne "unitary"){ + @components = split(/;/,$components); + } else { + @components = (); + } + + my @enums; + if($enum_values) { + @enums = split(/;/,$enum_values); + + } else { + @enums = (); + } + + $h{$value_name} = { C => [$c_autogen,$c_type], + perl => $perl_type, + python => $python_type, + components=>[@components], + enums=>[@enums] + }; + } + + return %h; +} + +sub read_properties_file { + + my $path = shift; + my %h; + + open(F,$path) || die "Can't open properties file $path"; + + while(<F>){ + + chop; + + s/#.*$//g; + s/\"//g; + + next if ! $_; + + @column = split(/,/,$_); + + my $property_name = $column[0]; + + my $lic_value = $column[1]; + my $default_value = $column[2]; + + $h{$property_name} = { lic_value => $lic_value, + default_value => $default_value + }; + } + + return %h; +} + +sub read_parameters_file { + + my $path = shift; + my %h; + + open(F,$path) || die "Can't open parameters file $path"; + + while(<F>){ + + chop; + + s/#.*$//g; + s/\"//g; + + next if ! $_; + + @column = split(/\,/,$_); + + my $parameter_name = $column[0]; + + my $data_type = $column[1]; + my $enum_string = $column[2]; + + my @enums; + if($enum_string){ + @enums = split(/;/,$enum_string); + } + + $h{$parameter_name} = { C => $data_type, + enums => [@enums] + }; + } + + close(F); + + return %h; +} + + + +1; diff --git a/libkcal/libical/src/Makefile.am b/libkcal/libical/src/Makefile.am new file mode 100644 index 000000000..ef6408034 --- /dev/null +++ b/libkcal/libical/src/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = libical libicalss diff --git a/libkcal/libical/src/libical/Makefile.am b/libkcal/libical/src/libical/Makefile.am new file mode 100644 index 000000000..e0d51321f --- /dev/null +++ b/libkcal/libical/src/libical/Makefile.am @@ -0,0 +1,232 @@ +#====================================================================== +# FILE: Makefile.am +# CREATOR: eric +# +# +# +# (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of either: +# +# The LGPL as published by the Free Software Foundation, version +# 2.1, available at: http://www.fsf.org/copyleft/lesser.html +# +# Or: +# +# The Mozilla Public License Version 1.0. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# The original code is icalcomponent.c +# +#====================================================================== + + +DESIGNDATA = $(srcdir)/../../design-data +ICALSCRIPTS = $(srcdir)/../../scripts + +noinst_LTLIBRARIES = libical.la + +AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\""$(kde_datadir)/libical"\" + +AM_YFLAGS = -d -v -t -pical_yy +AM_LFLAGS = -Pical_yy -olex.yy.c + +INCLUDES = \ + -I$(top_builddir)/libkcal/libical \ + -I$(top_srcdir)/libkcal/libical/src \ + -I$(top_builddir)/libkcal/libical/src \ + -I$(srcdir) + +libical_la_LDFLAGS = -no-undefined + +# Order is important! +libical_la_SOURCES = \ + caldate.c \ + icalarray.c \ + icalattach.c \ + icalderivedparameter.c \ + icalrecur.c \ + icalrestriction.c \ + icalcomponent.c \ + icalenums.c \ + icalerror.c \ + icalmemory.c \ + icalmime.c \ + icalparameter.c \ + icalparser.c \ + icalderivedproperty.c \ + icalproperty.c \ + icaltime.c \ + icalduration.c \ + icalperiod.c \ + icaltimezone.c \ + icaltypes.c \ + icalvalue.c \ + icalderivedvalue.c \ + pvl.c \ + sspm.c \ + vsnprintf.c + + +noinst_HEADERS = ical.h \ + astime.h \ + icalarray.h \ + icalattach.h \ + icalattachimpl.h \ + icalderivedparameter.h \ + icalrecur.h \ + icalcomponent.h \ + icalenums.h \ + icalerror.h \ + icalmemory.h \ + icalmime.h \ + icalparameter.h \ + icalparameterimpl.h \ + icalparser.h \ + icalderivedproperty.h \ + icalproperty.h \ + icaltime.h \ + icalduration.h \ + icalperiod.h \ + icaltimezone.h \ + icaltypes.h \ + icalvalue.h \ + icalvalueimpl.h \ + icalderivedvalue.h \ + pvl.h \ + sspm.h + +# ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. It +# is required to make the combined header ical.h properly +COMBINEDHEADERS = \ + $(srcdir)/icalversion.h \ + $(srcdir)/icaltime.h \ + $(srcdir)/icalduration.h \ + $(srcdir)/icalperiod.h \ + $(srcdir)/icalenums.h \ + $(srcdir)/icaltypes.h \ + $(srcdir)/icalrecur.h \ + $(srcdir)/icalattach.h \ + icalderivedvalue.h \ + icalderivedparameter.h \ + $(srcdir)/icalvalue.h \ + $(srcdir)/icalparameter.h \ + icalderivedproperty.h \ + $(srcdir)/icalproperty.h \ + $(srcdir)/pvl.h \ + $(srcdir)/icalarray.h \ + $(srcdir)/icalcomponent.h \ + $(srcdir)/icaltimezone.h \ + $(srcdir)/icalparser.h \ + $(srcdir)/icalmemory.h \ + $(srcdir)/icalerror.h \ + $(srcdir)/icalrestriction.h \ + $(srcdir)/sspm.h \ + $(srcdir)/icalmime.h + +ical.h: $(COMBINEDHEADERS) + echo '#ifdef __cplusplus' > ical.h + echo 'extern "C" {' >> ical.h + echo '#endif' >> ical.h + cat $(COMBINEDHEADERS) \ + | egrep -v "#include.*\"ical" \ + | egrep -v "#include.*\"config" \ + | egrep -v "#include.*\"pvl\.h\"" \ + | egrep -v '\$$(Id|Locker): .+\$$'>> ical.h + echo '#ifdef __cplusplus' >> ical.h + echo '}' >> ical.h + echo '#endif' >> ical.h + +# parameters + +PARAMETERDEPS = \ + $(ICALSCRIPTS)/mkderivedparameters.pl \ + $(DESIGNDATA)/parameters.csv \ + icalderivedparameter.c.in \ + icalderivedparameter.h.in + +icalderivedparameter.h: $(PARAMETERDEPS) + $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.h.in -h $(DESIGNDATA)/parameters.csv > icalderivedparameter.h || rm -f icalderivedparameter.h + + +icalderivedparameter.c: $(PARAMETERDEPS) icalparameter.h + $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.c.in -c $(DESIGNDATA)/parameters.csv > icalderivedparameter.c || rm -f icalderivedparameter.c + + +# properties + +PROPERTYDEPS = \ + $(ICALSCRIPTS)/mkderivedproperties.pl \ + $(DESIGNDATA)/properties.csv \ + $(DESIGNDATA)/value-types.csv \ + icalderivedproperty.c.in \ + icalderivedproperty.h.in + + +icalderivedproperty.h: $(PROPERTYDEPS) + $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ + -i $(srcdir)/icalderivedproperty.h.in -h $(DESIGNDATA)/properties.csv\ + ${DESIGNDATA}/value-types.csv > icalderivedproperty.h || rm -f icalderivedproperty.h + +icalderivedproperty.c: $(PROPERTYDEPS) icalproperty.h + $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ + -i $(srcdir)/icalderivedproperty.c.in -c $(DESIGNDATA)/properties.csv \ + ${DESIGNDATA}/value-types.csv > icalderivedproperty.c || rm -f icalderivedproperty.c + +# restrictions + +RESTRICTIONDEPS = \ + $(ICALSCRIPTS)/mkrestrictiontable.pl \ + $(DESIGNDATA)/restrictions.csv \ + icalrestriction.c.in + +icalrestriction.c: $(RESTRICTIONDEPS) + $(PERL) $(ICALSCRIPTS)/mkrestrictiontable.pl -i $(srcdir)/icalrestriction.c.in \ + $(DESIGNDATA)/restrictions.csv > icalrestriction.c || rm -f icalrestriction.c + +# values + +VALUEDEPS = \ + $(ICALSCRIPTS)/mkderivedvalues.pl \ + $(DESIGNDATA)/value-types.csv \ + icalderivedvalue.c.in \ + icalderivedvalue.h.in + +icalderivedvalue.h: $(VALUEDEPS) + $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ + -i $(srcdir)/icalderivedvalue.h.in -h $(DESIGNDATA)/value-types.csv > icalderivedvalue.h || rm -f icalderivedvalue.h + +icalderivedvalue.c: $(VALUEDEPS) icalderivedvalue.h + $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ + -i $(srcdir)/icalderivedvalue.c.in -c $(DESIGNDATA)/value-types.csv > icalderivedvalue.c || rm -f icalderivedvalue.c + +# housekeeping +CLEANFILES = y.output \ + icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h ical.h \ + icalderivedvalue.c icalderivedproperty.c icalderivedparameter.c \ + icalrestriction.c + +EXTRA_DIST = \ + icalderivedparameter.c.in \ + icalderivedparameter.h.in \ + icalderivedproperty.c.in \ + icalderivedproperty.h.in \ + icalrestriction.c.in \ + icalderivedvalue.c.in \ + icalderivedvalue.h.in \ + icalversion.h.in + + +icalcomponent.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalderivedparameter.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalderivedproperty.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalderivedvalue.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalduration.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalmime.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalparameter.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalparser.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalproperty.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalrestriction.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icaltime.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h +icalvalue.lo: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h diff --git a/libkcal/libical/src/libical/astime.h b/libkcal/libical/src/libical/astime.h new file mode 100644 index 000000000..6962c060a --- /dev/null +++ b/libkcal/libical/src/libical/astime.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1986-2000, Hiram Clawson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * Neither name of The Museum of Hiram nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file astime.h + * @brief contains definitions of structures used for time calculations. + */ + +#ifndef _astime_h_ +#define _astime_h_ + +typedef struct ut_instant { + double j_date; /**< julian decimal date, 0 = 01 Jan 4713 BC 12 HR UT */ + long year; /**< year, valid range [-4,713, +2,147,483,647] */ + int month; /**< [1-12] */ + int day; /**< [1-31] */ + int i_hour; /**< [0-23] */ + int i_minute; /**< [0-59] */ + int i_second; /**< [0-59] */ + double d_hour; /**< [0.0-23.9999] includes minute and second */ + double d_minute; /**< [0.0-59.9999] includes second */ + double d_second; /**< [0.0-59.9999] */ + int weekday; /**< [0-6] */ + int day_of_year; /**< [1-366] */ +} UTinstant, * UTinstantPtr; + +/* Functions in caldate.c */ + +long caldat( UTinstantPtr ); /** converts julian date to year,mo,da */ +double juldat( UTinstantPtr ); /** returns julian day from year,mo,da */ + +#endif /* _astime_h_ */ diff --git a/libkcal/libical/src/libical/caldate.c b/libkcal/libical/src/libical/caldate.c new file mode 100644 index 000000000..f5554f66f --- /dev/null +++ b/libkcal/libical/src/libical/caldate.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 1986-2000, Hiram Clawson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * Neither name of The Museum of Hiram nor the names of + * its contributors may be used to endorse or promote products + * derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "astime.h" /* time structures */ + +/** + * caldat computes the day of the week, the day of the year + * the gregorian (or julian) calendar date and the universal + * time from the julian decimal date. + * for astronomical purposes, The Gregorian calendar reform occurred + * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar. + + * Input: a ut_instant structure pointer, where the j_date element + * has been set. ( = 0 for 01 Jan 4713 B.C. 12 HR UT ) + * + * output: will set all the other elements of the structure. + * As a convienence, the function will also return the year. + * + * Reference: Astronomial formulae for calculators, meeus, p 23 + * from fortran program by F. Espenak - April 1982 Page 277, + * 50 Year canon of solar eclipses: 1986-2035 + * + */ + +long caldat( date ) +struct ut_instant * date; +{ + double frac; + long jd; + long ka; + long kb; + long kc; + long kd; + long ke; + long ialp; + + jd = (long) (date->j_date + 0.5); /* integer julian date */ + frac = date->j_date + 0.5 - (double) jd + 1.0e-10; /* day fraction */ + ka = (long) jd; + if ( jd >= 2299161L ) + { + ialp = ( (double) jd - 1867216.25 ) / ( 36524.25 ); + ka = jd + 1L + ialp - ( ialp >> 2 ); + } + kb = ka + 1524L; + kc = ( (double) kb - 122.1 ) / 365.25; + kd = (double) kc * 365.25; + ke = (double) ( kb - kd ) / 30.6001; + date->day = kb - kd - ((long) ( (double) ke * 30.6001 )); + if ( ke > 13L ) + date->month = ke - 13L; + else + date->month = ke - 1L; + if ( (date->month == 2) && (date->day > 28) ) + date->day = 29; + if ( (date->month == 2) && (date->day == 29) && (ke == 3L) ) + date->year = kc - 4716L; + else if ( date->month > 2 ) + date->year = kc - 4716L; + else + date->year = kc - 4715L; + date->i_hour = date->d_hour = frac * 24.0; /* hour */ + date->i_minute = date->d_minute = + ( date->d_hour - (double) date->i_hour ) * 60.0; /* minute */ + date->i_second = date->d_second = + ( date->d_minute - (double) date->i_minute ) * 60.0;/* second */ + date->weekday = (jd + 1L) % 7L; /* day of week */ + if ( date->year == ((date->year >> 2) << 2) ) + date->day_of_year = + ( ( 275 * date->month ) / 9) + - ((date->month + 9) / 12) + + date->day - 30; + else + date->day_of_year = + ( ( 275 * date->month ) / 9) + - (((date->month + 9) / 12) << 1) + + date->day - 30; + return( date->year ); +} + +/** + * juldat computes the julian decimal date (j_date) from + * the gregorian (or Julian) calendar date. + * for astronomical purposes, The Gregorian calendar reform occurred + * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar. + * Input: a ut_instant structure pointer where Day, Month, Year and + * i_hour, i_minute, d_second have been set for the date + * in question. + * + * Output: the j_date and weekday elements of the structure will be set. + * Also, the return value of the function will be the j_date too. + * + * Reference: Astronomial formulae for calculators, meeus, p 23 + * from fortran program by F. Espenak - April 1982 Page 276, + * 50 Year canon of solar eclipses: 1986-2035 + */ + +double juldat( date ) +struct ut_instant * date; +{ + double frac, gyr; + long iy0, im0; + long ia, ib; + long jd; + + /* decimal day fraction */ + frac = (( double)date->i_hour/ 24.0) + + ((double) date->i_minute / 1440.0) + + (date->d_second / 86400.0); + /* convert date to format YYYY.MMDDdd */ + gyr = (double) date->year + + (0.01 * (double) date->month) + + (0.0001 * (double) date->day) + + (0.0001 * frac) + 1.0e-9; + /* conversion factors */ + if ( date->month <= 2 ) + { + iy0 = date->year - 1L; + im0 = date->month + 12; + } + else + { + iy0 = date->year; + im0 = date->month; + } + ia = iy0 / 100L; + ib = 2L - ia + (ia >> 2); + /* calculate julian date */ + if ( date->year < 0L ) + jd = (long) ((365.25 * (double) iy0) - 0.75) + + (long) (30.6001 * (im0 + 1L) ) + + (long) date->day + 1720994L; + else + jd = (long) (365.25 * (double) iy0) + + (long) (30.6001 * (double) (im0 + 1L)) + + (long) date->day + 1720994L; + if ( gyr >= 1582.1015 ) /* on or after 15 October 1582 */ + jd += ib; + date->j_date = (double) jd + frac + 0.5; + jd = (long) (date->j_date + 0.5); + date->weekday = (jd + 1L) % 7L; + return( date->j_date ); +} /* end of double juldat( date ) */ diff --git a/libkcal/libical/src/libical/icalarray.c b/libkcal/libical/src/libical/icalarray.c new file mode 100644 index 000000000..05e764c78 --- /dev/null +++ b/libkcal/libical/src/libical/icalarray.c @@ -0,0 +1,161 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- + ====================================================================== + FILE: icalarray.c + CREATOR: Damon Chaplin 07 March 2001 + + + (C) COPYRIGHT 2001, Ximian, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + + ======================================================================*/ + +/** @file icalarray.c + * + * @brief An array of arbitrarily-sized elements which grows + * dynamically as elements are added. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdlib.h> +#include <string.h> + +#include "icalarray.h" +#include "icalerror.h" + + +static void icalarray_expand (icalarray *array, + int space_needed); + +/** @brief Constructor + */ + +icalarray* +icalarray_new (int element_size, + int increment_size) +{ + icalarray *array; + + array = (icalarray*) malloc (sizeof (icalarray)); + if (!array) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return NULL; + } + + array->element_size = element_size; + array->increment_size = increment_size; + array->num_elements = 0; + array->space_allocated = 0; + array->data = NULL; + + return array; +} + +/** @brief Destructor + */ + +void +icalarray_free (icalarray *array) +{ + if (array->data) + free (array->data); + free (array); +} + + +void +icalarray_append (icalarray *array, + const void *element) +{ + if (array->num_elements >= array->space_allocated) + icalarray_expand (array, 1); + + memcpy ((char *)(array->data) + ( array->num_elements * array->element_size ), element, + array->element_size); + array->num_elements++; +} + + +void* +icalarray_element_at (icalarray *array, + int position) +{ + assert (position >= 0); + assert ((unsigned int)position < array->num_elements); + + return (char *)(array->data) + (position * array->element_size); +} + + +void +icalarray_remove_element_at (icalarray *array, + int position) +{ + void *dest; + int elements_to_move; + + assert (position >= 0); + assert ((unsigned int)position < array->num_elements); + + dest = (char *)array->data + (position * array->element_size); + elements_to_move = array->num_elements - position - 1; + + if (elements_to_move > 0) + memmove (dest, (char *)dest + array->element_size, + elements_to_move * array->element_size); + + array->num_elements--; +} + + +void +icalarray_sort (icalarray *array, + int (*compare) (const void *, + const void *)) +{ + qsort (array->data, array->num_elements, array->element_size, compare); +} + + +static void +icalarray_expand (icalarray *array, + int space_needed) +{ + int new_space_allocated; + void *new_data; + + new_space_allocated = array->space_allocated + array->increment_size; + + if ((unsigned int)space_needed > array->increment_size) + new_space_allocated += space_needed; + + /* + new_data = realloc (array->data, + new_space_allocated * array->element_size); + */ + new_data = malloc(new_space_allocated * array->element_size); + + if (new_data) { + memcpy(new_data,array->data,array->element_size*array->space_allocated); + free(array->data); + array->data = new_data; + array->space_allocated = new_space_allocated; + } else { + icalerror_set_errno(ICAL_ALLOCATION_ERROR); + } +} + + diff --git a/libkcal/libical/src/libical/icalarray.h b/libkcal/libical/src/libical/icalarray.h new file mode 100644 index 000000000..16d390343 --- /dev/null +++ b/libkcal/libical/src/libical/icalarray.h @@ -0,0 +1,61 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/*====================================================================== + FILE: icalarray.h + CREATOR: Damon Chaplin 07 March 2001 + + + + (C) COPYRIGHT 2001, Ximian, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + +======================================================================*/ + + +#ifndef ICALARRAY_H +#define ICALARRAY_H + +/** @file icalarray.h + * + * @brief An array of arbitrarily-sized elements which grows + * dynamically as elements are added. + */ + +typedef struct _icalarray icalarray; +struct _icalarray { + unsigned int element_size; + unsigned int increment_size; + unsigned int num_elements; + unsigned int space_allocated; + void *data; +}; + + + +icalarray *icalarray_new (int element_size, + int increment_size); +void icalarray_free (icalarray *array); + +void icalarray_append (icalarray *array, + const void *element); +void icalarray_remove_element_at (icalarray *array, + int position); + +void *icalarray_element_at (icalarray *array, + int position); + +void icalarray_sort (icalarray *array, + int (*compare) (const void *, const void *)); + + +#endif /* ICALARRAY_H */ diff --git a/libkcal/libical/src/libical/icalattach.c b/libkcal/libical/src/libical/icalattach.c new file mode 100644 index 000000000..23cdbeefd --- /dev/null +++ b/libkcal/libical/src/libical/icalattach.c @@ -0,0 +1,137 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalattach.c + CREATOR: acampi 28 May 02 + + + + (C) COPYRIGHT 2000, Andrea Campi <a.campi@inet.it> + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icaltypes.c + + ======================================================================*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icaltypes.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "icalattachimpl.h" +#include <stdlib.h> /* for malloc and abs() */ +#include <errno.h> /* for errno */ +#include <string.h> /* for icalmemory_strdup */ +#include <assert.h> + +icalattach * +icalattach_new_from_url (const char *url) +{ + icalattach *attach; + char *url_copy; + + icalerror_check_arg_rz ((url != NULL), "url"); + + if ((attach = malloc (sizeof (icalattach))) == NULL) { + errno = ENOMEM; + return NULL; + } + + if ((url_copy = strdup (url)) == NULL) { + free (attach); + errno = ENOMEM; + return NULL; + } + + attach->refcount = 1; + attach->is_url = 1; + attach->u.url.url = url_copy; + + return attach; +} + +icalattach * +icalattach_new_from_data (unsigned char *data, icalattach_free_fn_t free_fn, + void *free_fn_data) +{ + icalattach *attach; + + icalerror_check_arg_rz ((data != NULL), "data"); + + if ((attach = malloc (sizeof (icalattach))) == NULL) { + errno = ENOMEM; + return NULL; + } + + attach->refcount = 1; + attach->is_url = 0; + attach->u.data.data = data; + attach->u.data.free_fn = free_fn; + attach->u.data.free_fn_data = free_fn_data; + + return attach; +} + +void +icalattach_ref (icalattach *attach) +{ + icalerror_check_arg_rv ((attach != NULL), "attach"); + icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0"); + + attach->refcount++; +} + +void +icalattach_unref (icalattach *attach) +{ + icalerror_check_arg_rv ((attach != NULL), "attach"); + icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0"); + + attach->refcount--; + + if (attach->refcount != 0) + return; + + if (attach->is_url) + free (attach->u.url.url); + else if (attach->u.data.free_fn) + (* attach->u.data.free_fn) (attach->u.data.data, attach->u.data.free_fn_data); + + free (attach); +} + +int +icalattach_get_is_url (icalattach *attach) +{ + icalerror_check_arg_rz ((attach != NULL), "attach"); + + return attach->is_url ? 1 : 0; +} + +const char * +icalattach_get_url (icalattach *attach) +{ + icalerror_check_arg_rz ((attach != NULL), "attach"); + icalerror_check_arg_rz ((attach->is_url), "attach->is_url"); + + return attach->u.url.url; +} + +unsigned char * +icalattach_get_data (icalattach *attach) +{ + icalerror_check_arg_rz ((attach != NULL), "attach"); + icalerror_check_arg_rz ((!attach->is_url), "!attach->is_url"); + + return attach->u.data.data; +} diff --git a/libkcal/libical/src/libical/icalattach.h b/libkcal/libical/src/libical/icalattach.h new file mode 100644 index 000000000..4189d4bb6 --- /dev/null +++ b/libkcal/libical/src/libical/icalattach.h @@ -0,0 +1,60 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalattach.h + CREATOR: acampi 28 May 02 + + + (C) COPYRIGHT 2002, Andrea Campi <a.campi@inet.it> + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalattach.h + +======================================================================*/ + +#ifndef ICALATTACH_H +#define ICALATTACH_H + + +typedef struct icalattach_impl icalattach; + +typedef void (* icalattach_free_fn_t) (unsigned char *data, void *user_data); + +icalattach *icalattach_new_from_url (const char *url); +icalattach *icalattach_new_from_data (unsigned char *data, + icalattach_free_fn_t free_fn, void *free_fn_data); + +void icalattach_ref (icalattach *attach); +void icalattach_unref (icalattach *attach); + +int icalattach_get_is_url (icalattach *attach); +const char *icalattach_get_url (icalattach *attach); +unsigned char *icalattach_get_data (icalattach *attach); + +struct icalattachtype* icalattachtype_new(void); +void icalattachtype_add_reference(struct icalattachtype* v); +void icalattachtype_free(struct icalattachtype* v); + +void icalattachtype_set_url(struct icalattachtype* v, char* url); +char* icalattachtype_get_url(struct icalattachtype* v); + +void icalattachtype_set_base64(struct icalattachtype* v, char* base64, + int owns); +char* icalattachtype_get_base64(struct icalattachtype* v); + +void icalattachtype_set_binary(struct icalattachtype* v, char* binary, + int owns); +void* icalattachtype_get_binary(struct icalattachtype* v); + + + +#endif /* !ICALATTACH_H */ diff --git a/libkcal/libical/src/libical/icalattachimpl.h b/libkcal/libical/src/libical/icalattachimpl.h new file mode 100644 index 000000000..08c22fd85 --- /dev/null +++ b/libkcal/libical/src/libical/icalattachimpl.h @@ -0,0 +1,58 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalattachimpl.h + CREATOR: acampi 28 May 02 + + + + (C) COPYRIGHT 2000, Andrea Campi <a.campi@inet.it> + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalattachimpl.h + + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifndef ICALATTACHIMPL_H +#define ICALATTACHIMPL_H + +#include "icalattach.h" + +/* Private structure for ATTACH values */ +struct icalattach_impl { + /* Reference count */ + int refcount; + + union { + /* URL attachment data */ + struct { + char *url; + } url; + + /* Inline data */ + struct { + unsigned char *data; + icalattach_free_fn_t free_fn; + void *free_fn_data; + } data; + } u; + + /* TRUE if URL, FALSE if inline data */ + unsigned int is_url : 1; +}; + +#endif diff --git a/libkcal/libical/src/libical/icalcomponent.c b/libkcal/libical/src/libical/icalcomponent.c new file mode 100644 index 000000000..bab0e72a6 --- /dev/null +++ b/libkcal/libical/src/libical/icalcomponent.c @@ -0,0 +1,2598 @@ +/*====================================================================== + FILE: icalcomponent.c + CREATOR: eric 28 April 1999 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalcomponent.c + +======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icalcomponent.h" +#include "pvl.h" /* "Pointer-to-void list" */ +#include "icalerror.h" +#include "icalmemory.h" +#include "icalenums.h" +#include "icaltime.h" +#include "icalarray.h" +#include "icaltimezone.h" +#include "icalduration.h" +#include "icalperiod.h" +#include "icalparser.h" +#include "icalrestriction.h" + +#include <stdlib.h> /* for malloc */ +#include <stdarg.h> /* for va_list, etc */ +#include <errno.h> +#include <assert.h> +#include <stdio.h> /* for fprintf */ +#include <string.h> /* for strdup */ +#include <limits.h> /* for INT_MAX */ + +struct icalcomponent_impl +{ + char id[5]; + icalcomponent_kind kind; + char* x_name; + pvl_list properties; + pvl_elem property_iterator; + pvl_list components; + pvl_elem component_iterator; + icalcomponent* parent; + + /** An array of icaltimezone structs. We use this so we can do fast + lookup of timezones using binary searches. timezones_sorted is + set to 0 whenever we add a timezone, so we remember to sort the + array before doing a binary search. */ + icalarray* timezones; + int timezones_sorted; +}; + +/* icalproperty functions that only components get to use */ +void icalproperty_set_parent(icalproperty* property, + icalcomponent* component); +icalcomponent* icalproperty_get_parent(icalproperty* property); +void icalcomponent_add_children(icalcomponent *impl,va_list args); +static icalcomponent* icalcomponent_new_impl (icalcomponent_kind kind); + +static void icalcomponent_merge_vtimezone (icalcomponent *comp, + icalcomponent *vtimezone, + icalarray *tzids_to_rename); +static void icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp, + icalcomponent *vtimezone, + icalproperty *tzid_prop, + const char *tzid, + icalarray *tzids_to_rename); +static unsigned int icalcomponent_get_tzid_prefix_len (const char *tzid); +static void icalcomponent_rename_tzids(icalcomponent* comp, + icalarray* rename_table); +static void icalcomponent_rename_tzids_callback(icalparameter *param, + void *data); +static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1, + icalcomponent *vtimezone2); +static int icalcomponent_compare_timezone_fn (const void *elem1, + const void *elem2); + + +void icalcomponent_add_children(icalcomponent *impl, va_list args) +{ + void* vp; + + while((vp = va_arg(args, void*)) != 0) { + + assert (icalcomponent_isa_component(vp) != 0 || + icalproperty_isa_property(vp) != 0 ) ; + + if (icalcomponent_isa_component(vp) != 0 ){ + icalcomponent_add_component(impl, (icalcomponent*)vp); + + } else if (icalproperty_isa_property(vp) != 0 ){ + icalcomponent_add_property(impl, (icalproperty*)vp); + } + } +} + +static icalcomponent* +icalcomponent_new_impl (icalcomponent_kind kind) +{ + icalcomponent* comp; + + if (!icalcomponent_kind_is_valid(kind)) + return NULL; + + if ( ( comp = (icalcomponent*) malloc(sizeof(icalcomponent))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + strcpy(comp->id,"comp"); + + comp->kind = kind; + comp->properties = pvl_newlist(); + comp->property_iterator = 0; + comp->components = pvl_newlist(); + comp->component_iterator = 0; + comp->x_name = 0; + comp->parent = 0; + comp->timezones = NULL; + comp->timezones_sorted = 1; + + return comp; +} + +/** @brief Constructor + */ +icalcomponent* +icalcomponent_new (icalcomponent_kind kind) +{ + return icalcomponent_new_impl(kind); +} + +/** @brief Constructor + */ +icalcomponent* +icalcomponent_vanew (icalcomponent_kind kind, ...) +{ + va_list args; + + icalcomponent *impl = icalcomponent_new_impl(kind); + + if (impl == 0){ + return 0; + } + + va_start(args,kind); + icalcomponent_add_children(impl, args); + va_end(args); + + return impl; +} + +/** @brief Constructor + */ +icalcomponent* icalcomponent_new_from_string(char* str) +{ + return icalparser_parse_string(str); +} + +/** @brief Constructor + */ +icalcomponent* icalcomponent_new_clone(icalcomponent* old) +{ + icalcomponent *new; + icalproperty *p; + icalcomponent *c; + pvl_elem itr; + + icalerror_check_arg_rz( (old!=0), "component"); + + new = icalcomponent_new_impl(old->kind); + + if (new == 0){ + return 0; + } + + + for( itr = pvl_head(old->properties); + itr != 0; + itr = pvl_next(itr)) + { + p = (icalproperty*)pvl_data(itr); + icalcomponent_add_property(new,icalproperty_new_clone(p)); + } + + + for( itr = pvl_head(old->components); + itr != 0; + itr = pvl_next(itr)) + { + c = (icalcomponent*)pvl_data(itr); + icalcomponent_add_component(new,icalcomponent_new_clone(c)); + } + + return new; + +} + +/*** @brief Destructor + */ +void +icalcomponent_free (icalcomponent* c) +{ + icalproperty* prop; + icalcomponent* comp; + + icalerror_check_arg_rv( (c!=0), "component"); + +#ifdef ICAL_FREE_ON_LIST_IS_ERROR + icalerror_assert( (c->parent ==0),"Tried to free a component that is still attached to a parent component"); +#else + if(c->parent != 0){ + return; + } +#endif + + if(c != 0 ){ + + if ( c->properties != 0 ) + { + while( (prop=pvl_pop(c->properties)) != 0){ + assert(prop != 0); + icalproperty_set_parent(prop,0); + icalproperty_free(prop); + } + pvl_free(c->properties); + } + + + while( (comp=pvl_data(pvl_head(c->components))) != 0){ + assert(comp!=0); + icalcomponent_remove_component(c,comp); + icalcomponent_free(comp); + } + + pvl_free(c->components); + + if (c->x_name != 0) { + free(c->x_name); + } + + if (c->timezones) + icaltimezone_array_free (c->timezones); + + c->kind = ICAL_NO_COMPONENT; + c->properties = 0; + c->property_iterator = 0; + c->components = 0; + c->component_iterator = 0; + c->x_name = 0; + c->id[0] = 'X'; + c->timezones = NULL; + + free(c); + } +} + +char* +icalcomponent_as_ical_string (icalcomponent* impl) +{ + char* buf, *out_buf; + const char* tmp_buf; + size_t buf_size = 1024; + char* buf_ptr = 0; + pvl_elem itr; + +/* RFC 2445 explicitly says that the newline is *ALWAYS* a \r\n (CRLF)!!!! */ +char newline[] = "\r\n"; +/* WIN32 automatically adds the \r, Anybody else need it? +#ifdef ICAL_UNIX_NEWLINE + char newline[] = "\n"; +#else + char newline[] = "\r\n"; +#endif +*/ + + icalcomponent *c; + icalproperty *p; + icalcomponent_kind kind = icalcomponent_isa(impl); + + const char* kind_string; + + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + icalerror_check_arg_rz( (impl!=0), "component"); + icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT"); + + kind_string = icalcomponent_kind_to_string(kind); + + icalerror_check_arg_rz( (kind_string!=0),"Unknown kind of component"); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + + + + for( itr = pvl_head(impl->properties); + itr != 0; + itr = pvl_next(itr)) + { + p = (icalproperty*)pvl_data(itr); + + icalerror_assert((p!=0),"Got a null property"); + tmp_buf = icalproperty_as_ical_string(p); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); + } + + + for( itr = pvl_head(impl->components); + itr != 0; + itr = pvl_next(itr)) + { + c = (icalcomponent*)pvl_data(itr); + + tmp_buf = icalcomponent_as_ical_string(c); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); + + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, + icalcomponent_kind_to_string(kind)); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + + out_buf = icalmemory_tmp_copy(buf); + free(buf); + + return out_buf; +} + + +int +icalcomponent_is_valid (icalcomponent* component) +{ + if ( (strcmp(component->id,"comp") == 0) && + component->kind != ICAL_NO_COMPONENT){ + return 1; + } else { + return 0; + } + +} + + +icalcomponent_kind +icalcomponent_isa (const icalcomponent* component) +{ + icalerror_check_arg_rx( (component!=0), "component", ICAL_NO_COMPONENT); + + if(component != 0) + { + return component->kind; + } + + return ICAL_NO_COMPONENT; +} + + +int +icalcomponent_isa_component (void* component) +{ + icalcomponent *impl = component; + + icalerror_check_arg_rz( (component!=0), "component"); + + if (strcmp(impl->id,"comp") == 0) { + return 1; + } else { + return 0; + } + +} + +void +icalcomponent_add_property (icalcomponent* component, icalproperty* property) +{ + icalerror_check_arg_rv( (component!=0), "component"); + icalerror_check_arg_rv( (property!=0), "property"); + + icalerror_assert( (!icalproperty_get_parent(property)),"The property has already been added to a component. Remove the property with icalcomponent_remove_property before calling icalcomponent_add_property"); + + icalproperty_set_parent(property,component); + + pvl_push(component->properties,property); +} + + +void +icalcomponent_remove_property (icalcomponent* component, icalproperty* property) +{ + pvl_elem itr, next_itr; + + icalerror_check_arg_rv( (component!=0), "component"); + icalerror_check_arg_rv( (property!=0), "property"); + + icalerror_assert( (icalproperty_get_parent(property)),"The property is not a member of a component"); + + + for( itr = pvl_head(component->properties); + itr != 0; + itr = next_itr) + { + next_itr = pvl_next(itr); + + if( pvl_data(itr) == (void*)property ){ + + if (component->property_iterator == itr){ + component->property_iterator = pvl_next(itr); + } + + pvl_remove( component->properties, itr); + icalproperty_set_parent(property,0); + } + } +} + +int +icalcomponent_count_properties (icalcomponent* component, + icalproperty_kind kind) +{ + int count=0; + pvl_elem itr; + + icalerror_check_arg_rz( (component!=0), "component"); + + for( itr = pvl_head(component->properties); + itr != 0; + itr = pvl_next(itr)) + { + if(kind == icalproperty_isa((icalproperty*)pvl_data(itr)) || + kind == ICAL_ANY_PROPERTY){ + count++; + } + } + + + return count; + +} + +icalproperty* icalcomponent_get_current_property (icalcomponent* component) +{ + icalerror_check_arg_rz( (component!=0),"component"); + + if ((component->property_iterator==0)){ + return 0; + } + + return (icalproperty*) pvl_data(component->property_iterator); +} + +icalproperty* +icalcomponent_get_first_property (icalcomponent* c, icalproperty_kind kind) +{ + icalerror_check_arg_rz( (c!=0),"component"); + + for( c->property_iterator = pvl_head(c->properties); + c->property_iterator != 0; + c->property_iterator = pvl_next(c->property_iterator)) { + + icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); + + if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { + + return p; + } + } + return 0; +} + +icalproperty* +icalcomponent_get_next_property (icalcomponent* c, icalproperty_kind kind) +{ + icalerror_check_arg_rz( (c!=0),"component"); + + if (c->property_iterator == 0){ + return 0; + } + + for( c->property_iterator = pvl_next(c->property_iterator); + c->property_iterator != 0; + c->property_iterator = pvl_next(c->property_iterator)) { + + icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); + + if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { + + return p; + } + } + + return 0; +} + + +icalproperty** +icalcomponent_get_properties (icalcomponent* component, icalproperty_kind kind); + + +void +icalcomponent_add_component (icalcomponent* parent, icalcomponent* child) +{ + icalerror_check_arg_rv( (parent!=0), "parent"); + icalerror_check_arg_rv( (child!=0), "child"); + + if (child->parent !=0) { + icalerror_set_errno(ICAL_USAGE_ERROR); + } + + child->parent = parent; + + pvl_push(parent->components,child); + + /* If the new component is a VTIMEZONE, add it to our array. */ + if (child->kind == ICAL_VTIMEZONE_COMPONENT) { + /* FIXME: Currently we are also creating this array when loading in + a builtin VTIMEZONE, when we don't need it. */ + if (!parent->timezones) + parent->timezones = icaltimezone_array_new (); + + icaltimezone_array_append_from_vtimezone (parent->timezones, child); + + /* Flag that we need to sort it before doing any binary searches. */ + parent->timezones_sorted = 0; + } +} + + +void +icalcomponent_remove_component (icalcomponent* parent, icalcomponent* child) +{ + pvl_elem itr, next_itr; + + icalerror_check_arg_rv( (parent!=0), "parent"); + icalerror_check_arg_rv( (child!=0), "child"); + + /* If the component is a VTIMEZONE, remove it from our array as well. */ + if (child->kind == ICAL_VTIMEZONE_COMPONENT) { + icaltimezone *zone; + int i, num_elements; + + num_elements = parent->timezones ? parent->timezones->num_elements : 0; + for (i = 0; i < num_elements; i++) { + zone = icalarray_element_at (parent->timezones, i); + if (icaltimezone_get_component (zone) == child) { + icaltimezone_free (zone, 0); + icalarray_remove_element_at (parent->timezones, i); + break; + } + } + } + + for( itr = pvl_head(parent->components); + itr != 0; + itr = next_itr) + { + next_itr = pvl_next(itr); + + if( pvl_data(itr) == (void*)child ){ + + if (parent->component_iterator == itr){ + /* Don't let the current iterator become invalid */ + + /* HACK. The semantics for this are troubling. */ + parent->component_iterator = + pvl_next(parent->component_iterator); + + } + pvl_remove( parent->components, itr); + child->parent = 0; + break; + } + } +} + + +int +icalcomponent_count_components (icalcomponent* component, + icalcomponent_kind kind) +{ + int count=0; + pvl_elem itr; + + icalerror_check_arg_rz( (component!=0), "component"); + + for( itr = pvl_head(component->components); + itr != 0; + itr = pvl_next(itr)) + { + if(kind == icalcomponent_isa((icalcomponent*)pvl_data(itr)) || + kind == ICAL_ANY_COMPONENT){ + count++; + } + } + + return count; +} + +icalcomponent* +icalcomponent_get_current_component(icalcomponent* component) +{ + icalerror_check_arg_rz( (component!=0),"component"); + + if (component->component_iterator == 0){ + return 0; + } + + return (icalcomponent*) pvl_data(component->component_iterator); +} + +icalcomponent* +icalcomponent_get_first_component (icalcomponent* c, + icalcomponent_kind kind) +{ + icalerror_check_arg_rz( (c!=0),"component"); + + for( c->component_iterator = pvl_head(c->components); + c->component_iterator != 0; + c->component_iterator = pvl_next(c->component_iterator)) { + + icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); + + if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { + + return p; + } + } + + return 0; +} + + +icalcomponent* +icalcomponent_get_next_component (icalcomponent* c, icalcomponent_kind kind) +{ + icalerror_check_arg_rz( (c!=0),"component"); + + if (c->component_iterator == 0){ + return 0; + } + + for( c->component_iterator = pvl_next(c->component_iterator); + c->component_iterator != 0; + c->component_iterator = pvl_next(c->component_iterator)) { + + icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); + + if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { + + return p; + } + } + + return 0; +} + +icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c) +{ + icalcomponent *comp; + + for(comp = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT); + comp != 0; + comp = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){ + + icalcomponent_kind kind = icalcomponent_isa(comp); + + if(kind == ICAL_VEVENT_COMPONENT || + kind == ICAL_VTODO_COMPONENT || + kind == ICAL_VJOURNAL_COMPONENT || + kind == ICAL_VFREEBUSY_COMPONENT || + kind == ICAL_VQUERY_COMPONENT || + kind == ICAL_VAGENDA_COMPONENT){ + return comp; + } + } + return 0; +} + + +/** @brief Get the timespan covered by this component, in UTC + * (deprecated) + * + * see icalcomponent_foreach_recurrence() for a better way to + * extract spans from an component. + * + * This method can be called on either a VCALENDAR or any real + * component. If the VCALENDAR contains no real component, but + * contains a VTIMEZONE, we return that span instead. + * This might not be a desirable behavior; we keep it for now + * for backward compatibility, but it might be deprecated at a + * future time. + * + * FIXME this API needs to be clarified. DTEND is defined as the + * first available time after the end of this event, so the span + * should actually end 1 second before DTEND. + */ + +icaltime_span icalcomponent_get_span(icalcomponent* comp) +{ + icalcomponent *inner; + icalcomponent_kind kind; + icaltime_span span; + struct icaltimetype start, end; + + span.start = 0; + span.end = 0; + span.is_busy= 1; + + /* initial Error checking */ + if (comp == NULL) { + return span; + } + + /* FIXME this might go away */ + kind = icalcomponent_isa(comp); + if(kind == ICAL_VCALENDAR_COMPONENT){ + inner = icalcomponent_get_first_real_component(comp); + + /* Maybe there is a VTIMEZONE in there */ + if (inner == 0){ + inner = icalcomponent_get_first_component(comp, + ICAL_VTIMEZONE_COMPONENT); + } + + } else { + inner = comp; + } + + if (inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/ + return span; + } + + kind = icalcomponent_isa(inner); + + if( !( kind == ICAL_VEVENT_COMPONENT || + kind == ICAL_VJOURNAL_COMPONENT || + kind == ICAL_VTODO_COMPONENT || + kind == ICAL_VFREEBUSY_COMPONENT )) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/ + return span; + + } + + /* Get to work. starting with DTSTART */ + start = icalcomponent_get_dtstart(comp); + if (icaltime_is_null_time(start)) { + return span; + } + span.start = icaltime_as_timet_with_zone(start, + icaltimezone_get_utc_timezone()); + + /* The end time could be specified as either a DTEND or a DURATION */ + /* icalcomponent_get_dtend takes care of these cases. */ + end = icalcomponent_get_dtend(comp); + if (icaltime_is_null_time(end)) { + if (!icaltime_is_date(start)) { + /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION + it takes no time */ + span.start = 0; + return span; + } else { + end = start; + } + } + + span.end = icaltime_as_timet_with_zone(end, + icaltimezone_get_utc_timezone()); + if (icaltime_is_date(start)) { + /* Until the end of the day*/ + span.end += 60*60*24 - 1; + } + + return span; + +} + +/** + * Decide if this recurrance is acceptable + * + * @param comp A valid icalcomponent. + * @param dtstart The base dtstart value for this component. + * @param recurtime The time to test against. + * + * @return true if the recurrence value is excluded, false otherwise. + * + * This function decides if a specific recurrence value is + * excluded by EXRULE or EXDATE properties. + * + * It's not the most efficient code. You might get better performance + * if you assume that recurtime is always increasing for each + * call. Then you could: + * + * - sort the EXDATE values + * - save the state of each EXRULE iterator for the next call. + * + * In this case though you don't need to worry how you call this + * function. It will always return the correct result. + */ + +int icalproperty_recurrence_is_excluded(icalcomponent *comp, + struct icaltimetype *dtstart, + struct icaltimetype *recurtime) { + icalproperty *exdate, *exrule; + + if (comp == NULL || + dtstart == NULL || + recurtime == NULL || + icaltime_is_null_time(*recurtime)) + /* BAD DATA */ + return 1; + + /** first test against the exdate values **/ + for (exdate = icalcomponent_get_first_property(comp,ICAL_EXDATE_PROPERTY); + exdate != NULL; + exdate = icalcomponent_get_next_property(comp,ICAL_EXDATE_PROPERTY)) { + + struct icaltimetype exdatetime = icalproperty_get_exdate(exdate); + + if (icaltime_compare(*recurtime, exdatetime) == 0) { + /** MATCHED **/ + return 1; + } + } + + /** Now test against the EXRULEs **/ + for (exrule = icalcomponent_get_first_property(comp,ICAL_EXRULE_PROPERTY); + exrule != NULL; + exrule = icalcomponent_get_next_property(comp,ICAL_EXRULE_PROPERTY)) { + + struct icalrecurrencetype recur = icalproperty_get_exrule(exrule); + icalrecur_iterator *exrule_itr = icalrecur_iterator_new(recur, *dtstart); + struct icaltimetype exrule_time; + + while (1) { + int result; + exrule_time = icalrecur_iterator_next(exrule_itr); + + if (icaltime_is_null_time(exrule_time)) + break; + + result = icaltime_compare(*recurtime, exrule_time); + if (result == 0) { + icalrecur_iterator_free(exrule_itr); + return 1; /** MATCH **/ + } + if (result == 1) + break; /** exrule_time > recurtime **/ + } + + icalrecur_iterator_free(exrule_itr); + } + + return 0; /** no matches **/ +} + +/** + * @brief Return the busy status based on the TRANSP property. + * + * @param comp A valid icalcomponent. + * + * @return 1 if the event is a busy item, 0 if it is not. + */ + +static int icalcomponent_is_busy(icalcomponent *comp) { + icalproperty *transp; + enum icalproperty_status status; + int ret = 1; + + /** @todo check access control here, converting busy->free if the + permissions do not allow access... */ + + /* Is this a busy time? Check the TRANSP property */ + transp = icalcomponent_get_first_property(comp, ICAL_TRANSP_PROPERTY); + + if (transp) { + icalvalue *transp_val = icalproperty_get_value(transp); + + switch (icalvalue_get_transp(transp_val)) { + case ICAL_TRANSP_OPAQUE: + case ICAL_TRANSP_OPAQUENOCONFLICT: + case ICAL_TRANSP_NONE: + ret = 1; + break; + case ICAL_TRANSP_TRANSPARENT: + case ICAL_TRANSP_TRANSPARENTNOCONFLICT: + ret = 0; + break; + default: + ret = 0; + break; + } + } + status = icalcomponent_get_status(comp); + if (ret && status) { + switch (status) { + case ICAL_STATUS_CANCELLED: + case ICAL_STATUS_TENTATIVE: + ret = 0; + break; + default: + break; + } + } + return(ret); +} + + + + +/** + * @brief cycle through all recurrances of an event + * + * @param comp A valid VEVENT component + * @param start Ignore timespans before this + * @param end Ignore timespans after this + * @param callback Function called for each timespan within the range + * @param callback_data Pointer passed back to the callback function + * + * This function will call the specified callback function for once + * for the base value of DTSTART, and foreach recurring date/time + * value. + * + * It will filter out events that are specified as an EXDATE or an EXRULE. + * + * @todo We do not filter out duplicate RRULES/RDATES + * @todo We do not handle RDATEs with explicit periods + */ + +void icalcomponent_foreach_recurrence(icalcomponent* comp, + struct icaltimetype start, + struct icaltimetype end, + void (*callback)(icalcomponent *comp, + struct icaltime_span *span, + void *data), + void *callback_data) +{ + struct icaltimetype dtstart, dtend; + icaltime_span recurspan, basespan, limit_span; + time_t limit_start, limit_end; + int dtduration; + icalproperty *rrule, *rdate; + struct icaldurationtype dur; + pvl_elem property_iterator; /* for saving the iterator */ + + if (comp == NULL || callback == NULL) + return; + + dtstart = icalcomponent_get_dtstart(comp); + + if (icaltime_is_null_time(dtstart)) + return; + + + /* The end time could be specified as either a DTEND or a DURATION */ + /* icalcomponent_get_dtend takes care of these cases. */ + dtend = icalcomponent_get_dtend(comp); + + /* Now set up the base span for this item, corresponding to the + base DTSTART and DTEND */ + basespan = icaltime_span_new(dtstart, dtend, 1); + + basespan.is_busy = icalcomponent_is_busy(comp); + + + /** Calculate the ceiling and floor values.. **/ + limit_start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone()); + if (!icaltime_is_null_time(end)) + limit_end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); + else + limit_end = INT_MAX; /* max 32 bit time_t */ + + limit_span.start = limit_start; + limit_span.end = limit_end; + + + /* Do the callback for the initial DTSTART entry */ + + if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &dtstart)) { + /** call callback action **/ + if (icaltime_span_overlaps(&basespan, &limit_span)) + (*callback) (comp, &basespan, callback_data); + } + + recurspan = basespan; + dtduration = basespan.end - basespan.start; + + /* Now cycle through the rrule entries */ + for (rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY); + rrule != NULL; + rrule = icalcomponent_get_next_property(comp,ICAL_RRULE_PROPERTY)) { + + struct icalrecurrencetype recur = icalproperty_get_rrule(rrule); + icalrecur_iterator *rrule_itr = icalrecur_iterator_new(recur, dtstart); + struct icaltimetype rrule_time = icalrecur_iterator_next(rrule_itr); + /** note that icalrecur_iterator_next always returns dtstart + the first time.. **/ + + while (1) { + rrule_time = icalrecur_iterator_next(rrule_itr); + + if (icaltime_is_null_time(rrule_time)) + break; + + dur = icaltime_subtract(rrule_time, dtstart); + + recurspan.start = basespan.start + icaldurationtype_as_int(dur); + recurspan.end = recurspan.start + dtduration; + + /** save the iterator ICK! **/ + property_iterator = comp->property_iterator; + + if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rrule_time)) { + /** call callback action **/ + if (icaltime_span_overlaps(&recurspan, &limit_span)) + (*callback) (comp, &recurspan, callback_data); + } + comp->property_iterator = property_iterator; + } /* end of iteration over a specific RRULE */ + + icalrecur_iterator_free(rrule_itr); + } /* end of RRULE loop */ + + + /** Now process RDATE entries **/ + for (rdate = icalcomponent_get_first_property(comp,ICAL_RDATE_PROPERTY); + rdate != NULL; + rdate = icalcomponent_get_next_property(comp,ICAL_RDATE_PROPERTY)) { + + struct icaldatetimeperiodtype rdate_period = icalproperty_get_rdate(rdate); + + /** RDATES can specify raw datetimes, periods, or dates. + we only support raw datetimes for now.. + + @todo Add support for other types **/ + + if (icaltime_is_null_time(rdate_period.time)) + continue; + + dur = icaltime_subtract(rdate_period.time, dtstart); + + recurspan.start = basespan.start + icaldurationtype_as_int(dur); + recurspan.end = recurspan.start + dtduration; + + /** save the iterator ICK! **/ + property_iterator = comp->property_iterator; + + if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rdate_period.time)) { + /** call callback action **/ + (*callback) (comp, &recurspan, callback_data); + } + comp->property_iterator = property_iterator; + } +} + + + +int icalcomponent_check_restrictions(icalcomponent* comp){ + icalerror_check_arg_rz(comp!=0,"comp"); + return icalrestriction_check(comp); +} + +/** @brief returns the number of errors encountered parsing the data + * + * This function counts the number times the X-LIC-ERROR occurs + * in the data structure. + */ + +int icalcomponent_count_errors(icalcomponent* component) +{ + int errors = 0; + icalproperty *p; + icalcomponent *c; + pvl_elem itr; + + for( itr = pvl_head(component->properties); + itr != 0; + itr = pvl_next(itr)) + { + p = (icalproperty*)pvl_data(itr); + + if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) + { + errors++; + } + } + + + for( itr = pvl_head(component->components); + itr != 0; + itr = pvl_next(itr)) + { + c = (icalcomponent*)pvl_data(itr); + + errors += icalcomponent_count_errors(c); + + } + + return errors; +} + + +void icalcomponent_strip_errors(icalcomponent* component) +{ + icalproperty *p; + icalcomponent *c; + pvl_elem itr, next_itr; + + for( itr = pvl_head(component->properties); + itr != 0; + itr = next_itr) + { + p = (icalproperty*)pvl_data(itr); + next_itr = pvl_next(itr); + + if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) + { + icalcomponent_remove_property(component,p); + } + } + + for( itr = pvl_head(component->components); + itr != 0; + itr = pvl_next(itr)) + { + c = (icalcomponent*)pvl_data(itr); + icalcomponent_strip_errors(c); + } +} + +/* Hack. This will change the state of the iterators */ +void icalcomponent_convert_errors(icalcomponent* component) +{ + icalproperty *p, *next_p; + icalcomponent *c; + + for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); + p != 0; + p = next_p){ + + next_p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY); + + if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) + { + struct icalreqstattype rst; + icalparameter *param = icalproperty_get_first_parameter + (p,ICAL_XLICERRORTYPE_PARAMETER); + + rst.code = ICAL_UNKNOWN_STATUS; + rst.desc = 0; + + switch(icalparameter_get_xlicerrortype(param)){ + + case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: { + rst.code = ICAL_3_2_INVPARAM_STATUS; + break; + } + case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: { + rst.code = ICAL_3_3_INVPARAMVAL_STATUS; + break; + } + case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: { + rst.code = ICAL_3_0_INVPROPNAME_STATUS; + break; + } + case ICAL_XLICERRORTYPE_VALUEPARSEERROR: { + rst.code = ICAL_3_1_INVPROPVAL_STATUS; + break; + } + case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: { + rst.code = ICAL_3_4_INVCOMP_STATUS; + break; + } + + default: { + break; + } + } + if (rst.code != ICAL_UNKNOWN_STATUS){ + + rst.debug = icalproperty_get_xlicerror(p); + icalcomponent_add_property(component, + icalproperty_new_requeststatus(rst)); + + icalcomponent_remove_property(component,p); + } + } + } + + for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ + + icalcomponent_convert_errors(c); + } +} + + +icalcomponent* icalcomponent_get_parent(icalcomponent* component) +{ + return component->parent; +} + +void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent) +{ + component->parent = parent; +} + +icalcompiter icalcompiter_null = {ICAL_NO_COMPONENT,0}; + + +struct icalcomponent_kind_map { + icalcomponent_kind kind; + char name[20]; +}; + + + +static struct icalcomponent_kind_map component_map[] = +{ + { ICAL_VEVENT_COMPONENT, "VEVENT" }, + { ICAL_VTODO_COMPONENT, "VTODO" }, + { ICAL_VJOURNAL_COMPONENT, "VJOURNAL" }, + { ICAL_VCALENDAR_COMPONENT, "VCALENDAR" }, + { ICAL_VAGENDA_COMPONENT, "VAGENDA" }, + { ICAL_VFREEBUSY_COMPONENT, "VFREEBUSY" }, + { ICAL_VTIMEZONE_COMPONENT, "VTIMEZONE" }, + { ICAL_VALARM_COMPONENT, "VALARM" }, + { ICAL_XSTANDARD_COMPONENT, "STANDARD" }, /*These are part of RFC2445 */ + { ICAL_XDAYLIGHT_COMPONENT, "DAYLIGHT" }, /*but are not really components*/ + { ICAL_X_COMPONENT, "X" }, + { ICAL_VSCHEDULE_COMPONENT, "SCHEDULE" }, + + /* CAP components */ + { ICAL_VQUERY_COMPONENT, "VQUERY" }, + { ICAL_VCAR_COMPONENT, "VCAR" }, + { ICAL_VCOMMAND_COMPONENT, "VCOMMAND" }, + + /* libical private components */ + { ICAL_XLICINVALID_COMPONENT, "X-LIC-UNKNOWN" }, + { ICAL_XLICMIMEPART_COMPONENT, "X-LIC-MIME-PART" }, + { ICAL_ANY_COMPONENT, "ANY" }, + { ICAL_XROOT_COMPONENT, "XROOT" }, + + /* End of list */ + { ICAL_NO_COMPONENT, "" }, +}; + + +int icalcomponent_kind_is_valid(const icalcomponent_kind kind) +{ + int i = 0; + do { + if (component_map[i].kind == kind) + return 1; + } while (component_map[i++].kind != ICAL_NO_COMPONENT); + + return 0; +} + +const char* icalcomponent_kind_to_string(icalcomponent_kind kind) +{ + int i; + + for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { + if (component_map[i].kind == kind) { + return component_map[i].name; + } + } + + return 0; + +} + +icalcomponent_kind icalcomponent_string_to_kind(const char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_COMPONENT; + } + + for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { + if (strcasecmp(component_map[i].name, string) == 0) { + return component_map[i].kind; + } + } + + return ICAL_NO_COMPONENT; +} + + + +icalcompiter +icalcomponent_begin_component(icalcomponent* component,icalcomponent_kind kind) +{ + icalcompiter itr; + pvl_elem i; + + itr.kind = kind; + itr.iter = NULL; + + icalerror_check_arg_re(component!=0,"component",icalcompiter_null); + + for( i = pvl_head(component->components); i != 0; i = pvl_next(i)) { + + icalcomponent *c = (icalcomponent*) pvl_data(i); + + if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) { + + itr.iter = i; + + return itr; + } + } + + return icalcompiter_null; +} + +icalcompiter +icalcomponent_end_component(icalcomponent* component,icalcomponent_kind kind) +{ + icalcompiter itr; + pvl_elem i; + + itr.kind = kind; + + icalerror_check_arg_re(component!=0,"component",icalcompiter_null); + + for( i = pvl_tail(component->components); i != 0; i = pvl_prior(i)) { + + icalcomponent *c = (icalcomponent*) pvl_data(i); + + if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) { + + itr.iter = pvl_next(i); + + return itr; + } + } + + return icalcompiter_null;; +} + + +icalcomponent* icalcompiter_next(icalcompiter* i) +{ + if (i->iter == 0){ + return 0; + } + + icalerror_check_arg_rz( (i!=0),"i"); + + for( i->iter = pvl_next(i->iter); + i->iter != 0; + i->iter = pvl_next(i->iter)) { + + icalcomponent *c = (icalcomponent*) pvl_data(i->iter); + + if (icalcomponent_isa(c) == i->kind + || i->kind == ICAL_ANY_COMPONENT) { + + return icalcompiter_deref(i);; + } + } + + return 0; + +} + +icalcomponent* icalcompiter_prior(icalcompiter* i) +{ + if (i->iter == 0){ + return 0; + } + + for( i->iter = pvl_prior(i->iter); + i->iter != 0; + i->iter = pvl_prior(i->iter)) { + + icalcomponent *c = (icalcomponent*) pvl_data(i->iter); + + if (icalcomponent_isa(c) == i->kind + || i->kind == ICAL_ANY_COMPONENT) { + + return icalcompiter_deref(i);; + } + } + + return 0; + +} +icalcomponent* icalcompiter_deref(icalcompiter* i) +{ + if(i->iter ==0){ + return 0; + } + + return pvl_data(i->iter); +} + +icalcomponent* icalcomponent_get_inner(icalcomponent* comp) +{ + if (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT){ + return icalcomponent_get_first_real_component(comp); + } else { + return comp; + } +} + +/** @brief sets the METHOD property to the given method + */ + +void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method) +{ + icalproperty *prop + = icalcomponent_get_first_property(comp, ICAL_METHOD_PROPERTY); + + + if (prop == 0){ + prop = icalproperty_new_method(method); + icalcomponent_add_property(comp, prop); + } + + icalproperty_set_method(prop,method); + +} + +/** @brief returns the METHOD property + */ + +icalproperty_method icalcomponent_get_method(icalcomponent* comp) +{ + icalproperty *prop + = icalcomponent_get_first_property(comp,ICAL_METHOD_PROPERTY); + + if (prop == 0){ + return ICAL_METHOD_NONE; + } + + return icalproperty_get_method(prop); +} + +#define ICALSETUPSET(p_kind) \ + icalcomponent *inner; \ + icalproperty *prop; \ + icalerror_check_arg_rv(comp!=0,"comp");\ + inner = icalcomponent_get_inner(comp); \ + if(inner == 0){\ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);\ + return;\ + }\ + prop = icalcomponent_get_first_property(inner, p_kind); + + +/** @brief Set DTSTART property to given icaltime + * + * This method respects the icaltime type (DATE vs DATE-TIME) and + * timezone (or lack thereof). + */ +void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v) +{ + const char *tzid; + ICALSETUPSET(ICAL_DTSTART_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_dtstart(v); + icalcomponent_add_property(inner, prop); + } else { + icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER); + } + + icalproperty_set_dtstart(prop,v); + + if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) { + icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid)); + } +} + +/** @brief Get a DATE or DATE-TIME property as an icaltime + * + * If the property is a DATE-TIME with a timezone parameter and a + * corresponding VTIMEZONE is present in the component, the + * returned component will already be in the correct timezone; + * otherwise the caller is responsible for converting it. + * + * FIXME this is useless until we can flag the failure + */ +static struct icaltimetype +icalcomponent_get_datetime(icalcomponent *comp, icalproperty *prop) { + + icalparameter *param; + struct icaltimetype ret; + + ret = icalvalue_get_datetime(icalproperty_get_value(prop)); + + if ((param = icalproperty_get_first_parameter(prop, ICAL_TZID_PARAMETER)) + != NULL) { + const char *tzid = icalparameter_get_tzid(param); + icaltimezone *tz; + + if ((tz = icalcomponent_get_timezone(comp, tzid)) != NULL) { + icaltime_set_timezone(&ret, tz); + } + } + + return ret; +} + +/** @brief Get DTSTART property as an icaltime + * + * If DTSTART is a DATE-TIME with a timezone parameter and a + * corresponding VTIMEZONE is present in the component, the + * returned component will already be in the correct timezone; + * otherwise the caller is responsible for converting it. + * + * FIXME this is useless until we can flag the failure + */ +struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + icalproperty *prop; + + prop = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); + if (prop == 0){ + return icaltime_null_time(); + } + + return icalcomponent_get_datetime(comp, prop); +} + +/** @brief Get DTEND property as an icaltime + * + * If a DTEND property is not present but a DURATION is, we use + * that to determine the proper end. + * + * If DTSTART is a DATE-TIME with a timezone parameter and a + * corresponding VTIMEZONE is present in the component, the + * returned component will already be in the correct timezone; + * otherwise the caller is responsible for converting it. + * + * FIXME this is useless until we can flag the failure + */ +struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + icalproperty *end_prop + = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY); + icalproperty *dur_prop + = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY); + struct icaltimetype ret = icaltime_null_time(); + + if ( end_prop != 0) { + ret = icalcomponent_get_datetime(comp, end_prop); + } else if ( dur_prop != 0) { + + struct icaltimetype start = + icalcomponent_get_dtstart(inner); + struct icaldurationtype duration = + icalproperty_get_duration(dur_prop); + + struct icaltimetype end = icaltime_add(start,duration); + + ret = end; + } + + return ret; +} + +/** @brief Set DTEND property to given icaltime + * + * This method respects the icaltime type (DATE vs DATE-TIME) and + * timezone (or lack thereof). + * + * This also checks that a DURATION property isn't already there, + * and returns an error if it is. It's the caller's responsibility + * to remove it. + */ +void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v) +{ + const char *tzid; + ICALSETUPSET(ICAL_DTEND_PROPERTY); + + if (icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY) + != NULL) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return; + } + + if (prop == 0) { + prop = icalproperty_new_dtend(v); + icalcomponent_add_property(inner, prop); + } else { + icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER); + } + + icalproperty_set_dtend(prop,v); + + if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) { + icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid)); + } +} + +/** @brief Set DURATION property to given icalduration + * + * This method respects the icaltime type (DATE vs DATE-TIME) and + * timezone (or lack thereof). + * + * This also checks that a DTEND property isn't already there, + * and returns an error if it is. It's the caller's responsibility + * to remove it. + */ +void icalcomponent_set_duration(icalcomponent* comp, + struct icaldurationtype v) +{ + ICALSETUPSET(ICAL_DURATION_PROPERTY); + + if (icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY) != NULL) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return; + } + + if (prop == 0) { + prop = icalproperty_new_duration(v); + icalcomponent_add_property(inner, prop); + } else { + icalproperty_set_duration(prop,v); + } +} + +/** @brief Get DURATION property as an icalduration + * + * If a DURATION property is not present but a DTEND is, we use + * that to determine the proper end. + */ +struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + + icalproperty *end_prop + = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY); + + icalproperty *dur_prop + = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY); + + struct icaldurationtype ret = icaldurationtype_null_duration(); + + if ( dur_prop != 0 && end_prop == 0) { + ret = icalproperty_get_duration(dur_prop); + + } else if ( end_prop != 0 && dur_prop == 0) { + /** + * FIXME + * We assume DTSTART and DTEND are not in different time zones. + * Does the standard actually guarantee this? + */ + struct icaltimetype start = + icalcomponent_get_dtstart(inner); + struct icaltimetype end = + icalcomponent_get_dtend(inner); + + ret = icaltime_subtract(end, start); + } else { + /* Error, both duration and dtend have been specified */ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + } + return ret; +} + +void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v) +{ + + ICALSETUPSET(ICAL_DTSTAMP_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_dtstamp(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_dtstamp(prop,v); + +} + + +struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + icalproperty *prop + = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY); + + if (prop == 0){ + return icaltime_null_time(); + } + + return icalproperty_get_dtstamp(prop); +} + + +void icalcomponent_set_summary(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_SUMMARY_PROPERTY) + + if (prop == 0){ + prop = icalproperty_new_summary(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_summary(prop,v); +} + + +const char* icalcomponent_get_summary(icalcomponent* comp) +{ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_SUMMARY_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_summary(prop); + +} + +void icalcomponent_set_comment(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_COMMENT_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_comment(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_summary(prop,v); + +} +const char* icalcomponent_get_comment(icalcomponent* comp){ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_COMMENT_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_comment(prop); +} + +void icalcomponent_set_uid(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_UID_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_uid(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_summary(prop,v); + +} +const char* icalcomponent_get_uid(icalcomponent* comp){ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_uid(prop); +} + +void icalcomponent_set_recurrenceid(icalcomponent* comp, struct icaltimetype v) +{ + ICALSETUPSET(ICAL_RECURRENCEID_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_recurrenceid(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_recurrenceid(prop,v); +} +struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp) +{ + icalcomponent *inner; + icalproperty *prop; + if (comp == 0) { + icalerror_set_errno(ICAL_BADARG_ERROR); + return icaltime_null_time(); + } + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return icaltime_null_time(); + } + + prop= icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY); + + if (prop == 0){ + return icaltime_null_time(); + } + + return icalproperty_get_recurrenceid(prop); +} + +void icalcomponent_set_description(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_DESCRIPTION_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_description(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_description(prop,v); +} +const char* icalcomponent_get_description(icalcomponent* comp) +{ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_DESCRIPTION_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_description(prop); +} + +void icalcomponent_set_location(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_LOCATION_PROPERTY) + + if (prop == 0){ + prop = icalproperty_new_location(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_location(prop,v); +} +const char* icalcomponent_get_location(icalcomponent* comp) +{ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_LOCATION_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_location(prop); +} + +void icalcomponent_set_sequence(icalcomponent* comp, int v) +{ + ICALSETUPSET(ICAL_SEQUENCE_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_sequence(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_sequence(prop,v); + +} +int icalcomponent_get_sequence(icalcomponent* comp){ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_sequence(prop); +} + + +void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v) +{ + ICALSETUPSET(ICAL_STATUS_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_status(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_status(prop,v); + +} +enum icalproperty_status icalcomponent_get_status(icalcomponent* comp){ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_STATUS_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_status(prop); +} + +icalcomponent* icalcomponent_new_vcalendar() +{ + return icalcomponent_new(ICAL_VCALENDAR_COMPONENT); +} +icalcomponent* icalcomponent_new_vevent() +{ + return icalcomponent_new(ICAL_VEVENT_COMPONENT); +} +icalcomponent* icalcomponent_new_vtodo() +{ + return icalcomponent_new(ICAL_VTODO_COMPONENT); +} +icalcomponent* icalcomponent_new_vjournal() +{ + return icalcomponent_new(ICAL_VJOURNAL_COMPONENT); +} +icalcomponent* icalcomponent_new_valarm() +{ + return icalcomponent_new(ICAL_VALARM_COMPONENT); +} +icalcomponent* icalcomponent_new_vfreebusy() +{ + return icalcomponent_new(ICAL_VFREEBUSY_COMPONENT); +} +icalcomponent* icalcomponent_new_vtimezone() +{ + return icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); +} +icalcomponent* icalcomponent_new_xstandard() +{ + return icalcomponent_new(ICAL_XSTANDARD_COMPONENT); +} +icalcomponent* icalcomponent_new_xdaylight() +{ + return icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); +} +icalcomponent* icalcomponent_new_vagenda() +{ + return icalcomponent_new(ICAL_VAGENDA_COMPONENT); +} +icalcomponent* icalcomponent_new_vquery() +{ + return icalcomponent_new(ICAL_VQUERY_COMPONENT); +} + +/* + * Timezone stuff. + */ + + +/** + * This takes 2 VCALENDAR components and merges the second one into the first, + * resolving any problems with conflicting TZIDs. comp_to_merge will no + * longer exist after calling this function. + */ +void icalcomponent_merge_component(icalcomponent* comp, + icalcomponent* comp_to_merge) +{ + icalcomponent *subcomp, *next_subcomp; + icalarray *tzids_to_rename; + unsigned int i; + + /* Check that both components are VCALENDAR components. */ + assert (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT); + assert (icalcomponent_isa(comp_to_merge) == ICAL_VCALENDAR_COMPONENT); + + /* Step through each subcomponent of comp_to_merge, looking for VTIMEZONEs. + For each VTIMEZONE found, check if we need to add it to comp and if we + need to rename it and all TZID references to it. */ + tzids_to_rename = icalarray_new (sizeof (char*), 16); + subcomp = icalcomponent_get_first_component (comp_to_merge, + ICAL_VTIMEZONE_COMPONENT); + while (subcomp) { + next_subcomp = icalcomponent_get_next_component (comp_to_merge, + ICAL_VTIMEZONE_COMPONENT); + /* This will add the VTIMEZONE to comp, if necessary, and also update + the array of TZIDs we need to rename. */ + icalcomponent_merge_vtimezone (comp, subcomp, tzids_to_rename); + /* FIXME: Handle possible NEWFAILED error. */ + + subcomp = next_subcomp; + } + + /* If we need to do any renaming of TZIDs, do it now. */ + if (tzids_to_rename->num_elements != 0) { + icalcomponent_rename_tzids (comp_to_merge, tzids_to_rename); + + /* Now free the tzids_to_rename array. */ + for (i = 0; i < tzids_to_rename->num_elements; i++) { + free (icalarray_element_at (tzids_to_rename, i)); + } + icalarray_free (tzids_to_rename); + } + + /* Now move all the components from comp_to_merge to comp, excluding + VTIMEZONE components. */ + subcomp = icalcomponent_get_first_component (comp_to_merge, + ICAL_ANY_COMPONENT); + while (subcomp) { + next_subcomp = icalcomponent_get_next_component (comp_to_merge, + ICAL_ANY_COMPONENT); + if (icalcomponent_isa(subcomp) != ICAL_VTIMEZONE_COMPONENT) { + icalcomponent_remove_component (comp_to_merge, subcomp); + icalcomponent_add_component (comp, subcomp); + } + subcomp = next_subcomp; + } + + /* Free comp_to_merge. We have moved most of the subcomponents over to + comp now. */ + icalcomponent_free (comp_to_merge); +} + + +static void icalcomponent_merge_vtimezone (icalcomponent *comp, + icalcomponent *vtimezone, + icalarray *tzids_to_rename) +{ + icalproperty *tzid_prop; + const char *tzid; + char *tzid_copy; + icaltimezone *existing_vtimezone; + + /* Get the TZID of the VTIMEZONE. */ + tzid_prop = icalcomponent_get_first_property (vtimezone, ICAL_TZID_PROPERTY); + if (!tzid_prop) + return; + + tzid = icalproperty_get_tzid (tzid_prop); + if (!tzid) + return; + + /* See if there is already a VTIMEZONE in comp with the same TZID. */ + existing_vtimezone = icalcomponent_get_timezone (comp, tzid); + + /* If there is no existing VTIMEZONE with the same TZID, we can just move + the VTIMEZONE to comp and return. */ + if (!existing_vtimezone) { + icalcomponent_remove_component (icalcomponent_get_parent (vtimezone), + vtimezone); + icalcomponent_add_component (comp, vtimezone); + return; + } + + /* If the TZID has a '/' prefix, then we don't have to worry about the + clashing TZIDs, as they are supposed to be exactly the same VTIMEZONE. */ + if (tzid[0] == '/') + return; + + /* Now we have two VTIMEZONEs with the same TZID (which isn't a globally + unique one), so we compare the VTIMEZONE components to see if they are + the same. If they are, we don't need to do anything. We make a copy of + the tzid, since the parameter may get modified in these calls. */ + tzid_copy = strdup (tzid); + if (!tzid_copy) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } + + if (!icalcomponent_compare_vtimezones (comp, vtimezone)) { + /* FIXME: Handle possible NEWFAILED error. */ + + /* Now we have two different VTIMEZONEs with the same TZID. */ + icalcomponent_handle_conflicting_vtimezones (comp, vtimezone, tzid_prop, + tzid_copy, tzids_to_rename); + } + free (tzid_copy); +} + + +static void +icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp, + icalcomponent *vtimezone, + icalproperty *tzid_prop, + const char *tzid, + icalarray *tzids_to_rename) +{ + int i, suffix, max_suffix = 0, num_elements; + unsigned int tzid_len; + char *tzid_copy, *new_tzid, suffix_buf[32]; + (void)tzid_prop; /* hack to stop unused variable warning */ + + /* Find the length of the TZID without any trailing digits. */ + tzid_len = icalcomponent_get_tzid_prefix_len (tzid); + + /* Step through each of the VTIMEZONEs in comp. We may already have the + clashing VTIMEZONE in the calendar, but it may have been renamed + (i.e. a unique number added on the end of the TZID, e.g. 'London2'). + So we compare the new VTIMEZONE with any VTIMEZONEs that have the + same prefix (e.g. 'London'). If it matches any of those, we have to + rename the TZIDs to that TZID, else we rename to a new TZID, using + the biggest numeric suffix found + 1. */ + num_elements = comp->timezones ? comp->timezones->num_elements : 0; + for (i = 0; i < num_elements; i++) { + icaltimezone *zone; + const char *existing_tzid; + const char *existing_tzid_copy; + unsigned int existing_tzid_len; + + zone = icalarray_element_at (comp->timezones, i); + existing_tzid = icaltimezone_get_tzid (zone); + + /* Find the length of the TZID without any trailing digits. */ + existing_tzid_len = icalcomponent_get_tzid_prefix_len (existing_tzid); + + /* Check if we have the same prefix. */ + if (tzid_len == existing_tzid_len + && !strncmp (tzid, existing_tzid, tzid_len)) { + /* Compare the VTIMEZONEs. */ + if (icalcomponent_compare_vtimezones (icaltimezone_get_component (zone), + vtimezone)) { + /* The VTIMEZONEs match, so we can use the existing VTIMEZONE. But + we have to rename TZIDs to this TZID. */ + tzid_copy = strdup (tzid); + existing_tzid_copy = strdup (existing_tzid); + if (!tzid_copy || !existing_tzid_copy) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + } else { + icalarray_append (tzids_to_rename, tzid_copy); + icalarray_append (tzids_to_rename, existing_tzid_copy); + } + return; + } else { + /* FIXME: Handle possible NEWFAILED error. */ + + /* Convert the suffix to an integer and remember the maximum numeric + suffix found. */ + suffix = atoi (existing_tzid + existing_tzid_len); + if (max_suffix < suffix) + max_suffix = suffix; + } + } + } + + /* We didn't find a VTIMEZONE that matched, so we have to rename the TZID, + using the maximum numerical suffix found + 1. */ + tzid_copy = strdup (tzid); + snprintf (suffix_buf, sizeof(suffix_buf), "%i", max_suffix + 1); + new_tzid = malloc (tzid_len + strlen (suffix_buf) + 1); + if (!new_tzid || !tzid_copy) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } + + strncpy (new_tzid, tzid, tzid_len); + strcpy (new_tzid + tzid_len, suffix_buf); + icalarray_append (tzids_to_rename, tzid_copy); + icalarray_append (tzids_to_rename, new_tzid); +} + + +/* Returns the length of the TZID, without any trailing digits. */ +static unsigned int icalcomponent_get_tzid_prefix_len (const char *tzid) +{ + int len; + const char *p; + + len = strlen (tzid); + p = tzid + len - 1; + while (len > 0 && *p >= '0' && *p <= '9') { + p--; + len--; + } + + return len; +} + + +/** + * Renames all references to the given TZIDs to a new name. rename_table + * contains pairs of strings - a current TZID, and the new TZID to rename it + * to. + */ +static void icalcomponent_rename_tzids(icalcomponent* comp, + icalarray* rename_table) +{ + icalcomponent_foreach_tzid (comp, icalcomponent_rename_tzids_callback, + rename_table); +} + + +static void icalcomponent_rename_tzids_callback(icalparameter *param, void *data) +{ + icalarray *rename_table = data; + const char *tzid; + int i; + + tzid = icalparameter_get_tzid (param); + if (!tzid) + return; + + /* Step through the rename table to see if the current TZID matches + any of the ones we want to rename. */ + for (i = 0; (unsigned int)i < rename_table->num_elements - 1; i += 2) { + if (!strcmp (tzid, icalarray_element_at (rename_table, i))) { + icalparameter_set_tzid (param, icalarray_element_at (rename_table, i + 1)); + break; + } + } +} + + +/** + * Calls the given function for each TZID parameter found in the component. + */ +void icalcomponent_foreach_tzid(icalcomponent* comp, + void (*callback)(icalparameter *param, void *data), + void *callback_data) +{ + icalproperty *prop; + icalproperty_kind kind; + icalparameter *param; + icalcomponent *subcomp; + + /* First look for any TZID parameters used in this component itself. */ + prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); + while (prop) { + kind = icalproperty_isa (prop); + + /* These are the only properties that can have a TZID. Note that + COMPLETED, CREATED, DTSTAMP & LASTMODIFIED must be in UTC. */ + if (kind == ICAL_DTSTART_PROPERTY || kind == ICAL_DTEND_PROPERTY + || kind == ICAL_DUE_PROPERTY || kind == ICAL_EXDATE_PROPERTY + || kind == ICAL_RDATE_PROPERTY) { + param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER); + if (param) + (*callback) (param, callback_data); + } + + prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); + } + + /* Now recursively check child components. */ + subcomp = icalcomponent_get_first_component (comp, ICAL_ANY_COMPONENT); + while (subcomp) { + icalcomponent_foreach_tzid (subcomp, callback, callback_data); + subcomp = icalcomponent_get_next_component (comp, ICAL_ANY_COMPONENT); + } +} + + + +/** + * Returns the icaltimezone from the component corresponding to the given + * TZID, or NULL if the component does not have a corresponding VTIMEZONE. + */ +icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid) +{ + icaltimezone *zone; + int lower, upper, middle, cmp; + const char *zone_tzid; + + if (!comp->timezones) + return NULL; + + /* Sort the array if necessary (by the TZID string). */ + if (!comp->timezones_sorted) { + icalarray_sort (comp->timezones, icalcomponent_compare_timezone_fn); + comp->timezones_sorted = 1; + } + + /* Do a simple binary search. */ + lower = middle = 0; + upper = comp->timezones->num_elements; + + while (lower < upper) { + middle = (lower + upper) >> 1; + zone = icalarray_element_at (comp->timezones, middle); + zone_tzid = icaltimezone_get_tzid (zone); + cmp = strcmp (tzid, zone_tzid); + if (cmp == 0) + return zone; + else if (cmp < 0) + upper = middle; + else + lower = middle + 1; + } + + return NULL; +} + + +/** + * A function to compare 2 icaltimezone elements, used for qsort(). + */ +static int icalcomponent_compare_timezone_fn (const void *elem1, + const void *elem2) +{ + icaltimezone *zone1, *zone2; + const char *zone1_tzid, *zone2_tzid; + + zone1 = (icaltimezone*) elem1; + zone2 = (icaltimezone*) elem2; + + zone1_tzid = icaltimezone_get_tzid (zone1); + zone2_tzid = icaltimezone_get_tzid (zone2); + + return strcmp (zone1_tzid, zone2_tzid); +} + + +/** + * Compares 2 VTIMEZONE components to see if they match, ignoring their TZIDs. + * It returns 1 if they match, 0 if they don't, or -1 on error. + */ +static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1, + icalcomponent *vtimezone2) +{ + icalproperty *prop1, *prop2; + const char *tzid1, *tzid2; + char *tzid2_copy, *string1, *string2; + int cmp; + + /* Get the TZID property of the first VTIMEZONE. */ + prop1 = icalcomponent_get_first_property (vtimezone1, ICAL_TZID_PROPERTY); + if (!prop1) + return -1; + + tzid1 = icalproperty_get_tzid (prop1); + if (!tzid1) + return -1; + + /* Get the TZID property of the second VTIMEZONE. */ + prop2 = icalcomponent_get_first_property (vtimezone2, ICAL_TZID_PROPERTY); + if (!prop2) + return -1; + + tzid2 = icalproperty_get_tzid (prop2); + if (!tzid2) + return -1; + + /* Copy the second TZID, and set the property to the same as the first + TZID, since we don't care if these match of not. */ + tzid2_copy = strdup (tzid2); + if (!tzid2_copy) { + icalerror_set_errno (ICAL_NEWFAILED_ERROR); + return 0; + } + + icalproperty_set_tzid (prop2, tzid1); + + /* Now convert both VTIMEZONEs to strings and compare them. */ + string1 = icalcomponent_as_ical_string (vtimezone1); + if (!string1) { + free (tzid2_copy); + return -1; + } + + string2 = icalcomponent_as_ical_string (vtimezone2); + if (!string2) { + free (string1); + free (tzid2_copy); + return -1; + } + + cmp = strcmp (string1, string2); + + free (string1); + free (string2); + + /* Now reset the second TZID. */ + icalproperty_set_tzid (prop2, tzid2_copy); + free (tzid2_copy); + + return (cmp == 0) ? 1 : 0; +} + + + + + + +/** + * @brief set the RELCALID property of a component. + * + * @param comp Valid calendar component. + * @param v Relcalid URL value + */ + +void icalcomponent_set_relcalid(icalcomponent* comp, const char* v) +{ + ICALSETUPSET(ICAL_RELCALID_PROPERTY); + + if (prop == 0){ + prop = icalproperty_new_relcalid(v); + icalcomponent_add_property(inner, prop); + } + + icalproperty_set_relcalid(prop,v); + +} + + +/** + * @brief get the RELCALID property of a component. + * + * @param comp Valid calendar component. + */ + +const char* icalcomponent_get_relcalid(icalcomponent* comp){ + icalcomponent *inner; + icalproperty *prop; + icalerror_check_arg_rz(comp!=0,"comp"); + + inner = icalcomponent_get_inner(comp); + + if(inner == 0){ + return 0; + } + + prop= icalcomponent_get_first_property(inner,ICAL_RELCALID_PROPERTY); + + if (prop == 0){ + return 0; + } + + return icalproperty_get_relcalid(prop); +} + + +/** @brief Return the time a TODO task is DUE. + * + * @param comp Valid calendar component. + * + * Uses the DUE: property if it exists, otherwise we calculate the DUE + * value by adding the task's duration to the DTSTART time + */ + +struct icaltimetype icalcomponent_get_due(icalcomponent* comp) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + + icalproperty *due_prop + = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY); + + icalproperty *dur_prop + = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY); + + if( due_prop == 0 && dur_prop == 0){ + return icaltime_null_time(); + } else if ( due_prop != 0) { + return icalproperty_get_due(due_prop); + } else if ( dur_prop != 0) { + + struct icaltimetype start = + icalcomponent_get_dtstart(inner); + struct icaldurationtype duration = + icalproperty_get_duration(dur_prop); + + struct icaltimetype due = icaltime_add(start,duration); + + return due; + + } else { + /* Error, both duration and due have been specified */ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return icaltime_null_time(); + + } + +} + +/** @brief Set the due date of a VTODO task. + * + * @param comp Valid VTODO component. + * @param v Valid due date time. + * + * - If no duration or due properties then set the DUE property. + * - If a DUE property is already set, then reset it to the value v. + * - If a DURATION property is already set, then calculate the new + * duration based on the supplied value of v. + */ + +void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v) +{ + icalcomponent *inner = icalcomponent_get_inner(comp); + + icalproperty *due_prop + = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY); + + icalproperty *dur_prop + = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY); + + + if( due_prop == 0 && dur_prop == 0){ + due_prop = icalproperty_new_due(v); + icalcomponent_add_property(inner,due_prop); + } else if ( due_prop != 0) { + icalproperty_set_due(due_prop,v); + } else if ( dur_prop != 0) { + struct icaltimetype start = + icalcomponent_get_dtstart(inner); + + struct icaltimetype due = + icalcomponent_get_due(inner); + + struct icaldurationtype dur + = icaltime_subtract(due,start); + + icalproperty_set_duration(dur_prop,dur); + + } else { + /* Error, both duration and due have been specified */ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + } +} diff --git a/libkcal/libical/src/libical/icalcomponent.h b/libkcal/libical/src/libical/icalcomponent.h new file mode 100644 index 000000000..ae8a5d323 --- /dev/null +++ b/libkcal/libical/src/libical/icalcomponent.h @@ -0,0 +1,283 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcomponent.h + CREATOR: eric 20 March 1999 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalcomponent.h + +======================================================================*/ + +#ifndef ICALCOMPONENT_H +#define ICALCOMPONENT_H + +#include "icalproperty.h" +#include "icalvalue.h" +#include "icalenums.h" /* defines icalcomponent_kind */ +#include "pvl.h" + +typedef struct icalcomponent_impl icalcomponent; + +#ifndef ICALTIMEZONE_DEFINED +#define ICALTIMEZONE_DEFINED +/** @brief An opaque struct representing a timezone. + * We declare this here to avoid a circular dependancy. + */ +typedef struct _icaltimezone icaltimezone; +#endif + + +/* This is exposed so that callers will not have to allocate and + deallocate iterators. Pretend that you can't see it. */ +typedef struct icalcompiter +{ + icalcomponent_kind kind; + pvl_elem iter; + +} icalcompiter; + +icalcomponent* icalcomponent_new(icalcomponent_kind kind); +icalcomponent* icalcomponent_new_clone(icalcomponent* component); +icalcomponent* icalcomponent_new_from_string(char* str); +icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); +void icalcomponent_free(icalcomponent* component); + +char* icalcomponent_as_ical_string(icalcomponent* component); + +int icalcomponent_is_valid(icalcomponent* component); + +icalcomponent_kind icalcomponent_isa(const icalcomponent* component); + +int icalcomponent_isa_component (void* component); + +/* + * Working with properties + */ + +void icalcomponent_add_property(icalcomponent* component, + icalproperty* property); + +void icalcomponent_remove_property(icalcomponent* component, + icalproperty* property); + +int icalcomponent_count_properties(icalcomponent* component, + icalproperty_kind kind); + +/* Iterate through the properties */ +icalproperty* icalcomponent_get_current_property(icalcomponent* component); + +icalproperty* icalcomponent_get_first_property(icalcomponent* component, + icalproperty_kind kind); +icalproperty* icalcomponent_get_next_property(icalcomponent* component, + icalproperty_kind kind); + + +/* + * Working with components + */ + + +/* Return the first VEVENT, VTODO or VJOURNAL sub-component of cop, or + comp if it is one of those types */ + +icalcomponent* icalcomponent_get_inner(icalcomponent* comp); + + +void icalcomponent_add_component(icalcomponent* parent, + icalcomponent* child); + +void icalcomponent_remove_component(icalcomponent* parent, + icalcomponent* child); + +int icalcomponent_count_components(icalcomponent* component, + icalcomponent_kind kind); + +/** + This takes 2 VCALENDAR components and merges the second one into the first, + resolving any problems with conflicting TZIDs. comp_to_merge will no + longer exist after calling this function. */ +void icalcomponent_merge_component(icalcomponent* comp, + icalcomponent* comp_to_merge); + + +/* Iteration Routines. There are two forms of iterators, internal and +external. The internal ones came first, and are almost completely +sufficient, but they fail badly when you want to construct a loop that +removes components from the container.*/ + + +/* Iterate through components */ +icalcomponent* icalcomponent_get_current_component (icalcomponent* component); + +icalcomponent* icalcomponent_get_first_component(icalcomponent* component, + icalcomponent_kind kind); +icalcomponent* icalcomponent_get_next_component(icalcomponent* component, + icalcomponent_kind kind); + +/* Using external iterators */ +icalcompiter icalcomponent_begin_component(icalcomponent* component, + icalcomponent_kind kind); +icalcompiter icalcomponent_end_component(icalcomponent* component, + icalcomponent_kind kind); +icalcomponent* icalcompiter_next(icalcompiter* i); +icalcomponent* icalcompiter_prior(icalcompiter* i); +icalcomponent* icalcompiter_deref(icalcompiter* i); + + +/* Working with embedded error properties */ + + +/* Check the component against itip rules and insert error properties*/ +/* Working with embedded error properties */ +int icalcomponent_check_restrictions(icalcomponent* comp); + +/** Count embedded errors. */ +int icalcomponent_count_errors(icalcomponent* component); + +/** Remove all X-LIC-ERROR properties*/ +void icalcomponent_strip_errors(icalcomponent* component); + +/** Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ +void icalcomponent_convert_errors(icalcomponent* component); + +/* Internal operations. They are private, and you should not be using them. */ +icalcomponent* icalcomponent_get_parent(icalcomponent* component); +void icalcomponent_set_parent(icalcomponent* component, + icalcomponent* parent); + +/* Kind conversion routines */ + +int icalcomponent_kind_is_valid(const icalcomponent_kind kind); + +icalcomponent_kind icalcomponent_string_to_kind(const char* string); + +const char* icalcomponent_kind_to_string(icalcomponent_kind kind); + + +/************* Derived class methods. **************************** + +If the code was in an OO language, the remaining routines would be +members of classes derived from icalcomponent. Don't call them on the +wrong component subtypes. */ + +/** For VCOMPONENT: Return a reference to the first VEVENT, VTODO or + VJOURNAL */ +icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c); + +/** For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end + times of an event in UTC */ +struct icaltime_span icalcomponent_get_span(icalcomponent* comp); + +/******************** Convienience routines **********************/ + +void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v); +struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp); + +/* For the icalcomponent routines only, dtend and duration are tied + together. If you call the set routine for one and the other exists, + the routine will calculate the change to the other. That is, if + there is a DTEND and you call set_duration, the routine will modify + DTEND to be the sum of DTSTART and the duration. If you call a get + routine for one and the other exists, the routine will calculate + the return value. If you call a set routine and neither exists, the + routine will create the apcompriate comperty */ + + +struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp); +void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v); + +struct icaltimetype icalcomponent_get_due(icalcomponent* comp); +void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v); + +void icalcomponent_set_duration(icalcomponent* comp, + struct icaldurationtype v); +struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp); + +void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method); +icalproperty_method icalcomponent_get_method(icalcomponent* comp); + +struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp); +void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v); + +void icalcomponent_set_summary(icalcomponent* comp, const char* v); +const char* icalcomponent_get_summary(icalcomponent* comp); + +void icalcomponent_set_comment(icalcomponent* comp, const char* v); +const char* icalcomponent_get_comment(icalcomponent* comp); + +void icalcomponent_set_uid(icalcomponent* comp, const char* v); +const char* icalcomponent_get_uid(icalcomponent* comp); + +void icalcomponent_set_relcalid(icalcomponent* comp, const char* v); +const char* icalcomponent_get_relcalid(icalcomponent* comp); + +void icalcomponent_set_recurrenceid(icalcomponent* comp, + struct icaltimetype v); +struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp); + +void icalcomponent_set_description(icalcomponent* comp, const char* v); +const char* icalcomponent_get_description(icalcomponent* comp); + +void icalcomponent_set_location(icalcomponent* comp, const char* v); +const char* icalcomponent_get_location(icalcomponent* comp); + +void icalcomponent_set_sequence(icalcomponent* comp, int v); +int icalcomponent_get_sequence(icalcomponent* comp); + +void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v); +enum icalproperty_status icalcomponent_get_status(icalcomponent* comp); + + +/** Calls the given function for each TZID parameter found in the + component, and any subcomponents. */ +void icalcomponent_foreach_tzid(icalcomponent* comp, + void (*callback)(icalparameter *param, void *data), + void *callback_data); + +/** Returns the icaltimezone in the component corresponding to the + TZID, or NULL if it can't be found. */ +icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, + const char *tzid); + +int icalproperty_recurrence_is_excluded(icalcomponent *comp, + struct icaltimetype *dtstart, + struct icaltimetype *recurtime); + +void icalcomponent_foreach_recurrence(icalcomponent* comp, + struct icaltimetype start, + struct icaltimetype end, + void (*callback)(icalcomponent *comp, + struct icaltime_span *span, + void *data), + void *callback_data); + + +/*************** Type Specific routines ***************/ + +icalcomponent* icalcomponent_new_vcalendar(); +icalcomponent* icalcomponent_new_vevent(); +icalcomponent* icalcomponent_new_vtodo(); +icalcomponent* icalcomponent_new_vjournal(); +icalcomponent* icalcomponent_new_valarm(); +icalcomponent* icalcomponent_new_vfreebusy(); +icalcomponent* icalcomponent_new_vtimezone(); +icalcomponent* icalcomponent_new_xstandard(); +icalcomponent* icalcomponent_new_xdaylight(); +icalcomponent* icalcomponent_new_vagenda(); +icalcomponent* icalcomponent_new_vquery(); + +#endif /* !ICALCOMPONENT_H */ diff --git a/libkcal/libical/src/libical/icalderivedparameter.c.in b/libkcal/libical/src/libical/icalderivedparameter.c.in new file mode 100644 index 000000000..db112be6d --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedparameter.c.in @@ -0,0 +1,205 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedparameters.{c,h} + CREATOR: eric 09 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalderivedparameters.{c,h} + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + ======================================================================*/ +/*#line 29 "icalparameter.c.in"*/ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + + +#include "icalparameter.h" +#include "icalparameterimpl.h" + +#include "icalproperty.h" +#include "icalerror.h" +#include "icalmemory.h" + +#include <stdlib.h> /* for malloc() */ +#include <errno.h> +#include <string.h> /* for memset() */ + +icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); + +struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind); + +/* This map associates each of the parameters with the string + representation of the parameter's name */ +struct icalparameter_kind_map { + icalparameter_kind kind; + const char *name; + +}; + +/* This map associates the enumerations for the VALUE parameter with + the kinds of VALUEs. */ + +struct icalparameter_value_kind_map { + icalparameter_value value; + icalvalue_kind kind; +}; + +/* This map associates the parameter enumerations with a specific parameter and the string representation of the enumeration */ + +struct icalparameter_map { + icalparameter_kind kind; + int enumeration; + const char* str; +}; + + + +<insert_code_here> + +const char* icalparameter_kind_to_string(icalparameter_kind kind) +{ + int i; + + for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { + if (parameter_map[i].kind == kind) { + return parameter_map[i].name; + } + } + + return 0; + +} + +icalparameter_kind icalparameter_string_to_kind(const char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_PARAMETER; + } + + for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { + + if (strcasecmp(parameter_map[i].name, string) == 0) { + return parameter_map[i].kind; + } + } + + if(strncmp(string,"X-",2)==0){ + return ICAL_X_PARAMETER; + } + + return ICAL_NO_PARAMETER; +} + + +icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value) +{ + int i; + + for (i=0; value_kind_map[i].kind != ICAL_NO_VALUE; i++) { + + if (value_kind_map[i].value == value) { + return value_kind_map[i].kind; + } + } + + return ICAL_NO_VALUE; +} + + +const char* icalparameter_enum_to_string(int e) +{ + int i; + + icalerror_check_arg_rz(e >= ICALPARAMETER_FIRST_ENUM,"e"); + icalerror_check_arg_rz(e <= ICALPARAMETER_LAST_ENUM,"e"); + + for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ + if(e == icalparameter_map[i].enumeration){ + return icalparameter_map[i].str; + } + } + + return 0; +} + +int icalparameter_string_to_enum(const char* str) +{ + int i; + + icalerror_check_arg_rz(str != 0,"str"); + + for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ + if(strcasecmp(str,icalparameter_map[i].str) == 0) { + return icalparameter_map[i].enumeration; + } + } + + return 0; +} + +icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val) +{ + + struct icalparameter_impl* param=0; + int found_kind = 0; + int i; + + icalerror_check_arg_rz((val!=0),"val"); + + /* Search through the parameter map to find a matching kind */ + + param = icalparameter_new_impl(kind); + if (!param) + return 0; + + for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ + if(kind == icalparameter_map[i].kind) { + found_kind = 1; + if(strcasecmp(val,icalparameter_map[i].str) == 0) { + + param->data = (int)icalparameter_map[i].enumeration; + return param; + } + } + } + + if(found_kind == 1){ + /* The kind was in the parameter map, but the string did not + match, so assume that it is an alternate value, like an + X-value.*/ + + icalparameter_set_xvalue(param, val); + + } else { + + /* If the kind was not found, then it must be a string type */ + + ((struct icalparameter_impl*)param)->string = icalmemory_strdup(val); + + } + + return param; +} + + + + diff --git a/libkcal/libical/src/libical/icalderivedparameter.h.in b/libkcal/libical/src/libical/icalderivedparameter.h.in new file mode 100644 index 000000000..99be6ff2d --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedparameter.h.in @@ -0,0 +1,36 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalparam.h + CREATOR: eric 20 March 1999 + + + + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalparam.h + + ======================================================================*/ + +#ifndef ICALDERIVEDPARAMETER_H +#define ICALDERIVEDPARAMETER_H + + +typedef struct icalparameter_impl icalparameter; + +const char* icalparameter_enum_to_string(int e); +int icalparameter_string_to_enum(const char* str); + +<insert_code_here> diff --git a/libkcal/libical/src/libical/icalderivedproperty.c.in b/libkcal/libical/src/libical/icalderivedproperty.c.in new file mode 100644 index 000000000..a8bcbc047 --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedproperty.c.in @@ -0,0 +1,284 @@ +/* -*- Mode: C -*- */ + +/*====================================================================== + FILE: icalderivedproperty.c + CREATOR: eric 15 Feb 2001 + + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalproperty.c + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalproperty.h" +#include "icalcomponent.h" +#include "pvl.h" +#include "icalenums.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparser.h" + +#include <string.h> /* For icalmemory_strdup, rindex */ +#include <assert.h> +#include <stdlib.h> +#include <errno.h> +#include <stdio.h> /* for printf */ +#include <stdarg.h> /* for va_list, va_start, etc. */ + +struct icalproperty_impl* +icalproperty_new_impl (icalproperty_kind kind); +void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); + +/* This map associates the property kinds with the string + representation of the property name and the kind of VALUE that the + property uses as a default */ + +struct icalproperty_map { + icalproperty_kind kind; + const char *name; + icalvalue_kind value; + +}; + +/* This map associates the property enumerations with the king of + property that they are used in and the string representation of the + enumeration */ + +struct icalproperty_enum_map { + icalproperty_kind prop; + int prop_enum; + const char* str; +}; + + +<insert_code_here> + +int icalproperty_kind_is_valid(const icalproperty_kind kind) +{ + int i = 0; + do { + if (property_map[i].kind == kind) + return 1; + } while (property_map[i++].kind != ICAL_NO_PROPERTY); + + return 0; +} + +const char* icalproperty_kind_to_string(icalproperty_kind kind) +{ + int i; + + for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { + if (property_map[i].kind == kind) { + return property_map[i].name; + } + } + + return 0; + +} + + +icalproperty_kind icalproperty_string_to_kind(const char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_PROPERTY; + } + + + for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { + if (strcasecmp(property_map[i].name, string) == 0) { + return property_map[i].kind; + } + } + + if(strncmp(string,"X-",2)==0){ + return ICAL_X_PROPERTY; + } + + + return ICAL_NO_PROPERTY; +} + + +icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind) +{ + int i; + + for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { + if ( property_map[i].value == kind ) { + return property_map[i].kind; + } + } + + return ICAL_NO_PROPERTY; +} + + + +icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind) +{ + int i; + + for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { + if ( property_map[i].kind == kind ) { + return property_map[i].value; + } + } + + return ICAL_NO_VALUE; +} + + +const char* icalproperty_enum_to_string(int e) +{ + icalerror_check_arg_rz(e >= ICALPROPERTY_FIRST_ENUM,"e"); + icalerror_check_arg_rz(e <= ICALPROPERTY_LAST_ENUM,"e"); + + return enum_map[e-ICALPROPERTY_FIRST_ENUM].str; +} + +int icalproperty_kind_and_string_to_enum(const int kind, const char* str) +{ + icalproperty_kind pkind; + int i; + + icalerror_check_arg_rz(str!=0,"str") + + if ((pkind = icalproperty_value_kind_to_kind(kind)) == ICAL_NO_VALUE) + return 0; + + while(*str == ' '){ + str++; + } + + for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { + if (enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == pkind) + break; + } + if (i == ICALPROPERTY_LAST_ENUM) + return 0; + + for (; i != ICALPROPERTY_LAST_ENUM; i++) { + if ( strcasecmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { + return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; + } + } + + return 0; +} + +/** @deprecated please use icalproperty_kind_and_string_to_enum instead */ +int icalproperty_string_to_enum(const char* str) +{ + int i; + + icalerror_check_arg_rz(str!=0,"str") + + while(*str == ' '){ + str++; + } + + for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { + if ( strcasecmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { + return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; + } + } + + return 0; +} + +int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e) +{ + int i; + + + for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { + if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum == e && + enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == kind ){ + return 1; + } + } + + return 0; +} + + +const char* icalproperty_method_to_string(icalproperty_method method) +{ + icalerror_check_arg_rz(method >= ICAL_METHOD_X,"method"); + icalerror_check_arg_rz(method <= ICAL_METHOD_NONE,"method"); + + return enum_map[method-ICALPROPERTY_FIRST_ENUM].str; +} + +icalproperty_method icalproperty_string_to_method(const char* str) +{ + int i; + + icalerror_check_arg_rx(str!=0,"str",ICAL_METHOD_NONE) + + while(*str == ' '){ + str++; + } + + for (i=ICAL_METHOD_X-ICALPROPERTY_FIRST_ENUM; + i != ICAL_METHOD_NONE-ICALPROPERTY_FIRST_ENUM; + i++) { + if ( strcasecmp(enum_map[i].str, str) == 0) { + return (icalproperty_method)enum_map[i].prop_enum; + } + } + + return ICAL_METHOD_NONE; +} + + +const char* icalenum_status_to_string(icalproperty_status status) +{ + icalerror_check_arg_rz(status >= ICAL_STATUS_X,"status"); + icalerror_check_arg_rz(status <= ICAL_STATUS_NONE,"status"); + + return enum_map[status-ICALPROPERTY_FIRST_ENUM].str; +} + +icalproperty_status icalenum_string_to_status(const char* str) +{ + int i; + + icalerror_check_arg_rx(str!=0,"str",ICAL_STATUS_NONE) + + while(*str == ' '){ + str++; + } + + for (i=ICAL_STATUS_X-ICALPROPERTY_FIRST_ENUM; + i != ICAL_STATUS_NONE-ICALPROPERTY_FIRST_ENUM; + i++) { + if ( strcasecmp(enum_map[i].str, str) == 0) { + return (icalproperty_status)enum_map[i].prop_enum; + } + } + + return ICAL_STATUS_NONE; + +} diff --git a/libkcal/libical/src/libical/icalderivedproperty.h.in b/libkcal/libical/src/libical/icalderivedproperty.h.in new file mode 100644 index 000000000..195d27fc1 --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedproperty.h.in @@ -0,0 +1,21 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedproperties.{c,h} + CREATOR: eric 09 May 1999 + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + ======================================================================*/ + + +#ifndef ICALDERIVEDPROPERTY_H +#define ICALDERIVEDPROPERTY_H + +#include <time.h> +#include "icalparameter.h" +#include "icalderivedvalue.h" +#include "icalrecur.h" + +typedef struct icalproperty_impl icalproperty; + +<insert_code_here> diff --git a/libkcal/libical/src/libical/icalderivedvalue.c.in b/libkcal/libical/src/libical/icalderivedvalue.c.in new file mode 100644 index 000000000..e126867ae --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedvalue.c.in @@ -0,0 +1,336 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.c + CREATOR: eric 02 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalvalue.c + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparser.h" +#include "icalenums.h" + +#include "icalvalueimpl.h" + +#include <stdlib.h> /* for malloc */ +#include <stdio.h> /* for snprintf */ +#include <string.h> /* For memset, others */ +#include <stddef.h> /* For offsetof() macro */ +#include <errno.h> +#include <time.h> /* for mktime */ +#include <stdlib.h> /* for atoi and atof */ +#include <limits.h> /* for SHRT_MAX */ + +struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind); + +/* This map associates each of the value types with its string + representation */ +struct icalvalue_kind_map { + icalvalue_kind kind; + char name[20]; +}; + +<insert_code_here> + + +int icalvalue_kind_is_valid(const icalvalue_kind kind) +{ + int i = 0; + do { + if (value_map[i].kind == kind) + return 1; + } while (value_map[i++].kind != ICAL_NO_VALUE); + + return 0; +} + +const char* icalvalue_kind_to_string(const icalvalue_kind kind) +{ + int i; + + for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { + if (value_map[i].kind == kind) { + return value_map[i].name; + } + } + + return 0; +} + +icalvalue_kind icalvalue_string_to_kind(const char* str) +{ + int i; + + for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { + if (strcasecmp(value_map[i].name,str) == 0) { + return value_map[i].kind; + } + } + + return value_map[i].kind; + +} + +icalvalue* icalvalue_new_x (const char* v){ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_X_VALUE); + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_x((icalvalue*)impl,v); + return (icalvalue*)impl; +} +void icalvalue_set_x(icalvalue* impl, const char* v) { + icalerror_check_arg_rv( (impl!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + if(impl->x_value!=0) {free((void*)impl->x_value);} + + impl->x_value = icalmemory_strdup(v); + + if (impl->x_value == 0){ + errno = ENOMEM; + } + + } +const char* icalvalue_get_x(const icalvalue* value) { + + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_X_VALUE); + return value->x_value; +} + +/* Recur is a special case, so it is not auto generated. */ +icalvalue* +icalvalue_new_recur (struct icalrecurrencetype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_RECUR_VALUE); + + icalvalue_set_recur((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_recur(icalvalue* impl, struct icalrecurrencetype v) +{ + icalerror_check_arg_rv( (impl!=0),"value"); + icalerror_check_value_type(value, ICAL_RECUR_VALUE); + + if (impl->data.v_recur != 0){ + free(impl->data.v_recur); + impl->data.v_recur = 0; + } + + impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); + + if (impl->data.v_recur == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } else { + memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype)); + } + +} + +struct icalrecurrencetype +icalvalue_get_recur(const icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_RECUR_VALUE); + + return *(value->data.v_recur); +} + + + + +icalvalue* +icalvalue_new_trigger (struct icaltriggertype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRIGGER_VALUE); + + icalvalue_set_trigger((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v) +{ + icalerror_check_arg_rv( (value!=0),"value"); + + if(!icaltime_is_null_time(v.time)){ + icalvalue_set_datetime(value,v.time); + value->kind = ICAL_DATETIME_VALUE; + } else { + icalvalue_set_duration(value,v.duration); + value->kind = ICAL_DURATION_VALUE; + } +} + +struct icaltriggertype +icalvalue_get_trigger(const icalvalue* impl) +{ + struct icaltriggertype tr; + + icalerror_check_arg( (impl!=0),"value"); + icalerror_check_arg( (impl!=0),"value"); + + if(impl->kind == ICAL_DATETIME_VALUE){ + tr.duration = icaldurationtype_from_int(0); + tr.time = impl->data.v_time; + } else if(impl->kind == ICAL_DURATION_VALUE){ + tr.time = icaltime_null_time(); + tr.duration = impl->data.v_duration; + } else { + tr.duration = icaldurationtype_from_int(0); + tr.time = icaltime_null_time(); + icalerror_set_errno(ICAL_BADARG_ERROR); + } + + return tr; +} + +/* DATE-TIME-PERIOD is a special case, and is not auto generated */ + +icalvalue* +icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE); + + icalvalue_set_datetimeperiod(impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_datetimeperiod(icalvalue* impl, struct icaldatetimeperiodtype v) +{ + icalerror_check_arg_rv( (impl!=0),"value"); + + icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); + + if(!icaltime_is_null_time(v.time)){ + if(!icaltime_is_valid_time(v.time)){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return; + } + impl->kind = ICAL_DATETIME_VALUE; + icalvalue_set_datetime(impl,v.time); + } else if (!icalperiodtype_is_null_period(v.period)) { + if(!icalperiodtype_is_valid_period(v.period)){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return; + } + impl->kind = ICAL_PERIOD_VALUE; + icalvalue_set_period(impl,v.period); + } else { + icalerror_set_errno(ICAL_BADARG_ERROR); + } +} + +struct icaldatetimeperiodtype +icalvalue_get_datetimeperiod(const icalvalue* impl) +{ + struct icaldatetimeperiodtype dtp; + + icalerror_check_arg( (impl!=0),"value"); + icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); + + if( impl->kind == ICAL_DATETIME_VALUE || impl->kind == ICAL_DATE_VALUE ){ + dtp.period = icalperiodtype_null_period(); + dtp.time = impl->data.v_time; + } else if(impl->kind == ICAL_PERIOD_VALUE) { + dtp.period = impl->data.v_period; + dtp.time = icaltime_null_time(); + } else { + dtp.period = icalperiodtype_null_period(); + dtp.time = icaltime_null_time(); + icalerror_set_errno(ICAL_BADARG_ERROR); + } + + return dtp; +} + + + +icalvalue * +icalvalue_new_attach (icalattach *attach) +{ + struct icalvalue_impl *impl; + + icalerror_check_arg_rz ((attach != NULL), "attach"); + + impl = icalvalue_new_impl (ICAL_ATTACH_VALUE); + if (!impl) { + errno = ENOMEM; + return NULL; + } + + icalvalue_set_attach ((icalvalue *) impl, attach); + return (icalvalue *) impl; +} + +void +icalvalue_set_attach (icalvalue *value, icalattach *attach) +{ + struct icalvalue_impl *impl; + + icalerror_check_arg_rv ((value != NULL), "value"); + icalerror_check_value_type (value, ICAL_ATTACH_VALUE); + icalerror_check_arg_rv ((attach != NULL), "attach"); + + impl = (struct icalvalue_impl *) value; + + icalattach_ref (attach); + + if (impl->data.v_attach) + icalattach_unref (impl->data.v_attach); + + impl->data.v_attach = attach; +} + +icalattach * +icalvalue_get_attach (const icalvalue *value) +{ + icalerror_check_arg_rz ((value != NULL), "value"); + icalerror_check_value_type (value, ICAL_ATTACH_VALUE); + + return value->data.v_attach; +} + + + + + + + +/* The remaining interfaces are 'new', 'set' and 'get' for each of the value + types */ + + +/* Everything below this line is machine generated. Do not edit. */ diff --git a/libkcal/libical/src/libical/icalderivedvalue.h.in b/libkcal/libical/src/libical/icalderivedvalue.h.in new file mode 100644 index 000000000..92c45340b --- /dev/null +++ b/libkcal/libical/src/libical/icalderivedvalue.h.in @@ -0,0 +1,63 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.h + CREATOR: eric 20 March 1999 + + + + + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalvalue.h + + ======================================================================*/ + +#ifndef ICALDERIVEDVALUE_H +#define ICALDERIVEDVALUE_H + +#include "icaltypes.h" +#include "icalrecur.h" +#include "icaltime.h" +#include "icalduration.h" +#include "icalperiod.h" +#include "icalattach.h" + +typedef struct icalvalue_impl icalvalue; + + + +void icalvalue_set_x(icalvalue* value, const char* v); +icalvalue* icalvalue_new_x(const char* v); +const char* icalvalue_get_x(const icalvalue* value); + +icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); +void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); +struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); + +icalvalue* icalvalue_new_trigger (struct icaltriggertype v); +void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); +struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); + +icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); +void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v); +struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); + +icalvalue *icalvalue_new_attach (icalattach *attach); +void icalvalue_set_attach (icalvalue *value, icalattach *attach); +icalattach *icalvalue_get_attach (const icalvalue *value); + +void icalvalue_reset_kind(icalvalue* value); + +<insert_code_here> diff --git a/libkcal/libical/src/libical/icalduration.c b/libkcal/libical/src/libical/icalduration.c new file mode 100644 index 000000000..0d9856b23 --- /dev/null +++ b/libkcal/libical/src/libical/icalduration.c @@ -0,0 +1,331 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icaltime.c + CREATOR: eric 02 June 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalduration.h" + +#include <assert.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +#include "icalerror.h" +#include "icalmemory.h" +#include "icalvalue.h" + + + + +/* From Seth Alves, <alves@hungry.com> */ +struct icaldurationtype icaldurationtype_from_int(int t) +{ + struct icaldurationtype dur; + int used = 0; + + dur = icaldurationtype_null_duration(); + + if(t < 0){ + dur.is_neg = 1; + t = -t; + } + + if (t % (60 * 60 * 24 * 7) == 0) { + dur.weeks = t / (60 * 60 * 24 * 7); + } else { + used += dur.weeks * (60 * 60 * 24 * 7); + dur.days = (t - used) / (60 * 60 * 24); + used += dur.days * (60 * 60 * 24); + dur.hours = (t - used) / (60 * 60); + used += dur.hours * (60 * 60); + dur.minutes = (t - used) / (60); + used += dur.minutes * (60); + dur.seconds = (t - used); + } + + return dur; +} + +struct icaldurationtype icaldurationtype_from_string(const char* str) +{ + + int i; + int begin_flag = 0; + int time_flag = 0; + int date_flag = 0; + int week_flag = 0; + int digits=-1; + int scan_size = -1; + int size = strlen(str); + char p; + struct icaldurationtype d; + + memset(&d, 0, sizeof(struct icaldurationtype)); + + for(i=0;i != size;i++){ + p = str[i]; + + switch(p) + { + case '-': { + if(i != 0 || begin_flag == 1) goto error; + + d.is_neg = 1; + break; + } + + case 'P': { + if (i != 0 && i !=1 ) goto error; + begin_flag = 1; + break; + } + + case 'T': { + time_flag = 1; + break; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + + /* HACK. Skip any more digits if the l;ast one + read has not been assigned */ + if(digits != -1){ + break; + } + + if (begin_flag == 0) goto error; + /* Get all of the digits, not one at a time */ + scan_size = sscanf(&str[i],"%d",&digits); + if(scan_size == 0) goto error; + break; + } + + case 'H': { + if (time_flag == 0||week_flag == 1||d.hours !=0||digits ==-1) + goto error; + d.hours = digits; digits = -1; + break; + } + case 'M': { + if (time_flag == 0||week_flag==1||d.minutes != 0||digits ==-1) + goto error; + d.minutes = digits; digits = -1; + break; + } + case 'S': { + if (time_flag == 0||week_flag==1||d.seconds!=0||digits ==-1) + goto error; + d.seconds = digits; digits = -1; + break; + } + case 'W': { + if (time_flag==1||date_flag==1||d.weeks!=0||digits ==-1) + goto error; + week_flag = 1; + d.weeks = digits; digits = -1; + break; + } + case 'D': { + if (time_flag==1||week_flag==1||d.days!=0||digits ==-1) + goto error; + date_flag = 1; + d.days = digits; digits = -1; + break; + } + default: { + goto error; + } + + } + } + + return d; + + + error: + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return icaldurationtype_bad_duration(); +} + +#define TMP_BUF_SIZE 1024 +static +void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size, + const char* sep, unsigned int value) { + + char temp[TMP_BUF_SIZE]; + + snprintf(temp,sizeof(temp),"%d",value); + + icalmemory_append_string(buf, buf_ptr, buf_size, temp); + icalmemory_append_string(buf, buf_ptr, buf_size, sep); + +} + +char* icaldurationtype_as_ical_string(struct icaldurationtype d) +{ + + char *buf, *output_line; + size_t buf_size = 256; + char* buf_ptr = 0; + int seconds; + + buf = (char*)icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + + seconds = icaldurationtype_as_int(d); + + if(seconds !=0){ + + if(d.is_neg == 1){ + icalmemory_append_char(&buf, &buf_ptr, &buf_size, '-'); + } + + icalmemory_append_char(&buf, &buf_ptr, &buf_size, 'P'); + + if (d.weeks != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "W", d.weeks); + } + + if (d.days != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "D", d.days); + } + + if (d.hours != 0 || d.minutes != 0 || d.seconds != 0) { + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "T"); + + if (d.hours != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "H", d.hours); + } + if (d.minutes != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "M", + d.minutes); + } + if (d.seconds != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "S", + d.seconds); + } + + } + } else { + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "PT0S"); + } + + output_line = icalmemory_tmp_copy(buf); + icalmemory_free_buffer(buf); + + return output_line; + +} + + +/* From Russel Steinthal */ +int icaldurationtype_as_int(struct icaldurationtype dur) +{ + return (int)( (dur.seconds + + (60 * dur.minutes) + + (60 * 60 * dur.hours) + + (60 * 60 * 24 * dur.days) + + (60 * 60 * 24 * 7 * dur.weeks)) + * (dur.is_neg==1? -1 : 1) ) ; +} + +struct icaldurationtype icaldurationtype_null_duration(void) +{ + struct icaldurationtype d; + + memset(&d,0,sizeof(struct icaldurationtype)); + + return d; +} + +int icaldurationtype_is_null_duration(struct icaldurationtype d) +{ + if(icaldurationtype_as_int(d) == 0){ + return 1; + } else { + return 0; + } +} + +/* in icalvalue_new_from_string_with_error, we should not call + icaldurationtype_is_null_duration() to see if there is an error + condition. Null duration is perfectly valid for an alarm. + We cannot depend on the caller to check icalerrno either, + following the philosophy of unix errno. we set the is_neg + to -1 to indicate that this is a bad duration. +*/ +struct icaldurationtype icaldurationtype_bad_duration() +{ + struct icaldurationtype d; + memset(&d,0,sizeof(struct icaldurationtype)); + d.is_neg = -1; + return d; +} + +int icaldurationtype_is_bad_duration(struct icaldurationtype d) +{ + return (d.is_neg == -1); +} + + +struct icaltimetype icaltime_add(struct icaltimetype t, + struct icaldurationtype d) +{ + int dt = icaldurationtype_as_int(d); + + t.second += dt; + + t = icaltime_normalize(t); + + return t; +} + +struct icaldurationtype icaltime_subtract(struct icaltimetype t1, + struct icaltimetype t2) +{ + + time_t t1t = icaltime_as_timet(t1); + time_t t2t = icaltime_as_timet(t2); + + return icaldurationtype_from_int((int)(t1t-t2t)); + + +} + diff --git a/libkcal/libical/src/libical/icalduration.h b/libkcal/libical/src/libical/icalduration.h new file mode 100644 index 000000000..fb79dbc38 --- /dev/null +++ b/libkcal/libical/src/libical/icalduration.h @@ -0,0 +1,61 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalduration.h + CREATOR: eric 26 Jan 2001 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALDURATION_H +#define ICALDURATION_H + +#include "icaltime.h" + +struct icaldurationtype +{ + int is_neg; + unsigned int days; + unsigned int weeks; + unsigned int hours; + unsigned int minutes; + unsigned int seconds; +}; + +struct icaldurationtype icaldurationtype_from_int(int t); +struct icaldurationtype icaldurationtype_from_string(const char*); +int icaldurationtype_as_int(struct icaldurationtype duration); +char* icaldurationtype_as_ical_string(struct icaldurationtype d); +struct icaldurationtype icaldurationtype_null_duration(void); +struct icaldurationtype icaldurationtype_bad_duration(void); +int icaldurationtype_is_null_duration(struct icaldurationtype d); +int icaldurationtype_is_bad_duration(struct icaldurationtype d); + +struct icaltimetype icaltime_add(struct icaltimetype t, + struct icaldurationtype d); + +struct icaldurationtype icaltime_subtract(struct icaltimetype t1, + struct icaltimetype t2); + +#endif /* !ICALDURATION_H */ + + + diff --git a/libkcal/libical/src/libical/icalenums.c b/libkcal/libical/src/libical/icalenums.c new file mode 100644 index 000000000..70d97fafe --- /dev/null +++ b/libkcal/libical/src/libical/icalenums.c @@ -0,0 +1,166 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalenum.c + CREATOR: eric 29 April 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalenum.c + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icalenums.h" + +#include <stdio.h> /* For fprintf */ +#include <stdio.h> /* For stderr */ +#include <string.h> /* For strncmp */ +#include <assert.h> +#include "icalmemory.h" + +/*** @brief Allowed request status values + */ +static struct { + enum icalrequeststatus kind; + int major; + int minor; + const char* str; +} request_status_map[] = { + {ICAL_2_0_SUCCESS_STATUS, 2,0,"Success."}, + {ICAL_2_1_FALLBACK_STATUS, 2,1,"Success but fallback taken on one or more property values."}, + {ICAL_2_2_IGPROP_STATUS, 2,2,"Success, invalid property ignored."}, + {ICAL_2_3_IGPARAM_STATUS, 2,3,"Success, invalid property parameter ignored."}, + {ICAL_2_4_IGXPROP_STATUS, 2,4,"Success, unknown non-standard property ignored."}, + {ICAL_2_5_IGXPARAM_STATUS, 2,5,"Success, unknown non standard property value ignored."}, + {ICAL_2_6_IGCOMP_STATUS, 2,6,"Success, invalid calendar component ignored."}, + {ICAL_2_7_FORWARD_STATUS, 2,7,"Success, request forwarded to Calendar User."}, + {ICAL_2_8_ONEEVENT_STATUS, 2,8,"Success, repeating event ignored. Scheduled as a single component."}, + {ICAL_2_9_TRUNC_STATUS, 2,9,"Success, truncated end date time to date boundary."}, + {ICAL_2_10_ONETODO_STATUS, 2,10,"Success, repeating VTODO ignored. Scheduled as a single VTODO."}, + {ICAL_2_11_TRUNCRRULE_STATUS, 2,11,"Success, unbounded RRULE clipped at some finite number of instances "}, + {ICAL_3_0_INVPROPNAME_STATUS, 3,0,"Invalid property name."}, + {ICAL_3_1_INVPROPVAL_STATUS, 3,1,"Invalid property value."}, + {ICAL_3_2_INVPARAM_STATUS, 3,2,"Invalid property parameter."}, + {ICAL_3_3_INVPARAMVAL_STATUS, 3,3,"Invalid property parameter value."}, + {ICAL_3_4_INVCOMP_STATUS, 3,4,"Invalid calendar component."}, + {ICAL_3_5_INVTIME_STATUS, 3,5,"Invalid date or time."}, + {ICAL_3_6_INVRULE_STATUS, 3,6,"Invalid rule."}, + {ICAL_3_7_INVCU_STATUS, 3,7,"Invalid Calendar User."}, + {ICAL_3_8_NOAUTH_STATUS, 3,8,"No authority."}, + {ICAL_3_9_BADVERSION_STATUS, 3,9,"Unsupported version."}, + {ICAL_3_10_TOOBIG_STATUS, 3,10,"Request entity too large."}, + {ICAL_3_11_MISSREQCOMP_STATUS, 3,11,"Required component or property missing."}, + {ICAL_3_12_UNKCOMP_STATUS, 3,12,"Unknown component or property found."}, + {ICAL_3_13_BADCOMP_STATUS, 3,13,"Unsupported component or property found"}, + {ICAL_3_14_NOCAP_STATUS, 3,14,"Unsupported capability."}, + {ICAL_3_15_INVCOMMAND, 3,15,"Invalid command."}, + {ICAL_4_0_BUSY_STATUS, 4,0,"Event conflict. Date/time is busy."}, + {ICAL_4_1_STORE_ACCESS_DENIED, 4,1,"Store Access Denied."}, + {ICAL_4_2_STORE_FAILED, 4,2,"Store Failed."}, + {ICAL_4_3_STORE_NOT_FOUND, 4,3,"Store not found."}, + {ICAL_5_0_MAYBE_STATUS, 5,0,"Request MAY supported."}, + {ICAL_5_1_UNAVAIL_STATUS, 5,1,"Service unavailable."}, + {ICAL_5_2_NOSERVICE_STATUS, 5,2,"Invalid calendar service."}, + {ICAL_5_3_NOSCHED_STATUS, 5,3,"No scheduling support for user."}, + {ICAL_6_1_CONTAINER_NOT_FOUND, 6,1,"Container not found."}, + {ICAL_9_0_UNRECOGNIZED_COMMAND, 9,0,"An unrecognized command was received."}, + {ICAL_UNKNOWN_STATUS, 0,0,"Error: Unknown request status"} +}; + + +/*** @brief Return the descriptive text for a request status + */ +const char* icalenum_reqstat_desc(icalrequeststatus stat) +{ + int i; + + for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( request_status_map[i].kind == stat) { + return request_status_map[i].str; + } + } + + return 0; +} + +/*** @brief Return the code for a request status + */ +char* icalenum_reqstat_code(icalrequeststatus stat) +{ + int i, major, minor; + char tmpbuf[36]; + + for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( request_status_map[i].kind == stat) { + major = request_status_map[i].major; + minor = request_status_map[i].minor; + snprintf(tmpbuf, sizeof(tmpbuf), "%i.%i", major, minor); + return icalmemory_tmp_copy(tmpbuf); + } + } + return NULL; +} + +/*** @brief Return the major number for a request status + */ +short icalenum_reqstat_major(icalrequeststatus stat) +{ + int i; + + for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( request_status_map[i].kind == stat) { + return request_status_map[i].major; + } + } + return -1; +} + +/*** @brief Return the minor number for a request status + */ +short icalenum_reqstat_minor(icalrequeststatus stat) +{ + int i; + + for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( request_status_map[i].kind == stat) { + return request_status_map[i].minor; + } + } + return -1; +} + + +/*** @brief Return a request status for major/minor status numbers + */ +icalrequeststatus icalenum_num_to_reqstat(short major, short minor) +{ + int i; + + for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( request_status_map[i].major == major && request_status_map[i].minor == minor) { + return request_status_map[i].kind; + } + } + return 0; +} + + + diff --git a/libkcal/libical/src/libical/icalenums.h b/libkcal/libical/src/libical/icalenums.h new file mode 100644 index 000000000..971655a3d --- /dev/null +++ b/libkcal/libical/src/libical/icalenums.h @@ -0,0 +1,166 @@ + +/* -*- Mode: C -*-*/ +/*====================================================================== + FILE: icalenums.h + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalenums.h + + Contributions from: + Graham Davison <g.m.davison@computer.org> + +======================================================================*/ + +#ifndef ICALENUMS_H +#define ICALENUMS_H + + + +/*********************************************************************** + * Component enumerations +**********************************************************************/ + +typedef enum icalcomponent_kind { + ICAL_NO_COMPONENT, + ICAL_ANY_COMPONENT, /* Used to select all components*/ + ICAL_XROOT_COMPONENT, + ICAL_XATTACH_COMPONENT, /* MIME attached data, returned by parser. */ + ICAL_VEVENT_COMPONENT, + ICAL_VTODO_COMPONENT, + ICAL_VJOURNAL_COMPONENT, + ICAL_VCALENDAR_COMPONENT, + ICAL_VAGENDA_COMPONENT, + ICAL_VFREEBUSY_COMPONENT, + ICAL_VALARM_COMPONENT, + ICAL_XAUDIOALARM_COMPONENT, + ICAL_XDISPLAYALARM_COMPONENT, + ICAL_XEMAILALARM_COMPONENT, + ICAL_XPROCEDUREALARM_COMPONENT, + ICAL_VTIMEZONE_COMPONENT, + ICAL_XSTANDARD_COMPONENT, + ICAL_XDAYLIGHT_COMPONENT, + ICAL_X_COMPONENT, + ICAL_VSCHEDULE_COMPONENT, + ICAL_VQUERY_COMPONENT, + ICAL_VCAR_COMPONENT, + ICAL_VCOMMAND_COMPONENT, + ICAL_XLICINVALID_COMPONENT, + ICAL_XLICMIMEPART_COMPONENT /* a non-stardard component that mirrors + structure of MIME data */ + +} icalcomponent_kind; + + + +/*********************************************************************** + * Request Status codes + **********************************************************************/ + +typedef enum icalrequeststatus { + ICAL_UNKNOWN_STATUS, + ICAL_2_0_SUCCESS_STATUS, + ICAL_2_1_FALLBACK_STATUS, + ICAL_2_2_IGPROP_STATUS, + ICAL_2_3_IGPARAM_STATUS, + ICAL_2_4_IGXPROP_STATUS, + ICAL_2_5_IGXPARAM_STATUS, + ICAL_2_6_IGCOMP_STATUS, + ICAL_2_7_FORWARD_STATUS, + ICAL_2_8_ONEEVENT_STATUS, + ICAL_2_9_TRUNC_STATUS, + ICAL_2_10_ONETODO_STATUS, + ICAL_2_11_TRUNCRRULE_STATUS, + ICAL_3_0_INVPROPNAME_STATUS, + ICAL_3_1_INVPROPVAL_STATUS, + ICAL_3_2_INVPARAM_STATUS, + ICAL_3_3_INVPARAMVAL_STATUS, + ICAL_3_4_INVCOMP_STATUS, + ICAL_3_5_INVTIME_STATUS, + ICAL_3_6_INVRULE_STATUS, + ICAL_3_7_INVCU_STATUS, + ICAL_3_8_NOAUTH_STATUS, + ICAL_3_9_BADVERSION_STATUS, + ICAL_3_10_TOOBIG_STATUS, + ICAL_3_11_MISSREQCOMP_STATUS, + ICAL_3_12_UNKCOMP_STATUS, + ICAL_3_13_BADCOMP_STATUS, + ICAL_3_14_NOCAP_STATUS, + ICAL_3_15_INVCOMMAND, + ICAL_4_0_BUSY_STATUS, + ICAL_4_1_STORE_ACCESS_DENIED, + ICAL_4_2_STORE_FAILED, + ICAL_4_3_STORE_NOT_FOUND, + ICAL_5_0_MAYBE_STATUS, + ICAL_5_1_UNAVAIL_STATUS, + ICAL_5_2_NOSERVICE_STATUS, + ICAL_5_3_NOSCHED_STATUS, + ICAL_6_1_CONTAINER_NOT_FOUND, + ICAL_9_0_UNRECOGNIZED_COMMAND +} icalrequeststatus; + + +const char* icalenum_reqstat_desc(icalrequeststatus stat); +short icalenum_reqstat_major(icalrequeststatus stat); +short icalenum_reqstat_minor(icalrequeststatus stat); +icalrequeststatus icalenum_num_to_reqstat(short major, short minor); +char* icalenum_reqstat_code(icalrequeststatus stat); + +/*********************************************************************** + * Conversion functions +**********************************************************************/ + + +/* Thse routines used to be in icalenums.c, but were moved into the + icalproperty, icalparameter, icalvalue, or icalcomponent modules. */ + +/* const char* icalproperty_kind_to_string(icalproperty_kind kind);*/ +#define icalenum_property_kind_to_string(x) icalproperty_kind_to_string(x) + +/*icalproperty_kind icalproperty_string_to_kind(const char* string)*/ +#define icalenum_string_to_property_kind(x) icalproperty_string_to_kind(x) + +/*icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);*/ +#define icalenum_property_kind_to_value_kind(x) icalproperty_kind_to_value_kind(x) + +/*const char* icalenum_method_to_string(icalproperty_method);*/ +#define icalenum_method_to_string(x) icalproperty_method_to_string(x) + +/*icalproperty_method icalenum_string_to_method(const char* string);*/ +#define icalenum_string_to_method(x) icalproperty_string_to_method(x) + +/*const char* icalenum_status_to_string(icalproperty_status);*/ +#define icalenum_status_to_string(x) icalproperty_status_to_string(x) + +/*icalproperty_status icalenum_string_to_status(const char* string);*/ +#define icalenum_string_to_status(x) icalproperty_string_to_status(x) + +/*icalvalue_kind icalenum_string_to_value_kind(const char* str);*/ +#define icalenum_string_to_value_kind(x) icalvalue_string_to_kind(x) + +/*const char* icalenum_value_kind_to_string(icalvalue_kind kind);*/ +#define icalenum_value_kind_to_string(x) icalvalue_kind_to_string(x) + +/*const char* icalenum_component_kind_to_string(icalcomponent_kind kind);*/ +#define icalenum_component_kind_to_string(x) icalcomponent_kind_to_string(x) + +/*icalcomponent_kind icalenum_string_to_component_kind(const char* string);*/ +#define icalenum_string_to_component_kind(x) icalcomponent_string_to_kind(x) + + +#endif /* !ICALENUMS_H */ + diff --git a/libkcal/libical/src/libical/icalerror.c b/libkcal/libical/src/libical/icalerror.c new file mode 100644 index 000000000..7cd44deaf --- /dev/null +++ b/libkcal/libical/src/libical/icalerror.c @@ -0,0 +1,250 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalerror.c + CREATOR: eric 16 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalerror.c + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdlib.h> /* for malloc() */ +#include <string.h> /* for strcmp */ +#include "icalerror.h" + +#ifdef HAVE_PTHREAD +#include <pthread.h> + +static pthread_key_t icalerrno_key; +static pthread_once_t icalerrno_key_once = PTHREAD_ONCE_INIT; + +static void icalerrno_destroy(void* buf) { + free(buf); + pthread_setspecific(icalerrno_key, NULL); +} + +static void icalerrno_key_alloc(void) { + pthread_key_create(&icalerrno_key, icalerrno_destroy); +} + +icalerrorenum *icalerrno_return(void) { + icalerrorenum *_errno; + + pthread_once(&icalerrno_key_once, icalerrno_key_alloc); + + _errno = (icalerrorenum*) pthread_getspecific(icalerrno_key); + + if (!_errno) { + _errno = malloc(sizeof(icalerrorenum)); + *_errno = ICAL_NO_ERROR; + pthread_setspecific(icalerrno_key, _errno); + } + return _errno; +} + +#else + +static icalerrorenum icalerrno_storage = ICAL_NO_ERROR; + +icalerrorenum *icalerrno_return(void) { + return &icalerrno_storage; +} + +#endif + + +static int foo; + +void icalerror_stop_here(void) +{ + foo++; /* Keep optimizers from removing routine */ +} + +void icalerror_crash_here(void) +{ + int *p=0; + *p = 1; + + assert( *p); +} + +#ifdef ICAL_SETERROR_ISFUNC +void icalerror_set_errno(icalerrorenum x) +{ + icalerrno = x; + if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || + (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && + icalerror_errors_are_fatal == 1 )){ + icalerror_warn(icalerror_strerror(x)); + assert(0); + } + +} +#endif + +void icalerror_clear_errno() { + + icalerrno = ICAL_NO_ERROR; +} + +#ifdef ICAL_ERRORS_ARE_FATAL +int icalerror_errors_are_fatal = 1; +#else +int icalerror_errors_are_fatal = 0; +#endif + +struct icalerror_state { + icalerrorenum error; + icalerrorstate state; +}; + +static struct icalerror_state error_state_map[] = +{ + { ICAL_BADARG_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_NEWFAILED_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_ALLOCATION_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_PARSE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_INTERNAL_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_FILE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_USAGE_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_UNIMPLEMENTED_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_UNKNOWN_ERROR,ICAL_ERROR_DEFAULT}, + { ICAL_NO_ERROR,ICAL_ERROR_DEFAULT} + +}; + +struct icalerror_string_map { + const char* str; + icalerrorenum error; + char name[160]; +}; + +static struct icalerror_string_map string_map[] = +{ + {"BADARG",ICAL_BADARG_ERROR,"BADARG: Bad argument to function"}, + { "NEWFAILED",ICAL_NEWFAILED_ERROR,"NEWFAILED: Failed to create a new object via a *_new() routine"}, + { "ALLOCATION",ICAL_ALLOCATION_ERROR,"ALLOCATION: Failed to allocate new memory"}, + {"MALFORMEDDATA",ICAL_MALFORMEDDATA_ERROR,"MALFORMEDDATA: An input string was not correctly formed or a component has missing or extra properties"}, + { "PARSE",ICAL_PARSE_ERROR,"PARSE: Failed to parse a part of an iCal component"}, + {"INTERNAL",ICAL_INTERNAL_ERROR,"INTERNAL: Random internal error. This indicates an error in the library code, not an error in use"}, + { "FILE",ICAL_FILE_ERROR,"FILE: An operation on a file failed. Check errno for more detail."}, + { "USAGE",ICAL_USAGE_ERROR,"USAGE: Failed to propertyl sequence calls to a set of interfaces"}, + { "UNIMPLEMENTED",ICAL_UNIMPLEMENTED_ERROR,"UNIMPLEMENTED: This feature has not been implemented"}, + { "NO",ICAL_NO_ERROR,"NO: No error"}, + {"UNKNOWN",ICAL_UNKNOWN_ERROR,"UNKNOWN: Unknown error type -- icalerror_strerror() was probably given bad input"} +}; + + +icalerrorenum icalerror_error_from_string(const char* str){ + + icalerrorenum e = ICAL_NO_ERROR; + int i = 0; + + for( i = 0; string_map[i].error != ICAL_NO_ERROR; i++){ + if (strcmp(string_map[i].str,str) == 0){ + e = string_map[i].error; + } + } + + return e; +} + +icalerrorstate icalerror_supress(const char* error){ + + icalerrorenum e = icalerror_error_from_string(error); + icalerrorstate es; + + if (e == ICAL_NO_ERROR){ + return ICAL_ERROR_UNKNOWN; + } + + + es = icalerror_get_error_state(e); + icalerror_set_error_state(e,ICAL_ERROR_NONFATAL); + + return es; +} + +char* icalerror_perror() +{ + return icalerror_strerror(icalerrno); +} + +void icalerror_restore(const char* error, icalerrorstate es){ + + + icalerrorenum e = icalerror_error_from_string(error); + + if (e != ICAL_NO_ERROR){ + icalerror_set_error_state(e,es); + } + +} + + + +void icalerror_set_error_state( icalerrorenum error, + icalerrorstate state) +{ + int i; + + for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){ + if(error_state_map[i].error == error){ + error_state_map[i].state = state; + } + } +} + +icalerrorstate icalerror_get_error_state( icalerrorenum error) +{ + int i; + + for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){ + if(error_state_map[i].error == error){ + return error_state_map[i].state; + } + } + + return ICAL_ERROR_UNKNOWN; +} + + + + +char* icalerror_strerror(icalerrorenum e) { + + int i; + + for (i=0; string_map[i].error != ICAL_UNKNOWN_ERROR; i++) { + if (string_map[i].error == e) { + return string_map[i].name; + } + } + + return string_map[i].name; /* Return string for ICAL_UNKNOWN_ERROR*/ + +} + + + diff --git a/libkcal/libical/src/libical/icalerror.h b/libkcal/libical/src/libical/icalerror.h new file mode 100644 index 000000000..0003b2f9e --- /dev/null +++ b/libkcal/libical/src/libical/icalerror.h @@ -0,0 +1,160 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalerror.h + CREATOR: eric 09 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalerror.h + +======================================================================*/ + + +#ifndef ICALERROR_H +#define ICALERROR_H + +#include <assert.h> +#include <stdio.h> /* For icalerror_warn() */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define ICAL_SETERROR_ISFUNC + + +/** This routine is called before any error is triggered. It is called + by icalerror_set_errno, so it does not appear in all of the macros + below */ +void icalerror_stop_here(void); + +void icalerror_crash_here(void); + +typedef enum icalerrorenum { + ICAL_NO_ERROR, /* icalerrno may not be initialized - put it first so and pray that the compiler initialize things to zero */ + ICAL_BADARG_ERROR, + ICAL_NEWFAILED_ERROR, + ICAL_ALLOCATION_ERROR, + ICAL_MALFORMEDDATA_ERROR, + ICAL_PARSE_ERROR, + ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ + ICAL_FILE_ERROR, + ICAL_USAGE_ERROR, + ICAL_UNIMPLEMENTED_ERROR, + ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ + +} icalerrorenum; + +icalerrorenum * icalerrno_return(void); +#define icalerrno (*(icalerrno_return())) + +/** If true, libicl aborts after a call to icalerror_set_error + * + * @warning NOT THREAD SAFE -- recommended that you do not change + * this in a multithreaded program. + */ +extern int icalerror_errors_are_fatal; + +/* Warning messages */ + +#ifdef __GNUC__ca +#define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);} +#else /* __GNU_C__ */ +#define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);} +#endif /* __GNU_C__ */ + + +void icalerror_clear_errno(void); +void _icalerror_set_errno(icalerrorenum); + +/* Make an individual error fatal or non-fatal. */ +typedef enum icalerrorstate { + ICAL_ERROR_FATAL, /* Not fata */ + ICAL_ERROR_NONFATAL, /* Fatal */ + ICAL_ERROR_DEFAULT, /* Use the value of icalerror_errors_are_fatal*/ + ICAL_ERROR_UNKNOWN /* Asked state for an unknown error type */ +} icalerrorstate ; + +char* icalerror_strerror(icalerrorenum e); +char* icalerror_perror(); +void icalerror_set_error_state( icalerrorenum error, icalerrorstate); +icalerrorstate icalerror_get_error_state( icalerrorenum error); + +#ifndef ICAL_SETERROR_ISFUNC +#define icalerror_set_errno(x) \ +icalerrno = x; \ +if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || \ + (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && \ + icalerror_errors_are_fatal == 1 )){ \ + icalerror_warn(icalerror_strerror(x)); \ + assert(0); \ +} +#else +void icalerror_set_errno(icalerrorenum x); +#endif + +#ifdef ICAL_ERRORS_ARE_FATAL +#undef NDEBUG +#endif + +#define icalerror_check_value_type(value,type); +#define icalerror_check_property_type(value,type); +#define icalerror_check_parameter_type(value,type); +#define icalerror_check_component_type(value,type); + +/* Assert with a message */ +#ifdef ICAL_ERRORS_ARE_FATAL + +#ifdef __GNUC__ +#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();} +#else /*__GNUC__*/ +#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();} +#endif /*__GNUC__*/ + +#else /* ICAL_ERRORS_ARE_FATAL */ +#define icalerror_assert(test,message) +#endif /* ICAL_ERRORS_ARE_FATAL */ + +/* Check & abort if check fails */ +#define icalerror_check_arg(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); } + +/* Check & return void if check fails*/ +#define icalerror_check_arg_rv(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return; } + +/* Check & return 0 if check fails*/ +#define icalerror_check_arg_rz(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} + +/* Check & return an error if check fails*/ +#define icalerror_check_arg_re(test,arg,error) if(!(test)) { icalerror_stop_here(); assert(0); return error;} + +/* Check & return something*/ +#define icalerror_check_arg_rx(test,arg,x) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return x;} + + + +/* String interfaces to set an error to NONFATAL and restore it to its + original value */ + +icalerrorstate icalerror_supress(const char* error); +void icalerror_restore(const char* error, icalerrorstate es); + + +#endif /* !ICALERROR_H */ + + + diff --git a/libkcal/libical/src/libical/icalmemory.c b/libkcal/libical/src/libical/icalmemory.c new file mode 100644 index 000000000..32ab69c24 --- /dev/null +++ b/libkcal/libical/src/libical/icalmemory.c @@ -0,0 +1,373 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalmemory.c + CREATOR: eric 30 June 1999 + + (C) COPYRIGHT 1999, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is icalmemory.h + + ======================================================================*/ + +/** + * @file icalmemory.c + * @brief Common memory management routines. + * + * libical often passes strings back to the caller. To make these + * interfaces simple, I did not want the caller to have to pass in a + * memory buffer, but having libical pass out newly allocated memory + * makes it difficult to de-allocate the memory. + * + * The ring buffer in this scheme makes it possible for libical to pass + * out references to memory which the caller does not own, and be able + * to de-allocate the memory later. The ring allows libical to have + * several buffers active simultaneously, which is handy when creating + * string representations of components. + */ + +#define ICALMEMORY_C + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef DMALLOC +#include "dmalloc.h" +#endif + +#include "icalmemory.h" +#include "icalerror.h" + +#include <stdio.h> /* for printf (debugging) */ +#include <stdlib.h> /* for malloc, realloc */ +#include <string.h> /* for memset(), strdup */ + +#ifdef WIN32 +#include <windows.h> +#endif + +#define BUFFER_RING_SIZE 2500 +#define MIN_BUFFER_SIZE 200 + + +/* HACK. Not threadsafe */ + +typedef struct { + int pos; + void *ring[BUFFER_RING_SIZE]; +} buffer_ring; + +void icalmemory_free_tmp_buffer (void* buf); +void icalmemory_free_ring_byval(buffer_ring *br); + +static buffer_ring* global_buffer_ring = 0; + +#ifdef HAVE_PTHREAD +#include <pthread.h> + +static pthread_key_t ring_key; +static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT; + +static void ring_destroy(void * buf) { + if (buf) icalmemory_free_ring_byval((buffer_ring *) buf); + pthread_setspecific(ring_key, NULL); +} + +static void ring_key_alloc(void) { + pthread_key_create(&ring_key, ring_destroy); +} +#endif + + +static buffer_ring * buffer_ring_new(void) { + buffer_ring *br; + int i; + + br = (buffer_ring *)malloc(sizeof(buffer_ring)); + + for(i=0; i<BUFFER_RING_SIZE; i++){ + br->ring[i] = 0; + } + br->pos = 0; + return(br); +} + + +#ifdef HAVE_PTHREAD +static buffer_ring* get_buffer_ring_pthread(void) { + buffer_ring *br; + + pthread_once(&ring_key_once, ring_key_alloc); + + br = pthread_getspecific(ring_key); + + if (!br) { + br = buffer_ring_new(); + pthread_setspecific(ring_key, br); + } + return(br); +} +#endif + +/* get buffer ring via a single global for a non-threaded program */ +static buffer_ring* get_buffer_ring_global(void) { + if (global_buffer_ring == 0) { + global_buffer_ring = buffer_ring_new(); + } + return(global_buffer_ring); +} + +static buffer_ring *get_buffer_ring(void) { +#ifdef HAVE_PTHREAD + return(get_buffer_ring_pthread()); +#else + return get_buffer_ring_global(); +#endif +} + + +/** Add an existing buffer to the buffer ring */ +void icalmemory_add_tmp_buffer(void* buf) +{ + buffer_ring *br = get_buffer_ring(); + + + /* Wrap around the ring */ + if(++(br->pos) == BUFFER_RING_SIZE){ + br->pos = 0; + } + + /* Free buffers as their slots are overwritten */ + if ( br->ring[br->pos] != 0){ + free( br->ring[br->pos]); + } + + /* Assign the buffer to a slot */ + br->ring[br->pos] = buf; +} + + +/** + * Create a new temporary buffer on the ring. Libical owns these and + * will deallocate them. + */ + +void* +icalmemory_tmp_buffer (size_t size) +{ + char *buf; + + if (size < MIN_BUFFER_SIZE){ + size = MIN_BUFFER_SIZE; + } + + buf = (void*)malloc(size); + + if( buf == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + memset(buf,0,size); + + icalmemory_add_tmp_buffer(buf); + + return buf; +} + +/** get rid of this buffer ring */ +void icalmemory_free_ring_byval(buffer_ring *br) { + int i; + for(i=0; i<BUFFER_RING_SIZE; i++){ + if ( br->ring[i] != 0){ + free( br->ring[i]); + } + } + free(br); +} + +void icalmemory_free_ring() +{ + buffer_ring *br; + br = get_buffer_ring(); + + icalmemory_free_ring_byval(br); +#ifdef HAVE_PTHREAD + pthread_setspecific(ring_key, 0); +#else + global_buffer_ring = 0; +#endif + +} + + + +/** Like strdup, but the buffer is on the ring. */ +char* +icalmemory_tmp_copy(const char* str) +{ + char* b = icalmemory_tmp_buffer(strlen(str)+1); + + strcpy(b,str); + + return b; +} + + +char* icalmemory_strdup(const char *s) +{ + return strdup(s); +} + +void +icalmemory_free_tmp_buffer (void* buf) +{ + if(buf == 0) + { + return; + } + + free(buf); +} + + +/* + * These buffer routines create memory the old fashioned way -- so the + * caller will have to deallocate the new memory + */ + +void* icalmemory_new_buffer(size_t size) +{ + void *b = malloc(size); + + if( b == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + memset(b,0,size); + + return b; +} + +void* icalmemory_resize_buffer(void* buf, size_t size) +{ + void *b = realloc(buf, size); + + if( b == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + return b; +} + +void icalmemory_free_buffer(void* buf) +{ + free(buf); +} + +void +icalmemory_append_string(char** buf, char** pos, size_t* buf_size, + const char* string) +{ + char *new_buf; + char *new_pos; + + size_t data_length, final_length, string_length; + +#ifndef ICAL_NO_INTERNAL_DEBUG + icalerror_check_arg_rv( (buf!=0),"buf"); + icalerror_check_arg_rv( (*buf!=0),"*buf"); + icalerror_check_arg_rv( (pos!=0),"pos"); + icalerror_check_arg_rv( (*pos!=0),"*pos"); + icalerror_check_arg_rv( (buf_size!=0),"buf_size"); + icalerror_check_arg_rv( (*buf_size!=0),"*buf_size"); + icalerror_check_arg_rv( (string!=0),"string"); +#endif + + string_length = strlen(string); + data_length = (size_t)*pos - (size_t)*buf; + final_length = data_length + string_length; + + if ( final_length >= (size_t) *buf_size) { + + + *buf_size = (*buf_size) * 2 + final_length; + + new_buf = realloc(*buf,*buf_size); + + new_pos = (void*)((size_t)new_buf + data_length); + + *pos = new_pos; + *buf = new_buf; + } + + strcpy(*pos, string); + + *pos += string_length; +} + + +void +icalmemory_append_char(char** buf, char** pos, size_t* buf_size, + char ch) +{ + char *new_buf; + char *new_pos; + + size_t data_length, final_length; + +#ifndef ICAL_NO_INTERNAL_DEBUG + icalerror_check_arg_rv( (buf!=0),"buf"); + icalerror_check_arg_rv( (*buf!=0),"*buf"); + icalerror_check_arg_rv( (pos!=0),"pos"); + icalerror_check_arg_rv( (*pos!=0),"*pos"); + icalerror_check_arg_rv( (buf_size!=0),"buf_size"); + icalerror_check_arg_rv( (*buf_size!=0),"*buf_size"); +#endif + + data_length = (size_t)*pos - (size_t)*buf; + + final_length = data_length + 2; + + if ( final_length > (size_t) *buf_size ) { + + + *buf_size = (*buf_size) * 2 + final_length +1; + + new_buf = realloc(*buf,*buf_size); + + new_pos = (void*)((size_t)new_buf + data_length); + + *pos = new_pos; + *buf = new_buf; + } + + **pos = ch; + *pos += 1; + **pos = 0; +} diff --git a/libkcal/libical/src/libical/icalmemory.h b/libkcal/libical/src/libical/icalmemory.h new file mode 100644 index 000000000..ed07c3f17 --- /dev/null +++ b/libkcal/libical/src/libical/icalmemory.h @@ -0,0 +1,83 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalmemory.h + CREATOR: eric 30 June 1999 + + + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org +======================================================================*/ + +#ifndef ICALMEMORY_H +#define ICALMEMORY_H + +#ifndef WIN32 +#include <sys/types.h> /* for size_t */ +#else +#include <stddef.h> +#endif + +/* Tmp buffers are managed by ical. References can be returned to the + caller, although the caller will not own the memory. */ + +void* icalmemory_tmp_buffer(size_t size); +char* icalmemory_tmp_copy(const char* str); + +/** Add an externally allocated buffer to the ring. */ +void icalmemory_add_tmp_buffer(void*); + + +/** Free all memory used in the ring */ +void icalmemory_free_ring(void); + +/* Non-tmp buffers must be freed. These are mostly wrappers around + * malloc, etc, but are used so the caller can change the memory + * allocators in a future version of the library */ + +void* icalmemory_new_buffer(size_t size); +void* icalmemory_resize_buffer(void* buf, size_t size); +void icalmemory_free_buffer(void* buf); + +/** + icalmemory_append_string will copy the string 'string' to the + buffer 'buf' starting at position 'pos', reallocing 'buf' if it is + too small. 'buf_size' is the size of 'buf' and will be changed if + 'buf' is reallocated. 'pos' will point to the last byte of the new + string in 'buf', usually a '\0' */ + +/* THESE ROUTINES CAN NOT BE USED ON TMP BUFFERS. Only use them on + normally allocated memory, or on buffers created from + icalmemory_new_buffer, never with buffers created by + icalmemory_tmp_buffer. If icalmemory_append_string has to resize a + buffer on the ring, the ring will loose track of it an you will + have memory problems. */ + +void icalmemory_append_string(char** buf, char** pos, size_t* buf_size, + const char* string); + +/** icalmemory_append_char is similar, but is appends a character instead of a string */ +void icalmemory_append_char(char** buf, char** pos, size_t* buf_size, + char ch); + +/** A wrapper around strdup. Partly to trap calls to strdup, partly + because in -ansi, gcc on Red Hat claims that strdup is undeclared */ +char* icalmemory_strdup(const char *s); + +#endif /* !ICALMEMORY_H */ + + + diff --git a/libkcal/libical/src/libical/icalmime.c b/libkcal/libical/src/libical/icalmime.c new file mode 100644 index 000000000..0a186d144 --- /dev/null +++ b/libkcal/libical/src/libical/icalmime.c @@ -0,0 +1,393 @@ +/* -*- Mode: C -*-*/ +/*====================================================================== + FILE: icalmime.c + CREATOR: eric 26 July 2000 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#include "icalmime.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "sspm.h" +#include "stdlib.h" +#include <string.h> /* For strdup */ +#include <stdio.h> /* for snprintf*/ + +#ifdef DMALLOC +#include "dmalloc.h" +#endif + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +/* These *_part routines are called by the MIME parser via the + local_action_map */ + +struct text_part +{ + char* buf; + char* buf_pos; + size_t buf_size; +}; + +void* icalmime_text_new_part() +{ + +#define BUF_SIZE 2048 + + struct text_part* impl; + + if ( ( impl = (struct text_part*) + malloc(sizeof(struct text_part))) == 0) { + return 0; + } + + impl->buf = icalmemory_new_buffer(BUF_SIZE); + impl->buf_pos = impl->buf; + impl->buf_size = BUF_SIZE; + + return impl; +} +void icalmime_text_add_line(void *part, + struct sspm_header *header, + const char* line, size_t size) +{ + struct text_part* impl = (struct text_part*) part; + (void)header; + (void)size; + + icalmemory_append_string(&(impl->buf),&(impl->buf_pos), + &(impl->buf_size),line); + +} + +void* icalmime_textcalendar_end_part(void* part) +{ + + struct text_part* impl = (struct text_part*) part; + icalcomponent *c = icalparser_parse_string(impl->buf); + + icalmemory_free_buffer(impl->buf); + free(impl); + + return c; + +} + +void* icalmime_text_end_part(void* part) +{ + struct text_part* impl = ( struct text_part*) part; + + icalmemory_add_tmp_buffer(impl->buf); + /* What for? free(impl); */ + + return impl->buf; +} + +void icalmime_text_free_part(void *part) +{ + part = part; +} + + +/* Ignore Attachments for now */ + +void* icalmime_attachment_new_part() +{ + return 0; +} +void icalmime_attachment_add_line(void *part, struct sspm_header *header, + const char* line, size_t size) +{ + (void)part; + (void)header; + (void)line; + (void)size; +} + +void* icalmime_attachment_end_part(void* part) +{ + (void)part; + return 0; +} + +void icalmime_attachment_free_part(void *part) +{ + (void)part; +} + + + + +struct sspm_action_map icalmime_local_action_map[] = +{ + {SSPM_TEXT_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_textcalendar_end_part,icalmime_text_free_part}, + {SSPM_TEXT_MAJOR_TYPE,SSPM_ANY_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part}, + {SSPM_TEXT_MAJOR_TYPE,SSPM_PLAIN_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part}, + {SSPM_APPLICATION_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, + {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, + {SSPM_AUDIO_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, + {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, + {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,0,0,0,0} +}; + +#define NUM_PARTS 100 /* HACK. Hard Limit */ + + + +struct sspm_part* icalmime_make_part(icalcomponent* comp) +{ + comp = comp; + return 0; +} + +char* icalmime_as_mime_string(char* icalcomponent); + +icalcomponent* icalmime_parse(char* (*get_string)(char *s, size_t size, + void *d), + void *data) +{ + struct sspm_part *parts; + int i, last_level=0; + icalcomponent *root=0, *parent=0, *comp=0, *last = 0; + + if ( (parts = (struct sspm_part *) + malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + memset(parts,0,sizeof(parts)); + + sspm_parse_mime(parts, + NUM_PARTS, /* Max parts */ + icalmime_local_action_map, /* Actions */ + get_string, + data, /* data for get_string*/ + 0 /* First header */); + + + + for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; i++){ + +#define TMPSZ 1024 + char mimetype[TMPSZ]; + const char* major = sspm_major_type_string(parts[i].header.major); + const char* minor = sspm_minor_type_string(parts[i].header.minor); + + if(parts[i].header.minor == SSPM_UNKNOWN_MINOR_TYPE ){ + assert(parts[i].header.minor_text !=0); + minor = parts[i].header.minor_text; + } + + snprintf(mimetype,sizeof(mimetype),"%s/%s",major,minor); + + comp = icalcomponent_new(ICAL_XLICMIMEPART_COMPONENT); + + if(comp == 0){ + /* HACK Handle Error */ + assert(0); + } + + if(parts[i].header.error!=SSPM_NO_ERROR){ + const char *str="Unknown error"; + char temp[256]; + + if(parts[i].header.error==SSPM_UNEXPECTED_BOUNDARY_ERROR){ + str = "Got an unexpected boundary, possibly due to a MIME header for a MULTIPART part that is missing the Content-Type line"; + } + + if(parts[i].header.error==SSPM_WRONG_BOUNDARY_ERROR){ + str = "Got the wrong boundary for the opening of a MULTIPART part."; + } + + if(parts[i].header.error==SSPM_NO_BOUNDARY_ERROR){ + str = "Got a multipart header that did not specify a boundary"; + } + + if(parts[i].header.error==SSPM_NO_HEADER_ERROR){ + str = "Did not get a header for the part. Is there a blank\ +line between the header and the previous boundary\?"; + + } + + if(parts[i].header.error_text != 0){ + snprintf(temp,256, + "%s: %s",str,parts[i].header.error_text); + } else { + strcpy(temp,str); + } + + icalcomponent_add_property + (comp, + icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_MIMEPARSEERROR), + 0)); + } + + if(parts[i].header.major != SSPM_NO_MAJOR_TYPE && + parts[i].header.major != SSPM_UNKNOWN_MAJOR_TYPE){ + + icalcomponent_add_property(comp, + icalproperty_new_xlicmimecontenttype((char*) + icalmemory_strdup(mimetype))); + + } + + if (parts[i].header.encoding != SSPM_NO_ENCODING){ + + icalcomponent_add_property(comp, + icalproperty_new_xlicmimeencoding( + sspm_encoding_string(parts[i].header.encoding))); + } + + if (parts[i].header.filename != 0){ + icalcomponent_add_property(comp, + icalproperty_new_xlicmimefilename(parts[i].header.filename)); + } + + if (parts[i].header.content_id != 0){ + icalcomponent_add_property(comp, + icalproperty_new_xlicmimecid(parts[i].header.content_id)); + } + + if (parts[i].header.charset != 0){ + icalcomponent_add_property(comp, + icalproperty_new_xlicmimecharset(parts[i].header.charset)); + } + + /* Add iCal components as children of the component */ + if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE && + parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE && + parts[i].data != 0){ + + icalcomponent_add_component(comp, + (icalcomponent*)parts[i].data); + parts[i].data = 0; + + } else if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE && + parts[i].header.minor != SSPM_CALENDAR_MINOR_TYPE && + parts[i].data != 0){ + + /* Add other text components as "DESCRIPTION" properties */ + + icalcomponent_add_property(comp, + icalproperty_new_description( + (char*)icalmemory_strdup((char*)parts[i].data))); + + parts[i].data = 0; + } + + + if(root!= 0 && parts[i].level == 0){ + /* We've already assigned the root, but there is another + part at the root level. This is probably a parse + error*/ + icalcomponent_free(comp); + continue; + } + + if(parts[i].level == last_level && last_level != 0){ + icalerror_assert(parent!=0,"No parent for adding component"); + + icalcomponent_add_component(parent,comp); + + } else if (parts[i].level == last_level && last_level == 0 && + root == 0) { + + root = comp; + parent = comp; + + } else if (parts[i].level > last_level){ + + parent = last; + icalcomponent_add_component(parent,comp); + + last_level = parts[i].level; + + } else if (parts[i].level < last_level){ + + parent = icalcomponent_get_parent(parent); + icalcomponent_add_component(parent,comp); + + last_level = parts[i].level; + } else { + assert(0); + } + + last = comp; + last_level = parts[i].level; + assert(parts[i].data == 0); + } + + sspm_free_parts(parts,NUM_PARTS); + free(parts); + + return root; +} + + + +int icalmime_test(char* (*get_string)(char *s, size_t size, void *d), + void *data) +{ + char *out; + struct sspm_part *parts; + int i; + + if ( (parts = (struct sspm_part *) + malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + memset(parts,0,sizeof(parts)); + + sspm_parse_mime(parts, + NUM_PARTS, /* Max parts */ + icalmime_local_action_map, /* Actions */ + get_string, + data, /* data for get_string*/ + 0 /* First header */); + + for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; + i++){ + if(parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE){ + parts[i].data = icalmemory_strdup( + icalcomponent_as_ical_string((icalcomponent*)parts[i].data)); + } + } + + sspm_write_mime(parts,NUM_PARTS,&out,"To: bob@bob.org"); + + printf("%s\n",out); + + return 0; + +} + + diff --git a/libkcal/libical/src/libical/icalmime.h b/libkcal/libical/src/libical/icalmime.h new file mode 100644 index 000000000..8d42dde3a --- /dev/null +++ b/libkcal/libical/src/libical/icalmime.h @@ -0,0 +1,42 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalmime.h + CREATOR: eric 26 July 2000 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + +======================================================================*/ + +#ifndef ICALMIME_H +#define ICALMIME_H + +#include "icalcomponent.h" +#include "icalparser.h" + +icalcomponent* icalmime_parse( char* (*line_gen_func)(char *s, size_t size, + void *d), + void *data); + +/* The inverse of icalmime_parse, not implemented yet. Use sspm.h directly. */ +char* icalmime_as_mime_string(char* component); + + + +#endif /* !ICALMIME_H */ + + + diff --git a/libkcal/libical/src/libical/icalparameter.c b/libkcal/libical/src/libical/icalparameter.c new file mode 100644 index 000000000..52029e313 --- /dev/null +++ b/libkcal/libical/src/libical/icalparameter.c @@ -0,0 +1,384 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedparameters.{c,h} + CREATOR: eric 09 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalderivedparameters.{c,h} + + Contributions from: + Graham Davison <g.m.davison@computer.org> + + ======================================================================*/ +/*#line 29 "icalparameter.c.in"*/ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + + +#include "icalparameter.h" +#include "icalproperty.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparameterimpl.h" + +#include <stdlib.h> /* for malloc() */ +#include <errno.h> +#include <string.h> /* for memset() */ + +/* In icalderivedparameter */ +icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val); + + +struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind) +{ + struct icalparameter_impl* v; + + if ( ( v = (struct icalparameter_impl*) + malloc(sizeof(struct icalparameter_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + strcpy(v->id,"para"); + + v->kind = kind; + v->size = 0; + v->string = 0; + v->x_name = 0; + v->parent = 0; + v->data = 0; + + return v; +} + +icalparameter* +icalparameter_new (icalparameter_kind kind) +{ + struct icalparameter_impl* v = icalparameter_new_impl(kind); + + return (icalparameter*) v; + +} + +void +icalparameter_free (icalparameter* param) +{ + +/* HACK. This always triggers, even when parameter is non-zero + icalerror_check_arg_rv((parameter==0),"parameter");*/ + + +#ifdef ICAL_FREE_ON_LIST_IS_ERROR + icalerror_assert( (param->parent ==0),"Tried to free a parameter that is still attached to a component. "); + +#else + if(param->parent !=0){ + return; + } +#endif + + + if (param->string != 0){ + free ((void*)param->string); + } + + if (param->x_name != 0){ + free ((void*)param->x_name); + } + + memset(param,0,sizeof(param)); + + param->parent = 0; + param->id[0] = 'X'; + free(param); +} + + + +icalparameter* +icalparameter_new_clone(icalparameter* old) +{ + struct icalparameter_impl *new; + + new = icalparameter_new_impl(old->kind); + + icalerror_check_arg_rz((old!=0),"param"); + + if (new == 0){ + return 0; + } + + memcpy(new,old,sizeof(struct icalparameter_impl)); + + if (old->string != 0){ + new->string = icalmemory_strdup(old->string); + if (new->string == 0){ + icalparameter_free(new); + return 0; + } + } + + if (old->x_name != 0){ + new->x_name = icalmemory_strdup(old->x_name); + if (new->x_name == 0){ + icalparameter_free(new); + return 0; + } + } + + return new; +} + +icalparameter* icalparameter_new_from_string(const char *str) +{ + char* eq; + char* cpy; + icalparameter_kind kind; + icalparameter *param; + + icalerror_check_arg_rz(str != 0,"str"); + + cpy = icalmemory_strdup(str); + + if (cpy == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + eq = strchr(cpy,'='); + + if(eq == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + *eq = '\0'; + + eq++; + + kind = icalparameter_string_to_kind(cpy); + + if(kind == ICAL_NO_PARAMETER){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + param = icalparameter_new_from_value_string(kind,eq); + + if(kind == ICAL_X_PARAMETER){ + icalparameter_set_xname(param,cpy); + } + + free(cpy); + + return param; + +} + +/** + * Return a string representation of the parameter according to RFC2445. + * + * param = param-name "=" param-value + * param-name = iana-token / x-token + * param-value = paramtext /quoted-string + * paramtext = *SAFE-SHARE + * quoted-string= DQUOTE *QSAFE-CHARE DQUOTE + * QSAFE-CHAR = any character except CTLs and DQUOTE + * SAFE-CHAR = any character except CTLs, DQUOTE. ";", ":", "," + */ +char* +icalparameter_as_ical_string (icalparameter* param) +{ + size_t buf_size = 1024; + char* buf; + char* buf_ptr; + char *out_buf; + const char *kind_string; + + icalerror_check_arg_rz( (param!=0), "parameter"); + + /* Create new buffer that we can append names, parameters and a + value to, and reallocate as needed. Later, this buffer will be + copied to a icalmemory_tmp_buffer, which is managed internally + by libical, so it can be given to the caller without fear of + the caller forgetting to free it */ + + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + if(param->kind == ICAL_X_PARAMETER) { + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, + icalparameter_get_xname(param)); + + } else { + + kind_string = icalparameter_kind_to_string(param->kind); + + if (param->kind == ICAL_NO_PARAMETER || + param->kind == ICAL_ANY_PARAMETER || + kind_string == 0) + { + icalerror_set_errno(ICAL_BADARG_ERROR); + return 0; + } + + + /* Put the parameter name into the string */ + icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); + + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "="); + + if(param->string !=0){ + int qm = 0; + + /* Encapsulate the property in quotes if necessary */ + if (strpbrk(param->string, ";:,") != 0) { + icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"'); + qm = 1; + } + icalmemory_append_string(&buf, &buf_ptr, &buf_size, param->string); + if (qm == 1) { + icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"'); + } + } else if (param->data != 0){ + const char* str = icalparameter_enum_to_string(param->data); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); + } else { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + /* Now, copy the buffer to a tmp_buffer, which is safe to give to + the caller without worring about de-allocating it. */ + + out_buf = icalmemory_tmp_buffer(strlen(buf)+1); + strcpy(out_buf, buf); + + icalmemory_free_buffer(buf); + + return out_buf; + +} + + +int +icalparameter_is_valid (icalparameter* parameter); + + +icalparameter_kind +icalparameter_isa (icalparameter* parameter) +{ + if(parameter == 0){ + return ICAL_NO_PARAMETER; + } + + return parameter->kind; +} + + +int +icalparameter_isa_parameter (void* parameter) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl *)parameter; + + if (parameter == 0){ + return 0; + } + + if (strcmp(impl->id,"para") == 0) { + return 1; + } else { + return 0; + } +} + + +void +icalparameter_set_xname (icalparameter* param, const char* v) +{ + icalerror_check_arg_rv( (param!=0),"param"); + icalerror_check_arg_rv( (v!=0),"v"); + + if (param->x_name != 0){ + free((void*)param->x_name); + } + + param->x_name = icalmemory_strdup(v); + + if (param->x_name == 0){ + errno = ENOMEM; + } + +} + +const char* +icalparameter_get_xname (icalparameter* param) +{ + icalerror_check_arg_rz( (param!=0),"param"); + + return param->x_name; +} + +void +icalparameter_set_xvalue (icalparameter* param, const char* v) +{ + icalerror_check_arg_rv( (param!=0),"param"); + icalerror_check_arg_rv( (v!=0),"v"); + + if (param->string != 0){ + free((void*)param->string); + } + + param->string = icalmemory_strdup(v); + + if (param->string == 0){ + errno = ENOMEM; + } + +} + +const char* +icalparameter_get_xvalue (icalparameter* param) +{ + icalerror_check_arg_rz( (param!=0),"param"); + + return param->string; +} + +void icalparameter_set_parent(icalparameter* param, + icalproperty* property) +{ + icalerror_check_arg_rv( (param!=0),"param"); + + param->parent = property; +} + +icalproperty* icalparameter_get_parent(icalparameter* param) +{ + icalerror_check_arg_rz( (param!=0),"param"); + + return param->parent; +} + + +/* Everything below this line is machine generated. Do not edit. */ +/* ALTREP */ diff --git a/libkcal/libical/src/libical/icalparameter.h b/libkcal/libical/src/libical/icalparameter.h new file mode 100644 index 000000000..dc5d05489 --- /dev/null +++ b/libkcal/libical/src/libical/icalparameter.h @@ -0,0 +1,68 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalparam.h + CREATOR: eric 20 March 1999 + + + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalparam.h + + ======================================================================*/ + +#ifndef ICALPARAM_H +#define ICALPARAM_H + +#include "icalderivedparameter.h" + +/* Declared in icalderivedparameter.h */ +/*typedef struct icalparameter_impl icalparameter;*/ + +icalparameter* icalparameter_new(icalparameter_kind kind); +icalparameter* icalparameter_new_clone(icalparameter* p); + +/* Create from string of form "PARAMNAME=VALUE" */ +icalparameter* icalparameter_new_from_string(const char* value); + +/* Create from just the value, the part after the "=" */ +icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind, const char* value); + +void icalparameter_free(icalparameter* parameter); + +char* icalparameter_as_ical_string(icalparameter* parameter); + +int icalparameter_is_valid(icalparameter* parameter); + +icalparameter_kind icalparameter_isa(icalparameter* parameter); + +int icalparameter_isa_parameter(void* param); + +/* Access the name of an X parameer */ +void icalparameter_set_xname (icalparameter* param, const char* v); +const char* icalparameter_get_xname(icalparameter* param); +void icalparameter_set_xvalue (icalparameter* param, const char* v); +const char* icalparameter_get_xvalue(icalparameter* param); + +/* Convert enumerations */ + +const char* icalparameter_kind_to_string(icalparameter_kind kind); +icalparameter_kind icalparameter_string_to_kind(const char* string); + + + +#endif diff --git a/libkcal/libical/src/libical/icalparameterimpl.h b/libkcal/libical/src/libical/icalparameterimpl.h new file mode 100644 index 000000000..f2fed404e --- /dev/null +++ b/libkcal/libical/src/libical/icalparameterimpl.h @@ -0,0 +1,51 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalparameterimpl.h + CREATOR: eric 09 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalderivedparameters.{c,h} + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + ======================================================================*/ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifndef ICALPARAMETER_IMPL +#define ICALPARAMETER_IMPL + +#include "icalparameter.h" +#include "icalproperty.h" + +struct icalparameter_impl +{ + icalparameter_kind kind; + char id[5]; + int size; + const char* string; + const char* x_name; + icalproperty* parent; + + int data; +}; + + +#endif /*ICALPARAMETER_IMPL*/ diff --git a/libkcal/libical/src/libical/icalparser.c b/libkcal/libical/src/libical/icalparser.c new file mode 100644 index 000000000..95843c962 --- /dev/null +++ b/libkcal/libical/src/libical/icalparser.c @@ -0,0 +1,1105 @@ +/* -*- Mode: C; tab-width: 4; c-basic-offset: 8; -*- + ====================================================================== + FILE: icalparser.c + CREATOR: eric 04 August 1999 + + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "pvl.h" +#include "icalerror.h" +#include "icalvalue.h" +#include "icalderivedparameter.h" +#include "icalparameter.h" +#include "icalproperty.h" +#include "icalcomponent.h" + +#include <string.h> /* For strncpy & size_t */ +#include <stdio.h> /* For FILE and fgets and snprintf */ +#include <stdlib.h> /* for free */ +#include <ctype.h> + +#include "icalmemory.h" +#include "icalparser.h" + +#ifdef HAVE_WCTYPE_H +# include <wctype.h> +/* Some systems have an imcomplete implementation on wctype (FreeBSD, + * Darwin). Cope with that. */ +# ifndef HAVE_ISWSPACE +# define iswspace isspace +# endif +#else +# ifndef HAVE_ISWSPACE +# define iswspace isspace +# endif +#endif + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +char* icalparser_get_next_char(char c, char *str, int qm); +char* icalparser_get_next_parameter(char* line,char** end); +char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind); +char* icalparser_get_prop_name(char* line, char** end); +char* icalparser_get_param_name(char* line, char **end); + +#define TMP_BUF_SIZE 80 + +struct icalparser_impl +{ + int buffer_full; /* flag indicates that temp is smaller that + data being read into it*/ + int continuation_line; /* last line read was a continuation line */ + size_t tmp_buf_size; + char temp[TMP_BUF_SIZE]; + icalcomponent *root_component; + int version; + int level; + int lineno; + icalparser_state state; + pvl_list components; + + void *line_gen_data; + +}; + + +icalparser* icalparser_new(void) +{ + struct icalparser_impl* impl = 0; + if ( ( impl = (struct icalparser_impl*) + malloc(sizeof(struct icalparser_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + impl->root_component = 0; + impl->components = pvl_newlist(); + impl->level = 0; + impl->state = ICALPARSER_SUCCESS; + impl->tmp_buf_size = TMP_BUF_SIZE; + impl->buffer_full = 0; + impl->continuation_line = 0; + impl->lineno = 0; + impl->continuation_line = 0; + memset(impl->temp,0, TMP_BUF_SIZE); + + return (icalparser*)impl; +} + + +void icalparser_free(icalparser* parser) +{ + icalcomponent *c; + + if (parser->root_component != 0){ + icalcomponent_free(parser->root_component); + } + + while( (c=pvl_pop(parser->components)) != 0){ + icalcomponent_free(c); + } + + pvl_free(parser->components); + + free(parser); +} + +void icalparser_set_gen_data(icalparser* parser, void* data) +{ + parser->line_gen_data = data; +} + + +icalvalue* icalvalue_new_From_string_with_error(icalvalue_kind kind, + char* str, + icalproperty **error); + + + +char* icalparser_get_next_char(char c, char *str, int qm) +{ + int quote_mode = 0; + char* p; + + for(p=str; *p!=0; p++){ + if (qm == 1) { + if ( quote_mode == 0 && *p=='"' && *(p-1) != '\\' ){ + quote_mode =1; + continue; + } + + if ( quote_mode == 1 && *p=='"' && *(p-1) != '\\' ){ + quote_mode =0; + continue; + } + } + + if (quote_mode == 0 && *p== c && *(p-1) != '\\' ){ + return p; + } + + } + + return 0; +} + + +/** make a new tmp buffer out of a substring */ +static char* make_segment(char* start, char* end) +{ + char *buf, *tmp; + size_t size = (size_t)end - (size_t)start; + + buf = icalmemory_tmp_buffer(size+1); + + + strncpy(buf,start,size); + *(buf+size) = 0; + + tmp = (buf+size); + while ( *tmp == '\0' || iswspace(*tmp) ) + { + *tmp = 0; + tmp--; + } + + return buf; +} + + +char* icalparser_get_prop_name(char* line, char** end) +{ + char* p; + char* v; + char *str; + + p = icalparser_get_next_char(';',line,1); + v = icalparser_get_next_char(':',line,1); + if (p== 0 && v == 0) { + return 0; + } + + /* There is no ';' or, it is after the ';' that marks the beginning of + the value */ + if (v!=0 && ( p == 0 || p > v)){ + str = make_segment(line,v); + *end = v+1; + } else { + str = make_segment(line,p); + *end = p+1; + } + + return str; +} + + +char* icalparser_get_param_name(char* line, char **end) +{ + char* next; + char *str; + + next = icalparser_get_next_char('=',line,1); + + if (next == 0) { + return 0; + } + + str = make_segment(line,next); + *end = next+1; + if (**end == '"') { + *end = *end+1; + next = icalparser_get_next_char('"',*end,0); + if (next == 0) { + return 0; + } + + *end = make_segment(*end,next); + } + + return str; +} + + +char* icalparser_get_next_paramvalue(char* line, char **end) +{ + char* next; + char *str; + + next = icalparser_get_next_char(',',line,1); + + if (next == 0){ + next = (char*)(size_t)line+(size_t)strlen(line);\ + } + + if (next == line){ + return 0; + } else { + str = make_segment(line,next); + *end = next+1; + return str; + } +} + + +/** + A property may have multiple values, if the values are separated by + commas in the content line. This routine will look for the next + comma after line and will set the next place to start searching in + end. */ + +char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind) +{ + + char* next; + char *p; + char *str; + size_t length = strlen(line); + + p = line; + while(1){ + + next = icalparser_get_next_char(',',p,1); + + /* Unforunately, RFC2445 says that for the RECUR value, COMMA + can both separate digits in a list, and it can separate + multiple recurrence specifications. This is not a friendly + part of the spec. This weirdness tries to + distinguish the two uses. it is probably a HACK*/ + + if( kind == ICAL_RECUR_VALUE ) { + if ( next != 0 && + (*end+length) > next+5 && + strncmp(next,"FREQ",4) == 0 + ) { + /* The COMMA was followed by 'FREQ', is it a real separator*/ + /* Fall through */ + } else if (next != 0){ + /* Not real, get the next COMMA */ + p = next+1; + next = 0; + continue; + } + } + /* ignore all , for query value. select dtstart, dtend etc ... */ + else if( kind == ICAL_QUERY_VALUE) { + if ( next != 0) { + p = next+1; + continue; + } + else + break; + } + + /* If the comma is preceded by a '\', then it is a literal and + not a value separator*/ + + if ( (next!=0 && *(next-1) == '\\') || + (next!=0 && *(next-3) == '\\') + ) + /*second clause for '/' is on prev line. HACK may be out of bounds */ + { + p = next+1; + } else { + break; + } + + } + + if (next == 0){ + next = (char*)(size_t)line+length; + *end = next; + } else { + *end = next+1; + } + + if (next == line){ + return 0; + } + + + str = make_segment(line,next); + return str; + +} + +char* icalparser_get_next_parameter(char* line,char** end) +{ + char *next; + char *v; + char *str; + + v = icalparser_get_next_char(':',line,1); + next = icalparser_get_next_char(';', line,1); + + /* There is no ';' or, it is after the ':' that marks the beginning of + the value */ + + if (next == 0 || next > v) { + next = icalparser_get_next_char(':', line,1); + } + + if (next != 0) { + str = make_segment(line,next); + *end = next+1; + return str; + } else { + *end = line; + return 0; + } +} + + +/** + * Get a single property line, from the property name through the + * final new line, and include any continuation lines + */ +char* icalparser_get_line(icalparser *parser, + char* (*line_gen_func)(char *s, size_t size, void *d)) +{ + char *line; + char *line_p; + size_t buf_size = parser->tmp_buf_size; + + line_p = line = icalmemory_new_buffer(buf_size); + line[0] = '\0'; + + /* Read lines by calling line_gen_func and putting the data into + parser->temp. If the line is a continuation line ( begins with a + space after a newline ) then append the data onto line and read + again. Otherwise, exit the loop. */ + + while(1) { + + /* The first part of the loop deals with the temp buffer, + which was read on he last pass through the loop. The + routine is split like this because it has to read lone line + ahead to determine if a line is a continuation line. */ + + + /* The tmp buffer is not clear, so transfer the data in it to the + output. This may be left over from a previous call */ + if (parser->temp[0] != '\0' ) { + + /* If the last position in the temp buffer is occupied, + mark the buffer as full. The means we will do another + read later, because the line is not finished */ + if (parser->temp[parser->tmp_buf_size-1] == 0 && + parser->temp[parser->tmp_buf_size-2] != '\n'&& + parser->temp[parser->tmp_buf_size-2] != 0 ){ + parser->buffer_full = 1; + } else { + parser->buffer_full = 0; + } + + /* Copy the temp to the output and clear the temp buffer. */ + if(parser->continuation_line==1){ + /* back up the pointer to erase the continuation characters */ + parser->continuation_line = 0; + line_p--; + + if ( *(line_p-1) == '\r'){ + line_p--; + } + + /* copy one space up to eliminate the leading space*/ + icalmemory_append_string(&line,&line_p,&buf_size, + parser->temp+1); + + } else { + icalmemory_append_string(&line,&line_p,&buf_size,parser->temp); + } + + parser->temp[0] = '\0' ; + } + + parser->temp[parser->tmp_buf_size-1] = 1; /* Mark end of buffer */ + + /****** Here is where the routine gets string data ******************/ + if ((*line_gen_func)(parser->temp,parser->tmp_buf_size,parser->line_gen_data) + ==0){/* Get more data */ + + /* If the first position is clear, it means we didn't get + any more data from the last call to line_ge_func*/ + if (parser->temp[0] == '\0'){ + + if(line[0] != '\0'){ + /* There is data in the output, so fall trhough and process it*/ + break; + } else { + /* No data in output; return and signal that there + is no more input*/ + free(line); + return 0; + } + } + } + + + /* If the output line ends in a '\n' and the temp buffer + begins with a ' ', then the buffer holds a continuation + line, so keep reading. */ + + if ( line_p > line+1 && *(line_p-1) == '\n' + && (parser->temp[0] == ' ' || parser->temp[0] == '\t') ) { + + parser->continuation_line = 1; + + } else if ( parser->buffer_full == 1 ) { + + /* The buffer was filled on the last read, so read again */ + + } else { + + /* Looks like the end of this content line, so break */ + break; + } + + + } + + /* Erase the final newline and/or carriage return*/ + if ( line_p > line+1 && *(line_p-1) == '\n') { + *(line_p-1) = '\0'; + if ( *(line_p-2) == '\r'){ + *(line_p-2) = '\0'; + } + + } else { + *(line_p) = '\0'; + } + + while ( (*line_p == '\0' || iswspace(*line_p)) && line_p > line ) + { + *line_p = '\0'; + line_p--; + } + + return line; + +} + +static void insert_error(icalcomponent* comp, const char* text, + const char* message, icalparameter_xlicerrortype type) +{ + char temp[1024]; + + if (text == 0){ + snprintf(temp,1024,"%s:",message); + } else { + snprintf(temp,1024,"%s: %s",message,text); + } + + icalcomponent_add_property + (comp, + icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype(type), + 0)); +} + + +static int line_is_blank(char* line){ + int i=0; + + for(i=0; *(line+i)!=0; i++){ + char c = *(line+i); + + if(c != ' ' && c != '\n' && c != '\t'){ + return 0; + } + } + + return 1; +} + +icalcomponent* icalparser_parse(icalparser *parser, + char* (*line_gen_func)(char *s, size_t size, + void* d)) +{ + + char* line; + icalcomponent *c=0; + icalcomponent *root=0; + icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); + int cont; + + icalerror_check_arg_rz((parser !=0),"parser"); + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); + + do{ + line = icalparser_get_line(parser, line_gen_func); + + if ((c = icalparser_add_line(parser,line)) != 0){ + + if(icalcomponent_get_parent(c) !=0){ + /* This is bad news... assert? */ + } + + assert(parser->root_component == 0); + assert(pvl_count(parser->components) ==0); + + if (root == 0){ + /* Just one component */ + root = c; + } else if(icalcomponent_isa(root) != ICAL_XROOT_COMPONENT) { + /*Got a second component, so move the two components under + an XROOT container */ + icalcomponent *tempc = icalcomponent_new(ICAL_XROOT_COMPONENT); + icalcomponent_add_component(tempc, root); + icalcomponent_add_component(tempc, c); + root = tempc; + } else if(icalcomponent_isa(root) == ICAL_XROOT_COMPONENT) { + /* Already have an XROOT container, so add the component + to it*/ + icalcomponent_add_component(root, c); + + } else { + /* Badness */ + assert(0); + } + + c = 0; + + } + cont = 0; + if(line != 0){ + free(line); + cont = 1; + } + } while ( cont ); + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); + + return root; + +} + + +icalcomponent* icalparser_add_line(icalparser* parser, + char* line) +{ + char *str; + char *end; + int vcount = 0; + icalproperty *prop; + icalproperty_kind prop_kind; + icalvalue *value; + icalvalue_kind value_kind = ICAL_NO_VALUE; + + + icalerror_check_arg_rz((parser != 0),"parser"); + + + if (line == 0) + { + parser->state = ICALPARSER_ERROR; + return 0; + } + + if(line_is_blank(line) == 1){ + return 0; + } + + /* Begin by getting the property name at the start of the line. The + property name may end up being "BEGIN" or "END" in which case it + is not really a property, but the marker for the start or end of + a component */ + + end = 0; + str = icalparser_get_prop_name(line, &end); + + if (str == 0 || strlen(str) == 0 ){ + /* Could not get a property name */ + icalcomponent *tail = pvl_data(pvl_tail(parser->components)); + + if (tail){ + insert_error(tail,line, + "Got a data line, but could not find a property name or component begin tag", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + } + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + } + + /********************************************************************** + * Handle begin and end of components + **********************************************************************/ + /* If the property name is BEGIN or END, we are actually + starting or ending a new component */ + + + if(strcasecmp(str,"BEGIN") == 0){ + icalcomponent *c; + icalcomponent_kind comp_kind; + + + parser->level++; + str = icalparser_get_next_value(end,&end, value_kind); + + + comp_kind = icalenum_string_to_component_kind(str); + + + if (comp_kind == ICAL_NO_COMPONENT){ + + + c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); + insert_error(c,str,"Parse error in component name", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + } + + c = icalcomponent_new(comp_kind); + + if (c == 0){ + c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); + insert_error(c,str,"Parse error in component name", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + } + + pvl_push(parser->components,c); + + parser->state = ICALPARSER_BEGIN_COMP; + return 0; + + } else if (strcasecmp(str,"END") == 0 ) { + icalcomponent* tail; + + parser->level--; + str = icalparser_get_next_value(end,&end, value_kind); + + /* Pop last component off of list and add it to the second-to-last*/ + parser->root_component = pvl_pop(parser->components); + + tail = pvl_data(pvl_tail(parser->components)); + + if(tail != 0){ + icalcomponent_add_component(tail,parser->root_component); + } + + tail = 0; + + /* Return the component if we are back to the 0th level */ + if (parser->level == 0){ + icalcomponent *rtrn; + + if(pvl_count(parser->components) != 0){ + /* There are still components on the stack -- this means + that one of them did not have a proper "END" */ + pvl_push(parser->components,parser->root_component); + icalparser_clean(parser); /* may reset parser->root_component*/ + } + + assert(pvl_count(parser->components) == 0); + + parser->state = ICALPARSER_SUCCESS; + rtrn = parser->root_component; + parser->root_component = 0; + return rtrn; + + } else { + parser->state = ICALPARSER_END_COMP; + return 0; + } + } + + + /* There is no point in continuing if we have not seen a + component yet */ + + if(pvl_data(pvl_tail(parser->components)) == 0){ + parser->state = ICALPARSER_ERROR; + return 0; + } + + + /********************************************************************** + * Handle property names + **********************************************************************/ + + /* At this point, the property name really is a property name, + (Not a component name) so make a new property and add it to + the component */ + + + prop_kind = icalproperty_string_to_kind(str); + + prop = icalproperty_new(prop_kind); + + if (prop != 0){ + icalcomponent *tail = pvl_data(pvl_tail(parser->components)); + + if(prop_kind==ICAL_X_PROPERTY){ + icalproperty_set_x_name(prop,str); + } + + icalcomponent_add_property(tail, prop); + + /* Set the value kind for the default for this type of + property. This may be re-set by a VALUE parameter */ + value_kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop)); + + } else { + icalcomponent* tail = pvl_data(pvl_tail(parser->components)); + + insert_error(tail,str,"Parse error in property name", + ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); + + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + } + + /********************************************************************** + * Handle parameter values + **********************************************************************/ + + /* Now, add any parameters to the last property */ + + while(1) { + + if (*(end-1) == ':'){ + /* if the last separator was a ":" and the value is a + URL, icalparser_get_next_parameter will find the + ':' in the URL, so better break now. */ + break; + } + + str = icalparser_get_next_parameter(end,&end); + + if (str != 0){ + char* name; + char* pvalue; + + icalparameter *param = 0; + icalparameter_kind kind; + icalcomponent *tail = pvl_data(pvl_tail(parser->components)); + + name = icalparser_get_param_name(str,&pvalue); + + if (name == 0){ + /* 'tail' defined above */ + insert_error(tail, str, "Cant parse parameter name", + ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); + tail = 0; + break; + } + + kind = icalparameter_string_to_kind(name); + + if(kind == ICAL_X_PARAMETER){ + param = icalparameter_new(ICAL_X_PARAMETER); + + if(param != 0){ + icalparameter_set_xname(param,name); + icalparameter_set_xvalue(param,pvalue); + } + + + } else if (kind != ICAL_NO_PARAMETER){ + param = icalparameter_new_from_value_string(kind,pvalue); + } else { + /* Error. Failed to parse the parameter*/ + /* 'tail' defined above */ + insert_error(tail, str, "Cant parse parameter name", + ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + } + + if (param == 0){ + /* 'tail' defined above */ + insert_error(tail,str,"Cant parse parameter value", + ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); + + tail = 0; + parser->state = ICALPARSER_ERROR; + continue; + } + + /* If it is a VALUE parameter, set the kind of value*/ + if (icalparameter_isa(param)==ICAL_VALUE_PARAMETER){ + + value_kind = (icalvalue_kind) + icalparameter_value_to_value_kind( + icalparameter_get_value(param) + ); + + if (value_kind == ICAL_NO_VALUE){ + + /* Ooops, could not parse the value of the + parameter ( it was not one of the defined + values ), so reset the value_kind */ + + insert_error( + tail, str, + "Got a VALUE parameter with an unknown type", + ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); + icalparameter_free(param); + + value_kind = + icalproperty_kind_to_value_kind( + icalproperty_isa(prop)); + + icalparameter_free(param); + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + } + } + + /* Everything is OK, so add the parameter */ + icalproperty_add_parameter(prop,param); + tail = 0; + + } else { /* if ( str != 0) */ + /* If we did not get a param string, go on to looking + for a value */ + break; + } /* if ( str != 0) */ + + } /* while(1) */ + + /********************************************************************** + * Handle values + **********************************************************************/ + + /* Look for values. If there are ',' characters in the values, + then there are multiple values, so clone the current + parameter and add one part of the value to each clone */ + + vcount=0; + while(1) { + str = icalparser_get_next_value(end,&end, value_kind); + + if (str != 0){ + + if (vcount > 0){ + /* Actually, only clone after the second value */ + icalproperty* clone = icalproperty_new_clone(prop); + icalcomponent* tail = pvl_data(pvl_tail(parser->components)); + + icalcomponent_add_property(tail, clone); + prop = clone; + tail = 0; + } + + value = icalvalue_new_from_string(value_kind, str); + + /* Don't add properties without value */ + if (value == 0){ + char temp[200]; /* HACK */ + + icalproperty_kind prop_kind = icalproperty_isa(prop); + icalcomponent* tail = pvl_data(pvl_tail(parser->components)); + + snprintf(temp,sizeof(temp),"Can't parse as %s value in %s property. Removing entire property", + icalvalue_kind_to_string(value_kind), + icalproperty_kind_to_string(prop_kind)); + + insert_error(tail, str, temp, + ICAL_XLICERRORTYPE_VALUEPARSEERROR); + + /* Remove the troublesome property */ + icalcomponent_remove_property(tail,prop); + icalproperty_free(prop); + prop = 0; + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + + } else { + vcount++; + icalproperty_set_value(prop, value); + } + + + } else { + if (vcount == 0){ + char temp[200]; /* HACK */ + + icalproperty_kind prop_kind = icalproperty_isa(prop); + icalcomponent *tail = pvl_data(pvl_tail(parser->components)); + + snprintf(temp,sizeof(temp),"No value for %s property. Removing entire property", + icalproperty_kind_to_string(prop_kind)); + + insert_error(tail, str, temp, + ICAL_XLICERRORTYPE_VALUEPARSEERROR); + + /* Remove the troublesome property */ + icalcomponent_remove_property(tail,prop); + icalproperty_free(prop); + prop = 0; + tail = 0; + parser->state = ICALPARSER_ERROR; + return 0; + } else { + + break; + } + } + } + + /**************************************************************** + * End of component parsing. + *****************************************************************/ + + if (pvl_data(pvl_tail(parser->components)) == 0 && + parser->level == 0){ + /* HACK. Does this clause ever get executed? */ + parser->state = ICALPARSER_SUCCESS; + assert(0); + return parser->root_component; + } else { + parser->state = ICALPARSER_IN_PROGRESS; + return 0; + } + +} + +icalparser_state icalparser_get_state(icalparser* parser) +{ + return parser->state; + +} + +icalcomponent* icalparser_clean(icalparser* parser) +{ + icalcomponent *tail; + + icalerror_check_arg_rz((parser != 0 ),"parser"); + + /* We won't get a clean exit if some components did not have an + "END" tag. Clear off any component that may be left in the list */ + + while((tail=pvl_data(pvl_tail(parser->components))) != 0){ + + insert_error(tail," ", + "Missing END tag for this component. Closing component at end of input.", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + + + parser->root_component = pvl_pop(parser->components); + tail=pvl_data(pvl_tail(parser->components)); + + if(tail != 0 && parser->root_component != NULL){ + if(icalcomponent_get_parent(parser->root_component)!=0){ + icalerror_warn("icalparser_clean is trying to attach a component for the second time"); + } else { + icalcomponent_add_component(tail,parser->root_component); + } + } + + } + + return parser->root_component; + +} + +struct slg_data { + const char* pos; + const char* str; +}; + + +char* icalparser_string_line_generator(char *out, size_t buf_size, void *d) +{ + char *n; + size_t size; + struct slg_data* data = (struct slg_data*)d; + + if(data->pos==0){ + data->pos=data->str; + } + + /* If the pointer is at the end of the string, we are done */ + if (*(data->pos)==0){ + return 0; + } + + n = strchr(data->pos,'\n'); + + if (n == 0){ + size = strlen(data->pos); + } else { + n++; /* include newline in output */ + size = (n-data->pos); + } + + if (size > buf_size-1){ + size = buf_size-1; + } + + + strncpy(out,data->pos,size); + + *(out+size) = '\0'; + + data->pos += size; + + return out; +} + +icalcomponent* icalparser_parse_string(const char* str) +{ + icalcomponent *c; + struct slg_data d; + icalparser *p; + + icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); + + d.pos = 0; + d.str = str; + + p = icalparser_new(); + icalparser_set_gen_data(p,&d); + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); + + c = icalparser_parse(p,icalparser_string_line_generator); + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); + + icalparser_free(p); + + return c; + +} diff --git a/libkcal/libical/src/libical/icalparser.h b/libkcal/libical/src/libical/icalparser.h new file mode 100644 index 000000000..914f93846 --- /dev/null +++ b/libkcal/libical/src/libical/icalparser.h @@ -0,0 +1,96 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalparser.h + CREATOR: eric 20 April 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalparser.h + +======================================================================*/ + + +#ifndef ICALPARSER_H +#define ICALPARSER_H + +#include "icalenums.h" +#include "icaltypes.h" +#include"icalcomponent.h" + +#include <stdio.h> /* For FILE* */ + +typedef struct icalparser_impl icalparser; + + +/** + * @file icalparser.h + * @brief Line-oriented parsing. + * + * Create a new parser via icalparse_new_parser, then add lines one at + * a time with icalparse_add_line(). icalparser_add_line() will return + * non-zero when it has finished with a component. + */ + +typedef enum icalparser_state { + ICALPARSER_ERROR, + ICALPARSER_SUCCESS, + ICALPARSER_BEGIN_COMP, + ICALPARSER_END_COMP, + ICALPARSER_IN_PROGRESS +} icalparser_state; + +icalparser* icalparser_new(void); +icalcomponent* icalparser_add_line(icalparser* parser, char* str ); +icalcomponent* icalparser_clean(icalparser* parser); +icalparser_state icalparser_get_state(icalparser* parser); +void icalparser_free(icalparser* parser); + + +/** + * Message oriented parsing. icalparser_parse takes a string that + * holds the text ( in RFC 2445 format ) and returns a pointer to an + * icalcomponent. The caller owns the memory. line_gen_func is a + * pointer to a function that returns one content line per invocation + */ + +icalcomponent* icalparser_parse(icalparser *parser, + char* (*line_gen_func)(char *s, size_t size, void *d)); + +/** + Set the data that icalparser_parse will give to the line_gen_func + as the parameter 'd' + */ +void icalparser_set_gen_data(icalparser* parser, void* data); + + +icalcomponent* icalparser_parse_string(const char* str); + + +/*********************************************************************** + * Parser support functions + ***********************************************************************/ + +/** Use the flex/bison parser to turn a string into a value type */ +icalvalue* icalparser_parse_value(icalvalue_kind kind, + const char* str, icalcomponent** errors); + +/** Given a line generator function, return a single iCal content line.*/ +char* icalparser_get_line(icalparser* parser, char* (*line_gen_func)(char *s, size_t size, void *d)); + +char* icalparser_string_line_generator(char *out, size_t buf_size, void *d); + +#endif /* !ICALPARSE_H */ diff --git a/libkcal/libical/src/libical/icalperiod.c b/libkcal/libical/src/libical/icalperiod.c new file mode 100644 index 000000000..0429a2e64 --- /dev/null +++ b/libkcal/libical/src/libical/icalperiod.c @@ -0,0 +1,169 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalperiod.c + CREATOR: eric 02 June 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalperiod.h" + +#include <assert.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +#include "icalerror.h" +#include "icalmemory.h" + + + + +struct icalperiodtype icalperiodtype_from_string (const char* str) +{ + + struct icalperiodtype p, null_p; + char *s = icalmemory_strdup(str); + char *start, *end = s; + icalerrorstate es; + + /* Errors are normally generated in the following code, so save + the error state for resoration later */ + + icalerrorenum e = icalerrno; + + p.start = p.end = icaltime_null_time(); + p.duration = icaldurationtype_from_int(0); + + null_p = p; + + if(s == 0) goto error; + + start = s; + end = strchr(s, '/'); + + if(end == 0) goto error; + + *end = 0; + end++; + + p.start = icaltime_from_string(start); + + if (icaltime_is_null_time(p.start)) goto error; + + es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); + + p.end = icaltime_from_string(end); + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); + + + if (icaltime_is_null_time(p.end)){ + + p.duration = icaldurationtype_from_string(end); + + if(icaldurationtype_as_int(p.duration) == 0) goto error; + } + + icalerrno = e; + + icalmemory_free_buffer(s); + + return p; + + error: + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + + if (s) + icalmemory_free_buffer (s); + return null_p; +} + + +const char* icalperiodtype_as_ical_string(struct icalperiodtype p) +{ + + const char* start; + const char* end; + + char *buf; + size_t buf_size = 40; + char* buf_ptr = 0; + + buf = (char*)icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + + start = icaltime_as_ical_string(p.start); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, start); + + if(!icaltime_is_null_time(p.end)){ + end = icaltime_as_ical_string(p.end); + } else { + end = icaldurationtype_as_ical_string(p.duration); + } + + icalmemory_append_char(&buf, &buf_ptr, &buf_size, '/'); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, end); + + icalmemory_add_tmp_buffer(buf); + + return buf; +} + + + +struct icalperiodtype icalperiodtype_null_period(void) { + struct icalperiodtype p; + p.start = icaltime_null_time(); + p.end = icaltime_null_time(); + p.duration = icaldurationtype_null_duration(); + + return p; +} +int icalperiodtype_is_null_period(struct icalperiodtype p){ + + if(icaltime_is_null_time(p.start) && + icaltime_is_null_time(p.end) && + icaldurationtype_is_null_duration(p.duration)){ + return 1; + } else { + return 0; + } +} + +int icalperiodtype_is_valid_period(struct icalperiodtype p){ + if(icaltime_is_valid_time(p.start) && + (icaltime_is_valid_time(p.end) || icaltime_is_null_time(p.end)) ) + { + return 1; + } + + return 0; +} + diff --git a/libkcal/libical/src/libical/icalperiod.h b/libkcal/libical/src/libical/icalperiod.h new file mode 100644 index 000000000..af3040d66 --- /dev/null +++ b/libkcal/libical/src/libical/icalperiod.h @@ -0,0 +1,54 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalperiod.h + CREATOR: eric 26 Jan 2001 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALPERIOD_H +#define ICALPERIOD_H + +#include "icaltime.h" +#include "icalduration.h" + +struct icalperiodtype +{ + struct icaltimetype start; + struct icaltimetype end; + struct icaldurationtype duration; +}; + +struct icalperiodtype icalperiodtype_from_string (const char* str); + +const char* icalperiodtype_as_ical_string(struct icalperiodtype p); + +struct icalperiodtype icalperiodtype_null_period(void); + +int icalperiodtype_is_null_period(struct icalperiodtype p); + +int icalperiodtype_is_valid_period(struct icalperiodtype p); + +#endif /* !ICALTIME_H */ + + + diff --git a/libkcal/libical/src/libical/icalproperty.c b/libkcal/libical/src/libical/icalproperty.c new file mode 100644 index 000000000..67c158ebb --- /dev/null +++ b/libkcal/libical/src/libical/icalproperty.c @@ -0,0 +1,998 @@ +/* -*- Mode: C -*- */ + +/*====================================================================== + FILE: icalproperty.c + CREATOR: eric 28 April 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalproperty.c + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalproperty.h" +#include "icalparameter.h" +#include "icalcomponent.h" +#include "pvl.h" +#include "icalenums.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparser.h" + +#include <string.h> /* For icalmemory_strdup, rindex */ +#include <assert.h> +#include <stdlib.h> +#include <errno.h> +#include <stdio.h> /* for printf */ +#include <stdarg.h> /* for va_list, va_start, etc. */ + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +/* Private routines for icalproperty */ +void icalvalue_set_parent(icalvalue* value, + icalproperty* property); +icalproperty* icalvalue_get_parent(icalvalue* value); + +void icalparameter_set_parent(icalparameter* param, + icalproperty* property); +icalproperty* icalparameter_get_parent(icalparameter* value); + + +void icalproperty_set_x_name(icalproperty* prop, const char* name); + +struct icalproperty_impl +{ + char id[5]; + icalproperty_kind kind; + char* x_name; + pvl_list parameters; + pvl_elem parameter_iterator; + icalvalue* value; + icalcomponent *parent; +}; + +void icalproperty_add_parameters(icalproperty* prop, va_list args) +{ + void* vp; + + while((vp = va_arg(args, void*)) != 0) { + + if (icalvalue_isa_value(vp) != 0 ){ + } else if (icalparameter_isa_parameter(vp) != 0 ){ + + icalproperty_add_parameter((icalproperty*)prop, + (icalparameter*)vp); + } else { + icalerror_set_errno(ICAL_BADARG_ERROR); + } + + } +} + + +icalproperty* +icalproperty_new_impl(icalproperty_kind kind) +{ + icalproperty* prop; + + if (!icalproperty_kind_is_valid(kind)) + return NULL; + + if ( ( prop = (icalproperty*) malloc(sizeof(icalproperty))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + strcpy(prop->id,"prop"); + + prop->kind = kind; + prop->parameters = pvl_newlist(); + prop->parameter_iterator = 0; + prop->value = 0; + prop->x_name = 0; + prop->parent = 0; + + return prop; +} + + +icalproperty* +icalproperty_new (icalproperty_kind kind) +{ + if (kind == ICAL_NO_PROPERTY){ + return 0; + } + + return (icalproperty*)icalproperty_new_impl(kind); +} + + +icalproperty* +icalproperty_new_clone(icalproperty* old) +{ + icalproperty *new = icalproperty_new_impl(old->kind); + pvl_elem p; + + icalerror_check_arg_rz((old!=0),"old"); + icalerror_check_arg_rz((new!=0),"new"); + + if (old->value !=0) { + new->value = icalvalue_new_clone(old->value); + } + + if (old->x_name != 0) { + + new->x_name = icalmemory_strdup(old->x_name); + + if (new->x_name == 0) { + icalproperty_free(new); + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + } + + for(p=pvl_head(old->parameters);p != 0; p = pvl_next(p)){ + icalparameter *param = icalparameter_new_clone(pvl_data(p)); + + if (param == 0){ + icalproperty_free(new); + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + pvl_push(new->parameters,param); + + } + + return new; + +} + +icalproperty* icalproperty_new_from_string(const char* str) +{ + + size_t buf_size = 1024; + char* buf = icalmemory_new_buffer(buf_size); + char* buf_ptr = buf; + icalproperty *prop; + icalcomponent *comp; + int errors = 0; + + icalerror_check_arg_rz( (str!=0),"str"); + + /* Is this a HACK or a crafty reuse of code? */ + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:VCALENDAR\n"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "\n"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:VCALENDAR\n"); + + comp = icalparser_parse_string(buf); + + if(comp == 0){ + icalerror_set_errno(ICAL_PARSE_ERROR); + return 0; + } + + errors = icalcomponent_count_errors(comp); + + prop = icalcomponent_get_first_property(comp,ICAL_ANY_PROPERTY); + + icalcomponent_remove_property(comp,prop); + + icalcomponent_free(comp); + free(buf); + + if(errors > 0){ + icalproperty_free(prop); + return 0; + } else { + return prop; + } + +} + +void +icalproperty_free (icalproperty* p) +{ + icalparameter* param; + + icalerror_check_arg_rv((p!=0),"prop"); + +#ifdef ICAL_FREE_ON_LIST_IS_ERROR + icalerror_assert( (p->parent ==0),"Tried to free a property that is still attached to a component. "); + +#else + if(p->parent !=0){ + return; + } +#endif + + if (p->value != 0){ + icalvalue_set_parent(p->value,0); + icalvalue_free(p->value); + } + + while( (param = pvl_pop(p->parameters)) != 0){ + icalparameter_free(param); + } + + pvl_free(p->parameters); + + if (p->x_name != 0) { + free(p->x_name); + } + + p->kind = ICAL_NO_PROPERTY; + p->parameters = 0; + p->parameter_iterator = 0; + p->value = 0; + p->x_name = 0; + p->id[0] = 'X'; + + free(p); + +} + + +/* This returns where the start of the next line should be. chars_left does + not include the trailing '\0'. */ +#define MAX_LINE_LEN 75 +/*#define MAX_LINE_LEN 120*/ + +static char* +get_next_line_start (char *line_start, int chars_left) +{ + char *pos; + + /* If we have 74 chars or less left, we can output all of them. + we return a pointer to the '\0' at the end of the string. */ + if (chars_left < MAX_LINE_LEN) { + return line_start + chars_left; + } + + /* Now we jump to the last possible character of the line, and step back + trying to find a ';' ':' or ' '. If we find one, we return the character + after it. */ + pos = line_start + MAX_LINE_LEN - 2; + while (pos > line_start) { + if (*pos == ';' || *pos == ':' || *pos == ' ') { + return pos + 1; + } + pos--; + } + /* Now try to split on a UTF-8 boundary defined as a 7-bit + value or as a byte with the two high-most bits set: + 11xxxxxx. See http://czyborra.com/utf/ */ + + pos = line_start + MAX_LINE_LEN - 1; + while (pos > line_start) { + /* plain ascii */ + if ((*pos & 128) == 0) + return pos; + + /* utf8 escape byte */ + if ((*pos & 192) == 192) + return pos; + + pos--; + } + + /* Give up, just break at 74 chars (the 75th char is the space at + the start of the line). */ + + return line_start + MAX_LINE_LEN - 1; +} + + +/** This splits the property into lines less than 75 octects long (as + * specified in RFC2445). It tries to split after a ';' if it can. + * It returns a tmp buffer. NOTE: I'm not sure if it matters if we + * split a line in the middle of a UTF-8 character. It probably won't + * look nice in a text editor. + */ +static char* +fold_property_line (char *text) +{ + size_t buf_size; + char *buf, *buf_ptr, *line_start, *next_line_start, *out_buf; + int len, chars_left, first_line; + char ch; + + /* Start with a buffer twice the size of our property line, so we almost + certainly won't overflow it. */ + len = strlen (text); + buf_size = len * 2; + buf = icalmemory_new_buffer (buf_size); + buf_ptr = buf; + + /* Step through the text, finding each line to add to the output. */ + line_start = text; + chars_left = len; + first_line = 1; + for (;;) { + if (chars_left <= 0) + break; + + /* This returns the first character for the next line. */ + next_line_start = get_next_line_start (line_start, chars_left); + + /* If this isn't the first line, we need to output a newline and space + first. */ + if (!first_line) { + icalmemory_append_string (&buf, &buf_ptr, &buf_size, "\r\n "); + } + first_line = 0; + + /* This adds the line to our tmp buffer. We temporarily place a '\0' + in text, so we can copy the line in one go. */ + ch = *next_line_start; + *next_line_start = '\0'; + icalmemory_append_string (&buf, &buf_ptr, &buf_size, line_start); + *next_line_start = ch; + + /* Now we move on to the next line. */ + chars_left -= (next_line_start - line_start); + line_start = next_line_start; + } + + /* Copy it to a temporary buffer, and then free it. */ + out_buf = icalmemory_tmp_buffer (strlen (buf) + 1); + strcpy (out_buf, buf); + icalmemory_free_buffer (buf); + + return out_buf; +} + + +/* Determine what VALUE parameter to include. The VALUE parameters + are ignored in the normal parameter printing ( the block after + this one, so we need to do it here */ +static const char * +icalproperty_get_value_kind(icalproperty *prop) +{ + const char* kind_string = 0; + + icalparameter *orig_val_param + = icalproperty_get_first_parameter(prop,ICAL_VALUE_PARAMETER); + + icalvalue *value = icalproperty_get_value(prop); + + icalvalue_kind orig_kind = ICAL_NO_VALUE; + + icalvalue_kind this_kind = ICAL_NO_VALUE; + + icalvalue_kind default_kind + = icalproperty_kind_to_value_kind(prop->kind); + + if(orig_val_param){ + orig_kind = icalparameter_value_to_value_kind( icalparameter_get_value(orig_val_param) ); + } + + if(value != 0){ + this_kind = icalvalue_isa(value); + } + + if ( orig_kind != ICAL_NO_VALUE ) { + kind_string = icalvalue_kind_to_string( orig_kind ); + } else if(this_kind == default_kind && + orig_kind != ICAL_NO_VALUE){ + /* The kind is the default, so it does not need to be + included, but do it anyway, since it was explicit in + the property. But, use the default, not the one + specified in the property */ + + kind_string = icalvalue_kind_to_string(default_kind); + + } else if (this_kind != default_kind && this_kind != ICAL_NO_VALUE){ + /* Not the default, so it must be specified */ + kind_string = icalvalue_kind_to_string(this_kind); + } else { + /* Don'tinclude the VALUE parameter at all */ + } + + return kind_string; +} + +const char* +icalproperty_as_ical_string (icalproperty* prop) +{ + icalparameter *param; + + /* Create new buffer that we can append names, parameters and a + value to, and reallocate as needed. Later, this buffer will be + copied to a icalmemory_tmp_buffer, which is managed internally + by libical, so it can be given to the caller without fear of + the caller forgetting to free it */ + + const char* property_name = 0; + size_t buf_size = 1024; + char* buf = icalmemory_new_buffer(buf_size); + char* buf_ptr = buf; + icalvalue* value; + char *out_buf; + const char* kind_string = 0; + + char newline[] = "\r\n"; + + + icalerror_check_arg_rz( (prop!=0),"prop"); + + + /* Append property name */ + + if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){ + property_name = prop->x_name; + } else { + property_name = icalproperty_kind_to_string(prop->kind); + } + + if (property_name == 0 ) { + icalerror_warn("Got a property of an unknown kind."); + icalmemory_free_buffer(buf); + return 0; + + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name); + + kind_string = icalproperty_get_value_kind(prop); + if(kind_string!=0){ + icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";VALUE="); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); + } + + /* Append parameters */ + for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); + param != 0; + param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { + + icalparameter_kind kind = icalparameter_isa(param); + kind_string = icalparameter_as_ical_string(param); + + if(kind==ICAL_VALUE_PARAMETER){ + continue; + } + + if (kind_string == 0 ) { + icalerror_warn("Got a parameter of unknown kind for the following property"); + + icalerror_warn((property_name) ? property_name : "(NULL)"); + continue; + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); + } + + /* Append value */ + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, ":"); + + value = icalproperty_get_value(prop); + + if (value != 0){ + const char *str = icalvalue_as_ical_string(value); + icalerror_assert((str !=0),"Could not get string representation of a value"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); + } else { + icalmemory_append_string(&buf, &buf_ptr, &buf_size,"ERROR: No Value"); + + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + + /* Now, copy the buffer to a tmp_buffer, which is safe to give to + the caller without worring about de-allocating it. */ + + /* We now use a function to fold the line properly every 75 characters. */ + out_buf = fold_property_line (buf); + + icalmemory_free_buffer(buf); + + return out_buf; +} + + + +icalproperty_kind +icalproperty_isa (icalproperty* p) +{ + if(p != 0){ + return p->kind; + } + + return ICAL_NO_PROPERTY; +} + +int +icalproperty_isa_property (void* property) +{ + icalproperty *impl = (icalproperty *) property; + + icalerror_check_arg_rz( (property!=0), "property"); + if (strcmp(impl->id,"prop") == 0) { + return 1; + } else { + return 0; + } +} + + +void +icalproperty_add_parameter (icalproperty* p,icalparameter* parameter) +{ + icalerror_check_arg_rv( (p!=0),"prop"); + icalerror_check_arg_rv( (parameter!=0),"parameter"); + + pvl_push(p->parameters, parameter); + +} + +void +icalproperty_set_parameter (icalproperty* prop,icalparameter* parameter) +{ + icalparameter_kind kind; + + icalerror_check_arg_rv( (prop!=0),"prop"); + icalerror_check_arg_rv( (parameter!=0),"parameter"); + + kind = icalparameter_isa(parameter); + if (kind != ICAL_X_PARAMETER) + icalproperty_remove_parameter_by_kind(prop,kind); + else + icalproperty_remove_parameter_by_name(prop, + icalparameter_get_xname(parameter)); + + icalproperty_add_parameter(prop,parameter); +} + +void icalproperty_set_parameter_from_string(icalproperty* prop, + const char* name, const char* value) +{ + + icalparameter_kind kind; + icalparameter *param; + + icalerror_check_arg_rv( (prop!=0),"prop"); + icalerror_check_arg_rv( (name!=0),"name"); + icalerror_check_arg_rv( (value!=0),"value"); + + kind = icalparameter_string_to_kind(name); + + if(kind == ICAL_NO_PARAMETER){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return; + } + + param = icalparameter_new_from_value_string(kind,value); + + if (param == 0){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return; + } + + if(kind == ICAL_X_PARAMETER){ + icalparameter_set_xname(param, name); + } + + icalproperty_set_parameter(prop,param); + +} + +const char* icalproperty_get_parameter_as_string(icalproperty* prop, + const char* name) +{ + icalparameter_kind kind; + icalparameter *param; + char* str; + char* pv; + + icalerror_check_arg_rz( (prop!=0),"prop"); + icalerror_check_arg_rz( (name!=0),"name"); + + kind = icalparameter_string_to_kind(name); + + if(kind == ICAL_NO_PARAMETER){ + /* icalenum_string_to_parameter_kind will set icalerrno */ + return 0; + } + + for(param = icalproperty_get_first_parameter(prop,kind); + param != 0; + param = icalproperty_get_next_parameter(prop,kind)) { + if (kind != ICAL_X_PARAMETER) { + break; + } + + if (strcmp(icalparameter_get_xname(param),name)==0) { + break; + } + } + + if (param == 0){ + return 0; + } + + + str = icalparameter_as_ical_string(param); + + pv = strchr(str,'='); + + if(pv == 0){ + icalerror_set_errno(ICAL_INTERNAL_ERROR); + return 0; + } + + return pv+1; + +} + +/** @see icalproperty_remove_parameter_by_kind() + * + * @deprecated Please use icalproperty_remove_parameter_by_kind() + * instead. + */ + +void +icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind) +{ + icalproperty_remove_parameter_by_kind(prop, kind); +} + + +/** @brief Remove all parameters with the specified kind. + * + * @param prop A valid icalproperty. + * @param kind The kind to remove (ex. ICAL_TZID_PARAMETER) + * + * See icalproperty_remove_parameter_by_name() and + * icalproperty_remove_parameter_by_ref() for alternate ways of + * removing parameters + */ + +void +icalproperty_remove_parameter_by_kind(icalproperty* prop, icalparameter_kind kind) +{ + pvl_elem p; + + icalerror_check_arg_rv((prop!=0),"prop"); + + for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){ + icalparameter* param = (icalparameter *)pvl_data (p); + if (icalparameter_isa(param) == kind) { + pvl_remove (prop->parameters, p); + icalparameter_free(param); + break; + } + } +} + + +/** @brief Remove all parameters with the specified name. + * + * @param prop A valid icalproperty. + * @param name The name of the parameter to remove + * + * This function removes parameters with the given name. The name + * corresponds to either a built-in name (TZID, etc.) or the name of + * an extended parameter (X-FOO) + * + * See icalproperty_remove_parameter_by_kind() and + * icalproperty_remove_parameter_by_ref() for alternate ways of removing + * parameters + */ + + +void +icalproperty_remove_parameter_by_name(icalproperty* prop, const char *name) +{ + pvl_elem p; + + icalerror_check_arg_rv((prop!=0),"prop"); + + for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){ + icalparameter* param = (icalparameter *)pvl_data (p); + const char * kind_string; + + if (icalparameter_isa(param) == ICAL_X_PARAMETER) + kind_string = icalparameter_get_xname(param); + else + kind_string = icalparameter_kind_to_string(icalparameter_isa(param)); + + if (!kind_string) + continue; + + if (0 == strcmp(kind_string, name)) { + pvl_remove (prop->parameters, p); + break; + } + } +} + + +/** @brief Remove the specified parameter reference from the property. + * + * @param prop A valid icalproperty. + * @param parameter A reference to a specific icalparameter. + * + * This function removes the specified parameter reference from the + * property. + */ + +void +icalproperty_remove_parameter_by_ref(icalproperty* prop, icalparameter* parameter) +{ + pvl_elem p; + icalparameter_kind kind; + const char *name; + + icalerror_check_arg_rv((prop!=0),"prop"); + icalerror_check_arg_rv((parameter!=0),"parameter"); + + kind = icalparameter_isa(parameter); + name = icalparameter_get_xname(parameter); + + /* + * FIXME If it's an X- parameter, also compare the names. It would be nice + * to have a better abstraction like icalparameter_equals() + */ + for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){ + icalparameter* p_param = (icalparameter *)pvl_data (p); + if (icalparameter_isa(p_param) == kind && + (kind != ICAL_X_PARAMETER || + !strcmp(icalparameter_get_xname(p_param), name))) { + pvl_remove (prop->parameters, p); + icalparameter_free(p_param); + break; + } + } +} + + +int +icalproperty_count_parameters (const icalproperty* prop) +{ + if(prop != 0){ + return pvl_count(prop->parameters); + } + + icalerror_set_errno(ICAL_USAGE_ERROR); + return -1; +} + + +icalparameter* +icalproperty_get_first_parameter(icalproperty* p, icalparameter_kind kind) +{ + icalerror_check_arg_rz( (p!=0),"prop"); + + p->parameter_iterator = pvl_head(p->parameters); + + if (p->parameter_iterator == 0) { + return 0; + } + + for( p->parameter_iterator = pvl_head(p->parameters); + p->parameter_iterator !=0; + p->parameter_iterator = pvl_next(p->parameter_iterator)){ + + icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator); + + if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){ + return param; + } + } + + return 0; +} + + +icalparameter* +icalproperty_get_next_parameter (icalproperty* p, icalparameter_kind kind) +{ + icalerror_check_arg_rz( (p!=0),"prop"); + + if (p->parameter_iterator == 0) { + return 0; + } + + for( p->parameter_iterator = pvl_next(p->parameter_iterator); + p->parameter_iterator !=0; + p->parameter_iterator = pvl_next(p->parameter_iterator)){ + + icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator); + + if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){ + return param; + } + } + + return 0; + +} + +void +icalproperty_set_value (icalproperty* p, icalvalue* value) +{ + icalerror_check_arg_rv((p !=0),"prop"); + icalerror_check_arg_rv((value !=0),"value"); + + if (p->value != 0){ + icalvalue_set_parent(p->value,0); + icalvalue_free(p->value); + p->value = 0; + } + + p->value = value; + + icalvalue_set_parent(value,p); +} + + +void icalproperty_set_value_from_string(icalproperty* prop,const char* str, + const char* type) +{ + icalvalue *oval,*nval; + icalvalue_kind kind = ICAL_NO_VALUE; + + icalerror_check_arg_rv( (prop!=0),"prop"); + icalerror_check_arg_rv( (str!=0),"str"); + icalerror_check_arg_rv( (type!=0),"type"); + + if(strcmp(type,"NO")==0){ + /* Get the type from the value the property already has, if it exists */ + oval = icalproperty_get_value(prop); + if(oval != 0){ + /* Use the existing value kind */ + kind = icalvalue_isa(oval); + } else { + /* Use the default kind for the property */ + kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop)); + } + } else { + /* Use the given kind string */ + kind = icalvalue_string_to_kind(type); + } + + if(kind == ICAL_NO_VALUE){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return; + } + + nval = icalvalue_new_from_string(kind, str); + + if(nval == 0){ + /* icalvalue_new_from_string sets errno */ + assert(icalerrno != ICAL_NO_ERROR); + return; + } + + icalproperty_set_value(prop,nval); + + +} + +icalvalue* +icalproperty_get_value(const icalproperty* prop) +{ + icalerror_check_arg_rz( (prop!=0),"prop"); + + return prop->value; +} + +const char* icalproperty_get_value_as_string(const icalproperty* prop) +{ + icalvalue *value; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + value = prop->value; + + return icalvalue_as_ical_string(value); +} + + +void icalproperty_set_x_name(icalproperty* prop, const char* name) +{ + icalerror_check_arg_rv( (name!=0),"name"); + icalerror_check_arg_rv( (prop!=0),"prop"); + + if (prop->x_name != 0) { + free(prop->x_name); + } + + prop->x_name = icalmemory_strdup(name); + + if(prop->x_name == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + } + +} + +const char* icalproperty_get_x_name(icalproperty* prop){ + icalerror_check_arg_rz( (prop!=0),"prop"); + + return prop->x_name; +} + + +const char* icalproperty_get_name(const icalproperty* prop) +{ +#ifndef NO_WARN_DEPRECATED + icalerror_warn("icalproperty_get_name() is DEPRECATED, please use icalproperty_get_property_name() instead."); +#endif + return icalproperty_get_property_name(prop); +} + +const char* icalproperty_get_property_name(const icalproperty* prop) +{ + + const char* property_name = 0; + size_t buf_size = 256; + char* buf = icalmemory_new_buffer(buf_size); + char* buf_ptr = buf; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){ + property_name = prop->x_name; + } else { + property_name = icalproperty_kind_to_string(prop->kind); + } + + if (property_name == 0 ) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + + } else { + /* _append_string will automatically grow the buffer if + property_name is longer than the initial buffer size */ + icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name); + } + + /* Add the buffer to the temporary buffer ring -- the caller will + not have to free the memory. */ + icalmemory_add_tmp_buffer(buf); + + return buf; +} + + + + +void icalproperty_set_parent(icalproperty* property, + icalcomponent* component) +{ + icalerror_check_arg_rv( (property!=0),"property"); + + property->parent = component; +} + +icalcomponent* icalproperty_get_parent(const icalproperty* property) +{ + icalerror_check_arg_rz( (property!=0),"property"); + + return property->parent; +} diff --git a/libkcal/libical/src/libical/icalproperty.h b/libkcal/libical/src/libical/icalproperty.h new file mode 100644 index 000000000..b7db33169 --- /dev/null +++ b/libkcal/libical/src/libical/icalproperty.h @@ -0,0 +1,133 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalproperty.h + CREATOR: eric 20 March 1999 + + + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalparam.h + + ======================================================================*/ + + +#ifndef ICALPROPERTY_H +#define ICALPROPERTY_H + +#include <time.h> +#include <stdarg.h> /* for va_... */ + +#include "icalderivedparameter.h" + +#include "icalvalue.h" +#include "icalrecur.h" + +/* Actually in icalderivedproperty.h: + typedef struct icalproperty_impl icalproperty; */ + +#include "icalderivedproperty.h" /* To get icalproperty_kind enumerations */ + +icalproperty* icalproperty_new(icalproperty_kind kind); + +icalproperty* icalproperty_new_clone(icalproperty * prop); + +icalproperty* icalproperty_new_from_string(const char* str); + +const char* icalproperty_as_ical_string(icalproperty* prop); + +void icalproperty_free(icalproperty* prop); + +icalproperty_kind icalproperty_isa(icalproperty* property); +int icalproperty_isa_property(void* property); + +void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); +void icalproperty_add_parameter(icalproperty* prop,icalparameter* parameter); +void icalproperty_set_parameter(icalproperty* prop,icalparameter* parameter); +void icalproperty_set_parameter_from_string(icalproperty* prop, + const char* name, const char* value); +const char* icalproperty_get_parameter_as_string(icalproperty* prop, + const char* name); + +void icalproperty_remove_parameter(icalproperty* prop, + icalparameter_kind kind); + +void icalproperty_remove_parameter_by_kind(icalproperty* prop, + icalparameter_kind kind); + +void icalproperty_remove_parameter_by_name(icalproperty* prop, + const char *name); + +void icalproperty_remove_parameter_by_ref(icalproperty* prop, + icalparameter *param); + + + +int icalproperty_count_parameters(const icalproperty* prop); + +/* Iterate through the parameters */ +icalparameter* icalproperty_get_first_parameter(icalproperty* prop, + icalparameter_kind kind); +icalparameter* icalproperty_get_next_parameter(icalproperty* prop, + icalparameter_kind kind); +/* Access the value of the property */ +void icalproperty_set_value(icalproperty* prop, icalvalue* value); +void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char* kind); + +icalvalue* icalproperty_get_value(const icalproperty* prop); +const char* icalproperty_get_value_as_string(const icalproperty* prop); + +/* Deal with X properties */ + +void icalproperty_set_x_name(icalproperty* prop, const char* name); +const char* icalproperty_get_x_name(icalproperty* prop); + +/** Return the name of the property -- the type name converted to a + * string, or the value of _get_x_name if the type is and X + * property + */ +const char* icalproperty_get_property_name (const icalproperty* prop); + +icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); + +/* Convert kinds to string and get default value type */ + +icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind); +icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind); +const char* icalproperty_kind_to_string(icalproperty_kind kind); +icalproperty_kind icalproperty_string_to_kind(const char* string); + +/** Check validity of a specific icalproperty_kind **/ +int icalproperty_kind_is_valid(const icalproperty_kind kind); + +icalproperty_method icalproperty_string_to_method(const char* str); +const char* icalproperty_method_to_string(icalproperty_method method); + + +const char* icalproperty_enum_to_string(int e); +int icalproperty_string_to_enum(const char* str); +int icalproperty_kind_and_string_to_enum(const int kind, const char* str); + +const char* icalproperty_status_to_string(icalproperty_status); +icalproperty_status icalproperty_string_to_status(const char* string); + +int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e); + + + + +#endif /*ICALPROPERTY_H*/ diff --git a/libkcal/libical/src/libical/icalrecur.c b/libkcal/libical/src/libical/icalrecur.c new file mode 100644 index 000000000..acd2ccced --- /dev/null +++ b/libkcal/libical/src/libical/icalrecur.c @@ -0,0 +1,2400 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalrecur.c + CREATOR: eric 16 May 2000 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ +*/ + +/** + @file icalrecur.c + @brief Implementation of routines for dealing with recurring time + + How this code works: + + Processing starts when the caller generates a new recurrence + iterator via icalrecur_iterator_new(). This routine copies the + recurrence rule into the iterator and extracts things like start and + end dates. Then, it checks if the rule is legal, using some logic + from RFC2445 and some logic that probably should be in RFC2445. + + Then, icalrecur_iterator_new() re-writes some of the BY* + arrays. This involves ( via a call to setup_defaults() ) : + + 1) For BY rule parts with no data ( ie BYSECOND was not specified ) + copy the corresponding time part from DTSTART into the BY array. ( + So impl->by_ptrs[BY_SECOND] will then have one element if is + originally had none ) This only happens if the BY* rule part data + would expand the number of occurrences in the occurrence set. This + lets the code ignore DTSTART later on and still use it to get the + time parts that were not specified in any other way. + + 2) For the by rule part that are not the same interval as the + frequency -- for HOURLY anything but BYHOUR, for instance -- copy the + first data element from the rule part into the first occurrence. For + example, for "INTERVAL=MONTHLY and BYHOUR=10,30", initialize the + first time to be returned to have an hour of 10. + + Finally, for INTERVAL=YEARLY, the routine expands the rule to get + all of the days specified in the rule. The code will do this for + each new year, and this is the first expansion. This is a special + case for the yearly interval; no other frequency gets expanded this + way. The yearly interval is the most complex, so some special + processing is required. + + After creating a new iterator, the caller will make successive calls + to icalrecur_iterator_next() to get the next time specified by the + rule. The main part of this routine is a switch on the frequency of + the rule. Each different frequency is handled by a different + routine. + + For example, next_hour handles the case of INTERVAL=HOURLY, and it + is called by other routines to get the next hour. First, the routine + tries to get the next minute part of a time with a call to + next_minute(). If next_minute() returns 1, it has reached the end of + its data, usually the last element of the BYMINUTE array. Then, if + there is data in the BYHOUR array, the routine changes the hour to + the next one in the array. If INTERVAL=HOURLY, the routine advances + the hour by the interval. + + If the routine used the last hour in the BYHOUR array, and the + INTERVAL=HOURLY, then the routine calls increment_monthday() to set + the next month day. The increment_* routines may call higher routine + to increment the month or year also. + + The code for INTERVAL=DAILY is handled by next_day(). First, the + routine tries to get the next hour part of a time with a call to + next_hour. If next_hour() returns 1, it has reached the end of its + data, usually the last element of the BYHOUR array. This means that + next_day() should increment the time to the next day. If FREQUENCY==DAILY, + the routine increments the day by the interval; otherwise, it + increments the day by 1. + + Next_day() differs from next_hour because it does not use the BYDAY + array to select an appropriate day. Instead, it returns every day ( + incrementing by 1 if the frequency is not DAILY with INTERVAL!=1) + Any days that are not specified in an non-empty BYDAY array are + filtered out later. + + Generally, the flow of these routine is for a next_* call a next_* + routine of a lower interval ( next_day calls next_hour) and then to + possibly call an increment_* routine of an equal or higher + interval. ( next_day calls increment_monthday() ) + + When the call to the original next_* routine returns, + icalrecur_iterator_next() will check the returned data against other + BYrule parts to determine if is should be excluded by calling + check_contracting_rules. Generally, a contracting rule is any with a + larger time span than the interval. For instance, if + INTERVAL=DAILY, BYMONTH is a contracting rule part. + + Check_contracting_rules() uses icalrecur_check_rulepart() to do its + work. icalrecur_check_rulepart() uses expand_map[] to determine if a rule + is contracting, and if it is, and if the BY rule part has some data, + then the routine checks if the value of a component of the time is + part of the byrule part. For instance, for "INTERVAL=DAILY; + BYMONTH=6,10", icalrecur_check_rulepart() would check that the time value + given to it has a month of either 6 or 10. + + Finally, icalrecur_iterator_next() does a few other checks on the + time value, and if it passes, it returns the time. + + A note about the end_of_data flag. The flag indicates that the + routine is at the end of its data -- the last BY rule if the routine + is using by rules, or the last day of the week/month/year/etc if + not. + + This flag is usually set early in a next_* routine and returned in + the end. The way it is used allows the next_* routine to set the + last time back to the first element in a BYxx rule, and then signal + to the higer level routine to increment the next higher level. For + instance. WITH FREQ=MONTHLY;BYDAY=TU,FR, After next_weekday_by_month + runs though both TU and FR, it sets the week day back to TU and sets + end_of_data to 1x. This signals next_month to increment the month. + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif + +#include "icalrecur.h" + +#include "icalerror.h" +#include "icalmemory.h" + +#include <stdlib.h> /* for malloc */ +#include <errno.h> /* for errno */ +#include <string.h> /* for strdup and strchr*/ +#include <assert.h> +#include <stddef.h> /* For offsetof() macro */ + +#include "pvl.h" + +/** This is the last year we will go up to, since 32-bit time_t values + only go up to the start of 2038. */ +#define MAX_TIME_T_YEAR 2037 + +#define TEMP_MAX 1024 + + +#define BYDAYIDX impl->by_indices[BY_DAY] +#define BYDAYPTR impl->by_ptrs[BY_DAY] + +#define BYMONIDX impl->by_indices[BY_MONTH] +#define BYMONPTR impl->by_ptrs[BY_MONTH] + +#define BYMDIDX impl->by_indices[BY_MONTH_DAY] +#define BYMDPTR impl->by_ptrs[BY_MONTH_DAY] + +#define BYWEEKIDX impl->by_indices[BY_WEEK_NO] +#define BYWEEKPTR impl->by_ptrs[BY_WEEK_NO] + +const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind); +icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str); + +const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind); +icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str); + + +/*********************** Rule parsing routines ************************/ + +struct icalrecur_parser { + const char* rule; + char* copy; + char* this_clause; + char* next_clause; + + struct icalrecurrencetype rt; +}; + +const char* icalrecur_first_clause(struct icalrecur_parser *parser) +{ + char *idx; + parser->this_clause = parser->copy; + + idx = strchr(parser->this_clause,';'); + + if (idx == 0){ + parser->next_clause = 0; + return 0; + } + + *idx = 0; + idx++; + parser->next_clause = idx; + + return parser->this_clause; + +} + +const char* icalrecur_next_clause(struct icalrecur_parser *parser) +{ + char* idx; + + parser->this_clause = parser->next_clause; + + if(parser->this_clause == 0){ + return 0; + } + + idx = strchr(parser->this_clause,';'); + + if (idx == 0){ + parser->next_clause = 0; + } else { + + *idx = 0; + idx++; + parser->next_clause = idx; + } + + return parser->this_clause; + +} + +void icalrecur_clause_name_and_value(struct icalrecur_parser *parser, + char** name, char** value) +{ + char *idx; + + *name = parser->this_clause; + + idx = strchr(parser->this_clause,'='); + + if (idx == 0){ + *name = 0; + *value = 0; + return; + } + + *idx = 0; + idx++; + *value = idx; +} + +void icalrecur_add_byrules(struct icalrecur_parser *parser, short *array, + int size, char* vals) +{ + char *t, *n; + int i=0; + int sign = 1; + int v; + (void)parser; + + n = vals; + + while(n != 0){ + + if(i == size){ + return; + } + + t = n; + + n = strchr(t,','); + + if(n != 0){ + *n = 0; + n++; + } + + /* Get optional sign. HACK. sign is not allowed for all BYxxx + rule parts */ + if( *t == '-'){ + sign = -1; + t++; + } else if (*t == '+'){ + sign = 1; + t++; + } else { + sign = 1; + } + + v = atoi(t) * sign ; + + + array[i++] = (short)v; + array[i] = ICAL_RECURRENCE_ARRAY_MAX; + + } + +} + +void icalrecur_add_bydayrules(struct icalrecur_parser *parser, const char* vals) +{ + + char *t, *n; + int i=0; + int sign = 1; + int weekno = 0; + icalrecurrencetype_weekday wd; + short *array = parser->rt.by_day; + char* end; + char* vals_copy; + + vals_copy = icalmemory_strdup(vals); + + end = (char*)vals_copy+strlen(vals_copy); + n = vals_copy; + + while(n != 0){ + + + t = n; + + n = strchr(t,','); + + if(n != 0){ + *n = 0; + n++; + } + + /* Get optional sign. */ + if( *t == '-'){ + sign = -1; + t++; + } else if (*t == '+'){ + sign = 1; + t++; + } else { + sign = 1; + } + + /* Get Optional weekno */ + weekno = strtol(t,&t,10); + + /* Outlook/Exchange generate "BYDAY=MO, FR" and "BYDAY=2 TH". + * Cope with that. + */ + if (*t == ' ') + t++; + + wd = icalrecur_string_to_weekday(t); + + array[i++] = (short)(sign* (wd + 8*weekno)); + array[i] = ICAL_RECURRENCE_ARRAY_MAX; + + } + + free(vals_copy); + +} + + +struct icalrecurrencetype icalrecurrencetype_from_string(const char* str) +{ + struct icalrecur_parser parser; + + memset(&parser,0,sizeof(parser)); + icalrecurrencetype_clear(&parser.rt); + + icalerror_check_arg_re(str!=0,"str",parser.rt); + + + /* Set up the parser struct */ + parser.rule = str; + parser.copy = icalmemory_strdup(parser.rule); + parser.this_clause = parser.copy; + + if(parser.copy == 0){ + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return parser.rt; + } + + /* Loop through all of the clauses */ + for(icalrecur_first_clause(&parser); + parser.this_clause != 0; + icalrecur_next_clause(&parser)) + { + char *name, *value; + icalrecur_clause_name_and_value(&parser,&name,&value); + + if(name == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + icalrecurrencetype_clear(&parser.rt); + free(parser.copy); + return parser.rt; + } + + if (strcasecmp(name,"FREQ") == 0){ + parser.rt.freq = icalrecur_string_to_freq(value); + } else if (strcasecmp(name,"COUNT") == 0){ + parser.rt.count = atoi(value); + } else if (strcasecmp(name,"UNTIL") == 0){ + parser.rt.until = icaltime_from_string(value); + } else if (strcasecmp(name,"INTERVAL") == 0){ + parser.rt.interval = (short)atoi(value); + } else if (strcasecmp(name,"WKST") == 0){ + parser.rt.week_start = icalrecur_string_to_weekday(value); + } else if (strcasecmp(name,"BYSECOND") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_second, + ICAL_BY_SECOND_SIZE,value); + } else if (strcasecmp(name,"BYMINUTE") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_minute, + ICAL_BY_MINUTE_SIZE,value); + } else if (strcasecmp(name,"BYHOUR") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_hour, + ICAL_BY_HOUR_SIZE,value); + } else if (strcasecmp(name,"BYDAY") == 0){ + icalrecur_add_bydayrules(&parser,value); + } else if (strcasecmp(name,"BYMONTHDAY") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_month_day, + ICAL_BY_MONTHDAY_SIZE,value); + } else if (strcasecmp(name,"BYYEARDAY") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_year_day, + ICAL_BY_YEARDAY_SIZE,value); + } else if (strcasecmp(name,"BYWEEKNO") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_week_no, + ICAL_BY_WEEKNO_SIZE,value); + } else if (strcasecmp(name,"BYMONTH") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_month, + ICAL_BY_MONTH_SIZE,value); + } else if (strcasecmp(name,"BYSETPOS") == 0){ + icalrecur_add_byrules(&parser,parser.rt.by_set_pos, + ICAL_BY_SETPOS_SIZE,value); + } else { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + icalrecurrencetype_clear(&parser.rt); + free(parser.copy); + return parser.rt; + } + + } + + free(parser.copy); + + return parser.rt; + +} + +static struct { const char* str;size_t offset; int limit; } recurmap[] = +{ + {";BYSECOND=",offsetof(struct icalrecurrencetype,by_second),60}, + {";BYMINUTE=",offsetof(struct icalrecurrencetype,by_minute),60}, + {";BYHOUR=",offsetof(struct icalrecurrencetype,by_hour),24}, + {";BYDAY=",offsetof(struct icalrecurrencetype,by_day),7}, + {";BYMONTHDAY=",offsetof(struct icalrecurrencetype,by_month_day),31}, + {";BYYEARDAY=",offsetof(struct icalrecurrencetype,by_year_day),366}, + {";BYWEEKNO=",offsetof(struct icalrecurrencetype,by_week_no),52}, + {";BYMONTH=",offsetof(struct icalrecurrencetype,by_month),12}, + {";BYSETPOS=",offsetof(struct icalrecurrencetype,by_set_pos),366}, + {0,0,0}, +}; + +/* A private routine in icalvalue.c */ +void print_date_to_string(char* str, struct icaltimetype *data); +void print_datetime_to_string(char* str, struct icaltimetype *data); + +char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur) +{ + char* str; + char *str_p; + size_t buf_sz = 200; + char temp[20]; + int i,j; + + if(recur->freq == ICAL_NO_RECURRENCE){ + return 0; + } + + str = (char*)icalmemory_tmp_buffer(buf_sz); + str_p = str; + + icalmemory_append_string(&str,&str_p,&buf_sz,"FREQ="); + icalmemory_append_string(&str,&str_p,&buf_sz, + icalrecur_freq_to_string(recur->freq)); + + if(recur->until.year != 0){ + + temp[0] = 0; + if (recur->until.is_date) + print_date_to_string(temp,&(recur->until)); + else + print_datetime_to_string(temp,&(recur->until)); + + icalmemory_append_string(&str,&str_p,&buf_sz,";UNTIL="); + icalmemory_append_string(&str,&str_p,&buf_sz, temp); + } + + if(recur->count != 0){ + snprintf(temp,sizeof(temp),"%d",recur->count); + icalmemory_append_string(&str,&str_p,&buf_sz,";COUNT="); + icalmemory_append_string(&str,&str_p,&buf_sz, temp); + } + + if(recur->interval != 1){ + snprintf(temp,sizeof(temp),"%d",recur->interval); + icalmemory_append_string(&str,&str_p,&buf_sz,";INTERVAL="); + icalmemory_append_string(&str,&str_p,&buf_sz, temp); + } + + for(j =0; recurmap[j].str != 0; j++){ + short* array = (short*)(recurmap[j].offset+ (size_t)recur); + int limit = recurmap[j].limit; + + /* Skip unused arrays */ + if( array[0] != ICAL_RECURRENCE_ARRAY_MAX ) { + + icalmemory_append_string(&str,&str_p,&buf_sz,recurmap[j].str); + + for(i=0; + i< limit && array[i] != ICAL_RECURRENCE_ARRAY_MAX; + i++){ + if (j == 3) { /* BYDAY */ + const char *daystr = icalrecur_weekday_to_string( + icalrecurrencetype_day_day_of_week(array[i])); + int pos; + + pos = icalrecurrencetype_day_position(array[i]); + + if (pos == 0) + icalmemory_append_string(&str,&str_p,&buf_sz,daystr); + else { + snprintf(temp,sizeof(temp),"%d%s",pos,daystr); + icalmemory_append_string(&str,&str_p,&buf_sz,temp); + } + + } else { + snprintf(temp,sizeof(temp),"%d",array[i]); + icalmemory_append_string(&str,&str_p,&buf_sz, temp); + } + + if( (i+1)<limit &&array[i+1] + != ICAL_RECURRENCE_ARRAY_MAX){ + icalmemory_append_char(&str,&str_p,&buf_sz,','); + } + } + } + } + + /* Monday is the default, so no need to write that out */ + if ( recur->week_start != ICAL_MONDAY_WEEKDAY ) { + const char *daystr = icalrecur_weekday_to_string( + icalrecurrencetype_day_day_of_week( recur->week_start )); + icalmemory_append_string(&str,&str_p,&buf_sz,";WKST="); + icalmemory_append_string(&str,&str_p,&buf_sz,daystr); + } + + return str; +} + + +/************************* occurrence iteration routiens ******************/ + +enum byrule { + NO_CONTRACTION = -1, + BY_SECOND = 0, + BY_MINUTE = 1, + BY_HOUR = 2, + BY_DAY = 3, + BY_MONTH_DAY = 4, + BY_YEAR_DAY = 5, + BY_WEEK_NO = 6, + BY_MONTH = 7, + BY_SET_POS +}; + + + +struct icalrecur_iterator_impl { + + struct icaltimetype dtstart; /* Hack. Make into time_t */ + struct icaltimetype last; /* last time return from _iterator_next*/ + int occurrence_no; /* number of step made on t iterator */ + struct icalrecurrencetype rule; + + short days[366]; + short days_index; + + enum byrule byrule; + short by_indices[9]; + short orig_data[9]; /**< 1 if there was data in the byrule */ + + + short *by_ptrs[9]; /**< Pointers into the by_* array elements of the rule */ + +}; + +static void increment_year(icalrecur_iterator* impl, int inc); + +int icalrecur_iterator_sizeof_byarray(short* byarray) +{ + int array_itr; + + for(array_itr = 0; + byarray[array_itr] != ICAL_RECURRENCE_ARRAY_MAX; + array_itr++){ + } + + return array_itr; +} + +enum expand_table { + UNKNOWN = 0, + CONTRACT = 1, + EXPAND =2, + ILLEGAL=3 +}; + +/** + * The split map indicates, for a particular interval, wether a BY_* + * rule part expands the number of instances in the occcurrence set or + * contracts it. 1=> contract, 2=>expand, and 3 means the pairing is + * not allowed. + */ + +struct expand_split_map_struct +{ + icalrecurrencetype_frequency frequency; + + /* Elements of the 'map' array correspond to the BYxxx rules: + Second,Minute,Hour,Day,Month Day,Year Day,Week No,Month*/ + + short map[8]; +}; + +static struct expand_split_map_struct expand_map[] = +{ + {ICAL_SECONDLY_RECURRENCE,{1,1,1,1,1,1,1,1}}, + {ICAL_MINUTELY_RECURRENCE,{2,1,1,1,1,1,1,1}}, + {ICAL_HOURLY_RECURRENCE, {2,2,1,1,1,1,1,1}}, + {ICAL_DAILY_RECURRENCE, {2,2,2,1,1,1,1,1}}, + {ICAL_WEEKLY_RECURRENCE, {2,2,2,2,3,3,1,1}}, + {ICAL_MONTHLY_RECURRENCE, {2,2,2,2,2,3,3,1}}, + {ICAL_YEARLY_RECURRENCE, {2,2,2,2,2,2,2,2}}, + {ICAL_NO_RECURRENCE, {0,0,0,0,0,0,0,0}} + +}; + + + +/** Check that the rule has only the two given interday byrule parts. */ +static +int icalrecur_two_byrule(icalrecur_iterator* impl, + enum byrule one,enum byrule two) +{ + short test_array[9]; + enum byrule itr; + int passes = 0; + + memset(test_array,0,sizeof(test_array)); + + test_array[one] = 1; + test_array[two] = 1; + + for(itr = BY_DAY; itr != BY_SET_POS; itr++){ + + if( (test_array[itr] == 0 && + impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX + ) || + (test_array[itr] == 1 && + impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX + ) + ) { + /* test failed */ + passes = 0; + } + } + + return passes; + +} + +/** Check that the rule has only the one given interdat byrule parts. */ +static int icalrecur_one_byrule(icalrecur_iterator* impl,enum byrule one) +{ + int passes = 1; + enum byrule itr; + + for(itr = BY_DAY; itr != BY_SET_POS; itr++){ + + if ((itr==one && impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX) || + (itr!=one && impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX)) { + passes = 0; + } + } + + return passes; +} + +/*static int count_byrules(icalrecur_iterator* impl) +{ + int count = 0; + enum byrule itr; + + for(itr = BY_DAY; itr <= BY_SET_POS; itr++){ + if(impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX){ + count++; + } + } + + return count; +}*/ + + +static void setup_defaults(icalrecur_iterator* impl, + enum byrule byrule, icalrecurrencetype_frequency req, + int deftime, int *timepart) +{ + + icalrecurrencetype_frequency freq; + freq = impl->rule.freq; + + /* Re-write the BY rule arrays with data from the DTSTART time so + we don't have to explicitly deal with DTSTART */ + + if(impl->by_ptrs[byrule][0] == ICAL_RECURRENCE_ARRAY_MAX && + expand_map[freq].map[byrule] != CONTRACT){ + impl->by_ptrs[byrule][0] = (short)deftime; + } + + /* Initialize the first occurrence */ + if( freq != req && expand_map[freq].map[byrule] != CONTRACT){ + *timepart = impl->by_ptrs[byrule][0]; + } + + +} + +static int has_by_data(icalrecur_iterator* impl, enum byrule byrule){ + + return (impl->orig_data[byrule] == 1); +} + + +static int expand_year_days(icalrecur_iterator* impl, int year); + + +icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, + struct icaltimetype dtstart) +{ + icalrecur_iterator* impl; + icalrecurrencetype_frequency freq; + + if ( ( impl = (icalrecur_iterator*) + malloc(sizeof(icalrecur_iterator))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + memset(impl,0,sizeof(icalrecur_iterator)); + + impl->rule = rule; + impl->last = dtstart; + impl->dtstart = dtstart; + impl->days_index =0; + impl->occurrence_no = 0; + freq = impl->rule.freq; + + /* Set up convienience pointers to make the code simpler. Allows + us to iterate through all of the BY* arrays in the rule. */ + + impl->by_ptrs[BY_MONTH]=impl->rule.by_month; + impl->by_ptrs[BY_WEEK_NO]=impl->rule.by_week_no; + impl->by_ptrs[BY_YEAR_DAY]=impl->rule.by_year_day; + impl->by_ptrs[BY_MONTH_DAY]=impl->rule.by_month_day; + impl->by_ptrs[BY_DAY]=impl->rule.by_day; + impl->by_ptrs[BY_HOUR]=impl->rule.by_hour; + impl->by_ptrs[BY_MINUTE]=impl->rule.by_minute; + impl->by_ptrs[BY_SECOND]=impl->rule.by_second; + impl->by_ptrs[BY_SET_POS]=impl->rule.by_set_pos; + + memset(impl->orig_data,0,9*sizeof(short)); + + /* Note which by rules had data in them when the iterator was + created. We can't use the actuall by_x arrays, because the + empty ones will be given default values later in this + routine. The orig_data array will be used later in has_by_data */ + + impl->orig_data[BY_MONTH] + = (short)(impl->rule.by_month[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_WEEK_NO] + =(short)(impl->rule.by_week_no[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_YEAR_DAY] + =(short)(impl->rule.by_year_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_MONTH_DAY] + =(short)(impl->rule.by_month_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_DAY] + = (short)(impl->rule.by_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_HOUR] + = (short)(impl->rule.by_hour[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_MINUTE] + = (short)(impl->rule.by_minute[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_SECOND] + = (short)(impl->rule.by_second[0]!=ICAL_RECURRENCE_ARRAY_MAX); + impl->orig_data[BY_SET_POS] + = (short)(impl->rule.by_set_pos[0]!=ICAL_RECURRENCE_ARRAY_MAX); + + + /* Check if the recurrence rule is legal */ + + /* If the BYYEARDAY appears, no other date rule part may appear. */ + + if(icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH) || + icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_WEEK_NO) || + icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH_DAY) || + icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_DAY) ){ + + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + + return 0; + } + + /* BYWEEKNO and BYMONTH rule parts may not both appear.*/ + + if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH)){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + /* BYWEEKNO and BYMONTHDAY rule parts may not both appear.*/ + + if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH_DAY)){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + + /*For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor + BYWEEKNO may appear. */ + + if(freq == ICAL_MONTHLY_RECURRENCE && + icalrecur_one_byrule(impl,BY_WEEK_NO)){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + + /*For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor + BYYEARDAY may appear. */ + + if(freq == ICAL_WEEKLY_RECURRENCE && + icalrecur_one_byrule(impl,BY_MONTH_DAY )) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + /* BYYEARDAY may only appear in YEARLY rules */ + if(freq != ICAL_YEARLY_RECURRENCE && + icalrecur_one_byrule(impl,BY_YEAR_DAY )) { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + /* Rewrite some of the rules and set up defaults to make later + processing easier. Primarily, t involves copying an element + from the start time into the corresponding BY_* array when the + BY_* array is empty */ + + + setup_defaults(impl,BY_SECOND,ICAL_SECONDLY_RECURRENCE, + impl->dtstart.second, + &(impl->last.second)); + + setup_defaults(impl,BY_MINUTE,ICAL_MINUTELY_RECURRENCE, + impl->dtstart.minute, + &(impl->last.minute)); + + setup_defaults(impl,BY_HOUR,ICAL_HOURLY_RECURRENCE, + impl->dtstart.hour, + &(impl->last.hour)); + + setup_defaults(impl,BY_MONTH_DAY,ICAL_DAILY_RECURRENCE, + impl->dtstart.day, + &(impl->last.day)); + + setup_defaults(impl,BY_MONTH,ICAL_MONTHLY_RECURRENCE, + impl->dtstart.month, + &(impl->last.month)); + + + if(impl->rule.freq == ICAL_WEEKLY_RECURRENCE ){ + + if(impl->by_ptrs[BY_DAY][0] == ICAL_RECURRENCE_ARRAY_MAX){ + + /* Weekly recurrences with no BY_DAY data should occur on the + same day of the week as the start time . */ + impl->by_ptrs[BY_DAY][0] = (short)icaltime_day_of_week(impl->dtstart); + + } else { + /* If there is BY_DAY data, then we need to move the initial + time to the start of the BY_DAY data. That is if the + start time is on a Wednesday, and the rule has + BYDAY=MO,WE,FR, move the initial time back to + monday. Otherwise, jumping to the next week ( jumping 7 + days ahead ) will skip over some occurrences in the + second week. */ + + /* This is probably a HACK. There should be some more + general way to solve this problem */ + + short dow = (short)(impl->by_ptrs[BY_DAY][0]-icaltime_day_of_week(impl->last)); + + if(dow < 0) { + /* initial time is after first day of BY_DAY data */ + + impl->last.day += dow; + impl->last = icaltime_normalize(impl->last); + } + } + + + } + + /* For YEARLY rule, begin by setting up the year days array . The + YEARLY rules work by expanding one year at a time. */ + + if(impl->rule.freq == ICAL_YEARLY_RECURRENCE){ + struct icaltimetype next; + + for (;;) { + expand_year_days(impl, impl->last.year); + if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX) + break; /* break when no days are expanded */ + increment_year(impl,impl->rule.interval); + } + + /* Copy the first day into last. */ + next = icaltime_from_day_of_year(impl->days[0], impl->last.year); + + impl->last.day = next.day; + impl->last.month = next.month; + } + + + /* If this is a monthly interval with by day data, then we need to + set the last value to the appropriate day of the month */ + + if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE && + has_by_data(impl,BY_DAY)) { + + int dow = icalrecurrencetype_day_day_of_week( + impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]); + int pos = icalrecurrencetype_day_position( + impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]); + + int poscount = 0; + int days_in_month = + icaltime_days_in_month(impl->last.month, impl->last.year); + + if(pos >= 0){ + /* Count up from the first day pf the month to find the + pos'th weekday of dow ( like the second monday. ) */ + + for(impl->last.day = 1; + impl->last.day <= days_in_month; + impl->last.day++){ + + if(icaltime_day_of_week(impl->last) == dow){ + if(++poscount == pos || pos == 0){ + break; + } + } + } + } else { + /* Count down from the last day pf the month to find the + pos'th weekday of dow ( like the second to last monday. ) */ + pos = -pos; + for(impl->last.day = days_in_month; + impl->last.day != 0; + impl->last.day--){ + + if(icaltime_day_of_week(impl->last) == dow){ + if(++poscount == pos ){ + break; + } + } + } + } + + + if(impl->last.day > days_in_month || impl->last.day == 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + } + + + + return impl; +} + + +void icalrecur_iterator_free(icalrecur_iterator* i) +{ + icalerror_check_arg_rv((i!=0),"impl"); + + free(i); + +} + +static void increment_year(icalrecur_iterator* impl, int inc) +{ + impl->last.year+=inc; +} + +/** Increment month is different that the other incement_* routines -- + it figures out the interval for itself, and uses BYMONTH data if + available. */ +static void increment_month(icalrecur_iterator* impl) +{ + int years; + + if(has_by_data(impl,BY_MONTH) ){ + /* Ignore the frequency and use the byrule data */ + + impl->by_indices[BY_MONTH]++; + + if (impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + impl->by_indices[BY_MONTH] = 0; + + increment_year(impl,1); + + } + + impl->last.month = + impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]]; + + } else { + + int inc; + + if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE){ + inc = impl->rule.interval; + } else { + inc = 1; + } + + impl->last.month+=inc; + + /* Months are offset by one */ + impl->last.month--; + + years = impl->last.month / 12; + + impl->last.month = impl->last.month % 12; + + impl->last.month++; + + if (years != 0){ + increment_year(impl,years); + } + } +} + +static void increment_monthday(icalrecur_iterator* impl, int inc) +{ + int i; + + for(i=0; i<inc; i++){ + + int days_in_month = + icaltime_days_in_month(impl->last.month, impl->last.year); + + impl->last.day++; + + if (impl->last.day > days_in_month){ + impl->last.day = impl->last.day-days_in_month; + increment_month(impl); + } + } +} + + +static void increment_hour(icalrecur_iterator* impl, int inc) +{ + int days; + + impl->last.hour+=inc; + + days = impl->last.hour / 24; + impl->last.hour = impl->last.hour % 24; + + if (impl->days != 0){ + increment_monthday(impl,days); + } +} + +static void increment_minute(icalrecur_iterator* impl, int inc) +{ + int hours; + + impl->last.minute+=inc; + + hours = impl->last.minute / 60; + impl->last.minute = impl->last.minute % 60; + + if (hours != 0){ + increment_hour(impl,hours); + } + +} + +static void increment_second(icalrecur_iterator* impl, int inc) +{ + int minutes; + + impl->last.second+=inc; + + minutes = impl->last.second / 60; + impl->last.second = impl->last.second % 60; + + if (minutes != 0) + { + increment_minute(impl, minutes); + } +} + +#if 0 +#include "ical.h" +void test_increment() +{ + icalrecur_iterator impl; + + impl.last = icaltime_from_string("20000101T000000Z"); + + printf("Orig: %s\n",icaltime_as_ctime(impl.last)); + + increment_second(&impl,5); + printf("+ 5 sec : %s\n",icaltime_as_ctime(impl.last)); + + increment_second(&impl,355); + printf("+ 355 sec : %s\n",icaltime_as_ctime(impl.last)); + + increment_minute(&impl,5); + printf("+ 5 min : %s\n",icaltime_as_ctime(impl.last)); + + increment_minute(&impl,360); + printf("+ 360 min : %s\n",icaltime_as_ctime(impl.last)); + increment_hour(&impl,5); + printf("+ 5 hours : %s\n",icaltime_as_ctime(impl.last)); + increment_hour(&impl,43); + printf("+ 43 hours : %s\n",icaltime_as_ctime(impl.last)); + increment_monthday(&impl,3); + printf("+ 3 days : %s\n",icaltime_as_ctime(impl.last)); + increment_monthday(&impl,600); + printf("+ 600 days : %s\n",icaltime_as_ctime(impl.last)); + +} + +#endif + +static int next_second(icalrecur_iterator* impl) +{ + + int has_by_second = (impl->by_ptrs[BY_SECOND][0]!=ICAL_RECURRENCE_ARRAY_MAX); + int this_frequency = (impl->rule.freq == ICAL_SECONDLY_RECURRENCE); + + int end_of_data = 0; + + assert(has_by_second || this_frequency); + + if( has_by_second ){ + /* Ignore the frequency and use the byrule data */ + + impl->by_indices[BY_SECOND]++; + + if (impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + impl->by_indices[BY_SECOND] = 0; + + end_of_data = 1; + } + + + impl->last.second = + impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]]; + + + } else if( !has_by_second && this_frequency ){ + /* Compute the next value from the last time and the frequency interval*/ + increment_second(impl, impl->rule.interval); + + } + + /* If we have gone through all of the seconds on the BY list, then we + need to move to the next minute */ + + if(has_by_second && end_of_data && this_frequency ){ + increment_minute(impl,1); + } + + return end_of_data; + +} + +static int next_minute(icalrecur_iterator* impl) +{ + + int has_by_minute = (impl->by_ptrs[BY_MINUTE][0]!=ICAL_RECURRENCE_ARRAY_MAX); + int this_frequency = (impl->rule.freq == ICAL_MINUTELY_RECURRENCE); + + int end_of_data = 0; + + assert(has_by_minute || this_frequency); + + + if (next_second(impl) == 0){ + return 0; + } + + if( has_by_minute ){ + /* Ignore the frequency and use the byrule data */ + + impl->by_indices[BY_MINUTE]++; + + if (impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + + impl->by_indices[BY_MINUTE] = 0; + + end_of_data = 1; + } + + impl->last.minute = + impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]]; + + } else if( !has_by_minute && this_frequency ){ + /* Compute the next value from the last time and the frequency interval*/ + increment_minute(impl,impl->rule.interval); + } + +/* If we have gone through all of the minutes on the BY list, then we + need to move to the next hour */ + + if(has_by_minute && end_of_data && this_frequency ){ + increment_hour(impl,1); + } + + return end_of_data; +} + +static int next_hour(icalrecur_iterator* impl) +{ + + int has_by_hour = (impl->by_ptrs[BY_HOUR][0]!=ICAL_RECURRENCE_ARRAY_MAX); + int this_frequency = (impl->rule.freq == ICAL_HOURLY_RECURRENCE); + + int end_of_data = 0; + + assert(has_by_hour || this_frequency); + + if (next_minute(impl) == 0){ + return 0; + } + + if( has_by_hour ){ + /* Ignore the frequency and use the byrule data */ + + impl->by_indices[BY_HOUR]++; + + if (impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + impl->by_indices[BY_HOUR] = 0; + + end_of_data = 1; + } + + impl->last.hour = + impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]]; + + } else if( !has_by_hour && this_frequency ){ + /* Compute the next value from the last time and the frequency interval*/ + increment_hour(impl,impl->rule.interval); + + } + + /* If we have gone through all of the hours on the BY list, then we + need to move to the next day */ + + if(has_by_hour && end_of_data && this_frequency ){ + increment_monthday(impl,1); + } + + return end_of_data; + +} + +static int next_day(icalrecur_iterator* impl) +{ + + int has_by_day = (impl->by_ptrs[BY_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX); + int this_frequency = (impl->rule.freq == ICAL_DAILY_RECURRENCE); + + assert(has_by_day || this_frequency); + + if (next_hour(impl) == 0){ + return 0; + } + + /* Always increment through the interval, since this routine is not + called by any other next_* routine, and the days that are + excluded will be taken care of by restriction filtering */ + + if(this_frequency){ + increment_monthday(impl,impl->rule.interval); + } else { + increment_monthday(impl,1); + } + + + return 0; + +} + + +/*static int next_yearday(icalrecur_iterator* impl) +{ + + int has_by_yearday = (impl->by_ptrs[BY_YEAR_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX); + + int end_of_data = 0; + + assert(has_by_yearday ); + + if (next_hour(impl) == 0){ + return 0; + } + + impl->by_indices[BY_YEAR_DAY]++; + + if (impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + impl->by_indices[BY_YEAR_DAY] = 0; + + end_of_data = 1; + } + + impl->last.day = + impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]]; + + if(has_by_yearday && end_of_data){ + increment_year(impl,1); + } + + return end_of_data; + +}*/ + + +/* Returns the day of the month for the current month of t that is the + pos'th instance of the day-of-week dow */ + +static int nth_weekday(int dow, int pos, struct icaltimetype t){ + + int days_in_month = icaltime_days_in_month(t.month, t.year); + int end_dow, start_dow; + int wd; + + if(pos >= 0){ + t.day = 1; + start_dow = icaltime_day_of_week(t); + + if (pos != 0) { + pos--; + } + + /* find month day of first occurrence of dow -- such as the + month day of the first monday */ + + wd = dow-start_dow+1; + + if (wd <= 0){ + wd = wd + 7; + } + + wd = wd + pos * 7; + + } else { + t.day = days_in_month; + end_dow = icaltime_day_of_week(t); + + pos++; + + /* find month day of last occurrence of dow -- such as the + month day of the last monday */ + + wd = (end_dow - dow); + + if (wd < 0){ + wd = wd+ 7; + } + + wd = days_in_month - wd; + + wd = wd + pos * 7; + } + + return wd; +} + +static int is_day_in_byday(icalrecur_iterator* impl,struct icaltimetype tt){ + + int idx; + + for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){ + int dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]); + int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]); + int this_dow = icaltime_day_of_week(tt); + + if( (pos == 0 && dow == this_dow ) || /* Just a dow, like "TU" or "FR" */ + (nth_weekday(dow,pos,tt) == tt.day)){ /*pos+wod: "3FR" or -1TU" */ + return 1; + } + } + + return 0; +} + +static int next_month(icalrecur_iterator* impl) +{ + int data_valid = 1; + + int this_frequency = (impl->rule.freq == ICAL_MONTHLY_RECURRENCE); + + assert( has_by_data(impl,BY_MONTH) || this_frequency); + + /* Iterate through the occurrences within a day. If we don't get to + the end of the intra-day data, don't bother going to the next + month */ + + if (next_hour(impl) == 0){ + return data_valid; /* Signal that the data is valid */ + } + + /* Now iterate through the occurrences within a month -- by days, + weeks or weekdays. */ + + /* + * Case 1: + * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR;BYMONTHDAY=13 + */ + + if(has_by_data(impl,BY_DAY) && has_by_data(impl,BY_MONTH_DAY)){ + int day, idx,j; + int days_in_month = icaltime_days_in_month(impl->last.month, + impl->last.year); + /* Iterate through the remaining days in the month and check if + each day is listed in the BY_DAY array and in the BY_MONTHDAY + array. This seems very inneficient, but I think it is the + simplest way to account for both BYDAY=1FR (First friday in + month) and BYDAY=FR ( every friday in month ) */ + + for(day = impl->last.day+1; day <= days_in_month; day++){ + for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){ + for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){ + int dow = + icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]); + int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]); + int mday = BYMDPTR[j]; + int this_dow; + + impl->last.day = day; + this_dow = icaltime_day_of_week(impl->last); + + if( (pos == 0 && dow == this_dow && mday == day) || + (nth_weekday(dow,pos,impl->last) == day && mday==day)){ + goto MDEND; + } + } + } + } + + MDEND: + + if ( day > days_in_month){ + impl->last.day = 1; + increment_month(impl); + data_valid = 0; /* signal that impl->last is invalid */ + } + + + /* + * Case 2: + * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR + */ + + } else if(has_by_data(impl,BY_DAY)){ + /* For this case, the weekdays are relative to the + month. BYDAY=FR -> First Friday in month, etc. */ + + /* This code iterates through the remaining days in the month + and checks if each day is listed in the BY_DAY array. This + seems very inneficient, but I think it is the simplest way to + account for both BYDAY=1FR (First friday in month) and + BYDAY=FR ( every friday in month ) */ + + int day; + int days_in_month = icaltime_days_in_month(impl->last.month, + impl->last.year); + assert( BYDAYPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX); + + for(day = impl->last.day+1; day <= days_in_month; day++){ + impl->last.day = day; + if(is_day_in_byday(impl,impl->last)){ + data_valid = 1; + break; + } + } + + if ( day > days_in_month){ + impl->last.day = 1; + increment_month(impl); + + /* Did moving to the next month put us on a valid date? if + so, note that the new data is valid, if, not, mark it + invalid */ + + if(is_day_in_byday(impl,impl->last)){ + data_valid = 1; + } else { + data_valid = 0; /* signal that impl->last is invalid */ + } + } + + /* + * Case 3 + * Rules Like: FREQ=MONTHLY;COUNT=10;BYMONTHDAY=-3 + */ + + } else if (has_by_data(impl,BY_MONTH_DAY)) { + int day; + + assert( BYMDPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX); + + BYMDIDX++; + + /* Are we at the end of the BYDAY array? */ + if (BYMDPTR[BYMDIDX] ==ICAL_RECURRENCE_ARRAY_MAX){ + + BYMDIDX = 0; /* Reset to 0 */ + increment_month(impl); + } + + day = BYMDPTR[BYMDIDX]; + + if (day < 0) { + day = icaltime_days_in_month(impl->last.month, impl->last.year) + day + 1; + } + + impl->last.day = day; + + } else { + increment_month(impl); + } + + return data_valid; + +} + +static int next_weekday_by_week(icalrecur_iterator* impl) +{ + + int end_of_data = 0; + int start_of_week, dow; + struct icaltimetype next; + + if (next_hour(impl) == 0){ + return 0; + } + + if(!has_by_data(impl,BY_DAY)){ + return 1; + } + + /* If we get here, we need to step to tne next day */ + + for (;;) { + struct icaltimetype tt = icaltime_null_time(); + BYDAYIDX++; /* Look at next elem in BYDAY array */ + + /* Are we at the end of the BYDAY array? */ + if (BYDAYPTR[BYDAYIDX]==ICAL_RECURRENCE_ARRAY_MAX){ + BYDAYIDX = 0; /* Reset to 0 */ + end_of_data = 1; /* Signal that we're at the end */ + } + + /* Add the day of week offset to to the start of this week, and use + that to get the next day */ + /* ignore position of dow ("4FR"), only use dow ("FR")*/ + dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[BYDAYIDX]); + tt.year = impl->last.year; + tt.day = impl->last.day; + tt.month = impl->last.month; + + start_of_week = icaltime_start_doy_of_week(tt); + + dow--; /* Set Sunday to be 0 */ + + if(dow+start_of_week <1){ + /* The selected date is in the previous year. */ + if(!end_of_data){ + continue; + } + } + + next = icaltime_from_day_of_year(start_of_week + dow,impl->last.year); + + impl->last.day = next.day; + impl->last.month = next.month; + impl->last.year = next.year; + + return end_of_data; + } + +} + +static int next_week(icalrecur_iterator* impl) +{ + int end_of_data = 0; + + /* Increment to the next week day, if there is data at a level less than a week */ + if (next_weekday_by_week(impl) == 0){ + return 0; /* Have not reached end of week yet */ + } + + /* If we get here, we have incremented through the entire week, and + can increment to the next week */ + + if( has_by_data(impl,BY_WEEK_NO)){ + /*FREQ=WEEKLY;BYWEEK=20*/ + /* Use the Week Number byrule data */ + int week_no; + struct icaltimetype t; + + impl->by_indices[BY_WEEK_NO]++; + + if (impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]] + ==ICAL_RECURRENCE_ARRAY_MAX){ + impl->by_indices[BY_WEEK_NO] = 0; + + end_of_data = 1; + } + + t = impl->last; + t.month=1; /* HACK, should be setting to the date of the first week of year*/ + t.day=1; + + week_no = impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]]; + + impl->last.day += week_no*7; + + impl->last = icaltime_normalize(impl->last); + + } else { + /* Jump to the next week */ + increment_monthday(impl,7*impl->rule.interval); + } + + if( has_by_data(impl,BY_WEEK_NO) && end_of_data){ + increment_year(impl,1); + } + + return end_of_data; + +} + +/** Expand the BYDAY rule part and return a pointer to a newly allocated list of days. */ +static pvl_list expand_by_day(icalrecur_iterator* impl, int year) +{ + /* Try to calculate each of the occurrences. */ + int i; + pvl_list days_list = pvl_newlist(); + + int start_dow, end_dow, end_year_day; + struct icaltimetype tmp = impl->last; + + tmp.year= year; + tmp.month = 1; + tmp.day = 1; + tmp.is_date = 1; + + /* Find the day that 1st Jan falls on, 1 (Sun) to 7 (Sat). */ + start_dow = icaltime_day_of_week(tmp); + + /* Get the last day of the year*/ + tmp.year= year; + tmp.month = 12; + tmp.day = 31; + tmp.is_date = 1; + + end_dow = icaltime_day_of_week(tmp); + end_year_day = icaltime_day_of_year(tmp); + + for(i = 0; BYDAYPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){ + /* This is 1 (Sun) to 7 (Sat). */ + int dow = + icalrecurrencetype_day_day_of_week(BYDAYPTR[i]); + int pos = icalrecurrencetype_day_position(BYDAYPTR[i]); + + if(pos == 0){ + /* The day was specified without a position -- it is just + a bare day of the week ( BYDAY=SU) so add all of the + days of the year with this day-of-week*/ + int doy, tmp_start_doy; + + tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1; + + for (doy = tmp_start_doy; doy <= end_year_day; doy += 7) + pvl_push(days_list,(void*)(ptrdiff_t)doy); + + } else if ( pos > 0) { + int first; + /* First occurrence of dow in year */ + if( dow >= start_dow) { + first = dow - start_dow + 1; + } else { + first = dow - start_dow + 8; + } + + /* Then just multiple the position times 7 to get the pos'th day in the year */ + pvl_push(days_list,(void*)(first+ (pos-1) * 7)); + + } else { /* pos < 0 */ + int last; + pos = -pos; + + /* last occurrence of dow in year */ + if( dow <= end_dow) { + last = end_year_day - end_dow + dow; + } else { + last = end_year_day - end_dow + dow - 7; + } + + pvl_push(days_list,(void*)(last - (pos-1) * 7)); + } + } + return days_list; +} + + +/* For INTERVAL=YEARLY, set up the days[] array in the iterator to + list all of the days of the current year that are specified in this + rule. */ + +static int expand_year_days(icalrecur_iterator* impl, int year) +{ + int j,k; + int days_index=0; + struct icaltimetype t; + int flags; + + t = icaltime_null_date(); + +#define HBD(x) has_by_data(impl,x) + + memset(impl->days,ICAL_RECURRENCE_ARRAY_MAX_BYTE,sizeof(impl->days)); + + /* The flags and the following switch statement select which code + to use to expand the yers days, based on which BY-rules are + present. */ + + flags = (HBD(BY_DAY) ? 1<<BY_DAY : 0) + + (HBD(BY_WEEK_NO) ? 1<<BY_WEEK_NO : 0) + + (HBD(BY_MONTH_DAY) ? 1<<BY_MONTH_DAY : 0) + + (HBD(BY_MONTH) ? 1<<BY_MONTH : 0) + + (HBD(BY_YEAR_DAY) ? 1<<BY_YEAR_DAY : 0); + + + switch(flags) { + + case 0: { + /* FREQ=YEARLY; */ + t = impl->dtstart; + t.year = impl->last.year; + + impl->days[days_index++] = (short)icaltime_day_of_year(t); + + break; + } + case 1<<BY_MONTH: { + /* FREQ=YEARLY; BYMONTH=3,11*/ + + for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ + int month = impl->by_ptrs[BY_MONTH][j]; + int doy; + + t = impl->dtstart; + t.year = year; + t.month = month; + t.is_date = 1; + + doy = icaltime_day_of_year(t); + + impl->days[days_index++] = (short)doy; + + } + break; + } + + case 1<<BY_MONTH_DAY: { + /* FREQ=YEARLY; BYMONTHDAY=1,15*/ + for(k=0;impl->by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++) + { + int month_day = impl->by_ptrs[BY_MONTH_DAY][k]; + int doy; + + t = impl->dtstart; + t.day = month_day; + t.year = year; + t.is_date = 1; + + doy = icaltime_day_of_year(t); + + impl->days[days_index++] = (short)doy; + + } + break; + } + + case (1<<BY_MONTH_DAY) + (1<<BY_MONTH): { + /* FREQ=YEARLY; BYMONTHDAY=1,15; BYMONTH=10 */ + + for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ + for(k=0;impl->by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++) + { + int month = impl->by_ptrs[BY_MONTH][j]; + int month_day = impl->by_ptrs[BY_MONTH_DAY][k]; + int doy; + + t.day = month_day; + t.month = month; + t.year = year; + t.is_date = 1; + + doy = icaltime_day_of_year(t); + + impl->days[days_index++] = (short)doy; + + } + } + + break; + } + + case 1<<BY_WEEK_NO: { + /* FREQ=YEARLY; BYWEEKNO=20,50 */ + + int dow; + + t.day = impl->dtstart.day; + t.month = impl->dtstart.month; + t.year = year; + t.is_date = 1; + + dow = icaltime_day_of_week(t); + /* HACK Not finished */ + + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + + break; + } + + case (1<<BY_WEEK_NO) + (1<<BY_MONTH_DAY): { + /*FREQ=YEARLY; WEEKNO=20,50; BYMONTH= 6,11 */ + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + break; + } + + case 1<<BY_DAY: { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR*/ + pvl_elem i; + pvl_list days = expand_by_day(impl,year); + + + for(i=pvl_head(days);i!=0;i=pvl_next(i)){ + short day = (short)(intptr_t)pvl_data(i); + impl->days[days_index++] = day; + } + + pvl_free(days); + + break; + } + + case (1<<BY_DAY)+(1<<BY_MONTH): { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTH = 12*/ + + + for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ + int month = impl->by_ptrs[BY_MONTH][j]; + int days_in_month = icaltime_days_in_month(month,year); + int first_dow, last_dow, doy_offset; + + t.year = year; + t.month = month; + t.day = 1; + t.is_date = 1; + + first_dow = icaltime_day_of_week(t); + + /* This holds the day offset used to calculate the day of the year + from the month day. Just add the month day to this. */ + doy_offset = icaltime_day_of_year(t) - 1; + + t.day = days_in_month; + last_dow = icaltime_day_of_week(t); + + for(k=0;impl->by_ptrs[BY_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++){ + short day_coded = impl->by_ptrs[BY_DAY][k]; + enum icalrecurrencetype_weekday dow = + icalrecurrencetype_day_day_of_week(day_coded); + int pos = icalrecurrencetype_day_position(day_coded); + int first_matching_day, last_matching_day, day, month_day; + + /* Calculate the first day in the month with the given weekday, + and the last day. */ + first_matching_day = ((dow + 7 - first_dow) % 7) + 1; + last_matching_day = days_in_month - ((last_dow + 7 - dow) % 7); + + if (pos == 0) { + /* Add all of instances of the weekday within the month. */ + for (day = first_matching_day; day <= days_in_month; day += 7) + impl->days[days_index++] = (short)(doy_offset + day); + + } else if (pos > 0) { + /* Add the nth instance of the weekday within the month. */ + month_day = first_matching_day + (pos - 1) * 7; + + if (month_day <= days_in_month) + impl->days[days_index++] = (short)(doy_offset + month_day); + + } else { + /* Add the -nth instance of the weekday within the month.*/ + month_day = last_matching_day + (pos + 1) * 7; + + if (month_day > 0) + impl->days[days_index++] = (short)(doy_offset + month_day); + } + } + } + break; + } + + case (1<<BY_DAY) + (1<<BY_MONTH_DAY) : { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTHDAY=1,15*/ + + pvl_elem itr; + pvl_list days = expand_by_day(impl,year); + + for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){ + short day = (short)(intptr_t)pvl_data(itr); + struct icaltimetype tt; + + tt = icaltime_from_day_of_year(day,year); + + for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){ + int mday = BYMDPTR[j]; + + if(tt.day == mday){ + impl->days[days_index++] = day; + } + } + + } + + pvl_free(days); + + break; + } + + case (1<<BY_DAY) + (1<<BY_MONTH_DAY) + (1<<BY_MONTH): { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTHDAY=10; MYMONTH=6,11*/ + + pvl_elem itr; + pvl_list days = expand_by_day(impl,year); + + for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){ + short day = (short)(intptr_t)pvl_data(itr); + struct icaltimetype tt; + int i; + + tt = icaltime_from_day_of_year(day,year); + + for(i = 0; BYMONPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){ + for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){ + int mday = BYMDPTR[j]; + int month = BYMONPTR[i]; + + if(tt.month == month && tt.day == mday){ + impl->days[days_index++] = day; + } + } + } + + } + + pvl_free(days); + + break; + + } + + case (1<<BY_DAY) + (1<<BY_WEEK_NO) : { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; WEEKNO=20,50*/ + + pvl_elem itr; + pvl_list days = expand_by_day(impl,year); + + for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){ + short day = (short)(intptr_t)pvl_data(itr); + struct icaltimetype tt; + int i; + + tt = icaltime_from_day_of_year(day,year); + + for(i = 0; BYWEEKPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){ + int weekno = BYWEEKPTR[i]; + int this_weekno = icaltime_week_number(tt); + if(weekno== this_weekno){ + impl->days[days_index++] = day; + } + } + + } + + pvl_free(days); + break; + } + + case (1<<BY_DAY) + (1<<BY_WEEK_NO) + (1<<BY_MONTH_DAY): { + /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; WEEKNO=20,50; BYMONTHDAY=1,15*/ + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + break; + } + + case 1<<BY_YEAR_DAY: { + for(j=0;impl->by_ptrs[BY_YEAR_DAY][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ + impl->days[days_index++] = impl->by_ptrs[BY_YEAR_DAY][j]; + } + break; + } + + default: { + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + break; + } + + } + + return 0; +} + + +static int next_year(icalrecur_iterator* impl) +{ + struct icaltimetype next; + + if (next_hour(impl) == 0){ + return 0; + } + + if (impl->days[++impl->days_index] == ICAL_RECURRENCE_ARRAY_MAX){ + impl->days_index = 0; + + for (;;) { + increment_year(impl,impl->rule.interval); + expand_year_days(impl,impl->last.year); + if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX) + break; + } + } + + next = icaltime_from_day_of_year(impl->days[impl->days_index], impl->last.year); + + impl->last.day = next.day; + impl->last.month = next.month; + + return 1; +} + +int icalrecur_check_rulepart(icalrecur_iterator* impl, + int v, enum byrule byrule) +{ + int itr; + + if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX){ + for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){ + if(impl->by_ptrs[byrule][itr] == v){ + return 1; + } + } + } + + return 0; +} + +static int check_contract_restriction(icalrecur_iterator* impl, + enum byrule byrule, int v) +{ + int pass = 0; + int itr; + icalrecurrencetype_frequency freq = impl->rule.freq; + + if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX && + expand_map[freq].map[byrule] == CONTRACT){ + for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){ + if(impl->by_ptrs[byrule][itr] == v){ + pass=1; + break; + } + } + + return pass; + } else { + /* This is not a contracting byrule, or it has no data, so the + test passes*/ + return 1; + } +} + + +static int check_contracting_rules(icalrecur_iterator* impl) +{ + + int day_of_week = icaltime_day_of_week(impl->last); + int week_no = icaltime_week_number(impl->last); + int year_day = icaltime_day_of_year(impl->last); + + if ( + check_contract_restriction(impl,BY_SECOND, impl->last.second) && + check_contract_restriction(impl,BY_MINUTE, impl->last.minute) && + check_contract_restriction(impl,BY_HOUR, impl->last.hour) && + check_contract_restriction(impl,BY_DAY, day_of_week) && + check_contract_restriction(impl,BY_WEEK_NO, week_no) && + check_contract_restriction(impl,BY_MONTH_DAY, impl->last.day) && + check_contract_restriction(impl,BY_MONTH, impl->last.month) && + check_contract_restriction(impl,BY_YEAR_DAY, year_day) ) + { + + return 1; + } else { + return 0; + } +} + +struct icaltimetype icalrecur_iterator_next(icalrecur_iterator *impl) +{ + int valid = 1; + + if( (impl->rule.count!=0 &&impl->occurrence_no >= impl->rule.count) || + (!icaltime_is_null_time(impl->rule.until) && + icaltime_compare(impl->last,impl->rule.until) > 0)) { + return icaltime_null_time(); + } + + if(impl->occurrence_no == 0 + && icaltime_compare(impl->last,impl->dtstart) >= 0){ + + impl->occurrence_no++; + return impl->last; + } + + do { + valid = 1; + switch(impl->rule.freq){ + + case ICAL_SECONDLY_RECURRENCE: { + next_second(impl); + break; + } + case ICAL_MINUTELY_RECURRENCE: { + next_minute(impl); + break; + } + case ICAL_HOURLY_RECURRENCE: { + next_hour(impl); + break; + } + case ICAL_DAILY_RECURRENCE: { + next_day(impl); + break; + } + case ICAL_WEEKLY_RECURRENCE: { + next_week(impl); + break; + } + case ICAL_MONTHLY_RECURRENCE: { + valid = next_month(impl); + break; + } + case ICAL_YEARLY_RECURRENCE:{ + next_year(impl); + break; + } + default:{ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return icaltime_null_time(); + } + } + + if(impl->last.year >= 2038 ){ + /* HACK */ + return icaltime_null_time(); + } + + } while(!check_contracting_rules(impl) + || icaltime_compare(impl->last,impl->dtstart) < 0 + || valid == 0); + + +/* Ignore null times and times that are after the until time */ + if( !icaltime_is_null_time(impl->rule.until) && + icaltime_compare(impl->last,impl->rule.until) > 0 ) { + return icaltime_null_time(); + } + + impl->occurrence_no++; + + return impl->last; +} + + +/************************** Type Routines **********************/ + + +void icalrecurrencetype_clear(struct icalrecurrencetype *recur) +{ + memset(recur,ICAL_RECURRENCE_ARRAY_MAX_BYTE, + sizeof(struct icalrecurrencetype)); + + recur->week_start = ICAL_MONDAY_WEEKDAY; + recur->freq = ICAL_NO_RECURRENCE; + recur->interval = 1; + memset(&(recur->until),0,sizeof(struct icaltimetype)); + recur->count = 0; +} + +/** The 'day' element of icalrecurrencetype_weekday is encoded to + * allow representation of both the day of the week ( Monday, Tueday), + * but also the Nth day of the week ( First tuesday of the month, last + * thursday of the year) These routines decode the day values. + * + * The day's position in the period ( Nth-ness) and the numerical + * value of the day are encoded together as: pos*7 + dow + * + * A position of 0 means 'any' or 'every' + */ + +enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day) +{ + return abs(day)%8; +} + +int icalrecurrencetype_day_position(short day) +{ + int wd, pos; + + wd = icalrecurrencetype_day_day_of_week(day); + + pos = (abs(day)-wd)/8 * ((day<0)?-1:1); + + + return pos; +} + + +/****************** Enumeration Routines ******************/ + +static struct {icalrecurrencetype_weekday wd; const char * str; } +wd_map[] = { + {ICAL_SUNDAY_WEEKDAY,"SU"}, + {ICAL_MONDAY_WEEKDAY,"MO"}, + {ICAL_TUESDAY_WEEKDAY,"TU"}, + {ICAL_WEDNESDAY_WEEKDAY,"WE"}, + {ICAL_THURSDAY_WEEKDAY,"TH"}, + {ICAL_FRIDAY_WEEKDAY,"FR"}, + {ICAL_SATURDAY_WEEKDAY,"SA"}, + {ICAL_NO_WEEKDAY,0} +}; + +const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind) +{ + int i; + + for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) { + if ( wd_map[i].wd == kind) { + return wd_map[i].str; + } + } + + return 0; +} + +icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str) +{ + int i; + + for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) { + if ( strcasecmp(str,wd_map[i].str) == 0){ + return wd_map[i].wd; + } + } + + return ICAL_NO_WEEKDAY; +} + + + +static struct { + icalrecurrencetype_frequency kind; + const char* str; +} freq_map[] = { + {ICAL_SECONDLY_RECURRENCE,"SECONDLY"}, + {ICAL_MINUTELY_RECURRENCE,"MINUTELY"}, + {ICAL_HOURLY_RECURRENCE,"HOURLY"}, + {ICAL_DAILY_RECURRENCE,"DAILY"}, + {ICAL_WEEKLY_RECURRENCE,"WEEKLY"}, + {ICAL_MONTHLY_RECURRENCE,"MONTHLY"}, + {ICAL_YEARLY_RECURRENCE,"YEARLY"}, + {ICAL_NO_RECURRENCE,0} +}; + +const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind) +{ + int i; + + for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) { + if ( freq_map[i].kind == kind ) { + return freq_map[i].str; + } + } + return 0; +} + +icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str) +{ + int i; + + for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) { + if ( strcasecmp(str,freq_map[i].str) == 0){ + return freq_map[i].kind; + } + } + return ICAL_NO_RECURRENCE; +} + +/** Fill an array with the 'count' number of occurrences generated by + * the rrule. Note that the times are returned in UTC, but the times + * are calculated in local time. YOu will have to convert the results + * back into local time before using them. + */ + +int icalrecur_expand_recurrence(char* rule, time_t start, + int count, time_t* array) +{ + struct icalrecurrencetype recur; + icalrecur_iterator* ritr; + time_t tt; + struct icaltimetype icstart, next; + int i = 0; + + memset(array, 0, count*sizeof(time_t)); + + icstart = icaltime_from_timet_with_zone(start,0,0); + + recur = icalrecurrencetype_from_string(rule); + + for(ritr = icalrecur_iterator_new(recur,icstart), + next = icalrecur_iterator_next(ritr); + !icaltime_is_null_time(next) && i < count; + next = icalrecur_iterator_next(ritr)){ + + tt = icaltime_as_timet(next); + + if (tt >= start ){ + array[i++] = tt; + } + + } + + icalrecur_iterator_free(ritr); + + return 1; +} diff --git a/libkcal/libical/src/libical/icalrecur.h b/libkcal/libical/src/libical/icalrecur.h new file mode 100644 index 000000000..da186f86f --- /dev/null +++ b/libkcal/libical/src/libical/icalrecur.h @@ -0,0 +1,215 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalrecur.h + CREATOR: eric 20 March 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ +*/ + +/** +@file icalrecur.h +@brief Routines for dealing with recurring time + +How to use: + +1) Get a rule and a start time from a component + +@code + icalproperty rrule; + struct icalrecurrencetype recur; + struct icaltimetype dtstart; + + rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY); + recur = icalproperty_get_rrule(rrule); + start = icalproperty_get_dtstart(dtstart); +@endcode + +Or, just make them up: + +@code + recur = icalrecurrencetype_from_string("FREQ=YEARLY;BYDAY=SU,WE"); + dtstart = icaltime_from_string("19970101T123000") +@endcode + +2) Create an iterator + +@code + icalrecur_iterator* ritr; + ritr = icalrecur_iterator_new(recur,start); +@endcode + +3) Iterator over the occurrences + +@code + struct icaltimetype next; + while (next = icalrecur_iterator_next(ritr) + && !icaltime_is_null_time(next){ + Do something with next + } +@endcode + +Note that that the time returned by icalrecur_iterator_next is in +whatever timezone that dtstart is in. + +*/ + +#ifndef ICALRECUR_H +#define ICALRECUR_H + +#include <time.h> +#include "icaltime.h" + +/* + * Recurrance enumerations + */ + +typedef enum icalrecurrencetype_frequency +{ + /* These enums are used to index an array, so don't change the + order or the integers */ + + ICAL_SECONDLY_RECURRENCE=0, + ICAL_MINUTELY_RECURRENCE=1, + ICAL_HOURLY_RECURRENCE=2, + ICAL_DAILY_RECURRENCE=3, + ICAL_WEEKLY_RECURRENCE=4, + ICAL_MONTHLY_RECURRENCE=5, + ICAL_YEARLY_RECURRENCE=6, + ICAL_NO_RECURRENCE=7 + +} icalrecurrencetype_frequency; + +typedef enum icalrecurrencetype_weekday +{ + ICAL_NO_WEEKDAY, + ICAL_SUNDAY_WEEKDAY, + ICAL_MONDAY_WEEKDAY, + ICAL_TUESDAY_WEEKDAY, + ICAL_WEDNESDAY_WEEKDAY, + ICAL_THURSDAY_WEEKDAY, + ICAL_FRIDAY_WEEKDAY, + ICAL_SATURDAY_WEEKDAY +} icalrecurrencetype_weekday; + +enum { + ICAL_RECURRENCE_ARRAY_MAX = 0x7f7f, + ICAL_RECURRENCE_ARRAY_MAX_BYTE = 0x7f +}; + + + +/** + * Recurrence type routines + */ + +/* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of + the values and fields in struct icalrecurrencetype */ + +#define ICAL_BY_SECOND_SIZE 61 +#define ICAL_BY_MINUTE_SIZE 61 +#define ICAL_BY_HOUR_SIZE 25 +#define ICAL_BY_DAY_SIZE 364 /* 7 days * 52 weeks */ +#define ICAL_BY_MONTHDAY_SIZE 32 +#define ICAL_BY_YEARDAY_SIZE 367 +#define ICAL_BY_WEEKNO_SIZE 54 +#define ICAL_BY_MONTH_SIZE 13 +#define ICAL_BY_SETPOS_SIZE 367 + +/** Main struct for holding digested recurrence rules */ +struct icalrecurrencetype +{ + icalrecurrencetype_frequency freq; + + + /* until and count are mutually exclusive. */ + struct icaltimetype until; + int count; + + short interval; + + icalrecurrencetype_weekday week_start; + + /* The BY* parameters can each take a list of values. Here I + * assume that the list of values will not be larger than the + * range of the value -- that is, the client will not name a + * value more than once. + + * Each of the lists is terminated with the value + * ICAL_RECURRENCE_ARRAY_MAX unless the the list is full. + */ + + short by_second[ICAL_BY_SECOND_SIZE]; + short by_minute[ICAL_BY_MINUTE_SIZE]; + short by_hour[ICAL_BY_HOUR_SIZE]; + short by_day[ICAL_BY_DAY_SIZE]; /* Encoded value, see below */ + short by_month_day[ICAL_BY_MONTHDAY_SIZE]; + short by_year_day[ ICAL_BY_YEARDAY_SIZE]; + short by_week_no[ICAL_BY_WEEKNO_SIZE]; + short by_month[ICAL_BY_MONTH_SIZE]; + short by_set_pos[ICAL_BY_SETPOS_SIZE]; +}; + + +void icalrecurrencetype_clear(struct icalrecurrencetype *r); + +/** + * Array Encoding + * + * The 'day' element of the by_day array is encoded to allow + * representation of both the day of the week ( Monday, Tueday), but also + * the Nth day of the week ( First tuesday of the month, last thursday of + * the year) These routines decode the day values + */ + +/** 1 == Monday, etc. */ +enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day); + +/** 0 == any of day of week. 1 == first, 2 = second, -2 == second to last, etc */ +int icalrecurrencetype_day_position(short day); + + +/** Recurrance rule parser */ + +/** Convert between strings and recurrencetype structures. */ +struct icalrecurrencetype icalrecurrencetype_from_string(const char* str); +char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur); + + +/** Recurrence iteration routines */ + +typedef struct icalrecur_iterator_impl icalrecur_iterator; + +/** Create a new recurrence rule iterator */ +icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, + struct icaltimetype dtstart); + +/** Get the next occurrence from an iterator */ +struct icaltimetype icalrecur_iterator_next(icalrecur_iterator*); + +void icalrecur_iterator_decrement_count(icalrecur_iterator*); + +/** Free the iterator */ +void icalrecur_iterator_free(icalrecur_iterator*); + +/** + * Fills array up with at most 'count' time_t values, each + * representing an occurrence time in seconds past the POSIX epoch + */ +int icalrecur_expand_recurrence(char* rule, time_t start, + int count, time_t* array); + + +#endif diff --git a/libkcal/libical/src/libical/icalrestriction.c.in b/libkcal/libical/src/libical/icalrestriction.c.in new file mode 100644 index 000000000..b75e562cf --- /dev/null +++ b/libkcal/libical/src/libical/icalrestriction.c.in @@ -0,0 +1,503 @@ +/* -*- Mode: C -*- */ +/* ====================================================================== + File: icalrestriction.c + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + ======================================================================*/ +/*#line 7 "icalrestriction.c.in"*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalrestriction.h" +#include "icalenums.h" +#include "icalerror.h" + +#include <assert.h> +#include <stdio.h> /* For snprintf */ + +#define TMP_BUF_SIZE 1024 + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + + +/* Define the structs for the restrictions. these data are filled out +in machine generated code below */ + +struct icalrestriction_property_record; + +typedef const char* (*restriction_func)(struct icalrestriction_property_record* rec,icalcomponent* comp,icalproperty* prop); + + +typedef struct icalrestriction_property_record { + icalproperty_method method; + icalcomponent_kind component; + icalproperty_kind property; + icalrestriction_kind restriction; + restriction_func function; +} icalrestriction_property_record; + + +typedef struct icalrestriction_component_record { + icalproperty_method method; + icalcomponent_kind component; + icalcomponent_kind subcomponent; + icalrestriction_kind restriction; + restriction_func function; +} icalrestriction_component_record; + +icalrestriction_property_record* +icalrestriction_get_property_restriction(icalproperty_method method, + icalcomponent_kind component, + icalproperty_kind property); +icalrestriction_component_record* +icalrestriction_get_component_restriction(icalproperty_method method, + icalcomponent_kind component, + icalcomponent_kind subcomponent); + +icalrestriction_component_record icalrestriction_component_records[]; +icalrestriction_property_record icalrestriction_property_records[]; + +icalrestriction_property_record null_prop_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_UNKNOWN,0}; +icalrestriction_component_record null_comp_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_UNKNOWN,0}; + + +/** Each row gives the result of comparing a restriction against a count. + The columns in each row represent 0,1,2+. '-1' indicates + 'invalid, 'don't care' or 'needs more analysis' So, for + ICAL_RESTRICTION_ONE, if there is 1 of a property with that + restriction, it passes, but if there are 0 or 2+, it fails. */ + +char compare_map[ICAL_RESTRICTION_UNKNOWN+1][3] = { + { 1, 1, 1},/*ICAL_RESTRICTION_NONE*/ + { 1, 0, 0},/*ICAL_RESTRICTION_ZERO*/ + { 0, 1, 0},/*ICAL_RESTRICTION_ONE*/ + { 1, 1, 1},/*ICAL_RESTRICTION_ZEROPLUS*/ + { 0, 1, 1},/*ICAL_RESTRICTION_ONEPLUS*/ + { 1, 1, 0},/*ICAL_RESTRICTION_ZEROORONE*/ + { 1, 1, 0},/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ + { 1, 1, 0},/*ICAL_RESTRICTION_ONEMUTUAL*/ + { 1, 1, 1} /*ICAL_RESTRICTION_UNKNOWN*/ +}; + +char restr_string_map[ICAL_RESTRICTION_UNKNOWN+1][60] = { + "unknown number",/*ICAL_RESTRICTION_NONE*/ + "0",/*ICAL_RESTRICTION_ZERO*/ + "1",/*ICAL_RESTRICTION_ONE*/ + "zero or more",/*ICAL_RESTRICTION_ZEROPLUS*/ + "one or more" ,/*ICAL_RESTRICTION_ONEPLUS*/ + "zero or one",/*ICAL_RESTRICTION_ZEROORONE*/ + "zero or one, exclusive with another property",/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ + "zero or one, mutual with another property",/*ICAL_RESTRICTION_ONEMUTUAL*/ + "unknown number" /*ICAL_RESTRICTION_UNKNOWN*/ +}; + + +int +icalrestriction_compare(icalrestriction_kind restr, int count){ + + /* restr is an unsigned int, ICAL_RESTRICTION_NONE == 0, so the check will always return false */ + if ( /*restr < ICAL_RESTRICTION_NONE ||*/ restr > ICAL_RESTRICTION_UNKNOWN + || count < 0){ + return -1; + } + + if (count > 2) { + count = 2; + } + + return compare_map[restr][count]; + +} + +/* Special case routines */ + +const char* icalrestriction_may_be_draft_final_canceled( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + icalproperty_status stat = icalproperty_get_status(prop); + + (void)rec; + (void)comp; + + if( !( stat == ICAL_STATUS_DRAFT || + stat == ICAL_STATUS_FINAL || + stat == ICAL_STATUS_CANCELLED )){ + + return "Failed iTIP restrictions for STATUS property. Value must be one of DRAFT, FINAL, or CANCELED"; + + } + + return 0; +} + +const char* icalrestriction_may_be_comp_need_process( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + icalproperty_status stat = icalproperty_get_status(prop); + + (void)rec; + (void)comp; + + if( !( stat == ICAL_STATUS_COMPLETED || + stat == ICAL_STATUS_NEEDSACTION || + stat == ICAL_STATUS_INPROCESS )){ + + return "Failed iTIP restrictions for STATUS property. Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS"; + + } + + return 0; +} +const char* icalrestriction_may_be_tent_conf(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + icalproperty_status stat = icalproperty_get_status(prop); + + (void)rec; + (void)comp; + + if( !( stat == ICAL_STATUS_TENTATIVE || + stat == ICAL_STATUS_CONFIRMED )){ + + return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE or CONFIRMED"; + + } + + return 0; +} +const char* icalrestriction_may_be_tent_conf_cancel( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + icalproperty_status stat = icalproperty_get_status(prop); + + (void)rec; + (void)comp; + + if( !( stat == ICAL_STATUS_TENTATIVE || + stat == ICAL_STATUS_CONFIRMED || + stat == ICAL_STATUS_CANCELLED )){ + + return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE, CONFIRMED or CANCELED"; + + } + + return 0; +} + +const char* icalrestriction_must_be_cancel_if_present( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + /* This routine will not be called if prop == 0 */ + icalproperty_status stat = icalproperty_get_status(prop); + + (void)rec; + (void)comp; + + if( stat != ICAL_STATUS_CANCELLED) + { + return "Failed iTIP restrictions for STATUS property. Value must be CANCELLED"; + + } + + + return 0; +} + +const char* icalrestriction_must_be_canceled_no_attendee( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + (void)rec; + (void)comp; + (void)prop; + + /* Hack. see rfc2446, 3.2.5 CANCEL for porperty STATUS. I don't + understand the note */ + + return 0; +} +const char* icalrestriction_must_be_recurring(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + /* Hack */ + (void)rec; + (void)comp; + (void)prop; + return 0; +} +const char* icalrestriction_must_have_duration(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + + (void)rec; + (void)prop; + + if( !icalcomponent_get_first_property(comp,ICAL_DURATION_PROPERTY)){ + + return "Failed iTIP restrictions for DURATION property. This component must have a DURATION property"; + + } + + return 0; +} +const char* icalrestriction_must_have_repeat(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + (void)rec; + (void)prop; + if( !icalcomponent_get_first_property(comp,ICAL_REPEAT_PROPERTY)){ + + return "Failed iTIP restrictions for REPEAT property. This component must have a REPEAT property"; + + } + + return 0; +} +const char* icalrestriction_must_if_tz_ref(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + + /* Hack */ + (void)rec; + (void)comp; + (void)prop; + return 0; +} +const char* icalrestriction_no_dtend(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + + (void)rec; + (void)prop; + if( !icalcomponent_get_first_property(comp,ICAL_DTEND_PROPERTY)){ + + return "Failed iTIP restrictions for DTEND property. The component must not have both DURATION and DTEND"; + + } + + return 0; +} +const char* icalrestriction_no_duration(icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop){ + (void)rec; + (void)comp; + (void)prop; + + /* _no_dtend takes care of this one */ + return 0; +} +const char* icalrestriction_must_be_email( + icalrestriction_property_record *rec, + icalcomponent* comp, + icalproperty* prop) +{ + icalproperty_status stat = icalproperty_get_action(prop); + + (void)rec; + (void)comp; + + if( !( stat == ICAL_ACTION_EMAIL)){ + + return "Failed iTIP restrictions for ACTION property. Value must be EMAIL."; + + } + + return 0; +} + +int icalrestriction_check_component(icalproperty_method method, + icalcomponent* comp) +{ + icalproperty_kind kind; + icalcomponent_kind comp_kind; + icalrestriction_kind restr; + icalrestriction_property_record *prop_record; + const char* funcr = 0; + icalproperty *prop; + + int count; + int compare; + int valid = 1; + + comp_kind = icalcomponent_isa(comp); + + /* Check all of the properties in this component */ + + for(kind = ICAL_ANY_PROPERTY+1; kind != ICAL_NO_PROPERTY; kind++){ + count = icalcomponent_count_properties(comp, kind); + + prop_record = icalrestriction_get_property_restriction(method, + comp_kind, + kind); + + restr = prop_record->restriction; + + if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE || + restr == ICAL_RESTRICTION_ONEMUTUAL) { + + /* First treat is as a 0/1 restriction */ + restr = ICAL_RESTRICTION_ZEROORONE; + compare = icalrestriction_compare(restr,count); + + } else { + + compare = icalrestriction_compare(restr,count); + } + + assert(compare != -1); + + if (compare == 0){ + char temp[TMP_BUF_SIZE]; + + snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d", + icalenum_property_kind_to_string(kind), + restr_string_map[restr], count); + + icalcomponent_add_property + (comp, + icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP), + 0)); + } + + + prop = icalcomponent_get_first_property(comp, kind); + + if (prop != 0 && prop_record->function !=0 ){ + funcr = prop_record->function(prop_record,comp,prop); + } + + if(funcr !=0){ + icalcomponent_add_property + (comp, + icalproperty_vanew_xlicerror( + funcr, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_INVALIDITIP), + 0)); + + compare = 0; + } + + valid = valid && compare; + } + + + + return valid; + + +} + +int icalrestriction_check(icalcomponent* outer_comp) +{ + icalcomponent_kind comp_kind; + icalproperty_method method; + icalcomponent* inner_comp; + icalproperty *method_prop; + int valid; + + icalerror_check_arg_rz( (outer_comp!=0), "outer comp"); + + + /* Get the Method value from the outer component */ + + comp_kind = icalcomponent_isa(outer_comp); + + if (comp_kind != ICAL_VCALENDAR_COMPONENT){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return 0; + } + + method_prop = icalcomponent_get_first_property(outer_comp, + ICAL_METHOD_PROPERTY); + + if (method_prop == 0){ + method = ICAL_METHOD_NONE; + } else { + method = icalproperty_get_method(method_prop); + } + + + /* Check the VCALENDAR wrapper */ + valid = icalrestriction_check_component(ICAL_METHOD_NONE,outer_comp); + + + /* Now check the inner components */ + + for(inner_comp= icalcomponent_get_first_component(outer_comp, + ICAL_ANY_COMPONENT); + inner_comp != 0; + inner_comp= icalcomponent_get_next_component(outer_comp, + ICAL_ANY_COMPONENT)){ + + valid = valid && icalrestriction_check_component(method,inner_comp); + + } + + + return valid; + +} + +icalrestriction_property_record* +icalrestriction_get_property_restriction(icalproperty_method method, + icalcomponent_kind component, + icalproperty_kind property) +{ + int i; + + for(i = 0; + icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE; + i++){ + + if (method == icalrestriction_property_records[i].method && + component == icalrestriction_property_records[i].component && + property == icalrestriction_property_records[i].property ){ + return &icalrestriction_property_records[i]; + } + } + + return &null_prop_record; +} + + +icalrestriction_component_record* +icalrestriction_get_component_restriction(icalproperty_method method, + icalcomponent_kind component, + icalcomponent_kind subcomponent) +{ + + int i; + + for(i = 0; + icalrestriction_component_records[i].restriction != ICAL_RESTRICTION_NONE; + i++){ + + if (method == icalrestriction_component_records[i].method && + component == icalrestriction_component_records[i].component && + subcomponent == icalrestriction_component_records[i].subcomponent ){ + return &icalrestriction_component_records[i]; + } + } + + return &null_comp_record; +} + diff --git a/libkcal/libical/src/libical/icalrestriction.h b/libkcal/libical/src/libical/icalrestriction.h new file mode 100644 index 000000000..b5281215a --- /dev/null +++ b/libkcal/libical/src/libical/icalrestriction.h @@ -0,0 +1,63 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalrestriction.h + CREATOR: eric 24 April 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalrestriction.h + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + +======================================================================*/ + +#include "icalproperty.h" +#include "icalcomponent.h" + +#ifndef ICALRESTRICTION_H +#define ICALRESTRICTION_H + +/* These must stay in this order for icalrestriction_compare to work */ +typedef enum icalrestriction_kind { + ICAL_RESTRICTION_NONE=0, /* 0 */ + ICAL_RESTRICTION_ZERO, /* 1 */ + ICAL_RESTRICTION_ONE, /* 2 */ + ICAL_RESTRICTION_ZEROPLUS, /* 3 */ + ICAL_RESTRICTION_ONEPLUS, /* 4 */ + ICAL_RESTRICTION_ZEROORONE, /* 5 */ + ICAL_RESTRICTION_ONEEXCLUSIVE, /* 6 */ + ICAL_RESTRICTION_ONEMUTUAL, /* 7 */ + ICAL_RESTRICTION_UNKNOWN /* 8 */ +} icalrestriction_kind; + +int +icalrestriction_compare(icalrestriction_kind restr, int count); + + +int +icalrestriction_is_parameter_allowed(icalproperty_kind property, + icalparameter_kind parameter); + +int icalrestriction_check(icalcomponent* comp); + + +#endif /* !ICALRESTRICTION_H */ + + + diff --git a/libkcal/libical/src/libical/icaltime.c b/libkcal/libical/src/libical/icaltime.c new file mode 100644 index 000000000..514322a36 --- /dev/null +++ b/libkcal/libical/src/libical/icaltime.c @@ -0,0 +1,1014 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icaltime.c + CREATOR: eric 02 June 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icaltime.h" +#include <assert.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include "astime.h" /* Julian data handling routines */ + +#include "icalerror.h" +#include "icalmemory.h" + +#include "icaltimezone.h" +#include "icalvalue.h" + +#ifdef WIN32 +#include <Windows.h> + +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +/* + * Function to convert a struct tm time specification + * to an ANSI time_t using the specified time zone. + * This is different from the standard mktime() function + * in that we don't want the automatic adjustments for + * local daylight savings time applied to the result. + * This function expects well-formed input. + */ +static time_t make_time(struct tm *tm, int tzm) +{ + time_t tim; + + static int days[] = { -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 }; + + /* check that year specification within range */ + + if (tm->tm_year < 70 || tm->tm_year > 138) + return((time_t) -1); + + /* check that month specification within range */ + + if (tm->tm_mon < 0 || tm->tm_mon > 11) + return((time_t) -1); + + /* check for upper bound of Jan 17, 2038 (to avoid possibility of + 32-bit arithmetic overflow) */ + + if (tm->tm_year == 138) { + if (tm->tm_mon > 0) + return((time_t) -1); + else if (tm->tm_mday > 17) + return((time_t) -1); + } + + /* + * calculate elapsed days since start of the epoch (midnight Jan + * 1st, 1970 UTC) 17 = number of leap years between 1900 and 1970 + * (number of leap days to subtract) + */ + + tim = (tm->tm_year - 70) * 365 + ((tm->tm_year - 1) / 4) - 17; + + /* add number of days elapsed in the current year */ + + tim += days[tm->tm_mon]; + + /* check and adjust for leap years (the leap year check only valid + during the 32-bit era */ + + if ((tm->tm_year & 3) == 0 && tm->tm_mon > 1) + tim += 1; + + /* elapsed days to current date */ + + tim += tm->tm_mday; + + + /* calculate elapsed hours since start of the epoch */ + + tim = tim * 24 + tm->tm_hour; + + /* calculate elapsed minutes since start of the epoch */ + + tim = tim * 60 + tm->tm_min; + + /* adjust per time zone specification */ + + tim -= tzm; + + /* calculate elapsed seconds since start of the epoch */ + + tim = tim * 60 + tm->tm_sec; + + /* return number of seconds since start of the epoch */ + + return(tim); +} + +/** @brief Constructor (deprecated). + * + * Convert seconds past UNIX epoch to a timetype. + * + * @deprecated This constructor is deprecated and shouldn't be used in + * new software. Use icaltime_from_timet_with_zone(time_t, int, + * icaltimezone *) instead. In the meantime, calls to this method + * return a floating time, which can always be converted to a local + * time with an appropriate call to icaltime_convert_to_zone(). + */ + +struct icaltimetype +icaltime_from_timet(const time_t tm, const int is_date) +{ +#ifndef NO_WARN_DEPRECATED + icalerror_warn("icaltime_from_timet() is DEPRECATED, use icaltime_from_timet_with_zone() instead"); +#endif + + return icaltime_from_timet_with_zone(tm, is_date, 0); +} + + +/** @brief Constructor. + * + * @param tm The time + * @param is_date Boolean: 1 means we should treat tm as a DATE + * @param zone The timezone tm is in, NULL means to treat tm as a + * floating time + * + * Return a new icaltime instance, initialized to the given time + * expressed as seconds past UNIX epoch, optionally using the given + * timezone. + * + * If the caller specifies the is_date param as TRUE, the returned + * object is of DATE type, otherwise the input is meant to be of + * DATE-TIME type. + * If the zone is not specified (NULL zone param) the time is taken + * to be floating, that is, valid in any timezone. Note that, in + * addition to the uses specified in [RFC2445], this can be used + * when doing simple math on couples of times. + * If the zone is specified (UTC or otherwise), it's stored in the + * object and it's used as the native timezone for this object. + * This means that the caller can convert this time to a different + * target timezone with no need to store the source timezone. + * + */ +struct icaltimetype +icaltime_from_timet_with_zone(const time_t tm, const int is_date, + icaltimezone *zone) +{ + struct icaltimetype tt = icaltime_null_time(); + struct tm t; + icaltimezone *utc_zone; + + /* Convert the time_t to a struct tm. We can trust gmtime for this. */ +#ifdef HAVE_GMTIME_R + gmtime_r(&tm, &t); +#else + { + struct tm *t_ptr = gmtime(&tm); + t = *t_ptr; + } +#endif + + tt.year = t.tm_year + 1900; + tt.month = t.tm_mon + 1; + tt.day = t.tm_mday; + + if (is_date) { + tt.is_date = 1; + return tt; + } + + tt.hour = t.tm_hour; + tt.minute = t.tm_min; + tt.second = t.tm_sec; + + /* If it's a floating time, we don't do any conversion. */ + if (zone == NULL) { + return tt; + } + + utc_zone = icaltimezone_get_utc_timezone (); + tt.is_utc = (zone == utc_zone) ? 1 : 0; + tt.zone = zone; + + return tt; +} + +/** @brief Convenience constructor. + * + * Returns the current time in the given timezone, as an icaltimetype. + */ +struct icaltimetype icaltime_current_time_with_zone(icaltimezone *zone) +{ + return icaltime_from_timet_with_zone (time (NULL), 0, zone); +} + +/** @brief Convenience constructor. + * + * Returns the current day as an icaltimetype, with is_date set. + */ +struct icaltimetype icaltime_today(void) +{ + return icaltime_from_timet_with_zone (time (NULL), 1, NULL); +} + +/** @brief Return the time as seconds past the UNIX epoch + */ +time_t icaltime_as_timet(const struct icaltimetype tt) +{ + struct tm stm; + time_t t; + + /* If the time is the special null time, return 0. */ + if (icaltime_is_null_time(tt)) { + return 0; + } + + /* Copy the icaltimetype to a struct tm. */ + memset (&stm, 0, sizeof (struct tm)); + + stm.tm_sec = tt.second; + stm.tm_min = tt.minute; + stm.tm_hour = tt.hour; + stm.tm_mday = tt.day; + stm.tm_mon = tt.month-1; + stm.tm_year = tt.year-1900; + stm.tm_isdst = -1; + + t = make_time(&stm, 0); + + return t; + +} + +/** @brief Return the time as seconds past the UNIX epoch, using the + * given timezone. + * + * This convenience method combines a call to icaltime_convert() with + * a call to icaltime_as_timet(). + * If the input timezone is null, no conversion is done; that is, the + * time is simply returned as time_t in its native timezone. + */ +time_t icaltime_as_timet_with_zone(const struct icaltimetype _tt, + icaltimezone *zone) +{ + struct icaltimetype tt = _tt; + struct tm stm; + time_t t; + + /* If the time is the special null time, return 0. */ + if (icaltime_is_null_time(tt)) { + return 0; + } + + if (zone != NULL) { + tt = icaltime_convert_to_zone(_tt, zone); + } + + /* Copy the icaltimetype to a struct tm. */ + memset (&stm, 0, sizeof (struct tm)); + + stm.tm_sec = tt.second; + stm.tm_min = tt.minute; + stm.tm_hour = tt.hour; + stm.tm_mday = tt.day; + stm.tm_mon = tt.month-1; + stm.tm_year = tt.year-1900; + stm.tm_isdst = -1; + + t = make_time(&stm, 0); + + return t; +} + +/** + * Return a string represention of the time, in RFC2445 format. The + * string is owned by libical + */ +const char* icaltime_as_ical_string(const struct icaltimetype tt) +{ + size_t size = 17; + char* buf = icalmemory_new_buffer(size); + + if(tt.is_date){ + snprintf(buf, size,"%04d%02d%02d",tt.year,tt.month,tt.day); + } else { + const char* fmt; + if(tt.is_utc){ + fmt = "%04d%02d%02dT%02d%02d%02dZ"; + } else { + fmt = "%04d%02d%02dT%02d%02d%02d"; + } + snprintf(buf, size,fmt,tt.year,tt.month,tt.day, + tt.hour,tt.minute,tt.second); + } + + icalmemory_add_tmp_buffer(buf); + + return buf; + +} + +/** + * Reset all of the time components to be in their normal ranges. For + * instance, given a time with minutes=70, the minutes will be reduces + * to 10, and the hour incremented. This allows the caller to do + * arithmetic on times without worrying about overflow or + * underflow. + * + * Implementation note: we call icaltime_adjust() with no adjustment. + */ +struct icaltimetype icaltime_normalize(const struct icaltimetype tt) +{ + struct icaltimetype ret = tt; + icaltime_adjust(&ret, 0, 0, 0, 0); + return ret; +} + + + +/** @brief Contructor. + * + * Create a time from an ISO format string. + * + * @todo If the given string specifies a DATE-TIME not in UTC, there + * is no way to know if this is a floating time or really refers to a + * timezone. We should probably add a new constructor: + * icaltime_from_string_with_zone() + */ +struct icaltimetype icaltime_from_string(const char* str) +{ + struct icaltimetype tt = icaltime_null_time(); + int size; + + icalerror_check_arg_re(str!=0,"str",icaltime_null_time()); + + size = strlen(str); + + if(size == 15) { /* floating time */ + tt.is_utc = 0; + tt.is_date = 0; + } else if (size == 16) { /* UTC time, ends in 'Z'*/ + if(str[15] != 'Z') + goto errorlabel; + + tt.is_utc = 1; + tt.zone = icaltimezone_get_utc_timezone(); + tt.is_date = 0; + } else if (size == 8) { /* A DATE */ + tt.is_utc = 1; + tt.is_date = 1; + } else { /* error */ + goto errorlabel; + } + + if(tt.is_date == 1){ + if (sscanf(str,"%04d%02d%02d",&tt.year,&tt.month,&tt.day) < 3) + goto errorlabel; + } else { + char tsep; + if (sscanf(str,"%04d%02d%02d%c%02d%02d%02d",&tt.year,&tt.month,&tt.day, + &tsep,&tt.hour,&tt.minute,&tt.second) < 7) + goto errorlabel; + + if(tsep != 'T') + goto errorlabel; + } + + return tt; + +errorlabel: + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return icaltime_null_time(); +} + + +/* Returns whether the specified year is a leap year. Year is the normal year, + e.g. 2001. */ +int +icaltime_is_leap_year (const int year) +{ + + if (year <= 1752) + return (year % 4 == 0); + else + return ( (year % 4==0) && (year % 100 !=0 )) || (year % 400 == 0); +} + +static int _days_in_month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; + +int icaltime_days_in_month(const int month, const int year) +{ + + int days = _days_in_month[month]; + + assert(month > 0); + assert(month <= 12); + + if( month == 2){ + days += icaltime_is_leap_year(year); + } + + return days; +} + +/* 1-> Sunday, 7->Saturday */ +int icaltime_day_of_week(const struct icaltimetype t){ + UTinstant jt; + + memset(&jt,0,sizeof(UTinstant)); + + jt.year = t.year; + jt.month = t.month; + jt.day = t.day; + jt.i_hour = 0; + jt.i_minute = 0; + jt.i_second = 0; + + juldat(&jt); + + return jt.weekday + 1; +} + +/** Day of the year that the first day of the week (Sunday) is on. + * + * @todo Doesn't take into account different week start days. + */ +int icaltime_start_doy_of_week(const struct icaltimetype t){ + UTinstant jt; + + memset(&jt,0,sizeof(UTinstant)); + + jt.year = t.year; + jt.month = t.month; + jt.day = t.day; + jt.i_hour = 0; + jt.i_minute = 0; + jt.i_second = 0; + + juldat(&jt); + caldat(&jt); + + return jt.day_of_year - jt.weekday; +} + +/** + * @todo Doesn't take into account the start day of the + * week. strftime assumes that weeks start on Monday. + */ +int icaltime_week_number(const struct icaltimetype ictt) +{ + UTinstant jt; + + memset(&jt,0,sizeof(UTinstant)); + + jt.year = ictt.year; + jt.month = ictt.month; + jt.day = ictt.day; + jt.i_hour = 0; + jt.i_minute = 0; + jt.i_second = 0; + + juldat(&jt); + caldat(&jt); + + return (jt.day_of_year - jt.weekday) / 7; +} + +/* The first array is for non-leap years, the second for leap years*/ +static const int days_in_year[2][13] = +{ /* jan feb mar apr may jun jul aug sep oct nov dec */ + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } +}; + +/** + * Returns the day of the year, counting from 1 (Jan 1st). + */ +int icaltime_day_of_year(const struct icaltimetype t){ + int is_leap = icaltime_is_leap_year (t.year); + + return days_in_year[is_leap][t.month - 1] + t.day; +} + +/** @brief Contructor. + * + * Create a new time, given a day of year and a year. + */ +/* Jan 1 is day #1, not 0 */ +struct icaltimetype icaltime_from_day_of_year(const int _doy, const int _year) +{ + struct icaltimetype tt = icaltime_null_date(); + int is_leap; + int month; + int doy = _doy; + int year = _year; + + is_leap = icaltime_is_leap_year(year); + + /* Zero and neg numbers represent days of the previous year */ + if(doy <1){ + year--; + is_leap = icaltime_is_leap_year(year); + doy += days_in_year[is_leap][12]; + } else if(doy > days_in_year[is_leap][12]){ + /* Move on to the next year*/ + is_leap = icaltime_is_leap_year(year); + doy -= days_in_year[is_leap][12]; + year++; + } + + tt.year = year; + + for (month = 11; month >= 0; month--) { + if (doy > days_in_year[is_leap][month]) { + tt.month = month + 1; + tt.day = doy - days_in_year[is_leap][month]; + break; + } + } + + return tt; +} + +/** @brief Constructor. + * + * Return a null time, which indicates no time has been set. + * This time represents the beginning of the epoch. + */ +struct icaltimetype icaltime_null_time(void) +{ + struct icaltimetype t; + memset(&t,0,sizeof(struct icaltimetype)); + + return t; +} + +/** @brief Constructor. + * + * Return a null date, which indicates no time has been set. + */ +struct icaltimetype icaltime_null_date(void) +{ + struct icaltimetype t; + memset(&t,0,sizeof(struct icaltimetype)); + + t.is_date = 1; + + /* + * Init to -1 to match what icalyacc.y used to do. + * Does anything depend on this? + */ + t.hour = -1; + t.minute = -1; + t.second = -1; + + return t; +} + + +/** + * Returns false if the time is clearly invalid, but is not null. This + * is usually the result of creating a new time type buy not clearing + * it, or setting one of the flags to an illegal value. + */ +int icaltime_is_valid_time(const struct icaltimetype t){ + if(t.is_utc > 1 || t.is_utc < 0 || + t.year < 0 || t.year > 3000 || + t.is_date > 1 || t.is_date < 0){ + return 0; + } else { + return 1; + } + +} + +/** @brief Returns true if time is a DATE + */ +int icaltime_is_date(const struct icaltimetype t) { + + return t.is_date; +} + +/** @brief Returns true if time is relative to UTC zone + * + * @todo We should only check the zone + */ +int icaltime_is_utc(const struct icaltimetype t) { + + return t.is_utc; +} + +/** + * Return true if the time is null. + */ +int icaltime_is_null_time(const struct icaltimetype t) +{ + if (t.second +t.minute+t.hour+t.day+t.month+t.year == 0){ + return 1; + } + + return 0; + +} + +/** + * Return -1, 0, or 1 to indicate that a<b, a==b, or a>b. + * This calls icaltime_compare function after converting them to the utc + * timezone. + */ + +int icaltime_compare(const struct icaltimetype a_in, const struct icaltimetype b_in) +{ + int retval = 0; + struct icaltimetype a, b; + + a = icaltime_convert_to_zone(a_in, icaltimezone_get_utc_timezone()); + b = icaltime_convert_to_zone(b_in, icaltimezone_get_utc_timezone()); + + if (a.year > b.year) + retval = 1; + else if (a.year < b.year) + retval = -1; + + else if (a.month > b.month) + retval = 1; + else if (a.month < b.month) + retval = -1; + + else if (a.day > b.day) + retval = 1; + else if (a.day < b.day) + retval = -1; + + /* if both are dates, we are done */ + if (a.is_date && b.is_date) + return retval; + + /* else, if we already found a difference, we are done */ + else if (retval != 0) + return retval; + + /* else, if only one is a date (and we already know the date part is equal), + then the other is greater */ + else if (b.is_date) + retval = 1; + else if (a.is_date) + retval = -1; + + else if (a.hour > b.hour) + retval = 1; + else if (a.hour < b.hour) + retval = -1; + + else if (a.minute > b.minute) + retval = 1; + else if (a.minute < b.minute) + retval = -1; + + else if (a.second > b.second) + retval = 1; + else if (a.second < b.second) + retval = -1; + + return retval; +} + +/** + * like icaltime_compare, but only use the date parts. + */ + +int +icaltime_compare_date_only(const struct icaltimetype a_in, const struct icaltimetype b_in) +{ + int retval; + struct icaltimetype a, b; + + a = icaltime_convert_to_zone(a_in, icaltimezone_get_utc_timezone()); + b = icaltime_convert_to_zone(b_in, icaltimezone_get_utc_timezone()); + + if (a.year > b.year) + retval = 1; + else if (a.year < b.year) + retval = -1; + + else if (a.month > b.month) + retval = 1; + else if (a.month < b.month) + retval = -1; + + else if (a.day > b.day) + retval = 1; + else if (a.day < b.day) + retval = -1; + + else + retval = 0; + + return retval; +} + +/* These are defined in icalduration.c: +struct icaltimetype icaltime_add(struct icaltimetype t, + struct icaldurationtype d) +struct icaldurationtype icaltime_subtract(struct icaltimetype t1, + struct icaltimetype t2) +*/ + + + +/** @brief Internal, shouldn't be part of the public API + * + * Adds (or subtracts) a time from a icaltimetype. + * NOTE: This function is exactly the same as icaltimezone_adjust_change() + * except for the type of the first parameter. + */ +void +icaltime_adjust(struct icaltimetype *tt, const int days, const int hours, + const int minutes, const int seconds) { + + int second, minute, hour, day; + int minutes_overflow, hours_overflow, days_overflow, years_overflow; + int days_in_month; + + /* Add on the seconds. */ + second = tt->second + seconds; + tt->second = second % 60; + minutes_overflow = second / 60; + if (tt->second < 0) { + tt->second += 60; + minutes_overflow--; + } + + /* Add on the minutes. */ + minute = tt->minute + minutes + minutes_overflow; + tt->minute = minute % 60; + hours_overflow = minute / 60; + if (tt->minute < 0) { + tt->minute += 60; + hours_overflow--; + } + + /* Add on the hours. */ + hour = tt->hour + hours + hours_overflow; + tt->hour = hour % 24; + days_overflow = hour / 24; + if (tt->hour < 0) { + tt->hour += 24; + days_overflow--; + } + + /* Normalize the month. We do this before handling the day since we may + need to know what month it is to get the number of days in it. + Note that months are 1 to 12, so we have to be a bit careful. */ + if (tt->month >= 13) { + years_overflow = (tt->month - 1) / 12; + tt->year += years_overflow; + tt->month -= years_overflow * 12; + } else if (tt->month <= 0) { + /* 0 to -11 is -1 year out, -12 to -23 is -2 years. */ + years_overflow = (tt->month / 12) - 1; + tt->year += years_overflow; + tt->month -= years_overflow * 12; + } + + /* Add on the days. */ + day = tt->day + days + days_overflow; + if (day > 0) { + for (;;) { + days_in_month = icaltime_days_in_month (tt->month, tt->year); + if (day <= days_in_month) + break; + + tt->month++; + if (tt->month >= 13) { + tt->year++; + tt->month = 1; + } + + day -= days_in_month; + } + } else { + while (day <= 0) { + if (tt->month == 1) { + tt->year--; + tt->month = 12; + } else { + tt->month--; + } + + day += icaltime_days_in_month (tt->month, tt->year); + } + } + tt->day = day; +} + +/** @brief Convert time to a given timezone + * + * Convert a time from its native timezone to a given timezone. + * + * If tt is a date, the returned time is an exact + * copy of the input. If it's a floating time, the returned object + * represents the same time translated to the given timezone. + * Otherwise the time will be converted to the new + * time zone, and its native timezone set to the right timezone. + */ +struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, + icaltimezone *zone) { + + struct icaltimetype ret = tt; + + /* If it's a date do nothing */ + if (tt.is_date) { + return ret; + } + + if (tt.zone == zone) { + return ret; + } + + /* If it's a floating time we don't want to adjust the time */ + if (tt.zone != NULL) { + icaltimezone_convert_time(&ret, tt.zone, zone); + } + + ret.zone = zone; + if (zone == icaltimezone_get_utc_timezone()) { + ret.is_utc = 1; + } else { + ret.is_utc = 0; + } + + return ret; +} + +icaltimezone * +icaltime_get_timezone(const struct icaltimetype t) { + + return t.zone; +} + +const char * +icaltime_get_tzid(const struct icaltimetype t) { + + if (t.zone != NULL) { + return icaltimezone_get_tzid(t.zone); + } else { + return NULL; + } +} + +/** @brief Set the timezone + * + * Force the icaltime to be interpreted relative to another timezone. + * If you need to do timezone conversion, applying offset adjustments, + * then you should use icaltime_convert_to_timezone instead. + */ +struct icaltimetype +icaltime_set_timezone(struct icaltimetype *t, icaltimezone *zone) { + + /* If it's a date do nothing */ + if (t->is_date) { + return *t; + } + + if (t->zone == zone) { + return *t; + } + + t->zone = zone; + if (zone == icaltimezone_get_utc_timezone()) { + t->is_utc = 1; + } else { + t->is_utc = 0; + } + + return *t; +} + + +/** + * @brief builds an icaltimespan given a start time, end time and busy value. + * + * @param dtstart The beginning time of the span, can be a date-time + * or just a date. + * @param dtend The end time of the span. + * @param is_busy A boolean value, 0/1. + * @return A span using the supplied values. + * + * returned span contains times specified in UTC. + */ + +icaltime_span icaltime_span_new(struct icaltimetype dtstart, + struct icaltimetype dtend, + int is_busy) +{ + icaltime_span span; + + span.is_busy = is_busy; + + span.start = icaltime_as_timet_with_zone(dtstart, + icaltimezone_get_utc_timezone()); + + if (icaltime_is_null_time(dtend)) { + if (!icaltime_is_date(dtstart)) { + /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION + it takes no time */ + span.end = span.start; + return span; + } else { + dtend = dtstart; + } + } + + span.end = icaltime_as_timet_with_zone(dtend, icaltimezone_get_utc_timezone()); + + if (icaltime_is_date(dtstart)) { + /* no time specified, go until the end of the day..*/ + span.end += 60*60*24 - 1; + } + return span; +} + + +/** @brief Returns true if the two spans overlap + * + * @param s1 1st span to test + * @param s2 2nd span to test + * @return boolean value + * + * The result is calculated by testing if the start time of s1 is contained + * by the s2 span, or if the end time of s1 is contained by the s2 span. + * + * Also returns true if the spans are equal. + * + * Note, this will return false if the spans are adjacent. + */ + +int icaltime_span_overlaps(icaltime_span *s1, + icaltime_span *s2) +{ + /* s1->start in s2 */ + if (s1->start > s2->start && s1->start < s2->end) + return 1; + + /* s1->end in s2 */ + if (s1->end > s2->start && s1->end < s2->end) + return 1; + + /* s2->start in s1 */ + if (s2->start > s1->start && s2->start < s1->end) + return 1; + + /* s2->end in s1 */ + if (s2->end > s1->start && s2->end < s1->end) + return 1; + + if (s1->start == s2->start && s1->end == s2->end) + return 1; + + return 0; +} + +/** @brief Returns true if the span is totally within the containing + * span + * + * @param s The span to test for. + * @param container The span to test against. + * @return boolean value. + * + */ + +int icaltime_span_contains(icaltime_span *s, + icaltime_span *container) +{ + + if ((s->start >= container->start && s->start < container->end) && + (s->end <= container->end && s->end > container->start)) + return 1; + + return 0; +} diff --git a/libkcal/libical/src/libical/icaltime.h b/libkcal/libical/src/libical/icaltime.h new file mode 100644 index 000000000..5871529f2 --- /dev/null +++ b/libkcal/libical/src/libical/icaltime.h @@ -0,0 +1,271 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icaltime.h + CREATOR: eric 02 June 2000 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +/** @file icaltime.h + * @brief struct icaltimetype is a pseudo-object that abstracts time + * handling. + * + * It can represent either a DATE or a DATE-TIME (floating, UTC or in a + * given timezone), and it keeps track internally of its native timezone. + * + * The typical usage is to call the correct constructor specifying the + * desired timezone. If this is not known until a later time, the + * correct behavior is to specify a NULL timezone and call + * icaltime_convert_to_zone() at a later time. + * + * There are several ways to create a new icaltimetype: + * + * - icaltime_null_time() + * - icaltime_null_date() + * - icaltime_current_time_with_zone() + * - icaltime_today() + * - icaltime_from_timet_with_zone(time_t tm, int is_date, + * icaltimezone *zone) + * - icaltime_from_string_with_zone(const char* str, icaltimezone *zone) + * - icaltime_from_day_of_year(int doy, int year) + * - icaltime_from_week_number(int week_number, int year) + * + * italtimetype objects can be converted to different formats: + * + * - icaltime_as_timet(struct icaltimetype tt) + * - icaltime_as_timet_with_zone(struct icaltimetype tt, + * icaltimezone *zone) + * - icaltime_as_ical_string(struct icaltimetype tt) + * + * Accessor methods include: + * + * - icaltime_get_timezone(struct icaltimetype t) + * - icaltime_get_tzid(struct icaltimetype t) + * - icaltime_set_timezone(struct icaltimetype t, icaltimezone *zone) + * - icaltime_day_of_year(struct icaltimetype t) + * - icaltime_day_of_week(struct icaltimetype t) + * - icaltime_start_doy_of_week(struct icaltimetype t) + * - icaltime_week_number(struct icaltimetype t) + * + * Query methods include: + * + * - icaltime_is_null_time(struct icaltimetype t) + * - icaltime_is_valid_time(struct icaltimetype t) + * - icaltime_is_date(struct icaltimetype t) + * - icaltime_is_utc(struct icaltimetype t) + * - icaltime_is_floating(struct icaltimetype t) + * + * Modify, compare and utility methods include: + * + * - icaltime_add(struct icaltimetype t, struct icaldurationtype d) + * - icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) + * - icaltime_compare_with_zone(struct icaltimetype a,struct icaltimetype b) + * - icaltime_compare(struct icaltimetype a,struct icaltimetype b) + * - icaltime_compare_date_only(struct icaltimetype a, + * struct icaltimetype b) + * - icaltime_adjust(struct icaltimetype *tt, int days, int hours, + * int minutes, int seconds); + * - icaltime_normalize(struct icaltimetype t); + * - icaltime_convert_to_zone(const struct icaltimetype tt, + * icaltimezone *zone); + */ + +#ifndef ICALTIME_H +#define ICALTIME_H + +#include <time.h> +/* An opaque struct representing a timezone. We declare this here to avoid + a circular dependancy. */ +#ifndef ICALTIMEZONE_DEFINED +#define ICALTIMEZONE_DEFINED +typedef struct _icaltimezone icaltimezone; +#endif + +/** icaltime_span is returned by icalcomponent_get_span() */ +struct icaltime_span { + time_t start; /**< in UTC */ + time_t end; /**< in UTC */ + int is_busy; /**< 1->busy time, 0-> free time */ +}; + +typedef struct icaltime_span icaltime_span; + +/* + * FIXME + * + * is_utc is redundant, and might be considered a minor optimization. + * It might be deprecated, so you should use icaltime_is_utc() instead. + */ +struct icaltimetype +{ + int year; /**< Actual year, e.g. 2001. */ + int month; /**< 1 (Jan) to 12 (Dec). */ + int day; + int hour; + int minute; + int second; + + int is_utc; /**< 1-> time is in UTC timezone */ + + int is_date; /**< 1 -> interpret this as date. */ + + int is_daylight; /**< 1 -> time is in daylight savings time. */ + + icaltimezone *zone; /**< timezone */ +}; + +typedef struct icaltimetype icaltimetype; + +/** Return a null time, which indicates no time has been set. + This time represent the beginning of the epoch */ +struct icaltimetype icaltime_null_time(void); + +/** Return a null date */ +struct icaltimetype icaltime_null_date(void); + +/** Returns the current time in the given timezone, as an icaltimetype. */ +struct icaltimetype icaltime_current_time_with_zone(icaltimezone *zone); + +/** Returns the current day as an icaltimetype, with is_date set. */ +struct icaltimetype icaltime_today(void); + +/** Convert seconds past UNIX epoch to a timetype*/ +struct icaltimetype icaltime_from_timet(const time_t v, const int is_date); + +/** Convert seconds past UNIX epoch to a timetype, using timezones. */ +struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, + const int is_date, icaltimezone *zone); + +/** create a time from an ISO format string */ +struct icaltimetype icaltime_from_string(const char* str); + +/** create a time from an ISO format string */ +struct icaltimetype icaltime_from_string_with_zone(const char* str, + icaltimezone *zone); + +/** Create a new time, given a day of year and a year. */ +struct icaltimetype icaltime_from_day_of_year(const int doy, + const int year); + +/** @brief Contructor (TODO). + * Create a new time from a weeknumber and a year. */ +struct icaltimetype icaltime_from_week_number(const int week_number, + const int year); + +/** Return the time as seconds past the UNIX epoch */ +time_t icaltime_as_timet(const struct icaltimetype); + +/** Return the time as seconds past the UNIX epoch, using timezones. */ +time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, + icaltimezone *zone); + +/** Return a string represention of the time, in RFC2445 format. The + string is owned by libical */ +const char* icaltime_as_ical_string(const struct icaltimetype tt); + +/** @brief Return the timezone */ +icaltimezone *icaltime_get_timezone(const struct icaltimetype t); + +/** @brief Return the tzid, or NULL for a floating time */ +const char *icaltime_get_tzid(const struct icaltimetype t); + +/** @brief Set the timezone */ +struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, + icaltimezone *zone); + +/** Return the day of the year of the given time */ +int icaltime_day_of_year(const struct icaltimetype t); + +/** Return the day of the week of the given time. Sunday is 1 */ +int icaltime_day_of_week(const struct icaltimetype t); + +/** Return the day of the year for the Sunday of the week that the + given time is within. */ +int icaltime_start_doy_of_week(const struct icaltimetype t); + +/** Return the week number for the week the given time is within */ +int icaltime_week_number(const struct icaltimetype t); + +/** Return true of the time is null. */ +int icaltime_is_null_time(const struct icaltimetype t); + +/** Returns false if the time is clearly invalid, but is not null. This + is usually the result of creating a new time type buy not clearing + it, or setting one of the flags to an illegal value. */ +int icaltime_is_valid_time(const struct icaltimetype t); + +/** @brief Returns true if time is of DATE type, false if DATE-TIME */ +int icaltime_is_date(const struct icaltimetype t); + +/** @brief Returns true if time is relative to UTC zone */ +int icaltime_is_utc(const struct icaltimetype t); + +/** @brief Returns true if time is a floating time */ +int icaltime_is_floating(const struct icaltimetype t); + +/** Return -1, 0, or 1 to indicate that a<b, a==b or a>b */ +int icaltime_compare_with_zone(const struct icaltimetype a, + const struct icaltimetype b); + +/** Return -1, 0, or 1 to indicate that a<b, a==b or a>b */ +int icaltime_compare(const struct icaltimetype a, + const struct icaltimetype b); + +/** like icaltime_compare, but only use the date parts. */ +int icaltime_compare_date_only(const struct icaltimetype a, + const struct icaltimetype b); + +/** Adds or subtracts a number of days, hours, minutes and seconds. */ +void icaltime_adjust(struct icaltimetype *tt, const int days, + const int hours, const int minutes, const int seconds); + +/** Normalize the icaltime, so that all fields are within the normal range. */ +struct icaltimetype icaltime_normalize(const struct icaltimetype t); + +/** convert tt, of timezone tzid, into a utc time. Does nothing if the + time is already UTC. */ +struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, + icaltimezone *zone); + +/** Return the number of days in the given month */ +int icaltime_days_in_month(const int month, const int year); + + +/** @brief calculate an icaltimespan given a start and end time. */ +struct icaltime_span icaltime_span_new(struct icaltimetype dtstart, + struct icaltimetype dtend, + int is_busy); + +/** @brief Returns true if the two spans overlap **/ +int icaltime_span_overlaps(icaltime_span *s1, + icaltime_span *s2); + +/** @brief Returns true if the span is totally within the containing + * span + */ +int icaltime_span_contains(icaltime_span *s, + icaltime_span *container); + + +#endif /* !ICALTIME_H */ + + diff --git a/libkcal/libical/src/libical/icaltimezone.c b/libkcal/libical/src/libical/icaltimezone.c new file mode 100644 index 000000000..fab228efb --- /dev/null +++ b/libkcal/libical/src/libical/icaltimezone.c @@ -0,0 +1,1670 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/*====================================================================== + FILE: icaltimezone.c + CREATOR: Damon Chaplin 15 March 2001 + + + (C) COPYRIGHT 2001, Damon Chaplin + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + +======================================================================*/ + +/** @file icaltimezone.c + * @brief implementation of timezone handling routines + **/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "icalproperty.h" +#include "icalarray.h" +#include "icalerror.h" +#include "icalparser.h" +#include "icaltimezone.h" + +#ifdef WIN32 +#define snprintf _snprintf +#define PACKAGE_DATA_DIR "/Projects/libical" +#endif + +/** This is the toplevel directory where the timezone data is installed in. */ +#define ZONEINFO_DIRECTORY PACKAGE_DATA_DIR "/zoneinfo" + +/** The prefix we use to uniquely identify TZIDs. */ +#define TZID_PREFIX "/softwarestudio.org/" +#define TZID_PREFIX_LEN 20 + +/** This is the filename of the file containing the city names and + coordinates of all the builtin timezones. */ +#define ZONES_TAB_FILENAME "zones.tab" + +/** This is the number of years of extra coverage we do when expanding + the timezone changes. */ +#define ICALTIMEZONE_EXTRA_COVERAGE 5 + +/** This is the maximum year we will expand to. time_t values only go up to + somewhere around 2037. */ +#define ICALTIMEZONE_MAX_YEAR 2035 + +struct _icaltimezone { + char *tzid; + /**< The unique ID of this timezone, + e.g. "/softwarestudio.org/Olson_20010601_1/Africa/Banjul". + This should only be used to identify a VTIMEZONE. It is not + meant to be displayed to the user in any form. */ + + char *location; + /**< The location for the timezone, e.g. "Africa/Accra" for the + Olson database. We look for this in the "LOCATION" or + "X-LIC-LOCATION" properties of the VTIMEZONE component. It + isn't a standard property yet. This will be NULL if no location + is found in the VTIMEZONE. */ + + char *tznames; + /**< This will be set to a combination of the TZNAME properties + from the last STANDARD and DAYLIGHT components in the + VTIMEZONE, e.g. "EST/EDT". If they both use the same TZNAME, + or only one type of component is found, then only one TZNAME + will appear, e.g. "AZOT". If no TZNAME is found this will be + NULL. */ + + double latitude; + double longitude; + /**< The coordinates of the city, in degrees. */ + + icalcomponent *component; + /**< The toplevel VTIMEZONE component loaded from the .ics file for this + timezone. If we need to regenerate the changes data we need this. */ + + icaltimezone *builtin_timezone; + /**< If this is not NULL it points to the builtin icaltimezone + that the above TZID refers to. This icaltimezone should be used + instead when accessing the timezone changes data, so that the + expanded timezone changes data is shared between calendar + components. */ + + int end_year; + /**< This is the last year for which we have expanded the data to. + If we need to calculate a date past this we need to expand the + timezone component data from scratch. */ + + icalarray *changes; + /**< A dynamically-allocated array of time zone changes, sorted by the + time of the change in local time. So we can do fast binary-searches + to convert from local time to UTC. */ +}; + +typedef struct _icaltimezonechange icaltimezonechange; + +struct _icaltimezonechange { + int utc_offset; + /**< The offset to add to UTC to get local time, in seconds. */ + + int prev_utc_offset; + /**< The offset to add to UTC, before this change, in seconds. */ + + int year; /**< Actual year, e.g. 2001. */ + int month; /**< 1 (Jan) to 12 (Dec). */ + int day; + int hour; + int minute; + int second; + /**< The time that the change came into effect, in UTC. + Note that the prev_utc_offset applies to this local time, + since we haven't changed to the new offset yet. */ + + int is_daylight; + /**< Whether this is STANDARD or DAYLIGHT time. */ +}; + + +/** An array of icaltimezones for the builtin timezones. */ +static icalarray *builtin_timezones = NULL; + +/** This is the special UTC timezone, which isn't in builtin_timezones. */ +static icaltimezone utc_timezone = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +static char* zone_files_directory = NULL; + +static void icaltimezone_reset (icaltimezone *zone); +static char* icaltimezone_get_location_from_vtimezone (icalcomponent *component); +static char* icaltimezone_get_tznames_from_vtimezone (icalcomponent *component); +static void icaltimezone_expand_changes (icaltimezone *zone, + int end_year); +static void icaltimezone_expand_vtimezone (icalcomponent *comp, + int end_year, + icalarray *changes); +static int icaltimezone_compare_change_fn (const void *elem1, + const void *elem2); + +static int icaltimezone_find_nearby_change (icaltimezone *zone, + icaltimezonechange *change); + +static void icaltimezone_adjust_change (icaltimezonechange *tt, + int days, + int hours, + int minutes, + int seconds); + +static void icaltimezone_init (icaltimezone *zone); + +/** Gets the TZID, LOCATION/X-LIC-LOCATION, and TZNAME properties from the + VTIMEZONE component and places them in the icaltimezone. It returns 1 on + success, or 0 if the TZID can't be found. */ +static int icaltimezone_get_vtimezone_properties (icaltimezone *zone, + icalcomponent *component); + + +static void icaltimezone_load_builtin_timezone (icaltimezone *zone); + +static void icaltimezone_ensure_coverage (icaltimezone *zone, + int end_year); + + +static void icaltimezone_init_builtin_timezones(void); + +static void icaltimezone_parse_zone_tab (void); + +static char* icaltimezone_load_get_line_fn (char *s, + size_t size, + void *data); + +static void format_utc_offset (int utc_offset, + char *buffer); + +static const char* get_zone_directory(void); + + +/** Creates a new icaltimezone. */ +icaltimezone* +icaltimezone_new (void) +{ + icaltimezone *zone; + + zone = (icaltimezone*) malloc (sizeof (icaltimezone)); + if (!zone) { + icalerror_set_errno (ICAL_NEWFAILED_ERROR); + return NULL; + } + + icaltimezone_init (zone); + + return zone; +} + + +/** Frees all memory used for the icaltimezone. */ +void +icaltimezone_free (icaltimezone *zone, + int free_struct) +{ + icaltimezone_reset (zone); + if (free_struct) + free ((void *)zone); +} + + +/** Resets the icaltimezone to the initial state, freeing most of the fields. */ +static void +icaltimezone_reset (icaltimezone *zone) +{ + if (zone->tzid) + free (zone->tzid); + if (zone->location) + free (zone->location); + if (zone->tznames) + free (zone->tznames); + if (zone->component) + icalcomponent_free (zone->component); + if (zone->changes) + icalarray_free (zone->changes); + + icaltimezone_init (zone); +} + + +/** Initializes an icaltimezone. */ +static void +icaltimezone_init (icaltimezone *zone) +{ + zone->tzid = NULL; + zone->location = NULL; + zone->tznames = NULL; + zone->latitude = 0.0; + zone->longitude = 0.0; + zone->component = NULL; + zone->builtin_timezone = NULL; + zone->end_year = 0; + zone->changes = NULL; +} + + +/** Gets the TZID, LOCATION/X-LIC-LOCATION and TZNAME properties of + the VTIMEZONE component and stores them in the icaltimezone. It + returns 1 on success, or 0 if the TZID can't be found. Note that + it expects the zone to be initialized or reset - it doesn't free + any old values. */ +static int +icaltimezone_get_vtimezone_properties (icaltimezone *zone, + icalcomponent *component) +{ + icalproperty *prop; + const char *tzid; + + prop = icalcomponent_get_first_property (component, ICAL_TZID_PROPERTY); + if (!prop) + return 0; + + /* A VTIMEZONE MUST have a TZID, or a lot of our code won't work. */ + tzid = icalproperty_get_tzid (prop); + if (!tzid) + return 0; + + zone->tzid = strdup (tzid); + zone->component = component; + if ( zone->location != 0 ) free ( zone->location ); + zone->location = icaltimezone_get_location_from_vtimezone (component); + zone->tznames = icaltimezone_get_tznames_from_vtimezone (component); + + return 1; +} + +/** Gets the LOCATION or X-LIC-LOCATION property from a VTIMEZONE. */ +static char* +icaltimezone_get_location_from_vtimezone (icalcomponent *component) +{ + icalproperty *prop; + const char *location; + const char *name; + + prop = icalcomponent_get_first_property (component, + ICAL_LOCATION_PROPERTY); + if (prop) { + location = icalproperty_get_location (prop); + if (location) + return strdup (location); + } + + prop = icalcomponent_get_first_property (component, ICAL_X_PROPERTY); + while (prop) { + name = icalproperty_get_x_name (prop); + if (name && !strcasecmp (name, "X-LIC-LOCATION")) { + location = icalproperty_get_x (prop); + if (location) + return strdup (location); + } + prop = icalcomponent_get_next_property (component, + ICAL_X_PROPERTY); + } + + return NULL; +} + + +/** Gets the TZNAMEs used for the last STANDARD & DAYLIGHT components + in a VTIMEZONE. If both STANDARD and DAYLIGHT components use the + same TZNAME, it returns that. If they use different TZNAMEs, it + formats them like "EST/EDT". The returned string should be freed by + the caller. */ +static char* +icaltimezone_get_tznames_from_vtimezone (icalcomponent *component) +{ + icalcomponent *comp; + icalcomponent_kind type; + icalproperty *prop; + struct icaltimetype dtstart; + struct icaldatetimeperiodtype rdate; + const char *current_tzname; + const char *standard_tzname = NULL, *daylight_tzname = NULL; + struct icaltimetype standard_max_date, daylight_max_date; + struct icaltimetype current_max_date; + + standard_max_date = icaltime_null_time(); + daylight_max_date = icaltime_null_time(); + + /* Step through the STANDARD & DAYLIGHT subcomponents. */ + comp = icalcomponent_get_first_component (component, ICAL_ANY_COMPONENT); + while (comp) { + type = icalcomponent_isa (comp); + if (type == ICAL_XSTANDARD_COMPONENT + || type == ICAL_XDAYLIGHT_COMPONENT) { + current_max_date = icaltime_null_time (); + current_tzname = NULL; + + /* Step through the properties. We want to find the TZNAME, and + the largest DTSTART or RDATE. */ + prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); + while (prop) { + switch (icalproperty_isa (prop)) { + case ICAL_TZNAME_PROPERTY: + current_tzname = icalproperty_get_tzname (prop); + break; + + case ICAL_DTSTART_PROPERTY: + dtstart = icalproperty_get_dtstart (prop); + if (icaltime_compare (dtstart, current_max_date) > 0) + current_max_date = dtstart; + + break; + + case ICAL_RDATE_PROPERTY: + rdate = icalproperty_get_rdate (prop); + if (icaltime_compare (rdate.time, current_max_date) > 0) + current_max_date = rdate.time; + + break; + + default: + break; + } + + prop = icalcomponent_get_next_property (comp, + ICAL_ANY_PROPERTY); + } + + if (current_tzname) { + if (type == ICAL_XSTANDARD_COMPONENT) { + if (!standard_tzname + || icaltime_compare (current_max_date, + standard_max_date) > 0) { + standard_max_date = current_max_date; + standard_tzname = current_tzname; + } + } else { + if (!daylight_tzname + || icaltime_compare (current_max_date, + daylight_max_date) > 0) { + daylight_max_date = current_max_date; + daylight_tzname = current_tzname; + } + } + } + } + + comp = icalcomponent_get_next_component (component, + ICAL_ANY_COMPONENT); + } + + /* Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME + strings, which is totally useless. So we return NULL in that case. */ + if (standard_tzname && !strcmp (standard_tzname, "Standard Time")) + return NULL; + + /* If both standard and daylight TZNAMEs were found, if they are the same + we return just one, else we format them like "EST/EDT". */ + if (standard_tzname && daylight_tzname) { + unsigned int standard_len, daylight_len; + char *tznames; + + if (!strcmp (standard_tzname, daylight_tzname)) + return strdup (standard_tzname); + + standard_len = strlen (standard_tzname); + daylight_len = strlen (daylight_tzname); + tznames = malloc (standard_len + daylight_len + 2); + strcpy (tznames, standard_tzname); + tznames[standard_len] = '/'; + strcpy (tznames + standard_len + 1, daylight_tzname); + return tznames; + } else { + const char *tznames; + + /* If either of the TZNAMEs was found just return that, else NULL. */ + tznames = standard_tzname ? standard_tzname : daylight_tzname; + return tznames ? strdup (tznames) : NULL; + } +} + + +static void +icaltimezone_ensure_coverage (icaltimezone *zone, + int end_year) +{ + /* When we expand timezone changes we always expand at least up to this + year, plus ICALTIMEZONE_EXTRA_COVERAGE. */ + static int icaltimezone_minimum_expansion_year = -1; + + int changes_end_year; + + if (!zone->component) + icaltimezone_load_builtin_timezone (zone); + + if (icaltimezone_minimum_expansion_year == -1) { + struct icaltimetype today = icaltime_today(); + icaltimezone_minimum_expansion_year = today.year; + } + + changes_end_year = end_year; + if (changes_end_year < icaltimezone_minimum_expansion_year) + changes_end_year = icaltimezone_minimum_expansion_year; + + changes_end_year += ICALTIMEZONE_EXTRA_COVERAGE; + + if (changes_end_year > ICALTIMEZONE_MAX_YEAR) + changes_end_year = ICALTIMEZONE_MAX_YEAR; + + if (!zone->changes || zone->end_year < end_year) + icaltimezone_expand_changes (zone, changes_end_year); +} + + +static void +icaltimezone_expand_changes (icaltimezone *zone, + int end_year) +{ + icalarray *changes; + icalcomponent *comp; + +#if 0 + printf ("\nExpanding changes for: %s to year: %i\n", zone->tzid, end_year); +#endif + + changes = icalarray_new (sizeof (icaltimezonechange), 32); + if (!changes) + return; + + /* Scan the STANDARD and DAYLIGHT subcomponents. */ + comp = icalcomponent_get_first_component (zone->component, + ICAL_ANY_COMPONENT); + while (comp) { + icaltimezone_expand_vtimezone (comp, end_year, changes); + comp = icalcomponent_get_next_component (zone->component, + ICAL_ANY_COMPONENT); + } + + /* Sort the changes. We may have duplicates but I don't think it will + matter. */ + icalarray_sort (changes, icaltimezone_compare_change_fn); + + if (zone->changes) + icalarray_free (zone->changes); + + zone->changes = changes; + zone->end_year = end_year; +} + + +static void +icaltimezone_expand_vtimezone (icalcomponent *comp, + int end_year, + icalarray *changes) +{ + icaltimezonechange change; + icalproperty *prop; + struct icaltimetype dtstart, occ; + struct icalrecurrencetype rrule; + icalrecur_iterator* rrule_iterator; + struct icaldatetimeperiodtype rdate; + int found_dtstart = 0, found_tzoffsetto = 0, found_tzoffsetfrom = 0; + int has_recurrence = 0; + + /* First we check if it is a STANDARD or DAYLIGHT component, and + just return if it isn't. */ + if (icalcomponent_isa (comp) == ICAL_XSTANDARD_COMPONENT) + change.is_daylight = 0; + else if (icalcomponent_isa (comp) == ICAL_XDAYLIGHT_COMPONENT) + change.is_daylight = 1; + else + return; + + /* Step through each of the properties to find the DTSTART, + TZOFFSETFROM and TZOFFSETTO. We can't expand recurrences here + since we need these properties before we can do that. */ + prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); + while (prop) { + switch (icalproperty_isa (prop)) { + case ICAL_DTSTART_PROPERTY: + dtstart = icalproperty_get_dtstart (prop); + found_dtstart = 1; + break; + case ICAL_TZOFFSETTO_PROPERTY: + change.utc_offset = icalproperty_get_tzoffsetto (prop); + /*printf ("Found TZOFFSETTO: %i\n", change.utc_offset);*/ + found_tzoffsetto = 1; + break; + case ICAL_TZOFFSETFROM_PROPERTY: + change.prev_utc_offset = icalproperty_get_tzoffsetfrom (prop); + /*printf ("Found TZOFFSETFROM: %i\n", change.prev_utc_offset);*/ + found_tzoffsetfrom = 1; + break; + case ICAL_RDATE_PROPERTY: + case ICAL_RRULE_PROPERTY: + has_recurrence = 1; + break; + default: + /* Just ignore any other properties. */ + break; + } + + prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); + } + + /* If we didn't find a DTSTART, TZOFFSETTO and TZOFFSETFROM we have to + ignore the component. FIXME: Add an error property? */ + if (!found_dtstart || !found_tzoffsetto || !found_tzoffsetfrom) + return; + +#if 0 + printf ("\n Expanding component DTSTART (Y/M/D): %i/%i/%i %i:%02i:%02i\n", + dtstart.year, dtstart.month, dtstart.day, + dtstart.hour, dtstart.minute, dtstart.second); +#endif + + /* If the STANDARD/DAYLIGHT component has no recurrence data, we just add + a single change for the DTSTART. */ + if (!has_recurrence) { + change.year = dtstart.year; + change.month = dtstart.month; + change.day = dtstart.day; + change.hour = dtstart.hour; + change.minute = dtstart.minute; + change.second = dtstart.second; + + /* Convert to UTC. */ + icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset); + +#if 0 + printf (" Appending single DTSTART (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", + change.year, change.month, change.day, + change.hour, change.minute, change.second); +#endif + + /* Add the change to the array. */ + icalarray_append (changes, &change); + return; + } + + /* The component has recurrence data, so we expand that now. */ + prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); + while (prop) { +#if 0 + printf ("Expanding property...\n"); +#endif + switch (icalproperty_isa (prop)) { + case ICAL_RDATE_PROPERTY: + rdate = icalproperty_get_rdate (prop); + change.year = rdate.time.year; + change.month = rdate.time.month; + change.day = rdate.time.day; + /* RDATEs with a DATE value inherit the time from + the DTSTART. */ + if (icaltime_is_date(rdate.time)) { + change.hour = dtstart.hour; + change.minute = dtstart.minute; + change.second = dtstart.second; + } else { + change.hour = rdate.time.hour; + change.minute = rdate.time.minute; + change.second = rdate.time.second; + + /* The spec was a bit vague about whether RDATEs were in local + time or UTC so we support both to be safe. So if it is in + UTC we have to add the UTC offset to get a local time. */ + if (!icaltime_is_utc(rdate.time)) + icaltimezone_adjust_change (&change, 0, 0, 0, + -change.prev_utc_offset); + } + +#if 0 + printf (" Appending RDATE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", + change.year, change.month, change.day, + change.hour, change.minute, change.second); +#endif + + icalarray_append (changes, &change); + break; + case ICAL_RRULE_PROPERTY: + rrule = icalproperty_get_rrule (prop); + + /* If the rrule UNTIL value is set and is in UTC, we convert it to + a local time, since the recurrence code has no way to convert + it itself. */ + if (!icaltime_is_null_time (rrule.until) && rrule.until.is_utc) { +#if 0 + printf (" Found RRULE UNTIL in UTC.\n"); +#endif + + /* To convert from UTC to a local time, we use the TZOFFSETFROM + since that is the offset from UTC that will be in effect + when each of the RRULE occurrences happens. */ + icaltime_adjust (&rrule.until, 0, 0, 0, + change.prev_utc_offset); + rrule.until.is_utc = 0; + } + + rrule_iterator = icalrecur_iterator_new (rrule, dtstart); + for (;;) { + occ = icalrecur_iterator_next (rrule_iterator); + if (occ.year > end_year || icaltime_is_null_time (occ)) + break; + + change.year = occ.year; + change.month = occ.month; + change.day = occ.day; + change.hour = occ.hour; + change.minute = occ.minute; + change.second = occ.second; + +#if 0 + printf (" Appending RRULE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", + change.year, change.month, change.day, + change.hour, change.minute, change.second); +#endif + + icaltimezone_adjust_change (&change, 0, 0, 0, + -change.prev_utc_offset); + + icalarray_append (changes, &change); + } + + icalrecur_iterator_free (rrule_iterator); + break; + default: + break; + } + + prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); + } +} + + +/** A function to compare 2 icaltimezonechange elements, used for qsort(). */ +static int +icaltimezone_compare_change_fn (const void *elem1, + const void *elem2) +{ + icaltimezonechange *change1, *change2; + int retval; + + change1 = (icaltimezonechange *)elem1; + change2 = (icaltimezonechange *)elem2; + + if (change1->year < change2->year) + retval = -1; + else if (change1->year > change2->year) + retval = 1; + + else if (change1->month < change2->month) + retval = -1; + else if (change1->month > change2->month) + retval = 1; + + else if (change1->day < change2->day) + retval = -1; + else if (change1->day > change2->day) + retval = 1; + + else if (change1->hour < change2->hour) + retval = -1; + else if (change1->hour > change2->hour) + retval = 1; + + else if (change1->minute < change2->minute) + retval = -1; + else if (change1->minute > change2->minute) + retval = 1; + + else if (change1->second < change2->second) + retval = -1; + else if (change1->second > change2->second) + retval = 1; + + else + retval = 0; + + return retval; +} + + + +void +icaltimezone_convert_time (struct icaltimetype *tt, + icaltimezone *from_zone, + icaltimezone *to_zone) +{ + int utc_offset, is_daylight; + + /* If the time is a DATE value or both timezones are the same, or we are + converting a floating time, we don't need to do anything. */ + if (icaltime_is_date(*tt) || from_zone == to_zone || from_zone == NULL) + return; + + /* Convert the time to UTC by getting the UTC offset and subtracting it. */ + utc_offset = icaltimezone_get_utc_offset (from_zone, tt, NULL); + icaltime_adjust (tt, 0, 0, 0, -utc_offset); + + /* Now we convert the time to the new timezone by getting the UTC offset + of our UTC time and adding it. */ + utc_offset = icaltimezone_get_utc_offset_of_utc_time (to_zone, tt, + &is_daylight); + tt->is_daylight = is_daylight; + icaltime_adjust (tt, 0, 0, 0, utc_offset); +} + + + + +/** @deprecated This API wasn't updated when we changed icaltimetype to contain its own + timezone. Also, this takes a pointer instead of the struct. */ +/* Calculates the UTC offset of a given local time in the given + timezone. It is the number of seconds to add to UTC to get local + time. The is_daylight flag is set to 1 if the time is in + daylight-savings time. */ +int +icaltimezone_get_utc_offset (icaltimezone *zone, + struct icaltimetype *tt, + int *is_daylight) +{ + icaltimezonechange *zone_change, *prev_zone_change, tt_change, tmp_change; + int change_num, step, utc_offset_change, cmp; + int change_num_to_use; + int want_daylight; + + if (tt == NULL) + return 0; + + if (is_daylight) + *is_daylight = 0; + + /* For local times and UTC return 0. */ + if (zone == NULL || zone == &utc_timezone) + return 0; + + /* Use the builtin icaltimezone if possible. */ + if (zone->builtin_timezone) + zone = zone->builtin_timezone; + + /* Make sure the changes array is expanded up to the given time. */ + icaltimezone_ensure_coverage (zone, tt->year); + + if (!zone->changes || zone->changes->num_elements == 0) + return 0; + + /* Copy the time parts of the icaltimetype to an icaltimezonechange so we + can use our comparison function on it. */ + tt_change.year = tt->year; + tt_change.month = tt->month; + tt_change.day = tt->day; + tt_change.hour = tt->hour; + tt_change.minute = tt->minute; + tt_change.second = tt->second; + + /* This should find a change close to the time, either the change before + it or the change after it. */ + change_num = icaltimezone_find_nearby_change (zone, &tt_change); + + /* Sanity check. */ + icalerror_assert (change_num >= 0, + "Negative timezone change index"); + icalerror_assert (change_num < zone->changes->num_elements, + "Timezone change index out of bounds"); + + /* Now move backwards or forwards to find the timezone change that applies + to tt. It should only have to do 1 or 2 steps. */ + zone_change = icalarray_element_at (zone->changes, change_num); + step = 1; + change_num_to_use = -1; + for (;;) { + /* Copy the change, so we can adjust it. */ + tmp_change = *zone_change; + + /* If the clock is going backward, check if it is in the region of time + that is used twice. If it is, use the change with the daylight + setting which matches tt, or use standard if we don't know. */ + if (tmp_change.utc_offset < tmp_change.prev_utc_offset) { + /* If the time change is at 2:00AM local time and the clock is + going back to 1:00AM we adjust the change to 1:00AM. We may + have the wrong change but we'll figure that out later. */ + icaltimezone_adjust_change (&tmp_change, 0, 0, 0, + tmp_change.utc_offset); + } else { + icaltimezone_adjust_change (&tmp_change, 0, 0, 0, + tmp_change.prev_utc_offset); + } + + cmp = icaltimezone_compare_change_fn (&tt_change, &tmp_change); + + /* If the given time is on or after this change, then this change may + apply, but we continue as a later change may be the right one. + If the given time is before this change, then if we have already + found a change which applies we can use that, else we need to step + backwards. */ + if (cmp >= 0) + change_num_to_use = change_num; + else + step = -1; + + /* If we are stepping backwards through the changes and we have found + a change that applies, then we know this is the change to use so + we exit the loop. */ + if (step == -1 && change_num_to_use != -1) + break; + + change_num += step; + + /* If we go past the start of the changes array, then we have no data + for this time so we return a UTC offset of 0. */ + if (change_num < 0) + return 0; + + if ((unsigned int)change_num >= zone->changes->num_elements) + break; + + zone_change = icalarray_element_at (zone->changes, change_num); + } + + /* If we didn't find a change to use, then we have a bug! */ + icalerror_assert (change_num_to_use != -1, + "No applicable timezone change found"); + + /* Now we just need to check if the time is in the overlapped region of + time when clocks go back. */ + zone_change = icalarray_element_at (zone->changes, change_num_to_use); + + utc_offset_change = zone_change->utc_offset - zone_change->prev_utc_offset; + if (utc_offset_change < 0 && change_num_to_use > 0) { + tmp_change = *zone_change; + icaltimezone_adjust_change (&tmp_change, 0, 0, 0, + tmp_change.prev_utc_offset); + + if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) < 0) { + /* The time is in the overlapped region, so we may need to use + either the current zone_change or the previous one. If the + time has the is_daylight field set we use the matching change, + else we use the change with standard time. */ + prev_zone_change = icalarray_element_at (zone->changes, + change_num_to_use - 1); + + /* I was going to add an is_daylight flag to struct icaltimetype, + but iCalendar doesn't let us distinguish between standard and + daylight time anyway, so there's no point. So we just use the + standard time instead. */ + want_daylight = (tt->is_daylight == 1) ? 1 : 0; + +#if 0 + if (zone_change->is_daylight == prev_zone_change->is_daylight) + printf (" **** Same is_daylight setting\n"); +#endif + + if (zone_change->is_daylight != want_daylight + && prev_zone_change->is_daylight == want_daylight) + zone_change = prev_zone_change; + } + } + + /* Now we know exactly which timezone change applies to the time, so + we can return the UTC offset and whether it is a daylight time. */ + if (is_daylight) + *is_daylight = zone_change->is_daylight; + return zone_change->utc_offset; +} + + +/** @deprecated This API wasn't updated when we changed icaltimetype to contain its own + timezone. Also, this takes a pointer instead of the struct. */ +/** Calculates the UTC offset of a given UTC time in the given + timezone. It is the number of seconds to add to UTC to get local + time. The is_daylight flag is set to 1 if the time is in + daylight-savings time. */ +int +icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, + struct icaltimetype *tt, + int *is_daylight) +{ + icaltimezonechange *zone_change, tt_change, tmp_change; + int change_num, step, change_num_to_use; + + if (is_daylight) + *is_daylight = 0; + + /* For local times and UTC return 0. */ + if (zone == NULL || zone == &utc_timezone) + return 0; + + /* Use the builtin icaltimezone if possible. */ + if (zone->builtin_timezone) + zone = zone->builtin_timezone; + + /* Make sure the changes array is expanded up to the given time. */ + icaltimezone_ensure_coverage (zone, tt->year); + + if (!zone->changes || zone->changes->num_elements == 0) + return 0; + + /* Copy the time parts of the icaltimetype to an icaltimezonechange so we + can use our comparison function on it. */ + tt_change.year = tt->year; + tt_change.month = tt->month; + tt_change.day = tt->day; + tt_change.hour = tt->hour; + tt_change.minute = tt->minute; + tt_change.second = tt->second; + + /* This should find a change close to the time, either the change before + it or the change after it. */ + change_num = icaltimezone_find_nearby_change (zone, &tt_change); + + /* Sanity check. */ + icalerror_assert (change_num >= 0, + "Negative timezone change index"); + icalerror_assert (change_num < zone->changes->num_elements, + "Timezone change index out of bounds"); + + /* Now move backwards or forwards to find the timezone change that applies + to tt. It should only have to do 1 or 2 steps. */ + zone_change = icalarray_element_at (zone->changes, change_num); + step = 1; + change_num_to_use = -1; + for (;;) { + /* Copy the change and adjust it to UTC. */ + tmp_change = *zone_change; + + /* If the given time is on or after this change, then this change may + apply, but we continue as a later change may be the right one. + If the given time is before this change, then if we have already + found a change which applies we can use that, else we need to step + backwards. */ + if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) >= 0) + change_num_to_use = change_num; + else + step = -1; + + /* If we are stepping backwards through the changes and we have found + a change that applies, then we know this is the change to use so + we exit the loop. */ + if (step == -1 && change_num_to_use != -1) + break; + + change_num += step; + + /* If we go past the start of the changes array, then we have no data + for this time so we return a UTC offset of 0. */ + if (change_num < 0) + return 0; + + if ((unsigned int)change_num >= zone->changes->num_elements) + break; + + zone_change = icalarray_element_at (zone->changes, change_num); + } + + /* If we didn't find a change to use, then we have a bug! */ + icalerror_assert (change_num_to_use != -1, + "No applicable timezone change found"); + + /* Now we know exactly which timezone change applies to the time, so + we can return the UTC offset and whether it is a daylight time. */ + zone_change = icalarray_element_at (zone->changes, change_num_to_use); + if (is_daylight) + *is_daylight = zone_change->is_daylight; + + return zone_change->utc_offset; +} + + +/** Returns the index of a timezone change which is close to the time + given in change. */ +static int +icaltimezone_find_nearby_change (icaltimezone *zone, + icaltimezonechange *change) +{ + icaltimezonechange *zone_change; + int lower, upper, middle, cmp; + + /* Do a simple binary search. */ + lower = middle = 0; + upper = zone->changes->num_elements; + + while (lower < upper) { + middle = (lower + upper) / 2; + zone_change = icalarray_element_at (zone->changes, middle); + cmp = icaltimezone_compare_change_fn (change, zone_change); + if (cmp == 0) + break; + else if (cmp < 0) + upper = middle; + else + lower = middle + 1; + } + + return middle; +} + + + + +/** Adds (or subtracts) a time from a icaltimezonechange. NOTE: This + function is exactly the same as icaltime_adjust() except for the + type of the first parameter. */ +static void +icaltimezone_adjust_change (icaltimezonechange *tt, + int days, + int hours, + int minutes, + int seconds) +{ + int second, minute, hour, day; + int minutes_overflow, hours_overflow, days_overflow; + int days_in_month; + + /* Add on the seconds. */ + second = tt->second + seconds; + tt->second = second % 60; + minutes_overflow = second / 60; + if (tt->second < 0) { + tt->second += 60; + minutes_overflow--; + } + + /* Add on the minutes. */ + minute = tt->minute + minutes + minutes_overflow; + tt->minute = minute % 60; + hours_overflow = minute / 60; + if (tt->minute < 0) { + tt->minute += 60; + hours_overflow--; + } + + /* Add on the hours. */ + hour = tt->hour + hours + hours_overflow; + tt->hour = hour % 24; + days_overflow = hour / 24; + if (tt->hour < 0) { + tt->hour += 24; + days_overflow--; + } + + /* Add on the days. */ + day = tt->day + days + days_overflow; + if (day > 0) { + for (;;) { + days_in_month = icaltime_days_in_month (tt->month, tt->year); + if (day <= days_in_month) + break; + + tt->month++; + if (tt->month >= 13) { + tt->year++; + tt->month = 1; + } + + day -= days_in_month; + } + } else { + while (day <= 0) { + if (tt->month == 1) { + tt->year--; + tt->month = 12; + } else { + tt->month--; + } + + day += icaltime_days_in_month (tt->month, tt->year); + } + } + tt->day = day; +} + + +const char* +icaltimezone_get_tzid (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return NULL. */ + if (!zone) + return NULL; + + if (!zone->tzid) + icaltimezone_load_builtin_timezone (zone); + + return zone->tzid; +} + + +const char* +icaltimezone_get_location (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return NULL. */ + if (!zone) + return NULL; + + /* Note that for builtin timezones this comes from zones.tab so we don't + need to check the timezone is loaded here. */ + return zone->location; +} + + +const char* +icaltimezone_get_tznames (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return NULL. */ + if (!zone) + return NULL; + + if (!zone->component) + icaltimezone_load_builtin_timezone (zone); + + return zone->tznames; +} + + +/** Returns the latitude of a builtin timezone. */ +double +icaltimezone_get_latitude (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return 0. */ + if (!zone) + return 0.0; + + /* Note that for builtin timezones this comes from zones.tab so we don't + need to check the timezone is loaded here. */ + return zone->latitude; +} + + +/** Returns the longitude of a builtin timezone. */ +double +icaltimezone_get_longitude (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return 0. */ + if (!zone) + return 0.0; + + /* Note that for builtin timezones this comes from zones.tab so we don't + need to check the timezone is loaded here. */ + return zone->longitude; +} + + +/** Returns the VTIMEZONE component of a timezone. */ +icalcomponent* +icaltimezone_get_component (icaltimezone *zone) +{ + /* If this is a floating time, without a timezone, return NULL. */ + if (!zone) + return NULL; + + if (!zone->component) + icaltimezone_load_builtin_timezone (zone); + + return zone->component; +} + + +/** Sets the VTIMEZONE component of an icaltimezone, initializing the + tzid, location & tzname fields. It returns 1 on success or 0 on + failure, i.e. no TZID was found. */ +int +icaltimezone_set_component (icaltimezone *zone, + icalcomponent *comp) +{ + icaltimezone_reset (zone); + return icaltimezone_get_vtimezone_properties (zone, comp); +} + + +icalarray* +icaltimezone_array_new (void) +{ + return icalarray_new (sizeof (icaltimezone), 16); +} + + +void +icaltimezone_array_append_from_vtimezone (icalarray *timezones, + icalcomponent *child) +{ + icaltimezone zone; + + icaltimezone_init (&zone); + if (icaltimezone_get_vtimezone_properties (&zone, child)) + icalarray_append (timezones, &zone); +} + + +void +icaltimezone_array_free (icalarray *timezones) +{ + icaltimezone *zone; + int i; + + if ( timezones ) + { + for (i = 0; (unsigned int)i < timezones->num_elements; i++) { + zone = icalarray_element_at (timezones, i); + icaltimezone_free (zone, 0); + } + + icalarray_free (timezones); + } +} + + +/* + * BUILTIN TIMEZONE HANDLING + */ + + +/** Returns an icalarray of icaltimezone structs, one for each builtin + timezone. This will load and parse the zones.tab file to get the + timezone names and their coordinates. It will not load the + VTIMEZONE data for any timezones. */ +icalarray* +icaltimezone_get_builtin_timezones (void) +{ + if (!builtin_timezones) + icaltimezone_init_builtin_timezones (); + + return builtin_timezones; +} + +/** Release builtin timezone memory */ +void +icaltimezone_free_builtin_timezones(void) +{ + icaltimezone_array_free(builtin_timezones); +} + + +/** Returns a single builtin timezone, given its Olson city name. */ +icaltimezone* +icaltimezone_get_builtin_timezone (const char *location) +{ + icaltimezone *zone; + int lower, upper, middle, cmp; + const char *zone_location; + + if (!location || !location[0]) + return NULL; + + if (!strcmp (location, "UTC")) + return &utc_timezone; + + if (!builtin_timezones) + icaltimezone_init_builtin_timezones (); + + /* Do a simple binary search. */ + lower = middle = 0; + upper = builtin_timezones->num_elements; + + while (lower < upper) { + middle = (lower + upper) / 2; + zone = icalarray_element_at (builtin_timezones, middle); + zone_location = icaltimezone_get_location (zone); + cmp = strcmp (location, zone_location); + if (cmp == 0) + return zone; + else if (cmp < 0) + upper = middle; + else + lower = middle + 1; + } + + return NULL; +} + + +/** Returns a single builtin timezone, given its TZID. */ +icaltimezone* +icaltimezone_get_builtin_timezone_from_tzid (const char *tzid) +{ + int num_slashes = 0; + const char *p, *zone_tzid; + icaltimezone *zone; + + if (!tzid || !tzid[0]) + return NULL; + + /* Check that the TZID starts with our unique prefix. */ + if (strncmp (tzid, TZID_PREFIX, TZID_PREFIX_LEN)) + return NULL; + + /* Get the location, which is after the 3rd '/' character. */ + p = tzid; + for (p = tzid; *p; p++) { + if (*p == '/') { + num_slashes++; + if (num_slashes == 3) + break; + } + } + + if (num_slashes != 3) + return NULL; + + p++; + + /* Now we can use the function to get the builtin timezone from the + location string. */ + zone = icaltimezone_get_builtin_timezone (p); + if (!zone) + return NULL; + + /* Check that the builtin TZID matches exactly. We don't want to return + a different version of the VTIMEZONE. */ + zone_tzid = icaltimezone_get_tzid (zone); + if (!strcmp (zone_tzid, tzid)) + return zone; + else + return NULL; +} + + +/** Returns the special UTC timezone. */ +icaltimezone* +icaltimezone_get_utc_timezone (void) +{ + if (!builtin_timezones) + icaltimezone_init_builtin_timezones (); + + return &utc_timezone; +} + + + +/** This initializes the builtin timezone data, i.e. the + builtin_timezones array and the special UTC timezone. It should be + called before any code that uses the timezone functions. */ +static void +icaltimezone_init_builtin_timezones (void) +{ + /* Initialize the special UTC timezone. */ + utc_timezone.tzid = (char *)"UTC"; + + icaltimezone_parse_zone_tab (); +} + + +/** This parses the zones.tab file containing the names and locations + of the builtin timezones. It creates the builtin_timezones array + which is an icalarray of icaltimezone structs. It only fills in the + location, latitude and longtude fields; the rest are left + blank. The VTIMEZONE component is loaded later if it is needed. The + timezones in the zones.tab file are sorted by their name, which is + useful for binary searches. */ +static void +icaltimezone_parse_zone_tab (void) +{ + char *filename; + FILE *fp; + char buf[1024]; /* Used to store each line of zones.tab as it is read. */ + char location[1024]; /* Stores the city name when parsing buf. */ + unsigned int filename_len; + int latitude_degrees, latitude_minutes, latitude_seconds; + int longitude_degrees, longitude_minutes, longitude_seconds; + icaltimezone zone; + + icalerror_assert (builtin_timezones == NULL, + "Parsing zones.tab file multiple times"); + + builtin_timezones = icalarray_new (sizeof (icaltimezone), 32); + + filename_len = strlen (get_zone_directory()) + strlen (ZONES_TAB_FILENAME) + + 2; + + filename = (char*) malloc (filename_len); + if (!filename) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } + + snprintf (filename, filename_len, "%s/%s", get_zone_directory(), + ZONES_TAB_FILENAME); + + fp = fopen (filename, "r"); + free (filename); + if (!fp) { + icalerror_set_errno(ICAL_FILE_ERROR); + return; + } + + while (fgets (buf, sizeof(buf), fp)) { + if (*buf == '#') continue; + + /* The format of each line is: "latitude longitude location". */ + if (sscanf (buf, "%4d%2d%2d %4d%2d%2d %s", + &latitude_degrees, &latitude_minutes, + &latitude_seconds, + &longitude_degrees, &longitude_minutes, + &longitude_seconds, + location) != 7) { + fprintf (stderr, "Invalid timezone description line: %s\n", buf); + continue; + } + + icaltimezone_init (&zone); + zone.location = strdup (location); + + if (latitude_degrees >= 0) + zone.latitude = (double) latitude_degrees + + (double) latitude_minutes / 60 + + (double) latitude_seconds / 3600; + else + zone.latitude = (double) latitude_degrees + - (double) latitude_minutes / 60 + - (double) latitude_seconds / 3600; + + if (longitude_degrees >= 0) + zone.longitude = (double) longitude_degrees + + (double) longitude_minutes / 60 + + (double) longitude_seconds / 3600; + else + zone.longitude = (double) longitude_degrees + - (double) longitude_minutes / 60 + - (double) longitude_seconds / 3600; + + icalarray_append (builtin_timezones, &zone); + +#if 0 + printf ("Found zone: %s %f %f\n", + location, zone.latitude, zone.longitude); +#endif + } + + fclose (fp); +} + + +/** Loads the builtin VTIMEZONE data for the given timezone. */ +static void +icaltimezone_load_builtin_timezone (icaltimezone *zone) +{ + char *filename; + unsigned int filename_len; + FILE *fp; + icalparser *parser; + icalcomponent *comp, *subcomp; + + /* If the location isn't set, it isn't a builtin timezone. */ + if (!zone->location || !zone->location[0]) + return; + + filename_len = strlen (get_zone_directory()) + strlen (zone->location) + 6; + + filename = (char*) malloc (filename_len); + if (!filename) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } + + snprintf (filename, filename_len, "%s/%s.ics", get_zone_directory(), + zone->location); + + fp = fopen (filename, "r"); + free (filename); + if (!fp) { + icalerror_set_errno(ICAL_FILE_ERROR); + return; + } + + + /* ##### B.# Sun, 11 Nov 2001 04:04:29 +1100 + this is where the MALFORMEDDATA error is being set, after the call to 'icalparser_parse' + fprintf(stderr, "** WARNING ** %s: %d %s\n", __FILE__, __LINE__, icalerror_strerror(icalerrno)); + */ + + parser = icalparser_new (); + icalparser_set_gen_data (parser, fp); + comp = icalparser_parse (parser, icaltimezone_load_get_line_fn); + icalparser_free (parser); + fclose (fp); + + + + /* Find the VTIMEZONE component inside the VCALENDAR. There should be 1. */ + subcomp = icalcomponent_get_first_component (comp, + ICAL_VTIMEZONE_COMPONENT); + if (!subcomp) { + icalerror_set_errno(ICAL_PARSE_ERROR); + return; + } + + icaltimezone_get_vtimezone_properties (zone, subcomp); + + icalcomponent_remove_component(comp,subcomp); + + icalcomponent_free(comp); + +} + + +/** Callback used from icalparser_parse() */ +static char * +icaltimezone_load_get_line_fn (char *s, + size_t size, + void *data) +{ + return fgets (s, (int)size, (FILE*) data); +} + + + + +/* + * DEBUGGING + */ + +/** + * This outputs a list of timezone changes for the given timezone to the + * given file, up to the maximum year given. We compare this output with the + * output from 'vzic --dump-changes' to make sure that we are consistent. + * (vzic is the Olson timezone database to VTIMEZONE converter.) + * + * The output format is: + * + * Zone-Name [tab] Date [tab] Time [tab] UTC-Offset + * + * The Date and Time fields specify the time change in UTC. + * + * The UTC Offset is for local (wall-clock) time. It is the amount of time + * to add to UTC to get local time. + */ +int +icaltimezone_dump_changes (icaltimezone *zone, + int max_year, + FILE *fp) +{ + static const char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + icaltimezonechange *zone_change; + int change_num; + char buffer[8]; + + /* Make sure the changes array is expanded up to the given time. */ + icaltimezone_ensure_coverage (zone, max_year); + +#if 0 + printf ("Num changes: %i\n", zone->changes->num_elements); +#endif + + change_num = 0; + for (change_num = 0; (unsigned int)change_num < zone->changes->num_elements; change_num++) { + zone_change = icalarray_element_at (zone->changes, change_num); + + if (zone_change->year > max_year) + break; + + fprintf (fp, "%s\t%2i %s %04i\t%2i:%02i:%02i", + zone->location, + zone_change->day, months[zone_change->month - 1], + zone_change->year, + zone_change->hour, zone_change->minute, zone_change->second); + + /* Wall Clock Time offset from UTC. */ + format_utc_offset (zone_change->utc_offset, buffer); + fprintf (fp, "\t%s", buffer); + + fprintf (fp, "\n"); + } + return 1; +} + + +/** This formats a UTC offset as "+HHMM" or "+HHMMSS". + buffer should have space for 8 characters. */ +static void +format_utc_offset (int utc_offset, + char *buffer) +{ + const char *sign = "+"; + int hours, minutes, seconds; + + if (utc_offset < 0) { + utc_offset = -utc_offset; + sign = "-"; + } + + hours = utc_offset / 3600; + minutes = (utc_offset % 3600) / 60; + seconds = utc_offset % 60; + + /* Sanity check. Standard timezone offsets shouldn't be much more than 12 + hours, and daylight saving shouldn't change it by more than a few hours. + (The maximum offset is 15 hours 56 minutes at present.) */ + if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 + || seconds < 0 || seconds >= 60) { + fprintf (stderr, "Warning: Strange timezone offset: H:%i M:%i S:%i\n", + hours, minutes, seconds); + } + + if (seconds == 0) + snprintf (buffer, sizeof(buffer), "%s%02i%02i", sign, hours, minutes); + else + snprintf (buffer, sizeof(buffer), "%s%02i%02i%02i", sign, hours, minutes, seconds); +} + +static const char* get_zone_directory(void) +{ + return zone_files_directory == NULL ? ZONEINFO_DIRECTORY : zone_files_directory; +} + +void set_zone_directory(char *path) +{ + zone_files_directory = malloc(strlen(path)+1); + if ( zone_files_directory != NULL ) + { + strcpy(zone_files_directory,path); + } +} + +void free_zone_directory(void) +{ + if ( zone_files_directory != NULL ) + { + free(zone_files_directory); + } +} diff --git a/libkcal/libical/src/libical/icaltimezone.h b/libkcal/libical/src/libical/icaltimezone.h new file mode 100644 index 000000000..1a97d391f --- /dev/null +++ b/libkcal/libical/src/libical/icaltimezone.h @@ -0,0 +1,165 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/*====================================================================== + FILE: icaltimezone.h + CREATOR: Damon Chaplin 15 March 2001 + + + + (C) COPYRIGHT 2001, Damon Chaplin + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + +======================================================================*/ +/** + * @file icaltimezone.h + * @brief timezone handling routines + */ + +#ifndef ICALTIMEZONE_H +#define ICALTIMEZONE_H + +#include <stdio.h> /* For FILE* */ +#include "icaltime.h" +#include "icalarray.h" +#include "icalcomponent.h" + + +#ifndef ICALTIMEZONE_DEFINED +#define ICALTIMEZONE_DEFINED +/** @brief An opaque struct representing a timezone. + * We declare this here to avoid a circular dependancy. + */ +typedef struct _icaltimezone icaltimezone; +#endif + +/** + * @par Creating/Destroying individual icaltimezones. + */ + +/** Creates a new icaltimezone. */ +icaltimezone *icaltimezone_new (void); + +/** Frees all memory used for the icaltimezone. Set free_struct to free the + icaltimezone struct as well. */ +void icaltimezone_free (icaltimezone *zone, + int free_struct); + + +/** + * @par Accessing timezones. + */ + +/** Free any builtin timezone information **/ +void icaltimezone_free_builtin_timezones(void); + +/** Returns the array of builtin icaltimezones. */ +icalarray* icaltimezone_get_builtin_timezones (void); + +/** Returns a single builtin timezone, given its Olson city name. */ +icaltimezone* icaltimezone_get_builtin_timezone (const char *location); + +/** Returns a single builtin timezone, given its TZID. */ +icaltimezone* icaltimezone_get_builtin_timezone_from_tzid (const char *tzid); + +/** Returns the UTC timezone. */ +icaltimezone* icaltimezone_get_utc_timezone (void); + +/** Returns the TZID of a timezone. */ +const char* icaltimezone_get_tzid (icaltimezone *zone); + +/** Returns the city name of a timezone. */ +const char* icaltimezone_get_location (icaltimezone *zone); + +/** Returns the TZNAME properties used in the latest STANDARD and DAYLIGHT + components. If they are the same it will return just one, e.g. "LMT". + If they are different it will format them like "EST/EDT". Note that this + may also return NULL. */ +const char* icaltimezone_get_tznames (icaltimezone *zone); + +/** Returns the latitude of a builtin timezone. */ +double icaltimezone_get_latitude (icaltimezone *zone); + +/** Returns the longitude of a builtin timezone. */ +double icaltimezone_get_longitude (icaltimezone *zone); + +/** Returns the VTIMEZONE component of a timezone. */ +icalcomponent* icaltimezone_get_component (icaltimezone *zone); + +/** Sets the VTIMEZONE component of an icaltimezone, initializing the tzid, + location & tzname fields. It returns 1 on success or 0 on failure, i.e. + no TZID was found. */ +int icaltimezone_set_component (icaltimezone *zone, + icalcomponent *comp); + +/** + * @par Converting times between timezones. + */ + +void icaltimezone_convert_time (struct icaltimetype *tt, + icaltimezone *from_zone, + icaltimezone *to_zone); + + +/** + * @par Getting offsets from UTC. + */ + +/** Calculates the UTC offset of a given local time in the given + timezone. It is the number of seconds to add to UTC to get local + time. The is_daylight flag is set to 1 if the time is in + daylight-savings time. */ +int icaltimezone_get_utc_offset (icaltimezone *zone, + struct icaltimetype *tt, + int *is_daylight); + +/** Calculates the UTC offset of a given UTC time in the given + timezone. It is the number of seconds to add to UTC to get local + time. The is_daylight flag is set to 1 if the time is in + daylight-savings time. */ +int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, + struct icaltimetype *tt, + int *is_daylight); + + + +/* + * Handling arrays of timezones. Mainly for internal use. + */ +icalarray* icaltimezone_array_new (void); + +void icaltimezone_array_append_from_vtimezone (icalarray *timezones, + icalcomponent *child); +void icaltimezone_array_free (icalarray *timezones); + + +/* + * @par Handling the default location the timezone files + */ + +/** Set the directory to look for the zonefiles */ +void set_zone_directory(char *path); + +/** Free memory dedicated to the zonefile directory */ +void free_zone_directory(void); + +/* + * @par Debugging Output. + */ + +/** Dumps information about changes in the timezone up to and including + max_year. */ +int icaltimezone_dump_changes (icaltimezone *zone, + int max_year, + FILE *fp); + +#endif /* ICALTIMEZONE_H */ diff --git a/libkcal/libical/src/libical/icaltypes.c b/libkcal/libical/src/libical/icaltypes.c new file mode 100644 index 000000000..6797e04dd --- /dev/null +++ b/libkcal/libical/src/libical/icaltypes.c @@ -0,0 +1,190 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icaltypes.c + CREATOR: eric 16 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icaltypes.c + + ======================================================================*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icaltypes.h" +#include "icalerror.h" +#include "icalmemory.h" +#include <stdlib.h> /* for malloc and abs() */ +#include <errno.h> /* for errno */ +#include <string.h> /* for icalmemory_strdup */ +#include <assert.h> + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +#define TEMP_MAX 1024 + + +int icaltriggertype_is_null_trigger(struct icaltriggertype tr) +{ + if(icaltime_is_null_time(tr.time) && + icaldurationtype_is_null_duration(tr.duration)){ + return 1; + } + + return 0; +} + +int icaltriggertype_is_bad_trigger(struct icaltriggertype tr) +{ + if(icaldurationtype_is_bad_duration(tr.duration)){ + return 1; + } + + return 0; +} + +struct icaltriggertype icaltriggertype_from_int(const int reltime) +{ + struct icaltriggertype tr; + + tr.time = icaltime_null_time(); + tr.duration = icaldurationtype_from_int(reltime); + + return tr; +} + +struct icaltriggertype icaltriggertype_from_string(const char* str) +{ + + + struct icaltriggertype tr, null_tr; + icalerrorstate es = ICAL_ERROR_UNKNOWN; + icalerrorenum e; + + tr.time= icaltime_null_time(); + tr.duration = icaldurationtype_from_int(0); + + null_tr = tr; + + + /* Suppress errors so a failure in icaltime_from_string() does not cause an abort */ + es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); + if(str == 0) goto error; + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); + e = icalerrno; + icalerror_set_errno(ICAL_NO_ERROR); + + tr.time = icaltime_from_string(str); + + if (icaltime_is_null_time(tr.time)){ + + tr.duration = icaldurationtype_from_string(str); + + if (icaldurationtype_is_bad_duration(tr.duration)) goto error; + } + + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); + icalerror_set_errno(e); + return tr; + + error: + icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return tr; + +} + + +struct icalreqstattype icalreqstattype_from_string(const char* str) +{ + const char *p1,*p2; + struct icalreqstattype stat; + short major=0, minor=0; + + icalerror_check_arg((str != 0),"str"); + + stat.code = ICAL_UNKNOWN_STATUS; + stat.debug = 0; + stat.desc = 0; + + /* Get the status numbers */ + + sscanf(str, "%hd.%hd",&major, &minor); + + if (major <= 0 || minor < 0){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return stat; + } + + stat.code = icalenum_num_to_reqstat(major, minor); + + if (stat.code == ICAL_UNKNOWN_STATUS){ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return stat; + } + + + p1 = strchr(str,';'); + + if (p1 == 0){ +/* icalerror_set_errno(ICAL_BADARG_ERROR);*/ + return stat; + } + + /* Just ignore the second clause; it will be taken from inside the library + */ + + + + p2 = strchr(p1+1,';'); + if (p2 != 0 && *p2 != 0){ + stat.debug = p2+1; + } + + return stat; + +} + +const char* icalreqstattype_as_string(struct icalreqstattype stat) +{ + char *temp; + + temp = (char*)icalmemory_tmp_buffer(TEMP_MAX); + + icalerror_check_arg_rz((stat.code != ICAL_UNKNOWN_STATUS),"Status"); + + if (stat.desc == 0){ + stat.desc = icalenum_reqstat_desc(stat.code); + } + + if(stat.debug != 0){ + snprintf(temp,TEMP_MAX,"%d.%d;%s;%s", icalenum_reqstat_major(stat.code), + icalenum_reqstat_minor(stat.code), + stat.desc, stat.debug); + + } else { + snprintf(temp,TEMP_MAX,"%d.%d;%s", icalenum_reqstat_major(stat.code), + icalenum_reqstat_minor(stat.code), + stat.desc); + } + + return temp; +} diff --git a/libkcal/libical/src/libical/icaltypes.h b/libkcal/libical/src/libical/icaltypes.h new file mode 100644 index 000000000..a89069d5f --- /dev/null +++ b/libkcal/libical/src/libical/icaltypes.h @@ -0,0 +1,108 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icaltypes.h + CREATOR: eric 20 March 1999 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icaltypes.h + +======================================================================*/ + +#ifndef ICALTYPES_H +#define ICALTYPES_H + +#include <time.h> +#include "icalenums.h" +#include "icaltime.h" +#include "icalduration.h" +#include "icalperiod.h" + + +struct icalgeotype +{ + float lat; + float lon; +}; + + +struct icaldatetimeperiodtype +{ + struct icaltimetype time; + struct icalperiodtype period; +}; + + +struct icaltriggertype +{ + struct icaltimetype time; + struct icaldurationtype duration; +}; + +struct icaltriggertype icaltriggertype_from_int(const int reltime); +struct icaltriggertype icaltriggertype_from_string(const char* str); + +int icaltriggertype_is_null_trigger(struct icaltriggertype tr); +int icaltriggertype_is_bad_trigger(struct icaltriggertype tr); + +/* struct icalreqstattype. This struct contains two string pointers, +but don't try to free either of them. The "desc" string is a pointer +to a static table inside the library. Don't try to free it. The +"debug" string is a pointer into the string that the called passed +into to icalreqstattype_from_string. Don't try to free it either, and +don't use it after the original string has been freed. + +BTW, you would get that original string from +*icalproperty_get_requeststatus() or icalvalue_get_text(), when +operating on a the value of a request_status property. */ + +struct icalreqstattype { + + icalrequeststatus code; + const char* desc; + const char* debug; +}; + +struct icalreqstattype icalreqstattype_from_string(const char* str); +const char* icalreqstattype_as_string(struct icalreqstattype); + + + +struct icaltimezonephase { + const char* tzname; + int is_stdandard; /* 1 = standard tme, 0 = daylight savings time */ + struct icaltimetype dtstart; + int offsetto; + int tzoffsetfrom; + const char* comment; + struct icaldatetimeperiodtype rdate; + const char* rrule; +}; + + +struct icaltimezonetype { + const char* tzid; + struct icaltimetype last_mod; + const char* tzurl; + + /* Array of phases. The end of the array is a phase with tzname == 0 */ + struct icaltimezonephase *phases; +}; + +void icaltimezonetype_free(struct icaltimezonetype tzt); + + +#endif /* !ICALTYPES_H */ diff --git a/libkcal/libical/src/libical/icalvalue.c b/libkcal/libical/src/libical/icalvalue.c new file mode 100644 index 000000000..4166d56af --- /dev/null +++ b/libkcal/libical/src/libical/icalvalue.c @@ -0,0 +1,1326 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vi:set ts=4 sts=4 sw=4 expandtab : */ +/*====================================================================== + FILE: icalvalue.c + CREATOR: eric 02 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalvalue.c + + Contributions from: + Graham Davison <g.m.davison@computer.org> + + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparser.h" +#include "icalenums.h" +#include "icalvalueimpl.h" + +#include <stdlib.h> /* for malloc */ +#include <stdio.h> /* for snprintf */ +#include <string.h> /* For memset, others */ +#include <stddef.h> /* For offsetof() macro */ +#include <errno.h> +#include <time.h> /* for mktime */ +#include <stdlib.h> /* for atoi and atof */ +#include <limits.h> /* for SHRT_MAX */ + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +#ifdef _MAC_OS_ +#include "icalmemory_strdup.h" +#endif + +#define TMP_BUF_SIZE 1024 + +void print_datetime_to_string(char* str, const struct icaltimetype *data); +void print_date_to_string(char* str, const struct icaltimetype *data); +void print_time_to_string(char* str, const struct icaltimetype *data); + + +struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind){ + + struct icalvalue_impl* v; + + if (!icalvalue_kind_is_valid(kind)) + return NULL; + + if ( ( v = (struct icalvalue_impl*) + malloc(sizeof(struct icalvalue_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + strcpy(v->id,"val"); + + v->kind = kind; + v->size = 0; + v->parent = 0; + v->x_value = 0; + memset(&(v->data),0,sizeof(v->data)); + + return v; + +} + + + +icalvalue* +icalvalue_new (icalvalue_kind kind) +{ + return (icalvalue*)icalvalue_new_impl(kind); +} + +icalvalue* icalvalue_new_clone(const icalvalue* old) { + struct icalvalue_impl* new; + + new = icalvalue_new_impl(old->kind); + + if (new == 0){ + return 0; + } + + strcpy(new->id, old->id); + new->kind = old->kind; + new->size = old->size; + + switch (new->kind){ + case ICAL_ATTACH_VALUE: + case ICAL_BINARY_VALUE: + { + /* Hmm. We just ref the attach value, which may not be the right + * thing to do. We cannot quite copy the data, anyways, since we + * don't know how long it is. + */ + new->data.v_attach = old->data.v_attach; + if (new->data.v_attach) + icalattach_ref (new->data.v_attach); + + break; + } + case ICAL_QUERY_VALUE: + case ICAL_STRING_VALUE: + case ICAL_TEXT_VALUE: + case ICAL_CALADDRESS_VALUE: + case ICAL_URI_VALUE: + { + if (old->data.v_string != 0) { + new->data.v_string=icalmemory_strdup(old->data.v_string); + + if ( new->data.v_string == 0 ) { + return 0; + } + + } + break; + } + case ICAL_RECUR_VALUE: + { + if(old->data.v_recur != 0){ + new->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); + + if(new->data.v_recur == 0){ + return 0; + } + + memcpy( new->data.v_recur, old->data.v_recur, + sizeof(struct icalrecurrencetype)); + } + break; + } + + case ICAL_X_VALUE: + { + if (old->x_value != 0) { + new->x_value=icalmemory_strdup(old->x_value); + + if (new->x_value == 0) { + return 0; + } + } + + break; + } + + default: + { + /* all of the other types are stored as values, not + pointers, so we can just copy the whole structure. */ + + new->data = old->data; + } + } + + return new; +} + +static char* icalmemory_strdup_and_dequote(const char* str) +{ + const char* p; + char* out = (char*)malloc(sizeof(char) * strlen(str) +1); + char* pout; + + if (out == 0){ + return 0; + } + + pout = out; + + for (p = str; *p!=0; p++){ + + if( *p == '\\') + { + p++; + switch(*p){ + case 0: + { + *pout = '\0'; + break; + + } + case 'n': + case 'N': + { + *pout = '\n'; + break; + } + case 't': + case 'T': + { + *pout = '\t'; + break; + } + case 'r': + case 'R': + { + *pout = '\r'; + break; + } + case 'b': + case 'B': + { + *pout = '\b'; + break; + } + case 'f': + case 'F': + { + *pout = '\f'; + break; + } + case ';': + case ',': + case '"': + case '\\': + { + *pout = *p; + break; + } + default: + { + *pout = ' '; + } + } + } else { + *pout = *p; + } + + pout++; + + } + + *pout = '\0'; + + return out; +} + +/* + * FIXME + * + * This is a bad API, as it forces callers to specify their own X type. + * This function should take care of this by itself. + */ +static +icalvalue* icalvalue_new_enum(icalvalue_kind kind, int x_type, const char* str) +{ + int e = icalproperty_kind_and_string_to_enum(kind, str); + struct icalvalue_impl *value; + + if(e != 0 && icalproperty_enum_belongs_to_property( + icalproperty_value_kind_to_kind(kind),e)) { + + value = icalvalue_new_impl(kind); + value->data.v_enum = e; + } else { + /* Make it an X value */ + value = icalvalue_new_impl(kind); + value->data.v_enum = x_type; + icalvalue_set_x(value,str); + } + + return value; +} + + +icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind,const char* str,icalproperty** error) +{ + + struct icalvalue_impl *value = 0; + + icalerror_check_arg_rz(str!=0,"str"); + + if (error != 0){ + *error = 0; + } + + switch (kind){ + + case ICAL_ATTACH_VALUE: + { + icalattach *attach; + + attach = icalattach_new_from_url (str); + if (!attach) + break; + + value = icalvalue_new_attach (attach); + icalattach_unref (attach); + break; + } + + case ICAL_BINARY_VALUE: + { + icalattach *attach; + attach = icalattach_new_from_data (str, 0, 0); + if ( !attach ) + break; + value = icalvalue_new_attach (attach); + icalattach_unref (attach); + break; + } + case ICAL_BOOLEAN_VALUE: + { + /* HACK */ + value = 0; + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + snprintf(temp,sizeof(temp),"%s Values are not implemented", + icalvalue_kind_to_string(kind)); + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + break; + } + + + case ICAL_TRANSP_VALUE: + value = icalvalue_new_enum(kind, (int)ICAL_TRANSP_X,str); + break; + case ICAL_METHOD_VALUE: + value = icalvalue_new_enum(kind, (int)ICAL_METHOD_X,str); + break; + case ICAL_STATUS_VALUE: + value = icalvalue_new_enum(kind, (int)ICAL_STATUS_X,str); + break; + case ICAL_ACTION_VALUE: + value = icalvalue_new_enum(kind, (int)ICAL_ACTION_X,str); + break; + + case ICAL_QUERY_VALUE: + value = icalvalue_new_query(str); + break; + + case ICAL_CLASS_VALUE: + value = icalvalue_new_enum(kind, (int)ICAL_CLASS_X,str); + break; + + + case ICAL_INTEGER_VALUE: + value = icalvalue_new_integer(atoi(str)); + break; + + case ICAL_FLOAT_VALUE: + value = icalvalue_new_float((float)atof(str)); + break; + + case ICAL_UTCOFFSET_VALUE: + { + int t,utcoffset, hours, minutes, seconds; + /* treat the UTCOFSET string a a decimal number, disassemble its digits + and reconstruct it as sections */ + t = strtol(str,0,10); + /* add phantom seconds field */ + if(abs(t)<9999){t *= 100; } + hours = (t/10000); + minutes = (t-hours*10000)/100; + seconds = (t-hours*10000-minutes*100); + utcoffset = hours*3600+minutes*60+seconds; + + value = icalvalue_new_utcoffset(utcoffset); + + break; + } + + case ICAL_TEXT_VALUE: + { + char* dequoted_str = icalmemory_strdup_and_dequote(str); + value = icalvalue_new_text(dequoted_str); + free(dequoted_str); + break; + } + + case ICAL_STRING_VALUE: + value = icalvalue_new_string(str); + break; + + case ICAL_CALADDRESS_VALUE: + value = icalvalue_new_caladdress(str); + break; + + case ICAL_URI_VALUE: + value = icalvalue_new_uri(str); + break; + + case ICAL_GEO_VALUE: + value = 0; + /* HACK */ + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + strcpy(temp,"GEO Values are not implemented"); + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + /*icalerror_warn("Parsing GEO properties is unimplmeneted");*/ + + break; + + case ICAL_RECUR_VALUE: + { + struct icalrecurrencetype rt; + rt = icalrecurrencetype_from_string(str); + if(rt.freq != ICAL_NO_RECURRENCE){ + value = icalvalue_new_recur(rt); + } + break; + } + + case ICAL_DATE_VALUE: + case ICAL_DATETIME_VALUE: + { + struct icaltimetype tt; + + tt = icaltime_from_string(str); + if(!icaltime_is_null_time(tt)){ + value = icalvalue_new_impl(kind); + value->data.v_time = tt; + + icalvalue_reset_kind(value); + } + break; + } + + case ICAL_DATETIMEPERIOD_VALUE: + { + struct icaltimetype tt; + struct icalperiodtype p; + tt = icaltime_from_string(str); + + if(!icaltime_is_null_time(tt)){ + value = icalvalue_new_datetime(tt); + break; + } + + p = icalperiodtype_from_string(str); + if (!icalperiodtype_is_null_period(p)){ + value = icalvalue_new_period(p); + } + + break; + } + + case ICAL_DURATION_VALUE: + { + struct icaldurationtype dur = icaldurationtype_from_string(str); + + if (!icaldurationtype_is_bad_duration(dur)) { /* failed to parse */ + value = icalvalue_new_duration(dur); + } + + break; + } + + case ICAL_PERIOD_VALUE: + { + struct icalperiodtype p; + p = icalperiodtype_from_string(str); + + if(!icalperiodtype_is_null_period(p)){ + value = icalvalue_new_period(p); + } + break; + } + + case ICAL_TRIGGER_VALUE: + { + struct icaltriggertype tr = icaltriggertype_from_string(str); + if (!icaltriggertype_is_bad_trigger(tr)) { + value = icalvalue_new_trigger(tr); + } + break; + } + + case ICAL_REQUESTSTATUS_VALUE: + { + struct icalreqstattype rst = icalreqstattype_from_string(str); + if(rst.code != ICAL_UNKNOWN_STATUS){ + value = icalvalue_new_requeststatus(rst); + } + break; + + } + + case ICAL_X_VALUE: + { + char* dequoted_str = icalmemory_strdup_and_dequote(str); + value = icalvalue_new_x(dequoted_str); + free(dequoted_str); + } + break; + + default: + { + if (error != 0 ){ + char temp[TMP_BUF_SIZE]; + + snprintf(temp,TMP_BUF_SIZE,"Unknown type for \'%s\'",str); + + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + icalerror_warn("icalvalue_new_from_string got an unknown value type"); + value=0; + } + } + + + if (error != 0 && *error == 0 && value == 0){ + char temp[TMP_BUF_SIZE]; + + snprintf(temp,TMP_BUF_SIZE,"Failed to parse value: \'%s\'",str); + + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + + return value; + +} + +icalvalue* icalvalue_new_from_string(icalvalue_kind kind,const char* str) +{ + return icalvalue_new_from_string_with_error(kind,str,(icalproperty**)0); +} + + + +void +icalvalue_free (icalvalue* v) +{ + icalerror_check_arg_rv((v != 0),"value"); + +#ifdef ICAL_FREE_ON_LIST_IS_ERROR + icalerror_assert( (v->parent ==0),"This value is still attached to a property"); + +#else + if(v->parent !=0){ + return; + } +#endif + + if(v->x_value != 0){ + free(v->x_value); + } + + switch (v->kind){ + case ICAL_BINARY_VALUE: + case ICAL_ATTACH_VALUE: { + if (v->data.v_attach) { + icalattach_unref (v->data.v_attach); + v->data.v_attach = NULL; + } + + break; + } + case ICAL_TEXT_VALUE: + case ICAL_CALADDRESS_VALUE: + case ICAL_URI_VALUE: + case ICAL_QUERY_VALUE: + { + if (v->data.v_string != 0) { + free((void*)v->data.v_string); + v->data.v_string = 0; + } + break; + } + case ICAL_RECUR_VALUE: + { + if(v->data.v_recur != 0){ + free((void*)v->data.v_recur); + v->data.v_recur = 0; + } + break; + } + + default: + { + /* Nothing to do */ + } + } + + v->kind = ICAL_NO_VALUE; + v->size = 0; + v->parent = 0; + memset(&(v->data),0,sizeof(v->data)); + v->id[0] = 'X'; + free(v); +} + +int +icalvalue_is_valid (const icalvalue* value) +{ + if(value == 0){ + return 0; + } + + return 1; +} + +static char* icalvalue_binary_as_ical_string(const icalvalue* value) { + + const char* data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + + data = icalvalue_get_binary(value); + + str = (char*)icalmemory_tmp_buffer(60); + strcpy(str,"icalvalue_binary_as_ical_string is not implemented yet"); + + return str; +} + + +#define MAX_INT_DIGITS 12 /* Enough for 2^32 + sign*/ + +static char* icalvalue_int_as_ical_string(const icalvalue* value) { + int data; + char* str = (char*)icalmemory_tmp_buffer(MAX_INT_DIGITS); + + icalerror_check_arg_rz( (value!=0),"value"); + + data = icalvalue_get_integer(value); + + snprintf(str,MAX_INT_DIGITS,"%d",data); + + return str; +} + +static char* icalvalue_utcoffset_as_ical_string(const icalvalue* value) +{ + int data,h,m,s; + char sign; + char* str = (char*)icalmemory_tmp_buffer(9); + + icalerror_check_arg_rz( (value!=0),"value"); + + data = icalvalue_get_utcoffset(value); + + if (abs(data) == data){ + sign = '+'; + } else { + sign = '-'; + } + + h = data/3600; + m = (data - (h*3600))/ 60; + s = (data - (h*3600) - (m*60)); + + if (s > 0) + snprintf(str,9,"%c%02d%02d%02d",sign,abs(h),abs(m),abs(s)); + else + snprintf(str,9,"%c%02d%02d",sign,abs(h),abs(m)); + + return str; +} + +static char* icalvalue_string_as_ical_string(const icalvalue* value) { + + const char* data; + char* str = 0; + icalerror_check_arg_rz( (value!=0),"value"); + data = value->data.v_string; + + str = (char*)icalmemory_tmp_buffer(strlen(data)+1); + + strcpy(str,data); + + return str; +} + + +static char* icalvalue_recur_as_ical_string(const icalvalue* value) +{ + struct icalrecurrencetype *recur = value->data.v_recur; + + return icalrecurrencetype_as_string(recur); +} + + /* @todo This is not RFC2445 compliant. + * The RFC only allows: + * TSAFE-CHAR = %x20-21 / %x23-2B / %x2D-39 / %x3C-5B / %x5D-7E / NON-US-ASCII + * As such, \t\r\b\f are not allowed, not even escaped + */ + +static char* icalvalue_text_as_ical_string(const icalvalue* value) { + char *str; + char *str_p; + char *rtrn; + const char *p; + size_t buf_sz; + + buf_sz = strlen(value->data.v_string)+1; + + str_p = str = (char*)icalmemory_new_buffer(buf_sz); + + if (str_p == 0){ + return 0; + } + + for(p=value->data.v_string; *p!=0; p++){ + + switch(*p){ + case '\n': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\n"); + break; + } + + case '\t': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\t"); + break; + } + case '\r': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\r"); + break; + } + case '\b': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\b"); + break; + } + case '\f': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\f"); + break; + } + + case ';': + case ',': + case '"': + case '\\':{ + icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); + icalmemory_append_char(&str,&str_p,&buf_sz,*p); + break; + } + + default: { + icalmemory_append_char(&str,&str_p,&buf_sz,*p); + } + } + } + + /* Assume the last character is not a '\0' and add one. We could + check *str_p != 0, but that would be an uninitialized memory + read. */ + + + icalmemory_append_char(&str,&str_p,&buf_sz,'\0'); + + rtrn = icalmemory_tmp_copy(str); + + icalmemory_free_buffer(str); + + return rtrn; +} + + +static char* +icalvalue_attach_as_ical_string(const icalvalue* value) +{ + icalattach *a; + char * str; + + icalerror_check_arg_rz( (value!=0),"value"); + + a = icalvalue_get_attach(value); + + if (icalattach_get_is_url (a)) { + const char *url; + + url = icalattach_get_url (a); + str = icalmemory_tmp_buffer (strlen (url) + 1); + strcpy (str, url); + return str; + } else { +/* return icalvalue_binary_as_ical_string (value);*/ + const char *data = 0; + data = (const char*)icalattach_get_data(a); + str = icalmemory_tmp_buffer (strlen (data) + 1); + strcpy (str, data); + return str; +} +} + + +static char* icalvalue_duration_as_ical_string(const icalvalue* value) { + + struct icaldurationtype data; + + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_duration(value); + + return icaldurationtype_as_ical_string(data); +} + +void print_time_to_string(char* str, const struct icaltimetype *data) +{ + char temp[20]; + + if (icaltime_is_utc(*data)){ + snprintf(temp,sizeof(temp),"%02d%02d%02dZ",data->hour,data->minute,data->second); + } else { + snprintf(temp,sizeof(temp),"%02d%02d%02d",data->hour,data->minute,data->second); + } + + strcat(str,temp); +} + + +void print_date_to_string(char* str, const struct icaltimetype *data) +{ + char temp[20]; + + snprintf(temp,sizeof(temp),"%04d%02d%02d",data->year,data->month,data->day); + + strcat(str,temp); +} + +static char* icalvalue_date_as_ical_string(const icalvalue* value) { + + struct icaltimetype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_date(value); + + str = (char*)icalmemory_tmp_buffer(9); + + str[0] = 0; + print_date_to_string(str,&data); + + return str; +} + +void print_datetime_to_string(char* str, const struct icaltimetype *data) +{ + print_date_to_string(str,data); + if ( !data->is_date ) { + strcat(str,"T"); + print_time_to_string(str,data); + } +} + +static const char* icalvalue_datetime_as_ical_string(const icalvalue* value) { + + struct icaltimetype data; + char* str; + icalvalue_kind kind = icalvalue_isa(value); + + icalerror_check_arg_rz( (value!=0),"value"); + + + if( !(kind == ICAL_DATE_VALUE || kind == ICAL_DATETIME_VALUE )) + { + icalerror_set_errno(ICAL_BADARG_ERROR); + return 0; + } + + data = icalvalue_get_datetime(value); + + str = (char*)icalmemory_tmp_buffer(20); + + str[0] = 0; + + print_datetime_to_string(str,&data); + + return str; + +} + +static char* icalvalue_float_as_ical_string(const icalvalue* value) { + + float data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_float(value); + + str = (char*)icalmemory_tmp_buffer(40); + + snprintf(str,40,"%f",data); + + return str; +} + +static char* icalvalue_geo_as_ical_string(const icalvalue* value) { + + struct icalgeotype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + + data = icalvalue_get_geo(value); + + str = (char*)icalmemory_tmp_buffer(80); + + snprintf(str,80,"%f;%f",data.lat,data.lon); + + return str; +} + +static const char* icalvalue_datetimeperiod_as_ical_string(const icalvalue* value) { + struct icaldatetimeperiodtype dtp = icalvalue_get_datetimeperiod(value); + + icalerror_check_arg_rz( (value!=0),"value"); + + if(!icaltime_is_null_time(dtp.time)){ + return icaltime_as_ical_string(dtp.time); + } else { + return icalperiodtype_as_ical_string(dtp.period); + } +} + +static const char* icalvalue_period_as_ical_string(const icalvalue* value) { + struct icalperiodtype data; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_period(value); + + return icalperiodtype_as_ical_string(data); + +} + +static const char* icalvalue_trigger_as_ical_string(const icalvalue* value) { + + struct icaltriggertype data; + + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_trigger(value); + + if(!icaltime_is_null_time(data.time)){ + return icaltime_as_ical_string(data.time); + } else { + return icaldurationtype_as_ical_string(data.duration); + } + +} + +const char* +icalvalue_as_ical_string(const icalvalue* value) +{ + if(value == 0){ + return 0; + } + + switch (value->kind){ + + case ICAL_ATTACH_VALUE: + return icalvalue_attach_as_ical_string(value); + + case ICAL_BINARY_VALUE: + return icalvalue_binary_as_ical_string(value); + + case ICAL_BOOLEAN_VALUE: + case ICAL_INTEGER_VALUE: + return icalvalue_int_as_ical_string(value); + + case ICAL_UTCOFFSET_VALUE: + return icalvalue_utcoffset_as_ical_string(value); + + case ICAL_TEXT_VALUE: + return icalvalue_text_as_ical_string(value); + + case ICAL_QUERY_VALUE: + return icalvalue_string_as_ical_string(value); + + case ICAL_STRING_VALUE: + case ICAL_URI_VALUE: + case ICAL_CALADDRESS_VALUE: + return icalvalue_string_as_ical_string(value); + + case ICAL_DATE_VALUE: + return icalvalue_date_as_ical_string(value); + case ICAL_DATETIME_VALUE: + return icalvalue_datetime_as_ical_string(value); + case ICAL_DURATION_VALUE: + return icalvalue_duration_as_ical_string(value); + + case ICAL_PERIOD_VALUE: + return icalvalue_period_as_ical_string(value); + case ICAL_DATETIMEPERIOD_VALUE: + return icalvalue_datetimeperiod_as_ical_string(value); + + case ICAL_FLOAT_VALUE: + return icalvalue_float_as_ical_string(value); + + case ICAL_GEO_VALUE: + return icalvalue_geo_as_ical_string(value); + + case ICAL_RECUR_VALUE: + return icalvalue_recur_as_ical_string(value); + + case ICAL_TRIGGER_VALUE: + return icalvalue_trigger_as_ical_string(value); + + case ICAL_REQUESTSTATUS_VALUE: + return icalreqstattype_as_string(value->data.v_requeststatus); + + case ICAL_ACTION_VALUE: + case ICAL_METHOD_VALUE: + case ICAL_STATUS_VALUE: + case ICAL_TRANSP_VALUE: + case ICAL_CLASS_VALUE: + if(value->x_value !=0){ + return icalmemory_tmp_copy(value->x_value); + } + + return icalproperty_enum_to_string(value->data.v_enum); + + case ICAL_X_VALUE: + if (value->x_value != 0) + return icalmemory_tmp_copy(value->x_value); + + /* FALLTHRU */ + + case ICAL_NO_VALUE: + default: + { + return 0; + } + } +} + + +icalvalue_kind +icalvalue_isa (const icalvalue* value) +{ + if(value == 0){ + return ICAL_NO_VALUE; + } + + return value->kind; +} + + +int +icalvalue_isa_value (void* value) +{ + struct icalvalue_impl *impl = (struct icalvalue_impl *)value; + + icalerror_check_arg_rz( (value!=0), "value"); + + if (strcmp(impl->id,"val") == 0) { + return 1; + } else { + return 0; + } +} + + +static int icalvalue_is_time(const icalvalue* a) { + icalvalue_kind kind = icalvalue_isa(a); + + if(kind == ICAL_DATETIME_VALUE || + kind == ICAL_DATE_VALUE ){ + return 1; + } + + return 0; + +} + +/* + * In case of error, this function returns 0. This is partly bogus, as 0 is + * not part of the returned enum. + * FIXME We should probably add an error value to the enum. + */ +icalparameter_xliccomparetype +icalvalue_compare(const icalvalue* a, const icalvalue *b) +{ + + icalerror_check_arg_rz( (a!=0), "a"); + icalerror_check_arg_rz( (b!=0), "b"); + + /* Not the same type; they can only be unequal */ + if( ! (icalvalue_is_time(a) && icalvalue_is_time(b)) && + icalvalue_isa(a) != icalvalue_isa(b)){ + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + switch (icalvalue_isa(a)){ + + case ICAL_ATTACH_VALUE: + { + if (icalattach_get_is_url(a->data.v_attach) && + icalattach_get_is_url(b->data.v_attach)) { + if (strcasecmp(icalattach_get_url(a->data.v_attach), + icalattach_get_url(b->data.v_attach)) == 0) + return ICAL_XLICCOMPARETYPE_EQUAL; + else + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + else { + if (a->data.v_attach == b->data.v_attach) + return ICAL_XLICCOMPARETYPE_EQUAL; + else + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + } + case ICAL_BINARY_VALUE: + { + if (a->data.v_attach == b->data.v_attach) + return ICAL_XLICCOMPARETYPE_EQUAL; + else + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + case ICAL_BOOLEAN_VALUE: + { + if (icalvalue_get_boolean(a) == icalvalue_get_boolean(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + } + + case ICAL_FLOAT_VALUE: + { + if (a->data.v_float > b->data.v_float){ + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (a->data.v_float < b->data.v_float){ + return ICAL_XLICCOMPARETYPE_LESS; + } else { + return ICAL_XLICCOMPARETYPE_EQUAL; + } + } + + case ICAL_INTEGER_VALUE: + case ICAL_UTCOFFSET_VALUE: + { + if (a->data.v_int > b->data.v_int){ + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (a->data.v_int < b->data.v_int){ + return ICAL_XLICCOMPARETYPE_LESS; + } else { + return ICAL_XLICCOMPARETYPE_EQUAL; + } + } + + case ICAL_DURATION_VALUE: + { + int dur_a = icaldurationtype_as_int(a->data.v_duration); + int dur_b = icaldurationtype_as_int(b->data.v_duration); + + if (dur_a > dur_b){ + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (dur_a < dur_b){ + return ICAL_XLICCOMPARETYPE_LESS; + } else { + return ICAL_XLICCOMPARETYPE_EQUAL; + } + } + + + case ICAL_TEXT_VALUE: + case ICAL_URI_VALUE: + case ICAL_CALADDRESS_VALUE: + case ICAL_TRIGGER_VALUE: + case ICAL_DATE_VALUE: + case ICAL_DATETIME_VALUE: + case ICAL_DATETIMEPERIOD_VALUE: + case ICAL_QUERY_VALUE: + case ICAL_RECUR_VALUE: + { + int r; + + r = strcmp(icalvalue_as_ical_string(a), + icalvalue_as_ical_string(b)); + + if (r > 0) { + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (r < 0){ + return ICAL_XLICCOMPARETYPE_LESS; + } else { + return ICAL_XLICCOMPARETYPE_EQUAL; + } + + + } + + case ICAL_METHOD_VALUE: + { + if (icalvalue_get_method(a) == icalvalue_get_method(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + } + + case ICAL_STATUS_VALUE: + { + if (icalvalue_get_status(a) == icalvalue_get_status(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + } + + case ICAL_TRANSP_VALUE: + { + if (icalvalue_get_transp(a) == icalvalue_get_transp(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + } + + case ICAL_ACTION_VALUE: + { + if (icalvalue_get_action(a) == icalvalue_get_action(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + } + + case ICAL_PERIOD_VALUE: + case ICAL_GEO_VALUE: + case ICAL_NO_VALUE: + default: + { + icalerror_warn("Comparison not implemented for value type"); + return 0; + } + } + +} + +/** Examine the value and possibly change the kind to agree with the + * value + */ + +void icalvalue_reset_kind(icalvalue* value) +{ + if( (value->kind==ICAL_DATETIME_VALUE || value->kind==ICAL_DATE_VALUE )&& + !icaltime_is_null_time(value->data.v_time) ) { + + if(icaltime_is_date(value->data.v_time)){ + value->kind = ICAL_DATE_VALUE; + } else { + value->kind = ICAL_DATETIME_VALUE; + } + } + +} + +void icalvalue_set_parent(icalvalue* value, + icalproperty* property) +{ + value->parent = property; +} + +icalproperty* icalvalue_get_parent(icalvalue* value) +{ + return value->parent; +} + + +int icalvalue_encode_ical_string(const char *szText, char *szEncText, int nMaxBufferLen) +{ + char *ptr; + icalvalue *value = 0; + + if ((szText == 0) || (szEncText == 0)) + return 0; + + value = icalvalue_new_from_string(ICAL_STRING_VALUE, szText); + + if (value == 0) + return 0; + + ptr = icalvalue_text_as_ical_string(value); + if (ptr == 0) + return 0; + + if ((int)strlen(ptr) >= nMaxBufferLen) + { + icalvalue_free (value); + return 0; + } + + strcpy(szEncText, ptr); + + icalvalue_free ((icalvalue*)value); + + return 1; +} + +/* The remaining interfaces are 'new', 'set' and 'get' for each of the value + types */ diff --git a/libkcal/libical/src/libical/icalvalue.h b/libkcal/libical/src/libical/icalvalue.h new file mode 100644 index 000000000..96b970430 --- /dev/null +++ b/libkcal/libical/src/libical/icalvalue.h @@ -0,0 +1,87 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.h + CREATOR: eric 20 March 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalvalue.h + + ======================================================================*/ + +#ifndef ICALVALUE_H +#define ICALVALUE_H + +#include <time.h> +#include "icalenums.h" +#include "icaltypes.h" +#include "icalrecur.h" +#include "icalduration.h" +#include "icalperiod.h" +#include "icalderivedproperty.h" /* For icalproperty_method, etc. */ +#include "icalderivedparameter.h" +#include "icalderivedvalue.h" + +/* Defined in icalderivedvalue.h */ +/*typedef struct icalvalue_impl icalvalue;*/ + +icalvalue* icalvalue_new(icalvalue_kind kind); + +icalvalue* icalvalue_new_clone(const icalvalue* value); + +icalvalue* icalvalue_new_from_string(icalvalue_kind kind, const char* str); + +void icalvalue_free(icalvalue* value); + +int icalvalue_is_valid(const icalvalue* value); + +const char* icalvalue_as_ical_string(const icalvalue* value); + +icalvalue_kind icalvalue_isa(const icalvalue* value); + +int icalvalue_isa_value(void*); + +icalparameter_xliccomparetype icalvalue_compare(const icalvalue* a, const icalvalue *b); + + +/* Special, non autogenerated value accessors */ + +icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); +void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); +struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); + +icalvalue* icalvalue_new_trigger (struct icaltriggertype v); +void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); +struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); + +icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); +void icalvalue_set_datetimeperiod(icalvalue* value, + struct icaldatetimeperiodtype v); +struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); + +/* Convert enumerations */ + +icalvalue_kind icalvalue_string_to_kind(const char* str); +const char* icalvalue_kind_to_string(const icalvalue_kind kind); + +/** Check validity of a specific icalvalue_kind **/ +int icalvalue_kind_is_valid(const icalvalue_kind kind); + +/** Encode a character string in ical format, esacpe certain characters, etc. */ +int icalvalue_encode_ical_string(const char *szText, char *szEncText, int MaxBufferLen); + +#endif /*ICALVALUE_H*/ diff --git a/libkcal/libical/src/libical/icalvalueimpl.h b/libkcal/libical/src/libical/icalvalueimpl.h new file mode 100644 index 000000000..545c8fa70 --- /dev/null +++ b/libkcal/libical/src/libical/icalvalueimpl.h @@ -0,0 +1,95 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.c + CREATOR: eric 02 May 1999 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The original code is icalvalue.c + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifndef ICALVALUEIMPL_H +#define ICALVALUEIMPL_H + +#include "icalenums.h" +#include "icalproperty.h" +#include "icalderivedvalue.h" + + +struct icalvalue_impl { + icalvalue_kind kind; /*this is the kind that is visible from the outside*/ + + char id[5]; + int size; + icalproperty* parent; + char* x_value; + + union data { + icalattach *v_attach; + /* void *v_binary; */ /* use v_attach */ + const char *v_string; + /*char *v_text;*/ + /*char *v_caladdress;*/ + /*char *v_uri;*/ + float v_float; + int v_int; + /*int v_boolean;*/ + /*int v_integer;*/ + struct icaldurationtype v_duration; + /*int v_utcoffset;*/ + + struct icalperiodtype v_period; + /*struct icalperiodtype v_datetimeperiod;*/ + struct icalgeotype v_geo; + /*time_t v_time;*/ + struct icaltimetype v_time; + /*struct icaltimetype v_date;*/ + /*struct icaltimetype v_datetime;*/ + /*struct icaltimetype v_datetimedate;*/ + + struct icalreqstattype v_requeststatus; + + /* struct icalrecurrencetype was once included + directly ( not referenced ) in this union, but it + contributes 2000 bytes to every value, so now it is + a reference*/ + + struct icalrecurrencetype *v_recur; + struct icaltriggertype v_trigger; + + int v_enum; + /* v_enum takes care of several enumerated types including: + icalproperty_method v_method; + icalproperty_status v_status; + icalproperty_action v_action; + icalproperty_class v_class; + icalproperty_transp v_transp; + */ + + } data; +}; + +#endif diff --git a/libkcal/libical/src/libical/icalversion.h b/libkcal/libical/src/libical/icalversion.h new file mode 100644 index 000000000..c4b1d15ef --- /dev/null +++ b/libkcal/libical/src/libical/icalversion.h @@ -0,0 +1,7 @@ +#ifndef ICAL_VERSION_H +#define ICAL_VERSION_H + +#define ICAL_PACKAGE "libical" +#define ICAL_VERSION "0.24" + +#endif diff --git a/libkcal/libical/src/libical/icalversion.h.in b/libkcal/libical/src/libical/icalversion.h.in new file mode 100644 index 000000000..5d213693e --- /dev/null +++ b/libkcal/libical/src/libical/icalversion.h.in @@ -0,0 +1,7 @@ +#ifndef ICAL_VERSION_H +#define ICAL_VERSION_H + +#define ICAL_PACKAGE "@PACKAGE@" +#define ICAL_VERSION "@VERSION@" + +#endif diff --git a/libkcal/libical/src/libical/pvl.c b/libkcal/libical/src/libical/pvl.c new file mode 100644 index 000000000..d663eaab7 --- /dev/null +++ b/libkcal/libical/src/libical/pvl.c @@ -0,0 +1,585 @@ +/*====================================================================== + FILE: pvl.c + CREATOR: eric November, 1995 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "pvl.h" +#include <errno.h> +#include <assert.h> +#include <stdlib.h> + +/** + struct pvl_list_t + + The list structure. This is the hanlde for the entire list + + This type is also private. Use pvl_list instead + + */ + +typedef struct pvl_list_t +{ + int MAGIC; /**< Magic Identifier */ + struct pvl_elem_t *head; /**< Head of list */ + struct pvl_elem_t *tail; /**< Tail of list */ + int count; /**< Number of items in the list */ + struct pvl_elem_t *p; /**< Pointer used for iterators */ +} pvl_list_t; + + + + +/** + * This global is incremented for each call to pvl_new_element(); it gives each + * list a unique identifer + */ + +int pvl_elem_count = 0; +int pvl_list_count = 0; + + +/** + * @brief Creates a new list, clears the pointers and assigns a magic number + * + * @return Pointer to the new list, 0 if there is no available memory. + */ + +pvl_list +pvl_newlist() +{ + struct pvl_list_t *L; + + if ( ( L = (struct pvl_list_t*)malloc(sizeof(struct pvl_list_t))) == 0) + { + errno = ENOMEM; + return 0; + } + + L->MAGIC = pvl_list_count; + pvl_list_count++; + L->head = 0; + L->tail = 0; + L->count = 0; + L->p = 0; + + return L; +} + +void +pvl_free(pvl_list l) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + + pvl_clear(l); + + free(L); +} + +/** + * @brief Creates a new list element, assigns a magic number, and assigns + * the next and previous pointers. + * + * Passing in the next and previous points may seem odd, but it allos the user + * to set them while keeping the internal data hidden. In nearly all cases, + * the user is the pvl library itself. + * + * @param d The data item to be stored in the list + * @param next Pointer value to assign to the member "next" + * @param prior Pointer value to assign to the member "prior" + * + * @return A pointer to the new element, 0 if there is no memory available. + */ + +pvl_elem +pvl_new_element(void *d, pvl_elem next, pvl_elem prior) +{ + struct pvl_elem_t *E; + + if ( ( E = (struct pvl_elem_t*)malloc(sizeof(struct pvl_elem_t))) == 0) + { + errno = ENOMEM; + return 0; + } + + E->MAGIC = pvl_elem_count++; + E->d = d; + E->next = next; + E->prior = prior; + + return (pvl_elem)E; +} + +/** + * @brief Add a new element to the from of the list + * + * @param L The list to add the item to + * @param d Pointer to the item to add + */ + +void +pvl_unshift(pvl_list L,void *d) +{ + struct pvl_elem_t *E = pvl_new_element(d,L->head,0); + + if (E->next != 0) + { + /* Link the head node to it */ + E->next->prior = E; + } + + /* move the head */ + L->head = E; + + /* maybe move the tail */ + + if (L->tail == 0) + { + L->tail = E; + } + + L->count++; +} + +/** + * @brief Remove an element from the front of the list + * + * @param L The list to operate on + * + * @return the entry on the front of the list + */ + +void* +pvl_shift(pvl_list L) +{ + if (L->head == 0) + { + return 0; + } + + return pvl_remove(L,(void*)L->head); + +} + +/** + * @brief Add a new item to the tail of the list + * + * @param L The list to operate on + * @param d Pointer to the item to add + * + */ + +void +pvl_push(pvl_list L,void *d) +{ + struct pvl_elem_t *E = pvl_new_element(d,0,L->tail); + + /* These are done in pvl_new_element + E->next = 0; + E->prior = L->tail; + */ + + if (L->tail != 0) + { + L->tail->next = E; + } + + if (L->head == 0) + { + L->head = E; + } + + L->tail = E; + + L->count++; + +} + +/** + * @brief Remove an element from the tail of the list + * + * @param L The list to operate on + */ + +void* +pvl_pop(pvl_list L) +{ + if ( L->tail == 0) + { + return 0; + } + + return pvl_remove(L,(void*) L->tail);; + +} + + +/** + * Add a new item to a list that is ordered by a comparison function. + * This routine assumes that the list is properly ordered. + * + * @param L The list to operate on + * @param f Pointer to a comparison function + * @param d Pointer to data to pass to the comparison function + */ + +void +pvl_insert_ordered(pvl_list L,pvl_comparef f,void *d) +{ + struct pvl_elem_t *P; + + L->count++; + + /* Empty list, add to head */ + + if(L->head == 0) + { + pvl_unshift(L,d); + return; + } + + /* smaller than head, add to head */ + + if ( ((*f)(d,L->head->d)) <= 0) + { + pvl_unshift(L,d); + return; + } + + /* larger than tail, add to tail */ + if ( (*f)(d,L->tail->d) >= 0) + { + pvl_push(L,d); + return; + } + + + /* Search for the first element that is smaller, and add before it */ + + for (P=L->head; P != 0; P = P->next) + { + if ( (*f)(P->d,d) >= 0) + { + pvl_insert_before(L,P,d); + return; + } + } + + /* badness, choke */ +#ifndef lint + assert(0); +#endif +} + +/** + * @brief Add a new item after the referenced element. + * @param L The list to operate on + * @param P The list element to add the item after + * @param d Pointer to the item to add. + */ + +void +pvl_insert_after(pvl_list L,pvl_elem P,void *d) +{ + struct pvl_elem_t *E = 0; + + L->count++; + + if (P == 0) + { + pvl_unshift(L,d); + return; + } + + if ( P == L->tail) + { + E = pvl_new_element(d,0,P); + L->tail = E; + E->prior->next = E; + } + else + { + E = pvl_new_element(d,P->next,P); + E->next->prior = E; + E->prior->next = E; + } +} + +/** + * @brief Add an item after a referenced item + * + * @param L The list to operate on + * @param P The list element to add the item before + * @param d Pointer to the data to be added. + */ + +void +pvl_insert_before(pvl_list L,pvl_elem P,void *d) +{ + struct pvl_elem_t *E = 0; + + L->count++; + + if (P == 0) + { + pvl_unshift(L,d); + return; + } + + if ( P == L->head) + { + E = pvl_new_element(d,P,0); + E->next->prior = E; + L->head = E; + } + else + { + E = pvl_new_element(d,P,P->prior); + E->prior->next = E; + E->next->prior = E; + } +} + +/** + * @brief Remove the referenced item from the list. + * + * This routine will free the element, but not the data item that the + * element contains. + * + * @param L The list to operate on + * @param E The element to remove. + */ + +void* +pvl_remove(pvl_list L,pvl_elem E) +{ + void* data; + + if (E == L->head) + { + if (E->next != 0) + { + E->next->prior = 0; + L->head = E->next; + } else { + /* E Also points to tail -> only one element in list */ + L->tail = 0; + L->head = 0; + } + } + else if (E == L->tail) + { + if (E->prior != 0) + { + E->prior->next = 0; + L->tail = E->prior; + } else { + /* E points to the head, so it was the last element */ + /* This case should be taken care of in the previous clause */ + L->head = 0; + L->tail = 0; + } + } + else + { + E->prior->next = E->next; + E->next->prior = E->prior; + } + + + L->count--; + + data = E->d; + + E->prior = 0; + E->next = 0; + E->d = 0; + + free(E); + + return data; + +} + +/** + * @brief Return a pointer to data that satisfies a function. + * + * This routine will interate through the entire list and call the + * find function for each item. It will break and return a pointer to the + * data that causes the find function to return 1. + * + * @param l The list to operate on + * @param f Pointer to the find function + * @param v Pointer to constant data to pass into the function + * + * @return Pointer to the element that the find function found. + */ + +pvl_elem +pvl_find(pvl_list l,pvl_findf f,void* v) +{ + pvl_elem e; + + for (e=pvl_head(l); e!= 0; e = pvl_next(e)) + { + if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) + { + /* Save this elem for a call to find_next */ + ((struct pvl_list_t *)l)->p = e; + return e; + } + } + + return 0; + +} + +/** + * @brief Like pvl_find(), but continues the search where the last find() or + * find_next() left off. + * + * @param l The list to operate on + * @param f Pointer to the find function + * @param v Pointer to constant data to pass into the function + * + * @return Pointer to the element that the find function found. + */ + +pvl_elem +pvl_find_next(pvl_list l,pvl_findf f,void* v) +{ + + pvl_elem e; + + for (e=pvl_head(l); e!= 0; e = pvl_next(e)) + { + if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) + { + /* Save this elem for a call to find_next */ + ((struct pvl_list_t *)l)->p = e; + return e; + } + } + + return 0; + +} + +/** + * @brief Remove the all the elements in the list. The does not free + * the data items the elements hold. + */ + +void +pvl_clear(pvl_list l) +{ + pvl_elem e = pvl_head(l); + pvl_elem next; + + if (e == 0) { + return; + } + + while(e != 0) + { + next = pvl_next(e); + pvl_remove(l,e); + e = next; + } +} + + +/** + * @brief Returns the number of items in the list. + */ + +int +pvl_count(pvl_list L) +{ + return L->count; +} + + +/** + * @brief Returns a pointer to the given element + */ + +pvl_elem +pvl_next(pvl_elem E) +{ + if (E == 0){ + return 0; + } + + return (pvl_elem)E->next; +} + + +/** + * @brief Returns a pointer to the element previous to the element given. + */ + +pvl_elem +pvl_prior(pvl_elem E) +{ + return (pvl_elem)E->prior; +} + + +/** + * @brief Returns a pointer to the first item in the list. + */ + +pvl_elem +pvl_head(pvl_list L ) +{ + return (pvl_elem)L->head; +} + +/** + * @brief Returns a pointer to the last item in the list. + */ +pvl_elem +pvl_tail(pvl_list L) +{ + return (pvl_elem)L->tail; +} + +#ifndef PVL_USE_MACROS +void* +pvl_data(pvl_elem E) +{ + if ( E == 0){ + return 0; + } + + return E->d; +} +#endif + +/** + * @brief Call a function for every item in the list. + * + * @param l The list to operate on + * @param f Pointer to the function to call + * @param v Data to pass to the function on every iteration + */ + +void +pvl_apply(pvl_list l,pvl_applyf f, void *v) +{ + pvl_elem e; + + for (e=pvl_head(l); e!= 0; e = pvl_next(e)) + { + (*f)(((struct pvl_elem_t *)e)->d,v); + } + +} diff --git a/libkcal/libical/src/libical/pvl.h b/libkcal/libical/src/libical/pvl.h new file mode 100644 index 000000000..cb306ae6f --- /dev/null +++ b/libkcal/libical/src/libical/pvl.h @@ -0,0 +1,98 @@ +/*====================================================================== + FILE: pvl.h + CREATOR: eric November, 1995 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org +======================================================================*/ + + +#ifndef __PVL_H__ +#define __PVL_H__ + +typedef struct pvl_list_t* pvl_list; +typedef struct pvl_elem_t* pvl_elem; + +/** + * This type is private. Always use pvl_elem instead. The struct would + * not even appear in this header except to make code in the USE_MACROS + * blocks work + */ + +typedef struct pvl_elem_t +{ + int MAGIC; /**< Magic Identifier */ + void *d; /**< Pointer to data user is storing */ + struct pvl_elem_t *next; /**< Next element */ + struct pvl_elem_t *prior; /**< Prior element */ +} pvl_elem_t; + + + +/** + * This global is incremented for each call to pvl_new_element(); it gives each + * list a unique identifer + */ + +extern int pvl_elem_count; +extern int pvl_list_count; + +/* Create new lists or elements */ +pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior); +pvl_list pvl_newlist(void); +void pvl_free(pvl_list); + +/* Add, remove, or get the head of the list */ +void pvl_unshift(pvl_list l,void *d); +void* pvl_shift(pvl_list l); +pvl_elem pvl_head(pvl_list); + +/* Add, remove or get the tail of the list */ +void pvl_push(pvl_list l,void *d); +void* pvl_pop(pvl_list l); +pvl_elem pvl_tail(pvl_list); + +/* Insert elements in random places */ +typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/ +void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d); +void pvl_insert_after(pvl_list l,pvl_elem e,void *d); +void pvl_insert_before(pvl_list l,pvl_elem e,void *d); + +/* Remove an element, or clear the entire list */ +void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */ +void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */ + +int pvl_count(pvl_list); + +/* Navagate the list */ +pvl_elem pvl_next(pvl_elem e); +pvl_elem pvl_prior(pvl_elem e); + +/* get the data in the list */ +#ifndef PVL_USE_MACROS +void* pvl_data(pvl_elem); +#else +#define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d; +#endif + + +/* Find an element for which a function returns true */ +typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/ +pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v); +pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v); + +/** + * Pass each element in the list to a function + * a is list elem, b is other data + */ +typedef void (*pvl_applyf)(void* a, void* b); +void pvl_apply(pvl_list l,pvl_applyf f, void *v); + + +#endif /* __PVL_H__ */ + + + + + diff --git a/libkcal/libical/src/libical/sspm.c b/libkcal/libical/src/libical/sspm.c new file mode 100644 index 000000000..61237cb31 --- /dev/null +++ b/libkcal/libical/src/libical/sspm.c @@ -0,0 +1,1630 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: sspm.c Parse Mime + CREATOR: eric 25 June 2000 + + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + ======================================================================*/ + +#include <stdio.h> +#include <string.h> +#include "sspm.h" +#include <assert.h> +#include <ctype.h> /* for tolower */ +#include <stdlib.h> /* for malloc, free */ +#include <string.h> /* for strcasecmp */ + +#ifdef DMALLOC +#include "dmalloc.h" +#endif + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + +#define TMP_BUF_SIZE 1024 + + +enum mime_state { + UNKNOWN_STATE, + IN_HEADER, + END_OF_HEADER, + IN_BODY, + OPENING_PART, + END_OF_PART, + TERMINAL_END_OF_PART, + END_OF_INPUT +}; + +struct mime_impl{ + struct sspm_part *parts; + size_t max_parts; + int part_no; + int level; + struct sspm_action_map *actions; + char* (*get_string)(char *s, size_t size, void* data); + void* get_string_data; + char temp[TMP_BUF_SIZE]; + enum mime_state state; +}; + +void sspm_free_header(struct sspm_header *header); +void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header); +void sspm_read_header(struct mime_impl *impl,struct sspm_header *header); + +char* sspm_strdup(const char* str){ + + char* s; + + s = strdup(str); + + return s; +} + + +static struct major_content_type_map +{ + enum sspm_major_type type; + const char* str; + +} major_content_type_map[] = +{ + {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, + {SSPM_TEXT_MAJOR_TYPE,"text" }, + {SSPM_TEXT_MAJOR_TYPE,"text" }, + {SSPM_IMAGE_MAJOR_TYPE,"image" }, + {SSPM_AUDIO_MAJOR_TYPE,"audio" }, + {SSPM_VIDEO_MAJOR_TYPE,"video" }, + {SSPM_APPLICATION_MAJOR_TYPE,"application" }, + {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, + {SSPM_MESSAGE_MAJOR_TYPE,"message" }, + {SSPM_UNKNOWN_MAJOR_TYPE,"" }, +}; + +static struct minor_content_type_map +{ + enum sspm_minor_type type; + const char* str; + +} minor_content_type_map[] = +{ + {SSPM_ANY_MINOR_TYPE,"*" }, + {SSPM_PLAIN_MINOR_TYPE,"plain" }, + {SSPM_RFC822_MINOR_TYPE,"rfc822" }, + {SSPM_DIGEST_MINOR_TYPE,"digest" }, + {SSPM_CALENDAR_MINOR_TYPE,"calendar" }, + {SSPM_MIXED_MINOR_TYPE,"mixed" }, + {SSPM_RELATED_MINOR_TYPE,"related" }, + {SSPM_ALTERNATIVE_MINOR_TYPE,"alternative" }, + {SSPM_PARALLEL_MINOR_TYPE, "parallel" }, + {SSPM_UNKNOWN_MINOR_TYPE,"" } +}; + + + +struct encoding_map { + enum sspm_encoding encoding; + const char* str; +} sspm_encoding_map[] = +{ + {SSPM_NO_ENCODING,""}, + {SSPM_QUOTED_PRINTABLE_ENCODING,"quoted-printable"}, + {SSPM_8BIT_ENCODING,"8bit"}, + {SSPM_7BIT_ENCODING,"7bit"}, + {SSPM_BINARY_ENCODING,"binary"}, + {SSPM_BASE64_ENCODING,"base64"}, + {SSPM_UNKNOWN_ENCODING,""} + +}; + + +char* sspm_get_parameter(const char* line, const char* parameter) +{ + char *p,*s,*q; + static char name[1024]; + + /* Find where the parameter name is in the line */ + p = strstr(line,parameter); + + if( p == 0){ + return 0; + } + + /* skip over the parameter name, the '=' and any blank spaces */ + + p+=strlen(parameter); + + while(*p==' ' || *p == '='){ + p++; + } + + /*now find the next semicolon*/ + + s = strchr(p,';'); + + /* Strip of leading quote */ + q = strchr(p,'\"'); + + if(q !=0){ + p = q+1; + } + + if(s != 0){ + strncpy(name,p,(size_t)s-(size_t)p); + } else { + strcpy(name,p); + } + + /* Strip off trailing quote, if it exists */ + + q = strrchr(name,'\"'); + + if (q != 0){ + *q='\0'; + } + + return name; +} + +char* sspm_property_name(const char* line) +{ + static char name[1024]; + char *c = strchr(line,':'); + + if(c != 0){ + strncpy(name,line,(size_t)c-(size_t)line); + name[(size_t)c-(size_t)line] = '\0'; + return name; + } else { + return 0; + } +} + +char* sspm_value(char* line) +{ + static char value[1024]; + + char *c,*s, *p; + + /* Find the first colon and the next semicolon */ + + value[0] = 0; + c = strchr(line,':'); + if (!c) + return value; + s = strchr(c,';'); + + /* Skip the colon */ + c++; + + if (s == 0){ + s = c+strlen(line); + } + + for(p=value; c != s; c++){ + if(*c!=' ' && *c!='\n'){ + *(p++) = *c; + } + } + + *p='\0'; + + return value; + +} + +static const char *mime_headers[] = { + "Content-Type", + "Content-Transfer-Encoding", + "Content-Disposition", + "Content-Id", + "Mime-Version", + 0 +}; + + +void* sspm_default_new_part() +{ + return 0; +} +void sspm_default_add_line(void *part, struct sspm_header *header, + const char* line, size_t size) +{ + (void)part; + (void)header; + (void)line; + (void)size; +} + +void* sspm_default_end_part(void* part) +{ + (void)part; + return 0; +} + +void sspm_default_free_part(void *part) +{ + (void)part; +} + + + +struct sspm_action_map sspm_action_map[] = +{ + {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,sspm_default_new_part,sspm_default_add_line,sspm_default_end_part,sspm_default_free_part}, +}; + +int sspm_is_mime_header(char *line) +{ + char *name = sspm_property_name(line); + int i; + + if(name == 0){ + return 0; + } + + for(i = 0; mime_headers[i] != 0; i++){ + if(strcasecmp(name, mime_headers[i]) == 0) + return 1; + } + + return 0; +} + +int sspm_is_mail_header(char* line) +{ + char *name = sspm_property_name(line); + + if (name != 0){ + return 1; + } + + return 0; + +} + +int sspm_is_blank(char* line) +{ + char *p; + char c =0; + + for(p=line; *p!=0; p++){ + if( ! (*p == ' '|| *p == '\t' || *p=='\n') ){ + c++; + } + } + + if (c==0){ + return 1; + } + + return 0; + +} + +int sspm_is_continuation_line(char* line) +{ + if (line[0] == ' '|| line[0] == '\t' ) { + return 1; + } + + return 0; +} + +int sspm_is_mime_boundary(char *line) +{ + if( line[0] == '-' && line[1] == '-') { + return 1; + } + + return 0; +} + +int sspm_is_mime_terminating_boundary(char *line) +{ + + + if (sspm_is_mime_boundary(line) && + strstr(line,"--\n")){ + return 1; + } + + return 0; +} + +enum line_type { + EMPTY, + BLANK, + MIME_HEADER, + MAIL_HEADER, + HEADER_CONTINUATION, + BOUNDARY, + TERMINATING_BOUNDARY, + UNKNOWN_TYPE +}; + + +static enum line_type get_line_type(char* line){ + + if (line == 0){ + return EMPTY; + } else if(sspm_is_blank(line)){ + return BLANK; + } else if (sspm_is_mime_header(line)){ + return MIME_HEADER; + } else if (sspm_is_mail_header(line)){ + return MAIL_HEADER; + } else if (sspm_is_continuation_line(line)){ + return HEADER_CONTINUATION; + } else if (sspm_is_mime_terminating_boundary(line)){ + return TERMINATING_BOUNDARY; + } else if (sspm_is_mime_boundary(line)) { + return BOUNDARY; + } else { + return UNKNOWN_TYPE; + } + + +} + + +static struct sspm_action_map get_action(struct mime_impl *impl, + enum sspm_major_type major, + enum sspm_minor_type minor) +{ + int i; + + /* Read caller suppled action map */ + + if (impl->actions != 0){ + for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ + if((major == impl->actions[i].major && + minor == impl->actions[i].minor) || + (major == impl->actions[i].major && + minor == SSPM_ANY_MINOR_TYPE)){ + return impl->actions[i]; + } + } + } + + /* Else, read default action map */ + + for(i=0; sspm_action_map[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ + if((major == sspm_action_map[i].major && + minor == sspm_action_map[i].minor) || + (major == sspm_action_map[i].major && + minor == SSPM_ANY_MINOR_TYPE)){ + break; + } + } + + return sspm_action_map[i]; +} + + +char* sspm_lowercase(char* str) +{ + char* p = 0; + char* new = sspm_strdup(str); + + if(str ==0){ + return 0; + } + + for(p = new; *p!=0; p++){ + *p = tolower(*p); + } + + return new; +} + +enum sspm_major_type sspm_find_major_content_type(char* type) +{ + int i; + + char* ltype = sspm_lowercase(type); + + for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){ + if(strncmp(ltype, major_content_type_map[i].str, + strlen(major_content_type_map[i].str))==0){ + free(ltype); + return major_content_type_map[i].type; + } + } + free(ltype); + return major_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ +} + +enum sspm_minor_type sspm_find_minor_content_type(char* type) +{ + int i; + char* ltype = sspm_lowercase(type); + + char *p = strchr(ltype,'/'); + + if (p==0){ + return SSPM_UNKNOWN_MINOR_TYPE; + } + + p++; /* Skip the '/' */ + + for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){ + if(strncmp(p, minor_content_type_map[i].str, + strlen(minor_content_type_map[i].str))==0){ + free(ltype); + return minor_content_type_map[i].type; + } + } + + free(ltype); + return minor_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ +} + +const char* sspm_major_type_string(enum sspm_major_type type) +{ + int i; + + for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; + i++){ + + if(type == major_content_type_map[i].type){ + return major_content_type_map[i].str; + } + } + + return major_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ +} + +const char* sspm_minor_type_string(enum sspm_minor_type type) +{ + int i; + for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; + i++){ + if(type == minor_content_type_map[i].type){ + return minor_content_type_map[i].str; + } + } + + return minor_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ +} + + +const char* sspm_encoding_string(enum sspm_encoding type) +{ + int i; + for (i=0; sspm_encoding_map[i].encoding != SSPM_UNKNOWN_ENCODING; + i++){ + if(type == sspm_encoding_map[i].encoding){ + return sspm_encoding_map[i].str; + } + } + + return sspm_encoding_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ +} + +/* Interpret a header line and add its data to the header + structure. */ +void sspm_build_header(struct sspm_header *header, char* line) +{ + char *prop; + char *val; + + val = sspm_strdup(sspm_value(line)); + prop = sspm_strdup(sspm_property_name(line)); + + if(strcasecmp(prop,"Content-Type") == 0){ + + /* Create a new mime_header, fill in content-type + and possibly boundary */ + + char* boundary= sspm_get_parameter(line,"boundary"); + + header->def = 0; + header->major = sspm_find_major_content_type(val); + header->minor = sspm_find_minor_content_type(val); + + if(header->minor == SSPM_UNKNOWN_MINOR_TYPE){ + char *p = strchr(val,'/'); + + if (p != 0){ + p++; /* Skip the '/' */ + + header->minor_text = sspm_strdup(p); + } else { + /* Error, malformed content type */ + header->minor_text = sspm_strdup("unknown"); + } + } + if (boundary != 0){ + header->boundary = sspm_strdup(boundary); + } + + } else if(strcasecmp(prop,"Content-Transfer-Encoding")==0){ + char* encoding = sspm_value(line); + char* lencoding = sspm_lowercase(encoding); + + if(strcasecmp(lencoding,"base64")==0){ + header->encoding = SSPM_BASE64_ENCODING; + } else if(strcasecmp(lencoding,"quoted-printable")==0){ + header->encoding = SSPM_QUOTED_PRINTABLE_ENCODING; + } else if(strcasecmp(lencoding,"binary")==0){ + header->encoding = SSPM_BINARY_ENCODING; + } else if(strcasecmp(lencoding,"7bit")==0){ + header->encoding = SSPM_7BIT_ENCODING; + } else if(strcasecmp(lencoding,"8bit")==0){ + header->encoding = SSPM_8BIT_ENCODING; + } else { + header->encoding = SSPM_UNKNOWN_ENCODING; + } + + + free(lencoding); + + header->def = 0; + + } else if(strcasecmp(prop,"Content-Id")==0){ + char* cid = sspm_value(line); + header->content_id = sspm_strdup(cid); + header->def = 0; + + } + free(val); + free(prop); +} + +char* sspm_get_next_line(struct mime_impl *impl) +{ + char* s; + s = impl->get_string(impl->temp,TMP_BUF_SIZE,impl->get_string_data); + + if(s == 0){ + impl->state = END_OF_INPUT; + } + return s; +} + + +void sspm_store_part(struct mime_impl *impl, struct sspm_header header, + int level, void *part, size_t size) +{ + + impl->parts[impl->part_no].header = header; + impl->parts[impl->part_no].level = level; + impl->parts[impl->part_no].data = part; + impl->parts[impl->part_no].data_size = size; + impl->part_no++; +} + +void sspm_set_error(struct sspm_header* header, enum sspm_error error, + char* message) +{ + header->error = error; + + if(header->error_text!=0){ + free(header->error_text); + } + + header->def = 0; + + if(message != 0){ + header->error_text = sspm_strdup(message); + } else { + header->error_text = 0; + } + +} + +void* sspm_make_part(struct mime_impl *impl, + struct sspm_header *header, + struct sspm_header *parent_header, + void **end_part, + size_t *size) +{ + + /* For a single part type, read to the boundary, if there is a + boundary. Otherwise, read until the end of input. This routine + assumes that the caller has read the header and has left the input + at the first blank line */ + + char *line; + void *part; + int end = 0; + + struct sspm_action_map action = get_action( + impl, + header->major, + header->minor); + + *size = 0; + part =action.new_part(); + + impl->state = IN_BODY; + + while(end == 0 && (line = sspm_get_next_line(impl)) != 0){ + + if(sspm_is_mime_boundary(line)){ + + /* If there is a boundary, then this must be a multipart + part, so there must be a parent_header. */ + if(parent_header == 0){ + char* boundary; + end = 1; + *end_part = 0; + + sspm_set_error(header,SSPM_UNEXPECTED_BOUNDARY_ERROR,line); + + /* Read until the paired terminating boundary */ + if((boundary = (char*)malloc(strlen(line)+5)) == 0){ + fprintf(stderr,"Out of memory"); + abort(); + } + strcpy(boundary,line); + strcat(boundary,"--"); + while((line = sspm_get_next_line(impl)) != 0){ + /*printf("Error: %s\n",line);*/ + if(strcmp(boundary,line)==0){ + break; + } + } + free(boundary); + + break; + } + + if(strncmp((line+2),parent_header->boundary, + sizeof(parent_header->boundary)) == 0){ + *end_part = action.end_part(part); + + if(sspm_is_mime_boundary(line)){ + impl->state = END_OF_PART; + } else if ( sspm_is_mime_terminating_boundary(line)){ + impl->state = TERMINAL_END_OF_PART; + } + end = 1; + } else { + /* Error, this is not the correct terminating boundary*/ + + /* read and discard until we get the right boundary. */ + char* boundary; + char msg[256]; + + snprintf(msg,256, + "Expected: %s--. Got: %s", + parent_header->boundary,line); + + sspm_set_error(parent_header, + SSPM_WRONG_BOUNDARY_ERROR,msg); + + /* Read until the paired terminating boundary */ + if((boundary = (char*)malloc(strlen(line)+5)) == 0){ + fprintf(stderr,"Out of memory"); + abort(); + } + strcpy(boundary,line); + strcat(boundary,"--"); + while((line = sspm_get_next_line(impl)) != 0){ + if(strcmp(boundary,line)==0){ + break; + } + } + free(boundary); + + } + } else { + char* data=0; + char* rtrn=0; + *size = strlen(line); + + data = (char*)malloc(*size+2); + assert(data != 0); + if (header->encoding == SSPM_BASE64_ENCODING){ + rtrn = decode_base64(data,line,size); + } else if(header->encoding == SSPM_QUOTED_PRINTABLE_ENCODING){ + rtrn = decode_quoted_printable(data,line,size); + } + + if(rtrn == 0){ + strcpy(data,line); + } + + /* add a end-of-string after the data, just in case binary + data from decode64 gets passed to a tring handling + routine in add_line */ + data[*size+1]='\0'; + + action.add_line(part,header,data,*size); + + free(data); + } + } + + if (end == 0){ + /* End the part if the input is exhausted */ + *end_part = action.end_part(part); + } + + return end_part; +} + + +void* sspm_make_multipart_subpart(struct mime_impl *impl, + struct sspm_header *parent_header) +{ + struct sspm_header header; + char *line; + void* part; + size_t size; + + if(parent_header->boundary == 0){ + /* Error. Multipart headers must have a boundary*/ + + sspm_set_error(parent_header,SSPM_NO_BOUNDARY_ERROR,0); + /* read all of the reamining lines */ + while((line = sspm_get_next_line(impl)) != 0){ + } + + return 0; + } + + + /* Step 1: Read the opening boundary */ + + if(get_line_type(impl->temp) != BOUNDARY){ + while((line=sspm_get_next_line(impl)) != 0 ){ + if(sspm_is_mime_boundary(line)){ + + assert(parent_header != 0); + + /* Check if it is the right boundary */ + if(!sspm_is_mime_terminating_boundary(line) && + strncmp((line+2),parent_header->boundary, + sizeof(parent_header->boundary)) + == 0){ + /* The +2 in strncmp skips over the leading "--" */ + + break; + } else { + /* Got the wrong boundary, so read and discard + until we get the right boundary. */ + char* boundary; + char msg[256]; + + snprintf(msg,256, + "Expected: %s. Got: %s", + parent_header->boundary,line); + + sspm_set_error(parent_header, + SSPM_WRONG_BOUNDARY_ERROR,msg); + + /* Read until the paired terminating boundary */ + if((boundary = (char*)malloc(strlen(line)+5)) == 0){ + fprintf(stderr,"Out of memory"); + abort(); + } + strcpy(boundary,line); + strcat(boundary,"--"); + while((line = sspm_get_next_line(impl)) != 0){ + if(strcmp(boundary,line)==0){ + break; + } + } + free(boundary); + + return 0; + } + } + } + } + + /* Step 2: Get the part header */ + sspm_read_header(impl,&header); + + /* If the header is still listed as default, there was probably an + error */ + if(header.def == 1 && header.error != SSPM_NO_ERROR){ + sspm_set_error(&header,SSPM_NO_HEADER_ERROR,0); + return 0; + } + + if(header.error!= SSPM_NO_ERROR){ + sspm_store_part(impl,header,impl->level,0,0); + return 0; + } + + /* Step 3: read the body */ + + if(header.major == SSPM_MULTIPART_MAJOR_TYPE){ + struct sspm_header *child_header; + child_header = &(impl->parts[impl->part_no].header); + + /* Store the multipart part */ + sspm_store_part(impl,header,impl->level,0,0); + + /* now get all of the sub-parts */ + part = sspm_make_multipart_part(impl,child_header); + + if(get_line_type(impl->temp) != TERMINATING_BOUNDARY){ + + sspm_set_error(child_header,SSPM_NO_BOUNDARY_ERROR,impl->temp); + return 0; + } + + sspm_get_next_line(impl); /* Step past the terminating boundary */ + + } else { + sspm_make_part(impl, &header,parent_header,&part,&size); + + memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part)); + + sspm_store_part(impl,header,impl->level,part,size); + + } + + return part; +} + +void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header) +{ + void *part=0; + + /* Now descend a level into each of the children of this part */ + impl->level++; + + /* Now we are working on the CHILD */ + memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part)); + + do{ + part = sspm_make_multipart_subpart(impl,header); + + if (part==0){ + /* Clean up the part in progress */ + impl->parts[impl->part_no].header.major + = SSPM_NO_MAJOR_TYPE; + impl->parts[impl->part_no].header.minor + = SSPM_NO_MINOR_TYPE; + + } + + + } while (get_line_type(impl->temp) != TERMINATING_BOUNDARY && + impl->state != END_OF_INPUT); + + impl->level--; + + return 0; +} + + +void sspm_read_header(struct mime_impl *impl,struct sspm_header *header) +{ +#define BUF_SIZE 1024 +#define MAX_HEADER_LINES 25 + + char *buf; + char header_lines[MAX_HEADER_LINES][BUF_SIZE]; /* HACK, hard limits */ + int current_line = -1; + int end = 0; + + memset(header_lines,0,sizeof(header_lines)); + memset(header,0,sizeof(struct sspm_header)); + + /* Set up default header */ + header->def = 1; + header->major = SSPM_TEXT_MAJOR_TYPE; + header->minor = SSPM_PLAIN_MINOR_TYPE; + header->error = SSPM_NO_ERROR; + header->error_text = 0; + + /* Read all of the lines into memory */ + while(end==0&& (buf=sspm_get_next_line(impl)) != 0){ + + enum line_type line_type = get_line_type(buf); + + switch(line_type){ + case BLANK: { + end = 1; + impl->state = END_OF_HEADER; + break; + } + + case MAIL_HEADER: + case MIME_HEADER: { + impl->state = IN_HEADER; + current_line++; + + assert(strlen(buf) < BUF_SIZE); + + strncpy(header_lines[current_line],buf,BUF_SIZE); + header_lines[current_line][BUF_SIZE-1] = '\0'; + + break; + } + + case HEADER_CONTINUATION: { + char* last_line, *end; + char *buf_start; + + if(current_line < 0){ + /* This is not really a continuation line, since + we have not see any header line yet */ + sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf); + return; + } + + last_line = header_lines[current_line]; + end = (char*) ( (size_t)strlen(last_line)+ + (size_t)last_line); + + impl->state = IN_HEADER; + + + /* skip over the spaces in buf start, and remove the new + line at the end of the lat line */ + if (last_line[strlen(last_line)-1] == '\n'){ + last_line[strlen(last_line)-1] = '\0'; + } + buf_start = buf; + while(*buf_start == ' ' ||*buf_start == '\t' ){ + buf_start++; + } + + assert( strlen(buf_start) + strlen(last_line) < BUF_SIZE); + + strncat(last_line,buf_start, BUF_SIZE-strlen(last_line)-1); + + break; + } + + default: { + sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf); + return; + } + } + } + + + for(current_line = 0; + current_line < MAX_HEADER_LINES && header_lines[current_line][0] != 0; + current_line++){ + + sspm_build_header(header,header_lines[current_line]); + } + + +} + +/* Root routine for parsing mime entries*/ +int sspm_parse_mime(struct sspm_part *parts, + size_t max_parts, + struct sspm_action_map *actions, + char* (*get_string)(char *s, size_t size, void* data), + void *get_string_data, + struct sspm_header *first_header + ) +{ + struct mime_impl impl; + struct sspm_header header; + void *part; + int i; + (void)first_header; + + /* Initialize all of the data */ + memset(&impl,0,sizeof(struct mime_impl)); + memset(&header,0,sizeof(struct sspm_header)); + + for(i = 0; i<(int)max_parts; i++){ + parts[i].header.major = SSPM_NO_MAJOR_TYPE; + parts[i].header.minor = SSPM_NO_MINOR_TYPE; + } + + impl.parts = parts; + impl.max_parts = max_parts; + impl.part_no = 0; + impl.actions = actions; + impl.get_string = get_string; + impl.get_string_data = get_string_data; + + /* Read the header of the message. This will be the email header, + unless first_header is specified. But ( HACK) that var is not + currently being used */ + sspm_read_header(&impl,&header); + + if(header.major == SSPM_MULTIPART_MAJOR_TYPE){ + struct sspm_header *child_header; + child_header = &(impl.parts[impl.part_no].header); + + sspm_store_part(&impl,header,impl.level,0,0); + + part = sspm_make_multipart_part(&impl,child_header); + + } else { + void *part; + size_t size; + sspm_make_part(&impl, &header, 0,&part,&size); + + memset(&(impl.parts[impl.part_no]), 0, sizeof(struct sspm_part)); + + sspm_store_part(&impl,header,impl.level,part,size); + } + + return 0; +} + +void sspm_free_parts(struct sspm_part *parts, size_t max_parts) +{ + int i; + + for(i = 0; i<(int)max_parts && parts[i].header.major != SSPM_NO_MAJOR_TYPE; + i++){ + sspm_free_header(&(parts[i].header)); + } +} + +void sspm_free_header(struct sspm_header *header) +{ + if(header->boundary!=0){ + free(header->boundary); + } + if(header->minor_text!=0){ + free(header->minor_text); + } + if(header->charset!=0){ + free(header->charset); + } + if(header->filename!=0){ + free(header->filename); + } + if(header->content_id!=0){ + free(header->content_id); + } + if(header->error_text!=0){ + free(header->error_text); + } +} + +/*********************************************************************** +The remaining code is beased on code from the mimelite distribution, +which has the following notice: + +| Authorship: +| Copyright (c) 1994 Gisle Hannemyr. +| Permission is granted to hack, make and distribute copies of this +| program as long as this copyright notice is not removed. +| Flames, bug reports, comments and improvements to: +| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway +| email: Inet: gisle@oslonett.no + +The code is heavily modified by Eric Busboom. + +***********************************************************************/ + +char *decode_quoted_printable(char *dest, + char *src, + size_t *size) +{ + int cc; + size_t i=0; + + while (*src != 0 && i < *size) { + if (*src == '=') { + + src++; + if (!*src) { + break; + } + + /* remove soft line breaks*/ + if ((*src == '\n') || (*src == '\r')){ + src++; + if ((*src == '\n') || (*src == '\r')){ + src++; + } + continue; + } + + cc = isdigit(*src) ? (*src - '0') : (*src - 55); + cc *= 0x10; + src++; + if (!*src) { + break; + } + cc += isdigit(*src) ? (*src - '0') : (*src - 55); + + *dest = cc; + + } else { + *dest = *src; + } + + dest++; + src++; + i++; + } + + *dest = '\0'; + + *size = i; + return(dest); +} + +char *decode_base64(char *dest, + char *src, + size_t *size) +{ + int cc = 0; + char buf[4] = {0,0,0,0}; + int p = 0; + int valid_data = 0; + size_t size_out=0; + + while (*src && p<(int)*size && (cc!= -1)) { + + /* convert a character into the Base64 alphabet */ + cc = *src++; + + if ((cc >= 'A') && (cc <= 'Z')) cc = cc - 'A'; + else if ((cc >= 'a') && (cc <= 'z')) cc = cc - 'a' + 26; + else if ((cc >= '0') && (cc <= '9')) cc = cc - '0' + 52; + else if (cc == '/') cc = 63; + else if (cc == '+') cc = 62; + else cc = -1; + + assert(cc<64); + + /* If we've reached the end, fill the remaining slots in + the bucket and do a final conversion */ + if(cc== -1){ + if(valid_data == 0){ + return 0; + } + + while(p%4!=3){ + p++; + buf[p%4] = 0; + } + } else { + buf[p%4] = cc; + size_out++; + valid_data = 1; + } + + + /* When we have 4 base64 letters, convert them into three + bytes */ + if (p%4 == 3) { + *dest++ =(buf[0]<< 2)|((buf[1] & 0x30) >> 4); + *dest++ =((buf[1] & 0x0F) << 4)|((buf[2] & 0x3C) >> 2); + *dest++ =((buf[2] & 0x03) << 6)|(buf[3] & 0x3F); + + memset(buf,0,4); + } + + p++; + + } + /* Calculate the size of the converted data*/ + *size = ((int)(size_out/4))*3; + if(size_out%4 == 2) *size+=1; + if(size_out%4 == 3) *size+=2; + + return(dest); +} + + +/*********************************************************************** + + Routines to output MIME + +**********************************************************************/ + + +struct sspm_buffer { + char* buffer; + char* pos; + size_t buf_size; + int line_pos; +}; + +void sspm_append_string(struct sspm_buffer* buf, const char* string); +void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part, int *part_num); + +void sspm_append_hex(struct sspm_buffer* buf, char ch) +{ + char tmp[4]; + + snprintf(tmp,sizeof(tmp),"=%02X",ch); + + sspm_append_string(buf,tmp); +} + +/* a copy of icalmemory_append_char */ +void sspm_append_char(struct sspm_buffer* buf, char ch) +{ + char *new_buf; + char *new_pos; + + size_t data_length, final_length; + + data_length = (size_t)buf->pos - (size_t)buf->buffer; + + final_length = data_length + 2; + + if ( final_length > (size_t) buf->buf_size ) { + + buf->buf_size = (buf->buf_size) * 2 + final_length +1; + + new_buf = realloc(buf->buffer,buf->buf_size); + + new_pos = (void*)((size_t)new_buf + data_length); + + buf->pos = new_pos; + buf->buffer = new_buf; + } + + *(buf->pos) = ch; + buf->pos += 1; + *(buf->pos) = 0; +} +/* A copy of icalmemory_append_string */ +void sspm_append_string(struct sspm_buffer* buf, const char* string) +{ + char *new_buf; + char *new_pos; + + size_t data_length, final_length, string_length; + + string_length = strlen(string); + data_length = (size_t)buf->pos - (size_t)buf->buffer; + final_length = data_length + string_length; + + if ( final_length >= (size_t) buf->buf_size) { + + + buf->buf_size = (buf->buf_size) * 2 + final_length; + + new_buf = realloc(buf->buffer,buf->buf_size); + + new_pos = (void*)((size_t)new_buf + data_length); + + buf->pos = new_pos; + buf->buffer = new_buf; + } + + strcpy(buf->pos, string); + + buf->pos += string_length; +} + + + +static int sspm_is_printable(char c) +{ + return (c >= 33) && (c <= 126) && (c != '='); + +} + + +void sspm_encode_quoted_printable(struct sspm_buffer *buf, char* data) +{ + char *p; + int lpos = 0; + + for(p = data; *p != 0; p++){ + + if(sspm_is_printable(*p)){ + /* plain characters can represent themselves */ + /* RFC2045 Rule #2 */ + sspm_append_char(buf,*p); + lpos++; + } else if ( *p == '\t' || *p == ' ' ) { + + /* For tabs and spaces, only encode if they appear at the + end of the line */ + /* RFC2045 Rule #3 */ + + char n = *(p+1); + + if( n == '\n' || n == '\r'){ + sspm_append_hex(buf,*p); + lpos += 3; + } else { + sspm_append_char(buf,*p); + lpos++; + } + + } else if( *p == '\n' || *p == '\r'){ + sspm_append_char(buf,*p); + + lpos=0; + + } else { + /* All others need to be encoded */ + sspm_append_hex(buf,*p); + lpos+=3; + } + + + /* Add line breaks */ + if (lpos > 72){ + lpos = 0; + sspm_append_string(buf,"=\n"); + } + } +} + +static char BaseTable[64] = { + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', + 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' +}; + +void sspm_write_base64(struct sspm_buffer *buf, char* inbuf,int size ) +{ + + char outbuf[4]; + int i; + + outbuf[0] = outbuf[1] = outbuf[2] = outbuf[3] = 65; + + switch(size){ + + case 4: + outbuf[3] = inbuf[2] & 0x3F; + + case 3: + outbuf[2] = ((inbuf[1] & 0x0F) << 2) | ((inbuf[2] & 0xC0) >> 6); + + case 2: + outbuf[0] = (inbuf[0] & 0xFC) >> 2; + outbuf[1] = ((inbuf[0] & 0x03) << 4) | ((inbuf[1] & 0xF0) >> 4); + break; + + default: + assert(0); + } + + for(i = 0; i < 4; i++){ + + if(outbuf[i] == 65){ + sspm_append_char(buf,'='); + } else { + sspm_append_char(buf,BaseTable[(int)outbuf[i]]); + } + } +} + +void sspm_encode_base64(struct sspm_buffer *buf, char* data, size_t size) +{ + char *p; + char inbuf[3]; + int i = 0; + int first = 1; + int lpos = 0; + (void)size; + + inbuf[0] = inbuf[1] = inbuf[2] = 0; + + for (p = data; *p !=0; p++){ + + if (i%3 == 0 && first == 0){ + + sspm_write_base64(buf, inbuf, 4); + lpos+=4; + + inbuf[0] = inbuf[1] = inbuf[2] = 0; + } + + assert(lpos%4 == 0); + + if (lpos == 72){ + sspm_append_string(buf,"\n"); + lpos = 0; + } + + inbuf[i%3] = *p; + + i++; + first = 0; + + } + + + /* If the inbuf was not exactly filled on the last byte, we need + to spit out the odd bytes that did get in -- either one or + two. This will result in an output of two bytes and '==' or + three bytes and '=', respectively */ + + if (i%3 == 1 && first == 0){ + sspm_write_base64(buf, inbuf, 2); + } else if (i%3 == 2 && first == 0){ + sspm_write_base64(buf, inbuf, 3); + } + +} + +void sspm_write_header(struct sspm_buffer *buf,struct sspm_header *header) +{ + + int i; + char temp[TMP_BUF_SIZE]; + const char* major; + const char* minor; + + /* Content-type */ + + major = sspm_major_type_string(header->major); + minor = sspm_minor_type_string(header->minor); + + if(header->minor == SSPM_UNKNOWN_MINOR_TYPE ){ + assert(header->minor_text !=0); + minor = header->minor_text; + } + + snprintf(temp,sizeof(temp),"Content-Type: %s/%s",major,minor); + + sspm_append_string(buf,temp); + + if(header->boundary != 0){ + snprintf(temp,sizeof(temp),";boundary=\"%s\"",header->boundary); + sspm_append_string(buf,temp); + } + + /* Append any content type parameters */ + if(header->content_type_params != 0){ + for(i=0; *(header->content_type_params[i])!= 0;i++){ + strncpy(temp,header->content_type_params[i],sizeof(temp)); + sspm_append_char(buf,';'); + sspm_append_string(buf,temp); + } + } + + sspm_append_char(buf,'\n'); + + /*Content-Transfer-Encoding */ + + if(header->encoding != SSPM_UNKNOWN_ENCODING && + header->encoding != SSPM_NO_ENCODING){ + snprintf(temp,sizeof(temp),"Content-Transfer-Encoding: %s\n", + sspm_encoding_string(header->encoding)); + } + + sspm_append_char(buf,'\n'); + +} + +void sspm_write_multipart_part(struct sspm_buffer *buf, + struct sspm_part *parts, + int* part_num) +{ + + int parent_level, level; + struct sspm_header *header = &(parts[*part_num].header); + /* Write the header for the multipart part */ + sspm_write_header(buf,header); + + parent_level = parts[*part_num].level; + + (*part_num)++; + + level = parts[*part_num].level; + + while(parts[*part_num].header.major != SSPM_NO_MAJOR_TYPE && + level == parent_level+1){ + + assert(header->boundary); + sspm_append_string(buf,header->boundary); + sspm_append_char(buf,'\n'); + + if (parts[*part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){ + sspm_write_multipart_part(buf,parts,part_num); + } else { + sspm_write_part(buf, &(parts[*part_num]), part_num); + } + + (*part_num)++; + level = parts[*part_num].level; + } + + sspm_append_string(buf,"\n\n--"); + sspm_append_string(buf,header->boundary); + sspm_append_string(buf,"\n"); + + (*part_num)--; /* undo last, spurious, increment */ +} + +void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part,int *part_num) +{ + (void)part_num; + + /* Write header */ + sspm_write_header(buf,&(part->header)); + + /* Write part data */ + + if(part->data == 0){ + return; + } + + if(part->header.encoding == SSPM_BASE64_ENCODING) { + assert(part->data_size != 0); + sspm_encode_base64(buf,part->data,part->data_size); + } else if(part->header.encoding == SSPM_QUOTED_PRINTABLE_ENCODING) { + sspm_encode_quoted_printable(buf,part->data); + } else { + sspm_append_string(buf,part->data); + } + + sspm_append_string(buf,"\n\n"); +} + +int sspm_write_mime(struct sspm_part *parts,size_t num_parts, + char **output_string, const char* header) +{ + struct sspm_buffer buf; + int part_num =0; + (void)num_parts; + + buf.buffer = malloc(4096); + buf.pos = buf.buffer; + buf.buf_size = 10; + buf.line_pos = 0; + + /* write caller's header */ + if(header != 0){ + sspm_append_string(&buf,header); + } + + if(buf.buffer[strlen(buf.buffer)-1] != '\n'){ + sspm_append_char(&buf,'\n'); + } + + /* write mime-version header */ + sspm_append_string(&buf,"Mime-Version: 1.0\n"); + + /* End of header */ + + /* Write body parts */ + while(parts[part_num].header.major != SSPM_NO_MAJOR_TYPE){ + if (parts[part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){ + sspm_write_multipart_part(&buf,parts,&part_num); + } else { + sspm_write_part(&buf, &(parts[part_num]), &part_num); + } + + part_num++; + } + + + *output_string = buf.buffer; + + return 0; +} + diff --git a/libkcal/libical/src/libical/sspm.h b/libkcal/libical/src/libical/sspm.h new file mode 100644 index 000000000..00be08214 --- /dev/null +++ b/libkcal/libical/src/libical/sspm.h @@ -0,0 +1,144 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: sspm.h Mime Parser + CREATOR: eric 25 June 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org + ======================================================================*/ + +#ifndef SSPM_H +#define SSPM_H + +enum sspm_major_type { + SSPM_NO_MAJOR_TYPE, + SSPM_TEXT_MAJOR_TYPE, + SSPM_IMAGE_MAJOR_TYPE, + SSPM_AUDIO_MAJOR_TYPE, + SSPM_VIDEO_MAJOR_TYPE, + SSPM_APPLICATION_MAJOR_TYPE, + SSPM_MULTIPART_MAJOR_TYPE, + SSPM_MESSAGE_MAJOR_TYPE, + SSPM_UNKNOWN_MAJOR_TYPE +}; + +enum sspm_minor_type { + SSPM_NO_MINOR_TYPE, + SSPM_ANY_MINOR_TYPE, + SSPM_PLAIN_MINOR_TYPE, + SSPM_RFC822_MINOR_TYPE, + SSPM_DIGEST_MINOR_TYPE, + SSPM_CALENDAR_MINOR_TYPE, + SSPM_MIXED_MINOR_TYPE, + SSPM_RELATED_MINOR_TYPE, + SSPM_ALTERNATIVE_MINOR_TYPE, + SSPM_PARALLEL_MINOR_TYPE, + SSPM_UNKNOWN_MINOR_TYPE +}; + +enum sspm_encoding { + SSPM_NO_ENCODING, + SSPM_QUOTED_PRINTABLE_ENCODING, + SSPM_8BIT_ENCODING, + SSPM_7BIT_ENCODING, + SSPM_BINARY_ENCODING, + SSPM_BASE64_ENCODING, + SSPM_UNKNOWN_ENCODING +}; + +enum sspm_error{ + SSPM_NO_ERROR, + SSPM_UNEXPECTED_BOUNDARY_ERROR, + SSPM_WRONG_BOUNDARY_ERROR, + SSPM_NO_BOUNDARY_ERROR, + SSPM_NO_HEADER_ERROR, + SSPM_MALFORMED_HEADER_ERROR +}; + + +struct sspm_header +{ + int def; + char* boundary; + enum sspm_major_type major; + enum sspm_minor_type minor; + char *minor_text; + char ** content_type_params; + char* charset; + enum sspm_encoding encoding; + char* filename; + char* content_id; + enum sspm_error error; + char* error_text; +}; + +struct sspm_part { + struct sspm_header header; + int level; + size_t data_size; + void *data; +}; + +struct sspm_action_map { + enum sspm_major_type major; + enum sspm_minor_type minor; + void* (*new_part)(); + void (*add_line)(void *part, struct sspm_header *header, + const char* line, size_t size); + void* (*end_part)(void* part); + void (*free_part)(void *part); +}; + +const char* sspm_major_type_string(enum sspm_major_type type); +const char* sspm_minor_type_string(enum sspm_minor_type type); +const char* sspm_encoding_string(enum sspm_encoding type); + +int sspm_parse_mime(struct sspm_part *parts, + size_t max_parts, + struct sspm_action_map *actions, + char* (*get_string)(char *s, size_t size, void* data), + void *get_string_data, + struct sspm_header *first_header + ); + +void sspm_free_parts(struct sspm_part *parts, size_t max_parts); + +char *decode_quoted_printable(char *dest, + char *src, + size_t *size); +char *decode_base64(char *dest, + char *src, + size_t *size); + + +int sspm_write_mime(struct sspm_part *parts,size_t num_parts, + char **output_string, const char* header); + +#endif /*SSPM_H*/ diff --git a/libkcal/libical/src/libical/vsnprintf.c b/libkcal/libical/src/libical/vsnprintf.c new file mode 100644 index 000000000..982920b21 --- /dev/null +++ b/libkcal/libical/src/libical/vsnprintf.c @@ -0,0 +1,172 @@ +#ifndef WIN32 +#include "config.h" +#endif +#ifndef HAVE_SNPRINTF +/* + * Revision 12: http://theos.com/~deraadt/snprintf.c + * + * Copyright (c) 1997 Theo de Raadt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WIN32 +#include <sys/param.h> +#include <sys/mman.h> +#include <unistd.h> +#endif +#include <sys/types.h> +#include <signal.h> +#include <stdio.h> +#include <string.h> +#if __STDC__ +#include <stdarg.h> +#include <stdlib.h> +#else +#include <varargs.h> +#endif +#include <setjmp.h> + +#ifndef roundup +#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) +#endif + +static int pgsize; +static char *curobj; +static sigjmp_buf bail; + +#define EXTRABYTES 2 /* XXX: why 2? you don't want to know */ + +static char * +msetup(str, n) + char *str; + size_t n; +{ + char *e; + + if (n == 0) + return NULL; + if (pgsize == 0) + pgsize = getpagesize(); + curobj = (char *)malloc(n + EXTRABYTES + pgsize * 2); + if (curobj == NULL) + return NULL; + e = curobj + n + EXTRABYTES; + e = (char *)roundup((unsigned long)e, pgsize); + if (mprotect(e, pgsize, PROT_NONE) == -1) { + free(curobj); + curobj = NULL; + return NULL; + } + e = e - n - EXTRABYTES; + *e = '\0'; + return (e); +} + +static void +mcatch(int i) +{ + siglongjmp(bail, 1); +} + +static void +mcleanup(str, n, p) + char *str; + size_t n; + char *p; +{ + strncpy(str, p, n-1); + str[n-1] = '\0'; + if (mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, + PROT_READ|PROT_WRITE|PROT_EXEC) == -1) + mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, + PROT_READ|PROT_WRITE); + free(curobj); +} + +int +#if __STDC__ +vsnprintf(char *str, size_t n, char const *fmt, va_list ap) +#else +vsnprintf(str, n, fmt, ap) + char *str; + size_t n; + char *fmt; + char *ap; +#endif +{ + struct sigaction osa, nsa; + char *p; + int ret = n + 1; /* if we bail, indicated we overflowed */ + + memset(&nsa, 0, sizeof nsa); + nsa.sa_handler = mcatch; + sigemptyset(&nsa.sa_mask); + + p = msetup(str, n); + if (p == NULL) { + *str = '\0'; + return 0; + } + if (sigsetjmp(bail, 1) == 0) { + if (sigaction(SIGSEGV, &nsa, &osa) == -1) { + mcleanup(str, n, p); + return (0); + } + ret = vsprintf(p, fmt, ap); + } + mcleanup(str, n, p); + (void) sigaction(SIGSEGV, &osa, NULL); + return (ret); +} + +int +#if __STDC__ +snprintf(char *str, size_t n, char const *fmt, ...) +#else +snprintf(str, n, fmt, va_alist) + char *str; + size_t n; + char *fmt; + va_dcl +#endif +{ + va_list ap; +#if __STDC__ + va_start(ap, fmt); +#else + va_start(ap); +#endif + + return (vsnprintf(str, n, fmt, ap)); + va_end(ap); +} + + +#else + +/* ANSI C forbids an empty source file... */ + +static void vsnprintf_dummy_func() { + vsnprintf_dummy_func(); +} + +#endif diff --git a/libkcal/libical/src/libicalss/Makefile.am b/libkcal/libical/src/libicalss/Makefile.am new file mode 100644 index 000000000..d2c1396b6 --- /dev/null +++ b/libkcal/libical/src/libicalss/Makefile.am @@ -0,0 +1,35 @@ + +noinst_LTLIBRARIES = libicalss.la + +AM_YFLAGS =-d -v -p ss +AM_LFLAGS = -Pss +LEX_OUTPUT_ROOT = lex.ss + +INCLUDES = -I../libical -I$(srcdir)/../libical + +libicalss_la_SOURCES = \ + icalclassify.c \ + icalclassify.h + +# We don't need icalss.h, but it needs to be built... +libicalss_la_COMPILE_FIRST = ../libical/ical.h icalss.h + +COMBINEDHEADERS = \ + $(srcdir)/icalclassify.h + +icalss.h: $(COMBINEDHEADERS) + echo '#ifdef __cplusplus' > icalss.h + echo 'extern "C" {' >> icalss.h + echo '#endif' >> icalss.h + cat $(COMBINEDHEADERS) \ + | egrep -v "#include.*\"ical" \ + | egrep -v "#include.*\"pvl\.h\"" \ + | egrep -v '\$$(Id|Locker): .+\$$'>> icalss.h + echo '#ifdef __cplusplus' >> icalss.h + echo '}' >> icalss.h + echo '#endif' >> icalss.h + +noinst_HEADERS = icalss.h icalclassify.h + +CLEANFILES = icalss.h + diff --git a/libkcal/libical/src/libicalss/icalclassify.c b/libkcal/libical/src/libicalss/icalclassify.c new file mode 100644 index 000000000..1cc848a1d --- /dev/null +++ b/libkcal/libical/src/libicalss/icalclassify.c @@ -0,0 +1,752 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalclassify.c + CREATOR: ebusboom 23 aug 2000 + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "ical.h" +#include "icalclassify.h" +#include "icalmemory.h" + +#include <ctype.h> /* For tolower() */ +#include <string.h> /* for index() */ +#include <stdlib.h> /* for malloc and free */ + + + +struct icalclassify_parts { + icalcomponent *c; + icalcomponent_kind inner_kind; + icalproperty_method method; + char* organizer; + icalparameter_partstat reply_partstat; + char* reply_attendee; + char* uid; + int sequence; + struct icaltimetype dtstamp; + struct icaltimetype recurrence_id; +}; + + +char* icalclassify_lowercase(const char* str) +{ + char* p = 0; + char *xnew; + + if(str ==0){ + return 0; + } + + xnew = icalmemory_strdup(str); + for(p = xnew; *p!=0; p++){ + *p = tolower(*p); + } + + return xnew; +} + + + +icalproperty* icalclassify_find_attendee(icalcomponent *c, + const char* attendee) +{ + icalproperty *p; + icalcomponent* inner; + char* lattendee; + char* upn; + + if(attendee == 0){ + return 0; + } + + lattendee = icalclassify_lowercase(attendee); + upn = strchr(lattendee,':'); + + if (upn== 0){ + upn = lattendee; + } else { + upn++; /* skip the ";"*/ + } + + inner = icalcomponent_get_first_real_component(c); + + for(p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(inner,ICAL_ATTENDEE_PROPERTY)) + { + char* this_upn; + char* this_attendee + = icalclassify_lowercase(icalproperty_get_attendee(p)); + if ( !this_attendee ) continue; + this_upn = strchr(this_attendee,':'); + + if(this_upn == 0){ + continue; + } else { + this_upn++; + } + + if(strcmp(this_upn,upn)==0){ + free(lattendee); + free(this_attendee); + return p; + } + + free(this_attendee); + } + free(lattendee); + + return 0; + +} + +void icalssutil_free_parts(struct icalclassify_parts *parts) +{ + if(parts == 0){ + return; + } + + if(parts->organizer != 0){ + free(parts->organizer); + } + + if(parts->uid != 0){ + free(parts->uid); + } + + if(parts->reply_attendee){ + free(parts->reply_attendee); + } +} + +void icalssutil_get_parts(icalcomponent* c, + struct icalclassify_parts* parts) +{ + icalproperty *p; + icalcomponent *inner; + + memset(parts,0,sizeof(struct icalclassify_parts)); + + parts->method = ICAL_METHOD_NONE; + parts->sequence = 0; + parts->reply_partstat = ICAL_PARTSTAT_NONE; + + if(c == 0){ + return; + } + + parts->c = c; + + p = icalcomponent_get_first_property(c,ICAL_METHOD_PROPERTY); + if(p!=0){ + parts->method = icalproperty_get_method(p); + } + + inner = icalcomponent_get_first_real_component(c); + + parts->inner_kind = icalcomponent_isa(inner); + + p = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY); + if(p!=0){ + const char *p_organizer = icalproperty_get_organizer(p); + if (p_organizer!=0) { + parts->organizer = strdup(p_organizer); + } + } + + p = icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY); + if(p!=0){ + parts->sequence = icalproperty_get_sequence(p); + } + + p = icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY); + if(p!=0){ + const char *p_uid = icalproperty_get_uid(p); + if (p_uid!=0) { + parts->uid = strdup(p_uid); + } + } + + p = icalcomponent_get_first_property(inner,ICAL_RECURRENCEID_PROPERTY); + if(p!=0){ + parts->recurrence_id = icalproperty_get_recurrenceid(p); + } + + p = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY); + if(p!=0){ + parts->dtstamp = icalproperty_get_dtstamp(p); + } + + if(parts->method==ICAL_METHOD_REPLY){ + icalparameter *param; + p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); + + if(p!=0){ + const char *attendee = 0; + param = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); + + if(param != 0){ + parts->reply_partstat = + icalparameter_get_partstat(param); + } + attendee = icalproperty_get_attendee(p); + if ( attendee ) + parts->reply_attendee = strdup( attendee ); + } + + } + + +} + + +int icalssutil_is_rescheduled(icalcomponent* a,icalcomponent* b) +{ + icalproperty *p1,*p2; + icalcomponent *i1,*i2; + int i; + + icalproperty_kind kind_array[] = { + ICAL_DTSTART_PROPERTY, + ICAL_DTEND_PROPERTY, + ICAL_DURATION_PROPERTY, + ICAL_DUE_PROPERTY, + ICAL_RRULE_PROPERTY, + ICAL_RDATE_PROPERTY, + ICAL_EXRULE_PROPERTY, + ICAL_EXDATE_PROPERTY, + ICAL_NO_PROPERTY + }; + + i1 = icalcomponent_get_first_real_component(a); + i2 = icalcomponent_get_first_real_component(b); + + for(i =0; kind_array[i] != ICAL_NO_PROPERTY; i++){ + p1 = icalcomponent_get_first_property(i1,kind_array[i]); + p2 = icalcomponent_get_first_property(i2,kind_array[i]); + + if( (p1!=0)^(p2!=0) ){ + /* Return true if the property exists in one component and not + the other */ + return 1; + } + + if(p1 && strcmp(icalproperty_as_ical_string(p1), + icalproperty_as_ical_string(p2)) != 0){ + return 1; + } + } + + return 0; + +} + +#define icalclassify_pre \ + int rtrn =0; + +#define icalclassify_post \ + return rtrn; + + +int icalclassify_publish_new(struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre; + (void)user; + + if(comp->method == ICAL_METHOD_PUBLISH && + match == 0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){ + rtrn = 1; + } + + icalclassify_post; + +} + +int icalclassify_publish_update(struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre; + (void)user; + + if(comp->method == ICAL_METHOD_PUBLISH && + match !=0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){ + rtrn = 1; + } + + icalclassify_post; + +} + +int icalclassify_publish_freebusy(struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre; + + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_PUBLISH && + comp->inner_kind == ICAL_VFREEBUSY_COMPONENT){ + rtrn = 1; + } + + icalclassify_post; + +} + + +int icalclassify_request_new(struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + /* Method is REQUEST, and there is no match */ + + icalclassify_pre + (void)user; + + if(match->c==0 && comp->method == ICAL_METHOD_REQUEST){ + rtrn = 1; + } + + icalclassify_post + +} + +int icalclassify_request_update( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + /* REQUEST method, Higher SEQUENCE than match, and all + time-related properties are unchanged */ + + icalclassify_pre + (void)user; + + if (match != 0 && + comp->sequence >= match->sequence && + !icalssutil_is_rescheduled(comp->c,match->c)){ + rtrn = 1; + } + + icalclassify_post + +} + +int icalclassify_request_reschedule( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + /* REQUEST method, Higher SEQUENCE than match, and one or more + time-related properties are changed */ + icalclassify_pre + (void)user; + + if (match->c != 0 && + comp->sequence > match->sequence && + icalssutil_is_rescheduled(comp->c,match->c)){ + rtrn = 1; + } + + icalclassify_post + +} + +int icalclassify_request_delegate( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalparameter* param; + icalclassify_pre; + (void)match; + + attendee = icalclassify_find_attendee(comp->c,user); + + if(attendee == 0){ + return 0; + } + + param = icalproperty_get_first_parameter(attendee,ICAL_DELEGATEDFROM_PARAMETER); + + if (param != 0){ + rtrn = 1; + } + + icalclassify_post + +} + +int icalclassify_request_new_organizer( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + /* Organizer has changed between match and component */ + icalclassify_pre + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + icalclassify_post + (void)comp; + (void)match; + (void)user; + +} + +int icalclassify_request_status( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + icalclassify_post + (void)comp; + (void)match; + (void)user; +} + +int icalclassify_request_forward( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + icalclassify_post + (void)comp; + (void)match; + (void)user; +} + +int icalclassify_request_freebusy( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); + icalclassify_post + (void)comp; + (void)match; + (void)user; +} + +int icalclassify_reply_accept( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalclassify_pre; + (void)user; + + attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); + + if(attendee != 0&& + comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){ + rtrn = 1; + } + + icalclassify_post +} +int icalclassify_reply_decline( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalclassify_pre; + (void)user; + + attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); + + + if( attendee != 0 && + comp->reply_partstat == ICAL_PARTSTAT_DECLINED){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_reply_delegate( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalclassify_pre; + (void)user; + + attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); + + if( attendee != 0 && + comp->reply_partstat == ICAL_PARTSTAT_DELEGATED){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_reply_crasher_accept( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalclassify_pre; + (void)user; + + attendee= icalclassify_find_attendee(match->c,comp->reply_attendee); + + if(attendee == 0 && + comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_reply_crasher_decline( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalproperty* attendee; + icalclassify_pre; + (void)user; + + + attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); + + if(attendee == 0 && + comp->reply_partstat == ICAL_PARTSTAT_DECLINED){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_add_instance( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + + if(comp->method == ICAL_METHOD_ADD){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_cancel_event( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_CANCEL){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_cancel_instance( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_CANCEL){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_cancel_all( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_CANCEL){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_refesh( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_REFRESH){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_counter( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + if(comp->method == ICAL_METHOD_COUNTER){ + rtrn = 1; + } + icalclassify_post +} +int icalclassify_delinecounter( + struct icalclassify_parts *comp, + struct icalclassify_parts *match, + const char* user) +{ + icalclassify_pre + (void)match; + (void)user; + + if(comp->method == ICAL_METHOD_DECLINECOUNTER){ + rtrn = 1; + } + + icalclassify_post +} + +struct icalclassify_map { + icalproperty_method method; + int (*fn)(struct icalclassify_parts *comp,struct icalclassify_parts *match, const char* user); + icalproperty_xlicclass class; +} icalclassify_map[] = +{ {ICAL_METHOD_PUBLISH,icalclassify_publish_new,ICAL_XLICCLASS_PUBLISHNEW}, + {ICAL_METHOD_PUBLISH,icalclassify_publish_update,ICAL_XLICCLASS_PUBLISHUPDATE}, + {ICAL_METHOD_PUBLISH,icalclassify_publish_freebusy,ICAL_XLICCLASS_PUBLISHFREEBUSY}, + {ICAL_METHOD_REQUEST,icalclassify_request_delegate,ICAL_XLICCLASS_REQUESTDELEGATE}, + {ICAL_METHOD_REQUEST,icalclassify_request_new,ICAL_XLICCLASS_REQUESTNEW}, + {ICAL_METHOD_REQUEST,icalclassify_request_update,ICAL_XLICCLASS_REQUESTUPDATE}, + {ICAL_METHOD_REQUEST,icalclassify_request_reschedule,ICAL_XLICCLASS_REQUESTRESCHEDULE}, + + {ICAL_METHOD_REQUEST,icalclassify_request_new_organizer,ICAL_XLICCLASS_REQUESTNEWORGANIZER}, + {ICAL_METHOD_REQUEST,icalclassify_request_forward,ICAL_XLICCLASS_REQUESTFORWARD}, + {ICAL_METHOD_REQUEST,icalclassify_request_status,ICAL_XLICCLASS_REQUESTSTATUS}, + {ICAL_METHOD_REQUEST,icalclassify_request_freebusy,ICAL_XLICCLASS_REQUESTFREEBUSY}, + + {ICAL_METHOD_REPLY,icalclassify_reply_accept,ICAL_XLICCLASS_REPLYACCEPT}, + {ICAL_METHOD_REPLY,icalclassify_reply_decline,ICAL_XLICCLASS_REPLYDECLINE}, + {ICAL_METHOD_REPLY,icalclassify_reply_delegate,ICAL_XLICCLASS_REPLYDELEGATE}, + {ICAL_METHOD_REPLY,icalclassify_reply_crasher_accept,ICAL_XLICCLASS_REPLYCRASHERACCEPT}, + {ICAL_METHOD_REPLY,icalclassify_reply_crasher_decline,ICAL_XLICCLASS_REPLYCRASHERDECLINE}, + + {ICAL_METHOD_ADD,icalclassify_add_instance,ICAL_XLICCLASS_ADDINSTANCE}, + + {ICAL_METHOD_CANCEL,icalclassify_cancel_event,ICAL_XLICCLASS_CANCELEVENT}, + {ICAL_METHOD_CANCEL,icalclassify_cancel_instance,ICAL_XLICCLASS_CANCELINSTANCE}, + {ICAL_METHOD_CANCEL,icalclassify_cancel_all,ICAL_XLICCLASS_CANCELALL}, + + {ICAL_METHOD_REFRESH,icalclassify_refesh,ICAL_XLICCLASS_REFRESH}, + {ICAL_METHOD_COUNTER,icalclassify_counter,ICAL_XLICCLASS_COUNTER}, + {ICAL_METHOD_DECLINECOUNTER,icalclassify_delinecounter,ICAL_XLICCLASS_DECLINECOUNTER}, + {ICAL_METHOD_NONE,0,ICAL_XLICCLASS_NONE} +}; + + +icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match, + const char* user) +{ + icalcomponent *inner; + icalproperty *p; + icalproperty_method method; + icalproperty_xlicclass class = ICAL_XLICCLASS_UNKNOWN; + + int i; + + struct icalclassify_parts comp_parts; + struct icalclassify_parts match_parts; + + inner = icalcomponent_get_first_real_component(c); + + if (inner == 0) { + return ICAL_XLICCLASS_NONE; + } + + icalssutil_get_parts(c,&comp_parts); + icalssutil_get_parts(match,&match_parts); + + /* Determine if the incoming component is obsoleted by the match */ + if(match != 0 && ( + comp_parts.method == ICAL_METHOD_REQUEST + )){ + assert ( ! ((comp_parts.dtstamp.is_utc==1)^ + (match_parts.dtstamp.is_utc==1))); + + if( comp_parts.sequence<match_parts.sequence && + icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)>0) + { + /* comp has a smaller sequence and a later DTSTAMP */ + class = ICAL_XLICCLASS_MISSEQUENCED; + goto CLEANUP; + } + + if( (comp_parts.sequence<match_parts.sequence ) + /*&&icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)<=0*/ + || + ( comp_parts.sequence == match_parts.sequence && + icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)<=0)){ + + class = ICAL_XLICCLASS_OBSOLETE; + goto CLEANUP; + } + + } + + p = icalcomponent_get_first_property(c,ICAL_METHOD_PROPERTY); + if (p == 0) { + class = ICAL_XLICCLASS_UNKNOWN; + goto CLEANUP; + } + method = icalproperty_get_method(p); + + for (i =0; icalclassify_map[i].method != ICAL_METHOD_NONE; i++){ + if(icalclassify_map[i].method == method){ + if( (*(icalclassify_map[i].fn))(&comp_parts,&match_parts,user)==1){ + class = icalclassify_map[i].class; + break; + } + } + } + +CLEANUP: + icalssutil_free_parts(&comp_parts); + icalssutil_free_parts(&match_parts); + + return class; + +} + diff --git a/libkcal/libical/src/libicalss/icalclassify.h b/libkcal/libical/src/libicalss/icalclassify.h new file mode 100644 index 000000000..9132a2f5d --- /dev/null +++ b/libkcal/libical/src/libicalss/icalclassify.h @@ -0,0 +1,38 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalclassify.h + CREATOR: eric 21 Aug 2000 + + + + (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> + http://www.softwarestudio.org + + This program is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: http://www.fsf.org/copyleft/lesser.html + + Or: + + The Mozilla Public License Version 1.0. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + + =========================================================================*/ + +#ifndef ICALCLASSIFY_H +#define ICALCLASSIFY_H + +#include "ical.h" + +icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match, + const char* user); + +#endif /* ICALCLASSIFY_H*/ + + + + + diff --git a/libkcal/libical/tzdata/africa b/libkcal/libical/tzdata/africa new file mode 100644 index 000000000..434110ccd --- /dev/null +++ b/libkcal/libical/tzdata/africa @@ -0,0 +1,673 @@ +# @(#)africa 8.10 +# <pre> + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (2006-03-22): +# +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# Previous editions of this database used WAT, CAT, SAT, and EAT +# for +0:00 through +3:00, respectively, +# but Mark R V Murray reports that +# `SAST' is the official abbreviation for +2:00 in the country of South Africa, +# `CAT' is commonly used for +2:00 in countries north of South Africa, and +# `WAT' is probably the best name for +1:00, as the common phrase for +# the area that includes Nigeria is ``West Africa''. +# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference. +# +# To make things confusing, `WAT' seems to have been used for -1:00 long ago; +# I'd guess that this was because people needed _some_ name for -1:00, +# and at the time, far west Africa was the only major land area in -1:00. +# This usage is now obsolete, as the last use of -1:00 on the African +# mainland seems to have been 1976 in Western Sahara. +# +# To summarize, the following abbreviations seem to have some currency: +# -1:00 WAT West Africa Time (no longer used) +# 0:00 GMT Greenwich Mean Time +# 2:00 CAT Central Africa Time +# 2:00 SAST South Africa Standard Time +# and Murray suggests the following abbreviation: +# 1:00 WAT West Africa Time +# I realize that this leads to `WAT' being used for both -1:00 and 1:00 +# for times before 1976, but this is the best I can think of +# until we get more information. +# +# I invented the following abbreviations; corrections are welcome! +# 2:00 WAST West Africa Summer Time +# 2:30 BEAT British East Africa Time (no longer used) +# 2:44:45 BEAUT British East Africa Unified Time (no longer used) +# 3:00 CAST Central Africa Summer Time (no longer used) +# 3:00 SAST South Africa Summer Time (no longer used) +# 3:00 EAT East Africa Time +# 4:00 EAST East Africa Summer Time (no longer used) + +# Algeria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Algeria 1916 only - Jun 14 23:00s 1:00 S +Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule Algeria 1917 only - Mar 24 23:00s 1:00 S +Rule Algeria 1918 only - Mar 9 23:00s 1:00 S +Rule Algeria 1919 only - Mar 1 23:00s 1:00 S +Rule Algeria 1920 only - Feb 14 23:00s 1:00 S +Rule Algeria 1920 only - Oct 23 23:00s 0 - +Rule Algeria 1921 only - Mar 14 23:00s 1:00 S +Rule Algeria 1921 only - Jun 21 23:00s 0 - +Rule Algeria 1939 only - Sep 11 23:00s 1:00 S +Rule Algeria 1939 only - Nov 19 1:00 0 - +Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Algeria 1944 only - Oct 8 2:00 0 - +Rule Algeria 1945 only - Sep 16 1:00 0 - +Rule Algeria 1971 only - Apr 25 23:00s 1:00 S +Rule Algeria 1971 only - Sep 26 23:00s 0 - +Rule Algeria 1977 only - May 6 0:00 1:00 S +Rule Algeria 1977 only - Oct 21 0:00 0 - +Rule Algeria 1978 only - Mar 24 1:00 1:00 S +Rule Algeria 1978 only - Sep 22 3:00 0 - +Rule Algeria 1980 only - Apr 25 0:00 1:00 S +Rule Algeria 1980 only - Oct 31 2:00 0 - +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 Algeria WE%sT 1940 Feb 25 2:00 + 1:00 Algeria CE%sT 1946 Oct 7 + 0:00 - WET 1956 Jan 29 + 1:00 - CET 1963 Apr 14 + 0:00 Algeria WE%sT 1977 Oct 21 + 1:00 Algeria CE%sT 1979 Oct 26 + 0:00 Algeria WE%sT 1981 May + 1:00 - CET + +# Angola +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Luanda 0:52:56 - LMT 1892 + 0:52:04 - AOT 1911 May 26 # Angola Time + 1:00 - WAT + +# Benin +# Whitman says they switched to 1:00 in 1946, not 1934; +# go with Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Porto-Novo 0:10:28 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + 1:00 - WAT + +# Botswana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Gaborone 1:43:40 - LMT 1885 + 2:00 - CAT 1943 Sep 19 2:00 + 2:00 1:00 CAST 1944 Mar 19 2:00 + 2:00 - CAT + +# Burkina Faso +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Ouagadougou -0:06:04 - LMT 1912 + 0:00 - GMT + +# Burundi +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bujumbura 1:57:28 - LMT 1890 + 2:00 - CAT + +# Cameroon +# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Douala 0:38:48 - LMT 1912 + 1:00 - WAT + +# Cape Verde +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia + -2:00 - CVT 1942 Sep + -2:00 1:00 CVST 1945 Oct 15 + -2:00 - CVT 1975 Nov 25 2:00 + -1:00 - CVT + +# Central African Republic +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bangui 1:14:20 - LMT 1912 + 1:00 - WAT + +# Chad +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Ndjamena 1:00:12 - LMT 1912 + 1:00 - WAT 1979 Oct 14 + 1:00 1:00 WAST 1980 Mar 8 + 1:00 - WAT + +# Comoros +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro + 3:00 - EAT + +# Democratic Republic of Congo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9 + 1:00 - WAT +Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9 + 2:00 - CAT + +# Republic of the Congo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Brazzaville 1:01:08 - LMT 1912 + 1:00 - WAT + +# Cote D'Ivoire +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Abidjan -0:16:08 - LMT 1912 + 0:00 - GMT + +# Djibouti +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul + 3:00 - EAT + +############################################################################### + +# Egypt + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Egypt 1940 only - Jul 15 0:00 1:00 S +Rule Egypt 1940 only - Oct 1 0:00 0 - +Rule Egypt 1941 only - Apr 15 0:00 1:00 S +Rule Egypt 1941 only - Sep 16 0:00 0 - +Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S +Rule Egypt 1942 only - Oct 27 0:00 0 - +Rule Egypt 1943 1945 - Nov 1 0:00 0 - +Rule Egypt 1945 only - Apr 16 0:00 1:00 S +Rule Egypt 1957 only - May 10 0:00 1:00 S +Rule Egypt 1957 1958 - Oct 1 0:00 0 - +Rule Egypt 1958 only - May 1 0:00 1:00 S +Rule Egypt 1959 1981 - May 1 1:00 1:00 S +Rule Egypt 1959 1965 - Sep 30 3:00 0 - +Rule Egypt 1966 1994 - Oct 1 3:00 0 - +Rule Egypt 1982 only - Jul 25 1:00 1:00 S +Rule Egypt 1983 only - Jul 12 1:00 1:00 S +Rule Egypt 1984 1988 - May 1 1:00 1:00 S +Rule Egypt 1989 only - May 6 1:00 1:00 S +Rule Egypt 1990 1994 - May 1 1:00 1:00 S +# IATA (after 1990) says transitions are at 0:00. +# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29. +Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S +Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 - +# From Steffen Thorsen (2006-09-19): +# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports: +# Egypt will turn back clocks by one hour at the midnight of Thursday +# after observing the daylight saving time since May. +# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf +Rule Egypt 2006 only - Sep 21 23:00s 0 - +# From Dirk Losch (2007-08-14): +# I received a mail from an airline which says that the daylight +# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07. +# From Jesper Norgaard Welen (2007-08-15): [The following agree:] +# http://www.nentjes.info/Bill/bill5.htm +# http://www.timeanddate.com/worldclock/city.html?n=53 +# From Steffen Thorsen (2007-09-04): The official information...: +# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm +Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 - +# From Abdelrahman Hassan (2007-09-06): +# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter +# than the year of the Gregorian calendar, Ramadan shifts earlier each +# year. This year it will be observed September 13 (September is quite +# hot in Egypt), and the idea is to make fasting easier for workers by +# shifting business hours one hour out of daytime heat. Consequently, +# unless discontinued, next DST may end Thursday 28 August 2008. +# From Paul Eggert (2007-08-17): +# For lack of better info, assume the new rule is last Thursday in August. +Rule Egypt 2008 max - Aug lastThu 23:00s 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Cairo 2:05:00 - LMT 1900 Oct + 2:00 Egypt EE%sT + +# Equatorial Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Malabo 0:35:08 - LMT 1912 + 0:00 - GMT 1963 Dec 15 + 1:00 - WAT + +# Eritrea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Asmara 2:35:32 - LMT 1870 + 2:35:32 - AMT 1890 # Asmara Mean Time + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT + +# Ethiopia +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones +# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890. +# We'll guess that 38E50 is for Adis Dera. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Addis_Ababa 2:34:48 - LMT 1870 + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT + +# Gabon +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Libreville 0:37:48 - LMT 1912 + 1:00 - WAT + +# Gambia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Banjul -1:06:36 - LMT 1912 + -1:06:36 - BMT 1935 # Banjul Mean Time + -1:00 - WAT 1964 + 0:00 - GMT + +# Ghana +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman says DST was observed from 1931 to ``the present''; +# go with Shanks & Pottenger. +Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST +Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Accra -0:00:52 - LMT 1918 + 0:00 Ghana %s + +# Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Conakry -0:54:52 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 + 0:00 - GMT + +# Guinea-Bissau +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bissau -1:02:20 - LMT 1911 May 26 + -1:00 - WAT 1975 + 0:00 - GMT + +# Kenya +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1940 + 2:44:45 - BEAUT 1960 + 3:00 - EAT + +# Lesotho +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Maseru 1:50:00 - LMT 1903 Mar + 2:00 - SAST 1943 Sep 19 2:00 + 2:00 1:00 SAST 1944 Mar 19 2:00 + 2:00 - SAST + +# Liberia +# From Paul Eggert (2006-03-22): +# In 1972 Liberia was the last country to switch +# from a UTC offset that was not a multiple of 15 or 20 minutes. +# Howse reports that it was in honor of their president's birthday. +# Shank & Pottenger report the date as May 1, whereas Howse reports Jan; +# go with Shanks & Pottenger. +# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and +# Whitman each report -0:44:30; go with the more precise figure. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Monrovia -0:43:08 - LMT 1882 + -0:43:08 - MMT 1919 Mar # Monrovia Mean Time + -0:44:30 - LRT 1972 May # Liberia Time + 0:00 - GMT + +############################################################################### + +# Libya + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Libya 1951 only - Oct 14 2:00 1:00 S +Rule Libya 1952 only - Jan 1 0:00 0 - +Rule Libya 1953 only - Oct 9 2:00 1:00 S +Rule Libya 1954 only - Jan 1 0:00 0 - +Rule Libya 1955 only - Sep 30 0:00 1:00 S +Rule Libya 1956 only - Jan 1 0:00 0 - +Rule Libya 1982 1984 - Apr 1 0:00 1:00 S +Rule Libya 1982 1985 - Oct 1 0:00 0 - +Rule Libya 1985 only - Apr 6 0:00 1:00 S +Rule Libya 1986 only - Apr 4 0:00 1:00 S +Rule Libya 1986 only - Oct 3 0:00 0 - +Rule Libya 1987 1989 - Apr 1 0:00 1:00 S +Rule Libya 1987 1989 - Oct 1 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Tripoli 0:52:44 - LMT 1920 + 1:00 Libya CE%sT 1959 + 2:00 - EET 1982 + 1:00 Libya CE%sT 1990 May 4 +# The following entries are from Shanks & Pottenger; +# the IATA SSIM data contain some obvious errors. + 2:00 - EET 1996 Sep 30 + 1:00 - CET 1997 Apr 4 + 1:00 1:00 CEST 1997 Oct 4 + 2:00 - EET + +# Madagascar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul + 3:00 - EAT 1954 Feb 27 23:00s + 3:00 1:00 EAST 1954 May 29 23:00s + 3:00 - EAT + +# Malawi +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar + 2:00 - CAT + +# Mali +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Bamako -0:32:00 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Jun 20 + 0:00 - GMT + +# Mauritania +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Nouakchott -1:03:48 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Nov 28 + 0:00 - GMT + +# Mauritius +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis + 4:00 - MUT # Mauritius Time +# Agalega Is, Rodriguez +# no information; probably like Indian/Mauritius + +# Mayotte +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou + 3:00 - EAT + +# Morocco +# See the `europe' file for Spanish Morocco (Africa/Ceuta). +# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Morocco 1939 only - Sep 12 0:00 1:00 S +Rule Morocco 1939 only - Nov 19 0:00 0 - +Rule Morocco 1940 only - Feb 25 0:00 1:00 S +Rule Morocco 1945 only - Nov 18 0:00 0 - +Rule Morocco 1950 only - Jun 11 0:00 1:00 S +Rule Morocco 1950 only - Oct 29 0:00 0 - +Rule Morocco 1967 only - Jun 3 12:00 1:00 S +Rule Morocco 1967 only - Oct 1 0:00 0 - +Rule Morocco 1974 only - Jun 24 0:00 1:00 S +Rule Morocco 1974 only - Sep 1 0:00 0 - +Rule Morocco 1976 1977 - May 1 0:00 1:00 S +Rule Morocco 1976 only - Aug 1 0:00 0 - +Rule Morocco 1977 only - Sep 28 0:00 0 - +Rule Morocco 1978 only - Jun 1 0:00 1:00 S +Rule Morocco 1978 only - Aug 4 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 + 0:00 Morocco WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 0:00 - WET +# Western Sahara +Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan + -1:00 - WAT 1976 Apr 14 + 0:00 - WET + +# Mozambique +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Maputo 2:10:20 - LMT 1903 Mar + 2:00 - CAT + +# Namibia +# The 1994-04-03 transition is from Shanks & Pottenger. +# Shanks & Pottenger report no DST after 1998-04; go with IATA. + +# From Petronella Sibeene (2007-03-30) in +# <http://allafrica.com/stories/200703300178.html>: +# While the entire country changes its time, Katima Mulilo and other +# settlements in Caprivi unofficially will not because the sun there +# rises and sets earlier compared to other regions. Chief of +# Forecasting Riaan van Zyl explained that the far eastern parts of +# the country are close to 40 minutes earlier in sunrise than the rest +# of the country. +# +# From Paul Eggert (2007-03-31): +# Apparently the Caprivi Strip informally observes Botswana time, but +# we have no details. In the meantime people there can use Africa/Gaborone. + +# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S +Rule Namibia 1995 max - Apr Sun>=1 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 + 1:30 - SWAT 1903 Mar # SW Africa Time + 2:00 - SAST 1942 Sep 20 2:00 + 2:00 1:00 SAST 1943 Mar 21 2:00 + 2:00 - SAST 1990 Mar 21 # independence + 2:00 - CAT 1994 Apr 3 + 1:00 Namibia WA%sT + +# Niger +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Niamey 0:08:28 - LMT 1912 + -1:00 - WAT 1934 Feb 26 + 0:00 - GMT 1960 + 1:00 - WAT + +# Nigeria +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lagos 0:13:36 - LMT 1919 Sep + 1:00 - WAT + +# Reunion +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis + 4:00 - RET # Reunion Time +# +# Scattered Islands (Iles Eparses) administered from Reunion are as follows. +# The following information about them is taken from +# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French; +# no longer available as of 1999-08-17). +# We have no info about their time zone histories. +# +# Bassas da India - uninhabited +# Europa Island - inhabited from 1905 to 1910 by two families +# Glorioso Is - inhabited until at least 1958 +# Juan de Nova - uninhabited +# Tromelin - inhabited until at least 1958 + +# Rwanda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kigali 2:00:16 - LMT 1935 Jun + 2:00 - CAT + +# St Helena +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown + -0:22:48 - JMT 1951 # Jamestown Mean Time + 0:00 - GMT +# The other parts of the St Helena territory are similar: +# Tristan da Cunha: on GMT, say Whitman and the CIA +# Ascension: on GMT, says usno1995 and the CIA +# Gough (scientific station since 1955; sealers wintered previously): +# on GMT, says the CIA +# Inaccessible, Nightingale: no information, but probably GMT + +# Sao Tome and Principe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Sao_Tome 0:26:56 - LMT 1884 + -0:36:32 - LMT 1912 # Lisbon Mean Time + 0:00 - GMT + +# Senegal +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Dakar -1:09:44 - LMT 1912 + -1:00 - WAT 1941 Jun + 0:00 - GMT + +# Seychelles +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria + 4:00 - SCT # Seychelles Time +# From Paul Eggert (2001-05-30): +# Aldabra, Farquhar, and Desroches, originally dependencies of the +# Seychelles, were transferred to the British Indian Ocean Territory +# in 1965 and returned to Seychelles control in 1976. We don't know +# whether this affected their time zone, so omit this for now. +# Possibly the islands were uninhabited. + +# Sierra Leone +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger. +Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST +Rule SL 1935 1942 - Oct 1 0:00 0 WAT +Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST +Rule SL 1957 1962 - Sep 1 0:00 0 GMT +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Freetown -0:53:00 - LMT 1882 + -0:53:00 - FMT 1913 Jun # Freetown Mean Time + -1:00 SL %s 1957 + 0:00 SL %s + +# Somalia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov + 3:00 - EAT 1931 + 2:30 - BEAT 1957 + 3:00 - EAT + +# South Africa +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - +Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 + 1:30 - SAST 1903 Mar + 2:00 SA SAST +# Marion and Prince Edward Is +# scientific station since 1947 +# no information + +# Sudan +# +# From <a href="http://www.sunanews.net/sn13jane.html"> +# Sudan News Agency (2000-01-13) +# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen: +# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon +# Saturday.... This was announced Thursday by Caretaker State Minister for +# Manpower Abdul-Rahman Nur-Eddin. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Sudan 1970 only - May 1 0:00 1:00 S +Rule Sudan 1970 1985 - Oct 15 0:00 0 - +Rule Sudan 1971 only - Apr 30 0:00 1:00 S +Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Khartoum 2:10:08 - LMT 1931 + 2:00 Sudan CA%sT 2000 Jan 15 12:00 + 3:00 - EAT + +# Swaziland +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar + 2:00 - SAST + +# Tanzania +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 + 3:00 - EAT 1948 + 2:44:45 - BEAUT 1961 + 3:00 - EAT + +# Togo +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lome 0:04:52 - LMT 1893 + 0:00 - GMT + +# Tunisia + +# From Gwillim Law (2005-04-30): +# My correspondent, Risto Nykanen, has alerted me to another adoption of DST, +# this time in Tunisia. According to Yahoo France News +# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP +# and dated 2005-04-26, "Tunisia has decided to advance its official time by +# one hour, starting on Sunday, May 1. Henceforth, Tunisian time will be +# UTC+2 instead of UTC+1. The change will take place at 23:00 UTC next +# Saturday." (My translation) +# +# From Oscar van Vlijmen (2005-05-02): +# LaPresse, the first national daily newspaper ... +# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html> +# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30, +# 1h standard time. +# +# From Atef Loukil (2006-03-28): +# The daylight saving time will be the same each year: +# Beginning : the last Sunday of March at 02:00 +# Ending : the last Sunday of October at 03:00 ... +# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S +Rule Tunisia 1939 only - Nov 18 23:00s 0 - +Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S +Rule Tunisia 1941 only - Oct 6 0:00 0 - +Rule Tunisia 1942 only - Mar 9 0:00 1:00 S +Rule Tunisia 1942 only - Nov 2 3:00 0 - +Rule Tunisia 1943 only - Mar 29 2:00 1:00 S +Rule Tunisia 1943 only - Apr 17 2:00 0 - +Rule Tunisia 1943 only - Apr 25 2:00 1:00 S +Rule Tunisia 1943 only - Oct 4 2:00 0 - +Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Tunisia 1944 only - Oct 8 0:00 0 - +Rule Tunisia 1945 only - Sep 16 0:00 0 - +Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S +Rule Tunisia 1977 only - Sep 24 0:00s 0 - +Rule Tunisia 1978 only - May 1 0:00s 1:00 S +Rule Tunisia 1978 only - Oct 1 0:00s 0 - +Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S +Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 - +Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S +Rule Tunisia 1990 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - Sep 30 1:00s 0 - +Rule Tunisia 2006 max - Mar lastSun 2:00s 1:00 S +Rule Tunisia 2006 max - Oct lastSun 2:00s 0 - +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 1:00 Tunisia CE%sT + +# Uganda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Kampala 2:09:40 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1948 + 2:44:45 - BEAUT 1957 + 3:00 - EAT + +# Zambia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar + 2:00 - CAT + +# Zimbabwe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Africa/Harare 2:04:12 - LMT 1903 Mar + 2:00 - CAT diff --git a/libkcal/libical/tzdata/antarctica b/libkcal/libical/tzdata/antarctica new file mode 100644 index 000000000..ef279cbed --- /dev/null +++ b/libkcal/libical/tzdata/antarctica @@ -0,0 +1,327 @@ +# @(#)antarctica 8.4 +# <pre> + +# From Paul Eggert (1999-11-15): +# To keep things manageable, we list only locations occupied year-round; see +# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/"> +# COMNAP - Stations and Bases +# </a> +# and +# <a href="http://www.spri.cam.ac.uk/bob/periant.htm"> +# Summary of the Peri-Antarctic Islands (1998-07-23) +# </a> +# for information. +# Unless otherwise specified, we have no time zone information. +# +# Except for the French entries, +# I made up all time zone abbreviations mentioned here; corrections welcome! +# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited. + +# These rules are stolen from the `europe' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S +Rule RussAQ 1981 1983 - Oct 1 0:00 0 - +Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S +Rule RussAQ 1992 only - Sep lastSat 23:00 0 - +Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussAQ 1996 max - Oct lastSun 2:00s 0 - + +# These rules are stolen from the `southamerica' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - +Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S +Rule ArgAQ 1967 only - Apr 2 0:00 0 - +Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S +Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 - +Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S +Rule ArgAQ 1974 only - May 1 0:00 0 - +Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1987 only - Apr 12 3:00u 0 - +Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S +Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1990 only - Mar 18 3:00u 0 - +Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S +Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1997 only - Mar 30 3:00u 0 - +Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S +Rule ChileAQ 1999 only - Apr 4 3:00u 0 - +Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 - + + +# Argentina - year-round bases +# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05 +# Esperanza, San Martin Land, -6323-05659, since 1952-12-17 +# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01 +# Marambio, Seymour I, -6414-05637, since 1969-10-29 +# Orcadas, Laurie I, -6016-04444, since 1904-02-22 +# San Martin, Debenham I, -6807-06708, since 1951-03-21 +# (except 1960-03 / 1976-03-21) + +# Australia - territories +# Heard Island, McDonald Islands (uninhabited) +# previously sealers and scientific personnel wintered +# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html"> +# Margaret Turner reports +# </a> (1999-09-30) that they're UTC+5, with no DST; +# presumably this is when they have visitors. +# +# year-round bases +# Casey, Bailey Peninsula, -6617+11032, since 1969 +# Davis, Vestfold Hills, -6835+07759, since 1957-01-13 +# (except 1964-11 - 1969-02) +# Mawson, Holme Bay, -6736+06253, since 1954-02-13 +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Casey 0 - zzz 1969 + 8:00 - WST # Western (Aus) Standard Time +Zone Antarctica/Davis 0 - zzz 1957 Jan 13 + 7:00 - DAVT 1964 Nov # Davis Time + 0 - zzz 1969 Feb + 7:00 - DAVT +Zone Antarctica/Mawson 0 - zzz 1954 Feb 13 + 6:00 - MAWT # Mawson Time +# References: +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html"> +# Casey Weather (1998-02-26) +# </a> +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html"> +# Davis Station, Antarctica (1998-02-26) +# </a> +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html"> +# Mawson Station, Antarctica (1998-02-25) +# </a> + +# Brazil - year-round base +# Comandante Ferraz, King George Island, -6205+05824, since 1983/4 + +# Chile - year-round bases and towns +# Escudero, South Shetland Is, -621157-0585735, since 1994 +# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07 +# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02 +# Capitan Arturo Prat, -6230-05941 +# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09 +# These locations have always used Santiago time; use TZ='America/Santiago'. + +# China - year-round bases +# Great Wall, King George Island, -6213-05858, since 1985-02-20 +# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26 + +# France - year-round bases +# +# From Antoine Leca (1997-01-20): +# Time data are from Nicole Pailleau at the IFRTP +# (French Institute for Polar Research and Technology). +# She confirms that French Southern Territories and Terre Adelie bases +# don't observe daylight saving time, even if Terre Adelie supplies came +# from Tasmania. +# +# French Southern Territories with year-round inhabitants +# +# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950 +# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964 +# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951; +# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956 +# +# St Paul Island - near Amsterdam, uninhabited +# fishing stations operated variously 1819/1931 +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais + 5:00 - TFT # ISO code TF Time +# +# year-round base in the main continent +# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11 +# +# Another base at Port-Martin, 50km east, began operation in 1947. +# It was destroyed by fire on 1952-01-14. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/DumontDUrville 0 - zzz 1947 + 10:00 - PMT 1952 Jan 14 # Port-Martin Time + 0 - zzz 1956 Nov + 10:00 - DDUT # Dumont-d'Urville Time +# Reference: +# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station"> +# Dumont d'Urville Station (2005-12-05) +# </a> + +# Germany - year-round base +# Georg von Neumayer, -7039-00815 + +# India - year-round base +# Dakshin Gangotri, -7005+01200 + +# Japan - year-round bases +# Dome Fuji, -7719+03942 +# Syowa, -690022+0393524 +# +# From Hideyuki Suzuki (1999-02-06): +# In all Japanese stations, +0300 is used as the standard time. +# +# Syowa station, which is the first antarctic station of Japan, +# was established on 1957-01-29. Since Syowa station is still the main +# station of Japan, it's appropriate for the principal location. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Syowa 0 - zzz 1957 Jan 29 + 3:00 - SYOT # Syowa Time +# See: +# <a href="http://www.nipr.ac.jp/english/ara01.html"> +# NIPR Antarctic Research Activities (1999-08-17) +# </a> + +# S Korea - year-round base +# King Sejong, King George Island, -6213-05847, since 1988 + +# New Zealand - claims +# Balleny Islands (never inhabited) +# Scott Island (never inhabited) +# +# year-round base +# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo. +# +# These rules for New Zealand are stolen from the `australasia' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D +Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D +Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule NZAQ 1975 only - Feb 23 2:00s 0 S +Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D +Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S + +# Norway - territories +# Bouvet (never inhabited) +# +# claims +# Peter I Island (never inhabited) + +# Poland - year-round base +# Arctowski, King George Island, -620945-0582745, since 1977 + +# Russia - year-round bases +# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22 +# Mirny, Davis coast, -6633+09301, since 1956-02 +# Molodezhnaya, Alasheyev Bay, -6740+04551, +# year-round from 1962-02 to 1999-07-01 +# Novolazarevskaya, Queen Maud Land, -7046+01150, +# year-round from 1960/61 to 1992 + +# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11 +# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP"> +# From Craig Mundell (1994-12-15)</a>: +# Vostok, which is one of the Russian stations, is set on the same +# time as Moscow, Russia. +# +# From Lee Hotz (2001-03-08): +# I queried the folks at Columbia who spent the summer at Vostok and this is +# what they had to say about time there: +# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo) +# time, which is 12 hours ahead of GMT. The Russian Station Vostok was +# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead +# of GMT). This is a time zone I think two hours east of Moscow. The +# natural time zone is in between the two: 8 hours ahead of GMT.'' +# +# From Paul Eggert (2001-05-04): +# This seems to be hopelessly confusing, so I asked Lee Hotz about it +# in person. He said that some Antartic locations set their local +# time so that noon is the warmest part of the day, and that this +# changes during the year and does not necessarily correspond to mean +# solar noon. So the Vostok time might have been whatever the clocks +# happened to be during their visit. So we still don't really know what time +# it is at Vostok. But we'll guess UTC+6. +# +Zone Antarctica/Vostok 0 - zzz 1957 Dec 16 + 6:00 - VOST # Vostok time + +# S Africa - year-round bases +# Marion Island, -4653+03752 +# Sanae, -7141-00250 + +# UK +# +# British Antarctic Territories (BAT) claims +# South Orkney Islands +# scientific station from 1903 +# whaling station at Signy I 1920/1926 +# South Shetland Islands +# +# year-round bases +# Bird Island, South Georgia, -5400-03803, since 1983 +# Deception Island, -6259-06034, whaling station 1912/1931, +# scientific station 1943/1967, +# previously sealers and a scientific expedition wintered by accident, +# and a garrison was deployed briefly +# Halley, Coates Land, -7535-02604, since 1956-01-06 +# Halley is on a moving ice shelf and is periodically relocated +# so that it is never more than 10km from its nominal location. +# Rothera, Adelaide Island, -6734-6808, since 1976-12-01 +# +# From Paul Eggert (2002-10-22) +# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Rothera 0 - zzz 1976 Dec 1 + -3:00 - ROTT # Rothera time + +# Uruguay - year round base +# Artigas, King George Island, -621104-0585107 + +# USA - year-round bases +# +# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968) +# +# From Ethan Dicks (1996-10-06): +# It keeps the same time as Punta Arenas, Chile, because, just like us +# and the South Pole, that's the other end of their supply line.... +# I verified with someone who was there that since 1980, +# Palmer has followed Chile. Prior to that, before the Falklands War, +# Palmer used to be supplied from Argentina. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/Palmer 0 - zzz 1965 + -4:00 ArgAQ AR%sT 1969 Oct 5 + -3:00 ArgAQ AR%sT 1982 May + -4:00 ChileAQ CL%sT +# +# +# McMurdo, Ross Island, since 1955-12 +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Antarctica/McMurdo 0 - zzz 1956 + 12:00 NZAQ NZ%sT +# +# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20 +# +# From Paul Eggert (1996-09-03): +# Normally it wouldn't have a separate entry, since it's like the +# larger Antarctica/McMurdo since 1970, but it's too famous to omit. +# +# From Chris Carrier (1996-06-27): +# Siple, the first commander of the South Pole station, +# stated that he would have liked to have kept GMT at the station, +# but that he found it more convenient to keep GMT+12 +# as supplies for the station were coming from McMurdo Sound, +# which was on GMT+12 because New Zealand was on GMT+12 all year +# at that time (1957). (Source: Siple's book 90 degrees SOUTH.) +# +# From Susan Smith +# http://www.cybertours.com/whs/pole10.html +# (1995-11-13 16:24:56 +1300, no longer available): +# We use the same time as McMurdo does. +# And they use the same time as Christchurch, NZ does.... +# One last quirk about South Pole time. +# All the electric clocks are usually wrong. +# Something about the generators running at 60.1hertz or something +# makes all of the clocks run fast. So every couple of days, +# we have to go around and set them back 5 minutes or so. +# Maybe if we let them run fast all of the time, we'd get to leave here sooner!! +# +Link Antarctica/McMurdo Antarctica/South_Pole diff --git a/libkcal/libical/tzdata/asia b/libkcal/libical/tzdata/asia new file mode 100644 index 000000000..70f151532 --- /dev/null +++ b/libkcal/libical/tzdata/asia @@ -0,0 +1,1919 @@ +# @(#)asia 8.18 +# <pre> + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (2006-03-22): +# +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst +# LMT Local Mean Time +# 2:00 EET EEST Eastern European Time +# 2:00 IST IDT Israel +# 3:00 AST ADT Arabia* +# 3:30 IRST IRDT Iran +# 4:00 GST Gulf* +# 5:30 IST India +# 7:00 ICT Indochina* +# 7:00 WIT west Indonesia +# 8:00 CIT central Indonesia +# 8:00 CST China +# 9:00 CJT Central Japanese Time (1896/1937)* +# 9:00 EIT east Indonesia +# 9:00 JST JDT Japan +# 9:00 KST KDT Korea +# 9:30 CST (Australian) Central Standard Time +# +# See the `europe' file for Russia and Turkey in Asia. + +# From Guy Harris: +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as +# additional information from Tom Yap, Sun Microsystems Intercontinental +# Technical Support (including a page from the Official Airline Guide - +# Worldwide Edition). The names for time zones are guesses. + +############################################################################### + +# These rules are stolen from the `europe' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S +Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 - +Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - +Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S +Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 - +Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 - +Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S +Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 - +Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S +Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 - +Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 - + +# Afghanistan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kabul 4:36:48 - LMT 1890 + 4:00 - AFT 1945 + 4:30 - AFT + +# Armenia +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST) +# in spring 1991, then to 4:00 with no DST in fall 1995, then +# readopting Russian DST in 1997. Go with Shanks & Pottenger, even +# when they disagree with others. Edgar Der-Danieliantz +# reported (1996-05-04) that Yerevan probably wouldn't use DST +# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that +# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991, +# but started switching at 3:00s in 1998. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 + 3:00 - YERT 1957 Mar # Yerevan Time + 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s + 3:00 1:00 YERST 1991 Sep 23 # independence + 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s + 4:00 - AMT 1997 + 4:00 RussiaAsia AM%sT + +# Azerbaijan +# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23): +# According to the resolution of Cabinet of Ministers, 1997 +# Resolution available at: http://aif.az/docs/daylight_res.pdf +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Azer 1997 max - Mar lastSun 4:00 1:00 S +Rule Azer 1997 max - Oct lastSun 5:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Baku 3:19:24 - LMT 1924 May 2 + 3:00 - BAKT 1957 Mar # Baku Time + 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s + 3:00 1:00 BAKST 1991 Aug 30 # independence + 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00 + 4:00 - AZT 1996 # Azerbaijan time + 4:00 EUAsia AZ%sT 1997 + 4:00 Azer AZ%sT + +# Bahrain +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah + 4:00 - GST 1972 Jun + 3:00 - AST + +# Bangladesh +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dhaka 6:01:40 - LMT 1890 + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 6:30 - BURT 1951 Sep 30 + 6:00 - DACT 1971 Mar 26 # Dacca Time + 6:00 - BDT # Bangladesh Time + +# Bhutan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu + 5:30 - IST 1987 Oct + 6:00 - BTT # Bhutan Time + +# British Indian Ocean Territory +# Whitman and the 1995 CIA time zone map say 5:00, but the +# 1997 and later maps say 6:00. Assume the switch occurred in 1996. +# We have no information as to when standard time was introduced; +# assume it occurred in 1907, the same year as Mauritius (which +# then contained the Chagos Archipelago). +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Chagos 4:49:40 - LMT 1907 + 5:00 - IOT 1996 # BIOT Time + 6:00 - IOT + +# Brunei +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan + 7:30 - BNT 1933 + 8:00 - BNT + +# Burma / Myanmar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon + 6:24:36 - RMT 1920 # Rangoon Mean Time? + 6:30 - BURT 1942 May # Burma Time + 9:00 - JST 1945 May 3 + 6:30 - MMT # Myanmar Time + +# Cambodia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# China + +# From Guy Harris: +# People's Republic of China. Yes, they really have only one time zone. + +# From Bob Devine (1988-01-28): +# No they don't. See TIME mag, 1986-02-17 p.52. Even though +# China is across 4 physical time zones, before Feb 1, 1986 only the +# Peking (Bejing) time zone was recognized. Since that date, China +# has two of 'em -- Peking's and Urumqi (named after the capital of +# the Xinjiang Uyghur Autonomous Region). I don't know about DST for it. +# +# . . .I just deleted the DST table and this editor makes it too +# painful to suck in another copy.. So, here is what I have for +# DST start/end dates for Peking's time zone (info from AP): +# +# 1986 May 4 - Sept 14 +# 1987 mid-April - ?? + +# From U. S. Naval Observatory (1989-01-19): +# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN +# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10 + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that China (except for Hong Kong and Macau) +# has had a single time zone since 1980 May 1, observing summer DST +# from 1986 through 1991; this contradicts Devine's +# note about Time magazine, though apparently _something_ happened in 1986. +# Go with Shanks & Pottenger for now. I made up names for the other +# pre-1980 time zones. + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Shang 1940 only - Jun 3 0:00 1:00 D +Rule Shang 1940 1941 - Oct 1 0:00 0 S +Rule Shang 1941 only - Mar 16 0:00 1:00 D +Rule PRC 1986 only - May 4 0:00 1:00 D +Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S +Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D + +# From Anthony Fok (2001-12-20): +# BTW, I did some research on-line and found some info regarding these five +# historic timezones from some Taiwan websites. And yes, there are official +# Chinese names for these locales (before 1949). +# +# From Jesper Norgaard Welen (2006-07-14): +# I have investigated the timezones around 1970 on the +# http://www.astro.com/atlas site [with provinces and county +# boundaries summarized below].... A few other exceptions were two +# counties on the Sichuan side of the Xizang-Sichuan border, +# counties Dege and Baiyu which lies on the Sichuan side and are +# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege +# county is GMT+8 according to astro.com while Baiyu county is GMT+6 +# (could be true), for the moment I am assuming that those two +# counties are mistakes in the astro.com data. + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) +# Heilongjiang (except Mohe county), Jilin +Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin + 8:30 - CHAT 1932 Mar # Changbai Time + 8:00 - CST 1940 + 9:00 - CHAT 1966 May + 8:30 - CHAT 1980 May + 8:00 PRC C%sT +# Zhongyuan Time ("Central plain Time") +# most of China +Zone Asia/Shanghai 8:05:52 - LMT 1928 + 8:00 Shang C%sT 1949 + 8:00 PRC C%sT +# Long-shu Time (probably due to Long and Shu being two names of that area) +# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan; +# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong +# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing, +# Yangchun, Yangjiang, Yu'nan, and Yunfu. +Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking + 7:00 - LONT 1980 May # Long-shu Time + 8:00 PRC C%sT +# Xin-zang Time ("Xinjiang-Tibet Time") +# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai; +# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang, +# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi; +# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi; +# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe, +# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin, +# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami, +# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan. +Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi + 6:00 - URUT 1980 May # Urumqi Time + 8:00 PRC C%sT +# Kunlun Time +# West Tibet, including Pulan, Aheqi, Shufu, Shule; +# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke, +# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding, +# and Yarkand. +Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar + 5:30 - KAST 1940 # Kashgar Time + 5:00 - KAST 1980 May + 8:00 PRC C%sT + +# Hong Kong (Xianggang) +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule HK 1946 only - Apr 20 3:30 1:00 S +Rule HK 1946 only - Dec 1 3:30 0 - +Rule HK 1947 only - Apr 13 3:30 1:00 S +Rule HK 1947 only - Dec 30 3:30 0 - +Rule HK 1948 only - May 2 3:30 1:00 S +Rule HK 1948 1952 - Oct lastSun 3:30 0 - +Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S +Rule HK 1953 only - Nov 1 3:30 0 - +Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S +Rule HK 1954 only - Oct 31 3:30 0 - +Rule HK 1955 1964 - Nov Sun>=1 3:30 0 - +Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S +Rule HK 1965 1977 - Oct Sun>=16 3:30 0 - +Rule HK 1979 1980 - May Sun>=8 3:30 1:00 S +Rule HK 1979 1980 - Oct Sun>=16 3:30 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30 + 8:00 HK HK%sT + + +############################################################################### + +# Taiwan + +# Shanks & Pottenger write that Taiwan observed DST during 1945, when it +# was still controlled by Japan. This is hard to believe, but we don't +# have any other information. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Taiwan 1945 1951 - May 1 0:00 1:00 D +Rule Taiwan 1945 1951 - Oct 1 0:00 0 S +Rule Taiwan 1952 only - Mar 1 0:00 1:00 D +Rule Taiwan 1952 1954 - Nov 1 0:00 0 S +Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D +Rule Taiwan 1955 1961 - Oct 1 0:00 0 S +Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Oct 1 0:00 0 S +Rule Taiwan 1980 only - Jun 30 0:00 1:00 D +Rule Taiwan 1980 only - Sep 30 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei + 8:00 Taiwan C%sT + +# Macau (Macao, Aomen) +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S +Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 - +Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S +Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1965 only - Oct 31 0:00 0 - +Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S +Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 - +Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 - +Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 - +Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S +Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Macau 7:34:20 - LMT 1912 + 8:00 Macau MO%sT 1999 Dec 20 # return to China + 8:00 PRC C%sT + + +############################################################################### + +# Cyprus +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cyprus 1975 only - Apr 13 0:00 1:00 S +Rule Cyprus 1975 only - Oct 12 0:00 0 - +Rule Cyprus 1976 only - May 15 0:00 1:00 S +Rule Cyprus 1976 only - Oct 11 0:00 0 - +Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule Cyprus 1977 only - Sep 25 0:00 0 - +Rule Cyprus 1978 only - Oct 2 0:00 0 - +Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 - +Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14 + 2:00 Cyprus EE%sT 1998 Sep + 2:00 EUAsia EE%sT +# IATA SSIM (1998-09) has Cyprus using EU rules for the first time. + +# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72. +# However, for various reasons many users expect to find it under Europe. +Link Asia/Nicosia Europe/Nicosia + +# Georgia +# From Paul Eggert (1994-11-19): +# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward +# an hour recently, due to a law proposed by Zurab Murvanidze, +# an MP who went on a hunger strike for 11 days to force discussion about it! +# We have no details, but we'll guess they didn't move the clocks back in fall. +# +# From Mathew Englander, quoting AP (1996-10-23 13:05-04): +# Instead of putting back clocks at the end of October, Georgia +# will stay on daylight savings time this winter to save energy, +# President Eduard Shevardnadze decreed Wednesday. +# +# From the BBC via Joseph S. Myers (2004-06-27): +# +# Georgia moved closer to Western Europe on Sunday... The former Soviet +# republic has changed its time zone back to that of Moscow. As a result it +# is now just four hours ahead of Greenwich Mean Time, rather than five hours +# ahead. The switch was decreed by the pro-Western president of Georgia, +# Mikhail Saakashvili, who said the change was partly prompted by the process +# of integration into Europe. + +# From Teimuraz Abashidze (2005-11-07): +# Government of Georgia ... decided to NOT CHANGE daylight savings time on +# [Oct.] 30, as it was done before during last more than 10 years. +# Currently, we are in fact GMT +4:00, as before 30 October it was GMT +# +3:00.... The problem is, there is NO FORMAL LAW or governmental document +# about it. As far as I can find, I was told, that there is no document, +# because we just DIDN'T ISSUE document about switching to winter time.... +# I don't know what can be done, especially knowing that some years ago our +# DST rules where changed THREE TIMES during one month. + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tbilisi 2:59:16 - LMT 1880 + 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time + 3:00 - TBIT 1957 Mar # Tbilisi Time + 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s + 3:00 1:00 TBIST 1991 Apr 9 # independence + 3:00 RussiaAsia GE%sT 1992 # Georgia Time + 3:00 E-EurAsia GE%sT 1994 Sep lastSun + 4:00 E-EurAsia GE%sT 1996 Oct lastSun + 4:00 1:00 GEST 1997 Mar lastSun + 4:00 E-EurAsia GE%sT 2004 Jun 27 + 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00 + 4:00 - GET + +# East Timor + +# See Indonesia for the 1945 transition. + +# From Joao Carrascalao, brother of the former governor of East Timor, in +# <a href="http://etan.org/et99c/december/26-31/30ETMAY.htm"> +# East Timor may be late for its millennium +# </a> (1999-12-26/31): +# Portugal tried to change the time forward in 1974 because the sun +# rises too early but the suggestion raised a lot of problems with the +# Timorese and I still don't think it would work today because it +# conflicts with their way of life. + +# From Paul Eggert (2000-12-04): +# We don't have any record of the above attempt. +# Most likely our records are incomplete, but we have no better data. + +# <a href="http://www.hri.org/news/world/undh/last/00-08-16.undh.html"> +# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General +# (2000-08-16)</a>: +# The Cabinet of the East Timor Transition Administration decided +# today to advance East Timor's time by one hour. The time change, +# which will be permanent, with no seasonal adjustment, will happen at +# midnight on Saturday, September 16. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dili 8:22:20 - LMT 1912 + 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time + 9:00 - JST 1945 Sep 23 + 9:00 - TLT 1976 May 3 + 8:00 - CIT 2000 Sep 17 00:00 + 9:00 - TLT + +# India +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST +# The following are like Asia/Kolkata: +# Andaman Is +# Lakshadweep (Laccadive, Minicoy and Amindivi Is) +# Nicobar Is + +# Indonesia +# +# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger: +# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime> +# says that Indonesia's time zones changed on 1988-01-01. Looking at some +# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat +# and Kalimantan Tengah) switching from UTC+8 to UTC+7. +# +# From Paul Eggert (2007-03-10): +# Here is another correction to Shanks & Pottenger. +# JohnTWB writes that Japanese forces did not surrender control in +# Indonesia until 1945-09-01 00:00 at the earliest (in Jakarta) and +# other formal surrender ceremonies were September 9, 11, and 13, plus +# September 12 for the regional surrender to Mountbatten in Singapore. +# These would be the earliest possible times for a change. +# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions +# Traditionnelles, 1987, Paris) says that Java and Madura switched +# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura +# (Hollandia). For now, assume all Indonesian locations other than Jayapura +# switched on 1945-09-23. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10 +# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13, +# but this must be a typo. + 7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta + 7:20 - JAVT 1932 Nov # Java Time + 7:30 - WIT 1942 Mar 23 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 7:00 - WIT +Zone Asia/Pontianak 7:17:20 - LMT 1908 May + 7:17:20 - PMT 1932 Nov # Pontianak MT + 7:30 - WIT 1942 Jan 29 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 8:00 - CIT 1988 Jan 1 + 7:00 - WIT +Zone Asia/Makassar 7:57:36 - LMT 1920 + 7:57:36 - MMT 1932 Nov # Macassar MT + 8:00 - CIT 1942 Feb 9 + 9:00 - JST 1945 Sep 23 + 8:00 - CIT +Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov + 9:00 - EIT 1944 Sep 1 + 9:30 - CST 1964 + 9:00 - EIT + +# Iran + +# From Roozbeh Pournader (2003-03-15): +# This is an English translation of what I just found (originally in Persian). +# The Gregorian dates in brackets are mine: +# +# Official Newspaper No. 13548-1370/6/25 [1991-09-16] +# No. 16760/T233 H 1370/6/10 [1991-09-01] +# +# The Rule About Change of the Official Time of the Country +# +# The Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14], +# based on the suggestion number 2221/D dated 1370/4/22 [1991-07-13] +# of the Country's Organization for Official and Employment Affairs, +# and referring to the law for equating the working hours of workers +# and officers in the whole country dated 1359/4/23 [1980-07-14], and +# for synchronizing the official times of the country, agreed that: +# +# The official time of the country will should move forward one hour +# at the 24[:00] hours of the first day of Farvardin and should return +# to its previous state at the 24[:00] hours of the 30th day of +# Shahrivar. +# +# First Deputy to the President - Hassan Habibi +# +# From personal experience, that agrees with what has been followed +# for at least the last 5 years. Before that, for a few years, the +# date used was the first Thursday night of Farvardin and the last +# Thursday night of Shahrivar, but I can't give exact dates.... +# I have also changed the abbreviations to what is considered correct +# here in Iran, IRST for regular time and IRDT for daylight saving time. +# +# From Roozbeh Pournader (2005-04-05): +# The text of the Iranian law, in effect since 1925, clearly mentions +# that the true solar year is the measure, and there is no arithmetic +# leap year calculation involved. There has never been any serious +# plan to change that law.... +# +# From Paul Eggert (2006-03-22): +# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter. +# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates, +# stopping after 2037 when 32-bit time_t's overflow. +# That cal-persia used Birashk's approximation, which disagrees with the solar +# calendar predictions for the year 2025, so I corrected those dates by hand. +# +# From Oscar van Vlijmen (2005-03-30), writing about future +# discrepancies between cal-persia and the Iranian calendar: +# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for +# the vernal equinox and that gets so close to 12:00 some local +# Iranian time that the definition of the correct location needs to be +# known exactly, amongst other factors. 2157 is even closer: +# 2157-03-20 08:37:15.5 UT. But the Gregorian year 2025 should give +# no interpretation problem whatsoever. By the way, another instant +# in the near future where there will be a discrepancy between +# arithmetical and astronomical Iranian calendars will be in 2058: +# vernal equinox on 2058-03-20 09:03:05.9 UT. The Java version of +# Reingold's/Dershowitz' calculator gives correctly the Gregorian date +# 2058-03-21 for 1 Farvardin 1437 (astronomical). +# +# From Steffen Thorsen (2006-03-22): +# Several of my users have reported that Iran will not observe DST anymore: +# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm +# +# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen: +# ... the Guardian Council ... approved a law on Sunday to re-introduce +# daylight saving time ... +# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916 +# +# From Roozbeh Pournader (2007-11-05): +# This is quoted from Official Gazette of the Islamic Republic of +# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24 +# [2007-10-16]. I am doing the best translation I can:... +# The official time of the country will be moved forward for one hour +# on the 24 hours of the first day of the month of Farvardin and will +# be changed back to its previous state on the 24 hours of the +# thirtieth day of Shahrivar. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iran 1978 1980 - Mar 21 0:00 1:00 D +Rule Iran 1978 only - Oct 21 0:00 0 S +Rule Iran 1979 only - Sep 19 0:00 0 S +Rule Iran 1980 only - Sep 23 0:00 0 S +Rule Iran 1991 only - May 3 0:00 1:00 D +Rule Iran 1992 1995 - Mar 22 0:00 1:00 D +Rule Iran 1991 1995 - Sep 22 0:00 0 S +Rule Iran 1996 only - Mar 21 0:00 1:00 D +Rule Iran 1996 only - Sep 21 0:00 0 S +Rule Iran 1997 1999 - Mar 22 0:00 1:00 D +Rule Iran 1997 1999 - Sep 22 0:00 0 S +Rule Iran 2000 only - Mar 21 0:00 1:00 D +Rule Iran 2000 only - Sep 21 0:00 0 S +Rule Iran 2001 2003 - Mar 22 0:00 1:00 D +Rule Iran 2001 2003 - Sep 22 0:00 0 S +Rule Iran 2004 only - Mar 21 0:00 1:00 D +Rule Iran 2004 only - Sep 21 0:00 0 S +Rule Iran 2005 only - Mar 22 0:00 1:00 D +Rule Iran 2005 only - Sep 22 0:00 0 S +Rule Iran 2008 only - Mar 21 0:00 1:00 D +Rule Iran 2008 only - Sep 21 0:00 0 S +Rule Iran 2009 2011 - Mar 22 0:00 1:00 D +Rule Iran 2009 2011 - Sep 22 0:00 0 S +Rule Iran 2012 only - Mar 21 0:00 1:00 D +Rule Iran 2012 only - Sep 21 0:00 0 S +Rule Iran 2013 2015 - Mar 22 0:00 1:00 D +Rule Iran 2013 2015 - Sep 22 0:00 0 S +Rule Iran 2016 only - Mar 21 0:00 1:00 D +Rule Iran 2016 only - Sep 21 0:00 0 S +Rule Iran 2017 2019 - Mar 22 0:00 1:00 D +Rule Iran 2017 2019 - Sep 22 0:00 0 S +Rule Iran 2020 only - Mar 21 0:00 1:00 D +Rule Iran 2020 only - Sep 21 0:00 0 S +Rule Iran 2021 2023 - Mar 22 0:00 1:00 D +Rule Iran 2021 2023 - Sep 22 0:00 0 S +Rule Iran 2024 only - Mar 21 0:00 1:00 D +Rule Iran 2024 only - Sep 21 0:00 0 S +Rule Iran 2025 2027 - Mar 22 0:00 1:00 D +Rule Iran 2025 2027 - Sep 22 0:00 0 S +Rule Iran 2028 2029 - Mar 21 0:00 1:00 D +Rule Iran 2028 2029 - Sep 21 0:00 0 S +Rule Iran 2030 2031 - Mar 22 0:00 1:00 D +Rule Iran 2030 2031 - Sep 22 0:00 0 S +Rule Iran 2032 2033 - Mar 21 0:00 1:00 D +Rule Iran 2032 2033 - Sep 21 0:00 0 S +Rule Iran 2034 2035 - Mar 22 0:00 1:00 D +Rule Iran 2034 2035 - Sep 22 0:00 0 S +Rule Iran 2036 2037 - Mar 21 0:00 1:00 D +Rule Iran 2036 2037 - Sep 21 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tehran 3:25:44 - LMT 1916 + 3:25:44 - TMT 1946 # Tehran Mean Time + 3:30 - IRST 1977 Nov + 4:00 Iran IR%sT 1979 + 3:30 Iran IR%sT + + +# Iraq +# +# From Jonathan Lennox (2000-06-12): +# An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in +# the U.S. edition) on the Iraqi Kurds contains a paragraph: +# "The three northern provinces ... switched their clocks this spring and +# are an hour ahead of Baghdad." +# +# But Rives McDow (2000-06-18) quotes a contact in Iraqi-Kurdistan as follows: +# In the past, some Kurdish nationalists, as a protest to the Iraqi +# Government, did not adhere to daylight saving time. They referred +# to daylight saving as Saddam time. But, as of today, the time zone +# in Iraqi-Kurdistan is on standard time with Baghdad, Iraq. +# +# So we'll ignore the Economist's claim. + +# From Steffen Thorsen (2008-03-10): +# The cabinet in Iraq abolished DST last week, according to the following +# news sources (in Arabic): +# <a href="http://www.aljeeran.net/wesima_articles/news-20080305-98602.html"> +# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html +# </a> +# <a href="http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10"> +# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10 +# </a> +# +# We have published a short article in English about the change: +# <a href="http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html"> +# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html +# </a> + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iraq 1982 only - May 1 0:00 1:00 D +Rule Iraq 1982 1984 - Oct 1 0:00 0 S +Rule Iraq 1983 only - Mar 31 0:00 1:00 D +Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D +Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S +Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D +# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo. +# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this. +# +Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D +Rule Iraq 1991 2007 - Oct 1 3:00s 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Baghdad 2:57:40 - LMT 1890 + 2:57:36 - BMT 1918 # Baghdad Mean Time? + 3:00 - AST 1982 May + 3:00 Iraq A%sT + + +############################################################################### + +# Israel + +# From Ephraim Silverberg (2001-01-11): +# +# I coined "IST/IDT" circa 1988. Until then there were three +# different abbreviations in use: +# +# JST Jerusalem Standard Time [Danny Braniss, Hebrew University] +# IZT Israel Zonal (sic) Time [Prof. Haim Papo, Technion] +# EEST Eastern Europe Standard Time [used by almost everyone else] +# +# Since timezones should be called by country and not capital cities, +# I ruled out JST. As Israel is in Asia Minor and not Eastern Europe, +# EEST was equally unacceptable. Since "zonal" was not compatible with +# any other timezone abbreviation, I felt that 'IST' was the way to go +# and, indeed, it has received almost universal acceptance in timezone +# settings in Israeli computers. +# +# In any case, I am happy to share timezone abbreviations with India, +# high on my favorite-country list (and not only because my wife's +# family is from India). + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1940 only - Jun 1 0:00 1:00 D +Rule Zion 1942 1944 - Nov 1 0:00 0 S +Rule Zion 1943 only - Apr 1 2:00 1:00 D +Rule Zion 1944 only - Apr 1 0:00 1:00 D +Rule Zion 1945 only - Apr 16 0:00 1:00 D +Rule Zion 1945 only - Nov 1 2:00 0 S +Rule Zion 1946 only - Apr 16 2:00 1:00 D +Rule Zion 1946 only - Nov 1 0:00 0 S +Rule Zion 1948 only - May 23 0:00 2:00 DD +Rule Zion 1948 only - Sep 1 0:00 1:00 D +Rule Zion 1948 1949 - Nov 1 2:00 0 S +Rule Zion 1949 only - May 1 0:00 1:00 D +Rule Zion 1950 only - Apr 16 0:00 1:00 D +Rule Zion 1950 only - Sep 15 3:00 0 S +Rule Zion 1951 only - Apr 1 0:00 1:00 D +Rule Zion 1951 only - Nov 11 3:00 0 S +Rule Zion 1952 only - Apr 20 2:00 1:00 D +Rule Zion 1952 only - Oct 19 3:00 0 S +Rule Zion 1953 only - Apr 12 2:00 1:00 D +Rule Zion 1953 only - Sep 13 3:00 0 S +Rule Zion 1954 only - Jun 13 0:00 1:00 D +Rule Zion 1954 only - Sep 12 0:00 0 S +Rule Zion 1955 only - Jun 11 2:00 1:00 D +Rule Zion 1955 only - Sep 11 0:00 0 S +Rule Zion 1956 only - Jun 3 0:00 1:00 D +Rule Zion 1956 only - Sep 30 3:00 0 S +Rule Zion 1957 only - Apr 29 2:00 1:00 D +Rule Zion 1957 only - Sep 22 0:00 0 S +Rule Zion 1974 only - Jul 7 0:00 1:00 D +Rule Zion 1974 only - Oct 13 0:00 0 S +Rule Zion 1975 only - Apr 20 0:00 1:00 D +Rule Zion 1975 only - Aug 31 0:00 0 S +Rule Zion 1985 only - Apr 14 0:00 1:00 D +Rule Zion 1985 only - Sep 15 0:00 0 S +Rule Zion 1986 only - May 18 0:00 1:00 D +Rule Zion 1986 only - Sep 7 0:00 0 S +Rule Zion 1987 only - Apr 15 0:00 1:00 D +Rule Zion 1987 only - Sep 13 0:00 0 S +Rule Zion 1988 only - Apr 9 0:00 1:00 D +Rule Zion 1988 only - Sep 3 0:00 0 S + +# From Ephraim Silverberg +# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22, +# and 2005-02-17): + +# According to the Office of the Secretary General of the Ministry of +# Interior, there is NO set rule for Daylight-Savings/Standard time changes. +# One thing is entrenched in law, however: that there must be at least 150 +# days of daylight savings time annually. From 1993-1998, the change to +# daylight savings time was on a Friday morning from midnight IST to +# 1 a.m IDT; up until 1998, the change back to standard time was on a +# Saturday night from midnight daylight savings time to 11 p.m. standard +# time. 1996 is an exception to this rule where the change back to standard +# time took place on Sunday night instead of Saturday night to avoid +# conflicts with the Jewish New Year. In 1999, the change to +# daylight savings time was still on a Friday morning but from +# 2 a.m. IST to 3 a.m. IDT; furthermore, the change back to standard time +# was also on a Friday morning from 2 a.m. IDT to 1 a.m. IST for +# 1999 only. In the year 2000, the change to daylight savings time was +# similar to 1999, but although the change back will be on a Friday, it +# will take place from 1 a.m. IDT to midnight IST. Starting in 2001, all +# changes to/from will take place at 1 a.m. old time, but now there is no +# rule as to what day of the week it will take place in as the start date +# (except in 2003) is the night after the Passover Seder (i.e. the eve +# of the 16th of Nisan in the lunar Hebrew calendar) and the end date +# (except in 2002) is three nights before Yom Kippur [Day of Atonement] +# (the eve of the 7th of Tishrei in the lunar Hebrew calendar). + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1989 only - Apr 30 0:00 1:00 D +Rule Zion 1989 only - Sep 3 0:00 0 S +Rule Zion 1990 only - Mar 25 0:00 1:00 D +Rule Zion 1990 only - Aug 26 0:00 0 S +Rule Zion 1991 only - Mar 24 0:00 1:00 D +Rule Zion 1991 only - Sep 1 0:00 0 S +Rule Zion 1992 only - Mar 29 0:00 1:00 D +Rule Zion 1992 only - Sep 6 0:00 0 S +Rule Zion 1993 only - Apr 2 0:00 1:00 D +Rule Zion 1993 only - Sep 5 0:00 0 S + +# The dates for 1994-1995 were obtained from Office of the Spokeswoman for the +# Ministry of Interior, Jerusalem, Israel. The spokeswoman can be reached by +# calling the office directly at 972-2-6701447 or 972-2-6701448. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1994 only - Apr 1 0:00 1:00 D +Rule Zion 1994 only - Aug 28 0:00 0 S +Rule Zion 1995 only - Mar 31 0:00 1:00 D +Rule Zion 1995 only - Sep 3 0:00 0 S + +# The dates for 1996 were determined by the Minister of Interior of the +# time, Haim Ramon. The official announcement regarding 1996-1998 +# (with the dates for 1997-1998 no longer being relevant) can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz +# +# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa. +# +# The official announcements for the years 1997-1999 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz +# +# where YYYY is the relevant year. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 1996 only - Mar 15 0:00 1:00 D +Rule Zion 1996 only - Sep 16 0:00 0 S +Rule Zion 1997 only - Mar 21 0:00 1:00 D +Rule Zion 1997 only - Sep 14 0:00 0 S +Rule Zion 1998 only - Mar 20 0:00 1:00 D +Rule Zion 1998 only - Sep 6 0:00 0 S +Rule Zion 1999 only - Apr 2 2:00 1:00 D +Rule Zion 1999 only - Sep 3 2:00 0 S + +# The Knesset Interior Committee has changed the dates for 2000 for +# the third time in just over a year and have set new dates for the +# years 2001-2004 as well. +# +# The official announcement for the start date of 2000 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz +# +# The official announcement for the end date of 2000 and the dates +# for the years 2001-2004 can be viewed at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 2000 only - Apr 14 2:00 1:00 D +Rule Zion 2000 only - Oct 6 1:00 0 S +Rule Zion 2001 only - Apr 9 1:00 1:00 D +Rule Zion 2001 only - Sep 24 1:00 0 S +Rule Zion 2002 only - Mar 29 1:00 1:00 D +Rule Zion 2002 only - Oct 7 1:00 0 S +Rule Zion 2003 only - Mar 28 1:00 1:00 D +Rule Zion 2003 only - Oct 3 1:00 0 S +Rule Zion 2004 only - Apr 7 1:00 1:00 D +Rule Zion 2004 only - Sep 22 1:00 0 S + +# The proposed law agreed upon by the Knesset Interior Committee on +# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the +# last Friday before April 2nd (i.e. the last Friday in March or April +# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday +# night _before_ the fast of Yom Kippur. +# +# Those who can read Hebrew can view the announcement at: +# +# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps + +# From Paul Eggert (2005-02-22): +# I used Ephraim Silverberg's dst-israel.el program +# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20) +# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4, +# to generate the transitions in this list. +# (I replaced "lastFri" with "Fri>=26" by hand.) +# The spring transitions below all correspond to the following Rule: +# +# Rule Zion 2005 max - Mar Fri>=26 2:00 1:00 D +# +# but older zic implementations (e.g., Solaris 8) do not support +# "Fri>=26" to mean April 1 in years like 2005, so for now we list the +# springtime transitions explicitly. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Zion 2005 only - Apr 1 2:00 1:00 D +Rule Zion 2005 only - Oct 9 2:00 0 S +Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2006 only - Oct 1 2:00 0 S +Rule Zion 2007 only - Sep 16 2:00 0 S +Rule Zion 2008 only - Oct 5 2:00 0 S +Rule Zion 2009 only - Sep 27 2:00 0 S +Rule Zion 2010 only - Sep 12 2:00 0 S +Rule Zion 2011 only - Apr 1 2:00 1:00 D +Rule Zion 2011 only - Oct 2 2:00 0 S +Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2012 only - Sep 23 2:00 0 S +Rule Zion 2013 only - Sep 8 2:00 0 S +Rule Zion 2014 only - Sep 28 2:00 0 S +Rule Zion 2015 only - Sep 20 2:00 0 S +Rule Zion 2016 only - Apr 1 2:00 1:00 D +Rule Zion 2016 only - Oct 9 2:00 0 S +Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2017 only - Sep 24 2:00 0 S +Rule Zion 2018 only - Sep 16 2:00 0 S +Rule Zion 2019 only - Oct 6 2:00 0 S +Rule Zion 2020 only - Sep 27 2:00 0 S +Rule Zion 2021 only - Sep 12 2:00 0 S +Rule Zion 2022 only - Apr 1 2:00 1:00 D +Rule Zion 2022 only - Oct 2 2:00 0 S +Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2023 only - Sep 24 2:00 0 S +Rule Zion 2024 only - Oct 6 2:00 0 S +Rule Zion 2025 only - Sep 28 2:00 0 S +Rule Zion 2026 only - Sep 20 2:00 0 S +Rule Zion 2027 only - Oct 10 2:00 0 S +Rule Zion 2028 only - Sep 24 2:00 0 S +Rule Zion 2029 only - Sep 16 2:00 0 S +Rule Zion 2030 only - Oct 6 2:00 0 S +Rule Zion 2031 only - Sep 21 2:00 0 S +Rule Zion 2032 only - Sep 12 2:00 0 S +Rule Zion 2033 only - Apr 1 2:00 1:00 D +Rule Zion 2033 only - Oct 2 2:00 0 S +Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2034 only - Sep 17 2:00 0 S +Rule Zion 2035 only - Oct 7 2:00 0 S +Rule Zion 2036 only - Sep 28 2:00 0 S +Rule Zion 2037 only - Sep 13 2:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Jerusalem 2:20:56 - LMT 1880 + 2:20:40 - JMT 1918 # Jerusalem Mean Time? + 2:00 Zion I%sT + + + +############################################################################### + +# Japan + +# `9:00' and `JST' is from Guy Harris. + +# From Paul Eggert (1995-03-06): +# Today's _Asahi Evening News_ (page 4) reports that Japan had +# daylight saving between 1948 and 1951, but ``the system was discontinued +# because the public believed it would lead to longer working hours.'' + +# From Mayumi Negishi in the 2005-08-10 Japan Times +# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>: +# Occupation authorities imposed daylight-saving time on Japan on +# [1948-05-01].... But lack of prior debate and the execution of +# daylight-saving time just three days after the bill was passed generated +# deep hatred of the concept.... The Diet unceremoniously passed a bill to +# dump the unpopular system in October 1951, less than a month after the San +# Francisco Peace Treaty was signed. (A government poll in 1951 showed 53% +# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who +# wanted to keep it.) + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that DST in Japan during those years was as follows: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Japan 1948 only - May Sun>=1 2:00 1:00 D +Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S +Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D +Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D +# but the only locations using it (for birth certificates, presumably, since +# their audience is astrologers) were US military bases. For now, assume +# that for most purposes daylight-saving time was observed; otherwise, what +# would have been the point of the 1951 poll? + +# From Hideyuki Suzuki (1998-11-09): +# 'Tokyo' usually stands for the former location of Tokyo Astronomical +# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0. +# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996' +# edited by National Astronomical Observatory of Japan.... +# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST). +# The law is enacted on 1886-07-07. + +# From Hideyuki Suzuki (1998-11-16): +# The ordinance No. 51 (1886) established "standard time" in Japan, +# which stands for the time on E 135 degree. +# In the ordinance No. 167 (1895), "standard time" was renamed to "central +# standard time". And the same ordinance also established "western standard +# time", which stands for the time on E 120 degree.... But "western standard +# time" was abolished in the ordinance No. 529 (1937). In the ordinance No. +# 167, there is no mention regarding for what place western standard time is +# standard.... +# +# I wrote "ordinance" above, but I don't know how to translate. +# In Japanese it's "chokurei", which means ordinance from emperor. + +# Shanks & Pottenger claim JST in use since 1896, and that a few +# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all +# ordinances took effect on Jan 1. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u + 9:00 - JST 1896 + 9:00 - CJT 1938 + 9:00 Japan J%sT +# Since 1938, all Japanese possessions have been like Asia/Tokyo. + +# Jordan +# +# From <a href="http://star.arabia.com/990701/JO9.html"> +# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09): +# Clocks in Jordan were forwarded one hour on Wednesday at midnight, +# in accordance with the government's decision to implement summer time +# all year round. +# +# From <a href="http://star.arabia.com/990930/JO9.html"> +# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09): +# Winter time starts today Thursday, 30 September. Clocks will be turned back +# by one hour. This is the latest government decision and it's final! +# The decision was taken because of the increase in working hours in +# government's departments from six to seven hours. +# +# From Paul Eggert (2005-11-22): +# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com. +# +# From Steffen Thorsen (2005-11-23): +# For Jordan I have received multiple independent user reports every year +# about DST end dates, as the end-rule is different every year. +# +# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi: +# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm +# "Jordan will switch to winter time on Friday, October 27". +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Jordan 1973 only - Jun 6 0:00 1:00 S +Rule Jordan 1973 1975 - Oct 1 0:00 0 - +Rule Jordan 1974 1977 - May 1 0:00 1:00 S +Rule Jordan 1976 only - Nov 1 0:00 0 - +Rule Jordan 1977 only - Oct 1 0:00 0 - +Rule Jordan 1978 only - Apr 30 0:00 1:00 S +Rule Jordan 1978 only - Sep 30 0:00 0 - +Rule Jordan 1985 only - Apr 1 0:00 1:00 S +Rule Jordan 1985 only - Oct 1 0:00 0 - +Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 - +Rule Jordan 1989 only - May 8 0:00 1:00 S +Rule Jordan 1990 only - Apr 27 0:00 1:00 S +Rule Jordan 1991 only - Apr 17 0:00 1:00 S +Rule Jordan 1991 only - Sep 27 0:00 0 - +Rule Jordan 1992 only - Apr 10 0:00 1:00 S +Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 - +Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1994 only - Sep Fri>=15 0:00 0 - +Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 - +Rule Jordan 1999 only - Jul 1 0:00s 1:00 S +Rule Jordan 1999 2002 - Sep lastThu 0:00s 0 - +Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S +Rule Jordan 2003 only - Oct 24 0:00s 0 - +Rule Jordan 2004 only - Oct 15 0:00s 0 - +Rule Jordan 2005 only - Sep lastFri 0:00s 0 - +Rule Jordan 2006 max - Oct lastFri 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Amman 2:23:44 - LMT 1931 + 2:00 Jordan EE%sT + + +# Kazakhstan + +# From Paul Eggert (1996-11-22): +# Andrew Evtichov (1996-04-13) writes that Kazakhstan +# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk) +# and Aqtau (formerly Shevchenko) are the largest cities in their zones. +# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time +# IATA SSIM mentions a third time zone in Kazakhstan. + +# From Paul Eggert (2006-03-22): +# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses +# RussiaAsia rules, instead of switching at 00:00 as the IATA has it. +# Go with Shanks & Pottenger, who have them always using RussiaAsia rules. +# Also go with the following claims of Shanks & Pottenger: +# +# - Kazakhstan did not observe DST in 1991. +# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00. +# - Oral switched from +5:00 to +4:00 in spring 1989. + +# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm"> +# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21): +# </a> +# The Government of Kazakhstan passed a resolution March 15 abolishing +# daylight saving time citing lack of economic benefits and health +# complications coupled with a decrease in productivity. +# +# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28): +# ... what happened was that the former Kazakhstan Eastern time zone +# was "blended" with the Central zone. Therefore, Kazakhstan now has +# two time zones, and difference between them is one hour. The zone +# closer to UTC is the former Western zone (probably still called the +# same), encompassing four provinces in the west: Aqtobe, Atyrau, +# Mangghystau, and West Kazakhstan. The other zone encompasses +# everything else.... I guess that would make Kazakhstan time zones +# de jure UTC+5 and UTC+6 respectively. + +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan +Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata + 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time + 6:00 RussiaAsia ALM%sT 1991 + 6:00 - ALMT 1992 + 6:00 RussiaAsia ALM%sT 2005 Mar 15 + 6:00 - ALMT +# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) +Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 4:00 - KIZT 1930 Jun 21 # Kizilorda Time + 5:00 - KIZT 1981 Apr 1 + 5:00 1:00 KIZST 1981 Oct 1 + 6:00 - KIZT 1982 Apr 1 + 5:00 RussiaAsia KIZ%sT 1991 + 5:00 - KIZT 1991 Dec 16 # independence + 5:00 - QYZT 1992 Jan 19 2:00 + 6:00 RussiaAsia QYZ%sT 2005 Mar 15 + 6:00 - QYZT +# Aqtobe (aka Aktobe, formerly Akt'ubinsk) +Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time + 5:00 - AKTT 1981 Apr 1 + 5:00 1:00 AKTST 1981 Oct 1 + 6:00 - AKTT 1982 Apr 1 + 5:00 RussiaAsia AKT%sT 1991 + 5:00 - AKTT 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time + 5:00 - AQTT +# Mangghystau +# Aqtau was not founded until 1963, but it represents an inhabited region, +# so include time stamps before 1963. +Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 + 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T + 5:00 - FORT 1963 + 5:00 - SHET 1981 Oct 1 # Shevchenko Time + 6:00 - SHET 1982 Apr 1 + 5:00 RussiaAsia SHE%sT 1991 + 5:00 - SHET 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time + 4:00 RussiaAsia AQT%sT 2005 Mar 15 + 5:00 - AQTT +# West Kazakhstan +Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk + 4:00 - URAT 1930 Jun 21 # Ural'sk time + 5:00 - URAT 1981 Apr 1 + 5:00 1:00 URAST 1981 Oct 1 + 6:00 - URAT 1982 Apr 1 + 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00 + 4:00 RussiaAsia URA%sT 1991 + 4:00 - URAT 1991 Dec 16 # independence + 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time + 5:00 - ORAT + +# Kyrgyzstan (Kirgizstan) +# Transitions through 1991 are from Shanks & Pottenger. + +# From Paul Eggert (2005-08-15): +# According to an article dated today in the Kyrgyzstan Development Gateway +# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml> +# Kyrgyzstan is canceling the daylight saving time system. I take the article +# to mean that they will leave their clocks at 6 hours ahead of UTC. +# From Malik Abdugaliev (2005-09-21): +# Our government cancels daylight saving time 6th of August 2005. +# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S +Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - +Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S +Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2 + 5:00 - FRUT 1930 Jun 21 # Frunze Time + 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s + 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence + 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time + 6:00 - KGT + +############################################################################### + +# Korea (North and South) + +# From Annie I. Bang (2006-07-10) in +# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>: +# The Ministry of Commerce, Industry and Energy has already +# commissioned a research project [to reintroduce DST] and has said +# the system may begin as early as 2008.... Korea ran a daylight +# saving program from 1949-61 but stopped it during the 1950-53 Korean War. + +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule ROK 1960 only - May 15 0:00 1:00 D +Rule ROK 1960 only - Sep 13 0:00 0 S +Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D +Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Seoul 8:27:52 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 ROK K%sT 1961 Aug 10 + 8:30 - KST 1968 Oct + 9:00 ROK K%sT +Zone Asia/Pyongyang 8:23:00 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 - KST 1961 Aug 10 + 9:00 - KST + +############################################################################### + +# Kuwait +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# From the Arab Times (2007-03-14): +# The Civil Service Commission (CSC) has approved a proposal forwarded +# by MP Ahmad Baqer on implementing the daylight saving time (DST) in +# Kuwait starting from April until the end of Sept this year, reports Al-Anba. +# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>. +# From Paul Eggert (2007-03-29): +# We don't know the details, or whether the approval means it'll happen, +# so for now we assume no DST. +Zone Asia/Kuwait 3:11:56 - LMT 1950 + 3:00 - AST + +# Laos +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# Lebanon +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Lebanon 1920 only - Mar 28 0:00 1:00 S +Rule Lebanon 1920 only - Oct 25 0:00 0 - +Rule Lebanon 1921 only - Apr 3 0:00 1:00 S +Rule Lebanon 1921 only - Oct 3 0:00 0 - +Rule Lebanon 1922 only - Mar 26 0:00 1:00 S +Rule Lebanon 1922 only - Oct 8 0:00 0 - +Rule Lebanon 1923 only - Apr 22 0:00 1:00 S +Rule Lebanon 1923 only - Sep 16 0:00 0 - +Rule Lebanon 1957 1961 - May 1 0:00 1:00 S +Rule Lebanon 1957 1961 - Oct 1 0:00 0 - +Rule Lebanon 1972 only - Jun 22 0:00 1:00 S +Rule Lebanon 1972 1977 - Oct 1 0:00 0 - +Rule Lebanon 1973 1977 - May 1 0:00 1:00 S +Rule Lebanon 1978 only - Apr 30 0:00 1:00 S +Rule Lebanon 1978 only - Sep 30 0:00 0 - +Rule Lebanon 1984 1987 - May 1 0:00 1:00 S +Rule Lebanon 1984 1991 - Oct 16 0:00 0 - +Rule Lebanon 1988 only - Jun 1 0:00 1:00 S +Rule Lebanon 1989 only - May 10 0:00 1:00 S +Rule Lebanon 1990 1992 - May 1 0:00 1:00 S +Rule Lebanon 1992 only - Oct 4 0:00 0 - +Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S +Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 - +Rule Lebanon 1999 max - Oct lastSun 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Beirut 2:22:00 - LMT 1880 + 2:00 Lebanon EE%sT + +# Malaysia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer +Rule NBorneo 1935 1941 - Dec 14 0:00 0 - +# +# peninsular Malaysia +# The data here are taken from Mok Ly Yng (2003-10-30) +# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1982 Jan 1 + 8:00 - MYT # Malaysia Time +# Sabah & Sarawak +# From Paul Eggert (2006-03-22): +# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982 +# transition dates are from Mok Ly Yng. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Kuching 7:21:20 - LMT 1926 Mar + 7:30 - BORT 1933 # Borneo Time + 8:00 NBorneo BOR%sT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 8:00 - BORT 1982 Jan 1 + 8:00 - MYT + +# Maldives +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Maldives 4:54:00 - LMT 1880 # Male + 4:54:00 - MMT 1960 # Male Mean Time + 5:00 - MVT # Maldives Time + +# Mongolia + +# Shanks & Pottenger say that Mongolia has three time zones, but +# usno1995 and the CIA map Standard Time Zones of the World (2005-03) +# both say that it has just one. + +# From Oscar van Vlijmen (1999-12-11): +# <a href="http://www.mongoliatourism.gov.mn/general.htm"> +# General Information Mongolia +# </a> (1999-09) +# "Time: Mongolia has two time zones. Three westernmost provinces of +# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and +# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus +# eight hours." + +# From Rives McDow (1999-12-13): +# Mongolia discontinued the use of daylight savings time in 1999; 1998 +# being the last year it was implemented. The dates of implementation I am +# unsure of, but most probably it was similar to Russia, except for the time +# of implementation may have been different.... +# Some maps in the past have indicated that there was an additional time +# zone in the eastern part of Mongolia, including the provinces of Dornod, +# Suhbaatar, and possibly Khentij. + +# From Paul Eggert (1999-12-15): +# Naming and spelling is tricky in Mongolia. +# We'll use Hovd (also spelled Chovd and Khovd) to represent the west zone; +# the capital of the Hovd province is sometimes called Hovd, sometimes Dund-Us, +# and sometimes Jirgalanta (with variant spellings), but the name Hovd +# is good enough for our purposes. + +# From Rives McDow (2001-05-13): +# In addition to Mongolia starting daylight savings as reported earlier +# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28), +# there are three time zones. +# +# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai +# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov, +# Bayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi +# Provinces [at 9:00]: Dornod, Sukhbaatar +# +# [The province of Selenge is omitted from the above lists.] + +# From Ganbold Ts., Ulaanbaatar (2004-04-17): +# Daylight saving occurs at 02:00 local time last Saturday of March. +# It will change back to normal at 02:00 local time last Saturday of +# September.... As I remember this rule was changed in 2001. +# +# From Paul Eggert (2004-04-17): +# For now, assume Rives McDow's informant got confused about Friday vs +# Saturday, and that his 2001 dates should have 1 added to them. + +# From Paul Eggert (2005-07-26): +# We have wildly conflicting information about Mongolia's time zones. +# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says +# there is only one time zone and that DST is observed, citing Microsoft +# Windows XP as the source. Risto Nykanen (2005-05-16) reports that +# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST. +# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in +# Washington, DC says there are two time zones, with DST observed. +# He also found +# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&> +# which also says that there is DST, and which has a comment by "Toddius" +# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones. +# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT +# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT. +# The SUKH timezone is new this year, it is one of the few things the +# parliament passed during the tumultuous winter session." +# For now, let's ignore this information, until we have more confirmation. + +# From Ganbold Ts. (2007-02-26): +# Parliament of Mongolia has just changed the daylight-saving rule in February. +# They decided not to adopt daylight-saving time.... +# http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S +Rule Mongol 1983 only - Oct 1 0:00 0 - +# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, +# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM +# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998. +# +# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches +# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place +# at 02:00 standard time, not at 00:00 local time as in the rest of +# the country. That would be odd, and possibly is a result of their +# correction of 02:00 (in the previous edition) not being done correctly +# in the latest edition; so ignore it for now. + +Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S +Rule Mongol 1984 1998 - Sep lastSun 0:00 0 - +# IATA SSIM (1999-09) says Mongolia no longer observes DST. +Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S +Rule Mongol 2001 2006 - Sep lastSat 2:00 0 - +Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta +Zone Asia/Hovd 6:06:36 - LMT 1905 Aug + 6:00 - HOVT 1978 # Hovd Time + 7:00 Mongol HOV%sT +# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga +Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug + 7:00 - ULAT 1978 # Ulaanbaatar Time + 8:00 Mongol ULA%sT +# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan, +# Choybalsan, Sanbejse, Tchoibalsan +Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug + 7:00 - ULAT 1978 + 8:00 - ULAT 1983 Apr + 9:00 Mongol CHO%sT # Choibalsan Time + +# Nepal +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Katmandu 5:41:16 - LMT 1920 + 5:30 - IST 1986 + 5:45 - NPT # Nepal Time + +# Oman +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Muscat 3:54:20 - LMT 1920 + 4:00 - GST + +# Pakistan + +# From Rives McDow (2002-03-13): +# I have been advised that Pakistan has decided to adopt dst on a +# TRIAL basis for one year, starting 00:01 local time on April 7, 2002 +# and ending at 00:01 local time October 6, 2002. This is what I was +# told, but I believe that the actual time of change may be 00:00; the +# 00:01 was to make it clear which day it was on. + +# From Paul Eggert (2002-03-15): +# Jesper Norgaard found this URL: +# http://www.pak.gov.pk/public/news/app/app06_dec.htm +# (dated 2001-12-06) which says that the Cabinet adopted a scheme "to +# advance the clocks by one hour on the night between the first +# Saturday and Sunday of April and revert to the original position on +# 15th October each year". This agrees with McDow's 04-07 at 00:00, +# but disagrees about the October transition, and makes it sound like +# it's not on a trial basis. Also, the "between the first Saturday +# and Sunday of April" phrase, if taken literally, means that the +# transition takes place at 00:00 on the first Sunday on or after 04-02. + +# From Paul Eggert (2003-02-09): +# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05 +# that 2002 DST ended that day at midnight. Go with McDow for now. + +# From Steffen Thorsen (2003-03-14): +# According to http://www.dawn.com/2003/03/07/top15.htm +# there will be no DST in Pakistan this year: +# +# ISLAMABAD, March 6: Information and Media Development Minister Sheikh +# Rashid Ahmed on Thursday said the cabinet had reversed a previous +# decision to advance clocks by one hour in summer and put them back by +# one hour in winter with the aim of saving light hours and energy. +# +# The minister told a news conference that the experiment had rather +# shown 8 per cent higher consumption of electricity. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S +Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Karachi 4:28:12 - LMT 1907 + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST 1951 Sep 30 + 5:00 - KART 1971 Mar 26 # Karachi Time + 5:00 Pakistan PK%sT # Pakistan Time + +# Palestine + +# From Amos Shapir (1998-02-15): +# +# From 1917 until 1948-05-15, all of Palestine, including the parts now +# known as the Gaza Strip and the West Bank, was under British rule. +# Therefore the rules given for Israel for that period, apply there too... +# +# The Gaza Strip was under Egyptian rule between 1948-05-15 until 1967-06-05 +# (except a short occupation by Israel from 1956-11 till 1957-03, but no +# time zone was affected then). It was never formally annexed to Egypt, +# though. +# +# The rest of Palestine was under Jordanian rule at that time, formally +# annexed in 1950 as the West Bank (and the word "Trans" was dropped from +# the country's previous name of "the Hashemite Kingdom of the +# Trans-Jordan"). So the rules for Jordan for that time apply. Major +# towns in that area are Nablus (Shchem), El-Halil (Hebron), Ramallah, and +# East Jerusalem. +# +# Both areas were occupied by Israel in June 1967, but not annexed (except +# for East Jerusalem). They were on Israel time since then; there might +# have been a Military Governor's order about time zones, but I'm not aware +# of any (such orders may have been issued semi-annually whenever summer +# time was in effect, but maybe the legal aspect of time was just neglected). +# +# The Palestinian Authority was established in 1993, and got hold of most +# towns in the West Bank and Gaza by 1995. I know that in order to +# demonstrate...independence, they have been switching to +# summer time and back on a different schedule than Israel's, but I don't +# know when this was started, or what algorithm is used (most likely the +# Jordanian one). +# +# To summarize, the table should probably look something like that: +# +# Area \ when | 1918-1947 | 1948-1967 | 1967-1995 | 1996- +# ------------+-----------+-----------+-----------+----------- +# Israel | Zion | Zion | Zion | Zion +# West bank | Zion | Jordan | Zion | Jordan +# Gaza | Zion | Egypt | Zion | Jordan +# +# I guess more info may be available from the PA's web page (if/when they +# have one). + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go +# with Shapir and assume that it observed DST from 1940 through 1947, +# and that it used Jordanian rules starting in 1996. +# We don't yet need a separate entry for the West Bank, since +# the only differences between it and Gaza that we know about +# occurred before our cutoff date of 1970. +# However, as we get more information, we may need to add entries +# for parts of the West Bank as they transitioned from Israel's rules +# to Palestine's rules. If you have more info about this, please +# send it to tz@elsie.nci.nih.gov for incorporation into future editions. + +# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time, +# forwarded by Ephraim Silverberg: +# +# Despite the fact that Israel changed over to daylight savings time +# last week, the PLO Authority (PA) has decided not to turn its clocks +# one-hour forward at this time. As a sign of independence from Israeli rule, +# the PA has decided to implement DST in April. + +# From Paul Eggert (1999-09-20): +# Daoud Kuttab writes in +# <a href="http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html"> +# Holiday havoc +# </a> (Jerusalem Post, 1999-04-22) that +# the Palestinian National Authority changed to DST on 1999-04-15. +# I vaguely recall that they switch back in October (sorry, forgot the source). +# For now, let's assume that the spring switch was at 24:00, +# and that they switch at 0:00 on the 3rd Fridays of April and October. + +# From Paul Eggert (2005-11-22): +# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com. + +# From Steffen Thorsen (2005-11-23): +# A user from Gaza reported that Gaza made the change early because of +# the Ramadan. Next year Ramadan will be even earlier, so I think +# there is a good chance next year's end date will be around two weeks +# earlier--the same goes for Jordan. + +# From Steffen Thorsen (2006-08-17): +# I was informed by a user in Bethlehem that in Bethlehem it started the +# same day as Israel, and after checking with other users in the area, I +# was informed that they started DST one day after Israel. I was not +# able to find any authoritative sources at the time, nor details if +# Gaza changed as well, but presumed Gaza to follow the same rules as +# the West Bank. + +# From Steffen Thorsen (2006-09-26): +# according to the Palestine News Network (2006-09-19): +# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5 +# > The Council of Ministers announced that this year its winter schedule +# > will begin early, as of midnight Thursday. It is also time to turn +# > back the clocks for winter. Friday will begin an hour late this week. +# I guess it is likely that next year's date will be moved as well, +# because of the Ramadan. + +# From Jesper Norgaard Welen (2007-09-18): +# According to Steffen Thorsen's web site the Gaza Strip and the rest of the +# Palestinian territories left DST early on 13.th. of September at 2:00. + +# From Paul Eggert (2007-09-20): +# My understanding is that Gaza and the West Bank disagree even over when +# the weekend is (Thursday+Friday versus Friday+Saturday), so I'd be a bit +# surprised if they agreed about DST. But for now, assume they agree. +# For lack of better information, predict that future changes will be +# the 2nd Thursday of September at 02:00. + +# The rules for Egypt are stolen from the `africa' file. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EgyptAsia 1957 only - May 10 0:00 1:00 S +Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - +Rule EgyptAsia 1958 only - May 1 0:00 1:00 S +Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S +Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 - +Rule EgyptAsia 1966 only - Oct 1 3:00 0 - + +Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S +Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 - +Rule Palestine 2004 only - Oct 1 1:00 0 - +Rule Palestine 2005 only - Oct 4 2:00 0 - +Rule Palestine 2006 max - Apr 1 0:00 1:00 S +Rule Palestine 2006 only - Sep 22 0:00 0 - +Rule Palestine 2007 max - Sep Thu>=8 2:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Gaza 2:17:52 - LMT 1900 Oct + 2:00 Zion EET 1948 May 15 + 2:00 EgyptAsia EE%sT 1967 Jun 5 + 2:00 Zion I%sT 1996 + 2:00 Jordan EE%sT 1999 + 2:00 Palestine EE%sT + +# Paracel Is +# no information + +# Philippines +# On 1844-08-16, Narciso Claveria, governor-general of the +# Philippines, issued a proclamation announcing that 1844-12-30 was to +# be immediately followed by 1845-01-01. Robert H. van Gent has a +# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>. +# The rest of the data are from Shanks & Pottenger. + +# From Paul Eggert (2006-04-25): +# Tomorrow's Manila Standard reports that the Philippines Department of +# Trade and Industry is considering adopting DST this June when the +# rainy season begins. See +# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>. +# For now, we'll ignore this, since it's not definite and we lack details. +# +# From Jesper Norgaard Welen (2006-04-26): +# ... claims that Philippines had DST last time in 1990: +# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/ +# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires, +# but no details] + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Phil 1936 only - Nov 1 0:00 1:00 S +Rule Phil 1937 only - Feb 1 0:00 0 - +Rule Phil 1954 only - Apr 12 0:00 1:00 S +Rule Phil 1954 only - Jul 1 0:00 0 - +Rule Phil 1978 only - Mar 22 0:00 1:00 S +Rule Phil 1978 only - Sep 21 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 + 8:04:00 - LMT 1899 May 11 + 8:00 Phil PH%sT 1942 May + 9:00 - JST 1944 Nov + 8:00 Phil PH%sT + +# Qatar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha + 4:00 - GST 1972 Jun + 3:00 - AST + +# Saudi Arabia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Riyadh 3:06:52 - LMT 1950 + 3:00 - AST + +# Singapore +# The data here are taken from Mok Ly Yng (2003-10-30) +# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1965 Aug 9 # independence + 7:30 - SGT 1982 Jan 1 # Singapore Time + 8:00 - SGT + +# Spratly Is +# no information + +# Sri Lanka +# From Paul Eggert (1996-09-03): +# "Sri Lanka advances clock by an hour to avoid blackout" +# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24, +# no longer available as of 1999-08-17) +# reported ``the country's standard time will be put forward by one hour at +# midnight Friday (1830 GMT) `in the light of the present power crisis'.'' +# +# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted +# by Shamindra in +# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net"> +# Daily News - Hot News Section (1996-10-26) +# </a>: +# With effect from 12.30 a.m. on 26th October 1996 +# Sri Lanka will be six (06) hours ahead of GMT. + +# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online +# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13): +# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes) +# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006). + +# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in: +# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML> +# [The Tamil Tigers] never accepted the original 1996 time change and simply +# kept their clocks set five and a half hours ahead of Greenwich Mean +# Time (GMT), in line with neighbor India. +# From Paul Eggert (2006-04-18): +# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'], +# as that zone has agreed with the Tamil areas since our cutoff date of 1970. + +# From K Sethu (2006-04-25): +# I think the abbreviation LKT originated from the world of computers at +# the time of or subsequent to the time zone changes by SL Government +# twice in 1996 and probably SL Government or its standardization +# agencies never declared an abbreviation as a national standard. +# +# I recollect before the recent change the government annoucemments +# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka +# Time and no mention was made about the abbreviation. +# +# If we look at Sri Lanka Department of Government's "Official News +# Website of Sri Lanka" ... http://www.news.lk/ we can see that they +# use SLT as abbreviation in time stamp at the beginning of each news +# item.... +# +# Within Sri Lanka I think LKT is well known among computer users and +# adminsitrators. In my opinion SLT may not be a good choice because the +# nation's largest telcom / internet operator Sri Lanka Telcom is well +# known by that abbreviation - simply as SLT (there IP domains are +# slt.lk and sltnet.lk). +# +# But if indeed our government has adopted SLT as standard abbreviation +# (that we have not known so far) then it is better that it be used for +# all computers. + +# From Paul Eggert (2006-04-25): +# One possibility is that we wait for a bit for the dust to settle down +# and then see what people actually say in practice. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Colombo 5:19:24 - LMT 1880 + 5:19:32 - MMT 1906 # Moratuwa Mean Time + 5:30 - IST 1942 Jan 5 + 5:30 0:30 IHST 1942 Sep + 5:30 1:00 IST 1945 Oct 16 2:00 + 5:30 - IST 1996 May 25 0:00 + 6:30 - LKT 1996 Oct 26 0:30 + 6:00 - LKT 2006 Apr 15 0:30 + 5:30 - IST + +# Syria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S +Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 - +Rule Syria 1962 only - Apr 29 2:00 1:00 S +Rule Syria 1962 only - Oct 1 2:00 0 - +Rule Syria 1963 1965 - May 1 2:00 1:00 S +Rule Syria 1963 only - Sep 30 2:00 0 - +Rule Syria 1964 only - Oct 1 2:00 0 - +Rule Syria 1965 only - Sep 30 2:00 0 - +Rule Syria 1966 only - Apr 24 2:00 1:00 S +Rule Syria 1966 1976 - Oct 1 2:00 0 - +Rule Syria 1967 1978 - May 1 2:00 1:00 S +Rule Syria 1977 1978 - Sep 1 2:00 0 - +Rule Syria 1983 1984 - Apr 9 2:00 1:00 S +Rule Syria 1983 1984 - Oct 1 2:00 0 - +Rule Syria 1986 only - Feb 16 2:00 1:00 S +Rule Syria 1986 only - Oct 9 2:00 0 - +Rule Syria 1987 only - Mar 1 2:00 1:00 S +Rule Syria 1987 1988 - Oct 31 2:00 0 - +Rule Syria 1988 only - Mar 15 2:00 1:00 S +Rule Syria 1989 only - Mar 31 2:00 1:00 S +Rule Syria 1989 only - Oct 1 2:00 0 - +Rule Syria 1990 only - Apr 1 2:00 1:00 S +Rule Syria 1990 only - Sep 30 2:00 0 - +Rule Syria 1991 only - Apr 1 0:00 1:00 S +Rule Syria 1991 1992 - Oct 1 0:00 0 - +Rule Syria 1992 only - Apr 8 0:00 1:00 S +Rule Syria 1993 only - Mar 26 0:00 1:00 S +Rule Syria 1993 only - Sep 25 0:00 0 - +# IATA SSIM (1998-02) says 1998-04-02; +# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02, +# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31; +# (2006) says 2006-03-31 and 2006-09-22; +# for now ignore all these claims and go with Shanks & Pottenger, +# except for the 2006-09-22 claim (which seems right for Ramadan). +Rule Syria 1994 1996 - Apr 1 0:00 1:00 S +Rule Syria 1994 2005 - Oct 1 0:00 0 - +Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S +Rule Syria 1999 2006 - Apr 1 0:00 1:00 S +# From Stephen Colebourne (2006-09-18): +# According to IATA data, Syria will change DST on 21st September [21:00 UTC] +# this year [only].... This is probably related to Ramadan, like Egypt. +Rule Syria 2006 only - Sep 22 0:00 0 - +# From Paul Eggert (2007-03-29): +# Today the AP reported "Syria will switch to summertime at midnight Thursday." +# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php +Rule Syria 2007 only - Mar lastFri 0:00 1:00 S +# From Jesper Norgard (2007-10-27): +# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will +# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or +# rather Midnight between Thursday and Friday. This does make more sence than +# having it between Wednesday and Thursday (two workdays in Syria) since the +# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now +# it is implemented at midnight of the last workday before weekend... +# +# From Steffen Thorsen (2007-10-27): +# Jesper Norgaard Welen wrote: +# +# > "Winter local time in Syria will be observed at midnight of Thursday 1 +# > November 2007, and the clock will be put back 1 hour." +# +# I found confirmation on this in this gov.sy-article (Arabic): +# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247 +# +# which using Google's translate tools says: +# Council of Ministers also approved the commencement of work on +# identifying the winter time as of Friday, 2/11/2007 where the 60th +# minute delay at midnight Thursday 1/11/2007. +Rule Syria 2007 only - Nov Fri>=1 0:00 0 - + +# From Stephen Colebourne (2008-03-17): +# For everyone's info, I saw an IATA time zone change for [Syria] for +# this month (March 2008) in the last day or so...This is the data IATA +# are now using: +# Country Time Standard --- DST Start --- --- DST End --- DST +# Name Zone Variation Time Date Time Date +# Variation +# Syrian Arab +# Republic SY +0200 2200 03APR08 2100 30SEP08 +0300 +# 2200 02APR09 2100 30SEP09 +0300 +# 2200 01APR10 2100 30SEP10 +0300 + +# From Arthur David Olson (2008-03-17): +# Here's a link to English-language coverage by the Syrian Arab News +# Agency (SANA)... +# <a href="http://www.sana.sy/eng/21/2008/03/11/165173.htm"> +# http://www.sana.sy/eng/21/2008/03/11/165173.htm +# </a>...which reads (in part) "The Cabinet approved the suggestion of the +# Ministry of Electricity to begin daylight savings time on Friday April +# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd." +# Since Syria is two hours east of UTC, the 2200 and 2100 transition times +# shown above match up with midnight in Syria. + +# From Arthur David Olson (2008-03-18): +# My buest guess at a Syrian rule is "the Friday nearest April 1"; +# coding that involves either using a "Mar Fri>=29" construct that old time zone +# compilers can't handle or having multiple Rules (a la Israel). +# For now, use "Apr Fri>=1", and go with IATA on a uniform Sep 30 end. + +Rule Syria 2008 max - Apr Fri>=1 0:00 1:00 S +Rule Syria 2008 max - Oct 1 0:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq + 2:00 Syria EE%sT + +# Tajikistan +# From Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2 + 5:00 - DUST 1930 Jun 21 # Dushanbe Time + 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s + 5:00 1:00 DUSST 1991 Sep 9 2:00s + 5:00 - TJT # Tajikistan Time + +# Thailand +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Bangkok 6:42:04 - LMT 1880 + 6:42:04 - BMT 1920 Apr # Bangkok Mean Time + 7:00 - ICT + +# Turkmenistan +# From Shanks & Pottenger. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad + 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time + 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00 + 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence + 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00 + 5:00 - TMT + +# United Arab Emirates +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Dubai 3:41:12 - LMT 1920 + 4:00 - GST + +# Uzbekistan +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2 + 4:00 - SAMT 1930 Jun 21 # Samarkand Time + 5:00 - SAMT 1981 Apr 1 + 5:00 1:00 SAMST 1981 Oct 1 + 6:00 - TAST 1982 Apr 1 # Tashkent Time + 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT +Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2 + 5:00 - TAST 1930 Jun 21 # Tashkent Time + 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00 + 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT + +# Vietnam + +# From Arthur David Olson (2008-03-18): +# The English-language name of Vietnam's most populous city is "Ho Chi Min City"; +# we use Ho_Chi_Minh below to avoid a name of more than 14 characters. + +# From Shanks & Pottenger: +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT + +# Yemen +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Asia/Aden 3:00:48 - LMT 1950 + 3:00 - AST diff --git a/libkcal/libical/tzdata/australasia b/libkcal/libical/tzdata/australasia new file mode 100644 index 000000000..30d695ff5 --- /dev/null +++ b/libkcal/libical/tzdata/australasia @@ -0,0 +1,1454 @@ +# @(#)australasia 8.8 +# <pre> + +# This file also includes Pacific islands. + +# Notes are at the end of this file + +############################################################################### + +# Australia + +# Please see the notes below for the controversy about "EST" versus "AEST" etc. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Aus 1917 only - Jan 1 0:01 1:00 - +Rule Aus 1917 only - Mar 25 2:00 0 - +Rule Aus 1942 only - Jan 1 2:00 1:00 - +Rule Aus 1942 only - Mar 29 2:00 0 - +Rule Aus 1942 only - Sep 27 2:00 1:00 - +Rule Aus 1943 1944 - Mar lastSun 2:00 0 - +Rule Aus 1943 only - Oct 3 2:00 1:00 - +# Go with Whitman and the Australian National Standards Commission, which +# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that +# 1944/1945 was just like 1943/1944. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Northern Territory +Zone Australia/Darwin 8:43:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST +# Western Australia +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AW 1974 only - Oct lastSun 2:00s 1:00 - +Rule AW 1975 only - Mar Sun>=1 2:00s 0 - +Rule AW 1983 only - Oct lastSun 2:00s 1:00 - +Rule AW 1984 only - Mar Sun>=1 2:00s 0 - +Rule AW 1991 only - Nov 17 2:00s 1:00 - +Rule AW 1992 only - Mar Sun>=1 2:00s 0 - +Rule AW 2006 only - Dec 3 2:00s 1:00 - +Rule AW 2007 2009 - Mar lastSun 2:00s 0 - +Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 - +Zone Australia/Perth 7:43:24 - LMT 1895 Dec + 8:00 Aus WST 1943 Jul + 8:00 AW WST +Zone Australia/Eucla 8:35:28 - LMT 1895 Dec + 8:45 Aus CWST 1943 Jul + 8:45 AW CWST + +# Queensland +# +# From Alex Livingston (1996-11-01): +# I have heard or read more than once that some resort islands off the coast +# of Queensland chose to keep observing daylight-saving time even after +# Queensland ceased to. +# +# From Paul Eggert (1996-11-22): +# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman, +# Hamilton) observed DST for two years after the rest of Queensland stopped. +# Hamilton is the largest, but there is also a Hamilton in Victoria, +# so use Lindeman. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AQ 1971 only - Oct lastSun 2:00s 1:00 - +Rule AQ 1972 only - Feb lastSun 2:00s 0 - +Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 - +Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 - +Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 - +Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 - +Zone Australia/Brisbane 10:12:08 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST +Zone Australia/Lindeman 9:55:56 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST 1992 Jul + 10:00 Holiday EST + +# South Australia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AS 1986 only - Oct 19 2:00s 1:00 - +Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 - +Rule AS 1972 only - Feb 27 2:00s 0 - +Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AS 1986 1989 - Mar Sun>=15 2:00s 0 - +Rule AS 1990 only - Mar Sun>=18 2:00s 0 - +Rule AS 1991 only - Mar Sun>=1 2:00s 0 - +Rule AS 1992 only - Mar Sun>=18 2:00s 0 - +Rule AS 1993 only - Mar Sun>=1 2:00s 0 - +Rule AS 1994 only - Mar Sun>=18 2:00s 0 - +Rule AS 1995 2005 - Mar lastSun 2:00s 0 - +Rule AS 2006 only - Apr Sun>=1 2:00s 0 - +Rule AS 2007 only - Mar lastSun 2:00s 0 - +Rule AS 2008 max - Apr Sun>=1 2:00s 0 - +Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AS CST + +# Tasmania +# +# From Paul Eggert (2005-08-16): +# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml> +# says King Island didn't observe DST from WWII until late 1971. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 - +Rule AT 1968 only - Mar lastSun 2:00s 0 - +Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 - +Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 - +Rule AT 1972 only - Feb lastSun 2:00s 0 - +Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AT 1982 1983 - Mar lastSun 2:00s 0 - +Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 - +Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 - +Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 - +Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 - +Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 - +Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 - +Rule AT 1991 2005 - Mar lastSun 2:00s 0 - +Rule AT 2000 only - Aug lastSun 2:00s 1:00 - +Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 - +Rule AT 2006 only - Apr Sun>=1 2:00s 0 - +Rule AT 2007 only - Mar lastSun 2:00s 0 - +Rule AT 2008 max - Apr Sun>=1 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Hobart 9:49:16 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1967 + 10:00 AT EST +Zone Australia/Currie 9:35:28 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1971 Jul + 10:00 AT EST + +# Victoria +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AV 1972 only - Feb lastSun 2:00s 0 - +Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 - +Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 - +Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 - +Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 - +Rule AV 1995 2005 - Mar lastSun 2:00s 0 - +Rule AV 2000 only - Aug lastSun 2:00s 1:00 - +Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AV 2006 only - Apr Sun>=1 2:00s 0 - +Rule AV 2007 only - Mar lastSun 2:00s 0 - +Rule AV 2008 max - Apr Sun>=1 2:00s 0 - +Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AV EST + +# New South Wales +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AN 1972 only - Feb 27 2:00s 0 - +Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AN 1982 only - Apr Sun>=1 2:00s 0 - +Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 - +Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 - +Rule AN 1986 only - Oct 19 2:00s 1:00 - +Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 - +Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 - +Rule AN 1996 2005 - Mar lastSun 2:00s 0 - +Rule AN 2000 only - Aug lastSun 2:00s 1:00 - +Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AN 2006 only - Apr Sun>=1 2:00s 0 - +Rule AN 2007 only - Mar lastSun 2:00s 0 - +Rule AN 2008 max - Apr Sun>=1 2:00s 0 - +Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Australia/Sydney 10:04:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AN EST +Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb + 10:00 - EST 1896 Aug 23 + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AN CST 2000 + 9:30 AS CST + +# Lord Howe Island +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - +Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - +Rule LH 1985 only - Oct lastSun 2:00 0:30 - +Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - +Rule LH 1986 only - Oct 19 2:00 0:30 - +Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - +Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - +Rule LH 1996 2005 - Mar lastSun 2:00 0 - +Rule LH 2000 only - Aug lastSun 2:00 0:30 - +Rule LH 2001 2007 - Oct lastSun 2:00 0:30 - +Rule LH 2006 only - Apr Sun>=1 2:00 0 - +Rule LH 2007 only - Mar lastSun 2:00 0 - +Rule LH 2008 max - Apr Sun>=1 2:00 0 - +Rule LH 2008 max - Oct Sun>=1 2:00 0:30 - +Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb + 10:00 - EST 1981 Mar + 10:30 LH LHST + +# Australian miscellany +# +# Ashmore Is, Cartier +# no indigenous inhabitants; only seasonal caretakers +# no times are set +# +# Coral Sea Is +# no indigenous inhabitants; only meteorologists +# no times are set +# +# Macquarie +# permanent occupation (scientific station) since 1948; +# sealing and penguin oil station operated 1888/1917 +# like Australia/Hobart + +# Christmas +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Christmas 7:02:52 - LMT 1895 Feb + 7:00 - CXT # Christmas Island Time + +# Cook Is +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cook 1978 only - Nov 12 0:00 0:30 HS +Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - +Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua + -10:30 - CKT 1978 Nov 12 # Cook Is Time + -10:00 Cook CK%sT + +# Cocos +# These islands were ruled by the Ross family from about 1830 to 1978. +# We don't know when standard time was introduced; for now, we guess 1900. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Indian/Cocos 6:27:40 - LMT 1900 + 6:30 - CCT # Cocos Islands Time + +# Fiji +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S +Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time + +# French Polynesia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea + -9:00 - GAMT # Gambier Time +Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct + -9:30 - MART # Marquesas Time +Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete + -10:00 - TAHT # Tahiti Time +# Clipperton (near North America) is administered from French Polynesia; +# it is uninhabited. + +# Guam +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31 + 9:39:00 - LMT 1901 # Agana + 10:00 - GST 2000 Dec 23 # Guam + 10:00 - ChST # Chamorro Standard Time + +# Kiribati +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki + 12:00 - GILT # Gilbert Is Time +Zone Pacific/Enderbury -11:24:20 - LMT 1901 + -12:00 - PHOT 1979 Oct # Phoenix Is Time + -11:00 - PHOT 1995 + 13:00 - PHOT +Zone Pacific/Kiritimati -10:29:20 - LMT 1901 + -10:40 - LINT 1979 Oct # Line Is Time + -10:00 - LINT 1995 + 14:00 - LINT + +# N Mariana Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31 + 9:43:00 - LMT 1901 + 9:00 - MPT 1969 Oct # N Mariana Is Time + 10:00 - MPT 2000 Dec 23 + 10:00 - ChST # Chamorro Standard Time + +# Marshall Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Majuro 11:24:48 - LMT 1901 + 11:00 - MHT 1969 Oct # Marshall Islands Time + 12:00 - MHT +Zone Pacific/Kwajalein 11:09:20 - LMT 1901 + 11:00 - MHT 1969 Oct + -12:00 - KWAT 1993 Aug 20 # Kwajalein Time + 12:00 - MHT + +# Micronesia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Truk 10:07:08 - LMT 1901 + 10:00 - TRUT # Truk Time +Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia + 11:00 - PONT # Ponape Time +Zone Pacific/Kosrae 10:51:56 - LMT 1901 + 11:00 - KOST 1969 Oct # Kosrae Time + 12:00 - KOST 1999 + 11:00 - KOST + +# Nauru +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe + 11:30 - NRT 1942 Mar 15 # Nauru Time + 9:00 - JST 1944 Aug 15 + 11:30 - NRT 1979 May + 12:00 - NRT + +# New Caledonia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S +Rule NC 1978 1979 - Feb 27 0:00 0 - +Rule NC 1996 only - Dec 1 2:00s 1:00 S +# Shanks & Pottenger say the following was at 2:00; go with IATA. +Rule NC 1997 only - Mar 2 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 + 11:00 NC NC%sT + + +############################################################################### + +# New Zealand + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NZ 1927 only - Nov 6 2:00 1:00 S +Rule NZ 1928 only - Mar 4 2:00 0 M +Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S +Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M +Rule NZ 1934 1940 - Apr lastSun 2:00 0 M +Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S +Rule NZ 1946 only - Jan 1 0:00 0 S +# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no +# convenient notation for this so we must duplicate the Rule lines. +Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D +Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D +Rule NZ 1975 only - Feb lastSun 2:00s 0 S +Rule Chatham 1975 only - Feb lastSun 2:45s 0 S +Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D +Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S +Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D +Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D +Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D +Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S +Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D +Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D +Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S +Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 + 11:30 NZ NZ%sT 1946 Jan 1 + 12:00 NZ NZ%sT +Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1 + 12:45 Chatham CHA%sT + + +# Auckland Is +# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers, +# and scientific personnel have wintered + +# Campbell I +# minor whaling stations operated 1909/1914 +# scientific station operated 1941/1995; +# previously whalers, sealers, pastoralists, and scientific personnel wintered +# was probably like Pacific/Auckland + +############################################################################### + + +# Niue +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi + -11:20 - NUT 1951 # Niue Time + -11:30 - NUT 1978 Oct 1 + -11:00 - NUT + +# Norfolk +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston + 11:12 - NMT 1951 # Norfolk Mean Time + 11:30 - NFT # Norfolk Time + +# Palau (Belau) +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror + 9:00 - PWT # Palau Time + +# Papua New Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Port_Moresby 9:48:40 - LMT 1880 + 9:48:32 - PMMT 1895 # Port Moresby Mean Time + 10:00 - PGT # Papua New Guinea Time + +# Pitcairn +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown + -8:30 - PNT 1998 Apr 27 00:00 + -8:00 - PST # Pitcairn Standard Time + +# American Samoa +Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5 + -11:22:48 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa + +# Samoa +Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST # Samoa Time + +# Solomon Is +# excludes Bougainville, for which see Papua New Guinea +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara + 11:00 - SBT # Solomon Is Time + +# Tokelau Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Fakaofo -11:24:56 - LMT 1901 + -10:00 - TKT # Tokelau Time + +# Tonga +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Tonga 1999 only - Oct 7 2:00s 1:00 S +Rule Tonga 2000 only - Mar 19 2:00s 0 - +Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S +Rule Tonga 2001 2002 - Jan lastSun 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Tongatapu 12:19:20 - LMT 1901 + 12:20 - TOT 1941 # Tonga Time + 13:00 - TOT 1999 + 13:00 Tonga TO%sT + +# Tuvalu +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Funafuti 11:56:52 - LMT 1901 + 12:00 - TVT # Tuvalu Time + + +# US minor outlying islands + +# Howland, Baker +# Howland was mined for guano by American companies 1857-1878 and British +# 1886-1891; Baker was similar but exact dates are not known. +# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944; +# uninhabited thereafter. +# Howland observed Hawaii Standard Time (UTC-10:30) in 1937; +# see page 206 of Elgen M. Long and Marie K. Long, +# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000). +# So most likely Howland and Baker observed Hawaii Time from 1935 +# until they were abandoned after the war. + +# Jarvis +# Mined for guano by American companies 1857-1879 and British 1883?-1891?. +# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958; +# uninhabited thereafter. +# no information; was probably like Pacific/Kiritimati + +# Johnston +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Johnston -10:00 - HST + +# Kingman +# uninhabited + +# Midway +# +# From Mark Brader (2005-01-23): +# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies, +# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3] +# reproduced a Pan American Airways timeables from 1936, for their weekly +# "Orient Express" flights between San Francisco and Manila, and connecting +# flights to Chicago and the US East Coast. As it uses some time zone +# designations that I've never seen before:.... +# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I. H.L.T. Ar. 5:30P Sun. +# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A " +# +Zone Pacific/Midway -11:49:28 - LMT 1901 + -11:00 - NST 1956 Jun 3 + -11:00 1:00 NDT 1956 Sep 2 + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa + +# Palmyra +# uninhabited since World War II; was probably like Pacific/Kiritimati + +# Wake +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Wake 11:06:28 - LMT 1901 + 12:00 - WAKT # Wake Time + + +# Vanuatu +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S +Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - +Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S +Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S +Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 - +Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + 11:00 Vanuatu VU%sT # Vanuatu Time + +# Wallis and Futuna +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Pacific/Wallis 12:15:20 - LMT 1901 + 12:00 - WFT # Wallis & Futuna Time + +############################################################################### + +# NOTES + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Another source occasionally used is Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which +# I found in the UCLA library. +# +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst +# LMT Local Mean Time +# 8:00 WST WST Western Australia +# 8:45 CWST CWST Central Western Australia* +# 9:00 JST Japan +# 9:30 CST CST Central Australia +# 10:00 EST EST Eastern Australia +# 10:00 ChST Chamorro +# 10:30 LHST LHST Lord Howe* +# 11:30 NZMT NZST New Zealand through 1945 +# 12:00 NZST NZDT New Zealand 1946-present +# 12:45 CHAST CHADT Chatham* +# -11:00 SST Samoa +# -10:00 HST Hawaii +# - 8:00 PST Pitcairn* +# +# See the `northamerica' file for Hawaii. +# See the `southamerica' file for Easter I and the Galapagos Is. + +############################################################################### + +# Australia + +# From Paul Eggert (2005-12-08): +# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml"> +# Implementation Dates of Daylight Saving Time within Australia +# </a> summarizes daylight saving issues in Australia. + +# From Arthur David Olson (2005-12-12): +# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving"> +# Lawlink NSW:Daylight Saving in New South Wales +# </a> covers New South Wales in particular. + +# From John Mackin (1991-03-06): +# We in Australia have _never_ referred to DST as `daylight' time. +# It is called `summer' time. Now by a happy coincidence, `summer' +# and `standard' happen to start with the same letter; hence, the +# abbreviation does _not_ change... +# The legislation does not actually define abbreviations, at least +# in this State, but the abbreviation is just commonly taken to be the +# initials of the phrase, and the legislation here uniformly uses +# the phrase `summer time' and does not use the phrase `daylight +# time'. +# Announcers on the Commonwealth radio network, the ABC (for Australian +# Broadcasting Commission), use the phrases `Eastern Standard Time' +# or `Eastern Summer Time'. (Note, though, that as I say in the +# current australasia file, there is really no such thing.) Announcers +# on its overseas service, Radio Australia, use the same phrases +# prefixed by the word `Australian' when referring to local times; +# time announcements on that service, naturally enough, are made in UTC. + +# From Arthur David Olson (1992-03-08): +# Given the above, what's chosen for year-round use is: +# CST for any place operating at a GMTOFF of 9:30 +# WST for any place operating at a GMTOFF of 8:00 +# EST for any place operating at a GMTOFF of 10:00 + +# From Chuck Soper (2006-06-01): +# I recently found this Australian government web page on time zones: +# <http://www.australia.gov.au/about-australia-13time> +# And this government web page lists time zone names and abbreviations: +# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml> + +# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST" +# versus "AEST" etc.: +# +# I see the following points of dispute: +# +# * How important are unique time zone abbreviations? +# +# Here I tend to agree with the point (most recently made by Chris +# Newman) that unique abbreviations should not be essential for proper +# operation of software. We have other instances of ambiguity +# (e.g. "IST" denoting both "Israel Standard Time" and "Indian +# Standard Time"), and they are not likely to go away any time soon. +# In the old days, some software mistakenly relied on unique +# abbreviations, but this is becoming less true with time, and I don't +# think it's that important to cater to such software these days. +# +# On the other hand, there is another motivation for unambiguous +# abbreviations: it cuts down on human confusion. This is +# particularly true for Australia, where "EST" can mean one thing for +# time T and a different thing for time T plus 1 second. +# +# * Does the relevant legislation indicate which abbreviations should be used? +# +# Here I tend to think that things are a mess, just as they are in +# many other countries. We Americans are currently disagreeing about +# which abbreviation to use for the newly legislated Chamorro Standard +# Time, for example. +# +# Personally, I would prefer to use common practice; I would like to +# refer to legislation only for examples of common practice, or as a +# tiebreaker. +# +# * Do Australians more often use "Eastern Daylight Time" or "Eastern +# Summer Time"? Do they typically prefix the time zone names with +# the word "Australian"? +# +# My own impression is that both "Daylight Time" and "Summer Time" are +# common and are widely understood, but that "Summer Time" is more +# popular; and that the leading "A" is also common but is omitted more +# often than not. I just used AltaVista advanced search and got the +# following count of page hits: +# +# 1,103 "Eastern Summer Time" AND domain:au +# 971 "Australian Eastern Summer Time" AND domain:au +# 613 "Eastern Daylight Time" AND domain:au +# 127 "Australian Eastern Daylight Time" AND domain:au +# +# Here "Summer" seems quite a bit more popular than "Daylight", +# particularly when we know the time zone is Australian and not US, +# say. The "Australian" prefix seems to be popular for Eastern Summer +# Time, but unpopular for Eastern Daylight Time. +# +# For abbreviations, tools like AltaVista are less useful because of +# ambiguity. Many hits are not really time zones, unfortunately, and +# many hits denote US time zones and not Australian ones. But here +# are the hit counts anyway: +# +# 161,304 "EST" and domain:au +# 25,156 "EDT" and domain:au +# 18,263 "AEST" and domain:au +# 10,416 "AEDT" and domain:au +# +# 14,538 "CST" and domain:au +# 5,728 "CDT" and domain:au +# 176 "ACST" and domain:au +# 29 "ACDT" and domain:au +# +# 7,539 "WST" and domain:au +# 68 "AWST" and domain:au +# +# This data suggest that Australians tend to omit the "A" prefix in +# practice. The situation for "ST" versus "DT" is less clear, given +# the ambiguities involved. +# +# * How do Australians feel about the abbreviations in the tz database? +# +# If you just count Australians on this list, I count 2 in favor and 3 +# against. One of the "against" votes (David Keegel) counseled delay, +# saying that both AEST/AEDT and EST/EST are widely used and +# understood in Australia. + +# From Paul Eggert (1995-12-19): +# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ. +# Mark Prior writes that his newspaper +# reports that NSW's fall 1995 change will occur at 2:00, +# but Robert Elz says it's been 3:00 in Victoria since 1970 +# and perhaps the newspaper's `2:00' is referring to standard time. +# For now we'll continue to assume 2:00s for changes since 1960. + +# From Eric Ulevik (1998-01-05): +# +# Here are some URLs to Australian time legislation. These URLs are stable, +# and should probably be included in the data file. There are probably more +# relevant entries in this database. +# +# NSW (including LHI and Broken Hill): +# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html"> +# Standard Time Act 1987 (updated 1995-04-04) +# </a> +# ACT +# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html"> +# Standard Time and Summer Time Act 1972 +# </a> +# SA +# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html"> +# Standard Time Act, 1898 +# </a> + +# From David Grosz (2005-06-13): +# It was announced last week that Daylight Saving would be extended by +# one week next year to allow for the 2006 Commonwealth Games. +# Daylight Saving is now to end for next year only on the first Sunday +# in April instead of the last Sunday in March. +# +# From Gwillim Law (2005-06-14): +# I did some Googling and found that all of those states (and territory) plan +# to extend DST together in 2006. +# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt +# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html +# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html +# Tasmania: http://www.media.tas.gov.au/release.php?id=14772 +# Victoria: I wasn't able to find anything separate, but the other articles +# allude to it. +# But not Queensland +# http://www.news.com.au/story/0,10117,15564030-1248,00.html. + +# Northern Territory + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The NORTHERN TERRITORY.. [ Courtesy N.T. Dept of the Chief Minister ] +# # [ Nov 1990 ] +# # N.T. have never utilised any DST due to sub-tropical/tropical location. +# ... +# Zone Australia/North 9:30 - CST + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# the Northern Territory do[es] not have daylight saving. + +# Western Australia + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of WESTERN AUSTRALIA.. [ Courtesy W.A. dept Premier+Cabinet ] +# # [ Nov 1990 ] +# # W.A. suffers from a great deal of public and political opposition to +# # DST in principle. A bill is brought before parliament in most years, but +# # usually defeated either in the upper house, or in party caucus +# # before reaching parliament. +# ... +# Zone Australia/West 8:00 AW %sST +# ... +# Rule AW 1974 only - Oct lastSun 2:00 1:00 D +# Rule AW 1975 only - Mar Sun>=1 3:00 0 W +# Rule AW 1983 only - Oct lastSun 2:00 1:00 D +# Rule AW 1984 only - Mar Sun>=1 3:00 0 W + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# Western Australia...do[es] not have daylight saving. + +# From John D. Newman via Bradley White (1991-11-02): +# Western Australia is still on "winter time". Some DH in Sydney +# rang me at home a few days ago at 6.00am. (He had just arrived at +# work at 9.00am.) +# W.A. is switching to Summer Time on Nov 17th just to confuse +# everybody again. + +# From Arthur David Olson (1992-03-08): +# The 1992 ending date used in the rules is a best guess; +# it matches what was used in the past. + +# <a href="http://www.bom.gov.au/faq/faqgen.htm"> +# The Australian Bureau of Meteorology FAQ +# </a> (1999-09-27) writes that Giles Meteorological Station uses +# South Australian time even though it's located in Western Australia. + +# Queensland +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ] +# # [ Dec 1990 ] +# ... +# Zone Australia/Queensland 10:00 AQ %sST +# ... +# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D +# Rule AQ 1972 only - Feb lastSun 3:00 0 E +# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D +# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E + +# From Bradley White (1989-12-24): +# "Australia/Queensland" now observes daylight time (i.e. from +# October 1989). + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# ...Queensland...[has] agreed to end daylight saving +# at 3am tomorrow (March 3)... + +# From John Mackin (1991-03-06): +# I can certainly confirm for my part that Daylight Saving in NSW did in fact +# end on Sunday, 3 March. I don't know at what hour, though. (It surprised +# me.) + +# From Bradley White (1992-03-08): +# ...there was recently a referendum in Queensland which resulted +# in the experimental daylight saving system being abandoned. So, ... +# ... +# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D +# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S +# ... + +# From Arthur David Olson (1992-03-08): +# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes. + +# From Christopher Hunt (2006-11-21), after an advance warning +# from Jesper Norgaard Welen (2006-11-01): +# WA are trialing DST for three years. +# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf> + +# From Rives McDow (2002-04-09): +# The most interesting region I have found consists of three towns on the +# southern coast.... South Australia observes daylight saving time; Western +# Australia does not. The two states are one and a half hours apart. The +# residents decided to forget about this nonsense of changing the clock so +# much and set the local time 20 hours and 45 minutes from the +# international date line, or right in the middle of the time of South +# Australia and Western Australia.... +# +# From Paul Eggert (2002-04-09): +# This is confirmed by the section entitled +# "What's the deal with time zones???" in +# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>. +# +# From Alex Livingston (2006-12-07): +# ... it was just on four years ago that I drove along the Eyre Highway, +# which passes through eastern Western Australia close to the southern +# coast of the continent. +# +# I paid particular attention to the time kept there. There can be no +# dispute that UTC+08:45 was considered "the time" from the border +# village just inside the border with South Australia to as far west +# as just east of Caiguna. There can also be no dispute that Eucla is +# the largest population centre in this zone.... +# +# Now that Western Australia is observing daylight saving, the +# question arose whether this part of the state would follow suit. I +# just called the border village and confirmed that indeed they have, +# meaning that they are now observing UTC+09:45. +# +# (2006-12-09): +# I personally doubt that either experimentation with daylight saving +# in WA or its introduction in SA had anything to do with the genesis +# of this time zone. My hunch is that it's been around since well +# before 1975. I remember seeing it noted on road maps decades ago. + +# From Paul Eggert (2006-12-15): +# For lack of better info, assume the tradition dates back to the +# introduction of standard time in 1895. + + +# southeast Australia +# +# From Paul Eggert (2007-07-23): +# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT +# end DST the first Sunday in April and start DST the first Sunday in October. +# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html + + +# South Australia + +# From Bradley White (1991-03-04): +# A recent excerpt from an Australian newspaper... +# ...South Australia...[has] agreed to end daylight saving +# at 3am tomorrow (March 3)... + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ] +# # [ Nov 1990 ] +# ... +# Zone Australia/South 9:30 AS %sST +# ... +# Rule AS 1971 max - Oct lastSun 2:00 1:00 D +# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C +# Rule AS 1986 1990 - Mar Sun>=15 3:00 0 C +# Rule AS 1991 max - Mar Sun>=1 3:00 0 C + +# From Bradley White (1992-03-11): +# Recent correspondence with a friend in Adelaide +# contained the following exchange: "Due to the Adelaide Festival, +# South Australia delays setting back our clocks for a few weeks." + +# From Robert Elz (1992-03-13): +# I heard that apparently (or at least, it appears that) +# South Aus will have an extra 3 weeks daylight saving every even +# numbered year (from 1990). That's when the Adelaide Festival +# is on... + +# From Robert Elz (1992-03-16, 00:57:07 +1000): +# DST didn't end in Adelaide today (yesterday).... +# But whether it's "4th Sunday" or "2nd last Sunday" I have no idea whatever... +# (it's just as likely to be "the Sunday we pick for this year"...). + +# From Bradley White (1994-04-11): +# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March, +# 1994 was at +0930 as John Connolly's customer seems to assert, then I can +# only conclude that the actual rule is more complicated.... + +# From John Warburton (1994-10-07): +# The new Daylight Savings dates for South Australia ... +# was gazetted in the Government Hansard on Sep 26 1994.... +# start on last Sunday in October and end in last sunday in March. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Tasmania + +# The rules for 1967 through 1991 were reported by George Shepherd +# via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ] +# # [ Nov 1990 ] + +# From Bill Hart via Guy Harris (1991-10-10): +# Oh yes, the new daylight savings rules are uniquely tasmanian, we have +# 6 weeks a year now when we are out of sync with the rest of Australia +# (but nothing new about that). + +# From Alex Livingston (1999-10-04): +# I heard on the ABC (Australian Broadcasting Corporation) radio news on the +# (long) weekend that Tasmania, which usually goes its own way in this regard, +# has decided to join with most of NSW, the ACT, and most of Victoria +# (Australia) and start daylight saving on the last Sunday in August in 2000 +# instead of the first Sunday in October. + +# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules: +# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300 + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Victoria + +# The rules for 1971 through 1991 were reported by George Shepherd +# via Simon Woodhead via Robert Elz (1991-03-06): +# # The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ] +# # [ Nov 1990 ] + +# From Scott Harrington (2001-08-29): +# On KQED's "City Arts and Lectures" program last night I heard an +# interesting story about daylight savings time. Dr. John Heilbron was +# discussing his book "The Sun in the Church: Cathedrals as Solar +# Observatories"[1], and in particular the Shrine of Remembrance[2] located +# in Melbourne, Australia. +# +# Apparently the shrine's main purpose is a beam of sunlight which +# illuminates a special spot on the floor at the 11th hour of the 11th day +# of the 11th month (Remembrance Day) every year in memory of Australia's +# fallen WWI soldiers. And if you go there on Nov. 11, at 11am local time, +# you will indeed see the sunbeam illuminate the special spot at the +# expected time. +# +# However, that is only because of some special mirror contraption that had +# to be employed, since due to daylight savings time, the true solar time of +# the remembrance moment occurs one hour later (or earlier?). Perhaps +# someone with more information on this jury-rig can tell us more. +# +# [1] http://www.hup.harvard.edu/catalog/HEISUN.html +# [2] http://www.shrine.org.au + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# New South Wales + +# From Arthur David Olson: +# New South Wales and subjurisdictions have their own ideas of a fun time. +# Based on law library research by John Mackin, +# who notes: +# In Australia, time is not legislated federally, but rather by the +# individual states. Thus, while such terms as ``Eastern Standard Time'' +# [I mean, of course, Australian EST, not any other kind] are in common +# use, _they have NO REAL MEANING_, as they are not defined in the +# legislation. This is very important to understand. +# I have researched New South Wales time only... + +# From Eric Ulevik (1999-05-26): +# DST will start in NSW on the last Sunday of August, rather than the usual +# October in 2000. [See: Matthew Moore, +# <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html"> +# Two months more daylight saving +# </a> +# Sydney Morning Herald (1999-05-26).] + +# From Paul Eggert (1999-09-27): +# See the following official NSW source: +# <a href="http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ"> +# Daylight Saving in New South Wales. +# </a> +# +# Narrabri Shire (NSW) council has announced it will ignore the extension of +# daylight saving next year. See: +# <a href="http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm"> +# Narrabri Council to ignore daylight saving +# </a> (1999-07-22). For now, we'll wait to see if this really happens. +# +# Victoria will following NSW. See: +# <a href="http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm"> +# Vic to extend daylight saving +# </a> (1999-07-28). +# +# However, South Australia rejected the DST request. See: +# <a href="http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm"> +# South Australia rejects Olympics daylight savings request +# </a> (1999-07-19). +# +# Queensland also will not observe DST for the Olympics. See: +# <a href="http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm"> +# Qld says no to daylight savings for Olympics +# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying +# ``Look you've got to remember in my family when this came up last time +# I voted for it, my wife voted against it and she said to me it's all very +# well for you, you don't have to worry about getting the children out of +# bed, getting them to school, getting them to sleep at night. +# I've been through all this argument domestically...my wife rules.'' +# +# Broken Hill will stick with South Australian time in 2000. See: +# <a href="http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm"> +# Broken Hill to be behind the times +# </a> (1999-07-21). + +# IATA SSIM (1998-09) says that the spring 2000 change for Australian +# Capital Territory, New South Wales except Lord Howe Island and Broken +# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics. + +# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29: +# The Queensland Premier Peter Beattie is encouraging northern NSW +# towns to use Queensland time. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +# Yancowinna + +# From John Mackin (1989-01-04): +# `Broken Hill' means the County of Yancowinna. + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # YANCOWINNA.. [ Confirmation courtesy of Broken Hill Postmaster ] +# # [ Dec 1990 ] +# ... +# # Yancowinna uses Central Standard Time, despite [its] location on the +# # New South Wales side of the S.A. border. Most business and social dealings +# # are with CST zones, therefore CST is legislated by local government +# # although the switch to Summer Time occurs in line with N.S.W. There have +# # been years when this did not apply, but the historical data is not +# # presently available. +# Zone Australia/Yancowinna 9:30 AY %sST +# ... +# Rule AY 1971 1985 - Oct lastSun 2:00 1:00 D +# Rule AY 1972 only - Feb lastSun 3:00 0 C +# [followed by other Rules] + +# Lord Howe Island + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# LHI... [ Courtesy of Pauline Van Winsen ] +# [ Dec 1990 ] +# Lord Howe Island is located off the New South Wales coast, and is half an +# hour ahead of NSW time. + +# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27): +# Lord Howe Island summer time in 2000/2001 will commence on the same +# date as the rest of NSW (i.e. 2000-08-27). For your information the +# Lord Howe Island Board (controlling authority for the Island) is +# seeking the community's views on various options for summer time +# arrangements on the Island, e.g. advance clocks by 1 full hour +# instead of only 30 minutes. Dependant on the wishes of residents +# the Board may approach the NSW government to change the existing +# arrangements. The starting date for summer time on the Island will +# however always coincide with the rest of NSW. + +# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25): +# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards +# clocks by 30 minutes when DST finishes. Since DST was most recently +# introduced in NSW, the "changeover" time on the Island has been 02:00 as +# shown on clocks on LHI. I guess this means that for 30 minutes at the start +# of DST, LHI is actually 1 hour ahead of the rest of NSW. + +# From Paul Eggert (2006-03-22): +# For Lord Howe dates we use Shanks & Pottenger through 1989, and +# Lonergan thereafter. For times we use Lonergan. + +# From Paul Eggert (2007-07-23): +# See "southeast Australia" above for 2008 and later. + +############################################################################### + +# New Zealand + +# From Mark Davies (1990-10-03): +# the 1989/90 year was a trial of an extended "daylight saving" period. +# This trial was deemed successful and the extended period adopted for +# subsequent years (with the addition of a further week at the start). +# source -- phone call to Ministry of Internal Affairs Head Office. + +# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): +# # The Country of New Zealand (Australia's east island -) Gee they hate that! +# # or is Australia the west island of N.Z. +# # [ courtesy of Geoff Tribble.. Auckland N.Z. ] +# # [ Nov 1990 ] +# ... +# Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D +# Rule NZ 1989 max - Oct Sun>=1 2:00 1:00 D +# Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S +# Rule NZ 1990 max - Mar lastSun 3:00 0 S +# ... +# Zone NZ 12:00 NZ NZ%sT # New Zealand +# Zone NZ-CHAT 12:45 - NZ-CHAT # Chatham Island + +# From Arthur David Olson (1992-03-08): +# The chosen rules use the Davies October 8 values for the start of DST in 1989 +# rather than the October 1 value. + +# From Paul Eggert (1995-12-19); +# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ. +# Robert Uzgalis writes that the New Zealand Daylight +# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard +# time on both the first Sunday in October and the third Sunday in March. +# As with Australia, we'll assume the tradition is 2:00s, not 2:00. +# +# From Paul Eggert (2006-03-22): +# The Department of Internal Affairs (DIA) maintains a brief history, +# as does Carol Squires; see tz-link.htm for the full references. +# Use these sources in preference to Shanks & Pottenger. +# +# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with +# transitions at 2:45 local standard time; this confirms that Chatham +# is always exactly 45 minutes ahead of Auckland. + +# From Colin Sharples (2007-04-30): +# DST will now start on the last Sunday in September, and end on the +# first Sunday in April. The changes take effect this year, meaning +# that DST will begin on 2007-09-30 2008-04-06. +# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended + +############################################################################### + + +# Fiji + +# Howse writes (p 153) that in 1879 the British governor of Fiji +# enacted an ordinance standardizing the islands on Antipodean Time +# instead of the American system (which was one day behind). + +# From Rives McDow (1998-10-08): +# Fiji will introduce DST effective 0200 local time, 1998-11-01 +# until 0300 local time 1999-02-28. Each year the DST period will +# be from the first Sunday in November until the last Sunday in February. + +# From Paul Eggert (2000-01-08): +# IATA SSIM (1999-09) says DST ends 0100 local time. Go with McDow. + +# From the BBC World Service (1998-10-31 11:32 UTC): +# The Fijiian government says the main reasons for the time change is to +# improve productivity and reduce road accidents. But correspondents say it +# also hopes the move will boost Fiji's ability to compete with other pacific +# islands in the effort to attract tourists to witness the dawning of the new +# millenium. + +# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13) +# reports that Fiji has discontinued DST. + +# Johnston + +# Johnston data is from usno1995. + + +# Kiribati + +# From Paul Eggert (1996-01-22): +# Today's _Wall Street Journal_ (page 1) reports that Kiribati +# ``declared it the same day throught the country as of Jan. 1, 1995'' +# as part of the competition to be first into the 21st century. + + +# Kwajalein + +# In comp.risks 14.87 (26 August 1993), Peter Neumann writes: +# I wonder what happened in Kwajalein, where there was NO Friday, +# 1993-08-20. Thursday night at midnight Kwajalein switched sides with +# respect to the International Date Line, to rejoin its fellow islands, +# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink. + + +# N Mariana Is, Guam + +# Howse writes (p 153) ``The Spaniards, on the other hand, reached the +# Philippines and the Ladrones from America,'' and implies that the Ladrones +# (now called the Marianas) kept American date for quite some time. +# For now, we assume the Ladrones switched at the same time as the Philippines; +# see Asia/Manila. + +# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time, +# under the name "Chamorro Standard Time". There is no official abbreviation, +# but Congressman Robert A. Underwood, author of the bill that became law, +# wrote in a press release (2000-12-27) that he will seek the use of "ChST". + + +# Micronesia + +# Alan Eugene Davis writes (1996-03-16), +# ``I am certain, having lived there for the past decade, that "Truk" +# (now properly known as Chuuk) ... is in the time zone GMT+10.'' +# +# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11 +# on 1978-10-01; ignore this for now. + +# From Paul Eggert (1999-10-29): +# The Federated States of Micronesia Visitors Board writes in +# <a href="http://www.fsmgov.org/info/clocks.html"> +# The Federated States of Micronesia - Visitor Information +# </a> (1999-01-26) +# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11. +# We don't know when Kosrae switched from UTC+12; assume January 1 for now. + + +# Midway + +# From Charles T O'Connor, KMTH DJ (1956), +# quoted in the KTMH section of the Radio Heritage Collection +# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31): +# For the past two months we've been on what is known as Daylight +# Saving Time. This time has put us on air at 5am in the morning, +# your time down there in New Zealand. Starting September 2, 1956 +# we'll again go back to Standard Time. This'll mean that we'll go to +# air at 6am your time. +# +# From Paul Eggert (2003-03-23): +# We don't know the date of that quote, but we'll guess they +# started DST on June 3. Possibly DST was observed other years +# in Midway, but we have no record of it. + + +# Pitcairn + +# From Rives McDow (1999-11-08): +# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998 +# with regard to Pitcairn Standard Time. The Proclamation is as follows. +# +# The local time for general purposes in the Islands shall be +# Co-ordinated Universal time minus 8 hours and shall be known +# as Pitcairn Standard Time. +# +# ... I have also seen Pitcairn listed as UTC minus 9 hours in several +# references, and can only assume that this was an error in interpretation +# somehow in light of this proclamation. + +# From Rives McDow (1999-11-09): +# The Proclamation regarding Pitcairn time came into effect on 27 April 1998 +# ... at midnight. + +# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave: +# Betty Christian told me yesterday that their local time is the same as +# Pacific Standard Time. They used to be 1/2 hour different from us here in +# Sacramento but it was changed a couple of years ago. + + +# Samoa + +# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald) +# that in 1879 the King of Samoa decided to change +# ``the date in his kingdom from the Antipodean to the American system, +# ordaining -- by a masterpiece of diplomatic flattery -- that +# the Fourth of July should be celebrated twice in that year.'' + + +# Tonga + +# From Paul Eggert (1996-01-22): +# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting +# to sneak ahead of [New Zealanders] by introducing daylight-saving time.'' +# Since Kiribati has moved the Date Line it's not clear what Tonga will do. + +# Don Mundell writes in the 1997-02-20 Tonga Chronicle +# <a href="http://www.tongatapu.net.to/tonga/homeland/timebegins.htm"> +# How Tonga became `The Land where Time Begins' +# </a>: + +# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST +# 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its +# standard time in 1940s, Tonga had the choice of subtracting from its +# local time to come on the same standard time as New Zealand or of +# advancing its time to maintain the differential of 13 degrees +# (approximately 50 minutes ahead of New Zealand time). +# +# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince +# Tungi, preferred to ensure Tonga's title as the land where time +# begins, the Legislative Assembly approved the latter change. +# +# But some of the older, more conservative members from the outer +# islands objected. "If at midnight on Dec. 31, we move ahead 40 +# minutes, as your Royal Highness wishes, what becomes of the 40 +# minutes we have lost?" +# +# The Crown Prince, presented an unanswerable argument: "Remember that +# on the World Day of Prayer, you would be the first people on Earth +# to say your prayers in the morning." + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell. + +# From Eric Ulevik (1999-05-03): +# Tonga's director of tourism, who is also secretary of the National Millenium +# Committee, has a plan to get Tonga back in front. +# He has proposed a one-off move to tropical daylight saving for Tonga from +# October to March, which has won approval in principle from the Tongan +# Government. + +# From Steffen Thorsen (1999-09-09): +# * Tonga will introduce DST in November +# +# I was given this link by John Letts: +# <a hef="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm"> +# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm +# </a> +# +# I have not been able to find exact dates for the transition in November +# yet. By reading this article it seems like Fiji will be 14 hours ahead +# of UTC as well, but as far as I know Fiji will only be 13 hours ahead +# (12 + 1 hour DST). + +# From Arthur David Olson (1999-09-20): +# According to <a href="http://www.tongaonline.com/news/sept1799.html> +# http://www.tongaonline.com/news/sept1799.html +# </a>: +# "Daylight Savings Time will take effect on Oct. 2 through April 15, 2000 +# and annually thereafter from the first Saturday in October through the +# third Saturday of April. Under the system approved by Privy Council on +# Sept. 10, clocks must be turned ahead one hour on the opening day and +# set back an hour on the closing date." +# Alas, no indication of the time of day. + +# From Rives McDow (1999-10-06): +# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am. +# Daylight Saving ends on April 16 at 0300am which is Sunday morning. + +# From Steffen Thorsen (2000-10-31): +# Back in March I found a notice on the website http://www.tongaonline.com +# that Tonga changed back to standard time one month early, on March 19 +# instead of the original reported date April 16. Unfortunately, the article +# is no longer available on the site, and I did not make a copy of the +# text, and I have forgotten to report it here. +# (Original URL was: http://www.tongaonline.com/news/march162000.htm ) + +# From Rives McDow (2000-12-01): +# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27. + +# From Sione Moala-Mafi (2001-09-20) via Rives McDow: +# At 2:00am on the first Sunday of November, the standard time in the Kingdom +# shall be moved forward by one hour to 3:00am. At 2:00am on the last Sunday +# of January the standard time in the Kingdom shall be moved backward by one +# hour to 1:00am. + +# From Pulu 'Anau (2002-11-05): +# The law was for 3 years, supposedly to get renewed. It wasn't. + + +# Wake + +# From Vernice Anderson, Personal Secretary to Philip Jessup, +# US Ambassador At Large (oral history interview, 1971-02-02): +# +# Saturday, the 14th [of October, 1950] -- ... The time was all the +# more confusing at that point, because we had crossed the +# International Date Line, thus getting two Sundays. Furthermore, we +# discovered that Wake Island had two hours of daylight saving time +# making calculation of time in Washington difficult if not almost +# impossible. +# +# http://www.trumanlibrary.org/wake/meeting.htm + +# From Paul Eggert (2003-03-23): +# We have no other report of DST in Wake Island, so omit this info for now. + +############################################################################### + +# The International Date Line + +# From Gwillim Law (2000-01-03): +# +# The International Date Line is not defined by any international standard, +# convention, or treaty. Mapmakers are free to draw it as they please. +# Reputable mapmakers will simply ensure that every point of land appears on +# the correct side of the IDL, according to the date legally observed there. +# +# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and +# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL +# to the east side of the Phoenix and Line Islands), I suppose that most +# mapmakers redrew the IDL following the boundary of Kiribati. Even that line +# has a rather arbitrary nature. The straight-line boundaries between Pacific +# island nations that are shown on many maps are based on an international +# convention, but are not legally binding national borders.... The date is +# governed by the IDL; therefore, even on the high seas, there may be some +# places as late as fourteen hours later than UTC. And, since the IDL is not +# an international standard, there are some places on the high seas where the +# correct date is ambiguous. + +# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31): +# Before 1920, all ships kept local apparent time on the high seas by setting +# their clocks at night or at the morning sight so that, given the ship's +# speed and direction, it would be 12 o'clock when the Sun crossed the ship's +# meridian (12 o'clock = local apparent noon). During 1917, at the +# Anglo-French Conference on Time-keeping at Sea, it was recommended that all +# ships, both military and civilian, should adopt hourly standard time zones +# on the high seas. Whenever a ship was within the territorial waters of any +# nation it would use that nation's standard time. The captain was permitted +# to change his ship's clocks at a time of his choice following his ship's +# entry into another zone time--he often chose midnight. These zones were +# adopted by all major fleets between 1920 and 1925 but not by many +# independent merchant ships until World War II. + +# From Paul Eggert, using references suggested by Oscar van Vlijmen +# (2005-03-20): +# +# The American Practical Navigator (2002) +# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187> +# talks only about the 180-degree meridian with respect to ships in +# international waters; it ignores the international date line. diff --git a/libkcal/libical/tzdata/backward b/libkcal/libical/tzdata/backward new file mode 100644 index 000000000..a65991c2d --- /dev/null +++ b/libkcal/libical/tzdata/backward @@ -0,0 +1,112 @@ +# @(#)backward 8.6 + +# This file provides links between current names for time zones +# and their old names. Many names changed in late 1993. + +Link Africa/Asmara Africa/Asmera +Link Africa/Bamako Africa/Timbuktu +Link America/Argentina/Catamarca America/Argentina/ComodRivadavia +Link America/Adak America/Atka +Link America/Argentina/Buenos_Aires America/Buenos_Aires +Link America/Argentina/Catamarca America/Catamarca +Link America/Atikokan America/Coral_Harbour +Link America/Argentina/Cordoba America/Cordoba +Link America/Tijuana America/Ensenada +Link America/Indiana/Indianapolis America/Fort_Wayne +Link America/Indiana/Indianapolis America/Indianapolis +Link America/Argentina/Jujuy America/Jujuy +Link America/Indiana/Knox America/Knox_IN +Link America/Kentucky/Louisville America/Louisville +Link America/Argentina/Mendoza America/Mendoza +Link America/Rio_Branco America/Porto_Acre +Link America/Argentina/Cordoba America/Rosario +Link America/St_Thomas America/Virgin +Link Asia/Ashgabat Asia/Ashkhabad +Link Asia/Chongqing Asia/Chungking +Link Asia/Dhaka Asia/Dacca +Link Asia/Kolkata Asia/Calcutta +Link Asia/Macau Asia/Macao +Link Asia/Jerusalem Asia/Tel_Aviv +Link Asia/Ho_Chi_Minh Asia/Saigon +Link Asia/Thimphu Asia/Thimbu +Link Asia/Makassar Asia/Ujung_Pandang +Link Asia/Ulaanbaatar Asia/Ulan_Bator +Link Atlantic/Faroe Atlantic/Faeroe +Link Europe/Oslo Atlantic/Jan_Mayen +Link Australia/Sydney Australia/ACT +Link Australia/Sydney Australia/Canberra +Link Australia/Lord_Howe Australia/LHI +Link Australia/Sydney Australia/NSW +Link Australia/Darwin Australia/North +Link Australia/Brisbane Australia/Queensland +Link Australia/Adelaide Australia/South +Link Australia/Hobart Australia/Tasmania +Link Australia/Melbourne Australia/Victoria +Link Australia/Perth Australia/West +Link Australia/Broken_Hill Australia/Yancowinna +Link America/Rio_Branco Brazil/Acre +Link America/Noronha Brazil/DeNoronha +Link America/Sao_Paulo Brazil/East +Link America/Manaus Brazil/West +Link America/Halifax Canada/Atlantic +Link America/Winnipeg Canada/Central +Link America/Regina Canada/East-Saskatchewan +Link America/Toronto Canada/Eastern +Link America/Edmonton Canada/Mountain +Link America/St_Johns Canada/Newfoundland +Link America/Vancouver Canada/Pacific +Link America/Regina Canada/Saskatchewan +Link America/Whitehorse Canada/Yukon +Link America/Santiago Chile/Continental +Link Pacific/Easter Chile/EasterIsland +Link America/Havana Cuba +Link Africa/Cairo Egypt +Link Europe/Dublin Eire +Link Europe/London Europe/Belfast +Link Europe/Chisinau Europe/Tiraspol +Link Europe/London GB +Link Europe/London GB-Eire +Link Etc/GMT GMT+0 +Link Etc/GMT GMT-0 +Link Etc/GMT GMT0 +Link Etc/GMT Greenwich +Link Asia/Hong_Kong Hongkong +Link Atlantic/Reykjavik Iceland +Link Asia/Tehran Iran +Link Asia/Jerusalem Israel +Link America/Jamaica Jamaica +Link Asia/Tokyo Japan +Link Pacific/Kwajalein Kwajalein +Link Africa/Tripoli Libya +Link America/Tijuana Mexico/BajaNorte +Link America/Mazatlan Mexico/BajaSur +Link America/Mexico_City Mexico/General +Link Pacific/Auckland NZ +Link Pacific/Chatham NZ-CHAT +Link America/Denver Navajo +Link Asia/Shanghai PRC +Link Pacific/Pago_Pago Pacific/Samoa +Link Pacific/Truk Pacific/Yap +Link Europe/Warsaw Poland +Link Europe/Lisbon Portugal +Link Asia/Taipei ROC +Link Asia/Seoul ROK +Link Asia/Singapore Singapore +Link Europe/Istanbul Turkey +Link Etc/UCT UCT +Link America/Anchorage US/Alaska +Link America/Adak US/Aleutian +Link America/Phoenix US/Arizona +Link America/Chicago US/Central +Link America/Indiana/Indianapolis US/East-Indiana +Link America/New_York US/Eastern +Link Pacific/Honolulu US/Hawaii +Link America/Indiana/Knox US/Indiana-Starke +Link America/Detroit US/Michigan +Link America/Denver US/Mountain +Link America/Los_Angeles US/Pacific +Link Pacific/Pago_Pago US/Samoa +Link Etc/UTC UTC +Link Etc/UTC Universal +Link Europe/Moscow W-SU +Link Etc/UTC Zulu diff --git a/libkcal/libical/tzdata/etcetera b/libkcal/libical/tzdata/etcetera new file mode 100644 index 000000000..cddbe8a29 --- /dev/null +++ b/libkcal/libical/tzdata/etcetera @@ -0,0 +1,80 @@ +# @(#)etcetera 8.1 + +# These entries are mostly present for historical reasons, so that +# people in areas not otherwise covered by the tz files could "zic -l" +# to a time zone that was right for their area. These days, the +# tz files cover almost all the inhabited world, and the only practical +# need now for the entries that are not on UTC are for ships at sea +# that cannot use POSIX TZ settings. + +Zone Etc/GMT 0 - GMT +Zone Etc/UTC 0 - UTC +Zone Etc/UCT 0 - UCT + +# The following link uses older naming conventions, +# but it belongs here, not in the file `backward', +# as functions like gmtime load the "GMT" file to handle leap seconds properly. +# We want this to work even on installations that omit the other older names. +Link Etc/GMT GMT + +Link Etc/UTC Etc/Universal +Link Etc/UTC Etc/Zulu + +Link Etc/GMT Etc/Greenwich +Link Etc/GMT Etc/GMT-0 +Link Etc/GMT Etc/GMT+0 +Link Etc/GMT Etc/GMT0 + +# We use POSIX-style signs in the Zone names and the output abbreviations, +# even though this is the opposite of what many people expect. +# POSIX has positive signs west of Greenwich, but many people expect +# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses +# the abbreviation "GMT+4" and corresponds to 4 hours behind UTC +# (i.e. west of Greenwich) even though many people would expect it to +# mean 4 hours ahead of UTC (i.e. east of Greenwich). +# +# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation +# (which is not yet supported by the tz code) allows for +# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to +# ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected +# offset is kept within the angle bracket (and is used for display) +# while the POSIX sign is kept outside the angle bracket (and is used +# for calculation). +# +# Do not use a TZ setting like TZ='GMT+4', which is four hours behind +# GMT but uses the completely misleading abbreviation "GMT". + +# Earlier incarnations of this package were not POSIX-compliant, +# and had lines such as +# Zone GMT-12 -12 - GMT-1200 +# We did not want things to change quietly if someone accustomed to the old +# way does a +# zic -l GMT-12 +# so we moved the names into the Etc subdirectory. + +Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT +Zone Etc/GMT-13 13 - GMT-13 +Zone Etc/GMT-12 12 - GMT-12 +Zone Etc/GMT-11 11 - GMT-11 +Zone Etc/GMT-10 10 - GMT-10 +Zone Etc/GMT-9 9 - GMT-9 +Zone Etc/GMT-8 8 - GMT-8 +Zone Etc/GMT-7 7 - GMT-7 +Zone Etc/GMT-6 6 - GMT-6 +Zone Etc/GMT-5 5 - GMT-5 +Zone Etc/GMT-4 4 - GMT-4 +Zone Etc/GMT-3 3 - GMT-3 +Zone Etc/GMT-2 2 - GMT-2 +Zone Etc/GMT-1 1 - GMT-1 +Zone Etc/GMT+1 -1 - GMT+1 +Zone Etc/GMT+2 -2 - GMT+2 +Zone Etc/GMT+3 -3 - GMT+3 +Zone Etc/GMT+4 -4 - GMT+4 +Zone Etc/GMT+5 -5 - GMT+5 +Zone Etc/GMT+6 -6 - GMT+6 +Zone Etc/GMT+7 -7 - GMT+7 +Zone Etc/GMT+8 -8 - GMT+8 +Zone Etc/GMT+9 -9 - GMT+9 +Zone Etc/GMT+10 -10 - GMT+10 +Zone Etc/GMT+11 -11 - GMT+11 +Zone Etc/GMT+12 -12 - GMT+12 diff --git a/libkcal/libical/tzdata/europe b/libkcal/libical/tzdata/europe new file mode 100644 index 000000000..73eed00fc --- /dev/null +++ b/libkcal/libical/tzdata/europe @@ -0,0 +1,2525 @@ +# @(#)europe 8.12 +# <pre> + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1991, and IATA SSIM is the source for entries afterwards. +# +# Other sources occasionally used include: +# +# Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), +# which I found in the UCLA library. +# +# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf"> +# William Willett, The Waste of Daylight, 19th edition +# </a> (1914-03) +# +# Brazil's Departamento Servico da Hora (DSH), +# <a href="http://pcdsh01.on.br/HISTHV.htm"> +# History of Summer Time +# </a> (1998-09-21, in Portuguese) + +# +# I invented the abbreviations marked `*' in the following table; +# the rest are from earlier versions of this file, or from other sources. +# Corrections are welcome! +# std dst 2dst +# LMT Local Mean Time +# -4:00 AST ADT Atlantic +# -3:00 WGT WGST Western Greenland* +# -1:00 EGT EGST Eastern Greenland* +# 0:00 GMT BST BDST Greenwich, British Summer +# 0:00 GMT IST Greenwich, Irish Summer +# 0:00 WET WEST WEMT Western Europe +# 0:19:32.13 AMT NST Amsterdam, Netherlands Summer (1835-1937)* +# 0:20 NET NEST Netherlands (1937-1940)* +# 1:00 CET CEST CEMT Central Europe +# 1:00:14 SET Swedish (1879-1899)* +# 2:00 EET EEST Eastern Europe +# 3:00 MSK MSD Moscow +# +# A reliable and entertaining source about time zones, especially in Britain, +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + +# From Peter Ilieve (1994-12-04), +# The original six [EU members]: Belgium, France, (West) Germany, Italy, +# Luxembourg, the Netherlands. +# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom. +# Plus, from 1 Jan 81: Greece. +# Plus, from 1 Jan 86: Spain, Portugal. +# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for +# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8% +# on a turnout of 88.6%. This was almost the same result as Norway's previous +# referendum in 1972, they are the only country to have said No twice. +# Referendums in the other three countries voted Yes.) +# ... +# Estonia ... uses EU dates but not at 01:00 GMT, they use midnight GMT. +# I don't think they know yet what they will do from 1996 onwards. +# ... +# There shouldn't be any [current members who are not using EU rules]. +# A Directive has the force of law, member states are obliged to enact +# national law to implement it. The only contentious issue was the +# different end date for the UK and Ireland, and this was always allowed +# in the Directive. + + +############################################################################### + +# Britain (United Kingdom) and Ireland (Eire) + +# From Peter Ilieve (1994-07-06): +# +# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about +# historical vistas along the Thames in west London. There was a photo +# and a sketch map showing some of the sightlines involved. One paragraph +# of the text said: +# +# `An old stone obelisk marking a forgotten terrestrial meridian stands +# beside the river at Kew. In the 18th century, before time and longitude +# was standardised by the Royal Observatory in Greenwich, scholars observed +# this stone and the movement of stars from Kew Observatory nearby. They +# made their calculations and set the time for the Horse Guards and Parliament, +# but now the stone is obscured by scrubwood and can only be seen by walking +# along the towpath within a few yards of it.' +# +# I have a one inch to one mile map of London and my estimate of the stone's +# position is 51 deg. 28' 30" N, 0 deg. 18' 45" W. The longitude should +# be within about +-2". The Ordnance Survey grid reference is TQ172761. +# +# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.] + +# From Paul Eggert (1993-11-18): +# +# Howse writes that Britain was the first country to use standard time. +# The railways cared most about the inconsistencies of local mean time, +# and it was they who forced a uniform time on the country. +# The original idea was credited to Dr. William Hyde Wollaston (1766-1828) +# and was popularized by Abraham Follett Osler (1808-1903). +# The first railway to adopt London time was the Great Western Railway +# in November 1840; other railways followed suit, and by 1847 most +# (though not all) railways used London time. On 1847-09-22 the +# Railway Clearing House, an industry standards body, recommended that GMT be +# adopted at all stations as soon as the General Post Office permitted it. +# The transition occurred on 12-01 for the L&NW, the Caledonian, +# and presumably other railways; the January 1848 Bradshaw's lists many +# railways as using GMT. By 1855 the vast majority of public +# clocks in Britain were set to GMT (though some, like the great clock +# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands, +# one for local time and one for GMT). The last major holdout was the legal +# system, which stubbornly stuck to local time for many years, leading +# to oddities like polls opening at 08:13 and closing at 16:13. +# The legal system finally switched to GMT when the Statutes (Definition +# of Time) Act took effect; it received the Royal Assent on 1880-08-02. +# +# In the tables below, we condense this complicated story into a single +# transition date for London, namely 1847-12-01. We don't know as much +# about Dublin, so we use 1880-08-02, the legal transition time. + +# From Paul Eggert (2003-09-27): +# Summer Time was first seriously proposed by William Willett (1857-1915), +# a London builder and member of the Royal Astronomical Society +# who circulated a pamphlet ``The Waste of Daylight'' (1907) +# that proposed advancing clocks 20 minutes on each of four Sundays in April, +# and retarding them by the same amount on four Sundays in September. +# A bill was drafted in 1909 and introduced in Parliament several times, +# but it met with ridicule and opposition, especially from farming interests. +# Later editions of the pamphlet proposed one-hour summer time, and +# it was eventually adopted as a wartime measure in 1916. +# See: Summer Time Arrives Early, The Times (2000-05-18). +# A monument to Willett was unveiled on 1927-05-21, in an open space in +# a 45-acre wood near Chislehurst, Kent that was purchased by popular +# subscription and open to the public. On the south face of the monolith, +# designed by G. W. Miller, is the the William Willett Memorial Sundial, +# which is permanently set to Summer Time. + +# From Winston Churchill (1934-04-28): +# It is one of the paradoxes of history that we should owe the boon of +# summer time, which gives every year to the people of this country +# between 160 and 170 hours more daylight leisure, to a war which +# plunged Europe into darkness for four years, and shook the +# foundations of civilization throughout the world. +# -- <a href="http://www.winstonchurchill.org/fh114willett.htm"> +# "A Silent Toast to William Willett", Pictorial Weekly +# </a> + +# From Paul Eggert (1996-09-03): +# The OED Supplement says that the English originally said ``Daylight Saving'' +# when they were debating the adoption of DST in 1908; but by 1916 this +# term appears only in quotes taken from DST's opponents, whereas the +# proponents (who eventually won the argument) are quoted as using ``Summer''. + +# From Arthur David Olson (1989-01-19): +# +# A source at the British Information Office in New York avers that it's +# known as "British" Summer Time in all parts of the United Kingdom. + +# Date: 4 Jan 89 08:57:25 GMT (Wed) +# From: Jonathan Leffler +# [British Summer Time] is fixed annually by Act of Parliament. +# If you can predict what Parliament will do, you should be in +# politics making a fortune, not computing. + +# From Chris Carrier (1996-06-14): +# I remember reading in various wartime issues of the London Times the +# acronym BDST for British Double Summer Time. Look for the published +# time of sunrise and sunset in The Times, when BDST was in effect, and +# if you find a zone reference it will say, "All times B.D.S.T." + +# From Joseph S. Myers (1999-09-02): +# ... some military cables (WO 219/4100 - this is a copy from the +# main SHAEF archives held in the US National Archives, SHAEF/5252/8/516) +# agree that the usage is BDST (this appears in a message dated 17 Feb 1945). + +# From Joseph S. Myers (2000-10-03): +# On 18th April 1941, Sir Stephen Tallents of the BBC wrote to Sir +# Alexander Maxwell of the Home Office asking whether there was any +# official designation; the reply of the 21st was that there wasn't +# but he couldn't think of anything better than the "Double British +# Summer Time" that the BBC had been using informally. +# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png +# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png + +# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21): +# [N]o official designation has as far as I know been adopted for the time +# which is to be introduced in May.... +# I cannot think of anything better than "Double British Summer Time" +# which could not be said to run counter to any official description. + +# From Paul Eggert (2000-10-02): +# Howse writes (p 157) `DBST' too, but `BDST' seems to have been common +# and follows the more usual convention of putting the location name first, +# so we use `BDST'. + +# Peter Ilieve (1998-04-19) described at length +# the history of summer time legislation in the United Kingdom. +# Since 1998 Joseph S. Myers has been updating +# and extending this list, which can be found in +# <a href="http://student.cusu.cam.ac.uk/~jsm28/british-time/"> +# History of legal time in Britain +# </a> + +# From Joseph S. Myers (1998-01-06): +# +# The legal time in the UK outside of summer time is definitely GMT, not UTC; +# see Lord Tanlaw's speech +# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0"> +# (Lords Hansard 11 June 1997 columns 964 to 976) +# </a>. + +# From Paul Eggert (2006-03-22): +# +# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948. +# +# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger +# are incorrect: +# * Wales did not switch from GMT to daylight saving time until +# 1921 Apr 3, when they began to conform with the rest of Great Britain. +# Actually, Wales was identical after 1880. +# * Eire had two transitions on 1916 Oct 1. +# It actually just had one transition. +# * Northern Ireland used single daylight saving time throughout WW II. +# Actually, it conformed to Britain. +# * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18. +# Actually, that date saw the usual switch to summer time. +# Standard time was not changed until 1968-10-27 (the clocks didn't change). +# +# Here is another incorrect claim by Shanks & Pottenger: +# * Jersey, Guernsey, and the Isle of Man did not switch from GMT +# to daylight saving time until 1921 Apr 3, when they began to +# conform with Great Britain. +# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise. +# +# The following claim by Shanks & Pottenger is possible though doubtful; +# we'll ignore it for now. +# * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00. +# +# +# Whitman says Dublin Mean Time was -0:25:21, which is more precise than +# Shanks & Pottenger. +# Perhaps this was Dunsink Observatory Time, as Dunsink Observatory +# (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was +# to London. For example: +# +# "Timeball on the ballast office is down. Dunsink time." +# -- James Joyce, Ulysses + +# From Joseph S. Myers (2005-01-26): +# Irish laws are available online at www.irishstatutebook.ie. These include +# various relating to legal time, for example: +# +# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html +# +# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html +# ZZSI27Y1951.html ZZSI73Y1952.html +# +# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html +# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html +# ZZA23Y1968.html ZZA17Y1971.html +# +# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html +# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html +# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html +# +# [These are all relative to the root, e.g., the first is +# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.] +# +# (These are those I found, but there could be more. In any case these +# should allow various updates to the comments in the europe file to cover +# the laws applicable in Ireland.) +# +# (Note that the time in the Republic of Ireland since 1968 has been defined +# in terms of standard time being GMT+1 with a period of winter time when it +# is GMT, rather than standard time being GMT with a period of summer time +# being GMT+1.) + +# From Paul Eggert (1999-03-28): +# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31) +# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time +# (CT), equivalent to French civil time. +# Julian Hill (<news:36118128.5A14@virgin.net>, 1998-09-30) reports that +# trains between Dollands Moor (the freight facility next door) +# and Frethun run in CT. +# My admittedly uninformed guess is that the terminal has two authorities, +# the French concession operators and the British civil authorities, +# and that the time depends on who you're talking to. +# If, say, the British police were called to the station for some reason, +# I would expect the official police report to use GMT/BST and not CET/CEST. +# This is a borderline case, but for now let's stick to GMT/BST. + +# From an anonymous contributor (1996-06-02): +# The law governing time in Ireland is under Statutory Instrument SI 395/94, +# which gives force to European Union 7th Council Directive # 94/21/EC. +# Under this directive, the Minister for Justice in Ireland makes appropriate +# regulations. I spoke this morning with the Secretary of the Department of +# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is +# "Irish Summer Time", abbreviated to "IST". + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Summer Time Act, 1916 +Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST +Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT +# S.R.&O. 1917, No. 358 +Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST +Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT +# S.R.&O. 1918, No. 274 +Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST +Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT +# S.R.&O. 1919, No. 297 +Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST +Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT +# S.R.&O. 1920, No. 458 +Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST +# S.R.&O. 1920, No. 1844 +Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT +# S.R.&O. 1921, No. 363 +Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT +# S.R.&O. 1922, No. 264 +Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST +Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT +# The Summer Time Act, 1922 +Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT +Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST +# The Summer Time Act, 1925 +Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST +# S.R.&O. 1939, No. 1379 +Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT +# S.R.&O. 1940, No. 172 and No. 1883 +Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST +# S.R.&O. 1941, No. 476 +Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST +Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST +# S.R.&O. 1942, No. 506 +Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST +# S.R.&O. 1944, No. 932 +Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST +# S.R.&O. 1945, No. 312 +Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST +Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST +# S.R.&O. 1945, No. 1208 +Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST +# The Summer Time Act, 1947 +Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST +Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST +Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST +Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT +# Summer Time Order, 1948 (S.I. 1948/495) +Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST +Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT +# Summer Time Order, 1949 (S.I. 1949/373) +Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT +# Summer Time Order, 1950 (S.I. 1950/518) +# Summer Time Order, 1951 (S.I. 1951/430) +# Summer Time Order, 1952 (S.I. 1952/451) +Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST +Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT +# revert to the rules of the Summer Time Act, 1925 +Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST +# Summer Time Order, 1961 (S.I. 1961/71) +# Summer Time (1962) Order, 1961 (S.I. 1961/2465) +# Summer Time Order, 1963 (S.I. 1963/81) +Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST +Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT +# Summer Time (1964) Order, 1963 (S.I. 1963/2101) +# Summer Time Order, 1964 (S.I. 1964/1201) +# Summer Time Order, 1967 (S.I. 1967/1148) +Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST +# Summer Time Order, 1968 (S.I. 1968/117) +Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST +# The British Standard Time Act, 1968 +# (no summer time) +# The Summer Time Act, 1972 +Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT +# Summer Time Order, 1980 (S.I. 1980/1089) +# Summer Time Order, 1982 (S.I. 1982/1673) +# Summer Time Order, 1986 (S.I. 1986/223) +# Summer Time Order, 1988 (S.I. 1988/931) +Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST +Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT +# Summer Time Order, 1989 (S.I. 1989/985) +# Summer Time Order, 1992 (S.I. 1992/1729) +# Summer Time Order 1994 (S.I. 1994/2798) +Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT +# Summer Time Order 1997 (S.I. 1997/2982) +# See EU for rules starting in 1996. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s + 0:00 GB-Eire %s 1968 Oct 27 + 1:00 - BST 1971 Oct 31 2:00u + 0:00 GB-Eire %s 1996 + 0:00 EU GMT/BST +Link Europe/London Europe/Jersey +Link Europe/London Europe/Guernsey +Link Europe/London Europe/Isle_of_Man +Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 + -0:25:21 - DMT 1916 May 21 2:00 + -0:25:21 1:00 IST 1916 Oct 1 2:00s + 0:00 GB-Eire %s 1921 Dec 6 # independence + 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00 + 0:00 1:00 IST 1946 Oct 6 2:00 + 0:00 - GMT 1947 Mar 16 2:00 + 0:00 1:00 IST 1947 Nov 2 2:00 + 0:00 - GMT 1948 Apr 18 2:00 + 0:00 GB-Eire GMT/IST 1968 Oct 27 + 1:00 - IST 1971 Oct 31 2:00u + 0:00 GB-Eire GMT/IST 1996 + 0:00 EU GMT/IST + +############################################################################### + +# Europe + +# EU rules are for the European Union, previously known as the EC, EEC, +# Common Market, etc. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S +Rule EU 1977 only - Sep lastSun 1:00u 0 - +Rule EU 1978 only - Oct 1 1:00u 0 - +Rule EU 1979 1995 - Sep lastSun 1:00u 0 - +Rule EU 1981 max - Mar lastSun 1:00u 1:00 S +Rule EU 1996 max - Oct lastSun 1:00u 0 - +# The most recent directive covers the years starting in 2002. See: +# <a href="http://europa.eu.int/eur-lex/en/lif/dat/2000/en_300L0084.html" +# Directive 2000/84/EC of the European Parliament and of the Council +# of 19 January 2001 on summer-time arrangements. +# </a> + +# W-Eur differs from EU only in that W-Eur uses standard time. +Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S +Rule W-Eur 1977 only - Sep lastSun 1:00s 0 - +Rule W-Eur 1978 only - Oct 1 1:00s 0 - +Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 - +Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S +Rule W-Eur 1996 max - Oct lastSun 1:00s 0 - + +# Older C-Eur rules are for convenience in the tables. +# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time. +Rule C-Eur 1916 only - Apr 30 23:00 1:00 S +Rule C-Eur 1916 only - Oct 1 1:00 0 - +Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S +Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 - +Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S +Rule C-Eur 1942 only - Nov 2 2:00s 0 - +Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S +Rule C-Eur 1943 only - Oct 4 2:00s 0 - +Rule C-Eur 1944 only - Apr 3 2:00s 1:00 S +# Whitman gives 1944 Oct 7; go with Shanks & Pottenger. +Rule C-Eur 1944 only - Oct 2 2:00s 0 - +Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S +Rule C-Eur 1977 only - Sep lastSun 2:00s 0 - +Rule C-Eur 1978 only - Oct 1 2:00s 0 - +Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 - +Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S +Rule C-Eur 1996 max - Oct lastSun 2:00s 0 - + +# E-Eur differs from EU only in that E-Eur switches at midnight local time. +Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule E-Eur 1977 only - Sep lastSun 0:00 0 - +Rule E-Eur 1978 only - Oct 1 0:00 0 - +Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 - +Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S +Rule E-Eur 1996 max - Oct lastSun 0:00 0 - + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time +Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time +Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time +Rule Russia 1918 only - Sep 16 1:00 1:00 MST +Rule Russia 1919 only - May 31 23:00 2:00 MDST +Rule Russia 1919 only - Jul 1 2:00 1:00 S +Rule Russia 1919 only - Aug 16 0:00 0 - +Rule Russia 1921 only - Feb 14 23:00 1:00 S +Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer +Rule Russia 1921 only - Sep 1 0:00 1:00 S +Rule Russia 1921 only - Oct 1 0:00 0 - +# Act No.925 of the Council of Ministers of the USSR (1980-10-24): +Rule Russia 1981 1984 - Apr 1 0:00 1:00 S +Rule Russia 1981 1983 - Oct 1 0:00 0 - +# Act No.967 of the Council of Ministers of the USSR (1984-09-13), repeated in +# Act No.227 of the Council of Ministers of the USSR (1989-03-14): +Rule Russia 1984 1991 - Sep lastSun 2:00s 0 - +Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S +# +Rule Russia 1992 only - Mar lastSat 23:00 1:00 S +Rule Russia 1992 only - Sep lastSat 23:00 0 - +Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S +Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - +Rule Russia 1996 max - Oct lastSun 2:00s 0 - + +# These are for backward compatibility with older versions. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone WET 0:00 EU WE%sT +Zone CET 1:00 C-Eur CE%sT +Zone MET 1:00 C-Eur ME%sT +Zone EET 2:00 EU EE%sT + +# Previous editions of this database used abbreviations like MET DST +# for Central European Summer Time, but this didn't agree with common usage. + +# From Markus Kuhn (1996-07-12): +# The official German names ... are +# +# Mitteleuropaeische Zeit (MEZ) = UTC+01:00 +# Mitteleuropaeische Sommerzeit (MESZ) = UTC+02:00 +# +# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG), +# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111).... +# I wrote ... to the German Federal Physical-Technical Institution +# +# Physikalisch-Technische Bundesanstalt (PTB) +# Laboratorium 4.41 "Zeiteinheit" +# Postfach 3345 +# D-38023 Braunschweig +# phone: +49 531 592-0 +# +# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB +# department for time and frequency transmission. He explained that the +# PTB translates MEZ and MESZ into English as +# +# Central European Time (CET) = UTC+01:00 +# Central European Summer Time (CEST) = UTC+02:00 + + +# Albania +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Albania 1940 only - Jun 16 0:00 1:00 S +Rule Albania 1942 only - Nov 2 3:00 0 - +Rule Albania 1943 only - Mar 29 2:00 1:00 S +Rule Albania 1943 only - Apr 10 3:00 0 - +Rule Albania 1974 only - May 4 0:00 1:00 S +Rule Albania 1974 only - Oct 2 0:00 0 - +Rule Albania 1975 only - May 1 0:00 1:00 S +Rule Albania 1975 only - Oct 2 0:00 0 - +Rule Albania 1976 only - May 2 0:00 1:00 S +Rule Albania 1976 only - Oct 3 0:00 0 - +Rule Albania 1977 only - May 8 0:00 1:00 S +Rule Albania 1977 only - Oct 2 0:00 0 - +Rule Albania 1978 only - May 6 0:00 1:00 S +Rule Albania 1978 only - Oct 1 0:00 0 - +Rule Albania 1979 only - May 5 0:00 1:00 S +Rule Albania 1979 only - Sep 30 0:00 0 - +Rule Albania 1980 only - May 3 0:00 1:00 S +Rule Albania 1980 only - Oct 4 0:00 0 - +Rule Albania 1981 only - Apr 26 0:00 1:00 S +Rule Albania 1981 only - Sep 27 0:00 0 - +Rule Albania 1982 only - May 2 0:00 1:00 S +Rule Albania 1982 only - Oct 3 0:00 0 - +Rule Albania 1983 only - Apr 18 0:00 1:00 S +Rule Albania 1983 only - Oct 1 0:00 0 - +Rule Albania 1984 only - Apr 1 0:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Tirane 1:19:20 - LMT 1914 + 1:00 - CET 1940 Jun 16 + 1:00 Albania CE%sT 1984 Jul + 1:00 EU CE%sT + +# Andorra +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Andorra 0:06:04 - LMT 1901 + 0:00 - WET 1946 Sep 30 + 1:00 - CET 1985 Mar 31 2:00 + 1:00 EU CE%sT + +# Austria + +# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and +# 1945-11-18, but the Austrian Federal Office of Metrology and +# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged" +# date of 1945-04-12 with no time. For the 1980-04-06 transition +# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV, +# and guess 02:00 for 1945-04-12. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Austria 1920 only - Apr 5 2:00s 1:00 S +Rule Austria 1920 only - Sep 13 2:00s 0 - +Rule Austria 1946 only - Apr 14 2:00s 1:00 S +Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 - +Rule Austria 1947 only - Apr 6 2:00s 1:00 S +Rule Austria 1948 only - Apr 18 2:00s 1:00 S +Rule Austria 1980 only - Apr 6 0:00 1:00 S +Rule Austria 1980 only - Sep 28 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vienna 1:05:20 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1920 + 1:00 Austria CE%sT 1940 Apr 1 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 1:00 CEST 1945 Apr 12 2:00s + 1:00 - CET 1946 + 1:00 Austria CE%sT 1981 + 1:00 EU CE%sT + +# Belarus +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Minsk 1:50:16 - LMT 1880 + 1:50 - MMT 1924 May 2 # Minsk Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Jun 28 + 1:00 C-Eur CE%sT 1944 Jul 3 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 - EET 1992 Mar 29 0:00s + 2:00 1:00 EEST 1992 Sep 27 0:00s + 2:00 Russia EE%sT + +# Belgium +# +# From Paul Eggert (1997-07-02): +# Entries from 1918 through 1991 are taken from: +# Annuaire de L'Observatoire Royal de Belgique, +# Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991 +# (Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC), +# pp 8-9. +# LMT before 1892 was 0:17:30, according to the official journal of Belgium: +# Moniteur Belge, Samedi 30 Avril 1892, N.121. +# Thanks to Pascal Delmoitie for these references. +# The 1918 rules are listed for completeness; they apply to unoccupied Belgium. +# Assume Brussels switched to WET in 1918 when the armistice took effect. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Belgium 1918 only - Mar 9 0:00s 1:00 S +Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1919 only - Mar 1 23:00s 1:00 S +Rule Belgium 1920 only - Feb 14 23:00s 1:00 S +Rule Belgium 1920 only - Oct 23 23:00s 0 - +Rule Belgium 1921 only - Mar 14 23:00s 1:00 S +Rule Belgium 1921 only - Oct 25 23:00s 0 - +Rule Belgium 1922 only - Mar 25 23:00s 1:00 S +Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1923 only - Apr 21 23:00s 1:00 S +Rule Belgium 1924 only - Mar 29 23:00s 1:00 S +Rule Belgium 1925 only - Apr 4 23:00s 1:00 S +# DSH writes that a royal decree of 1926-02-22 specified the Sun following 3rd +# Sat in Apr (except if it's Easter, in which case it's one Sunday earlier), +# to Sun following 1st Sat in Oct, and that a royal decree of 1928-09-15 +# changed the transition times to 02:00 GMT. +Rule Belgium 1926 only - Apr 17 23:00s 1:00 S +Rule Belgium 1927 only - Apr 9 23:00s 1:00 S +Rule Belgium 1928 only - Apr 14 23:00s 1:00 S +Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 - +Rule Belgium 1929 only - Apr 21 2:00s 1:00 S +Rule Belgium 1930 only - Apr 13 2:00s 1:00 S +Rule Belgium 1931 only - Apr 19 2:00s 1:00 S +Rule Belgium 1932 only - Apr 3 2:00s 1:00 S +Rule Belgium 1933 only - Mar 26 2:00s 1:00 S +Rule Belgium 1934 only - Apr 8 2:00s 1:00 S +Rule Belgium 1935 only - Mar 31 2:00s 1:00 S +Rule Belgium 1936 only - Apr 19 2:00s 1:00 S +Rule Belgium 1937 only - Apr 4 2:00s 1:00 S +Rule Belgium 1938 only - Mar 27 2:00s 1:00 S +Rule Belgium 1939 only - Apr 16 2:00s 1:00 S +Rule Belgium 1939 only - Nov 19 2:00s 0 - +Rule Belgium 1940 only - Feb 25 2:00s 1:00 S +Rule Belgium 1944 only - Sep 17 2:00s 0 - +Rule Belgium 1945 only - Apr 2 2:00s 1:00 S +Rule Belgium 1945 only - Sep 16 2:00s 0 - +Rule Belgium 1946 only - May 19 2:00s 1:00 S +Rule Belgium 1946 only - Oct 7 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Brussels 0:17:30 - LMT 1880 + 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT + 0:00 - WET 1914 Nov 8 + 1:00 - CET 1916 May 1 0:00 + 1:00 C-Eur CE%sT 1918 Nov 11 11:00u + 0:00 Belgium WE%sT 1940 May 20 2:00s + 1:00 C-Eur CE%sT 1944 Sep 3 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT + +# Bosnia and Herzegovina +# see Serbia + +# Bulgaria +# +# From Plamen Simenov via Steffen Thorsen (1999-09-09): +# A document of Government of Bulgaria (No.94/1997) says: +# EET --> EETDST is in 03:00 Local time in last Sunday of March ... +# EETDST --> EET is in 04:00 Local time in last Sunday of October +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Bulg 1979 only - Mar 31 23:00 1:00 S +Rule Bulg 1979 only - Oct 1 1:00 0 - +Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S +Rule Bulg 1980 only - Sep 29 1:00 0 - +Rule Bulg 1981 only - Sep 27 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Sofia 1:33:16 - LMT 1880 + 1:56:56 - IMT 1894 Nov 30 # Istanbul MT? + 2:00 - EET 1942 Nov 2 3:00 + 1:00 C-Eur CE%sT 1945 Apr 2 3:00 + 2:00 - EET 1979 Mar 31 23:00 + 2:00 Bulg EE%sT 1982 Sep 26 2:00 + 2:00 C-Eur EE%sT 1991 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT + +# Croatia +# see Serbia + +# Cyprus +# Please see the `asia' file for Asia/Nicosia. + +# Czech Republic +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Czech 1945 only - Apr 8 2:00s 1:00 S +Rule Czech 1945 only - Nov 18 2:00s 0 - +Rule Czech 1946 only - May 6 2:00s 1:00 S +Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Czech 1947 only - Apr 20 2:00s 1:00 S +Rule Czech 1948 only - Apr 18 2:00s 1:00 S +Rule Czech 1949 only - Apr 9 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Prague 0:57:44 - LMT 1850 + 0:57:44 - PMT 1891 Oct # Prague Mean Time + 1:00 C-Eur CE%sT 1944 Sep 17 2:00s + 1:00 Czech CE%sT 1979 + 1:00 EU CE%sT + +# Denmark, Faroe Islands, and Greenland + +# From Jesper Norgaard Welen (2005-04-26): +# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law +# [introducing standard time] was in effect from 1894-01-01.... +# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL +# confirms this, and states that the law was put forth 1893-03-29. +# +# The EU treaty with effect from 1973: +# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL +# +# This provoked a new law from 1974 to make possible summer time changes +# in subsequenet decrees with the law +# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL +# +# It seems however that no decree was set forward until 1980. I have +# not found any decree, but in another related law, the effecting DST +# changes are stated explicitly to be from 1980-04-06 at 02:00 to +# 1980-09-28 at 02:00. If this is true, this differs slightly from +# the EU rule in that DST runs to 02:00, not 03:00. We don't know +# when Denmark began using the EU rule correctly, but we have only +# confirmation of the 1980-time, so I presume it was correct in 1981: +# The law is about the management of the extra hour, concerning +# working hours reported and effect on obligatory-rest rules (which +# was suspended on that night): +# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL + +# From Jesper Norgaard Welen (2005-06-11): +# The Herning Folkeblad (1980-09-26) reported that the night between +# Saturday and Sunday the clock is set back from three to two. + +# From Paul Eggert (2005-06-11): +# Hence the "02:00" of the 1980 law refers to standard time, not +# wall-clock time, and so the EU rules were in effect in 1980. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Denmark 1916 only - May 14 23:00 1:00 S +Rule Denmark 1916 only - Sep 30 23:00 0 - +Rule Denmark 1940 only - May 15 0:00 1:00 S +Rule Denmark 1945 only - Apr 2 2:00s 1:00 S +Rule Denmark 1945 only - Aug 15 2:00s 0 - +Rule Denmark 1946 only - May 1 2:00s 1:00 S +Rule Denmark 1946 only - Sep 1 2:00s 0 - +Rule Denmark 1947 only - May 4 2:00s 1:00 S +Rule Denmark 1947 only - Aug 10 2:00s 0 - +Rule Denmark 1948 only - May 9 2:00s 1:00 S +Rule Denmark 1948 only - Aug 8 2:00s 0 - +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Copenhagen 0:50:20 - LMT 1890 + 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT + 1:00 Denmark CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Denmark CE%sT 1980 + 1:00 EU CE%sT +Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn + 0:00 - WET 1981 + 0:00 EU WE%sT +# +# From Paul Eggert (2004-10-31): +# During World War II, Germany maintained secret manned weather stations in +# East Greenland and Franz Josef Land, but we don't know their time zones. +# My source for this is Wilhelm Dege's book mentioned under Svalbard. +# +# From Paul Eggert (2006-03-22): +# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01, +# and left the EU on 1985-02-01. It therefore should have been using EU +# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab +# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU +# rules since at least 1991. Assume EU rules since 1980. + +# From Gwillin Law (2001-06-06), citing +# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15), +# and with translations corrected by Steffen Thorsen: +# +# Greenland has four local times, and the relation to UTC +# is according to the following time line: +# +# The military zone near Thule UTC-4 +# Standard Greenland time UTC-3 +# Scoresbysund UTC-1 +# Danmarkshavn UTC +# +# In the military area near Thule and in Danmarkshavn DST will not be +# introduced. + +# From Rives McDow (2001-11-01): +# +# I correspond regularly with the Dansk Polarcenter, and wrote them at +# the time to clarify the situation in Thule. Unfortunately, I have +# not heard back from them regarding my recent letter. [But I have +# info from earlier correspondence.] +# +# According to the center, a very small local time zone around Thule +# Air Base keeps the time according to UTC-4, implementing daylight +# savings using North America rules, changing the time at 02:00 local time.... +# +# The east coast of Greenland north of the community of Scoresbysund +# uses UTC in the same way as in Iceland, year round, with no dst. +# There are just a few stations on this coast, including the +# Danmarkshavn ICAO weather station mentioned in your September 29th +# email. The other stations are two sledge patrol stations in +# Mestersvig and Daneborg, the air force base at Station Nord, and the +# DPC research station at Zackenberg. +# +# Scoresbysund and two small villages nearby keep time UTC-1 and use +# the same daylight savings time period as in West Greenland (Godthab). +# +# The rest of Greenland, including Godthab (this area, although it +# includes central Greenland, is known as west Greenland), keeps time +# UTC-3, with daylight savings methods according to European rules. +# +# It is common procedure to use UTC 0 in the wilderness of East and +# North Greenland, because it is mainly Icelandic aircraft operators +# maintaining traffic in these areas. However, the official status of +# this area is that it sticks with Godthab time. This area might be +# considered a dual time zone in some respects because of this. + +# From Rives McDow (2001-11-19): +# I heard back from someone stationed at Thule; the time change took place +# there at 2:00 AM. + +# From Paul Eggert (2006-03-22): +# From 1997 on the CIA map shows Danmarkshavn on GMT; +# the 1995 map as like Godthab. +# For lack of better info, assume they were like Godthab before 1996. +# startkart.no says Thule does not observe DST, but this is clearly an error, +# so go with Shanks & Pottenger for Thule transitions until this year. +# For 2007 on assume Thule will stay in sync with US DST rules. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D +Rule Thule 1991 1992 - Sep lastSun 2:00 0 S +Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D +Rule Thule 1993 2006 - Oct lastSun 2:00 0 S +Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D +Rule Thule 2007 max - Nov Sun>=1 2:00 0 S +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT 1996 + 0:00 - GMT +Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit + -2:00 - CGT 1980 Apr 6 2:00 + -2:00 C-Eur CG%sT 1981 Mar 29 + -1:00 EU EG%sT +Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT +Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base + -4:00 Thule A%sT + +# Estonia +# From Peter Ilieve (1994-10-15): +# A relative in Tallinn confirms the accuracy of the data for 1989 onwards +# [through 1994] and gives the legal authority for it, +# a regulation of the Government of Estonia, No. 111 of 1989.... +# +# From Peter Ilieve (1996-10-28): +# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s, +# but a relative confirms that Estonia still switches at 02:00s, writing:] +# ``I do not [know] exactly but there are some little different +# (confusing) rules for International Air and Railway Transport Schedules +# conversion in Sunday connected with end of summer time in Estonia.... +# A discussion is running about the summer time efficiency and effect on +# human physiology. It seems that Estonia maybe will not change to +# summer time next spring.'' + +# From Peter Ilieve (1998-11-04), heavily edited: +# <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390"> +# The 1998-09-22 Estonian time law +# </a> +# refers to the Eighth Directive and cites the association agreement between +# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120). +# +# I also asked [my relative] whether they use any standard abbreviation +# for their standard and summer times. He says no, they use "suveaeg" +# (summer time) and "talveaeg" (winter time). + +# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09) +# via Steffen Thorsen: +# This year will mark the last time Estonia shifts to summer time, +# a council of the ruling coalition announced Sept. 6.... +# But what this could mean for Estonia's chances of joining the European +# Union are still unclear. In 1994, the EU declared summer time compulsory +# for all member states until 2001. Brussels has yet to decide what to do +# after that. + +# From Mart Oruaas (2000-01-29): +# Regulation no. 301 (1999-10-12) obsoletes previous regulation +# no. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all +# the year round. The regulation is effective 1999-11-01. + +# From Toomas Soome (2002-02-21): +# The Estonian government has changed once again timezone politics. +# Now we are using again EU rules. +# +# From Urmet Jaanes (2002-03-28): +# The legislative reference is Government decree No. 84 on 2002-02-21. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Tallinn 1:39:00 - LMT 1880 + 1:39:00 - TMT 1918 Feb # Tallinn Mean Time + 1:00 C-Eur CE%sT 1919 Jul + 1:39:00 - TMT 1921 May + 2:00 - EET 1940 Aug 6 + 3:00 - MSK 1941 Sep 15 + 1:00 C-Eur CE%sT 1944 Sep 22 + 3:00 Russia MSK/MSD 1989 Mar 26 2:00s + 2:00 1:00 EEST 1989 Sep 24 2:00s + 2:00 C-Eur EE%sT 1998 Sep 22 + 2:00 EU EE%sT 1999 Nov 1 + 2:00 - EET 2002 Feb 21 + 2:00 EU EE%sT + +# Finland +# +# From Hannu Strang (1994-09-25 06:03:37 UTC): +# Well, here in Helsinki we're just changing from summer time to regular one, +# and it's supposed to change at 4am... +# +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say Finland has switched at 02:00 standard time +# since 1981. Go with Strang instead. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Finland 1942 only - Apr 3 0:00 1:00 S +Rule Finland 1942 only - Oct 3 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 + 1:39:52 - HMT 1921 May # Helsinki Mean Time + 2:00 Finland EE%sT 1981 Mar 29 2:00 + 2:00 EU EE%sT + +# Aaland Is +Link Europe/Helsinki Europe/Mariehamn + + +# France + +# From Ciro Discepolo (2000-12-20): +# +# Henri Le Corre, Regimes Horaires pour le monde entier, Editions +# Traditionnelles - Paris 2 books, 1993 +# +# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur, +# Paris, 1991 +# +# Francoise Gauquelin, Problemes de l'heure resolus en astrologie, +# Guy tredaniel, Paris 1987 + + +# +# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule France 1916 only - Jun 14 23:00s 1:00 S +Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule France 1917 only - Mar 24 23:00s 1:00 S +Rule France 1918 only - Mar 9 23:00s 1:00 S +Rule France 1919 only - Mar 1 23:00s 1:00 S +Rule France 1920 only - Feb 14 23:00s 1:00 S +Rule France 1920 only - Oct 23 23:00s 0 - +Rule France 1921 only - Mar 14 23:00s 1:00 S +Rule France 1921 only - Oct 25 23:00s 0 - +Rule France 1922 only - Mar 25 23:00s 1:00 S +# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st +# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions +# were Apr 12 and Oct 5. Go with Shanks & Pottenger. +Rule France 1922 1938 - Oct Sat>=1 23:00s 0 - +Rule France 1923 only - May 26 23:00s 1:00 S +Rule France 1924 only - Mar 29 23:00s 1:00 S +Rule France 1925 only - Apr 4 23:00s 1:00 S +Rule France 1926 only - Apr 17 23:00s 1:00 S +Rule France 1927 only - Apr 9 23:00s 1:00 S +Rule France 1928 only - Apr 14 23:00s 1:00 S +Rule France 1929 only - Apr 20 23:00s 1:00 S +Rule France 1930 only - Apr 12 23:00s 1:00 S +Rule France 1931 only - Apr 18 23:00s 1:00 S +Rule France 1932 only - Apr 2 23:00s 1:00 S +Rule France 1933 only - Mar 25 23:00s 1:00 S +Rule France 1934 only - Apr 7 23:00s 1:00 S +Rule France 1935 only - Mar 30 23:00s 1:00 S +Rule France 1936 only - Apr 18 23:00s 1:00 S +Rule France 1937 only - Apr 3 23:00s 1:00 S +Rule France 1938 only - Mar 26 23:00s 1:00 S +Rule France 1939 only - Apr 15 23:00s 1:00 S +Rule France 1939 only - Nov 18 23:00s 0 - +Rule France 1940 only - Feb 25 2:00 1:00 S +# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger +# write that they were used in Monaco and in many French locations. +# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez, +# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La +# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes, +# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin, +# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois, +# Dole, Morez, St-Claude, and Collognes (Haute-Savioe). +Rule France 1941 only - May 5 0:00 2:00 M # Midsummer +# Shanks & Pottenger say this transition occurred at Oct 6 1:00, +# but go with Denis Excoffier (1997-12-12), +# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes +# as saying 5/10/41 22hUT. +Rule France 1941 only - Oct 6 0:00 1:00 S +Rule France 1942 only - Mar 9 0:00 2:00 M +Rule France 1942 only - Nov 2 3:00 1:00 S +Rule France 1943 only - Mar 29 2:00 2:00 M +Rule France 1943 only - Oct 4 3:00 1:00 S +Rule France 1944 only - Apr 3 2:00 2:00 M +Rule France 1944 only - Oct 8 1:00 1:00 S +Rule France 1945 only - Apr 2 2:00 2:00 M +Rule France 1945 only - Sep 16 3:00 0 - +# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00; +# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT. +Rule France 1976 only - Mar 28 1:00 1:00 S +Rule France 1976 only - Sep 26 1:00 0 - +# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05, +# but Howse quotes the actual French legislation as saying 0:09:21. +# Go with Howse. Howse writes that the time in France was officially based +# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT +# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre. + 0:00 France WE%sT 1940 Jun 14 23:00 +# Le Corre says Paris stuck with occupied-France time after the liberation; +# go with Shanks & Pottenger. + 1:00 C-Eur CE%sT 1944 Aug 25 + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT + +# Germany + +# From Markus Kuhn (1998-09-29): +# The German time zone web site by the Physikalisch-Technische +# Bundesanstalt contains DST information back to 1916. +# [See tz-link.htm for the URL.] + +# From Joerg Schilling (2002-10-23): +# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by <a +# href="http://www.dhm.de/lemo/html/biografien/BersarinNikolai/"> +# General [Nikolai] Bersarin</a>. + +# From Paul Eggert (2003-03-08): +# <a href="http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf"> +# says that Bersarin issued an order to use Moscow time on May 20. +# However, Moscow did not observe daylight saving in 1945, so +# this was equivalent to CEMT (GMT+3), not GMT+4. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Germany 1945 only - Apr 2 2:00s 1:00 S +Rule Germany 1945 only - May 24 2:00 2:00 M # Midsummer +Rule Germany 1945 only - Sep 24 3:00 1:00 S +Rule Germany 1945 only - Nov 18 2:00s 0 - +Rule Germany 1946 only - Apr 14 2:00s 1:00 S +Rule Germany 1946 only - Oct 7 2:00s 0 - +Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Germany 1947 only - Apr 6 2:00s 1:00 S +Rule Germany 1947 only - May 11 2:00s 2:00 M +Rule Germany 1947 only - Jun 29 3:00 1:00 S +Rule Germany 1948 only - Apr 18 2:00s 1:00 S +Rule Germany 1949 only - Apr 10 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Berlin 0:53:28 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Germany CE%sT 1980 + 1:00 EU CE%sT + +# Georgia +# Please see the "asia" file for Asia/Tbilisi. +# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni) +# is in Europe. Our reference location Tbilisi is in the Asian part. + +# Gibraltar +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s + 0:00 GB-Eire %s 1957 Apr 14 2:00 + 1:00 - CET 1982 + 1:00 EU CE%sT + +# Greece +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger. +Rule Greece 1932 only - Jul 7 0:00 1:00 S +Rule Greece 1932 only - Sep 1 0:00 0 - +# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger. +Rule Greece 1941 only - Apr 7 0:00 1:00 S +# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger. +Rule Greece 1942 only - Nov 2 3:00 0 - +Rule Greece 1943 only - Mar 30 0:00 1:00 S +Rule Greece 1943 only - Oct 4 0:00 0 - +# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger. +Rule Greece 1952 only - Jul 1 0:00 1:00 S +Rule Greece 1952 only - Nov 2 0:00 0 - +Rule Greece 1975 only - Apr 12 0:00s 1:00 S +Rule Greece 1975 only - Nov 26 0:00s 0 - +Rule Greece 1976 only - Apr 11 2:00s 1:00 S +Rule Greece 1976 only - Oct 10 2:00s 0 - +Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S +Rule Greece 1977 only - Sep 26 2:00s 0 - +Rule Greece 1978 only - Sep 24 4:00 0 - +Rule Greece 1979 only - Apr 1 9:00 1:00 S +Rule Greece 1979 only - Sep 29 2:00 0 - +Rule Greece 1980 only - Apr 1 0:00 1:00 S +Rule Greece 1980 only - Sep 28 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14 + 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT + 2:00 Greece EE%sT 1941 Apr 30 + 1:00 Greece CE%sT 1944 Apr 4 + 2:00 Greece EE%sT 1981 + # Shanks & Pottenger say it switched to C-Eur in 1981; + # go with EU instead, since Greece joined it on Jan 1. + 2:00 EU EE%sT + +# Hungary +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Hungary 1918 only - Apr 1 3:00 1:00 S +Rule Hungary 1918 only - Sep 29 3:00 0 - +Rule Hungary 1919 only - Apr 15 3:00 1:00 S +Rule Hungary 1919 only - Sep 15 3:00 0 - +Rule Hungary 1920 only - Apr 5 3:00 1:00 S +Rule Hungary 1920 only - Sep 30 3:00 0 - +Rule Hungary 1945 only - May 1 23:00 1:00 S +Rule Hungary 1945 only - Nov 3 0:00 0 - +Rule Hungary 1946 only - Mar 31 2:00s 1:00 S +Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S +Rule Hungary 1950 only - Apr 17 2:00s 1:00 S +Rule Hungary 1950 only - Oct 23 2:00s 0 - +Rule Hungary 1954 1955 - May 23 0:00 1:00 S +Rule Hungary 1954 1955 - Oct 3 0:00 0 - +Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S +Rule Hungary 1956 only - Sep lastSun 0:00 0 - +Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S +Rule Hungary 1957 only - Sep lastSun 3:00 0 - +Rule Hungary 1980 only - Apr 6 1:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Budapest 1:16:20 - LMT 1890 Oct + 1:00 C-Eur CE%sT 1918 + 1:00 Hungary CE%sT 1941 Apr 6 2:00 + 1:00 C-Eur CE%sT 1945 May 1 23:00 + 1:00 Hungary CE%sT 1980 Sep 28 2:00s + 1:00 EU CE%sT + +# Iceland +# +# From Adam David (1993-11-06): +# The name of the timezone in Iceland for system / mail / news purposes is GMT. +# +# (1993-12-05): +# This material is paraphrased from the 1988 edition of the University of +# Iceland Almanak. +# +# From January 1st, 1908 the whole of Iceland was standardised at 1 hour +# behind GMT. Previously, local mean solar time was used in different parts +# of Iceland, the almanak had been based on Reykjavik mean solar time which +# was 1 hour and 28 minutes behind GMT. +# +# "first day of winter" referred to [below] means the first day of the 26 weeks +# of winter, according to the old icelandic calendar that dates back to the +# time the norsemen first settled Iceland. The first day of winter is always +# Saturday, but is not dependent on the Julian or Gregorian calendars. +# +# (1993-12-10): +# I have a reference from the Oxford Icelandic-English dictionary for the +# beginning of winter, which ties it to the ecclesiastical calendar (and thus +# to the julian/gregorian calendar) over the period in question. +# the winter begins on the Saturday next before St. Luke's day +# (old style), or on St. Luke's day, if a Saturday. +# St. Luke's day ought to be traceable from ecclesiastical sources. "old style" +# might be a reference to the Julian calendar as opposed to Gregorian, or it +# might mean something else (???). +# +# From Paul Eggert (2006-03-22): +# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points. +# We go with the Almanak, except for one claim from Shanks & Pottenger, namely +# that Reykavik was 21W57 from 1837 to 1908, local mean time before that. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S +Rule Iceland 1917 only - Oct 21 1:00 0 - +Rule Iceland 1918 only - Nov 16 1:00 0 - +Rule Iceland 1939 only - Apr 29 23:00 1:00 S +Rule Iceland 1939 only - Nov 29 2:00 0 - +Rule Iceland 1940 only - Feb 25 2:00 1:00 S +Rule Iceland 1940 only - Nov 3 2:00 0 - +Rule Iceland 1941 only - Mar 2 1:00s 1:00 S +Rule Iceland 1941 only - Nov 2 1:00s 0 - +Rule Iceland 1942 only - Mar 8 1:00s 1:00 S +Rule Iceland 1942 only - Oct 25 1:00s 0 - +# 1943-1946 - first Sunday in March until first Sunday in winter +Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S +Rule Iceland 1943 1948 - Oct Sun>=22 1:00s 0 - +# 1947-1967 - first Sunday in April until first Sunday in winter +Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S +# 1949 Oct transition delayed by 1 week +Rule Iceland 1949 only - Oct 30 1:00s 0 - +Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 - +Rule Iceland 1967 only - Oct 29 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Reykjavik -1:27:24 - LMT 1837 + -1:27:48 - RMT 1908 # Reykjavik Mean Time? + -1:00 Iceland IS%sT 1968 Apr 7 1:00s + 0:00 - GMT + +# Italy +# +# From Paul Eggert (2001-03-06): +# Sicily and Sardinia each had their own time zones from 1866 to 1893, +# called Palermo Time (+00:53:28) and Cagliari Time (+00:36:32). +# During World War II, German-controlled Italy used German time. +# But these events all occurred before the 1970 cutoff, +# so record only the time in Rome. +# +# From Paul Eggert (2006-03-22): +# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and +# F. Pollastri +# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html"> +# Day-light Saving Time in Italy (2006-02-03) +# </a> +# (`FP' below), taken from an Italian National Electrotechnical Institute +# publication. When the three sources disagree, guess who's right, as follows: +# +# year FP Shanks&P. (S) Whitman (W) Go with: +# 1916 06-03 06-03 24:00 06-03 00:00 FP & W +# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s +# 1917 04-01 03-31 24:00 03-31 00:00 FP & S +# 09-30 09-29 24:00 09-30 01:00 FP & W +# 1918 03-09 03-09 24:00 03-09 00:00 FP & S +# 10-06 10-05 24:00 10-06 01:00 FP & W +# 1919 03-01 03-01 24:00 03-01 00:00 FP & S +# 10-04 10-04 24:00 10-04 01:00 FP; guess 24:00s +# 1920 03-20 03-20 24:00 03-20 00:00 FP & S +# 09-18 09-18 24:00 10-01 01:00 FP; guess 24:00s +# 1944 04-02 04-03 02:00 S (see C-Eur) +# 09-16 10-02 03:00 FP; guess 24:00s +# 1945 09-14 09-16 24:00 FP; guess 24:00s +# 1970 05-21 05-31 00:00 S +# 09-20 09-27 00:00 S +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Italy 1916 only - Jun 3 0:00s 1:00 S +Rule Italy 1916 only - Oct 1 0:00s 0 - +Rule Italy 1917 only - Apr 1 0:00s 1:00 S +Rule Italy 1917 only - Sep 30 0:00s 0 - +Rule Italy 1918 only - Mar 10 0:00s 1:00 S +Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 - +Rule Italy 1919 only - Mar 2 0:00s 1:00 S +Rule Italy 1920 only - Mar 21 0:00s 1:00 S +Rule Italy 1920 only - Sep 19 0:00s 0 - +Rule Italy 1940 only - Jun 15 0:00s 1:00 S +Rule Italy 1944 only - Sep 17 0:00s 0 - +Rule Italy 1945 only - Apr 2 2:00 1:00 S +Rule Italy 1945 only - Sep 15 0:00s 0 - +Rule Italy 1946 only - Mar 17 2:00s 1:00 S +Rule Italy 1946 only - Oct 6 2:00s 0 - +Rule Italy 1947 only - Mar 16 0:00s 1:00 S +Rule Italy 1947 only - Oct 5 0:00s 0 - +Rule Italy 1948 only - Feb 29 2:00s 1:00 S +Rule Italy 1948 only - Oct 3 2:00s 0 - +Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S +Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 - +Rule Italy 1969 only - Jun 1 0:00 1:00 S +Rule Italy 1970 only - May 31 0:00 1:00 S +Rule Italy 1970 only - Sep lastSun 0:00 0 - +Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S +Rule Italy 1971 only - Sep lastSun 1:00 0 - +Rule Italy 1972 only - Oct 1 0:00 0 - +Rule Italy 1973 only - Jun 3 0:00 1:00 S +Rule Italy 1973 1974 - Sep lastSun 0:00 0 - +Rule Italy 1974 only - May 26 0:00 1:00 S +Rule Italy 1975 only - Jun 1 0:00s 1:00 S +Rule Italy 1975 1977 - Sep lastSun 0:00s 0 - +Rule Italy 1976 only - May 30 0:00s 1:00 S +Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S +Rule Italy 1978 only - Oct 1 0:00s 0 - +Rule Italy 1979 only - Sep 30 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22 + 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1944 Jul + 1:00 Italy CE%sT 1980 + 1:00 EU CE%sT + +Link Europe/Rome Europe/Vatican +Link Europe/Rome Europe/San_Marino + +# Latvia + +# From Liene Kanepe (1998-09-17): + +# I asked about this matter Scientific Secretary of the Institute of Astronomy +# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the +# correct data in juridical acts and I found some juridical documents about +# changes in the counting of time in Latvia from 1981.... +# +# Act No.35 of the Council of Ministers of Latvian SSR of 1981-01-22 ... +# according to the Act No.925 of the Council of Ministers of USSR of 1980-10-24 +# ...: all year round the time of 2nd time zone + 1 hour, in addition turning +# the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00) +# and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00). +# +# Act No.592 of the Council of Ministers of Latvian SSR of 1984-09-24 ... +# according to the Act No.967 of the Council of Ministers of USSR of 1984-09-13 +# ...: all year round the time of 2nd time zone + 1 hour, in addition turning +# the hands of the clock 1 hour forward on the last Sunday of March at 02:00 +# (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of +# September at 03:00 (GMT 23:00 on the previous day). +# +# Act No.81 of the Council of Ministers of Latvian SSR of 1989-03-22 ... +# according to the Act No.227 of the Council of Ministers of USSR of 1989-03-14 +# ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR, +# Estonian SSR and Kaliningrad region of Russian Federation all year round the +# time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia +# transition to summer time is performed on the last Sunday of March at 02:00 +# (GMT 00:00), turning the hands of the clock 1 hour forward. The end of +# daylight saving time is performed on the last Sunday of September at 03:00 +# (GMT 00:00), turning the hands of the clock 1 hour backward. Exception is +# 1989-03-26, when we must not turn the hands of the clock.... +# +# The Regulations of the Cabinet of Ministers of the Republic of Latvia of +# 1997-01-21 on transition to Summer time ... established the same order of +# daylight savings time settings as in the States of the European Union. + +# From Andrei Ivanov (2000-03-06): +# This year Latvia will not switch to Daylight Savings Time (as specified in +# <a href="http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm"> +# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of +# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only). + +# <a href="http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html"> +# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow: +# </a> +# The Latvian government on 2 January decided that the country will +# institute daylight-saving time this spring, LETA reported. +# Last February the three Baltic states decided not to turn back their +# clocks one hour in the spring.... +# Minister of Economy Aigars Kalvitis noted that Latvia had too few +# daylight hours and thus decided to comply with a draft European +# Commission directive that provides for instituting daylight-saving +# time in EU countries between 2002 and 2006. The Latvian government +# urged Lithuania and Estonia to adopt a similar time policy, but it +# appears that they will not do so.... + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S +Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Riga 1:36:24 - LMT 1880 + 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time + 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer + 1:36:24 - RMT 1919 Apr 1 2:00 + 1:36:24 1:00 LST 1919 May 22 3:00 + 1:36:24 - RMT 1926 May 11 + 2:00 - EET 1940 Aug 5 + 3:00 - MSK 1941 Jul + 1:00 C-Eur CE%sT 1944 Oct 13 + 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s + 2:00 1:00 EEST 1989 Sep lastSun 2:00s + 2:00 Latvia EE%sT 1997 Jan 21 + 2:00 EU EE%sT 2000 Feb 29 + 2:00 - EET 2001 Jan 2 + 2:00 EU EE%sT + +# Liechtenstein +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun + 1:00 - CET 1981 + 1:00 EU CE%sT + +# Lithuania + +# From Paul Eggert (1996-11-22): +# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is +# known to be wrong about Estonia and Latvia, assume it's wrong here too. + +# From Marius Gedminas (1998-08-07): +# I would like to inform that in this year Lithuanian time zone +# (Europe/Vilnius) was changed. + +# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29), +# via Steffen Thorsen: +# Lithuania has shifted back to the second time zone (GMT plus two hours) +# to be valid here starting from October 31, +# as decided by the national government on Wednesday.... +# The Lithuanian government also announced plans to consider a +# motion to give up shifting to summer time in spring, as it was +# already done by Estonia. + +# From the <a href="http://www.tourism.lt/informa/ff.htm"> +# Fact File, Lithuanian State Department of Tourism +# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving. + +# From a user via Klaus Marten (2003-02-07): +# As a candidate for membership of the European Union, Lithuania will +# observe Summer Time in 2003, changing its clocks at the times laid +# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its +# neighbour Latvia). The text of the Lithuanian government Order of +# 7.XI.02 to this effect can be found at +# http://www.lrvk.lt/nut/11/n1749.htm + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Vilnius 1:41:16 - LMT 1880 + 1:24:00 - WMT 1917 # Warsaw Mean Time + 1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time + 1:00 - CET 1920 Jul 12 + 2:00 - EET 1920 Oct 9 + 1:00 - CET 1940 Aug 3 + 3:00 - MSK 1941 Jun 24 + 1:00 C-Eur CE%sT 1944 Aug + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 C-Eur EE%sT 1998 + 2:00 - EET 1998 Mar 29 1:00u + 1:00 EU CE%sT 1999 Oct 31 1:00u + 2:00 - EET 2003 Jan 1 + 2:00 EU EE%sT + +# Luxembourg +# Whitman disagrees with most of these dates in minor ways; +# go with Shanks & Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Lux 1916 only - May 14 23:00 1:00 S +Rule Lux 1916 only - Oct 1 1:00 0 - +Rule Lux 1917 only - Apr 28 23:00 1:00 S +Rule Lux 1917 only - Sep 17 1:00 0 - +Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S +Rule Lux 1918 only - Sep Mon>=15 2:00s 0 - +Rule Lux 1919 only - Mar 1 23:00 1:00 S +Rule Lux 1919 only - Oct 5 3:00 0 - +Rule Lux 1920 only - Feb 14 23:00 1:00 S +Rule Lux 1920 only - Oct 24 2:00 0 - +Rule Lux 1921 only - Mar 14 23:00 1:00 S +Rule Lux 1921 only - Oct 26 2:00 0 - +Rule Lux 1922 only - Mar 25 23:00 1:00 S +Rule Lux 1922 only - Oct Sun>=2 1:00 0 - +Rule Lux 1923 only - Apr 21 23:00 1:00 S +Rule Lux 1923 only - Oct Sun>=2 2:00 0 - +Rule Lux 1924 only - Mar 29 23:00 1:00 S +Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 - +Rule Lux 1925 only - Apr 5 23:00 1:00 S +Rule Lux 1926 only - Apr 17 23:00 1:00 S +Rule Lux 1927 only - Apr 9 23:00 1:00 S +Rule Lux 1928 only - Apr 14 23:00 1:00 S +Rule Lux 1929 only - Apr 20 23:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun + 1:00 Lux CE%sT 1918 Nov 25 + 0:00 Lux WE%sT 1929 Oct 6 2:00s + 0:00 Belgium WE%sT 1940 May 14 3:00 + 1:00 C-Eur WE%sT 1944 Sep 18 3:00 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT + +# Macedonia +# see Serbia + +# Malta +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Malta 1973 only - Mar 31 0:00s 1:00 S +Rule Malta 1973 only - Sep 29 0:00s 0 - +Rule Malta 1974 only - Apr 21 0:00s 1:00 S +Rule Malta 1974 only - Sep 16 0:00s 0 - +Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S +Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 - +Rule Malta 1980 only - Mar 31 2:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 Italy CE%sT 1973 Mar 31 + 1:00 Malta CE%sT 1981 + 1:00 EU CE%sT + +# Moldova + +# From Paul Eggert (2006-03-22): +# A previous version of this database followed Shanks & Pottenger, who write +# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00. +# However, this is most likely an error, as Moldova declared independence +# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree). +# In early 1992 there was large-scale interethnic violence in the area +# and it's possible that some Russophones continued to observe Moscow time. +# But [two people] separately reported via +# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau. +# The Tiraspol entry has therefore been removed for now. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Chisinau 1:55:20 - LMT 1880 + 1:55 - CMT 1918 Feb 15 # Chisinau MT + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1940 Aug 15 + 2:00 1:00 EEST 1941 Jul 17 + 1:00 C-Eur CE%sT 1944 Aug 24 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 May 6 + 2:00 - EET 1991 + 2:00 Russia EE%sT 1992 + 2:00 E-Eur EE%sT 1997 +# See Romania commentary for the guessed 1997 transition to EU rules. + 2:00 EU EE%sT + +# Monaco +# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's +# more precise 0:09:21. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT + +# Montenegro +# see Serbia + +# Netherlands + +# Howse writes that the Netherlands' railways used GMT between 1892 and 1940, +# but for other purposes the Netherlands used Amsterdam mean time. + +# However, Robert H. van Gent writes (2001-04-01): +# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00 +# Amsterdam mean time) onwards, the whole of the Netherlands (including +# the Dutch railways) was required by law to observe Amsterdam mean time +# (19 minutes 32.13 seconds ahead of GMT). This had already been the +# common practice (except for the railways) for many decades but it was +# not until 1909 when the Dutch government finally defined this by law. +# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and +# was generally known as Dutch Time ("Nederlandse Tijd"). +# +# (2001-04-08): +# 1892-05-01 was the date when the Dutch railways were by law required to +# observe GMT while the remainder of the Netherlands adhered to the common +# practice of following Amsterdam mean time. +# +# (2001-04-09): +# In 1835 the authorities of the province of North Holland requested the +# municipal authorities of the towns and cities in the province to observe +# Amsterdam mean time but I do not know in how many cases this request was +# actually followed. +# +# From 1852 onwards the Dutch telegraph offices were by law required to +# observe Amsterdam mean time. As the time signals from the observatory of +# Leiden were also distributed by the telegraph system, I assume that most +# places linked up with the telegraph (and railway) system automatically +# adopted Amsterdam mean time. +# +# Although the early Dutch railway companies initially observed a variety +# of times, most of them had adopted Amsterdam mean time by 1858 but it +# was not until 1866 when they were all required by law to observe +# Amsterdam mean time. + +# The data before 1945 are taken from +# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time +Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time +Rule Neth 1917 only - Apr 16 2:00s 1:00 NST +Rule Neth 1917 only - Sep 17 2:00s 0 AMT +Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST +Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT +Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT +Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST +Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST +# From 1926 through 1939 DST began 05-15, except that it was delayed by a week +# in years when 05-15 fell in the Pentecost weekend. +Rule Neth 1926 1931 - May 15 2:00s 1:00 NST +Rule Neth 1932 only - May 22 2:00s 1:00 NST +Rule Neth 1933 1936 - May 15 2:00s 1:00 NST +Rule Neth 1937 only - May 22 2:00s 1:00 NST +Rule Neth 1937 only - Jul 1 0:00 1:00 S +Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 - +Rule Neth 1938 1939 - May 15 2:00s 1:00 S +Rule Neth 1945 only - Apr 2 2:00s 1:00 S +Rule Neth 1945 only - Sep 16 2:00s 0 - +# +# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted +# below because the current format requires GMTOFF to be an integer. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Amsterdam 0:19:32 - LMT 1835 + 0:19:32 Neth %s 1937 Jul 1 + 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Neth CE%sT 1977 + 1:00 EU CE%sT + +# Norway +# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks & +# Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Norway 1916 only - May 22 1:00 1:00 S +Rule Norway 1916 only - Sep 30 0:00 0 - +Rule Norway 1945 only - Apr 2 2:00s 1:00 S +Rule Norway 1945 only - Oct 1 2:00s 0 - +Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S +Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 - +Rule Norway 1965 only - Apr 25 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1 + 1:00 Norway CE%sT 1940 Aug 10 23:00 + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Norway CE%sT 1980 + 1:00 EU CE%sT + +# Svalbard & Jan Mayen + +# From Steffen Thorsen (2001-05-01): +# Although I could not find it explicitly, it seems that Jan Mayen and +# Svalbard have been using the same time as Norway at least since the +# time they were declared as parts of Norway. Svalbard was declared +# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan +# Mayen by law of 1930-02-27 no 2, section 2. (From +# http://www.lovdata.no/all/nl-19250717-011.html and +# http://www.lovdata.no/all/nl-19300227-002.html). The law/regulation +# for normal/standard time in Norway is from 1894-06-29 no 1 (came +# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a +# part of this law since 1925/1930. (From +# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been +# able to find if Jan Mayen used a different time zone (e.g. -0100) +# before 1930. Jan Mayen has only been "inhabitated" since 1921 by +# Norwegian meteorologists and maybe used the same time as Norway ever +# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since +# before 1895, and therefore probably changed the local time somewhere +# between 1895 and 1925 (inclusive). + +# From Paul Eggert (2001-05-01): +# +# Actually, Jan Mayen was never occupied by Germany during World War II, +# so it must have diverged from Oslo time during the war, as Oslo was +# keeping Berlin time. +# +# <http://home.no.net/janmayen/history.htm> says that the meteorologists +# burned down their station in 1940 and left the island, but returned in +# 1941 with a small Norwegian garrison and continued operations despite +# frequent air ttacks from Germans. In 1943 the Americans established a +# radiolocating station on the island, called "Atlantic City". Possibly +# the UTC offset changed during the war, but I think it unlikely that +# Jan Mayen used German daylight-saving rules. +# +# Svalbard is more complicated, as it was raided in August 1941 by an +# Allied party that evacuated the civilian population to England (says +# <http://www.bartleby.com/65/sv/Svalbard.html>). The Svalbard FAQ +# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were +# expelled on 1942-05-14. However, small parties of Germans did return, +# and according to Wilhelm Dege's book "War North of 80" (1954) +# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html> +# the German armed forces at the Svalbard weather station code-named +# Haudegen did not surrender to the Allies until September 1945. +# +# All these events predate our cutoff date of 1970. Unless we can +# come up with more definitive info about the timekeeping during the +# war years it's probably best just do do the following for now: +Link Europe/Oslo Arctic/Longyearbyen + +# Poland +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Poland 1918 1919 - Sep 16 2:00s 0 - +Rule Poland 1919 only - Apr 15 2:00s 1:00 S +Rule Poland 1944 only - Apr 3 2:00s 1:00 S +# Whitman gives 1944 Nov 30; go with Shanks & Pottenger. +Rule Poland 1944 only - Oct 4 2:00 0 - +# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger. +Rule Poland 1945 only - Apr 29 0:00 1:00 S +Rule Poland 1945 only - Nov 1 0:00 0 - +# For 1946 on the source is Kazimierz Borkowski, +# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U., +# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1> +# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference. +# He also gives these further references: +# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm> +# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf> +Rule Poland 1946 only - Apr 14 0:00s 1:00 S +Rule Poland 1946 only - Oct 7 2:00s 0 - +Rule Poland 1947 only - May 4 2:00s 1:00 S +Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Poland 1948 only - Apr 18 2:00s 1:00 S +Rule Poland 1949 only - Apr 10 2:00s 1:00 S +Rule Poland 1957 only - Jun 2 1:00s 1:00 S +Rule Poland 1957 1958 - Sep lastSun 1:00s 0 - +Rule Poland 1958 only - Mar 30 1:00s 1:00 S +Rule Poland 1959 only - May 31 1:00s 1:00 S +Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 - +Rule Poland 1960 only - Apr 3 1:00s 1:00 S +Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S +Rule Poland 1962 1964 - Sep lastSun 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Warsaw 1:24:00 - LMT 1880 + 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time + 1:00 C-Eur CE%sT 1918 Sep 16 3:00 + 2:00 Poland EE%sT 1922 Jun + 1:00 Poland CE%sT 1940 Jun 23 2:00 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 Poland CE%sT 1977 + 1:00 W-Eur CE%sT 1988 + 1:00 EU CE%sT + +# Portugal +# +# From Rui Pedro Salgueiro (1992-11-12): +# Portugal has recently (September, 27) changed timezone +# (from WET to MET or CET) to harmonize with EEC. +# +# Martin Bruckmann (1996-02-29) reports via Peter Ilieve +# that Portugal is reverting to 0:00 by not moving its clocks this spring. +# The new Prime Minister was fed up with getting up in the dark in the winter. +# +# From Paul Eggert (1996-11-12): +# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions +# at 02:00u, not 01:00u. Assume that these are typos. +# IATA SSIM (1991/1992) reports that the Azores were at -1:00. +# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00. +# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal +# harmonized with the EU), and that they stayed +0:00 that winter. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not +# done every year, depending on what Spain did, because of railroad schedules. +# Go with Shanks & Pottenger. +Rule Port 1916 only - Jun 17 23:00 1:00 S +# Whitman gives 1916 Oct 31; go with Shanks & Pottenger. +Rule Port 1916 only - Nov 1 1:00 0 - +Rule Port 1917 only - Feb 28 23:00s 1:00 S +Rule Port 1917 1921 - Oct 14 23:00s 0 - +Rule Port 1918 only - Mar 1 23:00s 1:00 S +Rule Port 1919 only - Feb 28 23:00s 1:00 S +Rule Port 1920 only - Feb 29 23:00s 1:00 S +Rule Port 1921 only - Feb 28 23:00s 1:00 S +Rule Port 1924 only - Apr 16 23:00s 1:00 S +Rule Port 1924 only - Oct 14 23:00s 0 - +Rule Port 1926 only - Apr 17 23:00s 1:00 S +Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Port 1927 only - Apr 9 23:00s 1:00 S +Rule Port 1928 only - Apr 14 23:00s 1:00 S +Rule Port 1929 only - Apr 20 23:00s 1:00 S +Rule Port 1931 only - Apr 18 23:00s 1:00 S +# Whitman gives 1931 Oct 8; go with Shanks & Pottenger. +Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 - +Rule Port 1932 only - Apr 2 23:00s 1:00 S +Rule Port 1934 only - Apr 7 23:00s 1:00 S +# Whitman gives 1934 Oct 5; go with Shanks & Pottenger. +Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 - +# Shanks & Pottenger give 1935 Apr 30; go with Whitman. +Rule Port 1935 only - Mar 30 23:00s 1:00 S +Rule Port 1936 only - Apr 18 23:00s 1:00 S +# Whitman gives 1937 Apr 2; go with Shanks & Pottenger. +Rule Port 1937 only - Apr 3 23:00s 1:00 S +Rule Port 1938 only - Mar 26 23:00s 1:00 S +Rule Port 1939 only - Apr 15 23:00s 1:00 S +# Whitman gives 1939 Oct 7; go with Shanks & Pottenger. +Rule Port 1939 only - Nov 18 23:00s 0 - +Rule Port 1940 only - Feb 24 23:00s 1:00 S +# Shanks & Pottenger give 1940 Oct 7; go with Whitman. +Rule Port 1940 1941 - Oct 5 23:00s 0 - +Rule Port 1941 only - Apr 5 23:00s 1:00 S +Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S +Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer +Rule Port 1942 only - Aug 15 22:00s 1:00 S +Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 - +Rule Port 1943 only - Apr 17 22:00s 2:00 M +Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S +Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M +Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S +Rule Port 1946 only - Oct Sat>=1 23:00s 0 - +Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 - +# Shanks & Pottenger say DST was observed in 1950; go with Whitman. +# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger. +Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 - +Rule Port 1977 only - Mar 27 0:00s 1:00 S +Rule Port 1977 only - Sep 25 0:00s 0 - +Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S +Rule Port 1978 only - Oct 1 0:00s 0 - +Rule Port 1979 1982 - Sep lastSun 1:00s 0 - +Rule Port 1980 only - Mar lastSun 0:00s 1:00 S +Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S +Rule Port 1983 only - Mar lastSun 2:00s 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24; +# Willett says 1912-01-01. Go with Willett. +Zone Europe/Lisbon -0:36:32 - LMT 1884 + -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time + 0:00 Port WE%sT 1966 Apr 3 2:00 + 1:00 - CET 1976 Sep 26 1:00 + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 W-Eur WE%sT 1992 Sep 27 1:00s + 1:00 EU CE%sT 1996 Mar 31 1:00u + 0:00 EU WE%sT +Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada + -1:54:32 - HMT 1911 May 24 # Horta Mean Time + -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time + -1:00 Port AZO%sT 1983 Sep 25 1:00s + -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s + 0:00 EU WE%sT 1993 Mar 28 1:00u + -1:00 EU AZO%sT +Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal + -1:07:36 - FMT 1911 May 24 # Funchal Mean Time + -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 EU WE%sT + +# Romania +# +# From Paul Eggert (1999-10-07): +# <a href="http://www.nineoclock.ro/POL/1778pol.html"> +# Nine O'clock</a> (1998-10-23) reports that the switch occurred at +# 04:00 local time in fall 1998. For lack of better info, +# assume that Romania and Moldova switched to EU rules in 1997, +# the same year as Bulgaria. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Romania 1932 only - May 21 0:00s 1:00 S +Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 - +Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S +Rule Romania 1979 only - May 27 0:00 1:00 S +Rule Romania 1979 only - Sep lastSun 0:00 0 - +Rule Romania 1980 only - Apr 5 23:00 1:00 S +Rule Romania 1980 only - Sep lastSun 1:00 0 - +Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S +Rule Romania 1991 1993 - Sep lastSun 0:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1981 Mar 29 2:00s + 2:00 C-Eur EE%sT 1991 + 2:00 Romania EE%sT 1994 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT + +# Russia + +# From Paul Eggert (2006-03-22): +# Except for Moscow after 1919-07-01, I invented the time zone abbreviations. +# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991, +# are from Andrey A. Chernov. The rest is from Shanks & Pottenger, +# except we follow Chernov's report that 1992 DST transitions were Sat +# 23:00, not Sun 02:00s. +# +# From Stanislaw A. Kuzikowski (1994-06-29): +# But now it is some months since Novosibirsk is 3 hours ahead of Moscow! +# I do not know why they have decided to make this change; +# as far as I remember it was done exactly during winter->summer switching +# so we (Novosibirsk) simply did not switch. +# +# From Andrey A. Chernov (1996-10-04): +# `MSK' and `MSD' were born and used initially on Moscow computers with +# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group).... +# The next step was the UUCP network, the Relcom predecessor +# (used mainly for mail), and MSK/MSD was actively used there. +# +# From Chris Carrier (1996-10-30): +# According to a friend of mine who rode the Trans-Siberian Railroad from +# Moscow to Irkutsk in 1995, public air and rail transport in Russia ... +# still follows Moscow time, no matter where in Russia it is located. +# +# For Grozny, Chechnya, we have the following story from +# John Daniszewski, "Scavengers in the Rubble", Los Angeles Times (2001-02-07): +# News--often false--is spread by word of mouth. A rumor that it was +# time to move the clocks back put this whole city out of sync with +# the rest of Russia for two weeks--even soldiers stationed here began +# enforcing curfew at the wrong time. +# +# From Gwillim Law (2001-06-05): +# There's considerable evidence that Sakhalin Island used to be in +# UTC+11, and has changed to UTC+10, in this decade. I start with the +# SSIM, which listed Yuzhno-Sakhalinsk in zone RU10 along with Magadan +# until February 1997, and then in RU9 with Khabarovsk and Vladivostok +# since September 1997.... Although the Kuril Islands are +# administratively part of Sakhalin oblast', they appear to have +# remained on UTC+11 along with Magadan. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Kaliningradskaya oblast'. +Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 + 2:00 Poland CE%sT 1946 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Adygeya, Arkhangel'skaya oblast', +# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast', +# Vologodskaya oblast', Voronezhskaya oblast', +# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya, +# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya, +# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya, +# Respublika Kareliya, Respublika Komi, +# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast', +# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El, +# Respublika Mordoviya, Moskva, Moskovskaya oblast', +# Murmanskaya oblast', Nenetskij avtonomnyj okrug, +# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast', +# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast', +# Ryazanskaya oblast', Sankt-Peterburg, +# Respublika Severnaya Osetiya, Smolenskaya oblast', +# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan, +# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast', +# Chechenskaya Respublika, Chuvashskaya oblast', +# Yaroslavskaya oblast' +Zone Europe/Moscow 2:30:20 - LMT 1880 + 2:30 - MMT 1916 Jul 3 # Moscow Mean Time + 2:30:48 Russia %s 1919 Jul 1 2:00 + 3:00 Russia MSK/MSD 1922 Oct + 2:00 - EET 1930 Jun 21 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT 1992 Jan 19 2:00s + 3:00 Russia MSK/MSD +# +# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast', +# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400 +# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the +# others? But we have no data. +Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3 + 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time + 3:00 - STAT 1930 Jun 21 # Stalingrad Time + 4:00 - STAT 1961 Nov 11 + 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T + 3:00 Russia VOL%sT 1991 Mar 31 2:00s + 4:00 - VOLT 1992 Mar 29 2:00s + 3:00 Russia VOL%sT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Samarskaya oblast', Udmyrtskaya respublika +Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00 + 3:00 - SAMT 1930 Jun 21 + 4:00 - SAMT 1935 Jan 27 + 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev + 3:00 Russia KUY%sT 1991 Mar 31 2:00s + 2:00 Russia KUY%sT 1991 Sep 29 2:00s + 3:00 - KUYT 1991 Oct 20 3:00 + 4:00 Russia SAM%sT # Samara Time +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug, +# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast', +# Sverdlovskaya oblast', Tyumenskaya oblast', +# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast', +# Yamalo-Nenetskij avtonomnyj okrug. +Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00 + 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time + 5:00 Russia SVE%sT 1991 Mar 31 2:00s + 4:00 Russia SVE%sT 1992 Jan 19 2:00s + 5:00 Russia YEK%sT # Yekaterinburg Time +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Altaj, Altajskij kraj, Omskaya oblast'. +Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14 + 5:00 - OMST 1930 Jun 21 # Omsk TIme + 6:00 Russia OMS%sT 1991 Mar 31 2:00s + 5:00 Russia OMS%sT 1992 Jan 19 2:00s + 6:00 Russia OMS%sT +# +# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's +# not clear when it switched from +7 to +6. +# Novosibirskaya oblast', Tomskaya oblast'. +Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00 + 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time + 7:00 Russia NOV%sT 1991 Mar 31 2:00s + 6:00 Russia NOV%sT 1992 Jan 19 2:00s + 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P. + 6:00 Russia NOV%sT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Kemerovskaya oblast', Krasnoyarskij kraj, +# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug, +# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug. +Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6 + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Respublika Buryatiya, Irkutskaya oblast', +# Ust'-Ordynskij Buryatskij avtonomnyj okrug. +Zone Asia/Irkutsk 6:57:20 - LMT 1880 + 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time + 7:00 - IRKT 1930 Jun 21 # Irkutsk Time + 8:00 Russia IRK%sT 1991 Mar 31 2:00s + 7:00 Russia IRK%sT 1992 Jan 19 2:00s + 8:00 Russia IRK%sT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast', +# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'. +# The Sakha districts are: Aldanskij, Amginskij, Anabarskij, +# Bulunskij, Verkhnekolymskij, Verkhnevilyujskij, Vilyujskij, Gornyj, +# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij, +# Namskij, Nyurbinskij, Olenekskij, Olekminskij, Srednekolymskij, +# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij, +# Churapchinskij, Eveno-Bytantajskij. +Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15 + 8:00 - YAKT 1930 Jun 21 # Yakutsk Time + 9:00 Russia YAK%sT 1991 Mar 31 2:00s + 8:00 Russia YAK%sT 1992 Jan 19 2:00s + 9:00 Russia YAK%sT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj, +# [parts of] Respublika Sakha (Yakutiya). +# The Sakha districts are: Verkhoyanskij, Tomponskij, Ust'-Majskij, +# Ust'-Yanskij. +Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15 + 9:00 - VLAT 1930 Jun 21 # Vladivostok Time + 10:00 Russia VLA%sT 1991 Mar 31 2:00s + 9:00 Russia VLA%sST 1992 Jan 19 2:00s + 10:00 Russia VLA%sT +# +# Sakhalinskaya oblast'. +# The Zone name should be Yuzhno-Sakhalinsk, but that's too long. +Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23 + 9:00 - CJT 1938 + 9:00 - JST 1945 Aug 25 + 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T. + 10:00 Russia SAK%sT 1992 Jan 19 2:00s + 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s + 10:00 Russia SAK%sT +# +# From Oscar van Vlijmen (2003-10-18): [This region consists of] +# Magadanskaya oblast', Respublika Sakha (Yakutiya). +# Probably also: Kuril Islands. +# The Sakha districts are: Abyjskij, Allaikhovskij, Momskij, +# Nizhnekolymskij, Ojmyakonskij. +Zone Asia/Magadan 10:03:12 - LMT 1924 May 2 + 10:00 - MAGT 1930 Jun 21 # Magadan Time + 11:00 Russia MAG%sT 1991 Mar 31 2:00s + 10:00 Russia MAG%sT 1992 Jan 19 2:00s + 11:00 Russia MAG%sT +# +# From Oscar van Vlijmen (2001-08-25): [This region consists of] +# Kamchatskaya oblast', Koryakskij avtonomnyj okrug. +# +# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long. +Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10 + 11:00 - PETT 1930 Jun 21 # P-K Time + 12:00 Russia PET%sT 1991 Mar 31 2:00s + 11:00 Russia PET%sT 1992 Jan 19 2:00s + 12:00 Russia PET%sT +# +# Chukotskij avtonomnyj okrug +Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 + 12:00 - ANAT 1930 Jun 21 # Anadyr Time + 13:00 Russia ANA%sT 1982 Apr 1 0:00s + 12:00 Russia ANA%sT 1991 Mar 31 2:00s + 11:00 Russia ANA%sT 1992 Jan 19 2:00s + 12:00 Russia ANA%sT + +# Serbia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Belgrade 1:22:00 - LMT 1884 + 1:00 - CET 1941 Apr 18 23:00 + 1:00 C-Eur CE%sT 1945 May 8 2:00s + 1:00 1:00 CEST 1945 Sep 16 2:00s +# Metod Kozelj reports that the legal date of +# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time. +# Shanks & Pottenger don't give as much detail, so go with Kozelj. + 1:00 - CET 1982 Nov 27 + 1:00 EU CE%sT +Link Europe/Belgrade Europe/Ljubljana # Slovenia +Link Europe/Belgrade Europe/Podgorica # Montenegro +Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina +Link Europe/Belgrade Europe/Skopje # Macedonia +Link Europe/Belgrade Europe/Zagreb # Croatia + +# Slovakia +Link Europe/Prague Europe/Bratislava + +# Slovenia +# see Serbia + +# Spain +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; +# go with Shanks & Pottenger. +Rule Spain 1917 only - May 5 23:00s 1:00 S +Rule Spain 1917 1919 - Oct 6 23:00s 0 - +Rule Spain 1918 only - Apr 15 23:00s 1:00 S +Rule Spain 1919 only - Apr 5 23:00s 1:00 S +# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger. +Rule Spain 1924 only - Apr 16 23:00s 1:00 S +# Whitman gives 1924 Oct 14; go with Shanks & Pottenger. +Rule Spain 1924 only - Oct 4 23:00s 0 - +Rule Spain 1926 only - Apr 17 23:00s 1:00 S +# Whitman says no DST in 1929; go with Shanks & Pottenger. +Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Spain 1927 only - Apr 9 23:00s 1:00 S +Rule Spain 1928 only - Apr 14 23:00s 1:00 S +Rule Spain 1929 only - Apr 20 23:00s 1:00 S +# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; +# go with Shanks & Pottenger. +Rule Spain 1937 only - May 22 23:00s 1:00 S +Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 - +Rule Spain 1938 only - Mar 22 23:00s 1:00 S +Rule Spain 1939 only - Apr 15 23:00s 1:00 S +Rule Spain 1940 only - Mar 16 23:00s 1:00 S +# Whitman says no DST 1942-1945; go with Shanks & Pottenger. +Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer +Rule Spain 1942 only - Sep 1 22:00s 1:00 S +Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M +Rule Spain 1943 only - Oct 3 22:00s 1:00 S +Rule Spain 1944 only - Oct 10 22:00s 1:00 S +Rule Spain 1945 only - Sep 30 1:00 1:00 S +Rule Spain 1946 only - Sep 30 0:00 0 - +Rule Spain 1949 only - Apr 30 23:00 1:00 S +Rule Spain 1949 only - Sep 30 1:00 0 - +Rule Spain 1974 1975 - Apr Sat>=13 23:00 1:00 S +Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 - +Rule Spain 1976 only - Mar 27 23:00 1:00 S +Rule Spain 1976 1977 - Sep lastSun 1:00 0 - +Rule Spain 1977 1978 - Apr 2 23:00 1:00 S +Rule Spain 1978 only - Oct 1 1:00 0 - +# The following rules are copied from Morocco from 1967 through 1978. +Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S +Rule SpainAfrica 1967 only - Oct 1 0:00 0 - +Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S +Rule SpainAfrica 1974 only - Sep 1 0:00 0 - +Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S +Rule SpainAfrica 1976 only - Aug 1 0:00 0 - +Rule SpainAfrica 1977 only - Sep 28 0:00 0 - +Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S +Rule SpainAfrica 1978 only - Aug 4 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s + 0:00 Spain WE%sT 1946 Sep 30 + 1:00 Spain CE%sT 1979 + 1:00 EU CE%sT +Zone Africa/Ceuta -0:21:16 - LMT 1901 + 0:00 - WET 1918 May 6 23:00 + 0:00 1:00 WEST 1918 Oct 7 23:00 + 0:00 - WET 1924 + 0:00 Spain WE%sT 1929 + 0:00 SpainAfrica WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 1:00 EU CE%sT +Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. + -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time + 0:00 - WET 1980 Apr 6 0:00s + 0:00 1:00 WEST 1980 Sep 28 0:00s + 0:00 EU WE%sT +# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u. +# Ignore this for now, as the Canaries are part of the EU. + +# Sweden + +# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger: +# +# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879: +# From the beginning of 1879 (that is 01-01 00:00) the time for all +# places in the country is "the mean solar time for the meridian at +# three degrees, or twelve minutes of time, to the west of the +# meridian of the Observatory of Stockholm". The law is dated 1878-05-31. +# +# The observatory at that time had the meridian 18 degrees 03' 30" +# eastern longitude = 01:12:14 in time. Less 12 minutes gives the +# national standard time as 01:00:14 ahead of GMT.... +# +# About the beginning of CET in Sweden. The lawtext ("Svensk +# forfattningssamling 1899, no 44") states, that "from the beginning +# of 1900... ... the same as the mean solar time for the meridian at +# the distance of one hour of time from the meridian of the English +# observatory at Greenwich, or at 12 minutes 14 seconds to the west +# from the meridian of the Observatory of Stockholm". The law is dated +# 1899-06-16. In short: At 1900-01-01 00:00:00 the new standard time +# in Sweden is 01:00:00 ahead of GMT. +# +# 1916: The lawtext ("Svensk forfattningssamling 1916, no 124") states +# that "1916-05-15 is considered to begin one hour earlier". It is +# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00.... +# Further the law says, that "1916-09-30 is considered to end one hour later". +# +# The laws regulating [DST] are available on the site of the Swedish +# Parliament beginning with 1985 - the laws regulating 1980/1984 are +# not available on the site (to my knowledge they are only available +# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type +# "sommartid" without the quotes in the field "Fritext" and then click +# the Sok-button). +# +# (2001-05-13): +# +# I have now found a newspaper stating that at 1916-10-01 01:00 +# summertime the church-clocks etc were set back one hour to show +# 1916-10-01 00:00 standard time. The article also reports that some +# people thought the switch to standard time would take place already +# at 1916-10-01 00:00 summer time, but they had to wait for another +# hour before the event took place. +# +# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1 + 1:00:14 - SET 1900 Jan 1 # Swedish Time + 1:00 - CET 1916 May 14 23:00 + 1:00 1:00 CEST 1916 Oct 1 01:00 + 1:00 - CET 1980 + 1:00 EU CE%sT + +# Switzerland +# From Howse: +# By the end of the 18th century clocks and watches became commonplace +# and their performance improved enormously. Communities began to keep +# mean time in preference to apparent time -- Geneva from 1780 .... +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# From Whitman (who writes ``Midnight?''): +Rule Swiss 1940 only - Nov 2 0:00 1:00 S +Rule Swiss 1940 only - Dec 31 0:00 0 - +# From Shanks & Pottenger: +Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S +Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12 + 0:29:44 - BMT 1894 Jun # Bern Mean Time + 1:00 Swiss CE%sT 1981 + 1:00 EU CE%sT + +# Turkey + +# From Amar Devegowda (2007-01-03): +# The time zone rules for Istanbul, Turkey have not been changed for years now. +# ... The latest rules are available at - +# http://www.timeanddate.com/worldclock/timezone.html?n=107 +# From Steffen Thorsen (2007-01-03): +# I have been able to find press records back to 1996 which all say that +# DST started 01:00 local time and end at 02:00 local time. I am not sure +# what happened before that. One example for each year from 1996 to 2001: +# http://newspot.byegm.gov.tr/arsiv/1996/21/N4.htm +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING97/03/97X03X25.TXT +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING98/03/98X03X02.HTM +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING99/10/99X10X26.HTM#%2016 +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2000/03/00X03X06.HTM#%2021 +# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2001/03/23x03x01.HTM#%2027 +# From Paul Eggert (2007-01-03): +# Prefer the above source to Shanks & Pottenger for time stamps after 1990. + +# From Steffen Thorsen (2007-03-09): +# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC +# start/end time, according to the following page (2007-03-07): +# http://www.ntvmsnbc.com/news/402029.asp +# The official document is located here - it is in Turkish...: +# http://rega.basbakanlik.gov.tr/eskiler/2007/03/20070307-7.htm +# I was able to locate the following seemingly official document +# (on a non-government server though) describing dates between 2002 and 2006: +# http://www.alomaliye.com/bkk_2002_3769.htm + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Turkey 1916 only - May 1 0:00 1:00 S +Rule Turkey 1916 only - Oct 1 0:00 0 - +Rule Turkey 1920 only - Mar 28 0:00 1:00 S +Rule Turkey 1920 only - Oct 25 0:00 0 - +Rule Turkey 1921 only - Apr 3 0:00 1:00 S +Rule Turkey 1921 only - Oct 3 0:00 0 - +Rule Turkey 1922 only - Mar 26 0:00 1:00 S +Rule Turkey 1922 only - Oct 8 0:00 0 - +# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; +# go with Shanks & Pottenger. +Rule Turkey 1924 only - May 13 0:00 1:00 S +Rule Turkey 1924 1925 - Oct 1 0:00 0 - +Rule Turkey 1925 only - May 1 0:00 1:00 S +Rule Turkey 1940 only - Jun 30 0:00 1:00 S +Rule Turkey 1940 only - Oct 5 0:00 0 - +Rule Turkey 1940 only - Dec 1 0:00 1:00 S +Rule Turkey 1941 only - Sep 21 0:00 0 - +Rule Turkey 1942 only - Apr 1 0:00 1:00 S +# Whitman omits the next two transition and gives 1945 Oct 1; +# go with Shanks & Pottenger. +Rule Turkey 1942 only - Nov 1 0:00 0 - +Rule Turkey 1945 only - Apr 2 0:00 1:00 S +Rule Turkey 1945 only - Oct 8 0:00 0 - +Rule Turkey 1946 only - Jun 1 0:00 1:00 S +Rule Turkey 1946 only - Oct 1 0:00 0 - +Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S +Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 - +Rule Turkey 1949 only - Apr 10 0:00 1:00 S +Rule Turkey 1950 only - Apr 19 0:00 1:00 S +Rule Turkey 1951 only - Apr 22 0:00 1:00 S +Rule Turkey 1951 only - Oct 8 0:00 0 - +Rule Turkey 1962 only - Jul 15 0:00 1:00 S +Rule Turkey 1962 only - Oct 8 0:00 0 - +Rule Turkey 1964 only - May 15 0:00 1:00 S +Rule Turkey 1964 only - Oct 1 0:00 0 - +Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S +Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 - +Rule Turkey 1973 only - Jun 3 1:00 1:00 S +Rule Turkey 1973 only - Nov 4 3:00 0 - +Rule Turkey 1974 only - Mar 31 2:00 1:00 S +Rule Turkey 1974 only - Nov 3 5:00 0 - +Rule Turkey 1975 only - Mar 30 0:00 1:00 S +Rule Turkey 1975 1976 - Oct lastSun 0:00 0 - +Rule Turkey 1976 only - Jun 1 0:00 1:00 S +Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S +Rule Turkey 1977 only - Oct 16 0:00 0 - +Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S +Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 - +Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S +Rule Turkey 1983 only - Jul 31 0:00 1:00 S +Rule Turkey 1983 only - Oct 2 0:00 0 - +Rule Turkey 1985 only - Apr 20 0:00 1:00 S +Rule Turkey 1985 only - Sep 28 0:00 0 - +Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S +Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 - +Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S +Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 - +Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Europe/Istanbul 1:55:52 - LMT 1880 + 1:56:56 - IMT 1910 Oct # Istanbul Mean Time? + 2:00 Turkey EE%sT 1978 Oct 15 + 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time + 2:00 Turkey EE%sT 2007 + 2:00 EU EE%sT +Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. + +# Ukraine +# +# From Igor Karpov, who works for the Ukranian Ministry of Justice, +# via Garrett Wollman (2003-01-27): +# BTW, I've found the official document on this matter. It's goverment +# regulations number 509, May 13, 1996. In my poor translation it says: +# "Time in Ukraine is set to second timezone (Kiev time). Each last Sunday +# of March at 3am the time is changing to 4am and each last Sunday of +# October the time at 4am is changing to 3am" + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Most of Ukraine since 1970 has been like Kiev. +# "Kyiv" is the transliteration of the Ukrainian name, but +# "Kiev" is more common in English. +Zone Europe/Kiev 2:02:04 - LMT 1880 + 2:02:04 - KMT 1924 May 2 # Kiev Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Sep 20 + 1:00 C-Eur CE%sT 1943 Nov 6 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Ruthenia used CET 1990/1991. +# "Uzhhorod" is the transliteration of the Ukrainian name, but +# "Uzhgorod" is more common in English. +Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct + 1:00 - CET 1940 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 1:00 CEST 1944 Oct 26 + 1:00 - CET 1945 Jun 29 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 1:00 - CET 1991 Mar 31 3:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991. +# "Zaporizhia" is the transliteration of the Ukrainian name, but +# "Zaporozh'ye" is more common in English. Use the common English +# spelling, except omit the apostrophe as it is not allowed in +# portable Posix file names. +Zone Europe/Zaporozhye 2:20:40 - LMT 1880 + 2:20 - CUT 1924 May 2 # Central Ukraine T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Aug 25 + 1:00 C-Eur CE%sT 1943 Oct 25 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +# Central Crimea used Moscow time 1994/1997. +Zone Europe/Simferopol 2:16:24 - LMT 1880 + 2:16 - SMT 1924 May 2 # Simferopol Mean T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Nov + 1:00 C-Eur CE%sT 1944 Apr 13 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 +# From Paul Eggert (2006-03-22): +# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched +# from Kiev to Moscow time sometime after the January 1994 elections. +# Shanks (1999) says ``date of change uncertain'', but implies that it happened +# sometime between the 1994 DST switches. Shanks & Pottenger simply say +# 1994-09-25 03:00, but that can't be right. For now, guess it +# changed in May. + 2:00 E-Eur EE%sT 1994 May +# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev. + 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s + 3:00 1:00 MSD 1996 Oct 27 3:00s +# IATA SSIM (1997-09) says Crimea switched to EET/EEST. +# Assume it happened in March by not changing the clocks. + 3:00 Russia MSK/MSD 1997 + 3:00 - MSK 1997 Mar lastSun 1:00u + 2:00 EU EE%sT + +############################################################################### + +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from +# the last Sunday in March to the last Sunday in September in 1986. +# The source shows Romania changing a day later than everybody else. +# +# According to Bernard Sieloff's source, Poland is in the MET time zone but +# uses the WE DST rules. The Western USSR uses EET+1 and ME DST rules. +# Bernard Sieloff's source claims Romania switches on the same day, but at +# 00:00 standard time (i.e., 01:00 DST). It also claims that Turkey +# switches on the same day, but switches on at 01:00 standard time +# and off at 00:00 standard time (i.e., 01:00 DST) + +# ... +# Date: Wed, 28 Jan 87 16:56:27 -0100 +# From: Tom Hofmann +# ... +# +# ...the European time rules are...standardized since 1981, when +# most European coun[tr]ies started DST. Before that year, only +# a few countries (UK, France, Italy) had DST, each according +# to own national rules. In 1981, however, DST started on +# 'Apr firstSun', and not on 'Mar lastSun' as in the following +# years... +# But also since 1981 there are some more national exceptions +# than listed in 'europe': Switzerland, for example, joined DST +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep +# lastSun' in 1981---I don't know how they handle now. +# +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the +# Soviet Union (as far as I know). +# +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG, +# 4002 Basle, Switzerland +# ... + +# ... +# Date: Wed, 4 Feb 87 22:35:22 +0100 +# From: Dik T. Winter +# ... +# +# The information from Tom Hofmann is (as far as I know) not entirely correct. +# After a request from chongo at amdahl I tried to retrieve all information +# about DST in Europe. I was able to find all from about 1969. +# +# ...standardization on DST in Europe started in about 1977 with switches on +# first Sunday in April and last Sunday in September... +# In 1981 UK joined Europe insofar that +# the starting day for both shifted to last Sunday in March. And from 1982 +# the whole of Europe used DST, with switch dates April 1 and October 1 in +# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch +# dates... +# +# It should also be remembered that time-zones are not constants; e.g. +# Portugal switched in 1976 from MET (or CET) to WET with DST... +# Note also that though there were rules for switch dates not +# all countries abided to these dates, and many individual deviations +# occurred, though not since 1982 I believe. Another note: it is always +# assumed that DST is 1 hour ahead of normal time, this need not be the +# case; at least in the Netherlands there have been times when DST was 2 hours +# in advance of normal time. +# +# ... +# dik t. winter, cwi, amsterdam, nederland +# ... + +# From Bob Devine (1988-01-28): +# ... +# Greece: Last Sunday in April to last Sunday in September (iffy on dates). +# Since 1978. Change at midnight. +# ... +# Monaco: has same DST as France. +# ... diff --git a/libkcal/libical/tzdata/factory b/libkcal/libical/tzdata/factory new file mode 100644 index 000000000..946063c0d --- /dev/null +++ b/libkcal/libical/tzdata/factory @@ -0,0 +1,8 @@ +# @(#)factory 8.1 + +# For companies who don't want to put time zone specification in +# their installation procedures. When users run date, they'll get the message. +# Also useful for the "comp.sources" version. + +# Zone NAME GMTOFF RULES FORMAT +Zone Factory 0 - "Local time zone must be set--see zic manual page" diff --git a/libkcal/libical/tzdata/iso3166.tab b/libkcal/libical/tzdata/iso3166.tab new file mode 100644 index 000000000..8d6239958 --- /dev/null +++ b/libkcal/libical/tzdata/iso3166.tab @@ -0,0 +1,269 @@ +# ISO 3166 alpha-2 country codes +# +# @(#)iso3166.tab 8.5 +# +# From Paul Eggert (2006-09-27): +# +# This file contains a table with the following columns: +# 1. ISO 3166-1 alpha-2 country code, current as of +# ISO 3166-1 Newsletter VI-1 (2007-09-21). See: +# <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html"> +# ISO 3166 Maintenance agency (ISO 3166/MA) +# </a>. +# 2. The usual English name for the country, +# chosen so that alphabetic sorting of subsets produces helpful lists. +# This is not the same as the English name in the ISO 3166 tables. +# +# Columns are separated by a single tab. +# The table is sorted by country code. +# +# Lines beginning with `#' are comments. +# +#country- +#code country name +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua & Barbuda +AI Anguilla +AL Albania +AM Armenia +AN Netherlands Antilles +AO Angola +AQ Antarctica +AR Argentina +AS Samoa (American) +AT Austria +AU Australia +AW Aruba +AX Aaland Islands +AZ Azerbaijan +BA Bosnia & Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BL St Barthelemy +BM Bermuda +BN Brunei +BO Bolivia +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BY Belarus +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CD Congo (Dem. Rep.) +CF Central African Rep. +CG Congo (Rep.) +CH Switzerland +CI Cote d'Ivoire +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CU Cuba +CV Cape Verde +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands +FM Micronesia +FO Faroe Islands +FR France +GA Gabon +GB Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS South Georgia & the South Sandwich Islands +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard Island & McDonald Islands +HN Honduras +HR Croatia +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IQ Iraq +IR Iran +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN St Kitts & Nevis +KP Korea (North) +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LB Lebanon +LC St Lucia +LI Liechtenstein +LK Sri Lanka +LR Liberia +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MF St Martin (French part) +MG Madagascar +MH Marshall Islands +MK Macedonia +ML Mali +MM Myanmar (Burma) +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NU Niue +NZ New Zealand +OM Oman +PA Panama +PE Peru +PF French Polynesia +PG Papua New Guinea +PH Philippines +PK Pakistan +PL Poland +PM St Pierre & Miquelon +PN Pitcairn +PR Puerto Rico +PS Palestine +PT Portugal +PW Palau +PY Paraguay +QA Qatar +RE Reunion +RO Romania +RS Serbia +RU Russia +RW Rwanda +SA Saudi Arabia +SB Solomon Islands +SC Seychelles +SD Sudan +SE Sweden +SG Singapore +SH St Helena +SI Slovenia +SJ Svalbard & Jan Mayen +SK Slovakia +SL Sierra Leone +SM San Marino +SN Senegal +SO Somalia +SR Suriname +ST Sao Tome & Principe +SV El Salvador +SY Syria +SZ Swaziland +TC Turks & Caicos Is +TD Chad +TF French Southern & Antarctic Lands +TG Togo +TH Thailand +TJ Tajikistan +TK Tokelau +TL East Timor +TM Turkmenistan +TN Tunisia +TO Tonga +TR Turkey +TT Trinidad & Tobago +TV Tuvalu +TW Taiwan +TZ Tanzania +UA Ukraine +UG Uganda +UM US minor outlying islands +US United States +UY Uruguay +UZ Uzbekistan +VA Vatican City +VC St Vincent +VE Venezuela +VG Virgin Islands (UK) +VI Virgin Islands (US) +VN Vietnam +VU Vanuatu +WF Wallis & Futuna +WS Samoa (western) +YE Yemen +YT Mayotte +ZA South Africa +ZM Zambia +ZW Zimbabwe diff --git a/libkcal/libical/tzdata/leapseconds b/libkcal/libical/tzdata/leapseconds new file mode 100644 index 000000000..35df858d7 --- /dev/null +++ b/libkcal/libical/tzdata/leapseconds @@ -0,0 +1,83 @@ +# @(#)leapseconds 8.5 + +# Allowance for leapseconds added to each timezone file. + +# The International Earth Rotation Service periodically uses leap seconds +# to keep UTC to within 0.9 s of UT1 +# (which measures the true angular orientation of the earth in space); see +# Terry J Quinn, The BIPM and the accurate measure of time, +# Proc IEEE 79, 7 (July 1991), 894-905. +# There were no leap seconds before 1972, because the official mechanism +# accounting for the discrepancy between atomic time and the earth's rotation +# did not exist until the early 1970s. + +# The correction (+ or -) is made at the given time, so lines +# will typically look like: +# Leap YEAR MON DAY 23:59:60 + R/S +# or +# Leap YEAR MON DAY 23:59:59 - R/S + +# If the leapsecond is Rolling (R) the given time is local time +# If the leapsecond is Stationary (S) the given time is UTC + +# Leap YEAR MONTH DAY HH:MM:SS CORR R/S +Leap 1972 Jun 30 23:59:60 + S +Leap 1972 Dec 31 23:59:60 + S +Leap 1973 Dec 31 23:59:60 + S +Leap 1974 Dec 31 23:59:60 + S +Leap 1975 Dec 31 23:59:60 + S +Leap 1976 Dec 31 23:59:60 + S +Leap 1977 Dec 31 23:59:60 + S +Leap 1978 Dec 31 23:59:60 + S +Leap 1979 Dec 31 23:59:60 + S +Leap 1981 Jun 30 23:59:60 + S +Leap 1982 Jun 30 23:59:60 + S +Leap 1983 Jun 30 23:59:60 + S +Leap 1985 Jun 30 23:59:60 + S +Leap 1987 Dec 31 23:59:60 + S +Leap 1989 Dec 31 23:59:60 + S +Leap 1990 Dec 31 23:59:60 + S +Leap 1992 Jun 30 23:59:60 + S +Leap 1993 Jun 30 23:59:60 + S +Leap 1994 Jun 30 23:59:60 + S +Leap 1995 Dec 31 23:59:60 + S +Leap 1997 Jun 30 23:59:60 + S +Leap 1998 Dec 31 23:59:60 + S +Leap 2005 Dec 31 23:59:60 + S + +# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS) +# +# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE +# +# SERVICE DE LA ROTATION TERRESTRE +# OBSERVATOIRE DE PARIS +# 61, Av. de l'Observatoire 75014 PARIS (France) +# Tel. : 33 (0) 1 40 51 22 26 +# FAX : 33 (0) 1 40 51 22 91 +# Internet : services.iers@obspm.fr +# +# Paris, 18 January 2008 +# +# Bulletin C 35 +# +# To authorities responsible +# for the measurement and +# distribution of time +# +# INFORMATION ON UTC - TAI +# +# NO positive leap second will be introduced at the end of June 2008. +# The difference between Coordinated Universal Time UTC and the +# International Atomic Time TAI is : +# +# from 2006 January 1, 0h UTC, until further notice : UTC-TAI = -33 s +# +# Leap seconds can be introduced in UTC at the end of the months of December +# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every +# six months, either to announce a time step in UTC, or to confirm that there +# will be no time step at the next possible date. +# +# Daniel GAMBIS +# Head +# Earth Orientation Center of the IERS +# Observatoire de Paris, France diff --git a/libkcal/libical/tzdata/northamerica b/libkcal/libical/tzdata/northamerica new file mode 100644 index 000000000..60e5d51e0 --- /dev/null +++ b/libkcal/libical/tzdata/northamerica @@ -0,0 +1,2651 @@ +# @(#)northamerica 8.23 +# <pre> + +# also includes Central America and the Caribbean + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (1999-03-22): +# A reliable and entertaining source about time zones is +# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997). + +############################################################################### + +# United States + +# From Paul Eggert (1999-03-31): +# Howse writes (pp 121-125) that time zones were invented by +# Professor Charles Ferdinand Dowd (1825-1904), +# Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY). +# His pamphlet ``A System of National Time for Railroads'' (1870) +# was the result of his proposals at the Convention of Railroad Trunk Lines +# in New York City (1869-10). His 1870 proposal was based on Washington, DC, +# but in 1872-05 he moved the proposed origin to Greenwich. +# His proposal was adopted by the railroads on 1883-11-18 at 12:00, +# and the most of the country soon followed suit. + +# From Paul Eggert (2005-04-16): +# That 1883 transition occurred at 12:00 new time, not at 12:00 old time. +# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data in the US is +# Thomas G. Shanks, The American Atlas (5th edition), +# San Diego: ACS Publications, Inc. (1991). +# Make sure you have the errata sheet; the book is somewhat useless without it. +# It is the source for most of the pre-1991 US entries below. + +# From Paul Eggert (2001-03-06): +# Daylight Saving Time was first suggested as a joke by Benjamin Franklin +# in his whimsical essay ``An Economical Project for Diminishing the Cost +# of Light'' published in the Journal de Paris (1784-04-26). +# Not everyone is happy with the results: +# +# I don't really care how time is reckoned so long as there is some +# agreement about it, but I object to being told that I am saving +# daylight when my reason tells me that I am doing nothing of the kind. +# I even object to the implication that I am wasting something +# valuable if I stay in bed after the sun has risen. As an admirer +# of moonlight I resent the bossy insistence of those who want to +# reduce my time for enjoying it. At the back of the Daylight Saving +# scheme I detect the bony, blue-fingered hand of Puritanism, eager +# to push people into bed earlier, and get them up earlier, to make +# them healthy, wealthy and wise in spite of themselves. +# +# -- Robertson Davies, The diary of Samuel Marchbanks, +# Clarke, Irwin (1947), XIX, Sunday +# +# For more about the first ten years of DST in the United States, see +# Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html"> +# Ten years of daylight saving from the Pittsburgh standpoint +# (Carnegie Library of Pittsburgh, 1927)</a>. +# +# Shanks says that DST was called "War Time" in the US in 1918 and 1919. +# However, DST was imposed by the Standard Time Act of 1918, which +# was the first nationwide legal time standard, and apparently +# time was just called "Standard Time" or "Daylight Saving Time". + +# From Arthur David Olson: +# US Daylight Saving Time ended on the last Sunday of *October* in 1974. +# See, for example, the front page of the Saturday, 1974-10-26 +# and Sunday, 1974-10-27 editions of the Washington Post. + +# From Arthur David Olson: +# Before the Uniform Time Act of 1966 took effect in 1967, observance of +# Daylight Saving Time in the US was by local option, except during wartime. + +# From Arthur David Olson (2000-09-25): +# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama. +# In the introduction, Oboler spoke of "Eastern Peace Time." +# An AltaVista search turned up +# <a href="http://rowayton.org/rhs/hstaug45.html">: +# "When the time is announced over the radio now, it is 'Eastern Peace +# Time' instead of the old familiar 'Eastern War Time.' Peace is wonderful." +# </a> (August 1945) by way of confirmation. + +# From Joseph Gallant citing +# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987): +# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set +# to switch to London for Attlee's address, but the American people +# never got to hear his speech live. According to one press account, +# CBS' Bob Trout was first to announce the word of Japan's surrender, +# but a few seconds later, NBC, ABC and Mutual also flashed the word +# of surrender, all of whom interrupting the bells of Big Ben in +# London which were to precede Mr. Attlee's speech. + +# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout. From +# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times: +# +# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender. +# Any announcement from Asia would reach St. John's New York newsroom on a +# wire service teletype machine, which had prescribed signals for major news. +# Associated Press, for example, would ring five bells before spewing out +# typed copy of an important story, and 10 bells for news "of transcendental +# importance." +# +# On Aug. 14, stalling while talking steadily into the NBC networks' open +# microphone, St. John heard five bells and waited only to hear a sixth bell, +# before announcing confidently: "Ladies and gentlemen, World War II is over. +# The Japanese have agreed to our surrender terms." +# +# He had scored a 20-second scoop on other broadcasters. + +# From Arthur David Olson (2005-08-22): +# Paul has been careful to use the "US" rules only in those locations +# that are part of the United States; this reflects the real scope of +# U.S. government action. So even though the "US" rules have changed +# in the latest release, other countries won't be affected. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule US 1918 1919 - Mar lastSun 2:00 1:00 D +Rule US 1918 1919 - Oct lastSun 2:00 0 S +Rule US 1942 only - Feb 9 2:00 1:00 W # War +Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule US 1945 only - Sep 30 2:00 0 S +Rule US 1967 2006 - Oct lastSun 2:00 0 S +Rule US 1967 1973 - Apr lastSun 2:00 1:00 D +Rule US 1974 only - Jan 6 2:00 1:00 D +Rule US 1975 only - Feb 23 2:00 1:00 D +Rule US 1976 1986 - Apr lastSun 2:00 1:00 D +Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule US 2007 max - Mar Sun>=8 2:00 1:00 D +Rule US 2007 max - Nov Sun>=1 2:00 0 S + +# From Arthur David Olson, 2005-12-19 +# We generate the files specified below to guard against old files with +# obsolete information being left in the time zone binary directory. +# We limit the list to names that have appeared in previous versions of +# this time zone package. +# We do these as separate Zones rather than as Links to avoid problems if +# a particular place changes whether it observes DST. +# We put these specifications here in the northamerica file both to +# increase the chances that they'll actually get compiled and to +# avoid the need to duplicate the US rules in another file. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone EST -5:00 - EST +Zone MST -7:00 - MST +Zone HST -10:00 - HST +Zone EST5EDT -5:00 US E%sT +Zone CST6CDT -6:00 US C%sT +Zone MST7MDT -7:00 US M%sT +Zone PST8PDT -8:00 US P%sT + +# From Bob Devine (1988-01-28): +# ...Alaska (and Hawaii) had the timezone names changed in 1967. +# old new +# Pacific Standard Time(PST) -same- +# Yukon Standard Time(YST) -same- +# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST) +# Nome Standard Time (NT) Bering Standard Time (BST) +# +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz. +# The YST zone now covers nearly all of the state, AHST just part +# of the Aleutian islands. No DST. + +# From Paul Eggert (1995-12-19): +# The tables below use `NST', not `NT', for Nome Standard Time. +# I invented `CAWT' for Central Alaska War Time. + +# From U. S. Naval Observatory (1989-01-19): +# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON +# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30 +# USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON +# USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30 +# USA MOUNTAIN 7 H BEHIND UTC DENVER +# USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30 +# USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO +# USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30 +# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST) +# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT) +# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W +# USA - " - 9 H BEHIND UTC APR 3 - OCT 30 +# USA HAWAII 10 H BEHIND UTC +# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY + +# From Arthur David Olson (1989-01-21): +# The above dates are for 1988. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's +# no DST in Samoa, and the claim that there is DST in Alaska and the +# Aleutians. + +# From Arthur David Olson (1988-02-13): +# Legal standard time zone names, from United States Code (1982 Edition and +# Supplement III), Title 15, Chapter 6, Section 260 and forward. First, names +# up to 1967-04-01 (when most provisions of the Uniform Time Act of 1966 +# took effect), as explained in sections 263 and 261: +# (none) +# United States standard eastern time +# United States standard mountain time +# United States standard central time +# United States standard Pacific time +# (none) +# United States standard Alaska time +# (none) +# Next, names from 1967-04-01 until 1983-11-30 (the date for +# public law 98-181): +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Yukon standard time +# Alaska-Hawaii standard time +# Bering standard time +# And after 1983-11-30: +# Atlantic standard time +# eastern standard time +# central standard time +# mountain standard time +# Pacific standard time +# Alaska standard time +# Hawaii-Aleutian standard time +# Samoa standard time +# The law doesn't give abbreviations. +# +# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow: +# Public law 106-564 (2000-12-23) introduced the abbreviation +# "Chamorro Standard Time" for time in Guam and the Northern Marianas. +# See the file "australasia". + +# From Arthur David Olson, 2005-08-09 +# The following was signed into law on 2005-08-08. +# +# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS. +# (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15 +# U.S.C. 260a(a)) is amended-- +# (1) by striking `first Sunday of April' and inserting `second +# Sunday of March'; and +# (2) by striking `last Sunday of October' and inserting `first +# Sunday of November'. +# (b) Effective Date- Subsection (a) shall take effect 1 year after the +# date of enactment of this Act or March 1, 2007, whichever is later. +# (c) Report to Congress- Not later than 9 months after the effective +# date stated in subsection (b), the Secretary shall report to Congress +# on the impact of this section on energy consumption in the United +# States. +# (d) Right to Revert- Congress retains the right to revert the +# Daylight Saving Time back to the 2005 time schedules once the +# Department study is complete. + +# US eastern time, represented by New York + +# Connecticut, Delaware, District of Columbia, most of Florida, +# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky +# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts, +# New Hampshire, New Jersey, New York, North Carolina, Ohio, +# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee, +# Vermont, Virginia, West Virginia + +# From Dave Cantor (2004-11-02): +# Early this summer I had the occasion to visit the Mount Washington +# Observatory weather station atop (of course!) Mount Washington [, NH].... +# One of the staff members said that the station was on Eastern Standard Time +# and didn't change their clocks for Daylight Saving ... so that their +# reports will always have times which are 5 hours behind UTC. + +# From Paul Eggert (2005-08-26): +# According to today's Huntsville Times +# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1> +# a few towns on Alabama's "eastern border with Georgia, such as Phenix City +# in Russell County, Lanett in Chambers County and some towns in Lee County, +# set their watches and clocks on Eastern time." It quotes H.H. "Bubba" +# Roberts, city administrator in Phenix City. as saying "We are in the Central +# time zone, but we do go by the Eastern time zone because so many people work +# in Columbus." + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule NYC 1920 only - Mar lastSun 2:00 1:00 D +Rule NYC 1920 only - Oct lastSun 2:00 0 S +Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D +Rule NYC 1921 1954 - Sep lastSun 2:00 0 S +Rule NYC 1955 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58 + -5:00 US E%sT 1920 + -5:00 NYC E%sT 1942 + -5:00 US E%sT 1946 + -5:00 NYC E%sT 1967 + -5:00 US E%sT + +# US central time, represented by Chicago + +# Alabama, Arkansas, Florida panhandle (Bay, Calhoun, Escambia, +# Gulf, Holmes, Jackson, Okaloosa, Santa Rosa, Walton, and +# Washington counties), Illinois, western Indiana +# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer, +# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western +# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern +# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota, +# western Tennessee, most of Texas, Wisconsin + +# From Larry M. Smith (2006-04-26) re Wisconsin: +# http://www.legis.state.wi.us/statutes/Stat0175.pdf ... +# is currently enforced at the 01:00 time of change. Because the local +# "bar time" in the state corresponds to 02:00, a number of citations +# are issued for the "sale of class 'B' alcohol after prohibited +# hours" within the deviated hour of this change every year.... +# +# From Douglas R. Bomberg (2007-03-12): +# Wisconsin has enacted (nearly eleventh-hour) legislation to get WI +# Statue 175 closer in synch with the US Congress' intent.... +# http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Chicago 1920 only - Jun 13 2:00 1:00 D +Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S +Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D +Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D +Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S +Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24 + -6:00 US C%sT 1920 + -6:00 Chicago C%sT 1936 Mar 1 2:00 + -5:00 - EST 1936 Nov 15 2:00 + -6:00 Chicago C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Chicago C%sT 1967 + -6:00 US C%sT +# Oliver County, ND switched from mountain to central time on 1992-10-25. +Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48 + -7:00 US M%sT 1992 Oct 25 02:00 + -6:00 US C%sT +# Morton County, ND, switched from mountain to central time on +# 2003-10-26, except for the area around Mandan which was already central time. +# See <http://dmses.dot.gov/docimages/p63/135818.pdf>. +# Officially this switch also included part of Sioux County, and +# Jones, Mellette, and Todd Counties in South Dakota; +# but in practice these other counties were already observing central time. +# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>. +Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21 + -7:00 US M%sT 2003 Oct 26 02:00 + -6:00 US C%sT + +# US mountain time, represented by Denver +# +# Colorado, far western Kansas, Montana, western +# Nebraska, Nevada border (Jackpot, Owyhee, and Mountain City), +# New Mexico, southwestern North Dakota, +# western South Dakota, far western Texas (El Paso County, Hudspeth County, +# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D +Rule Denver 1920 only - Oct lastSun 2:00 0 S +Rule Denver 1921 only - May 22 2:00 0 S +Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D +Rule Denver 1965 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04 + -7:00 US M%sT 1920 + -7:00 Denver M%sT 1942 + -7:00 US M%sT 1946 + -7:00 Denver M%sT 1967 + -7:00 US M%sT + +# US Pacific time, represented by Los Angeles +# +# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater, +# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, +# and the northern three-quarters of Idaho county), +# most of Nevada, most of Oregon, and Washington +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule CA 1948 only - Mar 14 2:00 1:00 D +Rule CA 1949 only - Jan 1 2:00 0 S +Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D +Rule CA 1950 1961 - Sep lastSun 2:00 0 S +Rule CA 1962 1966 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02 + -8:00 US P%sT 1946 + -8:00 CA P%sT 1967 + -8:00 US P%sT + +# Alaska +# AK%sT is the modern abbreviation for -9:00 per USNO. +# +# From Paul Eggert (2001-05-30): +# Howse writes that Alaska switched from the Julian to the Gregorian calendar, +# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia. +# This was on 1867-10-18, a Friday; the previous day was 1867-10-06 Julian, +# also a Friday. Include only the time zone part of this transition, +# ignoring the switch from Julian to Gregorian, since we can't represent +# the Julian calendar. +# +# As far as we know, none of the exact locations mentioned below were +# permanently inhabited in 1867 by anyone using either calendar. +# (Yakutat was colonized by the Russians in 1799, but the settlement +# was destroyed in 1805 by a Yakutat-kon war party.) However, there +# were nearby inhabitants in some cases and for our purposes perhaps +# it's best to simply use the official transition. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Juneau 15:02:19 - LMT 1867 Oct 18 + -8:57:41 - LMT 1900 Aug 20 12:00 + -8:00 - PST 1942 + -8:00 US P%sT 1946 + -8:00 - PST 1969 + -8:00 US P%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18 + -9:18:55 - LMT 1900 Aug 20 12:00 + -9:00 - YST 1942 + -9:00 US Y%sT 1946 + -9:00 - YST 1969 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18 + -9:59:36 - LMT 1900 Aug 20 12:00 + -10:00 - CAT 1942 + -10:00 US CAT/CAWT 1945 Aug 14 23:00u + -10:00 US CAT/CAPT 1946 # Peace + -10:00 - CAT 1967 Apr + -10:00 - AHST 1969 + -10:00 US AH%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Nome 12:58:21 - LMT 1867 Oct 18 + -11:01:38 - LMT 1900 Aug 20 12:00 + -11:00 - NST 1942 + -11:00 US N%sT 1946 + -11:00 - NST 1967 Apr + -11:00 - BST 1969 + -11:00 US B%sT 1983 Oct 30 2:00 + -9:00 US Y%sT 1983 Nov 30 + -9:00 US AK%sT +Zone America/Adak 12:13:21 - LMT 1867 Oct 18 + -11:46:38 - LMT 1900 Aug 20 12:00 + -11:00 - NST 1942 + -11:00 US N%sT 1946 + -11:00 - NST 1967 Apr + -11:00 - BST 1969 + -11:00 US B%sT 1983 Oct 30 2:00 + -10:00 US AH%sT 1983 Nov 30 + -10:00 US HA%sT +# The following switches don't quite make our 1970 cutoff. +# +# Shanks writes that part of southwest Alaska (e.g. Aniak) +# switched from -11:00 to -10:00 on 1968-09-22 at 02:00, +# and another part (e.g. Akiak) made the same switch five weeks later. +# +# From David Flater (2004-11-09): +# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska +# Historic Preservation Commission, provided this information, which +# suggests that Unalaska deviated from statutory time from early 1967 +# possibly until 1983: +# +# Minutes of the Unalaska City Council Meeting, January 10, 1967: +# "Except for St. Paul and Akutan, Unalaska is the only important +# location not on Alaska Standard Time. The following resolution was +# made by William Robinson and seconded by Henry Swanson: Be it +# resolved that the City of Unalaska hereby goes to Alaska Standard +# Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday, +# January 14, Alaska Standard Time.) This resolution was passed with +# three votes for and one against." + +# Hawaii +# +# From Arthur David Olson: +# And then there's Hawaii. +# DST was observed for one day in 1933; +# standard time was changed by half an hour in 1947; +# it's always standard as of 1986. +# +# From Paul Eggert: +# Shanks says the 1933 experiment lasted for three weeks. Go with Shanks. +# +Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00 + -10:30 - HST 1933 Apr 30 2:00 + -10:30 1:00 HDT 1933 May 21 2:00 + -10:30 US H%sT 1947 Jun 8 2:00 + -10:00 - HST + +# Now we turn to US areas that have diverged from the consensus since 1970. + +# Arizona mostly uses MST. + +# From Paul Eggert (2002-10-20): +# +# The information in the rest of this paragraph is derived from the +# <a href="http://www.dlapr.lib.az.us/links/daylight.htm"> +# Daylight Saving Time web page (2002-01-23)</a> maintained by the +# Arizona State Library, Archives and Public Records. +# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard +# time, but by federal law railroads, airlines, bus lines, military +# personnel, and some engaged in interstate commerce continued to +# observe war (i.e., daylight saving) time. The 1944-03-17 Phoenix +# Gazette says that was the date the law changed, and that 04-01 was +# the date the state's clocks would change. In 1945 the State of +# Arizona used standard time all year, again with exceptions only as +# mandated by federal law. Arizona observed DST in 1967, but Arizona +# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST. +# +# Shanks says the 1944 experiment came to an end on 1944-03-17. +# Go with the Arizona State Library instead. + +Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42 + -7:00 US M%sT 1944 Jan 1 00:01 + -7:00 - MST 1944 Apr 1 00:01 + -7:00 US M%sT 1944 Oct 1 00:01 + -7:00 - MST 1967 + -7:00 US M%sT 1968 Mar 21 + -7:00 - MST +# From Arthur David Olson (1988-02-13): +# A writer from the Inter Tribal Council of Arizona, Inc., +# notes in private correspondence dated 1987-12-28 that "Presently, only the +# Navajo Nation participates in the Daylight Saving Time policy, due to its +# large size and location in three states." (The "only" means that other +# tribal nations don't use DST.) + +Link America/Denver America/Shiprock + +# Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine, +# Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark, +# Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome, +# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power, +# Teton, Twin Falls, Valley, Washington counties, and the southern +# quarter of Idaho county) and eastern Oregon (most of Malheur County) +# switched four weeks late in 1974. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11 + -8:00 US P%sT 1923 May 13 2:00 + -7:00 US M%sT 1974 + -7:00 - MST 1974 Feb 3 2:00 + -7:00 US M%sT + +# Indiana +# +# For a map of Indiana's time zone regions, see: +# <a href="http://www.mccsc.edu/time.html"> +# What time is it in Indiana? +# </a> (2006-03-01) +# +# From Paul Eggert (2007-08-17): +# Since 1970, most of Indiana has been like America/Indiana/Indianapolis, +# with the following exceptions: +# +# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer, +# Vandenburgh, and Warrick counties have been like America/Chicago. +# +# - Dearborn and Ohio counties have been like America/New_York. +# +# - Clark, Floyd, and Harrison counties have been like +# America/Kentucky/Louisville. +# +# - Crawford, Daviess, Dubois, Knox, Martin, Perry, Pike, Pulaski, Starke, +# and Switzerland counties have their own time zone histories as noted below. +# +# Shanks partitioned Indiana into 345 regions, each with its own time history, +# and wrote ``Even newspaper reports present contradictory information.'' +# Those Hoosiers! Such a flighty and changeable people! +# Fortunately, most of the complexity occurred before our cutoff date of 1970. +# +# Other than Indianapolis, the Indiana place names are so nondescript +# that they would be ambiguous if we left them at the `America' level. +# So we reluctantly put them all in a subdirectory `America/Indiana'. + +# From Paul Eggert (2005-08-16): +# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006. + +# From Nathan Stratton Treadway (2006-03-30): +# http://www.dot.gov/affairs/dot0406.htm [3705 B] +# From Deborah Goldsmith (2006-01-18): +# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB] +# From Paul Eggert (2006-01-20): +# It says "DOT is relocating the time zone boundary in Indiana to move Starke, +# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the +# Eastern Time Zone to the Central Time Zone.... The effective date of +# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the +# changeover date from standard time to Daylight Saving Time." +# Strictly speaking, this means the affected counties will change their +# clocks twice that night, but this obviously is in error. The intent +# is that 01:59:59 EST be followed by 02:00:00 CDT. + +# From Gwillim Law (2007-02-10): +# The Associated Press has been reporting that Pulaski County, Indiana is +# going to switch from Central to Eastern Time on March 11, 2007.... +# http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D +Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S +Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22 + -6:00 US C%sT 1920 + -6:00 Indianapolis C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Indianapolis C%sT 1955 Apr 24 2:00 + -5:00 - EST 1957 Sep 29 2:00 + -6:00 - CST 1958 Apr 27 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 + -5:00 US E%sT +# +# Eastern Crawford County, Indiana, left its clocks alone in 1974, +# as well as from 1976 through 2005. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D +Rule Marengo 1951 only - Sep lastSun 2:00 0 S +Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D +Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37 + -6:00 US C%sT 1951 + -6:00 Marengo C%sT 1961 Apr 30 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1974 Jan 6 2:00 + -6:00 1:00 CDT 1974 Oct 27 2:00 + -5:00 US E%sT 1976 + -5:00 - EST 2006 + -5:00 US E%sT +# +# Daviess, Dubois, Knox, and Martin Counties, Indiana, +# switched from eastern to central time in April 2006, then switched back +# in November 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D +Rule Vincennes 1946 only - Sep lastSun 2:00 0 S +Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D +Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S +Rule Vincennes 1955 only - May 1 0:00 1:00 D +Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D +Rule Vincennes 1960 only - Oct lastSun 2:00 0 S +Rule Vincennes 1961 only - Sep lastSun 2:00 0 S +Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53 + -6:00 US C%sT 1946 + -6:00 Vincennes C%sT 1964 Apr 26 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Nov 4 2:00 + -5:00 US E%sT +# +# Perry County, Indiana, switched from eastern to central time in April 2006. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Perry 1946 only - Apr lastSun 2:00 1:00 D +Rule Perry 1946 only - Sep lastSun 2:00 0 S +Rule Perry 1953 1954 - Apr lastSun 2:00 1:00 D +Rule Perry 1953 1959 - Sep lastSun 2:00 0 S +Rule Perry 1955 only - May 1 0:00 1:00 D +Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D +Rule Perry 1960 only - Oct lastSun 2:00 0 S +Rule Perry 1961 only - Sep lastSun 2:00 0 S +Rule Perry 1962 1963 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57 + -6:00 US C%sT 1946 + -6:00 Perry C%sT 1964 Apr 26 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT +# +# Pike County, Indiana moved from central to eastern time in 1977, +# then switched back in 2006, then switched back again in 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Pike 1955 only - May 1 0:00 1:00 D +Rule Pike 1955 1960 - Sep lastSun 2:00 0 S +Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D +Rule Pike 1961 1964 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53 + -6:00 US C%sT 1955 + -6:00 Pike C%sT 1965 Apr 25 2:00 + -5:00 - EST 1966 Oct 30 2:00 + -6:00 US C%sT 1977 Oct 30 2:00 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Nov 4 2:00 + -5:00 US E%sT +# +# Starke County, Indiana moved from central to eastern time in 1991, +# then switched back in 2006. +# From Arthur David Olson (1991-10-28): +# An article on page A3 of the Sunday, 1991-10-27 Washington Post +# notes that Starke County switched from Central time to Eastern time as of +# 1991-10-27. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D +Rule Starke 1947 1954 - Sep lastSun 2:00 0 S +Rule Starke 1955 1956 - Oct lastSun 2:00 0 S +Rule Starke 1957 1958 - Sep lastSun 2:00 0 S +Rule Starke 1959 1961 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30 + -6:00 US C%sT 1947 + -6:00 Starke C%sT 1962 Apr 29 2:00 + -5:00 - EST 1963 Oct 27 2:00 + -6:00 US C%sT 1991 Oct 27 2:00 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT +# +# Pulaski County, Indiana, switched from eastern to central time in +# April 2006 and then switched back in March 2007. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D +Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S +Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S +Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35 + -6:00 US C%sT 1946 + -6:00 Pulaski C%sT 1961 Apr 30 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1971 + -5:00 - EST 2006 Apr 2 2:00 + -6:00 US C%sT 2007 Mar 11 2:00 + -5:00 US E%sT +# +# Switzerland County, Indiana, did not observe DST from 1973 through 2005. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44 + -6:00 US C%sT 1954 Apr 25 2:00 + -5:00 - EST 1969 + -5:00 US E%sT 1973 + -5:00 - EST 2006 + -5:00 US E%sT + +# Part of Kentucky left its clocks alone in 1974. +# This also includes Clark, Floyd, and Harrison counties in Indiana. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Louisville 1921 only - May 1 2:00 1:00 D +Rule Louisville 1921 only - Sep 1 2:00 0 S +Rule Louisville 1941 1961 - Apr lastSun 2:00 1:00 D +Rule Louisville 1941 only - Sep lastSun 2:00 0 S +Rule Louisville 1946 only - Jun 2 2:00 0 S +Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S +Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58 + -6:00 US C%sT 1921 + -6:00 Louisville C%sT 1942 + -6:00 US C%sT 1946 + -6:00 Louisville C%sT 1961 Jul 23 2:00 + -5:00 - EST 1968 + -5:00 US E%sT 1974 Jan 6 2:00 + -6:00 1:00 CDT 1974 Oct 27 2:00 + -5:00 US E%sT +# +# Wayne County, Kentucky +# +# From +# <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml"> +# Lake Cumberland LIFE +# </a> (1999-01-29) via WKYM-101.7: +# Clinton County has joined Wayne County in asking the DoT to change from +# the Central to the Eastern time zone.... The Wayne County government made +# the same request in December. And while Russell County officials have not +# taken action, the majority of respondents to a poll conducted there in +# August indicated they would like to change to "fast time" also. +# The three Lake Cumberland counties are the farthest east of any U.S. +# location in the Central time zone. +# +# From Rich Wales (2000-08-29): +# After prolonged debate, and despite continuing deep differences of opinion, +# Wayne County (central Kentucky) is switching from Central (-0600) to Eastern +# (-0500) time. They won't "fall back" this year. See Sara Shipley, +# The difference an hour makes, Nando Times (2000-08-29 15:33 -0400). +# +# From Paul Eggert (2001-07-16): +# The final rule was published in the +# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22"> +# Federal Register 65, 160 (2000-08-17), page 50154-50158. +# </a> +# +Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36 + -6:00 US C%sT 1946 + -6:00 - CST 1968 + -6:00 US C%sT 2000 Oct 29 2:00 + -5:00 US E%sT + + +# From Rives McDow (2000-08-30): +# Here ... are all the changes in the US since 1985. +# Kearny County, KS (put all of county on central; +# previously split between MST and CST) ... 1990-10 +# Starke County, IN (from CST to EST) ... 1991-10 +# Oliver County, ND (from MST to CST) ... 1992-10 +# West Wendover, NV (from PST TO MST) ... 1999-10 +# Wayne County, KY (from CST to EST) ... 2000-10 +# +# From Paul Eggert (2001-07-17): +# We don't know where the line used to be within Kearny County, KS, +# so omit that change for now. +# See America/Indiana/Knox for the Starke County, IN change. +# See America/North_Dakota/Center for the Oliver County, ND change. +# West Wendover, NV officially switched from Pacific to mountain time on +# 1999-10-31. See the +# <a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15"> +# Federal Register 64, 203 (1999-10-21), page 56705-56707. +# </a> +# However, the Federal Register says that West Wendover already operated +# on mountain time, and the rule merely made this official; +# hence a separate tz entry is not needed. + +# Michigan +# +# From Bob Devine (1988-01-28): +# Michigan didn't observe DST from 1968 to 1973. +# +# From Paul Eggert (1999-03-31): +# Shanks writes that Michigan started using standard time on 1885-09-18, +# but Howse writes (pp 124-125, referring to Popular Astronomy, 1901-01) +# that Detroit kept +# +# local time until 1900 when the City Council decreed that clocks should +# be put back twenty-eight minutes to Central Standard Time. Half the +# city obeyed, half refused. After considerable debate, the decision +# was rescinded and the city reverted to Sun time. A derisive offer to +# erect a sundial in front of the city hall was referred to the +# Committee on Sewers. Then, in 1905, Central time was adopted +# by city vote. +# +# This story is too entertaining to be false, so go with Howse over Shanks. +# +# From Paul Eggert (2001-03-06): +# Garland (1927) writes ``Cleveland and Detroit advanced their clocks +# one hour in 1914.'' This change is not in Shanks. We have no more +# info, so omit this for now. +# +# Most of Michigan observed DST from 1973 on, but was a bit late in 1975. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D +Rule Detroit 1948 only - Sep lastSun 2:00 0 S +Rule Detroit 1967 only - Jun 14 2:00 1:00 D +Rule Detroit 1967 only - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Detroit -5:32:11 - LMT 1905 + -6:00 - CST 1915 May 15 2:00 + -5:00 - EST 1942 + -5:00 US E%sT 1946 + -5:00 Detroit E%sT 1973 + -5:00 US E%sT 1975 + -5:00 - EST 1975 Apr 27 2:00 + -5:00 US E%sT +# +# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan, +# switched from EST to CST/CDT in 1973. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D +Rule Menominee 1946 only - Sep lastSun 2:00 0 S +Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D +Rule Menominee 1966 only - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00 + -6:00 US C%sT 1946 + -6:00 Menominee C%sT 1969 Apr 27 2:00 + -5:00 - EST 1973 Apr 29 2:00 + -6:00 US C%sT + +# Navassa +# administered by the US Fish and Wildlife Service +# claimed by US under the provisions of the 1856 Guano Islands Act +# also claimed by Haiti +# occupied 1857/1900 by the Navassa Phosphate Co +# US lighthouse 1917/1996-09 +# currently uninhabited +# see Mark Fineman, ``An Isle Rich in Guano and Discord'', +# _Los Angeles Times_ (1998-11-10), A1, A10; it cites +# Jimmy Skaggs, _The Great Guano Rush_ (1994). + +################################################################################ + + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Other sources occasionally used include: +# +# Edward W. Whitman, World Time Differences, +# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), +# which I found in the UCLA library. +# +# <a href="http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf"> +# William Willett, The Waste of Daylight, 19th edition +# </a> (1914-03) +# +# See the `europe' file for Greenland. + +# Canada + +# From Alain LaBont<e'> (1994-11-14): +# I post here the time zone abbreviations standardized in Canada +# for both English and French in the CAN/CSA-Z234.4-89 standard.... +# +# UTC Standard time Daylight savings time +# offset French English French English +# -2:30 - - HAT NDT +# -3 - - HAA ADT +# -3:30 HNT NST - - +# -4 HNA AST HAE EDT +# -5 HNE EST HAC CDT +# -6 HNC CST HAR MDT +# -7 HNR MST HAP PDT +# -8 HNP PST HAY YDT +# -9 HNY YST - - +# +# HN: Heure Normale ST: Standard Time +# HA: Heure Avanc<e'>e DT: Daylight saving Time +# +# A: de l'Atlantique Atlantic +# C: du Centre Central +# E: de l'Est Eastern +# M: Mountain +# N: Newfoundland +# P: du Pacifique Pacific +# R: des Rocheuses +# T: de Terre-Neuve +# Y: du Yukon Yukon +# +# From Paul Eggert (1994-11-22): +# Alas, this sort of thing must be handled by localization software. + +# Unless otherwise specified, the data for Canada are all from Shanks +# & Pottenger. + +# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31, +# 2007-03-01): +# The British Columbia government announced yesterday that it will +# adjust daylight savings next year to align with changes in the +# U.S. and the rest of Canada.... +# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm +# ... +# Nova Scotia +# Daylight saving time will be extended by four weeks starting in 2007.... +# http://www.gov.ns.ca/just/regulations/rg2/2006/ma1206.pdf +# +# [For New Brunswick] the new legislation dictates that the time change is to +# be done at 02:00 instead of 00:01. +# http://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf +# ... +# Manitoba has traditionally changed the clock every fall at 03:00. +# As of 2006, the transition is to take place one hour earlier at 02:00. +# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php +# ... +# [Alberta, Ontario, Quebec] will follow US rules. +# http://www.qp.gov.ab.ca/documents/spring/CH03_06.CFM +# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm +# http://www2.publicationsduquebec.gouv.qc.ca/dynamicSearch/telecharge.php?type=5&file=2006C39A.PDF +# ... +# P.E.I. will follow US rules.... +# http://www.assembly.pe.ca/bills/pdf_chapter/62/3/chapter-41.pdf +# ... +# Province of Newfoundland and Labrador.... +# http://www.hoa.gov.nl.ca/hoa/bills/Bill0634.htm +# ... +# Yukon +# http://www.gov.yk.ca/legislation/regs/oic2006_127.pdf +# ... +# N.W.T. will follow US rules. Whoever maintains the government web site +# does not seem to believe in bookmarks. To see the news release, click the +# following link and search for "Daylight Savings Time Change". Press the +# "Daylight Savings Time Change" link; it will fire off a popup using +# JavaScript. +# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive +# ... +# Nunavut +# An amendment to the Interpretation Act was registered on February 19/2007.... +# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf + +# From Paul Eggert (2006-04-25): +# H. David Matthews and Mary Vincent's map +# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp"> +# "It's about TIME", _Canadian Geographic_ (September-October 1998) +# </a> contains detailed boundaries for regions observing nonstandard +# time and daylight saving time arrangements in Canada circa 1998. +# +# INMS, the Institute for National Measurement Standards in Ottawa, has <a +# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php"> +# information about standard and daylight saving time zones in Canada. +# </a> (updated periodically). +# Its unofficial information is often taken from Matthews and Vincent. + +# From Paul Eggert (2006-06-27): +# For now, assume all of DST-observing Canada will fall into line with the +# new US DST rules, + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Canada 1918 only - Apr 14 2:00 1:00 D +Rule Canada 1918 only - Oct 31 2:00 0 S +Rule Canada 1942 only - Feb 9 2:00 1:00 W # War +Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Canada 1945 only - Sep 30 2:00 0 S +Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D +Rule Canada 1974 2006 - Oct lastSun 2:00 0 S +Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D +Rule Canada 2007 max - Nov Sun>=1 2:00 0 S + + +# Newfoundland and Labrador + +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) write that Labrador should use NST/NDT, +# but the only part of Labrador that follows the rules is the +# southeast corner, including Port Hope Simpson and Mary's Harbour, +# but excluding, say, Black Tickle. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule StJohns 1917 only - Apr 8 2:00 1:00 D +Rule StJohns 1917 only - Sep 17 2:00 0 S +# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger. +Rule StJohns 1919 only - May 5 23:00 1:00 D +Rule StJohns 1919 only - Aug 12 23:00 0 S +# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger. +Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D +Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S +# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks & +# Pottenger. +Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D +Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S +# Whitman gives the following transitions: +# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07 +# but go with Shanks & Pottenger and assume they used Canadian rules. +# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives +# Apr 30 - Sep 24; go with Shanks & Pottenger. +Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D +Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S +Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D +Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S +Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S +# From Paul Eggert (2000-10-02): +# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches +# at 00:01 local time. For now, assume it started in 1987. +Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D +Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S +Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD +Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D +Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D +Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S +# +# St John's has an apostrophe, but Posix file names can't have apostrophes. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Johns -3:30:52 - LMT 1884 + -3:30:52 StJohns N%sT 1918 + -3:30:52 Canada N%sT 1919 + -3:30:52 StJohns N%sT 1935 Mar 30 + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 + -3:30 StJohns N%sT + +# most of east Labrador + +# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay + -3:30:52 - NST 1918 + -3:30:52 Canada N%sT 1919 + -3:30:52 - NST 1935 Mar 30 + -3:30 - NST 1936 + -3:30 StJohns N%sT 1942 May 11 + -3:30 Canada N%sT 1946 + -3:30 StJohns N%sT 1966 Mar 15 2:00 + -4:00 StJohns A%sT + + +# west Labrador, Nova Scotia, Prince Edward I + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that since 1970 most of this region has been like +# Halifax. Many locales did not observe peacetime DST until 1972; +# Glace Bay, NS is the largest that we know of. +# Shanks & Pottenger also write that Liverpool, NS was the only town +# in Canada to observe DST in 1971 but not 1970; for now we'll assume +# this is a typo. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Halifax 1916 only - Apr 1 0:00 1:00 D +Rule Halifax 1916 only - Oct 1 0:00 0 S +Rule Halifax 1920 only - May 9 0:00 1:00 D +Rule Halifax 1920 only - Aug 29 0:00 0 S +Rule Halifax 1921 only - May 6 0:00 1:00 D +Rule Halifax 1921 1922 - Sep 5 0:00 0 S +Rule Halifax 1922 only - Apr 30 0:00 1:00 D +Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D +Rule Halifax 1923 only - Sep 4 0:00 0 S +Rule Halifax 1924 only - Sep 15 0:00 0 S +Rule Halifax 1925 only - Sep 28 0:00 0 S +Rule Halifax 1926 only - May 16 0:00 1:00 D +Rule Halifax 1926 only - Sep 13 0:00 0 S +Rule Halifax 1927 only - May 1 0:00 1:00 D +Rule Halifax 1927 only - Sep 26 0:00 0 S +Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D +Rule Halifax 1928 only - Sep 9 0:00 0 S +Rule Halifax 1929 only - Sep 3 0:00 0 S +Rule Halifax 1930 only - Sep 15 0:00 0 S +Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S +Rule Halifax 1932 only - May 1 0:00 1:00 D +Rule Halifax 1933 only - Apr 30 0:00 1:00 D +Rule Halifax 1933 only - Oct 2 0:00 0 S +Rule Halifax 1934 only - May 20 0:00 1:00 D +Rule Halifax 1934 only - Sep 16 0:00 0 S +Rule Halifax 1935 only - Jun 2 0:00 1:00 D +Rule Halifax 1935 only - Sep 30 0:00 0 S +Rule Halifax 1936 only - Jun 1 0:00 1:00 D +Rule Halifax 1936 only - Sep 14 0:00 0 S +Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D +Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S +Rule Halifax 1939 only - May 28 0:00 1:00 D +Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D +Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D +Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S +Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D +Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S +Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D +Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S +Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D +Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Halifax -4:14:24 - LMT 1902 Jun 15 + -4:00 Halifax A%sT 1918 + -4:00 Canada A%sT 1919 + -4:00 Halifax A%sT 1942 Feb 9 2:00s + -4:00 Canada A%sT 1946 + -4:00 Halifax A%sT 1974 + -4:00 Canada A%sT +Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15 + -4:00 Canada A%sT 1953 + -4:00 Halifax A%sT 1954 + -4:00 - AST 1972 + -4:00 Halifax A%sT 1974 + -4:00 Canada A%sT + +# New Brunswick + +# From Paul Eggert (2007-01-31): +# The Time Definition Act <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> +# says they changed at 00:01 through 2006, and +# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it +# clear that this was the case since at least 1993. +# For now, assume it started in 1993. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D +Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S +Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D +Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S +Rule Moncton 1939 only - May 27 1:00 1:00 D +Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S +Rule Moncton 1940 only - May 19 1:00 1:00 D +Rule Moncton 1941 only - May 4 1:00 1:00 D +Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D +Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S +Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S +Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D +Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Moncton -4:19:08 - LMT 1883 Dec 9 + -5:00 - EST 1902 Jun 15 + -4:00 Canada A%sT 1933 + -4:00 Moncton A%sT 1942 + -4:00 Canada A%sT 1946 + -4:00 Moncton A%sT 1973 + -4:00 Canada A%sT 1993 + -4:00 Moncton A%sT 2007 + -4:00 Canada A%sT + +# Quebec + +# From Paul Eggert (2006-07-09): +# Shanks & Pottenger write that since 1970 most of Quebec has been +# like Montreal. + +# From Paul Eggert (2006-06-27): +# Matthews and Vincent (1998) also write that Quebec east of the -63 +# meridian is supposed to observe AST, but residents as far east as +# Natashquan use EST/EDT, and residents east of Natashquan use AST. +# In "Official time in Quebec" the Quebec department of justice writes in +# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm +# that "The residents of the Municipality of the +# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin, +# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is +# written and use Atlantic standard time all year round. The same applies to +# the residents of the Native facilities along the lower North Shore." +# <http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm> +# says this common practice was codified into law as of 2007. +# For lack of better info, guess this practice began around 1970, contra to +# Shanks & Pottenger who have this region observing AST/ADT. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mont 1917 only - Mar 25 2:00 1:00 D +Rule Mont 1917 only - Apr 24 0:00 0 S +Rule Mont 1919 only - Mar 31 2:30 1:00 D +Rule Mont 1919 only - Oct 25 2:30 0 S +Rule Mont 1920 only - May 2 2:30 1:00 D +Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S +Rule Mont 1921 only - May 1 2:00 1:00 D +Rule Mont 1922 only - Apr 30 2:00 1:00 D +Rule Mont 1924 only - May 17 2:00 1:00 D +Rule Mont 1924 1926 - Sep lastSun 2:30 0 S +Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D +# The 1927-to-1937 rules can be expressed more simply as +# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D +# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S +# The rules below avoid use of 24:00 +# (which pre-1998 versions of zic cannot handle). +Rule Mont 1927 only - May 1 0:00 1:00 D +Rule Mont 1927 1932 - Sep lastSun 0:00 0 S +Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D +Rule Mont 1932 only - May 1 0:00 1:00 D +Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D +Rule Mont 1933 only - Oct 1 0:00 0 S +Rule Mont 1934 1939 - Sep lastSun 0:00 0 S +Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D +Rule Mont 1945 1948 - Sep lastSun 2:00 0 S +Rule Mont 1949 1950 - Oct lastSun 2:00 0 S +Rule Mont 1951 1956 - Sep lastSun 2:00 0 S +Rule Mont 1957 1973 - Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Blanc-Sablon -3:48:28 - LMT 1884 + -4:00 Canada A%sT 1970 + -4:00 - AST +Zone America/Montreal -4:54:16 - LMT 1884 + -5:00 Mont E%sT 1918 + -5:00 Canada E%sT 1919 + -5:00 Mont E%sT 1942 Feb 9 2:00s + -5:00 Canada E%sT 1946 + -5:00 Mont E%sT 1974 + -5:00 Canada E%sT + + +# Ontario + +# From Paul Eggert (2006-07-09): +# Shanks & Pottenger write that since 1970 most of Ontario has been like +# Toronto. +# Thunder Bay skipped DST in 1973. +# Many smaller locales did not observe peacetime DST until 1974; +# Nipigon (EST) and Rainy River (CST) are the largest that we know of. +# Far west Ontario is like Winnipeg; far east Quebec is like Halifax. + +# From Mark Brader (2003-07-26): +# [According to the Toronto Star] Orillia, Ontario, adopted DST +# effective Saturday, 1912-06-22, 22:00; the article mentions that +# Port Arthur (now part of Thunder Bay, Ontario) as well as Moose Jaw +# have already done so. In Orillia DST was to run until Saturday, +# 1912-08-31 (no time mentioned), but it was met with considerable +# hostility from certain segments of the public, and was revoked after +# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but +# presumably that should be -07-06. (1912-06-19, -07-12; also letters +# earlier in June). +# +# Kenora, Ontario, was to abandon DST on 1914-06-01 (-05-21). + +# From Paul Eggert (1997-10-17): +# Mark Brader writes that an article in the 1997-10-14 Toronto Star +# says that Atikokan, Ontario currently does not observe DST, +# but will vote on 11-10 whether to use EST/EDT. +# He also writes that the +# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html"> +# Ontario Time Act (1990, Chapter T.9) +# </a> +# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT. +# Officially Atikokan is therefore on CST/CDT, and most likely this report +# concerns a non-official time observed as a matter of local practice. +# +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and +# New Osnaburgh observe CST all year, that Big Trout Lake observes +# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in +# violation of the official Ontario rules. +# +# From Paul Eggert (2006-07-09): +# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the +# 2005-07-21 Chronicle-Journal, which said: +# +# The clocks in Atikokan stay set on standard time year-round. +# This means they spend about half the time on central time and +# the other half on eastern time. +# +# For the most part, the system works, Mayor Dennis Brown said. +# +# "The majority of businesses in Atikokan deal more with Eastern +# Canada, but there are some that deal with Western Canada," he +# said. "I don't see any changes happening here." +# +# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang +# [New Osnaburgh] follow the same practice." + +# From Garry McKinnon (2006-07-14) via Chris Walton: +# I chatted with a member of my board who has an outstanding memory +# and a long history in Atikokan (and in the telecom industry) and he +# can say for certain that Atikokan has been practicing the current +# time keeping since 1952, at least. + +# From Paul Eggert (2006-07-17): +# Shanks & Pottenger say that Atikokan has agreed with Rainy River +# ever since standard time was introduced, but the information from +# McKinnon sounds more authoritative. For now, assume that Atikokan +# switched to EST immediately after WWII era daylight saving time +# ended. This matches the old (less-populous) America/Coral_Harbour +# entry since our cutoff date of 1970, so we can move +# America/Coral_Harbour to the 'backward' file. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Toronto 1919 only - Mar 30 23:30 1:00 D +Rule Toronto 1919 only - Oct 26 0:00 0 S +Rule Toronto 1920 only - May 2 2:00 1:00 D +Rule Toronto 1920 only - Sep 26 0:00 0 S +Rule Toronto 1921 only - May 15 2:00 1:00 D +Rule Toronto 1921 only - Sep 15 2:00 0 S +Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D +# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16" +# was meant. +Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S +Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D +# The 1927-to-1939 rules can be expressed more simply as +# Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S +# Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D +# Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D +# Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S +# The rules below avoid use of Sun>=25 +# (which pre-2004 versions of zic cannot handle). +Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S +Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D +Rule Toronto 1932 only - May 1 2:00 1:00 D +Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D +Rule Toronto 1933 only - Oct 1 2:00 0 S +Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S +Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S +Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D +Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D +Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S +Rule Toronto 1949 only - Nov lastSun 0:00 0 S +Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D +Rule Toronto 1950 only - Nov lastSun 2:00 0 S +Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S +# Shanks & Pottenger say Toronto ended DST a week early in 1971, +# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this +# is wrong, and that he had confirmed it by checking the 1971-10-30 +# Toronto Star, which said that DST was ending 1971-10-31 as usual. +Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S + +# From Paul Eggert (2003-07-27): +# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and +# Port Arthur, Ontario, the principle of the Bill has been in +# operation for the past three years, and in the City of Moose Jaw, +# Saskatchewan, for one year." + +# From David Bryan via Tory Tronrud, Director/Curator, +# Thunder Bay Museum (2003-11-12): +# There is some suggestion, however, that, by-law or not, daylight +# savings time was being practiced in Fort William and Port Arthur +# before 1909.... [I]n 1910, the line between the Eastern and Central +# Time Zones was permanently moved about two hundred miles west to +# include the Thunder Bay area.... When Canada adopted daylight +# savings time in 1916, Fort William and Port Arthur, having done so +# already, did not change their clocks.... During the Second World +# War,... [t]he cities agreed to implement DST during the summer +# months for the remainder of the war years. + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Toronto -5:17:32 - LMT 1895 + -5:00 Canada E%sT 1919 + -5:00 Toronto E%sT 1942 Feb 9 2:00s + -5:00 Canada E%sT 1946 + -5:00 Toronto E%sT 1974 + -5:00 Canada E%sT +Zone America/Thunder_Bay -5:57:00 - LMT 1895 + -6:00 - CST 1910 + -5:00 - EST 1942 + -5:00 Canada E%sT 1970 + -5:00 Mont E%sT 1973 + -5:00 - EST 1974 + -5:00 Canada E%sT +Zone America/Nipigon -5:53:04 - LMT 1895 + -5:00 Canada E%sT 1940 Sep 29 + -5:00 1:00 EDT 1942 Feb 9 2:00s + -5:00 Canada E%sT +Zone America/Rainy_River -6:18:16 - LMT 1895 + -6:00 Canada C%sT 1940 Sep 29 + -6:00 1:00 CDT 1942 Feb 9 2:00s + -6:00 Canada C%sT +Zone America/Atikokan -6:06:28 - LMT 1895 + -6:00 Canada C%sT 1940 Sep 29 + -6:00 1:00 CDT 1942 Feb 9 2:00s + -6:00 Canada C%sT 1945 Sep 30 2:00 + -5:00 - EST + + +# Manitoba + +# From Rob Douglas (2006-04-06): +# the old Manitoba Time Act - as amended by Bill 2, assented to +# March 27, 1987 ... said ... +# "between two o'clock Central Standard Time in the morning of +# the first Sunday of April of each year and two o'clock Central +# Standard Time in the morning of the last Sunday of October next +# following, one hour in advance of Central Standard Time."... +# I believe that the English legislation [of the old time act] had = +# been assented to (March 22, 1967).... +# Also, as far as I can tell, there was no order-in-council varying +# the time of Daylight Saving Time for 2005 and so the provisions of +# the 1987 version would apply - the changeover was at 2:00 Central +# Standard Time (i.e. not until 3:00 Central Daylight Time). + +# From Paul Eggert (2006-04-10): +# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s) +# starting 1966. Since 02:00s is clearly correct for 1967 on, assume +# it was also 02:00s in 1966. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Winn 1916 only - Apr 23 0:00 1:00 D +Rule Winn 1916 only - Sep 17 0:00 0 S +Rule Winn 1918 only - Apr 14 2:00 1:00 D +Rule Winn 1918 only - Oct 31 2:00 0 S +Rule Winn 1937 only - May 16 2:00 1:00 D +Rule Winn 1937 only - Sep 26 2:00 0 S +Rule Winn 1942 only - Feb 9 2:00 1:00 W # War +Rule Winn 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Winn 1945 only - Sep lastSun 2:00 0 S +Rule Winn 1946 only - May 12 2:00 1:00 D +Rule Winn 1946 only - Oct 13 2:00 0 S +Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D +Rule Winn 1947 1949 - Sep lastSun 2:00 0 S +Rule Winn 1950 only - May 1 2:00 1:00 D +Rule Winn 1950 only - Sep 30 2:00 0 S +Rule Winn 1951 1960 - Apr lastSun 2:00 1:00 D +Rule Winn 1951 1958 - Sep lastSun 2:00 0 S +Rule Winn 1959 only - Oct lastSun 2:00 0 S +Rule Winn 1960 only - Sep lastSun 2:00 0 S +Rule Winn 1963 only - Apr lastSun 2:00 1:00 D +Rule Winn 1963 only - Sep 22 2:00 0 S +Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D +Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S +Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16 + -6:00 Winn C%sT 2006 + -6:00 Canada C%sT + + +# Saskatchewan + +# From Mark Brader (2003-07-26): +# The first actual adoption of DST in Canada was at the municipal +# level. As the [Toronto] Star put it (1912-06-07), "While people +# elsewhere have long been talking of legislation to save daylight, +# the city of Moose Jaw [Saskatchewan] has acted on its own hook." +# DST in Moose Jaw began on Saturday, 1912-06-01 (no time mentioned: +# presumably late evening, as below), and would run until "the end of +# the summer". The discrepancy between municipal time and railroad +# time was noted. + +# From Paul Eggert (2003-07-27): +# Willett (1914-03) notes that DST "has been in operation ... in the +# City of Moose Jaw, Saskatchewan, for one year." + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that since 1970 this region has mostly been as Regina. +# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972. +# Other western towns (e.g. Lloydminster) are like Edmonton. +# Matthews and Vincent (1998) write that Denare Beach and Creighton +# are like Winnipeg, in violation of Saskatchewan law. + +# From W. Jones (1992-11-06): +# The. . .below is based on information I got from our law library, the +# provincial archives, and the provincial Community Services department. +# A precise history would require digging through newspaper archives, and +# since you didn't say what you wanted, I didn't bother. +# +# Saskatchewan is split by a time zone meridian (105W) and over the years +# the boundary became pretty ragged as communities near it reevaluated +# their affiliations in one direction or the other. In 1965 a provincial +# referendum favoured legislating common time practices. +# +# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of +# Saskatchewan 1978) was proclaimed, and established that the eastern +# part of Saskatchewan would use CST year round, that districts in +# northwest Saskatchewan would by default follow CST but could opt to +# follow Mountain Time rules (thus 1 hour difference in the winter and +# zero in the summer), and that districts in southwest Saskatchewan would +# by default follow MT but could opt to follow CST. +# +# It took a few years for the dust to settle (I know one story of a town +# on one time zone having its school in another, such that a mom had to +# serve her family lunch in two shifts), but presently it seems that only +# a few towns on the border with Alberta (e.g. Lloydminster) follow MT +# rules any more; all other districts appear to have used CST year round +# since sometime in the 1960s. + +# From Chris Walton (2006-06-26): +# The Saskatchewan time act which was last updated in 1996 is about 30 pages +# long and rather painful to read. +# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Regina 1918 only - Apr 14 2:00 1:00 D +Rule Regina 1918 only - Oct 31 2:00 0 S +Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D +Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S +Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D +Rule Regina 1937 only - Oct Sun>=8 0:00 0 S +Rule Regina 1938 only - Oct Sun>=1 0:00 0 S +Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S +Rule Regina 1942 only - Feb 9 2:00 1:00 W # War +Rule Regina 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Regina 1945 only - Sep lastSun 2:00 0 S +Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D +Rule Regina 1946 only - Oct Sun>=8 2:00 0 S +Rule Regina 1947 1957 - Apr lastSun 2:00 1:00 D +Rule Regina 1947 1957 - Sep lastSun 2:00 0 S +Rule Regina 1959 only - Apr lastSun 2:00 1:00 D +Rule Regina 1959 only - Oct lastSun 2:00 0 S +# +Rule Swift 1957 only - Apr lastSun 2:00 1:00 D +Rule Swift 1957 only - Oct lastSun 2:00 0 S +Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D +Rule Swift 1959 only - Oct lastSun 2:00 0 S +Rule Swift 1960 1961 - Sep lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Regina -6:58:36 - LMT 1905 Sep + -7:00 Regina M%sT 1960 Apr lastSun 2:00 + -6:00 - CST +Zone America/Swift_Current -7:11:20 - LMT 1905 Sep + -7:00 Canada M%sT 1946 Apr lastSun 2:00 + -7:00 Regina M%sT 1950 + -7:00 Swift M%sT 1972 Apr lastSun 2:00 + -6:00 - CST + + +# Alberta + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D +Rule Edm 1918 only - Oct 31 2:00 0 S +Rule Edm 1919 only - May 27 2:00 0 S +Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D +Rule Edm 1920 only - Oct lastSun 2:00 0 S +Rule Edm 1921 1923 - Sep lastSun 2:00 0 S +Rule Edm 1942 only - Feb 9 2:00 1:00 W # War +Rule Edm 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Edm 1945 only - Sep lastSun 2:00 0 S +Rule Edm 1947 only - Apr lastSun 2:00 1:00 D +Rule Edm 1947 only - Sep lastSun 2:00 0 S +Rule Edm 1967 only - Apr lastSun 2:00 1:00 D +Rule Edm 1967 only - Oct lastSun 2:00 0 S +Rule Edm 1969 only - Apr lastSun 2:00 1:00 D +Rule Edm 1969 only - Oct lastSun 2:00 0 S +Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D +Rule Edm 1972 2006 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Edmonton -7:33:52 - LMT 1906 Sep + -7:00 Edm M%sT 1987 + -7:00 Canada M%sT + + +# British Columbia + +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger write that since 1970 most of this region has +# been like Vancouver. +# Dawson Creek uses MST. Much of east BC is like Edmonton. +# Matthews and Vincent (1998) write that Creston is like Dawson Creek. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Vanc 1918 only - Apr 14 2:00 1:00 D +Rule Vanc 1918 only - Oct 31 2:00 0 S +Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War +Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule Vanc 1945 only - Sep 30 2:00 0 S +Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D +Rule Vanc 1946 only - Oct 13 2:00 0 S +Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S +Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Vancouver -8:12:28 - LMT 1884 + -8:00 Vanc P%sT 1987 + -8:00 Canada P%sT +Zone America/Dawson_Creek -8:00:56 - LMT 1884 + -8:00 Canada P%sT 1947 + -8:00 Vanc P%sT 1972 Aug 30 2:00 + -7:00 - MST + + +# Northwest Territories, Nunavut, Yukon + +# From Paul Eggert (2006-03-22): +# Dawson switched to PST in 1973. Inuvik switched to MST in 1979. +# Mathew Englander (1996-10-07) gives the following refs: +# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68, +# c. 7 defines Yukon standard time as UTC-9. This is still valid; +# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1). +# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00. +# * O.I.C. 1980/02 established DST. +# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00. +# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go +# with Englander. +# From Chris Walton (2006-06-26): +# Here is a link to the old daylight saving portion of the interpretation +# act which was last updated in 1987: +# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf + +# From Rives McDow (1999-09-04): +# Nunavut ... moved ... to incorporate the whole territory into one time zone. +# <a href="http://www.nunatsiaq.com/nunavut/nvt90903_13.html"> +# Nunavut moves to single time zone Oct. 31 +# </a> +# +# From Antoine Leca (1999-09-06): +# We then need to create a new timezone for the Kitikmeot region of Nunavut +# to differentiate it from the Yellowknife region. + +# From Paul Eggert (1999-09-20): +# <a href="http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html"> +# Basic Facts: The New Territory +# </a> (1999) reports that Pangnirtung operates on eastern time, +# and that Coral Harbour does not observe DST. We don't know when +# Pangnirtung switched to eastern time; we'll guess 1995. + +# From Rives McDow (1999-11-08): +# On October 31, when the rest of Nunavut went to Central time, +# Pangnirtung wobbled. Here is the result of their wobble: +# +# The following businesses and organizations in Pangnirtung use Central Time: +# +# First Air, Power Corp, Nunavut Construction, Health Center, RCMP, +# Eastern Arctic National Parks, A & D Specialist +# +# The following businesses and organizations in Pangnirtung use Eastern Time: +# +# Hamlet office, All other businesses, Both schools, Airport operator +# +# This has made for an interesting situation there, which warranted the news. +# No one there that I spoke with seems concerned, or has plans to +# change the local methods of keeping time, as it evidently does not +# really interfere with any activities or make things difficult locally. +# They plan to celebrate New Year's turn-over twice, one hour apart, +# so it appears that the situation will last at least that long. +# The Nunavut Intergovernmental Affairs hopes that they will "come to +# their senses", but the locals evidently don't see any problem with +# the current state of affairs. + +# From Michaela Rodrigue, writing in the +# <a href="http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html"> +# Nunatsiaq News (1999-11-19)</a>: +# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones, +# central - or Nunavut time - for government offices, and eastern time +# for municipal offices and schools.... Igloolik [was similar but then] +# made the switch to central time on Saturday, Nov. 6. + +# From Paul Eggert (2000-10-02): +# Matthews and Vincent (1998) say the following, but we lack histories +# for these potential new Zones. +# +# The Canadian Forces station at Alert uses Eastern Time while the +# handful of residents at the Eureka weather station [in the Central +# zone] skip daylight savings. Baffin Island, which is crossed by the +# Central, Eastern and Atlantic Time zones only uses Eastern Time. +# Gjoa Haven, Taloyoak and Pelly Bay all use Mountain instead of +# Central Time and Southampton Island [in the Central zone] is not +# required to use daylight savings. + +# From +# <a href="http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html"> +# Nunavut now has two time zones +# </a> (2000-11-10): +# The Nunavut government would allow its employees in Kugluktuk and +# Cambridge Bay to operate on central time year-round, putting them +# one hour behind the rest of Nunavut for six months during the winter. +# At the end of October the two communities had rebelled against +# Nunavut's unified time zone, refusing to shift to eastern time with +# the rest of the territory for the winter. Cambridge Bay remained on +# central time, while Kugluktuk, even farther west, reverted to +# mountain time, which they had used before the advent of Nunavut's +# unified time zone in 1999. +# +# From Rives McDow (2001-01-20), quoting the Nunavut government: +# The preceding decision came into effect at midnight, Saturday Nov 4, 2000. + +# From Paul Eggert (2000-12-04): +# Let's just keep track of the official times for now. + +# From Rives McDow (2001-03-07): +# The premier of Nunavut has issued a ministerial statement advising +# that effective 2001-04-01, the territory of Nunavut will revert +# back to three time zones (mountain, central, and eastern). Of the +# cities in Nunavut, Coral Harbor is the only one that I know of that +# has said it will not observe dst, staying on EST year round. I'm +# checking for more info, and will get back to you if I come up with +# more. +# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).] + +# From Gwillim Law (2005-05-21): +# According to maps at +# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg +# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg +# (both dated 2003), and +# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp +# (from a 1998 Canadian Geographic article), the de facto and de jure time +# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year +# round. Using Google, it's easy to find other websites that confirm this. +# I wasn't able to find how far back this time regimen goes, but since it +# predates the creation of Nunavut, it probably goes back many years.... +# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used. +# +# From Paul Eggert (2005-07-26): +# For lack of better information, assume that Southampton Island observed +# daylight saving only during wartime. + +# From Chris Walton (2007-03-01): +# ... the community of Resolute (located on Cornwallis Island in +# Nunavut) moved from Central Time to Eastern Time last November. +# Basically the community did not change its clocks at the end of +# daylight saving.... +# http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html + +# From Chris Walton (2007-03-14): +# Today I phoned the "hamlet office" to find out what Resolute was doing with +# its clocks. +# +# The individual that answered the phone confirmed that the clocks did not +# move at the end of daylight saving on October 29/2006. He also told me that +# the clocks did not move this past weekend (March 11/2007).... +# +# America/Resolute should use the "Canada" Rule up to October 29/2006. +# After that it should be fixed on Eastern Standard Time until further notice. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule NT_YK 1918 only - Apr 14 2:00 1:00 D +Rule NT_YK 1918 only - Oct 27 2:00 0 S +Rule NT_YK 1919 only - May 25 2:00 1:00 D +Rule NT_YK 1919 only - Nov 1 0:00 0 S +Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War +Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace +Rule NT_YK 1945 only - Sep 30 2:00 0 S +Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD +Rule NT_YK 1965 only - Oct lastSun 2:00 0 S +Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D +Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S +Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# aka Panniqtuuq +Zone America/Pangnirtung 0 - zzz 1921 # trading post est. + -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00 + -5:00 Canada E%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 Canada E%sT +# formerly Frobisher Bay +Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est. + -5:00 NT_YK E%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 Canada E%sT +# aka Qausuittuq +Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT 2006 Oct 29 2:00 + -5:00 - EST +# aka Kangiqiniq +Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded + -6:00 NT_YK C%sT 2000 Oct 29 2:00 + -5:00 - EST 2001 Apr 1 3:00 + -6:00 Canada C%sT +# aka Iqaluktuuttiaq +Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.? + -7:00 NT_YK M%sT 1999 Oct 31 2:00 + -6:00 Canada C%sT 2000 Oct 29 2:00 + -5:00 - EST 2000 Nov 5 0:00 + -6:00 - CST 2001 Apr 1 3:00 + -7:00 Canada M%sT +Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded? + -7:00 NT_YK M%sT 1980 + -7:00 Canada M%sT +Zone America/Inuvik 0 - zzz 1953 # Inuvik founded + -8:00 NT_YK P%sT 1979 Apr lastSun 2:00 + -7:00 NT_YK M%sT 1980 + -7:00 Canada M%sT +Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20 + -9:00 NT_YK Y%sT 1966 Jul 1 2:00 + -8:00 NT_YK P%sT 1980 + -8:00 Canada P%sT +Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 + -9:00 NT_YK Y%sT 1973 Oct 28 0:00 + -8:00 NT_YK P%sT 1980 + -8:00 Canada P%sT + + +############################################################################### + +# Mexico + +# From Paul Eggert (2001-03-05): +# The Investigation and Analysis Service of the +# Mexican Library of Congress (MLoC) has published a +# <a href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/"> +# history of Mexican local time (in Spanish) +# </a>. +# +# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC. +# (In all cases we go with the MLoC.) +# S&P report that Baja was at -8:00 in 1922/1923. +# S&P say the 1930 transition in Baja was 1930-11-16. +# S&P report no DST during summer 1931. +# S&P report a transition at 1932-03-30 23:00, not 1932-04-01. + +# From Gwillim Law (2001-02-20): +# There are some other discrepancies between the Decrees page and the +# tz database. I think they can best be explained by supposing that +# the researchers who prepared the Decrees page failed to find some of +# the relevant documents. + +# From Alan Perry (1996-02-15): +# A guy from our Mexico subsidiary finally found the Presidential Decree +# outlining the timezone changes in Mexico. +# +# ------------- Begin Forwarded Message ------------- +# +# I finally got my hands on the Official Presidential Decree that sets up the +# rules for the DST changes. The rules are: +# +# 1. The country is divided in 3 timezones: +# - Baja California Norte (the Mexico/BajaNorte TZ) +# - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ) +# - The rest of the country (the Mexico/General TZ) +# +# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October +# at 2:00 AM, the times in each zone are as follows: +# BajaNorte: GMT+7 +# BajaSur: GMT+6 +# General: GMT+5 +# +# 3. The rest of the year, the times are as follows: +# BajaNorte: GMT+8 +# BajaSur: GMT+7 +# General: GMT+6 +# +# The Decree was published in Mexico's Official Newspaper on January 4th. +# +# -------------- End Forwarded Message -------------- +# From Paul Eggert (1996-06-12): +# For an English translation of the decree, see +# <a href="http://mexico-travel.com/extra/timezone_eng.html"> +# ``Diario Oficial: Time Zone Changeover'' (1996-01-04). +# </a> + +# From Rives McDow (1998-10-08): +# The State of Quintana Roo has reverted back to central STD and DST times +# (i.e. UTC -0600 and -0500 as of 1998-08-02). + +# From Rives McDow (2000-01-10): +# Effective April 4, 1999 at 2:00 AM local time, Sonora changed to the time +# zone 5 hours from the International Date Line, and will not observe daylight +# savings time so as to stay on the same time zone as the southern part of +# Arizona year round. + +# From Jesper Norgaard, translating +# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17): +# In Oaxaca, the 55.000 teachers from the Section 22 of the National +# Syndicate of Education Workers, refuse to apply daylight saving each +# year, so that the more than 10,000 schools work at normal hour the +# whole year. + +# From Gwillim Law (2001-01-19): +# <http://www.reforma.com/negocios_y_dinero/articulo/064481/> ... says +# (translated):... +# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced +# that Summer Time will be reduced from seven to five months, starting +# this year.... +# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001> +# [translated], says "summer time will ... take effect on the first Sunday +# in May, and end on the last Sunday of September. + +# From Arthur David Olson (2001-01-25): +# The 2001-01-24 traditional Washington Post contained the page one +# story "Timely Issue Divides Mexicans."... +# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html +# ... Mexico City Mayor Lopez Obrador "...is threatening to keep +# Mexico City and its 20 million residents on a different time than +# the rest of the country..." In particular, Lopez Obrador would abolish +# observation of Daylight Saving Time. + +# <a href="http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre"> +# Official statute published by the Energy Department +# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules, +# and Sonora with no DST. This was reported by Jesper Norgaard (2001-02-03). + +# From Paul Eggert (2001-03-03): +# +# <a href="http://www.latimes.com/news/nation/20010303/t000018766.html"> +# James F. Smith writes in today's LA Times +# </a> +# * Sonora will continue to observe standard time. +# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that +# the Federal District will not adopt DST. +# * 4 of 16 district leaders announced they'll ignore the decree. +# * The decree does not affect federal-controlled facilities including +# the airport, banks, hospitals, and schools. +# +# For now we'll assume that the Federal District will bow to federal rules. + +# From Jesper Norgaard (2001-04-01): +# I found some references to the Mexican application of daylight +# saving, which modifies what I had already sent you, stating earlier +# that a number of northern Mexican states would go on daylight +# saving. The modification reverts this to only cover Baja California +# (Norte), while all other states (except Sonora, who has no daylight +# saving all year) will follow the original decree of president +# Vicente Fox, starting daylight saving May 6, 2001 and ending +# September 30, 2001. +# References: "Diario de Monterrey" <www.diariodemonterrey.com/index.asp> +# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31) + +# From Reuters (2001-09-04): +# Mexico's Supreme Court on Tuesday declared that daylight savings was +# unconstitutional in Mexico City, creating the possibility the +# capital will be in a different time zone from the rest of the nation +# next year.... The Supreme Court's ruling takes effect at 2:00 +# a.m. (0800 GMT) on Sept. 30, when Mexico is scheduled to revert to +# standard time. "This is so residents of the Federal District are not +# subject to unexpected time changes," a statement from the court said. + +# From Jesper Norgaard Welen (2002-03-12): +# ... consulting my local grocery store(!) and my coworkers, they all insisted +# that a new decision had been made to reinstate US style DST in Mexico.... +# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20) +# confirms this. Sonora as usual is the only state where DST is not applied. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Mexico 1939 only - Feb 5 0:00 1:00 D +Rule Mexico 1939 only - Jun 25 0:00 0 S +Rule Mexico 1940 only - Dec 9 0:00 1:00 D +Rule Mexico 1941 only - Apr 1 0:00 0 S +Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War +Rule Mexico 1944 only - May 1 0:00 0 S +Rule Mexico 1950 only - Feb 12 0:00 1:00 D +Rule Mexico 1950 only - Jul 30 0:00 0 S +Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D +Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S +Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D +Rule Mexico 2001 only - Sep lastSun 2:00 0 S +Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D +Rule Mexico 2002 max - Oct lastSun 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# Quintana Roo +Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56 + -6:00 - CST 1981 Dec 23 + -5:00 Mexico E%sT 1998 Aug 2 2:00 + -6:00 Mexico C%sT +# Campeche, Yucatan +Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32 + -6:00 - CST 1981 Dec 23 + -5:00 - EST 1982 Dec 2 + -6:00 Mexico C%sT +# Coahuila, Durango, Nuevo Leon, Tamaulipas +Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44 + -6:00 - CST 1988 + -6:00 US C%sT 1989 + -6:00 Mexico C%sT +# Central Mexico +Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 Mexico C%sT 2001 Sep 30 02:00 + -6:00 - CST 2002 Feb 20 + -6:00 Mexico C%sT +# Chihuahua +Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1996 + -6:00 Mexico C%sT 1998 + -6:00 - CST 1998 Apr Sun>=1 3:00 + -7:00 Mexico M%sT +# Sonora +Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT 1999 + -7:00 - MST +# Baja California Sur, Nayarit, Sinaloa +Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 + -7:00 - MST 1927 Jun 10 23:00 + -6:00 - CST 1930 Nov 15 + -7:00 - MST 1931 May 1 23:00 + -6:00 - CST 1931 Oct + -7:00 - MST 1932 Apr 1 + -6:00 - CST 1942 Apr 24 + -7:00 - MST 1949 Jan 14 + -8:00 - PST 1970 + -7:00 Mexico M%sT +# Baja California +Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 + -7:00 - MST 1924 + -8:00 - PST 1927 Jun 10 23:00 + -7:00 - MST 1930 Nov 15 + -8:00 - PST 1931 Apr 1 + -8:00 1:00 PDT 1931 Sep 30 + -8:00 - PST 1942 Apr 24 + -8:00 1:00 PWT 1945 Aug 14 23:00u + -8:00 1:00 PPT 1945 Nov 12 # Peace + -8:00 - PST 1948 Apr 5 + -8:00 1:00 PDT 1949 Jan 14 + -8:00 - PST 1954 + -8:00 CA P%sT 1961 + -8:00 - PST 1976 + -8:00 US P%sT 1996 + -8:00 Mexico P%sT 2001 + -8:00 US P%sT 2002 Feb 20 + -8:00 Mexico P%sT +# From Paul Eggert (2006-03-22): +# Formerly there was an America/Ensenada zone, which differed from +# America/Tijuana only in that it did not observe DST from 1976 +# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say +# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports +# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and +# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that +# DST-observance was a town-by-town matter back then. This concerns +# data after 1970 so most likely there should be at least one Zone +# other than America/Tijuana for Baja, but it's not clear yet what its +# name or contents should be. +# +# Revillagigedo Is +# no information + +############################################################################### + +# Anguilla +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2 + -4:00 - AST + +# Antigua and Barbuda +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Antigua -4:07:12 - LMT 1912 Mar 2 + -5:00 - EST 1951 + -4:00 - AST + +# Bahamas +# +# From Sue Williams (2006-12-07): +# The Bahamas announced about a month ago that they plan to change their DST +# rules to sync with the U.S. starting in 2007.... +# http://www.jonesbahamas.com/?c=45&a=10412 + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Bahamas 1964 2006 - Oct lastSun 2:00 0 S +Rule Bahamas 1964 1986 - Apr lastSun 2:00 1:00 D +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Nassau -5:09:24 - LMT 1912 Mar 2 + -5:00 Bahamas E%sT 1976 + -5:00 US E%sT + +# Barbados +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Barb 1977 only - Jun 12 2:00 1:00 D +Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S +Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D +Rule Barb 1979 only - Sep 30 2:00 0 S +Rule Barb 1980 only - Sep 25 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown + -3:58:28 - BMT 1932 # Bridgetown Mean Time + -4:00 Barb A%sT + +# Belize +# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD +Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S +Rule Belize 1973 only - Dec 5 0:00 1:00 D +Rule Belize 1974 only - Feb 9 0:00 0 S +Rule Belize 1982 only - Dec 18 0:00 1:00 D +Rule Belize 1983 only - Feb 12 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Belize -5:52:48 - LMT 1912 Apr + -6:00 Belize C%sT + +# Bermuda + +# From Dan Jones, reporting in The Royal Gazette (2006-06-26): + +# Next year, however, clocks in the US will go forward on the second Sunday +# in March, until the first Sunday in November. And, after the Time Zone +# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on +# Friday, the same thing will happen in Bermuda. +# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135 + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton + -4:00 - AST 1974 Apr 28 2:00 + -4:00 Bahamas A%sT 1976 + -4:00 US A%sT + +# Cayman Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST + +# Costa Rica +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D +Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S +Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D +# IATA SSIM (1991-09) says the following was at 1:00; +# go with Shanks & Pottenger. +Rule CR 1991 only - Jul 1 0:00 0 S +Rule CR 1992 only - Mar 15 0:00 0 S +# There are too many San Joses elsewhere, so we'll use `Costa Rica'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose + -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time + -6:00 CR C%sT +# Coco +# no information; probably like America/Costa_Rica + +# Cuba + +# From Arthur David Olson (1999-03-29): +# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between +# the Cuban National Team and the Baltimore Orioles was carried live on +# the Orioles Radio Network, including affiliate WTOP in Washington, DC. +# During the game, play-by-play announcer Jim Hunter noted that +# "We'll be losing two hours of sleep...Cuba switched to Daylight Saving +# Time today." (The "two hour" remark referred to losing one hour of +# sleep on 1999-03-28--when the announcers were in Cuba as it switched +# to DST--and one more hour on 1999-04-04--when the announcers will have +# returned to Baltimore, which switches on that date.) + +# From Evert van der Veer via Steffen Thorsen (2004-10-28): +# Cuba is not going back to standard time this year. +# From Paul Eggert (2006-03-22): +# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html +# says that it's due to a problem at the Antonio Guiteras +# thermoelectric plant, and says "This October there will be no return +# to normal hours (after daylight saving time)". +# For now, let's assume that it's a temporary measure. + +# From Carlos A. Carnero Delgado (2005-11-12): +# This year (just like in 2004-2005) there's no change in time zone +# adjustment in Cuba. We will stay in daylight saving time: +# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html + +# From Jesper Norgaard Welen (2006-10-21): +# An article in GRANMA INTERNACIONAL claims that Cuba will end +# the 3 years of permanent DST next weekend, see +# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html +# "On Saturday night, October 28 going into Sunday, October 29, at 01:00, +# watches should be set back one hour -- going back to 00:00 hours -- returning +# to the normal schedule.... + +# From Paul Eggert (2007-03-02): +# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday, +# says Cuban clocks will advance at midnight on March 10. +# For lack of better information, assume Cuba will use US rules, +# except that it switches at midnight standard time as usual. +# +# From Steffen Thorsen (2007-10-25): +# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week +# earlier - on the last Sunday of October, just like in 2006. +# +# He supplied these references: +# +# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES +# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm +# +# From Alex Kryvenishev (2007-10-25): +# Here is also article from Granma (Cuba): +# +# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre +# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html +# +# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html + +# From Arthur David Olson (2008-03-09): +# I'm in Maryland which is now observing United States Eastern Daylight +# Time. At 9:44 local time I used RealPlayer to listen to +# <a href="http://media.enet.cu/radioreloj"> +# http://media.enet.cu/radioreloj +# </a>, a Cuban information station, and heard +# the time announced as "ocho cuarenta y cuatro" ("eight forty-four"), +# indicating that Cuba is still on standard time. + +# From Steffen Thorsen (2008-03-12): +# It seems that Cuba will start DST on Sunday, 2007-03-16... +# It was announced yesterday, according to this source (in Spanish): +# <a href="http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm"> +# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm +# </a> +# +# Some more background information is posted here: +# <a href="http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html"> +# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html +# </a> +# +# The article also says that Cuba has been observing DST since 1963, +# while Shanks (and tzdata) has 1965 as the first date (except in the +# 1940's). Many other web pages in Cuba also claim that it has been +# observed since 1963, but with the exception of 1970 - an exception +# which is not present in tzdata/Shanks. So there is a chance we need to +# change some historic records as well. +# +# One example: +# <a href="http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm"> +# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm +# </a> + +# From Jesper Norgaard Welen (2008-03-13): +# The Cuban time change has just been confirmed on the most authoritative +# web site, the Granma. Please check out +# <a href="http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html"> +# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html +# </a> +# +# Basically as expected after Steffen Thorsens information, the change +# will take place midnight between Saturday and Sunday. + +# From Arthur David Olson (2008-03-12): +# Assume Sun>=15 (third Sunday) going forward. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Cuba 1928 only - Jun 10 0:00 1:00 D +Rule Cuba 1928 only - Oct 10 0:00 0 S +Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D +Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S +Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D +Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S +Rule Cuba 1965 only - Jun 1 0:00 1:00 D +Rule Cuba 1965 only - Sep 30 0:00 0 S +Rule Cuba 1966 only - May 29 0:00 1:00 D +Rule Cuba 1966 only - Oct 2 0:00 0 S +Rule Cuba 1967 only - Apr 8 0:00 1:00 D +Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S +Rule Cuba 1968 only - Apr 14 0:00 1:00 D +Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D +Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S +Rule Cuba 1972 1974 - Oct 8 0:00 0 S +Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S +Rule Cuba 1978 only - May 7 0:00 1:00 D +Rule Cuba 1978 1990 - Oct Sun>=8 0:00 0 S +Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D +Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D +Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D +Rule Cuba 1990 1997 - Apr Sun>=1 0:00 1:00 D +Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S +Rule Cuba 1996 only - Oct 6 0:00s 0 S +Rule Cuba 1997 only - Oct 12 0:00s 0 S +Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D +Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S +Rule Cuba 2000 2006 - Apr Sun>=1 0:00s 1:00 D +Rule Cuba 2006 max - Oct lastSun 0:00s 0 S +Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D +Rule Cuba 2008 max - Mar Sun>=15 0:00s 1:00 D + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Havana -5:29:28 - LMT 1890 + -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT + -5:00 Cuba C%sT + +# Dominica +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau + -4:00 - AST + +# Dominican Republic + +# From Steffen Thorsen (2000-10-30): +# Enrique Morales reported to me that the Dominican Republic has changed the +# time zone to Eastern Standard Time as of Sunday 29 at 2 am.... +# http://www.listin.com.do/antes/261000/republica/princi.html + +# From Paul Eggert (2000-12-04): +# That URL (2000-10-26, in Spanish) says they planned to use US-style DST. + +# From Rives McDow (2000-12-01): +# Dominican Republic changed its mind and presidential decree on Tuesday, +# November 28, 2000, with a new decree. On Sunday, December 3 at 1:00 AM the +# Dominican Republic will be reverting to 8 hours from the International Date +# Line, and will not be using DST in the foreseeable future. The reason they +# decided to use DST was to be in synch with Puerto Rico, who was also going +# to implement DST. When Puerto Rico didn't implement DST, the president +# decided to revert. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule DR 1966 only - Oct 30 0:00 1:00 D +Rule DR 1967 only - Feb 28 0:00 0 S +Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD +Rule DR 1970 only - Feb 21 0:00 0 S +Rule DR 1971 only - Jan 20 0:00 0 S +Rule DR 1972 1974 - Jan 21 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Santo_Domingo -4:39:36 - LMT 1890 + -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT + -5:00 DR E%sT 1974 Oct 27 + -4:00 - AST 2000 Oct 29 02:00 + -5:00 US E%sT 2000 Dec 3 01:00 + -4:00 - AST + +# El Salvador + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D +Rule Salv 1987 1988 - Sep lastSun 0:00 0 S +# There are too many San Salvadors elsewhere, so use America/El_Salvador +# instead of America/San_Salvador. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador + -6:00 Salv C%sT + +# Grenada +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's + -4:00 - AST + +# Guadeloupe +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre + -4:00 - AST +# St Barthelemy +Link America/Guadeloupe America/St_Barthelemy +# St Martin (French part) +Link America/Guadeloupe America/Marigot + +# Guatemala +# +# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen: +# Diario Co Latino, at +# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079, +# says in an article dated 2006-04-19 that the Guatemalan government had +# decided on that date to advance official time by 60 minutes, to lessen the +# impact of the elevated cost of oil.... Daylight saving time will last from +# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified). +# From Paul Eggert (2006-06-22): +# The Ministry of Energy and Mines, press release CP-15/2006 +# (2006-04-19), says DST ends at 24:00. See +# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Guat 1973 only - Nov 25 0:00 1:00 D +Rule Guat 1974 only - Feb 24 0:00 0 S +Rule Guat 1983 only - May 21 0:00 1:00 D +Rule Guat 1983 only - Sep 22 0:00 0 S +Rule Guat 1991 only - Mar 23 0:00 1:00 D +Rule Guat 1991 only - Sep 7 0:00 0 S +Rule Guat 2006 only - Apr 30 0:00 1:00 D +Rule Guat 2006 only - Oct 1 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5 + -6:00 Guat C%sT + +# Haiti +# From Gwillim Law (2005-04-15): +# Risto O. Nykanen wrote me that Haiti is now on DST. +# I searched for confirmation, and I found a +# <a href="http://www.haitianconsulate.org/time.doc"> press release +# on the Web page of the Haitian Consulate in Chicago (2005-03-31), +# </a>. Translated from French, it says: +# +# "The Prime Minister's Communication Office notifies the public in general +# and the press in particular that, following a decision of the Interior +# Ministry and the Territorial Collectivities [I suppose that means the +# provinces], Haiti will move to Eastern Daylight Time in the night from next +# Saturday the 2nd to Sunday the 3rd. +# +# "Consequently, the Prime Minister's Communication Office wishes to inform +# the population that the country's clocks will be set forward one hour +# starting at midnight. This provision will hold until the last Saturday in +# October 2005. +# +# "Port-au-Prince, March 31, 2005" +# +# From Steffen Thorsen (2006-04-04): +# I have been informed by users that Haiti observes DST this year like +# last year, so the current "only" rule for 2005 might be changed to a +# "max" rule or to last until 2006. (Who knows if they will observe DST +# next year or if they will extend their DST like US/Canada next year). +# +# I have found this article about it (in French): +# http://www.haitipressnetwork.com/news.cfm?articleID=7612 +# +# The reason seems to be an energy crisis. + +# From Stephen Colebourne (2007-02-22): +# Some IATA info: Haiti won't be having DST in 2007. + + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Haiti 1983 only - May 8 0:00 1:00 D +Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D +Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S +# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s. +# Go with IATA. +Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D +Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S +Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D +Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Port-au-Prince -4:49:20 - LMT 1890 + -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT + -5:00 Haiti E%sT + +# Honduras +# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1. + +# From Paul Eggert (2006-05-05): +# worldtimezone.com reports a 2006-05-02 Spanish-language AP article +# saying Honduras will start using DST midnight Saturday, effective 4 +# months until September. La Tribuna reported today +# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president +# of Honduras, refused to back down on this. + +# From Jesper Norgaard Welen (2006-08-08): +# It seems that Honduras has returned from DST to standard time this Monday at +# 00:00 hours (prolonging Sunday to 25 hours duration). +# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html + +# From Paul Eggert (2006-08-08): +# Also see Diario El Heraldo, The country returns to standard time (2006-08-08) +# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>. +# It mentions executive decree 18-2006. + +# From Steffen Thorsen (2006-08-17): +# Honduras will observe DST from 2007 to 2009, exact dates are not +# published, I have located this authoritative source: +# http://www.presidencia.gob.hn/noticia.aspx?nId=47 + +# From Steffen Thorsen (2007-03-30): +# http://www.laprensahn.com/pais_nota.php?id04962=7386 +# So it seems that Honduras will not enter DST this year.... + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D +Rule Hond 1987 1988 - Sep lastSun 0:00 0 S +Rule Hond 2006 only - May Sun>=1 0:00 1:00 D +Rule Hond 2006 only - Aug Mon>=1 0:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr + -6:00 Hond C%sT +# +# Great Swan I ceded by US to Honduras in 1972 + +# Jamaica + +# From Bob Devine (1988-01-28): +# Follows US rules. + +# From U. S. Naval Observatory (1989-01-19): +# JAMAICA 5 H BEHIND UTC + +# From Shanks & Pottenger: +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1974 Apr 28 2:00 + -5:00 US E%sT 1984 + -5:00 - EST + +# Martinique +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France + -4:04:20 - FFMT 1911 May # Fort-de-France MT + -4:00 - AST 1980 Apr 6 + -4:00 1:00 ADT 1980 Sep 28 + -4:00 - AST + +# Montserrat +# From Paul Eggert (2006-03-22): +# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital. +# world.gazetteer.com says Cork Hill is the most populous location now. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill + -4:00 - AST + +# Nicaragua +# +# This uses Shanks & Pottenger for times before 2005. +# +# From Steffen Thorsen (2005-04-12): +# I've got reports from 8 different people that Nicaragua just started +# DST on Sunday 2005-04-10, in order to save energy because of +# expensive petroleum. The exact end date for DST is not yet +# announced, only "September" but some sites also say "mid-September". +# Some background information is available on the President's official site: +# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm +# The Decree, no 23-2005 is available here: +# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf +# +# From Paul Eggert (2005-05-01): +# The decree doesn't say anything about daylight saving, but for now let's +# assume that it is daylight saving.... +# +# From Gwillim Law (2005-04-21): +# The Associated Press story on the time change, which can be found at +# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html +# and elsewhere, says (fifth paragraph, translated from Spanish): "The last +# time that a change of clocks was applied to save energy was in the year 2000 +# during the Arnoldo Aleman administration."... +# The northamerica file says that Nicaragua has been on UTC-6 continuously +# since December 1998. I wasn't able to find any details of Nicaraguan time +# changes in 2000. Perhaps a note could be added to the northamerica file, to +# the effect that we have indirect evidence that DST was observed in 2000. +# +# From Jesper Norgaard Welen (2005-11-02): +# Nicaragua left DST the 2005-10-02 at 00:00 (local time). +# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm +# (2005-09-26) +# +# From Jesper Norgaard Welen (2006-05-05): +# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410 +# (my informal translation) +# By order of the president of the republic, Enrique Bolanos, Nicaragua +# advanced by sixty minutes their official time, yesterday at 2 in the +# morning, and will stay that way until 30.th. of september. +# +# From Jesper Norgaard Welen (2006-09-30): +# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf +# My informal translation runs: +# The natural sun time is restored in all the national territory, in that the +# time is returned one hour at 01:00 am of October 1 of 2006. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D +Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S +Rule Nic 2005 only - Apr 10 0:00 1:00 D +Rule Nic 2005 only - Oct Sun>=1 0:00 0 S +Rule Nic 2006 only - Apr 30 2:00 1:00 D +Rule Nic 2006 only - Oct Sun>=1 1:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Managua -5:45:08 - LMT 1890 + -5:45:12 - MMT 1934 Jun 23 # Managua Mean Time? + -6:00 - CST 1973 May + -5:00 - EST 1975 Feb 16 + -6:00 Nic C%sT 1992 Jan 1 4:00 + -5:00 - EST 1992 Sep 24 + -6:00 - CST 1993 + -5:00 - EST 1997 + -6:00 Nic C%sT + +# Panama +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Panama -5:18:08 - LMT 1890 + -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time + -5:00 - EST + +# Puerto Rico +# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan + -4:00 - AST 1942 May 3 + -4:00 US A%sT 1946 + -4:00 - AST + +# St Kitts-Nevis +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre + -4:00 - AST + +# St Lucia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries + -4:04:00 - CMT 1912 # Castries Mean Time + -4:00 - AST + +# St Pierre and Miquelon +# There are too many St Pierres elsewhere, so we'll use `Miquelon'. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre + -4:00 - AST 1980 May + -3:00 - PMST 1987 # Pierre & Miquelon Time + -3:00 Canada PM%sT + +# St Vincent and the Grenadines +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown + -4:04:56 - KMT 1912 # Kingstown Mean Time + -4:00 - AST + +# Turks and Caicos +# +# From Chris Dunn in +# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007> +# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the +# daylight saving dates for time changes have been adjusted to match +# the recent U.S. change of dates. +# +# From Brian Inglis (2007-04-28): +# http://www.turksandcaicos.tc/calendar/index.htm [2007-04-26] +# there is an entry for Nov 4 "Daylight Savings Time Ends 2007" and three +# rows before that there is an out of date entry for Oct: +# "Eastern Standard Times Begins 2007 +# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time" +# indicating that the normal ET rules are followed. +# +# From Paul Eggert (2006-05-01): +# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998) +# says they switch at midnight. Go with Shanks & Pottenger. +# +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D +Rule TC 1979 2006 - Oct lastSun 2:00 0 S +Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D +Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D +Rule TC 2007 max - Nov Sun>=1 2:00 0 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Grand_Turk -4:44:32 - LMT 1890 + -5:07:12 - KMT 1912 Feb # Kingston Mean Time + -5:00 TC E%sT + +# British Virgin Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town + -4:00 - AST + +# Virgin Is +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie + -4:00 - AST diff --git a/libkcal/libical/tzdata/pacificnew b/libkcal/libical/tzdata/pacificnew new file mode 100644 index 000000000..667940bf5 --- /dev/null +++ b/libkcal/libical/tzdata/pacificnew @@ -0,0 +1,26 @@ +# @(#)pacificnew 8.1 + +# From Arthur David Olson (1989-04-05): +# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill +# establishing "Pacific Presidential Election Time"; it was not acted on +# by the Senate or signed into law by the President. +# You might want to change the "PE" (Presidential Election) below to +# "Q" (Quadrennial) to maintain three-character zone abbreviations. +# If you're really conservative, you might want to change it to "D". +# Avoid "L" (Leap Year), which won't be true in 2100. + +# If Presidential Election Time is ever established, replace "XXXX" below +# with the year the law takes effect and uncomment the "##" lines. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D +## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE +## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S +## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX +## -8:00 Twilite P%sT + +# For now... +Link America/Los_Angeles US/Pacific-New ## diff --git a/libkcal/libical/tzdata/solar87 b/libkcal/libical/tzdata/solar87 new file mode 100644 index 000000000..71839320a --- /dev/null +++ b/libkcal/libical/tzdata/solar87 @@ -0,0 +1,388 @@ +# @(#)solar87 8.1 + +# So much for footnotes about Saudi Arabia. +# Apparent noon times below are for Riyadh; your mileage will vary. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol87 1987 only - Jan 1 12:03:20s -0:03:20 - +Rule sol87 1987 only - Jan 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jan 3 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jan 4 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jan 5 12:05:10s -0:05:10 - +Rule sol87 1987 only - Jan 6 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jan 7 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jan 8 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jan 9 12:06:55s -0:06:55 - +Rule sol87 1987 only - Jan 10 12:07:20s -0:07:20 - +Rule sol87 1987 only - Jan 11 12:07:45s -0:07:45 - +Rule sol87 1987 only - Jan 12 12:08:10s -0:08:10 - +Rule sol87 1987 only - Jan 13 12:08:30s -0:08:30 - +Rule sol87 1987 only - Jan 14 12:08:55s -0:08:55 - +Rule sol87 1987 only - Jan 15 12:09:15s -0:09:15 - +Rule sol87 1987 only - Jan 16 12:09:35s -0:09:35 - +Rule sol87 1987 only - Jan 17 12:09:55s -0:09:55 - +Rule sol87 1987 only - Jan 18 12:10:15s -0:10:15 - +Rule sol87 1987 only - Jan 19 12:10:35s -0:10:35 - +Rule sol87 1987 only - Jan 20 12:10:55s -0:10:55 - +Rule sol87 1987 only - Jan 21 12:11:10s -0:11:10 - +Rule sol87 1987 only - Jan 22 12:11:30s -0:11:30 - +Rule sol87 1987 only - Jan 23 12:11:45s -0:11:45 - +Rule sol87 1987 only - Jan 24 12:12:00s -0:12:00 - +Rule sol87 1987 only - Jan 25 12:12:15s -0:12:15 - +Rule sol87 1987 only - Jan 26 12:12:30s -0:12:30 - +Rule sol87 1987 only - Jan 27 12:12:40s -0:12:40 - +Rule sol87 1987 only - Jan 28 12:12:55s -0:12:55 - +Rule sol87 1987 only - Jan 29 12:13:05s -0:13:05 - +Rule sol87 1987 only - Jan 30 12:13:15s -0:13:15 - +Rule sol87 1987 only - Jan 31 12:13:25s -0:13:25 - +Rule sol87 1987 only - Feb 1 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 2 12:13:40s -0:13:40 - +Rule sol87 1987 only - Feb 3 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 4 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 5 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 6 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 7 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 8 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 9 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 10 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 11 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 12 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 13 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 14 12:14:15s -0:14:15 - +Rule sol87 1987 only - Feb 15 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 16 12:14:10s -0:14:10 - +Rule sol87 1987 only - Feb 17 12:14:05s -0:14:05 - +Rule sol87 1987 only - Feb 18 12:14:00s -0:14:00 - +Rule sol87 1987 only - Feb 19 12:13:55s -0:13:55 - +Rule sol87 1987 only - Feb 20 12:13:50s -0:13:50 - +Rule sol87 1987 only - Feb 21 12:13:45s -0:13:45 - +Rule sol87 1987 only - Feb 22 12:13:35s -0:13:35 - +Rule sol87 1987 only - Feb 23 12:13:30s -0:13:30 - +Rule sol87 1987 only - Feb 24 12:13:20s -0:13:20 - +Rule sol87 1987 only - Feb 25 12:13:10s -0:13:10 - +Rule sol87 1987 only - Feb 26 12:13:00s -0:13:00 - +Rule sol87 1987 only - Feb 27 12:12:50s -0:12:50 - +Rule sol87 1987 only - Feb 28 12:12:40s -0:12:40 - +Rule sol87 1987 only - Mar 1 12:12:30s -0:12:30 - +Rule sol87 1987 only - Mar 2 12:12:20s -0:12:20 - +Rule sol87 1987 only - Mar 3 12:12:05s -0:12:05 - +Rule sol87 1987 only - Mar 4 12:11:55s -0:11:55 - +Rule sol87 1987 only - Mar 5 12:11:40s -0:11:40 - +Rule sol87 1987 only - Mar 6 12:11:25s -0:11:25 - +Rule sol87 1987 only - Mar 7 12:11:15s -0:11:15 - +Rule sol87 1987 only - Mar 8 12:11:00s -0:11:00 - +Rule sol87 1987 only - Mar 9 12:10:45s -0:10:45 - +Rule sol87 1987 only - Mar 10 12:10:30s -0:10:30 - +Rule sol87 1987 only - Mar 11 12:10:15s -0:10:15 - +Rule sol87 1987 only - Mar 12 12:09:55s -0:09:55 - +Rule sol87 1987 only - Mar 13 12:09:40s -0:09:40 - +Rule sol87 1987 only - Mar 14 12:09:25s -0:09:25 - +Rule sol87 1987 only - Mar 15 12:09:10s -0:09:10 - +Rule sol87 1987 only - Mar 16 12:08:50s -0:08:50 - +Rule sol87 1987 only - Mar 17 12:08:35s -0:08:35 - +Rule sol87 1987 only - Mar 18 12:08:15s -0:08:15 - +Rule sol87 1987 only - Mar 19 12:08:00s -0:08:00 - +Rule sol87 1987 only - Mar 20 12:07:40s -0:07:40 - +Rule sol87 1987 only - Mar 21 12:07:25s -0:07:25 - +Rule sol87 1987 only - Mar 22 12:07:05s -0:07:05 - +Rule sol87 1987 only - Mar 23 12:06:50s -0:06:50 - +Rule sol87 1987 only - Mar 24 12:06:30s -0:06:30 - +Rule sol87 1987 only - Mar 25 12:06:10s -0:06:10 - +Rule sol87 1987 only - Mar 26 12:05:55s -0:05:55 - +Rule sol87 1987 only - Mar 27 12:05:35s -0:05:35 - +Rule sol87 1987 only - Mar 28 12:05:15s -0:05:15 - +Rule sol87 1987 only - Mar 29 12:05:00s -0:05:00 - +Rule sol87 1987 only - Mar 30 12:04:40s -0:04:40 - +Rule sol87 1987 only - Mar 31 12:04:25s -0:04:25 - +Rule sol87 1987 only - Apr 1 12:04:05s -0:04:05 - +Rule sol87 1987 only - Apr 2 12:03:45s -0:03:45 - +Rule sol87 1987 only - Apr 3 12:03:30s -0:03:30 - +Rule sol87 1987 only - Apr 4 12:03:10s -0:03:10 - +Rule sol87 1987 only - Apr 5 12:02:55s -0:02:55 - +Rule sol87 1987 only - Apr 6 12:02:35s -0:02:35 - +Rule sol87 1987 only - Apr 7 12:02:20s -0:02:20 - +Rule sol87 1987 only - Apr 8 12:02:05s -0:02:05 - +Rule sol87 1987 only - Apr 9 12:01:45s -0:01:45 - +Rule sol87 1987 only - Apr 10 12:01:30s -0:01:30 - +Rule sol87 1987 only - Apr 11 12:01:15s -0:01:15 - +Rule sol87 1987 only - Apr 12 12:00:55s -0:00:55 - +Rule sol87 1987 only - Apr 13 12:00:40s -0:00:40 - +Rule sol87 1987 only - Apr 14 12:00:25s -0:00:25 - +Rule sol87 1987 only - Apr 15 12:00:10s -0:00:10 - +Rule sol87 1987 only - Apr 16 11:59:55s 0:00:05 - +Rule sol87 1987 only - Apr 17 11:59:45s 0:00:15 - +Rule sol87 1987 only - Apr 18 11:59:30s 0:00:30 - +Rule sol87 1987 only - Apr 19 11:59:15s 0:00:45 - +Rule sol87 1987 only - Apr 20 11:59:05s 0:00:55 - +Rule sol87 1987 only - Apr 21 11:58:50s 0:01:10 - +Rule sol87 1987 only - Apr 22 11:58:40s 0:01:20 - +Rule sol87 1987 only - Apr 23 11:58:25s 0:01:35 - +Rule sol87 1987 only - Apr 24 11:58:15s 0:01:45 - +Rule sol87 1987 only - Apr 25 11:58:05s 0:01:55 - +Rule sol87 1987 only - Apr 26 11:57:55s 0:02:05 - +Rule sol87 1987 only - Apr 27 11:57:45s 0:02:15 - +Rule sol87 1987 only - Apr 28 11:57:35s 0:02:25 - +Rule sol87 1987 only - Apr 29 11:57:25s 0:02:35 - +Rule sol87 1987 only - Apr 30 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 1 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 2 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 3 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 4 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 5 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 6 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 7 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 8 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 9 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 10 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 11 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 12 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 13 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 14 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 15 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 16 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 17 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - May 19 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 20 11:56:25s 0:03:35 - +Rule sol87 1987 only - May 21 11:56:30s 0:03:30 - +Rule sol87 1987 only - May 22 11:56:35s 0:03:25 - +Rule sol87 1987 only - May 23 11:56:40s 0:03:20 - +Rule sol87 1987 only - May 24 11:56:45s 0:03:15 - +Rule sol87 1987 only - May 25 11:56:50s 0:03:10 - +Rule sol87 1987 only - May 26 11:56:55s 0:03:05 - +Rule sol87 1987 only - May 27 11:57:00s 0:03:00 - +Rule sol87 1987 only - May 28 11:57:10s 0:02:50 - +Rule sol87 1987 only - May 29 11:57:15s 0:02:45 - +Rule sol87 1987 only - May 30 11:57:25s 0:02:35 - +Rule sol87 1987 only - May 31 11:57:30s 0:02:30 - +Rule sol87 1987 only - Jun 1 11:57:40s 0:02:20 - +Rule sol87 1987 only - Jun 2 11:57:50s 0:02:10 - +Rule sol87 1987 only - Jun 3 11:58:00s 0:02:00 - +Rule sol87 1987 only - Jun 4 11:58:10s 0:01:50 - +Rule sol87 1987 only - Jun 5 11:58:20s 0:01:40 - +Rule sol87 1987 only - Jun 6 11:58:30s 0:01:30 - +Rule sol87 1987 only - Jun 7 11:58:40s 0:01:20 - +Rule sol87 1987 only - Jun 8 11:58:50s 0:01:10 - +Rule sol87 1987 only - Jun 9 11:59:05s 0:00:55 - +Rule sol87 1987 only - Jun 10 11:59:15s 0:00:45 - +Rule sol87 1987 only - Jun 11 11:59:30s 0:00:30 - +Rule sol87 1987 only - Jun 12 11:59:40s 0:00:20 - +Rule sol87 1987 only - Jun 13 11:59:50s 0:00:10 - +Rule sol87 1987 only - Jun 14 12:00:05s -0:00:05 - +Rule sol87 1987 only - Jun 15 12:00:15s -0:00:15 - +Rule sol87 1987 only - Jun 16 12:00:30s -0:00:30 - +Rule sol87 1987 only - Jun 17 12:00:45s -0:00:45 - +Rule sol87 1987 only - Jun 18 12:00:55s -0:00:55 - +Rule sol87 1987 only - Jun 19 12:01:10s -0:01:10 - +Rule sol87 1987 only - Jun 20 12:01:20s -0:01:20 - +Rule sol87 1987 only - Jun 21 12:01:35s -0:01:35 - +Rule sol87 1987 only - Jun 22 12:01:50s -0:01:50 - +Rule sol87 1987 only - Jun 23 12:02:00s -0:02:00 - +Rule sol87 1987 only - Jun 24 12:02:15s -0:02:15 - +Rule sol87 1987 only - Jun 25 12:02:25s -0:02:25 - +Rule sol87 1987 only - Jun 26 12:02:40s -0:02:40 - +Rule sol87 1987 only - Jun 27 12:02:50s -0:02:50 - +Rule sol87 1987 only - Jun 28 12:03:05s -0:03:05 - +Rule sol87 1987 only - Jun 29 12:03:15s -0:03:15 - +Rule sol87 1987 only - Jun 30 12:03:30s -0:03:30 - +Rule sol87 1987 only - Jul 1 12:03:40s -0:03:40 - +Rule sol87 1987 only - Jul 2 12:03:50s -0:03:50 - +Rule sol87 1987 only - Jul 3 12:04:05s -0:04:05 - +Rule sol87 1987 only - Jul 4 12:04:15s -0:04:15 - +Rule sol87 1987 only - Jul 5 12:04:25s -0:04:25 - +Rule sol87 1987 only - Jul 6 12:04:35s -0:04:35 - +Rule sol87 1987 only - Jul 7 12:04:45s -0:04:45 - +Rule sol87 1987 only - Jul 8 12:04:55s -0:04:55 - +Rule sol87 1987 only - Jul 9 12:05:05s -0:05:05 - +Rule sol87 1987 only - Jul 10 12:05:15s -0:05:15 - +Rule sol87 1987 only - Jul 11 12:05:20s -0:05:20 - +Rule sol87 1987 only - Jul 12 12:05:30s -0:05:30 - +Rule sol87 1987 only - Jul 13 12:05:40s -0:05:40 - +Rule sol87 1987 only - Jul 14 12:05:45s -0:05:45 - +Rule sol87 1987 only - Jul 15 12:05:50s -0:05:50 - +Rule sol87 1987 only - Jul 16 12:06:00s -0:06:00 - +Rule sol87 1987 only - Jul 17 12:06:05s -0:06:05 - +Rule sol87 1987 only - Jul 18 12:06:10s -0:06:10 - +Rule sol87 1987 only - Jul 19 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 20 12:06:15s -0:06:15 - +Rule sol87 1987 only - Jul 21 12:06:20s -0:06:20 - +Rule sol87 1987 only - Jul 22 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 23 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 24 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 25 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 26 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 27 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 28 12:06:30s -0:06:30 - +Rule sol87 1987 only - Jul 29 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 30 12:06:25s -0:06:25 - +Rule sol87 1987 only - Jul 31 12:06:25s -0:06:25 - +Rule sol87 1987 only - Aug 1 12:06:20s -0:06:20 - +Rule sol87 1987 only - Aug 2 12:06:15s -0:06:15 - +Rule sol87 1987 only - Aug 3 12:06:10s -0:06:10 - +Rule sol87 1987 only - Aug 4 12:06:05s -0:06:05 - +Rule sol87 1987 only - Aug 5 12:06:00s -0:06:00 - +Rule sol87 1987 only - Aug 6 12:05:55s -0:05:55 - +Rule sol87 1987 only - Aug 7 12:05:50s -0:05:50 - +Rule sol87 1987 only - Aug 8 12:05:40s -0:05:40 - +Rule sol87 1987 only - Aug 9 12:05:35s -0:05:35 - +Rule sol87 1987 only - Aug 10 12:05:25s -0:05:25 - +Rule sol87 1987 only - Aug 11 12:05:15s -0:05:15 - +Rule sol87 1987 only - Aug 12 12:05:05s -0:05:05 - +Rule sol87 1987 only - Aug 13 12:04:55s -0:04:55 - +Rule sol87 1987 only - Aug 14 12:04:45s -0:04:45 - +Rule sol87 1987 only - Aug 15 12:04:35s -0:04:35 - +Rule sol87 1987 only - Aug 16 12:04:25s -0:04:25 - +Rule sol87 1987 only - Aug 17 12:04:10s -0:04:10 - +Rule sol87 1987 only - Aug 18 12:04:00s -0:04:00 - +Rule sol87 1987 only - Aug 19 12:03:45s -0:03:45 - +Rule sol87 1987 only - Aug 20 12:03:30s -0:03:30 - +Rule sol87 1987 only - Aug 21 12:03:15s -0:03:15 - +Rule sol87 1987 only - Aug 22 12:03:00s -0:03:00 - +Rule sol87 1987 only - Aug 23 12:02:45s -0:02:45 - +Rule sol87 1987 only - Aug 24 12:02:30s -0:02:30 - +Rule sol87 1987 only - Aug 25 12:02:15s -0:02:15 - +Rule sol87 1987 only - Aug 26 12:02:00s -0:02:00 - +Rule sol87 1987 only - Aug 27 12:01:40s -0:01:40 - +Rule sol87 1987 only - Aug 28 12:01:25s -0:01:25 - +Rule sol87 1987 only - Aug 29 12:01:05s -0:01:05 - +Rule sol87 1987 only - Aug 30 12:00:50s -0:00:50 - +Rule sol87 1987 only - Aug 31 12:00:30s -0:00:30 - +Rule sol87 1987 only - Sep 1 12:00:10s -0:00:10 - +Rule sol87 1987 only - Sep 2 11:59:50s 0:00:10 - +Rule sol87 1987 only - Sep 3 11:59:35s 0:00:25 - +Rule sol87 1987 only - Sep 4 11:59:15s 0:00:45 - +Rule sol87 1987 only - Sep 5 11:58:55s 0:01:05 - +Rule sol87 1987 only - Sep 6 11:58:35s 0:01:25 - +Rule sol87 1987 only - Sep 7 11:58:15s 0:01:45 - +Rule sol87 1987 only - Sep 8 11:57:55s 0:02:05 - +Rule sol87 1987 only - Sep 9 11:57:30s 0:02:30 - +Rule sol87 1987 only - Sep 10 11:57:10s 0:02:50 - +Rule sol87 1987 only - Sep 11 11:56:50s 0:03:10 - +Rule sol87 1987 only - Sep 12 11:56:30s 0:03:30 - +Rule sol87 1987 only - Sep 13 11:56:10s 0:03:50 - +Rule sol87 1987 only - Sep 14 11:55:45s 0:04:15 - +Rule sol87 1987 only - Sep 15 11:55:25s 0:04:35 - +Rule sol87 1987 only - Sep 16 11:55:05s 0:04:55 - +Rule sol87 1987 only - Sep 17 11:54:45s 0:05:15 - +Rule sol87 1987 only - Sep 18 11:54:20s 0:05:40 - +Rule sol87 1987 only - Sep 19 11:54:00s 0:06:00 - +Rule sol87 1987 only - Sep 20 11:53:40s 0:06:20 - +Rule sol87 1987 only - Sep 21 11:53:15s 0:06:45 - +Rule sol87 1987 only - Sep 22 11:52:55s 0:07:05 - +Rule sol87 1987 only - Sep 23 11:52:35s 0:07:25 - +Rule sol87 1987 only - Sep 24 11:52:15s 0:07:45 - +Rule sol87 1987 only - Sep 25 11:51:55s 0:08:05 - +Rule sol87 1987 only - Sep 26 11:51:35s 0:08:25 - +Rule sol87 1987 only - Sep 27 11:51:10s 0:08:50 - +Rule sol87 1987 only - Sep 28 11:50:50s 0:09:10 - +Rule sol87 1987 only - Sep 29 11:50:30s 0:09:30 - +Rule sol87 1987 only - Sep 30 11:50:10s 0:09:50 - +Rule sol87 1987 only - Oct 1 11:49:50s 0:10:10 - +Rule sol87 1987 only - Oct 2 11:49:35s 0:10:25 - +Rule sol87 1987 only - Oct 3 11:49:15s 0:10:45 - +Rule sol87 1987 only - Oct 4 11:48:55s 0:11:05 - +Rule sol87 1987 only - Oct 5 11:48:35s 0:11:25 - +Rule sol87 1987 only - Oct 6 11:48:20s 0:11:40 - +Rule sol87 1987 only - Oct 7 11:48:00s 0:12:00 - +Rule sol87 1987 only - Oct 8 11:47:45s 0:12:15 - +Rule sol87 1987 only - Oct 9 11:47:25s 0:12:35 - +Rule sol87 1987 only - Oct 10 11:47:10s 0:12:50 - +Rule sol87 1987 only - Oct 11 11:46:55s 0:13:05 - +Rule sol87 1987 only - Oct 12 11:46:40s 0:13:20 - +Rule sol87 1987 only - Oct 13 11:46:25s 0:13:35 - +Rule sol87 1987 only - Oct 14 11:46:10s 0:13:50 - +Rule sol87 1987 only - Oct 15 11:45:55s 0:14:05 - +Rule sol87 1987 only - Oct 16 11:45:45s 0:14:15 - +Rule sol87 1987 only - Oct 17 11:45:30s 0:14:30 - +Rule sol87 1987 only - Oct 18 11:45:20s 0:14:40 - +Rule sol87 1987 only - Oct 19 11:45:05s 0:14:55 - +Rule sol87 1987 only - Oct 20 11:44:55s 0:15:05 - +Rule sol87 1987 only - Oct 21 11:44:45s 0:15:15 - +Rule sol87 1987 only - Oct 22 11:44:35s 0:15:25 - +Rule sol87 1987 only - Oct 23 11:44:25s 0:15:35 - +Rule sol87 1987 only - Oct 24 11:44:20s 0:15:40 - +Rule sol87 1987 only - Oct 25 11:44:10s 0:15:50 - +Rule sol87 1987 only - Oct 26 11:44:05s 0:15:55 - +Rule sol87 1987 only - Oct 27 11:43:55s 0:16:05 - +Rule sol87 1987 only - Oct 28 11:43:50s 0:16:10 - +Rule sol87 1987 only - Oct 29 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 30 11:43:45s 0:16:15 - +Rule sol87 1987 only - Oct 31 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 1 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 2 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 3 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 4 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 5 11:43:35s 0:16:25 - +Rule sol87 1987 only - Nov 6 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 7 11:43:40s 0:16:20 - +Rule sol87 1987 only - Nov 8 11:43:45s 0:16:15 - +Rule sol87 1987 only - Nov 9 11:43:50s 0:16:10 - +Rule sol87 1987 only - Nov 10 11:43:55s 0:16:05 - +Rule sol87 1987 only - Nov 11 11:44:00s 0:16:00 - +Rule sol87 1987 only - Nov 12 11:44:05s 0:15:55 - +Rule sol87 1987 only - Nov 13 11:44:15s 0:15:45 - +Rule sol87 1987 only - Nov 14 11:44:20s 0:15:40 - +Rule sol87 1987 only - Nov 15 11:44:30s 0:15:30 - +Rule sol87 1987 only - Nov 16 11:44:40s 0:15:20 - +Rule sol87 1987 only - Nov 17 11:44:50s 0:15:10 - +Rule sol87 1987 only - Nov 18 11:45:05s 0:14:55 - +Rule sol87 1987 only - Nov 19 11:45:15s 0:14:45 - +Rule sol87 1987 only - Nov 20 11:45:30s 0:14:30 - +Rule sol87 1987 only - Nov 21 11:45:45s 0:14:15 - +Rule sol87 1987 only - Nov 22 11:46:00s 0:14:00 - +Rule sol87 1987 only - Nov 23 11:46:15s 0:13:45 - +Rule sol87 1987 only - Nov 24 11:46:30s 0:13:30 - +Rule sol87 1987 only - Nov 25 11:46:50s 0:13:10 - +Rule sol87 1987 only - Nov 26 11:47:10s 0:12:50 - +Rule sol87 1987 only - Nov 27 11:47:25s 0:12:35 - +Rule sol87 1987 only - Nov 28 11:47:45s 0:12:15 - +Rule sol87 1987 only - Nov 29 11:48:05s 0:11:55 - +Rule sol87 1987 only - Nov 30 11:48:30s 0:11:30 - +Rule sol87 1987 only - Dec 1 11:48:50s 0:11:10 - +Rule sol87 1987 only - Dec 2 11:49:10s 0:10:50 - +Rule sol87 1987 only - Dec 3 11:49:35s 0:10:25 - +Rule sol87 1987 only - Dec 4 11:50:00s 0:10:00 - +Rule sol87 1987 only - Dec 5 11:50:25s 0:09:35 - +Rule sol87 1987 only - Dec 6 11:50:50s 0:09:10 - +Rule sol87 1987 only - Dec 7 11:51:15s 0:08:45 - +Rule sol87 1987 only - Dec 8 11:51:40s 0:08:20 - +Rule sol87 1987 only - Dec 9 11:52:05s 0:07:55 - +Rule sol87 1987 only - Dec 10 11:52:30s 0:07:30 - +Rule sol87 1987 only - Dec 11 11:53:00s 0:07:00 - +Rule sol87 1987 only - Dec 12 11:53:25s 0:06:35 - +Rule sol87 1987 only - Dec 13 11:53:55s 0:06:05 - +Rule sol87 1987 only - Dec 14 11:54:25s 0:05:35 - +Rule sol87 1987 only - Dec 15 11:54:50s 0:05:10 - +Rule sol87 1987 only - Dec 16 11:55:20s 0:04:40 - +Rule sol87 1987 only - Dec 17 11:55:50s 0:04:10 - +Rule sol87 1987 only - Dec 18 11:56:20s 0:03:40 - +Rule sol87 1987 only - Dec 19 11:56:50s 0:03:10 - +Rule sol87 1987 only - Dec 20 11:57:20s 0:02:40 - +Rule sol87 1987 only - Dec 21 11:57:50s 0:02:10 - +Rule sol87 1987 only - Dec 22 11:58:20s 0:01:40 - +Rule sol87 1987 only - Dec 23 11:58:50s 0:01:10 - +Rule sol87 1987 only - Dec 24 11:59:20s 0:00:40 - +Rule sol87 1987 only - Dec 25 11:59:50s 0:00:10 - +Rule sol87 1987 only - Dec 26 12:00:20s -0:00:20 - +Rule sol87 1987 only - Dec 27 12:00:45s -0:00:45 - +Rule sol87 1987 only - Dec 28 12:01:15s -0:01:15 - +Rule sol87 1987 only - Dec 29 12:01:45s -0:01:45 - +Rule sol87 1987 only - Dec 30 12:02:15s -0:02:15 - +Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1987, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh87 3:07:04 - zzz 1987 + 3:07:04 sol87 zzz 1988 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh87 Mideast/Riyadh87 diff --git a/libkcal/libical/tzdata/solar88 b/libkcal/libical/tzdata/solar88 new file mode 100644 index 000000000..b4cfe8e37 --- /dev/null +++ b/libkcal/libical/tzdata/solar88 @@ -0,0 +1,388 @@ +# @(#)solar88 8.1 + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using formulas in the U.S. Naval Observatory's +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of +# [plus or minus two] seconds during the current year." +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol88 1988 only - Jan 1 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jan 2 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jan 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jan 4 12:04:40s -0:04:40 - +Rule sol88 1988 only - Jan 5 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jan 6 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jan 7 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jan 8 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jan 9 12:06:50s -0:06:50 - +Rule sol88 1988 only - Jan 10 12:07:15s -0:07:15 - +Rule sol88 1988 only - Jan 11 12:07:40s -0:07:40 - +Rule sol88 1988 only - Jan 12 12:08:05s -0:08:05 - +Rule sol88 1988 only - Jan 13 12:08:25s -0:08:25 - +Rule sol88 1988 only - Jan 14 12:08:50s -0:08:50 - +Rule sol88 1988 only - Jan 15 12:09:10s -0:09:10 - +Rule sol88 1988 only - Jan 16 12:09:30s -0:09:30 - +Rule sol88 1988 only - Jan 17 12:09:50s -0:09:50 - +Rule sol88 1988 only - Jan 18 12:10:10s -0:10:10 - +Rule sol88 1988 only - Jan 19 12:10:30s -0:10:30 - +Rule sol88 1988 only - Jan 20 12:10:50s -0:10:50 - +Rule sol88 1988 only - Jan 21 12:11:05s -0:11:05 - +Rule sol88 1988 only - Jan 22 12:11:25s -0:11:25 - +Rule sol88 1988 only - Jan 23 12:11:40s -0:11:40 - +Rule sol88 1988 only - Jan 24 12:11:55s -0:11:55 - +Rule sol88 1988 only - Jan 25 12:12:10s -0:12:10 - +Rule sol88 1988 only - Jan 26 12:12:25s -0:12:25 - +Rule sol88 1988 only - Jan 27 12:12:40s -0:12:40 - +Rule sol88 1988 only - Jan 28 12:12:50s -0:12:50 - +Rule sol88 1988 only - Jan 29 12:13:00s -0:13:00 - +Rule sol88 1988 only - Jan 30 12:13:10s -0:13:10 - +Rule sol88 1988 only - Jan 31 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 1 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 2 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 3 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 4 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 5 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 6 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 7 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 8 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 9 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 10 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 11 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 12 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 13 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 14 12:14:15s -0:14:15 - +Rule sol88 1988 only - Feb 15 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 16 12:14:10s -0:14:10 - +Rule sol88 1988 only - Feb 17 12:14:05s -0:14:05 - +Rule sol88 1988 only - Feb 18 12:14:00s -0:14:00 - +Rule sol88 1988 only - Feb 19 12:13:55s -0:13:55 - +Rule sol88 1988 only - Feb 20 12:13:50s -0:13:50 - +Rule sol88 1988 only - Feb 21 12:13:45s -0:13:45 - +Rule sol88 1988 only - Feb 22 12:13:40s -0:13:40 - +Rule sol88 1988 only - Feb 23 12:13:30s -0:13:30 - +Rule sol88 1988 only - Feb 24 12:13:20s -0:13:20 - +Rule sol88 1988 only - Feb 25 12:13:15s -0:13:15 - +Rule sol88 1988 only - Feb 26 12:13:05s -0:13:05 - +Rule sol88 1988 only - Feb 27 12:12:55s -0:12:55 - +Rule sol88 1988 only - Feb 28 12:12:45s -0:12:45 - +Rule sol88 1988 only - Feb 29 12:12:30s -0:12:30 - +Rule sol88 1988 only - Mar 1 12:12:20s -0:12:20 - +Rule sol88 1988 only - Mar 2 12:12:10s -0:12:10 - +Rule sol88 1988 only - Mar 3 12:11:55s -0:11:55 - +Rule sol88 1988 only - Mar 4 12:11:45s -0:11:45 - +Rule sol88 1988 only - Mar 5 12:11:30s -0:11:30 - +Rule sol88 1988 only - Mar 6 12:11:15s -0:11:15 - +Rule sol88 1988 only - Mar 7 12:11:00s -0:11:00 - +Rule sol88 1988 only - Mar 8 12:10:45s -0:10:45 - +Rule sol88 1988 only - Mar 9 12:10:30s -0:10:30 - +Rule sol88 1988 only - Mar 10 12:10:15s -0:10:15 - +Rule sol88 1988 only - Mar 11 12:10:00s -0:10:00 - +Rule sol88 1988 only - Mar 12 12:09:45s -0:09:45 - +Rule sol88 1988 only - Mar 13 12:09:30s -0:09:30 - +Rule sol88 1988 only - Mar 14 12:09:10s -0:09:10 - +Rule sol88 1988 only - Mar 15 12:08:55s -0:08:55 - +Rule sol88 1988 only - Mar 16 12:08:40s -0:08:40 - +Rule sol88 1988 only - Mar 17 12:08:20s -0:08:20 - +Rule sol88 1988 only - Mar 18 12:08:05s -0:08:05 - +Rule sol88 1988 only - Mar 19 12:07:45s -0:07:45 - +Rule sol88 1988 only - Mar 20 12:07:30s -0:07:30 - +Rule sol88 1988 only - Mar 21 12:07:10s -0:07:10 - +Rule sol88 1988 only - Mar 22 12:06:50s -0:06:50 - +Rule sol88 1988 only - Mar 23 12:06:35s -0:06:35 - +Rule sol88 1988 only - Mar 24 12:06:15s -0:06:15 - +Rule sol88 1988 only - Mar 25 12:06:00s -0:06:00 - +Rule sol88 1988 only - Mar 26 12:05:40s -0:05:40 - +Rule sol88 1988 only - Mar 27 12:05:20s -0:05:20 - +Rule sol88 1988 only - Mar 28 12:05:05s -0:05:05 - +Rule sol88 1988 only - Mar 29 12:04:45s -0:04:45 - +Rule sol88 1988 only - Mar 30 12:04:25s -0:04:25 - +Rule sol88 1988 only - Mar 31 12:04:10s -0:04:10 - +Rule sol88 1988 only - Apr 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Apr 2 12:03:35s -0:03:35 - +Rule sol88 1988 only - Apr 3 12:03:15s -0:03:15 - +Rule sol88 1988 only - Apr 4 12:03:00s -0:03:00 - +Rule sol88 1988 only - Apr 5 12:02:40s -0:02:40 - +Rule sol88 1988 only - Apr 6 12:02:25s -0:02:25 - +Rule sol88 1988 only - Apr 7 12:02:05s -0:02:05 - +Rule sol88 1988 only - Apr 8 12:01:50s -0:01:50 - +Rule sol88 1988 only - Apr 9 12:01:35s -0:01:35 - +Rule sol88 1988 only - Apr 10 12:01:15s -0:01:15 - +Rule sol88 1988 only - Apr 11 12:01:00s -0:01:00 - +Rule sol88 1988 only - Apr 12 12:00:45s -0:00:45 - +Rule sol88 1988 only - Apr 13 12:00:30s -0:00:30 - +Rule sol88 1988 only - Apr 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Apr 15 12:00:00s 0:00:00 - +Rule sol88 1988 only - Apr 16 11:59:45s 0:00:15 - +Rule sol88 1988 only - Apr 17 11:59:30s 0:00:30 - +Rule sol88 1988 only - Apr 18 11:59:20s 0:00:40 - +Rule sol88 1988 only - Apr 19 11:59:05s 0:00:55 - +Rule sol88 1988 only - Apr 20 11:58:55s 0:01:05 - +Rule sol88 1988 only - Apr 21 11:58:40s 0:01:20 - +Rule sol88 1988 only - Apr 22 11:58:30s 0:01:30 - +Rule sol88 1988 only - Apr 23 11:58:15s 0:01:45 - +Rule sol88 1988 only - Apr 24 11:58:05s 0:01:55 - +Rule sol88 1988 only - Apr 25 11:57:55s 0:02:05 - +Rule sol88 1988 only - Apr 26 11:57:45s 0:02:15 - +Rule sol88 1988 only - Apr 27 11:57:35s 0:02:25 - +Rule sol88 1988 only - Apr 28 11:57:30s 0:02:30 - +Rule sol88 1988 only - Apr 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - Apr 30 11:57:10s 0:02:50 - +Rule sol88 1988 only - May 1 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 2 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 3 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 4 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 5 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 6 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 7 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 8 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 9 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 10 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 11 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 12 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 13 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 14 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 15 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 16 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 17 11:56:20s 0:03:40 - +Rule sol88 1988 only - May 18 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 19 11:56:25s 0:03:35 - +Rule sol88 1988 only - May 20 11:56:30s 0:03:30 - +Rule sol88 1988 only - May 21 11:56:35s 0:03:25 - +Rule sol88 1988 only - May 22 11:56:40s 0:03:20 - +Rule sol88 1988 only - May 23 11:56:45s 0:03:15 - +Rule sol88 1988 only - May 24 11:56:50s 0:03:10 - +Rule sol88 1988 only - May 25 11:56:55s 0:03:05 - +Rule sol88 1988 only - May 26 11:57:00s 0:03:00 - +Rule sol88 1988 only - May 27 11:57:05s 0:02:55 - +Rule sol88 1988 only - May 28 11:57:15s 0:02:45 - +Rule sol88 1988 only - May 29 11:57:20s 0:02:40 - +Rule sol88 1988 only - May 30 11:57:30s 0:02:30 - +Rule sol88 1988 only - May 31 11:57:40s 0:02:20 - +Rule sol88 1988 only - Jun 1 11:57:50s 0:02:10 - +Rule sol88 1988 only - Jun 2 11:57:55s 0:02:05 - +Rule sol88 1988 only - Jun 3 11:58:05s 0:01:55 - +Rule sol88 1988 only - Jun 4 11:58:15s 0:01:45 - +Rule sol88 1988 only - Jun 5 11:58:30s 0:01:30 - +Rule sol88 1988 only - Jun 6 11:58:40s 0:01:20 - +Rule sol88 1988 only - Jun 7 11:58:50s 0:01:10 - +Rule sol88 1988 only - Jun 8 11:59:00s 0:01:00 - +Rule sol88 1988 only - Jun 9 11:59:15s 0:00:45 - +Rule sol88 1988 only - Jun 10 11:59:25s 0:00:35 - +Rule sol88 1988 only - Jun 11 11:59:35s 0:00:25 - +Rule sol88 1988 only - Jun 12 11:59:50s 0:00:10 - +Rule sol88 1988 only - Jun 13 12:00:00s 0:00:00 - +Rule sol88 1988 only - Jun 14 12:00:15s -0:00:15 - +Rule sol88 1988 only - Jun 15 12:00:25s -0:00:25 - +Rule sol88 1988 only - Jun 16 12:00:40s -0:00:40 - +Rule sol88 1988 only - Jun 17 12:00:55s -0:00:55 - +Rule sol88 1988 only - Jun 18 12:01:05s -0:01:05 - +Rule sol88 1988 only - Jun 19 12:01:20s -0:01:20 - +Rule sol88 1988 only - Jun 20 12:01:30s -0:01:30 - +Rule sol88 1988 only - Jun 21 12:01:45s -0:01:45 - +Rule sol88 1988 only - Jun 22 12:02:00s -0:02:00 - +Rule sol88 1988 only - Jun 23 12:02:10s -0:02:10 - +Rule sol88 1988 only - Jun 24 12:02:25s -0:02:25 - +Rule sol88 1988 only - Jun 25 12:02:35s -0:02:35 - +Rule sol88 1988 only - Jun 26 12:02:50s -0:02:50 - +Rule sol88 1988 only - Jun 27 12:03:00s -0:03:00 - +Rule sol88 1988 only - Jun 28 12:03:15s -0:03:15 - +Rule sol88 1988 only - Jun 29 12:03:25s -0:03:25 - +Rule sol88 1988 only - Jun 30 12:03:40s -0:03:40 - +Rule sol88 1988 only - Jul 1 12:03:50s -0:03:50 - +Rule sol88 1988 only - Jul 2 12:04:00s -0:04:00 - +Rule sol88 1988 only - Jul 3 12:04:10s -0:04:10 - +Rule sol88 1988 only - Jul 4 12:04:25s -0:04:25 - +Rule sol88 1988 only - Jul 5 12:04:35s -0:04:35 - +Rule sol88 1988 only - Jul 6 12:04:45s -0:04:45 - +Rule sol88 1988 only - Jul 7 12:04:55s -0:04:55 - +Rule sol88 1988 only - Jul 8 12:05:05s -0:05:05 - +Rule sol88 1988 only - Jul 9 12:05:10s -0:05:10 - +Rule sol88 1988 only - Jul 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Jul 11 12:05:30s -0:05:30 - +Rule sol88 1988 only - Jul 12 12:05:35s -0:05:35 - +Rule sol88 1988 only - Jul 13 12:05:45s -0:05:45 - +Rule sol88 1988 only - Jul 14 12:05:50s -0:05:50 - +Rule sol88 1988 only - Jul 15 12:05:55s -0:05:55 - +Rule sol88 1988 only - Jul 16 12:06:00s -0:06:00 - +Rule sol88 1988 only - Jul 17 12:06:05s -0:06:05 - +Rule sol88 1988 only - Jul 18 12:06:10s -0:06:10 - +Rule sol88 1988 only - Jul 19 12:06:15s -0:06:15 - +Rule sol88 1988 only - Jul 20 12:06:20s -0:06:20 - +Rule sol88 1988 only - Jul 21 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 22 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 23 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 24 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 25 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 26 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 27 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 28 12:06:30s -0:06:30 - +Rule sol88 1988 only - Jul 29 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 30 12:06:25s -0:06:25 - +Rule sol88 1988 only - Jul 31 12:06:20s -0:06:20 - +Rule sol88 1988 only - Aug 1 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 2 12:06:15s -0:06:15 - +Rule sol88 1988 only - Aug 3 12:06:10s -0:06:10 - +Rule sol88 1988 only - Aug 4 12:06:05s -0:06:05 - +Rule sol88 1988 only - Aug 5 12:05:55s -0:05:55 - +Rule sol88 1988 only - Aug 6 12:05:50s -0:05:50 - +Rule sol88 1988 only - Aug 7 12:05:45s -0:05:45 - +Rule sol88 1988 only - Aug 8 12:05:35s -0:05:35 - +Rule sol88 1988 only - Aug 9 12:05:25s -0:05:25 - +Rule sol88 1988 only - Aug 10 12:05:20s -0:05:20 - +Rule sol88 1988 only - Aug 11 12:05:10s -0:05:10 - +Rule sol88 1988 only - Aug 12 12:05:00s -0:05:00 - +Rule sol88 1988 only - Aug 13 12:04:50s -0:04:50 - +Rule sol88 1988 only - Aug 14 12:04:35s -0:04:35 - +Rule sol88 1988 only - Aug 15 12:04:25s -0:04:25 - +Rule sol88 1988 only - Aug 16 12:04:15s -0:04:15 - +Rule sol88 1988 only - Aug 17 12:04:00s -0:04:00 - +Rule sol88 1988 only - Aug 18 12:03:50s -0:03:50 - +Rule sol88 1988 only - Aug 19 12:03:35s -0:03:35 - +Rule sol88 1988 only - Aug 20 12:03:20s -0:03:20 - +Rule sol88 1988 only - Aug 21 12:03:05s -0:03:05 - +Rule sol88 1988 only - Aug 22 12:02:50s -0:02:50 - +Rule sol88 1988 only - Aug 23 12:02:35s -0:02:35 - +Rule sol88 1988 only - Aug 24 12:02:20s -0:02:20 - +Rule sol88 1988 only - Aug 25 12:02:00s -0:02:00 - +Rule sol88 1988 only - Aug 26 12:01:45s -0:01:45 - +Rule sol88 1988 only - Aug 27 12:01:30s -0:01:30 - +Rule sol88 1988 only - Aug 28 12:01:10s -0:01:10 - +Rule sol88 1988 only - Aug 29 12:00:50s -0:00:50 - +Rule sol88 1988 only - Aug 30 12:00:35s -0:00:35 - +Rule sol88 1988 only - Aug 31 12:00:15s -0:00:15 - +Rule sol88 1988 only - Sep 1 11:59:55s 0:00:05 - +Rule sol88 1988 only - Sep 2 11:59:35s 0:00:25 - +Rule sol88 1988 only - Sep 3 11:59:20s 0:00:40 - +Rule sol88 1988 only - Sep 4 11:59:00s 0:01:00 - +Rule sol88 1988 only - Sep 5 11:58:40s 0:01:20 - +Rule sol88 1988 only - Sep 6 11:58:20s 0:01:40 - +Rule sol88 1988 only - Sep 7 11:58:00s 0:02:00 - +Rule sol88 1988 only - Sep 8 11:57:35s 0:02:25 - +Rule sol88 1988 only - Sep 9 11:57:15s 0:02:45 - +Rule sol88 1988 only - Sep 10 11:56:55s 0:03:05 - +Rule sol88 1988 only - Sep 11 11:56:35s 0:03:25 - +Rule sol88 1988 only - Sep 12 11:56:15s 0:03:45 - +Rule sol88 1988 only - Sep 13 11:55:50s 0:04:10 - +Rule sol88 1988 only - Sep 14 11:55:30s 0:04:30 - +Rule sol88 1988 only - Sep 15 11:55:10s 0:04:50 - +Rule sol88 1988 only - Sep 16 11:54:50s 0:05:10 - +Rule sol88 1988 only - Sep 17 11:54:25s 0:05:35 - +Rule sol88 1988 only - Sep 18 11:54:05s 0:05:55 - +Rule sol88 1988 only - Sep 19 11:53:45s 0:06:15 - +Rule sol88 1988 only - Sep 20 11:53:25s 0:06:35 - +Rule sol88 1988 only - Sep 21 11:53:00s 0:07:00 - +Rule sol88 1988 only - Sep 22 11:52:40s 0:07:20 - +Rule sol88 1988 only - Sep 23 11:52:20s 0:07:40 - +Rule sol88 1988 only - Sep 24 11:52:00s 0:08:00 - +Rule sol88 1988 only - Sep 25 11:51:40s 0:08:20 - +Rule sol88 1988 only - Sep 26 11:51:15s 0:08:45 - +Rule sol88 1988 only - Sep 27 11:50:55s 0:09:05 - +Rule sol88 1988 only - Sep 28 11:50:35s 0:09:25 - +Rule sol88 1988 only - Sep 29 11:50:15s 0:09:45 - +Rule sol88 1988 only - Sep 30 11:49:55s 0:10:05 - +Rule sol88 1988 only - Oct 1 11:49:35s 0:10:25 - +Rule sol88 1988 only - Oct 2 11:49:20s 0:10:40 - +Rule sol88 1988 only - Oct 3 11:49:00s 0:11:00 - +Rule sol88 1988 only - Oct 4 11:48:40s 0:11:20 - +Rule sol88 1988 only - Oct 5 11:48:25s 0:11:35 - +Rule sol88 1988 only - Oct 6 11:48:05s 0:11:55 - +Rule sol88 1988 only - Oct 7 11:47:50s 0:12:10 - +Rule sol88 1988 only - Oct 8 11:47:30s 0:12:30 - +Rule sol88 1988 only - Oct 9 11:47:15s 0:12:45 - +Rule sol88 1988 only - Oct 10 11:47:00s 0:13:00 - +Rule sol88 1988 only - Oct 11 11:46:45s 0:13:15 - +Rule sol88 1988 only - Oct 12 11:46:30s 0:13:30 - +Rule sol88 1988 only - Oct 13 11:46:15s 0:13:45 - +Rule sol88 1988 only - Oct 14 11:46:00s 0:14:00 - +Rule sol88 1988 only - Oct 15 11:45:45s 0:14:15 - +Rule sol88 1988 only - Oct 16 11:45:35s 0:14:25 - +Rule sol88 1988 only - Oct 17 11:45:20s 0:14:40 - +Rule sol88 1988 only - Oct 18 11:45:10s 0:14:50 - +Rule sol88 1988 only - Oct 19 11:45:00s 0:15:00 - +Rule sol88 1988 only - Oct 20 11:44:45s 0:15:15 - +Rule sol88 1988 only - Oct 21 11:44:40s 0:15:20 - +Rule sol88 1988 only - Oct 22 11:44:30s 0:15:30 - +Rule sol88 1988 only - Oct 23 11:44:20s 0:15:40 - +Rule sol88 1988 only - Oct 24 11:44:10s 0:15:50 - +Rule sol88 1988 only - Oct 25 11:44:05s 0:15:55 - +Rule sol88 1988 only - Oct 26 11:44:00s 0:16:00 - +Rule sol88 1988 only - Oct 27 11:43:55s 0:16:05 - +Rule sol88 1988 only - Oct 28 11:43:50s 0:16:10 - +Rule sol88 1988 only - Oct 29 11:43:45s 0:16:15 - +Rule sol88 1988 only - Oct 30 11:43:40s 0:16:20 - +Rule sol88 1988 only - Oct 31 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 1 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 2 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 3 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 4 11:43:35s 0:16:25 - +Rule sol88 1988 only - Nov 5 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 6 11:43:40s 0:16:20 - +Rule sol88 1988 only - Nov 7 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 8 11:43:45s 0:16:15 - +Rule sol88 1988 only - Nov 9 11:43:50s 0:16:10 - +Rule sol88 1988 only - Nov 10 11:44:00s 0:16:00 - +Rule sol88 1988 only - Nov 11 11:44:05s 0:15:55 - +Rule sol88 1988 only - Nov 12 11:44:10s 0:15:50 - +Rule sol88 1988 only - Nov 13 11:44:20s 0:15:40 - +Rule sol88 1988 only - Nov 14 11:44:30s 0:15:30 - +Rule sol88 1988 only - Nov 15 11:44:40s 0:15:20 - +Rule sol88 1988 only - Nov 16 11:44:50s 0:15:10 - +Rule sol88 1988 only - Nov 17 11:45:00s 0:15:00 - +Rule sol88 1988 only - Nov 18 11:45:15s 0:14:45 - +Rule sol88 1988 only - Nov 19 11:45:25s 0:14:35 - +Rule sol88 1988 only - Nov 20 11:45:40s 0:14:20 - +Rule sol88 1988 only - Nov 21 11:45:55s 0:14:05 - +Rule sol88 1988 only - Nov 22 11:46:10s 0:13:50 - +Rule sol88 1988 only - Nov 23 11:46:30s 0:13:30 - +Rule sol88 1988 only - Nov 24 11:46:45s 0:13:15 - +Rule sol88 1988 only - Nov 25 11:47:05s 0:12:55 - +Rule sol88 1988 only - Nov 26 11:47:20s 0:12:40 - +Rule sol88 1988 only - Nov 27 11:47:40s 0:12:20 - +Rule sol88 1988 only - Nov 28 11:48:00s 0:12:00 - +Rule sol88 1988 only - Nov 29 11:48:25s 0:11:35 - +Rule sol88 1988 only - Nov 30 11:48:45s 0:11:15 - +Rule sol88 1988 only - Dec 1 11:49:05s 0:10:55 - +Rule sol88 1988 only - Dec 2 11:49:30s 0:10:30 - +Rule sol88 1988 only - Dec 3 11:49:55s 0:10:05 - +Rule sol88 1988 only - Dec 4 11:50:15s 0:09:45 - +Rule sol88 1988 only - Dec 5 11:50:40s 0:09:20 - +Rule sol88 1988 only - Dec 6 11:51:05s 0:08:55 - +Rule sol88 1988 only - Dec 7 11:51:35s 0:08:25 - +Rule sol88 1988 only - Dec 8 11:52:00s 0:08:00 - +Rule sol88 1988 only - Dec 9 11:52:25s 0:07:35 - +Rule sol88 1988 only - Dec 10 11:52:55s 0:07:05 - +Rule sol88 1988 only - Dec 11 11:53:20s 0:06:40 - +Rule sol88 1988 only - Dec 12 11:53:50s 0:06:10 - +Rule sol88 1988 only - Dec 13 11:54:15s 0:05:45 - +Rule sol88 1988 only - Dec 14 11:54:45s 0:05:15 - +Rule sol88 1988 only - Dec 15 11:55:15s 0:04:45 - +Rule sol88 1988 only - Dec 16 11:55:45s 0:04:15 - +Rule sol88 1988 only - Dec 17 11:56:15s 0:03:45 - +Rule sol88 1988 only - Dec 18 11:56:40s 0:03:20 - +Rule sol88 1988 only - Dec 19 11:57:10s 0:02:50 - +Rule sol88 1988 only - Dec 20 11:57:40s 0:02:20 - +Rule sol88 1988 only - Dec 21 11:58:10s 0:01:50 - +Rule sol88 1988 only - Dec 22 11:58:40s 0:01:20 - +Rule sol88 1988 only - Dec 23 11:59:10s 0:00:50 - +Rule sol88 1988 only - Dec 24 11:59:40s 0:00:20 - +Rule sol88 1988 only - Dec 25 12:00:10s -0:00:10 - +Rule sol88 1988 only - Dec 26 12:00:40s -0:00:40 - +Rule sol88 1988 only - Dec 27 12:01:10s -0:01:10 - +Rule sol88 1988 only - Dec 28 12:01:40s -0:01:40 - +Rule sol88 1988 only - Dec 29 12:02:10s -0:02:10 - +Rule sol88 1988 only - Dec 30 12:02:35s -0:02:35 - +Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1988, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh88 3:07:04 - zzz 1988 + 3:07:04 sol88 zzz 1989 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh88 Mideast/Riyadh88 diff --git a/libkcal/libical/tzdata/solar89 b/libkcal/libical/tzdata/solar89 new file mode 100644 index 000000000..8c4853146 --- /dev/null +++ b/libkcal/libical/tzdata/solar89 @@ -0,0 +1,393 @@ +# @(#)solar89 8.1 + +# Apparent noon times below are for Riyadh; they're a bit off for other places. +# Times were computed using a formula provided by the U. S. Naval Observatory: +# eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l) +# -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l) +# + 19.3 * cos(3 * l); +# where l is the "mean longitude of the Sun" given by +# l = 279.642 degrees + 0.985647 * d +# and d is the interval in days from January 0, 0 hours Universal Time +# (equaling the day of the year plus the fraction of a day from zero hours). +# The accuracy of the formula is plus or minus three seconds. +# +# Rounding to the nearest five seconds results in fewer than +# 256 different "time types"--a limit that's faced because time types are +# stored on disk as unsigned chars. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule sol89 1989 only - Jan 1 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jan 2 12:04:05s -0:04:05 - +Rule sol89 1989 only - Jan 3 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jan 4 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jan 5 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jan 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jan 7 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jan 8 12:06:45s -0:06:45 - +Rule sol89 1989 only - Jan 9 12:07:10s -0:07:10 - +Rule sol89 1989 only - Jan 10 12:07:35s -0:07:35 - +Rule sol89 1989 only - Jan 11 12:07:55s -0:07:55 - +Rule sol89 1989 only - Jan 12 12:08:20s -0:08:20 - +Rule sol89 1989 only - Jan 13 12:08:45s -0:08:45 - +Rule sol89 1989 only - Jan 14 12:09:05s -0:09:05 - +Rule sol89 1989 only - Jan 15 12:09:25s -0:09:25 - +Rule sol89 1989 only - Jan 16 12:09:45s -0:09:45 - +Rule sol89 1989 only - Jan 17 12:10:05s -0:10:05 - +Rule sol89 1989 only - Jan 18 12:10:25s -0:10:25 - +Rule sol89 1989 only - Jan 19 12:10:45s -0:10:45 - +Rule sol89 1989 only - Jan 20 12:11:05s -0:11:05 - +Rule sol89 1989 only - Jan 21 12:11:20s -0:11:20 - +Rule sol89 1989 only - Jan 22 12:11:35s -0:11:35 - +Rule sol89 1989 only - Jan 23 12:11:55s -0:11:55 - +Rule sol89 1989 only - Jan 24 12:12:10s -0:12:10 - +Rule sol89 1989 only - Jan 25 12:12:20s -0:12:20 - +Rule sol89 1989 only - Jan 26 12:12:35s -0:12:35 - +Rule sol89 1989 only - Jan 27 12:12:50s -0:12:50 - +Rule sol89 1989 only - Jan 28 12:13:00s -0:13:00 - +Rule sol89 1989 only - Jan 29 12:13:10s -0:13:10 - +Rule sol89 1989 only - Jan 30 12:13:20s -0:13:20 - +Rule sol89 1989 only - Jan 31 12:13:30s -0:13:30 - +Rule sol89 1989 only - Feb 1 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 2 12:13:45s -0:13:45 - +Rule sol89 1989 only - Feb 3 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 4 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 5 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 6 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 7 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 8 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 9 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 10 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 11 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 12 12:14:20s -0:14:20 - +Rule sol89 1989 only - Feb 13 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 14 12:14:15s -0:14:15 - +Rule sol89 1989 only - Feb 15 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 16 12:14:10s -0:14:10 - +Rule sol89 1989 only - Feb 17 12:14:05s -0:14:05 - +Rule sol89 1989 only - Feb 18 12:14:00s -0:14:00 - +Rule sol89 1989 only - Feb 19 12:13:55s -0:13:55 - +Rule sol89 1989 only - Feb 20 12:13:50s -0:13:50 - +Rule sol89 1989 only - Feb 21 12:13:40s -0:13:40 - +Rule sol89 1989 only - Feb 22 12:13:35s -0:13:35 - +Rule sol89 1989 only - Feb 23 12:13:25s -0:13:25 - +Rule sol89 1989 only - Feb 24 12:13:15s -0:13:15 - +Rule sol89 1989 only - Feb 25 12:13:05s -0:13:05 - +Rule sol89 1989 only - Feb 26 12:12:55s -0:12:55 - +Rule sol89 1989 only - Feb 27 12:12:45s -0:12:45 - +Rule sol89 1989 only - Feb 28 12:12:35s -0:12:35 - +Rule sol89 1989 only - Mar 1 12:12:25s -0:12:25 - +Rule sol89 1989 only - Mar 2 12:12:10s -0:12:10 - +Rule sol89 1989 only - Mar 3 12:12:00s -0:12:00 - +Rule sol89 1989 only - Mar 4 12:11:45s -0:11:45 - +Rule sol89 1989 only - Mar 5 12:11:35s -0:11:35 - +Rule sol89 1989 only - Mar 6 12:11:20s -0:11:20 - +Rule sol89 1989 only - Mar 7 12:11:05s -0:11:05 - +Rule sol89 1989 only - Mar 8 12:10:50s -0:10:50 - +Rule sol89 1989 only - Mar 9 12:10:35s -0:10:35 - +Rule sol89 1989 only - Mar 10 12:10:20s -0:10:20 - +Rule sol89 1989 only - Mar 11 12:10:05s -0:10:05 - +Rule sol89 1989 only - Mar 12 12:09:50s -0:09:50 - +Rule sol89 1989 only - Mar 13 12:09:30s -0:09:30 - +Rule sol89 1989 only - Mar 14 12:09:15s -0:09:15 - +Rule sol89 1989 only - Mar 15 12:09:00s -0:09:00 - +Rule sol89 1989 only - Mar 16 12:08:40s -0:08:40 - +Rule sol89 1989 only - Mar 17 12:08:25s -0:08:25 - +Rule sol89 1989 only - Mar 18 12:08:05s -0:08:05 - +Rule sol89 1989 only - Mar 19 12:07:50s -0:07:50 - +Rule sol89 1989 only - Mar 20 12:07:30s -0:07:30 - +Rule sol89 1989 only - Mar 21 12:07:15s -0:07:15 - +Rule sol89 1989 only - Mar 22 12:06:55s -0:06:55 - +Rule sol89 1989 only - Mar 23 12:06:35s -0:06:35 - +Rule sol89 1989 only - Mar 24 12:06:20s -0:06:20 - +Rule sol89 1989 only - Mar 25 12:06:00s -0:06:00 - +Rule sol89 1989 only - Mar 26 12:05:40s -0:05:40 - +Rule sol89 1989 only - Mar 27 12:05:25s -0:05:25 - +Rule sol89 1989 only - Mar 28 12:05:05s -0:05:05 - +Rule sol89 1989 only - Mar 29 12:04:50s -0:04:50 - +Rule sol89 1989 only - Mar 30 12:04:30s -0:04:30 - +Rule sol89 1989 only - Mar 31 12:04:10s -0:04:10 - +Rule sol89 1989 only - Apr 1 12:03:55s -0:03:55 - +Rule sol89 1989 only - Apr 2 12:03:35s -0:03:35 - +Rule sol89 1989 only - Apr 3 12:03:20s -0:03:20 - +Rule sol89 1989 only - Apr 4 12:03:00s -0:03:00 - +Rule sol89 1989 only - Apr 5 12:02:45s -0:02:45 - +Rule sol89 1989 only - Apr 6 12:02:25s -0:02:25 - +Rule sol89 1989 only - Apr 7 12:02:10s -0:02:10 - +Rule sol89 1989 only - Apr 8 12:01:50s -0:01:50 - +Rule sol89 1989 only - Apr 9 12:01:35s -0:01:35 - +Rule sol89 1989 only - Apr 10 12:01:20s -0:01:20 - +Rule sol89 1989 only - Apr 11 12:01:05s -0:01:05 - +Rule sol89 1989 only - Apr 12 12:00:50s -0:00:50 - +Rule sol89 1989 only - Apr 13 12:00:35s -0:00:35 - +Rule sol89 1989 only - Apr 14 12:00:20s -0:00:20 - +Rule sol89 1989 only - Apr 15 12:00:05s -0:00:05 - +Rule sol89 1989 only - Apr 16 11:59:50s 0:00:10 - +Rule sol89 1989 only - Apr 17 11:59:35s 0:00:25 - +Rule sol89 1989 only - Apr 18 11:59:20s 0:00:40 - +Rule sol89 1989 only - Apr 19 11:59:10s 0:00:50 - +Rule sol89 1989 only - Apr 20 11:58:55s 0:01:05 - +Rule sol89 1989 only - Apr 21 11:58:45s 0:01:15 - +Rule sol89 1989 only - Apr 22 11:58:30s 0:01:30 - +Rule sol89 1989 only - Apr 23 11:58:20s 0:01:40 - +Rule sol89 1989 only - Apr 24 11:58:10s 0:01:50 - +Rule sol89 1989 only - Apr 25 11:58:00s 0:02:00 - +Rule sol89 1989 only - Apr 26 11:57:50s 0:02:10 - +Rule sol89 1989 only - Apr 27 11:57:40s 0:02:20 - +Rule sol89 1989 only - Apr 28 11:57:30s 0:02:30 - +Rule sol89 1989 only - Apr 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - Apr 30 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 1 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 2 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 3 11:56:50s 0:03:10 - +Rule sol89 1989 only - May 4 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 5 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 6 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 7 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 8 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 9 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 10 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 11 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 13 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 14 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 15 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 16 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 17 11:56:20s 0:03:40 - +Rule sol89 1989 only - May 18 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 19 11:56:25s 0:03:35 - +Rule sol89 1989 only - May 20 11:56:30s 0:03:30 - +Rule sol89 1989 only - May 21 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 22 11:56:35s 0:03:25 - +Rule sol89 1989 only - May 23 11:56:40s 0:03:20 - +Rule sol89 1989 only - May 24 11:56:45s 0:03:15 - +Rule sol89 1989 only - May 25 11:56:55s 0:03:05 - +Rule sol89 1989 only - May 26 11:57:00s 0:03:00 - +Rule sol89 1989 only - May 27 11:57:05s 0:02:55 - +Rule sol89 1989 only - May 28 11:57:15s 0:02:45 - +Rule sol89 1989 only - May 29 11:57:20s 0:02:40 - +Rule sol89 1989 only - May 30 11:57:30s 0:02:30 - +Rule sol89 1989 only - May 31 11:57:35s 0:02:25 - +Rule sol89 1989 only - Jun 1 11:57:45s 0:02:15 - +Rule sol89 1989 only - Jun 2 11:57:55s 0:02:05 - +Rule sol89 1989 only - Jun 3 11:58:05s 0:01:55 - +Rule sol89 1989 only - Jun 4 11:58:15s 0:01:45 - +Rule sol89 1989 only - Jun 5 11:58:25s 0:01:35 - +Rule sol89 1989 only - Jun 6 11:58:35s 0:01:25 - +Rule sol89 1989 only - Jun 7 11:58:45s 0:01:15 - +Rule sol89 1989 only - Jun 8 11:59:00s 0:01:00 - +Rule sol89 1989 only - Jun 9 11:59:10s 0:00:50 - +Rule sol89 1989 only - Jun 10 11:59:20s 0:00:40 - +Rule sol89 1989 only - Jun 11 11:59:35s 0:00:25 - +Rule sol89 1989 only - Jun 12 11:59:45s 0:00:15 - +Rule sol89 1989 only - Jun 13 12:00:00s 0:00:00 - +Rule sol89 1989 only - Jun 14 12:00:10s -0:00:10 - +Rule sol89 1989 only - Jun 15 12:00:25s -0:00:25 - +Rule sol89 1989 only - Jun 16 12:00:35s -0:00:35 - +Rule sol89 1989 only - Jun 17 12:00:50s -0:00:50 - +Rule sol89 1989 only - Jun 18 12:01:05s -0:01:05 - +Rule sol89 1989 only - Jun 19 12:01:15s -0:01:15 - +Rule sol89 1989 only - Jun 20 12:01:30s -0:01:30 - +Rule sol89 1989 only - Jun 21 12:01:40s -0:01:40 - +Rule sol89 1989 only - Jun 22 12:01:55s -0:01:55 - +Rule sol89 1989 only - Jun 23 12:02:10s -0:02:10 - +Rule sol89 1989 only - Jun 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Jun 25 12:02:35s -0:02:35 - +Rule sol89 1989 only - Jun 26 12:02:45s -0:02:45 - +Rule sol89 1989 only - Jun 27 12:03:00s -0:03:00 - +Rule sol89 1989 only - Jun 28 12:03:10s -0:03:10 - +Rule sol89 1989 only - Jun 29 12:03:25s -0:03:25 - +Rule sol89 1989 only - Jun 30 12:03:35s -0:03:35 - +Rule sol89 1989 only - Jul 1 12:03:45s -0:03:45 - +Rule sol89 1989 only - Jul 2 12:04:00s -0:04:00 - +Rule sol89 1989 only - Jul 3 12:04:10s -0:04:10 - +Rule sol89 1989 only - Jul 4 12:04:20s -0:04:20 - +Rule sol89 1989 only - Jul 5 12:04:30s -0:04:30 - +Rule sol89 1989 only - Jul 6 12:04:40s -0:04:40 - +Rule sol89 1989 only - Jul 7 12:04:50s -0:04:50 - +Rule sol89 1989 only - Jul 8 12:05:00s -0:05:00 - +Rule sol89 1989 only - Jul 9 12:05:10s -0:05:10 - +Rule sol89 1989 only - Jul 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Jul 11 12:05:25s -0:05:25 - +Rule sol89 1989 only - Jul 12 12:05:35s -0:05:35 - +Rule sol89 1989 only - Jul 13 12:05:40s -0:05:40 - +Rule sol89 1989 only - Jul 14 12:05:50s -0:05:50 - +Rule sol89 1989 only - Jul 15 12:05:55s -0:05:55 - +Rule sol89 1989 only - Jul 16 12:06:00s -0:06:00 - +Rule sol89 1989 only - Jul 17 12:06:05s -0:06:05 - +Rule sol89 1989 only - Jul 18 12:06:10s -0:06:10 - +Rule sol89 1989 only - Jul 19 12:06:15s -0:06:15 - +Rule sol89 1989 only - Jul 20 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 21 12:06:20s -0:06:20 - +Rule sol89 1989 only - Jul 22 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 23 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 24 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 25 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 26 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 27 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 28 12:06:30s -0:06:30 - +Rule sol89 1989 only - Jul 29 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 30 12:06:25s -0:06:25 - +Rule sol89 1989 only - Jul 31 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 1 12:06:20s -0:06:20 - +Rule sol89 1989 only - Aug 2 12:06:15s -0:06:15 - +Rule sol89 1989 only - Aug 3 12:06:10s -0:06:10 - +Rule sol89 1989 only - Aug 4 12:06:05s -0:06:05 - +Rule sol89 1989 only - Aug 5 12:06:00s -0:06:00 - +Rule sol89 1989 only - Aug 6 12:05:50s -0:05:50 - +Rule sol89 1989 only - Aug 7 12:05:45s -0:05:45 - +Rule sol89 1989 only - Aug 8 12:05:35s -0:05:35 - +Rule sol89 1989 only - Aug 9 12:05:30s -0:05:30 - +Rule sol89 1989 only - Aug 10 12:05:20s -0:05:20 - +Rule sol89 1989 only - Aug 11 12:05:10s -0:05:10 - +Rule sol89 1989 only - Aug 12 12:05:00s -0:05:00 - +Rule sol89 1989 only - Aug 13 12:04:50s -0:04:50 - +Rule sol89 1989 only - Aug 14 12:04:40s -0:04:40 - +Rule sol89 1989 only - Aug 15 12:04:30s -0:04:30 - +Rule sol89 1989 only - Aug 16 12:04:15s -0:04:15 - +Rule sol89 1989 only - Aug 17 12:04:05s -0:04:05 - +Rule sol89 1989 only - Aug 18 12:03:50s -0:03:50 - +Rule sol89 1989 only - Aug 19 12:03:35s -0:03:35 - +Rule sol89 1989 only - Aug 20 12:03:25s -0:03:25 - +Rule sol89 1989 only - Aug 21 12:03:10s -0:03:10 - +Rule sol89 1989 only - Aug 22 12:02:55s -0:02:55 - +Rule sol89 1989 only - Aug 23 12:02:40s -0:02:40 - +Rule sol89 1989 only - Aug 24 12:02:20s -0:02:20 - +Rule sol89 1989 only - Aug 25 12:02:05s -0:02:05 - +Rule sol89 1989 only - Aug 26 12:01:50s -0:01:50 - +Rule sol89 1989 only - Aug 27 12:01:30s -0:01:30 - +Rule sol89 1989 only - Aug 28 12:01:15s -0:01:15 - +Rule sol89 1989 only - Aug 29 12:00:55s -0:00:55 - +Rule sol89 1989 only - Aug 30 12:00:40s -0:00:40 - +Rule sol89 1989 only - Aug 31 12:00:20s -0:00:20 - +Rule sol89 1989 only - Sep 1 12:00:00s 0:00:00 - +Rule sol89 1989 only - Sep 2 11:59:45s 0:00:15 - +Rule sol89 1989 only - Sep 3 11:59:25s 0:00:35 - +Rule sol89 1989 only - Sep 4 11:59:05s 0:00:55 - +Rule sol89 1989 only - Sep 5 11:58:45s 0:01:15 - +Rule sol89 1989 only - Sep 6 11:58:25s 0:01:35 - +Rule sol89 1989 only - Sep 7 11:58:05s 0:01:55 - +Rule sol89 1989 only - Sep 8 11:57:45s 0:02:15 - +Rule sol89 1989 only - Sep 9 11:57:20s 0:02:40 - +Rule sol89 1989 only - Sep 10 11:57:00s 0:03:00 - +Rule sol89 1989 only - Sep 11 11:56:40s 0:03:20 - +Rule sol89 1989 only - Sep 12 11:56:20s 0:03:40 - +Rule sol89 1989 only - Sep 13 11:56:00s 0:04:00 - +Rule sol89 1989 only - Sep 14 11:55:35s 0:04:25 - +Rule sol89 1989 only - Sep 15 11:55:15s 0:04:45 - +Rule sol89 1989 only - Sep 16 11:54:55s 0:05:05 - +Rule sol89 1989 only - Sep 17 11:54:35s 0:05:25 - +Rule sol89 1989 only - Sep 18 11:54:10s 0:05:50 - +Rule sol89 1989 only - Sep 19 11:53:50s 0:06:10 - +Rule sol89 1989 only - Sep 20 11:53:30s 0:06:30 - +Rule sol89 1989 only - Sep 21 11:53:10s 0:06:50 - +Rule sol89 1989 only - Sep 22 11:52:45s 0:07:15 - +Rule sol89 1989 only - Sep 23 11:52:25s 0:07:35 - +Rule sol89 1989 only - Sep 24 11:52:05s 0:07:55 - +Rule sol89 1989 only - Sep 25 11:51:45s 0:08:15 - +Rule sol89 1989 only - Sep 26 11:51:25s 0:08:35 - +Rule sol89 1989 only - Sep 27 11:51:05s 0:08:55 - +Rule sol89 1989 only - Sep 28 11:50:40s 0:09:20 - +Rule sol89 1989 only - Sep 29 11:50:20s 0:09:40 - +Rule sol89 1989 only - Sep 30 11:50:00s 0:10:00 - +Rule sol89 1989 only - Oct 1 11:49:45s 0:10:15 - +Rule sol89 1989 only - Oct 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Oct 3 11:49:05s 0:10:55 - +Rule sol89 1989 only - Oct 4 11:48:45s 0:11:15 - +Rule sol89 1989 only - Oct 5 11:48:30s 0:11:30 - +Rule sol89 1989 only - Oct 6 11:48:10s 0:11:50 - +Rule sol89 1989 only - Oct 7 11:47:50s 0:12:10 - +Rule sol89 1989 only - Oct 8 11:47:35s 0:12:25 - +Rule sol89 1989 only - Oct 9 11:47:20s 0:12:40 - +Rule sol89 1989 only - Oct 10 11:47:00s 0:13:00 - +Rule sol89 1989 only - Oct 11 11:46:45s 0:13:15 - +Rule sol89 1989 only - Oct 12 11:46:30s 0:13:30 - +Rule sol89 1989 only - Oct 13 11:46:15s 0:13:45 - +Rule sol89 1989 only - Oct 14 11:46:00s 0:14:00 - +Rule sol89 1989 only - Oct 15 11:45:50s 0:14:10 - +Rule sol89 1989 only - Oct 16 11:45:35s 0:14:25 - +Rule sol89 1989 only - Oct 17 11:45:20s 0:14:40 - +Rule sol89 1989 only - Oct 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Oct 19 11:45:00s 0:15:00 - +Rule sol89 1989 only - Oct 20 11:44:50s 0:15:10 - +Rule sol89 1989 only - Oct 21 11:44:40s 0:15:20 - +Rule sol89 1989 only - Oct 22 11:44:30s 0:15:30 - +Rule sol89 1989 only - Oct 23 11:44:20s 0:15:40 - +Rule sol89 1989 only - Oct 24 11:44:10s 0:15:50 - +Rule sol89 1989 only - Oct 25 11:44:05s 0:15:55 - +Rule sol89 1989 only - Oct 26 11:44:00s 0:16:00 - +Rule sol89 1989 only - Oct 27 11:43:50s 0:16:10 - +Rule sol89 1989 only - Oct 28 11:43:45s 0:16:15 - +Rule sol89 1989 only - Oct 29 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 30 11:43:40s 0:16:20 - +Rule sol89 1989 only - Oct 31 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 1 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 2 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 3 11:43:30s 0:16:30 - +Rule sol89 1989 only - Nov 4 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 5 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 6 11:43:35s 0:16:25 - +Rule sol89 1989 only - Nov 7 11:43:40s 0:16:20 - +Rule sol89 1989 only - Nov 8 11:43:45s 0:16:15 - +Rule sol89 1989 only - Nov 9 11:43:50s 0:16:10 - +Rule sol89 1989 only - Nov 10 11:43:55s 0:16:05 - +Rule sol89 1989 only - Nov 11 11:44:00s 0:16:00 - +Rule sol89 1989 only - Nov 12 11:44:05s 0:15:55 - +Rule sol89 1989 only - Nov 13 11:44:15s 0:15:45 - +Rule sol89 1989 only - Nov 14 11:44:25s 0:15:35 - +Rule sol89 1989 only - Nov 15 11:44:35s 0:15:25 - +Rule sol89 1989 only - Nov 16 11:44:45s 0:15:15 - +Rule sol89 1989 only - Nov 17 11:44:55s 0:15:05 - +Rule sol89 1989 only - Nov 18 11:45:10s 0:14:50 - +Rule sol89 1989 only - Nov 19 11:45:20s 0:14:40 - +Rule sol89 1989 only - Nov 20 11:45:35s 0:14:25 - +Rule sol89 1989 only - Nov 21 11:45:50s 0:14:10 - +Rule sol89 1989 only - Nov 22 11:46:05s 0:13:55 - +Rule sol89 1989 only - Nov 23 11:46:25s 0:13:35 - +Rule sol89 1989 only - Nov 24 11:46:40s 0:13:20 - +Rule sol89 1989 only - Nov 25 11:47:00s 0:13:00 - +Rule sol89 1989 only - Nov 26 11:47:20s 0:12:40 - +Rule sol89 1989 only - Nov 27 11:47:35s 0:12:25 - +Rule sol89 1989 only - Nov 28 11:47:55s 0:12:05 - +Rule sol89 1989 only - Nov 29 11:48:20s 0:11:40 - +Rule sol89 1989 only - Nov 30 11:48:40s 0:11:20 - +Rule sol89 1989 only - Dec 1 11:49:00s 0:11:00 - +Rule sol89 1989 only - Dec 2 11:49:25s 0:10:35 - +Rule sol89 1989 only - Dec 3 11:49:50s 0:10:10 - +Rule sol89 1989 only - Dec 4 11:50:15s 0:09:45 - +Rule sol89 1989 only - Dec 5 11:50:35s 0:09:25 - +Rule sol89 1989 only - Dec 6 11:51:00s 0:09:00 - +Rule sol89 1989 only - Dec 7 11:51:30s 0:08:30 - +Rule sol89 1989 only - Dec 8 11:51:55s 0:08:05 - +Rule sol89 1989 only - Dec 9 11:52:20s 0:07:40 - +Rule sol89 1989 only - Dec 10 11:52:50s 0:07:10 - +Rule sol89 1989 only - Dec 11 11:53:15s 0:06:45 - +Rule sol89 1989 only - Dec 12 11:53:45s 0:06:15 - +Rule sol89 1989 only - Dec 13 11:54:10s 0:05:50 - +Rule sol89 1989 only - Dec 14 11:54:40s 0:05:20 - +Rule sol89 1989 only - Dec 15 11:55:10s 0:04:50 - +Rule sol89 1989 only - Dec 16 11:55:40s 0:04:20 - +Rule sol89 1989 only - Dec 17 11:56:05s 0:03:55 - +Rule sol89 1989 only - Dec 18 11:56:35s 0:03:25 - +Rule sol89 1989 only - Dec 19 11:57:05s 0:02:55 - +Rule sol89 1989 only - Dec 20 11:57:35s 0:02:25 - +Rule sol89 1989 only - Dec 21 11:58:05s 0:01:55 - +Rule sol89 1989 only - Dec 22 11:58:35s 0:01:25 - +Rule sol89 1989 only - Dec 23 11:59:05s 0:00:55 - +Rule sol89 1989 only - Dec 24 11:59:35s 0:00:25 - +Rule sol89 1989 only - Dec 25 12:00:05s -0:00:05 - +Rule sol89 1989 only - Dec 26 12:00:35s -0:00:35 - +Rule sol89 1989 only - Dec 27 12:01:05s -0:01:05 - +Rule sol89 1989 only - Dec 28 12:01:35s -0:01:35 - +Rule sol89 1989 only - Dec 29 12:02:00s -0:02:00 - +Rule sol89 1989 only - Dec 30 12:02:30s -0:02:30 - +Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 - + +# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs +# Before and after 1989, we'll operate on local mean solar time. + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +Zone Asia/Riyadh89 3:07:04 - zzz 1989 + 3:07:04 sol89 zzz 1990 + 3:07:04 - zzz +# For backward compatibility... +Link Asia/Riyadh89 Mideast/Riyadh89 diff --git a/libkcal/libical/tzdata/southamerica b/libkcal/libical/tzdata/southamerica new file mode 100644 index 000000000..43f73d323 --- /dev/null +++ b/libkcal/libical/tzdata/southamerica @@ -0,0 +1,1259 @@ +# @(#)southamerica 8.19 +# <pre> + +# This data is by no means authoritative; if you think you know better, +# go ahead and edit the file (and please send any changes to +# tz@elsie.nci.nih.gov for general use in the future). + +# From Paul Eggert (2006-03-22): +# A good source for time zone historical data outside the U.S. is +# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +# San Diego: ACS Publications, Inc. (2003). +# +# Gwillim Law writes that a good source +# for recent time zone data is the International Air Transport +# Association's Standard Schedules Information Manual (IATA SSIM), +# published semiannually. Law sent in several helpful summaries +# of the IATA's data after 1990. +# +# Except where otherwise noted, Shanks & Pottenger is the source for +# entries through 1990, and IATA SSIM is the source for entries afterwards. +# +# Earlier editions of these tables used the North American style (e.g. ARST and +# ARDT for Argentine Standard and Daylight Time), but the following quote +# suggests that it's better to use European style (e.g. ART and ARST). +# I suggest the use of _Summer time_ instead of the more cumbersome +# _daylight-saving time_. _Summer time_ seems to be in general use +# in Europe and South America. +# -- E O Cutler, _New York Times_ (1937-02-14), quoted in +# H L Mencken, _The American Language: Supplement I_ (1960), p 466 +# +# Earlier editions of these tables also used the North American style +# for time zones in Brazil, but this was incorrect, as Brazilians say +# "summer time". Reinaldo Goulart, a Sao Paulo businessman active in +# the railroad sector, writes (1999-07-06): +# The subject of time zones is currently a matter of discussion/debate in +# Brazil. Let's say that "the Brasilia time" is considered the +# "official time" because Brasilia is the capital city. +# The other three time zones are called "Brasilia time "minus one" or +# "plus one" or "plus two". As far as I know there is no such +# name/designation as "Eastern Time" or "Central Time". +# So I invented the following (English-language) abbreviations for now. +# Corrections are welcome! +# std dst +# -2:00 FNT FNST Fernando de Noronha +# -3:00 BRT BRST Brasilia +# -4:00 AMT AMST Amazon +# -5:00 ACT ACST Acre + +############################################################################### + +############################################################################### + +# Argentina + +# From Bob Devine (1988-01-28): +# Argentina: first Sunday in October to first Sunday in April since 1976. +# Double Summer time from 1969 to 1974. Switches at midnight. + +# From U. S. Naval Observatory (1988-01-199): +# ARGENTINA 3 H BEHIND UTC + +# From Hernan G. Otero (1995-06-26): +# I am sending modifications to the Argentine time zone table... +# AR was chosen because they are the ISO letters that represent Argentina. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Arg 1930 only - Dec 1 0:00 1:00 S +Rule Arg 1931 only - Apr 1 0:00 0 - +Rule Arg 1931 only - Oct 15 0:00 1:00 S +Rule Arg 1932 1940 - Mar 1 0:00 0 - +Rule Arg 1932 1939 - Nov 1 0:00 1:00 S +Rule Arg 1940 only - Jul 1 0:00 1:00 S +Rule Arg 1941 only - Jun 15 0:00 0 - +Rule Arg 1941 only - Oct 15 0:00 1:00 S +Rule Arg 1943 only - Aug 1 0:00 0 - +Rule Arg 1943 only - Oct 15 0:00 1:00 S +Rule Arg 1946 only - Mar 1 0:00 0 - +Rule Arg 1946 only - Oct 1 0:00 1:00 S +Rule Arg 1963 only - Oct 1 0:00 0 - +Rule Arg 1963 only - Dec 15 0:00 1:00 S +Rule Arg 1964 1966 - Mar 1 0:00 0 - +Rule Arg 1964 1966 - Oct 15 0:00 1:00 S +Rule Arg 1967 only - Apr 2 0:00 0 - +Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S +Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 - +Rule Arg 1974 only - Jan 23 0:00 1:00 S +Rule Arg 1974 only - May 1 0:00 0 - +Rule Arg 1988 only - Dec 1 0:00 1:00 S +# +# From Hernan G. Otero (1995-06-26): +# These corrections were contributed by InterSoft Argentina S.A., +# obtaining the data from the: +# Talleres de Hidrografia Naval Argentina +# (Argentine Naval Hydrography Institute) +Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 - +Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S +# +# From Hernan G. Otero (1995-06-26): +# From this moment on, the law that mandated the daylight saving +# time corrections was derogated and no more modifications +# to the time zones (for daylight saving) are now made. +# +# From Rives McDow (2000-01-10): +# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time, +# which did not result in the switch of a time zone, as they stayed 9 hours +# from the International Date Line. +Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S +# From Paul Eggert (2007-12-28): +# DST was set to expire on March 5, not March 3, but since it was converted +# to standard time on March 3 it's more convenient for us to pretend that +# it ended on March 3. +Rule Arg 2000 only - Mar 3 0:00 0 - +# +# From Peter Gradelski via Steffen Thorsen (2000-03-01): +# We just checked with our Sao Paulo office and they say the government of +# Argentina decided not to become one of the countries that go on or off DST. +# So Buenos Aires should be -3 hours from GMT at all times. +# +# From Fabian L. Arce Jofre (2000-04-04): +# The law that claimed DST for Argentina was derogated by President Fernando +# de la Rua on March 2, 2000, because it would make people spend more energy +# in the winter time, rather than less. The change took effect on March 3. +# +# From Mariano Absatz (2001-06-06): +# one of the major newspapers here in Argentina said that the 1999 +# Timezone Law (which never was effectively applied) will (would?) be +# in effect.... The article is at +# http://ar.clarin.com/diario/2001-06-06/e-01701.htm +# ... The Law itself is "Ley No 25155", sanctioned on 1999-08-25, enacted +# 1999-09-17, and published 1999-09-21. The official publication is at: +# http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF +# Regretfully, you have to subscribe (and pay) for the on-line version.... +# +# (2001-06-12): +# the timezone for Argentina will not change next Sunday. +# Apparently it will do so on Sunday 24th.... +# http://ar.clarin.com/diario/2001-06-12/s-03501.htm +# +# (2001-06-25): +# Last Friday (yes, the last working day before the date of the change), the +# Senate annulled the 1999 law that introduced the changes later postponed. +# http://www.clarin.com.ar/diario/2001-06-22/s-03601.htm +# It remains the vote of the Deputies..., but it will be the same.... +# This kind of things had always been done this way in Argentina. +# We are still -03:00 all year round in all of the country. +# +# From Steffen Thorsen (2007-12-21): +# A user (Leonardo Chaim) reported that Argentina will adopt DST.... +# all of the country (all Zone-entries) are affected. News reports like +# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate +# that Argentina will use DST next year as well, from October to +# March, although exact rules are not given. +# +# From Jesper Norgaard Welen (2007-12-26) +# The last hurdle of Argentina DST is over, the proposal was approved in +# the lower chamber too (Deputados) with a vote 192 for and 2 against. +# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to +# the original scanned proposal, where the dates and the zero hours are +# clear and unambiguous...This is the article about final approval: +# <a href="http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996"> +# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996 +# </a> +# +# From Paul Eggert (2007-12-22): +# For dates after mid-2008, the following rules are my guesses and +# are quite possibly wrong, but are more likely than no DST at all. +Rule Arg 2007 only - Dec 30 0:00 1:00 S +Rule Arg 2008 max - Mar Sun>=15 0:00 0 - +Rule Arg 2008 max - Oct Sun>=1 0:00 1:00 S + +# From Mariano Absatz (2004-05-21): +# Today it was officially published that the Province of Mendoza is changing +# its timezone this winter... starting tomorrow night.... +# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040521-27158-normas.pdf +# From Paul Eggert (2004-05-24): +# It's Law No. 7,210. This change is due to a public power emergency, so for +# now we'll assume it's for this year only. +# +# From Paul Eggert (2006-03-22): +# <a href="http://www.spicasc.net/horvera.html"> +# Hora de verano para la Republica Argentina (2003-06-08) +# </a> says that standard time in Argentina from 1894-10-31 +# to 1920-05-01 was -4:16:48.25. Go with this more-precise value +# over Shanks & Pottenger. +# +# From Mariano Absatz (2004-06-05): +# These media articles from a major newspaper mostly cover the current state: +# http://www.lanacion.com.ar/04/05/27/de_604825.asp +# http://www.lanacion.com.ar/04/05/28/de_605203.asp +# +# The following eight (8) provinces pulled clocks back to UTC-04:00 at +# midnight Monday May 31st. (that is, the night between 05/31 and 06/01). +# Apparently, all nine provinces would go back to UTC-03:00 at the same +# time in October 17th. +# +# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz, +# Tierra del Fuego, Tucuman. +# +# From Mariano Absatz (2004-06-14): +# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00 +# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's +# annoyance with the change is much higher than the power savings obtained.... +# +# From Gwillim Law (2004-06-14): +# http://www.lanacion.com.ar/04/06/10/de_609078.asp ... +# "The time change in Tierra del Fuego was a conflicted decision from +# the start. The government had decreed that the measure would take +# effect on June 1, but a normative error forced the new time to begin +# three days earlier, from a Saturday to a Sunday.... +# Our understanding was that the change was originally scheduled to take place +# on June 1 at 00:00 in Chubut, Santa Cruz, Tierra del Fuego (and some other +# provinces). Sunday was May 30, only two days earlier. So the article +# contains a contradiction. I would give more credence to the Saturday/Sunday +# date than the "three days earlier" phrase, and conclude that Tierra del +# Fuego set its clocks back at 2004-05-30 00:00. +# +# From Steffen Thorsen (2004-10-05): +# The previous law 7210 which changed the province of Mendoza's time zone +# back in May have been modified slightly in a new law 7277, which set the +# new end date to 2004-09-26 (original date was 2004-10-17). +# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf +# +# From Mariano Absatz (2004-10-05): +# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between +# Sunday, May 30th and Monday, May 31st. It changed back to UTC-03:00 +# at midnight between Saturday, July 24th and Sunday, July 25th.... +# http://www.sanjuan.gov.ar/prensa/archivo/000329.html +# http://www.sanjuan.gov.ar/prensa/archivo/000426.html +# http://www.sanjuan.gov.ar/prensa/archivo/000441.html + +# From Alex Krivenyshev (2008-01-17): +# Here are articles that Argentina Province San Luis is planning to end DST +# as earlier as upcoming Monday January 21, 2008 or February 2008: +# +# Provincia argentina retrasa reloj y marca diferencia con resto del pais +# (Argentine Province delayed clock and mark difference with the rest of the +# country) +# <a href="http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel"> +# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel +# </a> +# +# Es inminente que en San Luis atrasen una hora los relojes +# (It is imminent in San Luis clocks one hour delay) +# <a href="http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414"> +# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414 +# </a> +# +# <a href="http://www.worldtimezone.net/dst_news/dst_news_argentina02.html"> +# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html +# </a> + +# From Jesper Norgaard Welen (2008-01-18): +# The page of the San Luis provincial government +# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812"> +# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812 +# </a> +# confirms what Alex Krivenyshev has earlier sent to the tz +# emailing list about that San Luis plans to return to standard +# time much earlier than the rest of the country. It also +# confirms that upon request the provinces San Juan and Mendoza +# refused to follow San Luis in this change. +# +# The change is supposed to take place Monday the 21.st at 0:00 +# hours. As far as I understand it if this goes ahead, we need +# a new timezone for San Luis (although there are also documented +# independent changes in the southamerica file of San Luis in +# 1990 and 1991 which has not been confirmed). + +# From Jesper Norgaard Welen (2008-01-25): +# Unfortunately the below page has become defunct, about the San Luis +# time change. Perhaps because it now is part of a group of pages "Most +# important pages of 2008." +# +# You can use +# <a href="http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834"> +# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834 +# </a> +# instead it seems. Or use "Buscador" from the main page of the San Luis +# government, and fill in "huso" and click OK, and you will get 3 pages +# from which the first one is identical to the above. + +# From Mariano Absatz (2008-01-28): +# I can confirm that the Province of San Luis (and so far only that +# province) decided to go back to UTC-3 effective midnight Jan 20th 2008 +# (that is, Monday 21st at 0:00 is the time the clocks were delayed back +# 1 hour), and they intend to keep UTC-3 as their timezone all year round +# (that is, unless they change their mind any minute now). +# +# So we'll have to add yet another city to 'southamerica' (I think San +# Luis city is the mos populated city in the Province, so it'd be +# America/Argentina/San_Luis... of course I can't remember if San Luis's +# history of particular changes goes along with Mendoza or San Juan :-( +# (I only remember not being able to collect hard facts about San Luis +# back in 2004, when these provinces changed to UTC-4 for a few days, I +# mailed them personally and never got an answer). + +# From Arthur David Olson (2008-03-15): +# Until there's better information, asssume San Luis was like San Juan +# rather than Mendoza (since San Juan has a simpler DST history). + +# Unless otherwise specified, data are from Shanks & Pottenger through 1992, +# from the IATA otherwise. As noted below, Shanks & Pottenger say that +# America/Cordoba split into 6 subregions during 1991/1992, but we +# haven't verified this yet so for now we'll keep it a single region. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Buenos Aires (BA), Capital Federal (CF), +Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT +# +# Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), Chaco (CC), +# Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB), +# San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN) +# +# Shanks & Pottenger also make the following claims, which we haven't verified: +# - Formosa switched to -3:00 on 1991-01-07. +# - Misiones switched to -3:00 on 1990-12-29. +# - Chaco switched to -3:00 on 1991-01-04. +# - San Luis switched to -4:00 on 1990-03-14, then to -3:00 on 1990-10-15, +# then to -4:00 on 1991-03-01, then to -3:00 on 1991-06-01. +# - Santiago del Estero switched to -4:00 on 1991-04-01, +# then to -3:00 on 1991-04-26. +# +Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT +# +# Tucuman (TM) +Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 13 + -3:00 Arg AR%sT +# +# La Rioja (LR) +Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 1 + -4:00 - WART 1991 May 7 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT +# +# San Juan (SJ) +Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 1 + -4:00 - WART 1991 May 7 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 31 + -4:00 - WART 2004 Jul 25 + -3:00 Arg AR%sT +# +# Jujuy (JY) +Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1990 Mar 4 + -4:00 - WART 1990 Oct 28 + -4:00 1:00 WARST 1991 Mar 17 + -4:00 - WART 1991 Oct 6 + -3:00 1:00 ARST 1992 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 Arg AR%sT +# +# Catamarca (CT), Chubut (CH) +Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 3 + -4:00 - WART 1991 Oct 20 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT +# +# Mendoza (MZ) +Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1990 Mar 4 + -4:00 - WART 1990 Oct 15 + -4:00 1:00 WARST 1991 Mar 1 + -4:00 - WART 1991 Oct 15 + -4:00 1:00 WARST 1992 Mar 1 + -4:00 - WART 1992 Oct 18 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 23 + -4:00 - WART 2004 Sep 26 + -3:00 Arg AR%sT +# +# San Luis (SL) +Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1991 Mar 1 + -4:00 - WART 1991 May 7 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 31 + -4:00 - WART 2004 Jul 25 + -3:00 Arg AR%sT 2008 Jan 21 + -3:00 - ART +# +# Santa Cruz (SC) +Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 Jun 1 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT +# +# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF) +Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May # Cordoba Mean Time + -4:00 - ART 1930 Dec + -4:00 Arg AR%sT 1969 Oct 5 + -3:00 Arg AR%sT 1999 Oct 3 + -4:00 Arg AR%sT 2000 Mar 3 + -3:00 - ART 2004 May 30 + -4:00 - WART 2004 Jun 20 + -3:00 Arg AR%sT + +# Aruba +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + +# Bolivia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/La_Paz -4:32:36 - LMT 1890 + -4:32:36 - CMT 1931 Oct 15 # Calamarca MT + -4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST + -4:00 - BOT # Bolivia Time + +# Brazil + +# From Paul Eggert (1993-11-18): +# The mayor of Rio recently attempted to change the time zone rules +# just in his city, in order to leave more summer time for the tourist trade. +# The rule change lasted only part of the day; +# the federal government refused to follow the city's rules, and business +# was in a chaos, so the mayor backed down that afternoon. + +# From IATA SSIM (1996-02): +# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS), +# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ), +# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO), +# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL]. +# [The last three states are new to this issue of the IATA SSIM.] + +# From Gwillim Law (1996-10-07): +# Geography, history (Tocantins was part of Goias until 1989), and other +# sources of time zone information lead me to believe that AL, SE, and TO were +# always in BR1, and so the only change was whether or not they observed DST.... +# The earliest issue of the SSIM I have is 2/91. Each issue from then until +# 9/95 says that DST is observed only in the ten states I quoted from 9/95, +# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2 +# (UTC-4).... The other two time zones given for Brazil are BR3, which is +# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is +# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's +# become part of the state of Pernambuco). The boundary between BR1 and BR2 +# has never been clearly stated. They've simply been called East and West. +# However, some conclusions can be drawn from another IATA manual: the Airline +# Coding Directory, which lists close to 400 airports in Brazil. For each +# airport it gives a time zone which is coded to the SSIM. From that +# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE), +# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do +# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST. + +# From Marcos Tadeu (1998-09-27): +# <a href="http://pcdsh01.on.br/verao1.html"> +# Brazilian official page +# </a> + +# From Jesper Norgaard (2000-11-03): +# [For an official list of which regions in Brazil use which time zones, see:] +# http://pcdsh01.on.br/Fusbr.htm +# http://pcdsh01.on.br/Fusbrhv.htm + +# From Celso Doria via David Madeo (2002-10-09): +# The reason for the delay this year has to do with elections in Brazil. +# +# Unlike in the United States, elections in Brazil are 100% computerized and +# the results are known almost immediately. Yesterday, it was the first +# round of the elections when 115 million Brazilians voted for President, +# Governor, Senators, Federal Deputies, and State Deputies. Nobody is +# counting (or re-counting) votes anymore and we know there will be a second +# round for the Presidency and also for some Governors. The 2nd round will +# take place on October 27th. +# +# The reason why the DST will only begin November 3rd is that the thousands +# of electoral machines used cannot have their time changed, and since the +# Constitution says the elections must begin at 8:00 AM and end at 5:00 PM, +# the Government decided to postpone DST, instead of changing the Constitution +# (maybe, for the next elections, it will be possible to change the clock)... + +# From Rodrigo Severo (2004-10-04): +# It's just the biannual change made necessary by the much hyped, supposedly +# modern Brazilian eletronic voting machines which, apparently, can't deal +# with a time change between the first and the second rounds of the elections. + +# From Steffen Thorsen (2007-09-20): +# Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00: +# http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975 + +# From Paul Eggert (2002-10-10): +# The official decrees referenced below are mostly taken from +# <a href="http://pcdsh01.on.br/DecHV.html"> +# Decretos sobre o Horario de Verao no Brasil +# </a>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01) +# Decree <a href="http://pcdsh01.on.br/HV21896.htm">21,896</a> (1932-01-10) +Rule Brazil 1931 only - Oct 3 11:00 1:00 S +Rule Brazil 1932 1933 - Apr 1 0:00 0 - +Rule Brazil 1932 only - Oct 3 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV23195.htm">23,195</a> (1933-10-10) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV27496.htm">27,496</a> (1949-11-24) +# Decree <a href="http://pcdsh01.on.br/HV27998.htm">27,998</a> (1950-04-13) +Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S +Rule Brazil 1950 only - Apr 16 1:00 0 - +Rule Brazil 1951 1952 - Apr 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV32308.htm">32,308</a> (1953-02-24) +Rule Brazil 1953 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV34724.htm">34,724</a> (1953-11-30) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV52700.htm">52,700</a> (1963-10-18) +# established DST from 1963-10-23 00:00 to 1964-02-29 00:00 +# in SP, RJ, GB, MG, ES, due to the prolongation of the drought. +# Decree <a href="http://pcdsh01.on.br/HV53071.htm">53,071</a> (1963-12-03) +# extended the above decree to all of the national territory on 12-09. +Rule Brazil 1963 only - Dec 9 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV53604.htm">53,604</a> (1964-02-25) +# extended summer time by one day to 1964-03-01 00:00 (start of school). +Rule Brazil 1964 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV55639.htm">55,639</a> (1965-01-27) +Rule Brazil 1965 only - Jan 31 0:00 1:00 S +Rule Brazil 1965 only - Mar 31 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV57303.htm">57,303</a> (1965-11-22) +Rule Brazil 1965 only - Dec 1 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV57843.htm">57,843</a> (1966-02-18) +Rule Brazil 1966 1968 - Mar 1 0:00 0 - +Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/HV63429.htm">63,429</a> (1968-10-15) +# revoked DST. +# Decree <a href="http://pcdsh01.on.br/HV91698.htm">91,698</a> (1985-09-27) +Rule Brazil 1985 only - Nov 2 0:00 1:00 S +# Decree 92,310 (1986-01-21) +# Decree 92,463 (1986-03-13) +Rule Brazil 1986 only - Mar 15 0:00 0 - +# Decree 93,316 (1986-10-01) +Rule Brazil 1986 only - Oct 25 0:00 1:00 S +Rule Brazil 1987 only - Feb 14 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV94922.htm">94,922</a> (1987-09-22) +Rule Brazil 1987 only - Oct 25 0:00 1:00 S +Rule Brazil 1988 only - Feb 7 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV96676.htm">96,676</a> (1988-09-12) +# except for the states of AC, AM, PA, RR, RO, and AP (then a territory) +Rule Brazil 1988 only - Oct 16 0:00 1:00 S +Rule Brazil 1989 only - Jan 29 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV98077.htm">98,077</a> (1989-08-21) +# with the same exceptions +Rule Brazil 1989 only - Oct 15 0:00 1:00 S +Rule Brazil 1990 only - Feb 11 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV99530.htm">99,530</a> (1990-09-17) +# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF. +# Decree 99,629 (1990-10-19) adds BA, MT. +Rule Brazil 1990 only - Oct 21 0:00 1:00 S +Rule Brazil 1991 only - Feb 17 0:00 0 - +# <a href="http://pcdsh01.on.br/HV1991.htm">Unnumbered decree</a> (1991-09-25) +# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF. +Rule Brazil 1991 only - Oct 20 0:00 1:00 S +Rule Brazil 1992 only - Feb 9 0:00 0 - +# <a href="http://pcdsh01.on.br/HV1992.htm">Unnumbered decree</a> (1992-10-16) +# adopted by same states. +Rule Brazil 1992 only - Oct 25 0:00 1:00 S +Rule Brazil 1993 only - Jan 31 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV942.htm">942</a> (1993-09-28) +# adopted by same states, plus AM. +# Decree <a href="http://pcdsh01.on.br/HV1252.htm">1,252</a> (1994-09-22; +# web page corrected 2004-01-07) adopted by same states, minus AM. +# Decree <a href="http://pcdsh01.on.br/HV1636.htm">1,636</a> (1995-09-14) +# adopted by same states, plus MT and TO. +# Decree <a href="http://pcdsh01.on.br/HV1674.htm">1,674</a> (1995-10-13) +# adds AL, SE. +Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S +Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 - +Rule Brazil 1996 only - Feb 11 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/HV2000.htm">2,000</a> (1996-09-04) +# adopted by same states, minus AL, SE. +Rule Brazil 1996 only - Oct 6 0:00 1:00 S +Rule Brazil 1997 only - Feb 16 0:00 0 - +# From Daniel C. Sobral (1998-02-12): +# In 1997, the DS began on October 6. The stated reason was that +# because international television networks ignored Brazil's policy on DS, +# they bought the wrong times on satellite for coverage of Pope's visit. +# This year, the ending date of DS was postponed to March 1 +# to help dealing with the shortages of electric power. +# +# Decree 2,317 (1997-09-04), adopted by same states. +Rule Brazil 1997 only - Oct 6 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a> +# (1998-02-10) +Rule Brazil 1998 only - Mar 1 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/figuras/Hv98.jpg">2,780</a> (1998-09-11) +# adopted by the same states as before. +Rule Brazil 1998 only - Oct 11 0:00 1:00 S +Rule Brazil 1999 only - Feb 21 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/figuras/HV3150.gif">3,150</a> +# (1999-08-23) adopted by same states. +# Decree <a href="http://pcdsh01.on.br/DecHV99.gif">3,188</a> (1999-09-30) +# adds SE, AL, PB, PE, RN, CE, PI, MA and RR. +Rule Brazil 1999 only - Oct 3 0:00 1:00 S +Rule Brazil 2000 only - Feb 27 0:00 0 - +# Decree <a href="http://pcdsh01.on.br/DEC3592.htm">3,592</a> (2000-09-06) +# adopted by the same states as before. +# Decree <a href="http://pcdsh01.on.br/Dec3630.jpg">3,630</a> (2000-10-13) +# repeals DST in PE and RR, effective 2000-10-15 00:00. +# Decree <a href="http://pcdsh01.on.br/Dec3632.jpg">3,632</a> (2000-10-17) +# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00. +# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a> +# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE. +Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S +Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 - +# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE. +# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm"></a> +Rule Brazil 2002 only - Nov 3 0:00 1:00 S +# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO. +# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm"></a> +Rule Brazil 2003 only - Oct 19 0:00 1:00 S +# Decree 5,223 (2004-10-01) reestablishes DST in MT. +# <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm"></a> +Rule Brazil 2004 only - Nov 2 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19), +# adopted by the same states as before. +Rule Brazil 2005 only - Oct 16 0:00 1:00 S +# Decree <a href="http://pcdsh01.on.br/DecHV5920.gif">5,920</a> (2006-10-03), +# adopted by the same states as before. +Rule Brazil 2006 only - Nov 5 0:00 1:00 S +Rule Brazil 2007 only - Feb 25 0:00 0 - +# (Decree number not yet known) +# http://www.brasil.gov.br/noticias/ultimas_noticias/horario_verao070920/ +# (2007-09-20) after a heads-up from Steffen Thorsen: +Rule Brazil 2007 max - Oct Sun>=8 0:00 1:00 S +Rule Brazil 2008 max - Feb Sun>=15 0:00 0 - +# The latest ruleset listed above says that the following states observe DST: +# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP. +# For dates after mid-2008, the above rules with TO="max" are guesses +# and are quite possibly wrong, but are more likely than no DST at all. + + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# +# Fernando de Noronha (administratively part of PE) +Zone America/Noronha -2:09:40 - LMT 1914 + -2:00 Brazil FN%sT 1990 Sep 17 + -2:00 - FNT 1999 Sep 30 + -2:00 Brazil FN%sT 2000 Oct 15 + -2:00 - FNT 2001 Sep 13 + -2:00 Brazil FN%sT 2002 Oct 1 + -2:00 - FNT +# Other Atlantic islands have no permanent settlement. +# These include Trindade and Martin Vaz (administratively part of ES), +# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE). +# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01; +# it also included the Penedos. +# +# Amapa (AP), east Para (PA) +# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu. +# The division between east and west Para is the river Xingu. +# In the north a very small part from the river Javary (now Jari I guess, +# the border with Amapa) to the Amazon, then to the Xingu. +Zone America/Belem -3:13:56 - LMT 1914 + -3:00 Brazil BR%sT 1988 Sep 12 + -3:00 - BRT +# +# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN), +# Paraiba (PB) +Zone America/Fortaleza -2:34:00 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 22 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Pernambuco (PE) (except Atlantic islands) +Zone America/Recife -2:19:36 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 15 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Tocantins (TO) +Zone America/Araguaina -3:12:48 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1995 Sep 14 + -3:00 Brazil BR%sT 2003 Sep 24 + -3:00 - BRT +# +# Alagoas (AL), Sergipe (SE) +Zone America/Maceio -2:22:52 - LMT 1914 + -3:00 Brazil BR%sT 1990 Sep 17 + -3:00 - BRT 1995 Oct 13 + -3:00 Brazil BR%sT 1996 Sep 4 + -3:00 - BRT 1999 Sep 30 + -3:00 Brazil BR%sT 2000 Oct 22 + -3:00 - BRT 2001 Sep 13 + -3:00 Brazil BR%sT 2002 Oct 1 + -3:00 - BRT +# +# Bahia (BA) +# There are too many Salvadors elsewhere, so use America/Bahia instead +# of America/Salvador. +Zone America/Bahia -2:34:04 - LMT 1914 + -3:00 Brazil BR%sT 2003 Sep 24 + -3:00 - BRT +# +# Goias (GO), Distrito Federal (DF), Minas Gerais (MG), +# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR), +# Santa Catarina (SC), Rio Grande do Sul (RS) +Zone America/Sao_Paulo -3:06:28 - LMT 1914 + -3:00 Brazil BR%sT 1963 Oct 23 00:00 + -3:00 1:00 BRST 1964 + -3:00 Brazil BR%sT +# +# Mato Grosso do Sul (MS) +Zone America/Campo_Grande -3:38:28 - LMT 1914 + -4:00 Brazil AM%sT +# +# Mato Grosso (MT) +Zone America/Cuiaba -3:44:20 - LMT 1914 + -4:00 Brazil AM%sT 2003 Sep 24 + -4:00 - AMT 2004 Oct 1 + -4:00 Brazil AM%sT +# +# west Para (PA), Rondonia (RO) +# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem. +Zone America/Porto_Velho -4:15:36 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT +# +# Roraima (RR) +Zone America/Boa_Vista -4:02:40 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT 1999 Sep 30 + -4:00 Brazil AM%sT 2000 Oct 15 + -4:00 - AMT +# +# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto +# The great circle line from Tabatinga to Porto Acre divides +# east from west Amazonas. +Zone America/Manaus -4:00:04 - LMT 1914 + -4:00 Brazil AM%sT 1988 Sep 12 + -4:00 - AMT 1993 Sep 28 + -4:00 Brazil AM%sT 1994 Sep 22 + -4:00 - AMT +# +# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant, +# Eirunepe, Envira, Ipixuna +Zone America/Eirunepe -4:39:28 - LMT 1914 + -5:00 Brazil AC%sT 1988 Sep 12 + -5:00 - ACT 1993 Sep 28 + -5:00 Brazil AC%sT 1994 Sep 22 + -5:00 - ACT +# +# Acre (AC) +Zone America/Rio_Branco -4:31:12 - LMT 1914 + -5:00 Brazil AC%sT 1988 Sep 12 + -5:00 - ACT + + +# Chile + +# From Eduardo Krell (1995-10-19): +# The law says to switch to DST at midnight [24:00] on the second SATURDAY +# of October.... The law is the same for March and October. +# (1998-09-29): +# Because of the drought this year, the government decided to go into +# DST earlier (saturday 9/26 at 24:00). This is a one-time change only ... +# (unless there's another dry season next year, I guess). + +# From Julio I. Pacheco Troncoso (1999-03-18): +# Because of the same drought, the government decided to end DST later, +# on April 3, (one-time change). + +# From Oscar van Vlijmen (2006-10-08): +# http://www.horaoficial.cl/cambio.htm + +# From Jesper Norgaard Welen (2006-10-08): +# I think that there are some obvious mistakes in the suggested link +# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4 +# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15 +# (they should have been 1990-09-15 and 1990-09-16 respectively), but +# anyhow it clears up some doubts too. + +# From Paul Eggert (2006-12-27): +# The following data for Chile and America/Santiago are from +# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by +# Jesper Norgaard Welen. The data for Pacific/Easter are from Shanks +# & Pottenger, except with DST transitions after 1932 cloned from +# America/Santiago. The pre-1980 Pacific/Easter data are dubious, +# but we have no other source. + +# From German Poo-Caaman~o (2008-03-03): +# Due to drought, Chile extends Daylight Time in three weeks. This +# is one-time change (Saturday 3/29 at 24:00 for America/Santiago +# and Saturday 3/29 at 22:00 for Pacific/Easter) +# The Supreme Decree is located at +# <a href="http://www.shoa.cl/servicios/supremo316.pdf"> +# http://www.shoa.cl/servicios/supremo316.pdf +# </a> +# and the instructions for 2008 are located in: +# <a href="http://www.horaoficial.cl/cambio.htm"> +# http://www.horaoficial.cl/cambio.htm +# </a>. + +# From José Miguel Garrido (2008-03-05): +# ... +# You could see the announces of the change on +# <a href="http://www.shoa.cl/noticias/2008/04hora/hora.htm"> +# http://www.shoa.cl/noticias/2008/04hora/hora.htm +# </a>. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Chile 1927 1932 - Sep 1 0:00 1:00 S +Rule Chile 1928 1932 - Apr 1 0:00 0 - +Rule Chile 1942 only - Jun 1 4:00u 0 - +Rule Chile 1942 only - Aug 1 5:00u 1:00 S +Rule Chile 1946 only - Jul 15 4:00u 1:00 S +Rule Chile 1946 only - Sep 1 3:00u 0:00 - +Rule Chile 1947 only - Apr 1 4:00u 0 - +Rule Chile 1968 only - Nov 3 4:00u 1:00 S +Rule Chile 1969 only - Mar 30 3:00u 0 - +Rule Chile 1969 only - Nov 23 4:00u 1:00 S +Rule Chile 1970 only - Mar 29 3:00u 0 - +Rule Chile 1971 only - Mar 14 3:00u 0 - +Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 - +Rule Chile 1973 only - Sep 30 4:00u 1:00 S +Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1987 only - Apr 12 3:00u 0 - +Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 - +Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S +Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1990 only - Mar 18 3:00u 0 - +Rule Chile 1990 only - Sep 16 4:00u 1:00 S +Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 - +Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S +Rule Chile 1997 only - Mar 30 3:00u 0 - +Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - +Rule Chile 1998 only - Sep 27 4:00u 1:00 S +Rule Chile 1999 only - Apr 4 3:00u 0 - +Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S +Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - +# N.B.: the end of March 29 in Chile is March 30 in Universal time, +# which is used below in specifying the transition. +Rule Chile 2008 only - Mar 30 3:00u 0 - +Rule Chile 2009 max - Mar Sun>=9 3:00u 0 - +# IATA SSIM anomalies: (1992-02) says 1992-03-14; +# (1996-09) says 1998-03-08. Ignore these. +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Santiago -4:42:46 - LMT 1890 + -4:42:46 - SMT 1910 # Santiago Mean Time + -5:00 - CLT 1916 Jul 1 # Chile Time + -4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time + -4:00 - CLT 1919 Jul 1 # Chile Time + -4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time + -5:00 Chile CL%sT 1947 May 22 # Chile Time + -4:00 Chile CL%sT +Zone Pacific/Easter -7:17:44 - LMT 1890 + -7:17:28 - EMT 1932 Sep # Easter Mean Time + -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time + -6:00 Chile EAS%sT +# +# Sala y Gomez Island is like Pacific/Easter. +# Other Chilean locations, including Juan Fernandez Is, San Ambrosio, +# San Felix, and Antarctic bases, are like America/Santiago. + +# Colombia +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule CO 1992 only - May 3 0:00 1:00 S +Rule CO 1993 only - Apr 4 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Bogota -4:56:20 - LMT 1884 Mar 13 + -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time + -5:00 CO CO%sT # Colombia Time +# Malpelo, Providencia, San Andres +# no information; probably like America/Bogota + +# Curacao +# +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that The Bottom and Philipsburg have been at +# -4:00 since standard time was introduced on 1912-03-02; and that +# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from +# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say +# Saba Island has been like Curacao. +# This all predates our 1970 cutoff, though. +# +# By July 2007 Curacao and St Maarten are planned to become +# associated states within the Netherlands, much like Aruba; +# Bonaire, Saba and St Eustatius would become directly part of the +# Netherlands as Kingdom Islands. This won't affect their time zones +# though, as far as we know. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad + -4:30 - ANT 1965 # Netherlands Antilles Time + -4:00 - AST + +# Ecuador +# +# From Paul Eggert (2007-03-04): +# Apparently Ecuador had a failed experiment with DST in 1992. +# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and +# <http://www.hoy.com.ec/NoticiaNue.asp?row_id=249856> (2006-11-06) both +# talk about "hora Sixto". Leave this alone for now, as we have no data. +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guayaquil -5:19:20 - LMT 1890 + -5:14:00 - QMT 1931 # Quito Mean Time + -5:00 - ECT # Ecuador Time +Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno + -5:00 - ECT 1986 + -6:00 - GALT # Galapagos Time + +# Falklands + +# From Paul Eggert (2006-03-22): +# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except +# the IATA gives 1996-09-08. Go with Shanks & Pottenger. + +# From Falkland Islands Government Office, London (2001-01-22) +# via Jesper Norgaard: +# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15 +# April 2001 and advance one hour to summer time at 2 am on Sunday 2 +# September. It is anticipated that the clocks will revert back at 2 +# am on Sunday 21 April 2002 and advance to summer time at 2 am on +# Sunday 1 September. + +# From Rives McDow (2001-02-13): +# +# I have communicated several times with people there, and the last +# time I had communications that was helpful was in 1998. Here is +# what was said then: +# +# "The general rule was that Stanley used daylight saving and the Camp +# did not. However for various reasons many people in the Camp have +# started to use daylight saving (known locally as 'Stanley Time') +# There is no rule as to who uses daylight saving - it is a matter of +# personal choice and so it is impossible to draw a map showing who +# uses it and who does not. Any list would be out of date as soon as +# it was produced. This year daylight saving ended on April 18/19th +# and started again on September 12/13th. I do not know what the rule +# is, but can find out if you like. We do not change at the same time +# as UK or Chile." +# +# I did have in my notes that the rule was "Second Saturday in Sep at +# 0:00 until third Saturday in Apr at 0:00". I think that this does +# not agree in some cases with Shanks; is this true? +# +# Also, there is no mention in the list that some areas in the +# Falklands do not use DST. I have found in my communications there +# that these areas are on the western half of East Falkland and all of +# West Falkland. Stanley is the only place that consistently observes +# DST. Again, as in other places in the world, the farmers don't like +# it. West Falkland is almost entirely sheep farmers. +# +# I know one lady there that keeps a list of which farm keeps DST and +# which doesn't each year. She runs a shop in Stanley, and says that +# the list changes each year. She uses it to communicate to her +# customers, catching them when they are home for lunch or dinner. + +# From Paul Eggert (2001-03-05): +# For now, we'll just record the time in Stanley, since we have no +# better info. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S +Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - +Rule Falk 1939 only - Oct 1 0:00 1:00 S +Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S +Rule Falk 1943 only - Jan 1 0:00 0 - +Rule Falk 1983 only - Sep lastSun 0:00 1:00 S +Rule Falk 1984 1985 - Apr lastSun 0:00 0 - +Rule Falk 1984 only - Sep 16 0:00 1:00 S +Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S +Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - +Rule Falk 2001 max - Apr Sun>=15 2:00 0 - +Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time + -4:00 Falk FK%sT 1983 May # Falkland Is Time + -3:00 Falk FK%sT 1985 Sep 15 + -4:00 Falk FK%sT + +# French Guiana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Cayenne -3:29:20 - LMT 1911 Jul + -4:00 - GFT 1967 Oct # French Guiana Time + -3:00 - GFT + +# Guyana +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown + -3:45 - GBGT 1966 May 26 # Br Guiana Time + -3:45 - GYT 1975 Jul 31 # Guyana Time + -3:00 - GYT 1991 +# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch. + -4:00 - GYT + +# Paraguay +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00, +# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999 +# editions of Shanks, and with the IATA, who say transitions occur at 00:00. +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Para 1975 1988 - Oct 1 0:00 1:00 S +Rule Para 1975 1978 - Mar 1 0:00 0 - +Rule Para 1979 1991 - Apr 1 0:00 0 - +Rule Para 1989 only - Oct 22 0:00 1:00 S +Rule Para 1990 only - Oct 1 0:00 1:00 S +Rule Para 1991 only - Oct 6 0:00 1:00 S +Rule Para 1992 only - Mar 1 0:00 0 - +Rule Para 1992 only - Oct 5 0:00 1:00 S +Rule Para 1993 only - Mar 31 0:00 0 - +Rule Para 1993 1995 - Oct 1 0:00 1:00 S +Rule Para 1994 1995 - Feb lastSun 0:00 0 - +Rule Para 1996 only - Mar 1 0:00 0 - +# IATA SSIM (2000-02) says 1999-10-10; ignore this for now. +# From Steffen Thorsen (2000-10-02): +# I have three independent reports that Paraguay changed to DST this Sunday +# (10-01). +# +# Translated by Gwillim Law (2001-02-27) from +# <a href="http://www.diarionoticias.com.py/011000/nacional/naciona1.htm"> +# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01) +# </a>: +# Starting at 0:00 today, the clock will be set forward 60 minutes, in +# fulfillment of Decree No. 7,273 of the Executive Power.... The time change +# system has been operating for several years. Formerly there was a separate +# decree each year; the new law has the same effect, but permanently. Every +# year, the time will change on the first Sunday of October; likewise, the +# clock will be set back on the first Sunday of March. +# +Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S +# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger. +Rule Para 1997 only - Feb lastSun 0:00 0 - +# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but +# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27). +Rule Para 1998 2001 - Mar Sun>=1 0:00 0 - +# From Rives McDow (2002-02-28): +# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the +# dst method to be from the first Sunday in September to the first Sunday in +# April. +Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - +Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S +# +# From Jesper Norgaard Welen (2005-01-02): +# There are several sources that claim that Paraguay made +# a timezone rule change in autumn 2004. +# From Steffen Thorsen (2005-01-05): +# Decree 1,867 (2004-03-05) +# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13) +# <http://www.presidencia.gov.py/decretos/D1867.pdf> +Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S +Rule Para 2005 max - Mar Sun>=8 0:00 0 - + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Asuncion -3:50:40 - LMT 1890 + -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time + -4:00 - PYT 1972 Oct # Paraguay Time + -3:00 - PYT 1974 Apr + -4:00 Para PY%sT + +# Peru +# +# <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net"> +# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a> +# When we were in Peru in 1985-1986, they apparently switched over +# sometime between December 29 and January 3 while we were on the Amazon. +# +# From Paul Eggert (2006-03-22): +# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule Peru 1938 only - Jan 1 0:00 1:00 S +Rule Peru 1938 only - Apr 1 0:00 0 - +Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S +Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 - +Rule Peru 1986 1987 - Jan 1 0:00 1:00 S +Rule Peru 1986 1987 - Apr 1 0:00 0 - +Rule Peru 1990 only - Jan 1 0:00 1:00 S +Rule Peru 1990 only - Apr 1 0:00 0 - +# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger. +Rule Peru 1994 only - Jan 1 0:00 1:00 S +Rule Peru 1994 only - Apr 1 0:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Lima -5:08:12 - LMT 1890 + -5:08:36 - LMT 1908 Jul 28 # Lima Mean Time? + -5:00 Peru PE%sT # Peru Time + +# South Georgia +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken + -2:00 - GST # South Georgia Time + +# South Sandwich Is +# uninhabited; scientific personnel have wintered + +# Suriname +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Paramaribo -3:40:40 - LMT 1911 + -3:40:52 - PMT 1935 # Paramaribo Mean Time + -3:40:36 - PMT 1945 Oct # The capital moved? + -3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time + -3:30 - SRT 1984 Oct # Suriname Time + -3:00 - SRT + +# Trinidad and Tobago +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2 + -4:00 - AST + +# Uruguay +# From Paul Eggert (1993-11-18): +# Uruguay wins the prize for the strangest peacetime manipulation of the rules. +# From Shanks & Pottenger: +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +# Whitman gives 1923 Oct 1; go with Shanks & Pottenger. +Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS +Rule Uruguay 1924 1926 - Apr 1 0:00 0 - +Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS +Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS +# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman. +Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 - +Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS +Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 - +# Whitman gives 1937 Oct 3; go with Shanks & Pottenger. +Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS +# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13, +# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger. +Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS +Rule Uruguay 1942 only - Jan 1 0:00 0 - +Rule Uruguay 1942 only - Dec 14 0:00 1:00 S +Rule Uruguay 1943 only - Mar 14 0:00 0 - +Rule Uruguay 1959 only - May 24 0:00 1:00 S +Rule Uruguay 1959 only - Nov 15 0:00 0 - +Rule Uruguay 1960 only - Jan 17 0:00 1:00 S +Rule Uruguay 1960 only - Mar 6 0:00 0 - +Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S +Rule Uruguay 1965 only - Sep 26 0:00 0 - +Rule Uruguay 1966 1967 - Oct 31 0:00 0 - +Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS +Rule Uruguay 1968 1970 - Dec 2 0:00 0 - +Rule Uruguay 1972 only - Apr 24 0:00 1:00 S +Rule Uruguay 1972 only - Aug 15 0:00 0 - +Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS +Rule Uruguay 1974 only - Dec 22 0:00 1:00 S +Rule Uruguay 1976 only - Oct 1 0:00 0 - +Rule Uruguay 1977 only - Dec 4 0:00 1:00 S +Rule Uruguay 1978 only - Apr 1 0:00 0 - +Rule Uruguay 1979 only - Oct 1 0:00 1:00 S +Rule Uruguay 1980 only - May 1 0:00 0 - +Rule Uruguay 1987 only - Dec 14 0:00 1:00 S +Rule Uruguay 1988 only - Mar 14 0:00 0 - +Rule Uruguay 1988 only - Dec 11 0:00 1:00 S +Rule Uruguay 1989 only - Mar 12 0:00 0 - +Rule Uruguay 1989 only - Oct 29 0:00 1:00 S +# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2, +# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA. +Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 - +Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S +Rule Uruguay 1992 only - Oct 18 0:00 1:00 S +Rule Uruguay 1993 only - Feb 28 0:00 0 - +# From Eduardo Cota (2004-09-20): +# The uruguayan government has decreed a change in the local time.... +# http://www.presidencia.gub.uy/decretos/2004091502.htm +Rule Uruguay 2004 only - Sep 19 0:00 1:00 S +# From Steffen Thorsen (2005-03-11): +# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to +# save energy ... it was postponed two weeks.... +# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm +Rule Uruguay 2005 only - Mar 27 2:00 0 - +# From Eduardo Cota (2005-09-27): +# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF +# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at +# 02:00 local time, official time in Uruguay will be at GMT -2. +Rule Uruguay 2005 only - Oct 9 2:00 1:00 S +Rule Uruguay 2006 only - Mar 12 2:00 0 - +# From Jesper Norgaard Welen (2006-09-06): +# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF +Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S +Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 - +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 + -3:44:44 - MMT 1920 May 1 # Montevideo MT + -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time + -3:00 Uruguay UY%sT + +# Venezuela +# +# From John Stainforth (2007-11-28): +# ... the change for Venezuela originally expected for 2007-12-31 has +# been brought forward to 2007-12-09. The official announcement was +# published today in the "Gaceta Oficial de la Republica Bolivariana +# de Venezuela, numero 38.819" (official document for all laws or +# resolution publication) +# http://www.globovision.com/news.php?nid=72208 + +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +Zone America/Caracas -4:27:44 - LMT 1890 + -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time? + -4:30 - VET 1965 # Venezuela Time + -4:00 - VET 2007 Dec 9 03:00 + -4:30 - VET diff --git a/libkcal/libical/tzdata/systemv b/libkcal/libical/tzdata/systemv new file mode 100644 index 000000000..6cf9645de --- /dev/null +++ b/libkcal/libical/tzdata/systemv @@ -0,0 +1,36 @@ +# @(#)systemv 8.1 + +# Old rules, should the need arise. +# No attempt is made to handle Newfoundland, since it cannot be expressed +# using the System V "TZ" scheme (half-hour offset), or anything outside +# North America (no support for non-standard DST start/end dates), nor +# the changes in the DST rules in the US after 1976 (which occurred after +# the old rules were written). +# +# If you need the old rules, uncomment ## lines. +# Compile this *without* leap second correction for true conformance. + +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D +Rule SystemV min 1973 - Oct lastSun 2:00 0 S +Rule SystemV 1974 only - Jan 6 2:00 1:00 D +Rule SystemV 1974 only - Nov lastSun 2:00 0 S +Rule SystemV 1975 only - Feb 23 2:00 1:00 D +Rule SystemV 1975 only - Oct lastSun 2:00 0 S +Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D +Rule SystemV 1976 max - Oct lastSun 2:00 0 S + +# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] +## Zone SystemV/AST4ADT -4:00 SystemV A%sT +## Zone SystemV/EST5EDT -5:00 SystemV E%sT +## Zone SystemV/CST6CDT -6:00 SystemV C%sT +## Zone SystemV/MST7MDT -7:00 SystemV M%sT +## Zone SystemV/PST8PDT -8:00 SystemV P%sT +## Zone SystemV/YST9YDT -9:00 SystemV Y%sT +## Zone SystemV/AST4 -4:00 - AST +## Zone SystemV/EST5 -5:00 - EST +## Zone SystemV/CST6 -6:00 - CST +## Zone SystemV/MST7 -7:00 - MST +## Zone SystemV/PST8 -8:00 - PST +## Zone SystemV/YST9 -9:00 - YST +## Zone SystemV/HST10 -10:00 - HST diff --git a/libkcal/libical/tzdata/yearistype.sh b/libkcal/libical/tzdata/yearistype.sh new file mode 100644 index 000000000..66dbf89a2 --- /dev/null +++ b/libkcal/libical/tzdata/yearistype.sh @@ -0,0 +1,40 @@ +#! /bin/sh + +: 'This file is in the public domain, so clarified as of' +: '2006-07-17 by Arthur David Olson.' + +: '@(#)yearistype.sh 8.2' + +case $#-$1 in + 2-|2-0*|2-*[!0-9]*) + echo "$0: wild year - $1" >&2 + exit 1 ;; +esac + +case $#-$2 in + 2-even) + case $1 in + *[24680]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-nonpres|2-nonuspres) + case $1 in + *[02468][048]|*[13579][26]) exit 1 ;; + *) exit 0 ;; + esac ;; + 2-odd) + case $1 in + *[13579]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-uspres) + case $1 in + *[02468][048]|*[13579][26]) exit 0 ;; + *) exit 1 ;; + esac ;; + 2-*) + echo "$0: wild type - $2" >&2 ;; +esac + +echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2 +exit 1 diff --git a/libkcal/libical/tzdata/zone.tab b/libkcal/libical/tzdata/zone.tab new file mode 100644 index 000000000..1647036c0 --- /dev/null +++ b/libkcal/libical/tzdata/zone.tab @@ -0,0 +1,423 @@ +# @(#)zone.tab 8.16 +# +# TZ zone descriptions +# +# From Paul Eggert (1996-08-05): +# +# This file contains a table with the following columns: +# 1. ISO 3166 2-character country code. See the file `iso3166.tab'. +# 2. Latitude and longitude of the zone's principal location +# in ISO 6709 sign-degrees-minutes-seconds format, +# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS, +# first latitude (+ is north), then longitude (+ is east). +# 3. Zone name used in value of TZ environment variable. +# 4. Comments; present if and only if the country has multiple rows. +# +# Columns are separated by a single tab. +# The table is sorted first by country, then an order within the country that +# (1) makes some geographical sense, and +# (2) puts the most populous zones first, where that does not contradict (1). +# +# Lines beginning with `#' are comments. +# +#country- +#code coordinates TZ comments +AD +4230+00131 Europe/Andorra +AE +2518+05518 Asia/Dubai +AF +3431+06912 Asia/Kabul +AG +1703-06148 America/Antigua +AI +1812-06304 America/Anguilla +AL +4120+01950 Europe/Tirane +AM +4011+04430 Asia/Yerevan +AN +1211-06900 America/Curacao +AO -0848+01314 Africa/Luanda +AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island +AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole +AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island +AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island +AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay +AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills +AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula +AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole +AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie +AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I +AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) +AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF) +AR -3319-06621 America/Argentina/San_Luis San Luis (SL) +AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) +AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) +AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) +AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) +AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) +AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) +AS -1416-17042 Pacific/Pago_Pago +AT +4813+01620 Europe/Vienna +AU -3133+15905 Australia/Lord_Howe Lord Howe Island +AU -4253+14719 Australia/Hobart Tasmania - most locations +AU -3956+14352 Australia/Currie Tasmania - King Island +AU -3749+14458 Australia/Melbourne Victoria +AU -3352+15113 Australia/Sydney New South Wales - most locations +AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna +AU -2728+15302 Australia/Brisbane Queensland - most locations +AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands +AU -3455+13835 Australia/Adelaide South Australia +AU -1228+13050 Australia/Darwin Northern Territory +AU -3157+11551 Australia/Perth Western Australia - most locations +AU -3143+12852 Australia/Eucla Western Australia - Eucla area +AW +1230-06958 America/Aruba +AX +6006+01957 Europe/Mariehamn +AZ +4023+04951 Asia/Baku +BA +4352+01825 Europe/Sarajevo +BB +1306-05937 America/Barbados +BD +2343+09025 Asia/Dhaka +BE +5050+00420 Europe/Brussels +BF +1222-00131 Africa/Ouagadougou +BG +4241+02319 Europe/Sofia +BH +2623+05035 Asia/Bahrain +BI -0323+02922 Africa/Bujumbura +BJ +0629+00237 Africa/Porto-Novo +BL +1753-06251 America/St_Barthelemy +BM +3217-06446 Atlantic/Bermuda +BN +0456+11455 Asia/Brunei +BO -1630-06809 America/La_Paz +BR -0351-03225 America/Noronha Atlantic islands +BR -0127-04829 America/Belem Amapa, E Para +BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) +BR -0803-03454 America/Recife Pernambuco +BR -0712-04812 America/Araguaina Tocantins +BR -0940-03543 America/Maceio Alagoas, Sergipe +BR -1259-03831 America/Bahia Bahia +BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS) +BR -2027-05437 America/Campo_Grande Mato Grosso do Sul +BR -1535-05605 America/Cuiaba Mato Grosso +BR -0846-06354 America/Porto_Velho W Para, Rondonia +BR +0249-06040 America/Boa_Vista Roraima +BR -0308-06001 America/Manaus E Amazonas +BR -0640-06952 America/Eirunepe W Amazonas +BR -0958-06748 America/Rio_Branco Acre +BS +2505-07721 America/Nassau +BT +2728+08939 Asia/Thimphu +BW -2545+02555 Africa/Gaborone +BY +5354+02734 Europe/Minsk +BZ +1730-08812 America/Belize +CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4606-06447 America/Moncton Atlantic Time - New Brunswick +CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations +CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore +CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations +CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations +CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973 +CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario +CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations +CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut +CA +744144-0944945 America/Resolute Eastern Time - Resolute, Nunavut +CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut +CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut +CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario +CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario +CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations +CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest +CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan +CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut +CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories +CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories +CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia +CA +4916-12307 America/Vancouver Pacific Time - west British Columbia +CA +6043-13503 America/Whitehorse Pacific Time - south Yukon +CA +6404-13925 America/Dawson Pacific Time - north Yukon +CC -1210+09655 Indian/Cocos +CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo +CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo +CF +0422+01835 Africa/Bangui +CG -0416+01517 Africa/Brazzaville +CH +4723+00832 Europe/Zurich +CI +0519-00402 Africa/Abidjan +CK -2114-15946 Pacific/Rarotonga +CL -3327-07040 America/Santiago most locations +CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez +CM +0403+00942 Africa/Douala +CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc. +CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin +CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc. +CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang +CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang +CO +0436-07405 America/Bogota +CR +0956-08405 America/Costa_Rica +CU +2308-08222 America/Havana +CV +1455-02331 Atlantic/Cape_Verde +CX -1025+10543 Indian/Christmas +CY +3510+03322 Asia/Nicosia +CZ +5005+01426 Europe/Prague +DE +5230+01322 Europe/Berlin +DJ +1136+04309 Africa/Djibouti +DK +5540+01235 Europe/Copenhagen +DM +1518-06124 America/Dominica +DO +1828-06954 America/Santo_Domingo +DZ +3647+00303 Africa/Algiers +EC -0210-07950 America/Guayaquil mainland +EC -0054-08936 Pacific/Galapagos Galapagos Islands +EE +5925+02445 Europe/Tallinn +EG +3003+03115 Africa/Cairo +EH +2709-01312 Africa/El_Aaiun +ER +1520+03853 Africa/Asmara +ES +4024-00341 Europe/Madrid mainland +ES +3553-00519 Africa/Ceuta Ceuta & Melilla +ES +2806-01524 Atlantic/Canary Canary Islands +ET +0902+03842 Africa/Addis_Ababa +FI +6010+02458 Europe/Helsinki +FJ -1808+17825 Pacific/Fiji +FK -5142-05751 Atlantic/Stanley +FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap +FM +0658+15813 Pacific/Ponape Ponape (Pohnpei) +FM +0519+16259 Pacific/Kosrae Kosrae +FO +6201-00646 Atlantic/Faroe +FR +4852+00220 Europe/Paris +GA +0023+00927 Africa/Libreville +GB +513030-0000731 Europe/London +GD +1203-06145 America/Grenada +GE +4143+04449 Asia/Tbilisi +GF +0456-05220 America/Cayenne +GG +4927-00232 Europe/Guernsey +GH +0533-00013 Africa/Accra +GI +3608-00521 Europe/Gibraltar +GL +6411-05144 America/Godthab most locations +GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund +GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit +GL +7634-06847 America/Thule Thule / Pituffik +GM +1328-01639 Africa/Banjul +GN +0931-01343 Africa/Conakry +GP +1614-06132 America/Guadeloupe +GQ +0345+00847 Africa/Malabo +GR +3758+02343 Europe/Athens +GS -5416-03632 Atlantic/South_Georgia +GT +1438-09031 America/Guatemala +GU +1328+14445 Pacific/Guam +GW +1151-01535 Africa/Bissau +GY +0648-05810 America/Guyana +HK +2217+11409 Asia/Hong_Kong +HN +1406-08713 America/Tegucigalpa +HR +4548+01558 Europe/Zagreb +HT +1832-07220 America/Port-au-Prince +HU +4730+01905 Europe/Budapest +ID -0610+10648 Asia/Jakarta Java & Sumatra +ID -0002+10920 Asia/Pontianak west & central Borneo +ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor +ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas +IE +5320-00615 Europe/Dublin +IL +3146+03514 Asia/Jerusalem +IM +5409-00428 Europe/Isle_of_Man +IN +2232+08822 Asia/Kolkata +IO -0720+07225 Indian/Chagos +IQ +3321+04425 Asia/Baghdad +IR +3540+05126 Asia/Tehran +IS +6409-02151 Atlantic/Reykjavik +IT +4154+01229 Europe/Rome +JE +4912-00207 Europe/Jersey +JM +1800-07648 America/Jamaica +JO +3157+03556 Asia/Amman +JP +353916+1394441 Asia/Tokyo +KE -0117+03649 Africa/Nairobi +KG +4254+07436 Asia/Bishkek +KH +1133+10455 Asia/Phnom_Penh +KI +0125+17300 Pacific/Tarawa Gilbert Islands +KI -0308-17105 Pacific/Enderbury Phoenix Islands +KI +0152-15720 Pacific/Kiritimati Line Islands +KM -1141+04316 Indian/Comoro +KN +1718-06243 America/St_Kitts +KP +3901+12545 Asia/Pyongyang +KR +3733+12658 Asia/Seoul +KW +2920+04759 Asia/Kuwait +KY +1918-08123 America/Cayman +KZ +4315+07657 Asia/Almaty most locations +KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) +KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) +KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau) +KZ +5113+05121 Asia/Oral West Kazakhstan +LA +1758+10236 Asia/Vientiane +LB +3353+03530 Asia/Beirut +LC +1401-06100 America/St_Lucia +LI +4709+00931 Europe/Vaduz +LK +0656+07951 Asia/Colombo +LR +0618-01047 Africa/Monrovia +LS -2928+02730 Africa/Maseru +LT +5441+02519 Europe/Vilnius +LU +4936+00609 Europe/Luxembourg +LV +5657+02406 Europe/Riga +LY +3254+01311 Africa/Tripoli +MA +3339-00735 Africa/Casablanca +MC +4342+00723 Europe/Monaco +MD +4700+02850 Europe/Chisinau +ME +4226+01916 Europe/Podgorica +MF +1804-06305 America/Marigot +MG -1855+04731 Indian/Antananarivo +MH +0709+17112 Pacific/Majuro most locations +MH +0905+16720 Pacific/Kwajalein Kwajalein +MK +4159+02126 Europe/Skopje +ML +1239-00800 Africa/Bamako +MM +1647+09610 Asia/Rangoon +MN +4755+10653 Asia/Ulaanbaatar most locations +MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan +MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar +MO +2214+11335 Asia/Macau +MP +1512+14545 Pacific/Saipan +MQ +1436-06105 America/Martinique +MR +1806-01557 Africa/Nouakchott +MS +1643-06213 America/Montserrat +MT +3554+01431 Europe/Malta +MU -2010+05730 Indian/Mauritius +MV +0410+07330 Indian/Maldives +MW -1547+03500 Africa/Blantyre +MX +1924-09909 America/Mexico_City Central Time - most locations +MX +2105-08646 America/Cancun Central Time - Quintana Roo +MX +2058-08937 America/Merida Central Time - Campeche, Yucatan +MX +2540-10019 America/Monterrey Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas +MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa +MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua +MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora +MX +3232-11701 America/Tijuana Pacific Time +MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia +MY +0133+11020 Asia/Kuching Sabah & Sarawak +MZ -2558+03235 Africa/Maputo +NA -2234+01706 Africa/Windhoek +NC -2216+16530 Pacific/Noumea +NE +1331+00207 Africa/Niamey +NF -2903+16758 Pacific/Norfolk +NG +0627+00324 Africa/Lagos +NI +1209-08617 America/Managua +NL +5222+00454 Europe/Amsterdam +NO +5955+01045 Europe/Oslo +NP +2743+08519 Asia/Katmandu +NR -0031+16655 Pacific/Nauru +NU -1901+16955 Pacific/Niue +NZ -3652+17446 Pacific/Auckland most locations +NZ -4357-17633 Pacific/Chatham Chatham Islands +OM +2336+05835 Asia/Muscat +PA +0858-07932 America/Panama +PE -1203-07703 America/Lima +PF -1732-14934 Pacific/Tahiti Society Islands +PF -0900-13930 Pacific/Marquesas Marquesas Islands +PF -2308-13457 Pacific/Gambier Gambier Islands +PG -0930+14710 Pacific/Port_Moresby +PH +1435+12100 Asia/Manila +PK +2452+06703 Asia/Karachi +PL +5215+02100 Europe/Warsaw +PM +4703-05620 America/Miquelon +PN -2504-13005 Pacific/Pitcairn +PR +182806-0660622 America/Puerto_Rico +PS +3130+03428 Asia/Gaza +PT +3843-00908 Europe/Lisbon mainland +PT +3238-01654 Atlantic/Madeira Madeira Islands +PT +3744-02540 Atlantic/Azores Azores +PW +0720+13429 Pacific/Palau +PY -2516-05740 America/Asuncion +QA +2517+05132 Asia/Qatar +RE -2052+05528 Indian/Reunion +RO +4426+02606 Europe/Bucharest +RS +4450+02030 Europe/Belgrade +RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad +RU +5545+03735 Europe/Moscow Moscow+00 - west Russia +RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea +RU +5312+05009 Europe/Samara Moscow+01 - Samara, Udmurtia +RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals +RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia +RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk +RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River +RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal +RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River +RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River +RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island +RU +5934+15048 Asia/Magadan Moscow+08 - Magadan +RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka +RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea +RW -0157+03004 Africa/Kigali +SA +2438+04643 Asia/Riyadh +SB -0932+16012 Pacific/Guadalcanal +SC -0440+05528 Indian/Mahe +SD +1536+03232 Africa/Khartoum +SE +5920+01803 Europe/Stockholm +SG +0117+10351 Asia/Singapore +SH -1555-00542 Atlantic/St_Helena +SI +4603+01431 Europe/Ljubljana +SJ +7800+01600 Arctic/Longyearbyen +SK +4809+01707 Europe/Bratislava +SL +0830-01315 Africa/Freetown +SM +4355+01228 Europe/San_Marino +SN +1440-01726 Africa/Dakar +SO +0204+04522 Africa/Mogadishu +SR +0550-05510 America/Paramaribo +ST +0020+00644 Africa/Sao_Tome +SV +1342-08912 America/El_Salvador +SY +3330+03618 Asia/Damascus +SZ -2618+03106 Africa/Mbabane +TC +2128-07108 America/Grand_Turk +TD +1207+01503 Africa/Ndjamena +TF -492110+0701303 Indian/Kerguelen +TG +0608+00113 Africa/Lome +TH +1345+10031 Asia/Bangkok +TJ +3835+06848 Asia/Dushanbe +TK -0922-17114 Pacific/Fakaofo +TL -0833+12535 Asia/Dili +TM +3757+05823 Asia/Ashgabat +TN +3648+01011 Africa/Tunis +TO -2110+17510 Pacific/Tongatapu +TR +4101+02858 Europe/Istanbul +TT +1039-06131 America/Port_of_Spain +TV -0831+17913 Pacific/Funafuti +TW +2503+12130 Asia/Taipei +TZ -0648+03917 Africa/Dar_es_Salaam +UA +5026+03031 Europe/Kiev most locations +UA +4837+02218 Europe/Uzhgorod Ruthenia +UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk +UA +4457+03406 Europe/Simferopol central Crimea +UG +0019+03225 Africa/Kampala +UM +1645-16931 Pacific/Johnston Johnston Atoll +UM +2813-17722 Pacific/Midway Midway Islands +UM +1917+16637 Pacific/Wake Wake Island +US +404251-0740023 America/New_York Eastern Time +US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations +US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area +US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County +US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations +US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties +US +411745-0863730 America/Indiana/Knox Eastern Time - Indiana - Starke County +US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County +US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County +US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County +US +415100-0873900 America/Chicago Central Time +US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County +US +382931-0871643 America/Indiana/Petersburg Central Time - Indiana - Pike County +US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties +US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County +US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area) +US +394421-1045903 America/Denver Mountain Time +US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon +US +364708-1084111 America/Shiprock Mountain Time - Navajo +US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona +US +340308-1181434 America/Los_Angeles Pacific Time +US +611305-1495401 America/Anchorage Alaska Time +US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle +US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck +US +643004-1652423 America/Nome Alaska Time - west Alaska +US +515248-1763929 America/Adak Aleutian Islands +US +211825-1575130 Pacific/Honolulu Hawaii +UY -3453-05611 America/Montevideo +UZ +3940+06648 Asia/Samarkand west Uzbekistan +UZ +4120+06918 Asia/Tashkent east Uzbekistan +VA +4154+01227 Europe/Vatican +VC +1309-06114 America/St_Vincent +VE +1030-06656 America/Caracas +VG +1827-06437 America/Tortola +VI +1821-06456 America/St_Thomas +VN +1045+10640 Asia/Ho_Chi_Minh +VU -1740+16825 Pacific/Efate +WF -1318-17610 Pacific/Wallis +WS -1350-17144 Pacific/Apia +YE +1245+04512 Asia/Aden +YT -1247+04514 Indian/Mayotte +ZA -2615+02800 Africa/Johannesburg +ZM -1525+02817 Africa/Lusaka +ZW -1750+03103 Africa/Harare diff --git a/libkcal/libical/vzic-1.3/ChangeLog b/libkcal/libical/vzic-1.3/ChangeLog new file mode 100644 index 000000000..f2d9569e5 --- /dev/null +++ b/libkcal/libical/vzic-1.3/ChangeLog @@ -0,0 +1,57 @@ +2006-03-18 Damon Chaplin <damon@gnome.org> + + * Released Vzic 1.3 + +2006-03-18 Damon Chaplin <damon@gnome.org> + + * vzic-output.c (expand_tzname): added special case for America/Nome. + (output_rrule): made hacks a bit more general, to handle Asia/Gaza + which now has a day=4 rule. At some point we should check what newer + versions of Outlook can handle so we can be more accurate. + + * vzic-dump.c (dump_time_zone_names): try looking for timezone info + using original and linked name. + + * README, *.c: fixed spelling 'compatable' -> 'compatible'. + + * vzic.c: patch from Jonathan Guthrie to support a --olson-dir option. + +2003-10-25 Damon Chaplin <damon@gnome.org> + + * Released Vzic 1.2 + +2003-10-25 Damon Chaplin <damon@gnome.org> + + * vzic-output.c: + * Makefile: moved the PRODUCT_ID and TZID_PREFIX settings to the + Makefile and changed the default so people don't accidentally use + the same IDs as Evolution. + + * vzic-parse.c (parse_time): substitute 23:59:59 when we read a time + of 24:00:00. This is a bit of a kludge to avoid problems, since + 24:00:00 is not a valid iCalendar time. Since 24:00:00 is only used + for a few timezones in the 1930s it doesn't matter too much. + + To write a correct fix we'd need to review all the code that deals + with times to see if it would be affected, e.g. a time of 24:00 on + one day should be considered equal to 0:00 the next day. + + We'd also need to adjust the output times to use 0:00 the next day + rather than 24:00. If we need to output recurrence rules that would + be a problem, since 'last saturday at 24:00' can't be easily + converted to another rule that uses 0:00 instead. + +2003-10-22 Damon Chaplin <damon@gnome.org> + + * Released Vzic 1.1 + +2003-10-22 Damon Chaplin <damon@gnome.org> + + * vzic-parse.c (parse_time): allow a time of 24:00, as used in + the America/Montreal and America/Toronto rules in the 1930s! + I'm not 100% sure the rest of the code will handle this OK, but + it only affects the 'pure' output. + +2003-09-01 Damon Chaplin <damon@gnome.org> + + * Released Vzic 1.0 diff --git a/libkcal/libical/vzic-1.3/Makefile b/libkcal/libical/vzic-1.3/Makefile new file mode 100644 index 000000000..7196c1529 --- /dev/null +++ b/libkcal/libical/vzic-1.3/Makefile @@ -0,0 +1,83 @@ + +# +# You will need to set this to the directory that the Olson timezone data +# files are in. +# +OLSON_DIR = ../tzdata + + +# This is used as the PRODID property on the iCalendar files output. +# It identifies the product which created the iCalendar objects. +# So you need to substitute your own organization name and product. +PRODUCT_ID = -//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN + + +# This is used to create unique IDs for each VTIMEZONE component. +# The prefix is put before each timezone city name. It should start and end +# with a '/'. The first part, i.e. 'myorganization.org' below, should be +# a unique vendor ID, e.g. use a hostname. The part after that can be +# anything you want. We use a date and version number for libical. The %D +# gets expanded to today's date. There is also a vzic-merge.pl which can be +# used to merge changes into a master set of VTIMEZONEs. If a VTIMEZONE has +# changed, it bumps the version number on the end of this prefix. */ +TZID_PREFIX = /kde.org/Olson_%D_1/ + + +# Set any -I include directories to find the libical header files, and the +# libical library to link with. You only need these if you want to run the +# tests. You may need to change the '#include <ical.h>' line at the top of +# test-vzic.c as well. +LIBICAL_CFLAGS = +LIBICAL_LDADD = -lical-evolution + + +# +# You shouldn't need to change the rest of the file. +# + +GLIB_CFLAGS = `pkg-config --cflags glib-2.0` +GLIB_LDADD = `pkg-config --libs glib-2.0` + +CFLAGS = -g -DOLSON_DIR=\"$(OLSON_DIR)\" -DPRODUCT_ID='"$(PRODUCT_ID)"' -DTZID_PREFIX='"$(TZID_PREFIX)"' $(GLIB_CFLAGS) $(LIBICAL_CFLAGS) + +OBJECTS = vzic.o vzic-parse.o vzic-dump.o vzic-output.o + +all: vzic + +vzic: $(OBJECTS) + $(CC) $(OBJECTS) $(GLIB_LDADD) -o vzic + +test-vzic: test-vzic.o + $(CC) test-vzic.o $(LIBICAL_LDADD) -o test-vzic + +# Dependencies. +$(OBJECTS): vzic.h +vzic.o vzic-parse.o: vzic-parse.h +vzic.o vzic-dump.o: vzic-dump.h +vzic.o vzic-output.o: vzic-output.h + +test-parse: vzic + ./vzic-dump.pl $(OLSON_DIR) + ./vzic --dump --pure + @echo + @echo "#" + @echo "# If either of these diff commands outputs anything there may be a problem." + @echo "#" + diff -ru zoneinfo/ZonesPerl zoneinfo/ZonesVzic + diff -ru zoneinfo/RulesPerl zoneinfo/RulesVzic + +test-changes: vzic test-vzic + ./test-vzic --dump-changes + ./vzic --dump-changes --pure + @echo + @echo "#" + @echo "# If this diff command outputs anything there may be a problem." + @echo "#" + diff -ru zoneinfo/ChangesVzic test-output + +clean: + -rm -rf vzic $(OBJECTS) *~ ChangesVzic RulesVzic ZonesVzic RulesPerl ZonesPerl test-vzic test-vzic.o + +.PHONY: clean perl-dump test-parse + + diff --git a/libkcal/libical/vzic-1.3/Makefile.org b/libkcal/libical/vzic-1.3/Makefile.org new file mode 100644 index 000000000..4b5917c24 --- /dev/null +++ b/libkcal/libical/vzic-1.3/Makefile.org @@ -0,0 +1,89 @@ + +# +# You will need to set this to the directory that the Olson timezone data +# files are in. +# +OLSON_DIR = /home/damon/src/olson/tzdata2006b + + +# This is used as the PRODID property on the iCalendar files output. +# It identifies the product which created the iCalendar objects. +# So you need to substitute your own organization name and product. +PRODUCT_ID = -//My Organization//NONSGML My Product//EN + +# This is what libical-evolution uses. +#PRODUCT_ID = -//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN + + +# This is used to create unique IDs for each VTIMEZONE component. +# The prefix is put before each timezone city name. It should start and end +# with a '/'. The first part, i.e. 'myorganization.org' below, should be +# a unique vendor ID, e.g. use a hostname. The part after that can be +# anything you want. We use a date and version number for libical. The %D +# gets expanded to today's date. There is also a vzic-merge.pl which can be +# used to merge changes into a master set of VTIMEZONEs. If a VTIMEZONE has +# changed, it bumps the version number on the end of this prefix. */ +TZID_PREFIX = /myorganization.org/%D_1/ + +# This is what libical-evolution uses. +#TZID_PREFIX = /softwarestudio.org/Olson_%D_1/ + + +# Set any -I include directories to find the libical header files, and the +# libical library to link with. You only need these if you want to run the +# tests. You may need to change the '#include <ical.h>' line at the top of +# test-vzic.c as well. +LIBICAL_CFLAGS = +LIBICAL_LDADD = -lical-evolution + + +# +# You shouldn't need to change the rest of the file. +# + +GLIB_CFLAGS = `pkg-config --cflags glib-2.0` +GLIB_LDADD = `pkg-config --libs glib-2.0` + +CFLAGS = -g -DOLSON_DIR=\"$(OLSON_DIR)\" -DPRODUCT_ID='"$(PRODUCT_ID)"' -DTZID_PREFIX='"$(TZID_PREFIX)"' $(GLIB_CFLAGS) $(LIBICAL_CFLAGS) + +OBJECTS = vzic.o vzic-parse.o vzic-dump.o vzic-output.o + +all: vzic + +vzic: $(OBJECTS) + $(CC) $(OBJECTS) $(GLIB_LDADD) -o vzic + +test-vzic: test-vzic.o + $(CC) test-vzic.o $(LIBICAL_LDADD) -o test-vzic + +# Dependencies. +$(OBJECTS): vzic.h +vzic.o vzic-parse.o: vzic-parse.h +vzic.o vzic-dump.o: vzic-dump.h +vzic.o vzic-output.o: vzic-output.h + +test-parse: vzic + ./vzic-dump.pl $(OLSON_DIR) + ./vzic --dump --pure + @echo + @echo "#" + @echo "# If either of these diff commands outputs anything there may be a problem." + @echo "#" + diff -ru zoneinfo/ZonesPerl zoneinfo/ZonesVzic + diff -ru zoneinfo/RulesPerl zoneinfo/RulesVzic + +test-changes: vzic test-vzic + ./test-vzic --dump-changes + ./vzic --dump-changes --pure + @echo + @echo "#" + @echo "# If this diff command outputs anything there may be a problem." + @echo "#" + diff -ru zoneinfo/ChangesVzic test-output + +clean: + -rm -rf vzic $(OBJECTS) *~ ChangesVzic RulesVzic ZonesVzic RulesPerl ZonesPerl test-vzic test-vzic.o + +.PHONY: clean perl-dump test-parse + + diff --git a/libkcal/libical/vzic-1.3/README b/libkcal/libical/vzic-1.3/README new file mode 100644 index 000000000..962ff2e67 --- /dev/null +++ b/libkcal/libical/vzic-1.3/README @@ -0,0 +1,202 @@ + + +VZIC README +=========== + +This is 'vzic', a program to convert the Olson timezone database files into +VTIMEZONE files compatible with the iCalendar specification (RFC2445). + +(The name is based on the 'zic' program which converts the Olson files into +time zone information files used by several Unix C libraries, including +glibc. See zic(8) and tzfile(5).) + + + +REQUIREMENTS +============ + +You need the Olson timezone database files, which can be found at: + + ftp://elsie.nci.nih.gov/pub/ + + (Old versions can be found at ftp://munnari.oz.au/pub/oldtz/) + + +Vzic also uses the GLib library (for hash tables, dynamic arrays, and date +calculations). You need version 2.0 or higher. You can get this from: + + http://www.gtk.org + + + +BUILDING +======== + +Edit the Makefile to set the OLSON_DIR, PRODUCT_ID and TZID_PREFIX variables. + +Then run 'make'. + + + +RUNNING +======= + +Run 'vzic'. + +The output is placed in the zoneinfo subdirectory by default, +but you can use the --output-dir options to set another toplevel output +directory. + +By default it outputs VTIMEZONEs that try to be compatible with Outlook +(2000, at least). Outlook can't handle certain iCalendar constructs in +VTIMEZONEs, such as RRULEs using BYMONTHDAY, so it has to adjust the RRULEs +slightly to get Outlook to parse them. Unfortunately this means they are +slightly wrong. If given the --pure option, vzic outputs the exact data, +without worrying about compatability. + +NOTE: We don't convert all the Olson files. We skip 'backward', 'etcetera', +'leapseconds', 'pacificnew', 'solar87', 'solar88' and 'solar89', 'factory' +and 'systemv', since these don't really provide any useful timezones. +See vzic.c. + + + +MERGING CHANGES INTO A MASTER SET OF VTIMEZONES +=============================================== + +The Olson timezone files are updated fairly often, so we need to build new +sets of VTIMEZONE files. Though we have to be careful to ensure that the TZID +of updated timezones is also updated, since it must remain unique. + +We use a version number on the end of the TZID prefix (see the TZIDPrefix +variable in vzic-output.c) to ensure this uniqueness. + +But we don't want to update the version numbers of VTIMEZONEs which have not +changed. So we use the vzic-merge.pl Perl script. This merges in the new set +of VTIMEZONEs with a 'master' set. It compares each new VTIMEZONE file with +the one in the master set (ignoring changes to the TZID). If the new +VTIMEZONE file is different, it copies it to the master set and sets the +version number to the old VTIMEZONE's version number + 1. + +To use vzic-merge.pl you must change the $MASTER_ZONEINFO_DIR and +$NEW_ZONEINFO_DIR variables at the top of the file to point to your 2 sets of +VTIMEZONEs. You then just run the script. (I recommend you keep a backup of +the old master VTIMEZONE files, and use diff to compare the new master set +with the old one, in case anything goes wrong.) + +You must merge in changes to the zones.tab file by hand. + +Note that some timezones are renamed or removed occasionally, so applications +should be able to cope with this. + + + +COMPATABILITY NOTES +=================== + +It seems that Microsoft Outlook is very picky about the iCalendar files it +will accept. (I've been testing with Outlook 2000. I hope the other versions +are no worse.) Here's a few problems we've had with the VTIMEZONEs: + + o Outlook doesn't like any years before 1600. We were using '1st Jan 0001' + in all VTIMEZONEs to specify the first UTC offset known for the timezone. + (The Olson data does not give a start date for this.) + + Now we just skip this first component for most timezones. The UTC offset + can still be found from the TZOFFSETFROM property of the first component. + + Though some timezones only specify one UTC offset that applies forever, + so in these cases we output '1st Jan 1970' (Indian/Cocos, + Pacific/Johnston). + + o Outlook doesn't like the BYMONTHDAY specifier in RRULEs. + + We have changed most of the VTIMEZONEs to use things like 'BYDAY=2SU' + rather than 'BYMONTHDAY=8,9,10,11,12,13,14;BYDAY=SU', though some of + them were impossible to convert correctly so they are not always correct. + + o Outlook doesn't like TZOFFSETFROM/TZOFFSETTO properties which include a + seconds component, e.g. 'TZOFFSETFROM:+110628'. + Quite a lot of the Olson timezones include seconds in their UTC offsets, + though no timezones currently have a UTC offset that uses the seconds + value. + + We've rounded all UTC offsets to the nearest minute. Since all timezone + offsets currently used have '00' as the seconds offset, this doesn't lose + us much. + + o Outlook doesn't like lines being split in certain places, even though + the iCalendar spec says they can be split anywhere. + + o Outlook can only handle one RDATE or a pair of RRULEs. So we had to remove + all historical data. + + +TESTING +======= + +Do a 'make test-vic', then run ./test-vic. + +The test-vzic program compares our libical code and VTIMEZONE data against +the Unix functions like mktime(). It steps over a period of time (1970-2037) +converting from UTC to a given timezone and back again every 15 minutes. +Any differences are output into the test-output directory. + +The output matches for all of the timezones, except in a few places where the +result can't be determined. So I think we can be fairly confident that the +VTIMEZONEs are correct. + +Note that you must use the same Olson data in libical that the OS is using +for mktime() etc. For example, I am using RedHat 9 which uses tzdata2002d, +so I converted this to VTIMEZONE files and installed it into the libical +timezone data directory before testing. (You need to use '--pure' when +creating the VTIMEZONE files as well.) + + +Testing the Parsing Code +------------------------ + +Run 'make test-parse'. + +This runs 'vzic --dump' and 'perl-dump' and compares the output. The diff +commands should not produce any output. + +'vzic --dump' dumps all the parsed data out in the original Olson format, +but without comments. The files are written into the ZonesVzic and RulesVzic +subdirectories of the zoneinfo directory. + +'make perl-dump' runs the vzic-dump.pl perl script which outputs the files +in the same format as 'vzic --dump' in the ZonesPerl and RulesPerl +subdirectories. The perl script doesn't actually parse the fields; it only +strips comments and massages the fields so we have the same output format. + +Currently they both produce exactly the same output so we know the parsing +code is OK. + + +Testing the VTIMEZONE Files +--------------------------- + +Run 'make test-changes'. + +This runs 'vzic --dump-changes' and 'test-vzic --dump-changes' and compares +the output. The diff command should not produce any output. + +Both commands output timezone changes for each zone up to a specific year +(2030) into files for each timezone. It outputs the timezone changes in a +list in this format: + + Timezone Name Date and Time of Change in UTC New Offset from UTC + + America/Dawson 26 Oct 1986 2:00:00 -0800 + +Unfortunately there are some differences here, but they all happen before +1970 so it doesn't matter too much. It looks like the libical code has +problems determining things like 'last Sunday of the month' before 1970. +This is because it uses mktime() etc. which can't really handle dates +before 1970. + + + +Damon Chaplin <damon@gnome.org>, 25 Oct 2003. + diff --git a/libkcal/libical/vzic-1.3/test-vzic.c b/libkcal/libical/vzic-1.3/test-vzic.c new file mode 100644 index 000000000..9da1abe1b --- /dev/null +++ b/libkcal/libical/vzic-1.3/test-vzic.c @@ -0,0 +1,422 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * test-vzic.c - test vzic + libical against mktime() and friends. + * + * Note that when we output VCALENDAR data compatible with Outlook the + * results aren't all correct. + * + * We have to modify some RRULEs which makes these timezones incorrect: + * + * Africa/Cairo + * America/Godthab + * America/Santiago + * Antarctica/Palmer + * Asia/Baghdad + * Asia/Damascus + * Asia/Jerusalem + * + * Also, we can only output one RDATE or a pair of RRULEs which may make some + * other timezones incorrect sometimes (e.g. if they change). + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <errno.h> + +#include <ical.h> +/*#include <evolution/ical.h>*/ + +#define CHANGES_MAX_YEAR 2030 + +/* These are the years between which we test against the Unix timezone + functions, inclusive. When using 'vzic --pure' you can test the full + range from 1970 to 2037 and it should match against mktime() etc. + (assuming you are using the same Olson timezone data for both). + + But when using VTIMEZONE's that are compatible with Outlook, it is only + worth testing times in the future. There will be lots of differences in + the past, since we can't include any historical changes in the files. */ +#if 1 +#define DUMP_START_YEAR 2003 +#define DUMP_END_YEAR 2037 +#else +#define DUMP_START_YEAR 1970 +#define DUMP_END_YEAR 2037 +#endif + +/* The maximum size of any complete pathname. */ +#define PATHNAME_BUFFER_SIZE 1024 + +#ifndef FALSE +#define FALSE (0) +#endif + +#ifndef TRUE +#define TRUE (!FALSE) +#endif + +int VzicDumpChanges = FALSE; + +/* We output beneath the current directory for now. */ +char *directory = "test-output"; + +static void usage (void); +static int parse_zone_name (char *name, + char **directory, + char **subdirectory, + char **filename); +static void ensure_directory_exists (char *directory); +static void dump_local_times (icaltimezone *zone, + FILE *fp); + + +int main(int argc, char* argv[]) +{ + icalarray *zones; + icaltimezone *zone; + char *zone_directory, *zone_subdirectory, *zone_filename, *location; + char output_directory[PATHNAME_BUFFER_SIZE]; + char filename[PATHNAME_BUFFER_SIZE]; + FILE *fp; + int i; + int skipping = TRUE; + + /* + * Command-Line Option Parsing. + */ + for (i = 1; i < argc; i++) { + /* --dump-changes: Dumps a list of times when each timezone changed, + and the new local time offset from UTC. */ + if (!strcmp (argv[i], "--dump-changes")) + VzicDumpChanges = TRUE; + + else + usage (); + } + + + zones = icaltimezone_get_builtin_timezones (); + + ensure_directory_exists (directory); + + for (i = 0; i < zones->num_elements; i++) { + zone = icalarray_element_at (zones, i); + + location = icaltimezone_get_location (zone); + +#if 0 + /* Use this to start at a certain zone. */ + if (skipping && strcmp (location, "America/Boise")) + continue; +#endif + + skipping = FALSE; + + /* Use this to only output data for certain timezones. */ +#if 0 + if (strcmp (location, "America/Cancun") + && strcmp (location, "Asia/Baku") + && strcmp (location, "Asia/Nicosia") + && strcmp (location, "Asia/Novosibirsk") + && strcmp (location, "Asia/Samarkand") + && strcmp (location, "Asia/Tashkent") + && strcmp (location, "Asia/Tbilisi") + && strcmp (location, "Asia/Yerevan") + && strcmp (location, "Australia/Broken_Hill") + && strcmp (location, "Europe/Simferopol") + && strcmp (location, "Europe/Tallinn") + && strcmp (location, "Europe/Zaporozhye") + ) + continue; +#endif + +#if 0 + printf ("%s\n", location); +#endif + + parse_zone_name (location, &zone_directory, &zone_subdirectory, + &zone_filename); + + sprintf (output_directory, "%s/%s", directory, zone_directory); + ensure_directory_exists (output_directory); + sprintf (filename, "%s/%s", output_directory, zone_filename); + + if (zone_subdirectory) { + sprintf (output_directory, "%s/%s/%s", directory, zone_directory, + zone_subdirectory); + ensure_directory_exists (output_directory); + sprintf (filename, "%s/%s", output_directory, zone_filename); + } + + fp = fopen (filename, "w"); + if (!fp) { + fprintf (stderr, "Couldn't create file: %s\n", filename); + exit (1); + } + + /* We can run 2 different tests - output all changes for each zone, or + test against mktime()/localtime(). Should have a command-line option + or something. */ + if (VzicDumpChanges) + icaltimezone_dump_changes (zone, CHANGES_MAX_YEAR, fp); + else + dump_local_times (zone, fp); + + if (ferror (fp)) { + fprintf (stderr, "Error writing file: %s\n", filename); + exit (1); + } + + fclose (fp); + } + + return 0; +} + + +static void +usage (void) +{ + fprintf (stderr, "Usage: test-vzic [--dump-changes]\n"); + + exit (1); +} + + +/* This checks that the Zone name only uses the characters in [-+_/a-zA-Z0-9], + and outputs a warning if it isn't. */ +static int +parse_zone_name (char *name, + char **directory, + char **subdirectory, + char **filename) +{ + static int invalid_zone_num = 1; + + char *p, ch, *first_slash_pos = NULL, *second_slash_pos = NULL; + int invalid = FALSE; + + for (p = name; (ch = *p) != 0; p++) { + if ((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z') + && (ch < '0' || ch > '9') && ch != '/' && ch != '_' + && ch != '-' && ch != '+') { + fprintf (stderr, "Warning: Unusual Zone name: %s\n", name); + invalid = TRUE; + break; + } + + if (ch == '/') { + if (!first_slash_pos) { + first_slash_pos = p; + } else if (!second_slash_pos) { + second_slash_pos = p; + } else { + fprintf (stderr, "Warning: More than 2 '/' characters in Zone name: %s\n", name); + invalid = TRUE; + break; + } + } + } + + if (!first_slash_pos) { + fprintf (stderr, "No '/' character in Zone name: %s. Skipping.\n", name); + return FALSE; + } + + if (invalid) { + fprintf (stderr, "Invalid zone name: %s\n", name); + exit (0); + } else { + *first_slash_pos = '\0'; + *directory = icalmemory_strdup (name); + *first_slash_pos = '/'; + + if (second_slash_pos) { + *second_slash_pos = '\0'; + *subdirectory = icalmemory_strdup (first_slash_pos + 1); + *second_slash_pos = '/'; + + *filename = icalmemory_strdup (second_slash_pos + 1); + } else { + *subdirectory = NULL; + *filename = icalmemory_strdup (first_slash_pos + 1); + } + } +} + + +static void +ensure_directory_exists (char *directory) +{ + struct stat filestat; + + if (stat (directory, &filestat) != 0) { + /* If the directory doesn't exist, try to create it. */ + if (errno == ENOENT) { + if (mkdir (directory, 0777) != 0) { + fprintf (stderr, "Can't create directory: %s\n", directory); + exit (1); + } + } else { + fprintf (stderr, "Error calling stat() on directory: %s\n", directory); + exit (1); + } + } else if (!S_ISDIR (filestat.st_mode)) { + fprintf (stderr, "Can't create directory, already exists: %s\n", + directory); + exit (1); + } +} + + +static void +dump_local_times (icaltimezone *zone, FILE *fp) +{ + static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + icaltimezone *utc_timezone; + struct icaltimetype tt, tt_copy; + struct tm tm, local_tm; + time_t t; + char tzstring[256], *location; + int last_year_output = 0; + int total_error = 0, total_error2 = 0; + + utc_timezone = icaltimezone_get_utc_timezone (); + + /* This is our UTC time that we will use to iterate over the period. */ + tt.year = DUMP_START_YEAR; + tt.month = 1; + tt.day = 1; + tt.hour = 0; + tt.minute = 0; + tt.second = 0; + tt.is_utc = 0; + tt.is_date = 0; + tt.zone = ""; + + tm.tm_year = tt.year - 1900; + tm.tm_mon = tt.month - 1; + tm.tm_mday = tt.day; + tm.tm_hour = tt.hour; + tm.tm_min = tt.minute; + tm.tm_sec = tt.second; + tm.tm_isdst = -1; + + /* Convert it to a time_t by saying it is in UTC. */ + putenv ("TZ=UTC"); + t = mktime (&tm); + + location = icaltimezone_get_location (zone); + sprintf (tzstring, "TZ=%s", location); + + /*printf ("Zone: %s\n", location);*/ + putenv (tzstring); + + /* Loop around converting the UTC time to local time, outputting it, and + then adding on 15 minutes to the UTC time. */ + while (tt.year <= DUMP_END_YEAR) { + if (tt.year > last_year_output) { + last_year_output = tt.year; +#if 0 + printf (" %i\n", last_year_output); + fprintf (fp, " %i\n", last_year_output); +#endif + } + +#if 1 + /* First use the Unix functions. */ + /* Now convert it to a local time in the given timezone. */ + local_tm = *localtime (&t); +#endif + +#if 1 + /* Now use libical. */ + tt_copy = tt; + icaltimezone_convert_time (&tt_copy, utc_timezone, zone); +#endif + +#if 1 + if (local_tm.tm_year + 1900 != tt_copy.year + || local_tm.tm_mon + 1 != tt_copy.month + || local_tm.tm_mday != tt_copy.day + || local_tm.tm_hour != tt_copy.hour + || local_tm.tm_min != tt_copy.minute + || local_tm.tm_sec != tt_copy.second) { + + /* The error format is: + + ERROR: Original-UTC-Time Local-Time-From-mktime Local-Time-From-Libical + + */ + + total_error++; + + fprintf (fp, "ERROR:%2i %s %04i %2i:%02i:%02i UTC", + tt.day, months[tt.month - 1], tt.year, + tt.hour, tt.minute, tt.second); + fprintf (fp, " ->%2i %s %04i %2i:%02i:%02i", + local_tm.tm_mday, months[local_tm.tm_mon], + local_tm.tm_year + 1900, + local_tm.tm_hour, local_tm.tm_min, local_tm.tm_sec); + fprintf (fp, " Us:%2i %s %04i %2i:%02i:%02i\n", + tt_copy.day, months[tt_copy.month - 1], tt_copy.year, + tt_copy.hour, tt_copy.minute, tt_copy.second); + } +#endif + + /* Now convert it back, and check we get the original time. */ + icaltimezone_convert_time (&tt_copy, zone, utc_timezone); + if (tt.year != tt_copy.year + || tt.month != tt_copy.month + || tt.day != tt_copy.day + || tt.hour != tt_copy.hour + || tt.minute != tt_copy.minute + || tt.second != tt_copy.second) { + + total_error2++; + + fprintf (fp, "ERROR 2: %2i %s %04i %2i:%02i:%02i UTC", + tt.day, months[tt.month - 1], tt.year, + tt.hour, tt.minute, tt.second); + fprintf (fp, " Us:%2i %s %04i %2i:%02i:%02i UTC\n", + tt_copy.day, months[tt_copy.month - 1], tt_copy.year, + tt_copy.hour, tt_copy.minute, tt_copy.second); + } + + + /* Increment the time. */ + icaltime_adjust (&tt, 0, 0, 15, 0); + + /* We assume leap seconds are not included in time_t values, which should + be true on POSIX systems. */ + t += 15 * 60; + } + + printf ("Zone: %40s Errors: %i (%i)\n", icaltimezone_get_location (zone), + total_error, total_error2); +} diff --git a/libkcal/libical/vzic-1.3/vzic-dump.c b/libkcal/libical/vzic-1.3/vzic-dump.c new file mode 100644 index 000000000..405d7eef6 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-dump.c @@ -0,0 +1,409 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * These functions are for dumping all the parsed Zones and Rules to + * files, to be compared with the output of vzic-dump.pl to check our parsing + * code is OK. Some of the functions are also used for producing debugging + * output. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "vzic.h" +#include "vzic-dump.h" + + +static void dump_add_rule (char *name, + GArray *rule_array, + GPtrArray *name_array); +static int dump_compare_strings (const void *arg1, + const void *arg2); + + +void +dump_zone_data (GArray *zone_data, + char *filename) +{ + static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + FILE *fp; + ZoneData *zone; + ZoneLineData *zone_line; + int i, j; + gboolean output_month, output_day, output_time; + + fp = fopen (filename, "w"); + if (!fp) { + fprintf (stderr, "Couldn't create file: %s\n", filename); + exit (1); + } + + for (i = 0; i < zone_data->len; i++) { + zone = &g_array_index (zone_data, ZoneData, i); + + fprintf (fp, "Zone\t%s\t", zone->zone_name); + + for (j = 0; j < zone->zone_line_data->len; j++) { + zone_line = &g_array_index (zone->zone_line_data, ZoneLineData, j); + + if (j != 0) + fprintf (fp, "\t\t\t"); + + fprintf (fp, "%s\t", dump_time (zone_line->stdoff_seconds, TIME_WALL, + FALSE)); + + if (zone_line->rules) + fprintf (fp, "%s\t", zone_line->rules); + else if (zone_line->save_seconds != 0) + fprintf (fp, "%s\t", dump_time (zone_line->save_seconds, TIME_WALL, + FALSE)); + else + fprintf (fp, "-\t"); + + fprintf (fp, "%s\t", zone_line->format ? zone_line->format : "-"); + + if (zone_line->until_set) { + fprintf (fp, "%s\t", dump_year (zone_line->until_year)); + + output_month = output_day = output_time = FALSE; + + if (zone_line->until_time_code != TIME_WALL + || zone_line->until_time_seconds != 0) + output_month = output_day = output_time = TRUE; + else if (zone_line->until_day_code != DAY_SIMPLE + || zone_line->until_day_number != 1) + output_month = output_day = TRUE; + else if (zone_line->until_month != 0) + output_month = TRUE; + + if (output_month) + fprintf (fp, "%s", months[zone_line->until_month]); + + fprintf (fp, "\t"); + + if (output_day) + fprintf (fp, "%s", dump_day_coded (zone_line->until_day_code, + zone_line->until_day_number, + zone_line->until_day_weekday)); + + fprintf (fp, "\t"); + + if (output_time) + fprintf (fp, "%s", dump_time (zone_line->until_time_seconds, + zone_line->until_time_code, FALSE)); + + } else { + fprintf (fp, "\t\t\t"); + } + + fprintf (fp, "\n"); + } + } + + fclose (fp); +} + + +void +dump_rule_data (GHashTable *rule_data, + char *filename) +{ + FILE *fp; + GPtrArray *name_array; + GArray *rule_array; + int i; + char *name; + + fp = fopen (filename, "w"); + if (!fp) { + fprintf (stderr, "Couldn't create file: %s\n", filename); + exit (1); + } + + /* We need to sort the rules by their names, so they are in the same order + as the Perl output. So we place all the names in a temporary GPtrArray, + sort it, then output them. */ + name_array = g_ptr_array_new (); + g_hash_table_foreach (rule_data, (GHFunc) dump_add_rule, name_array); + qsort (name_array->pdata, name_array->len, sizeof (char*), + dump_compare_strings); + + for (i = 0; i < name_array->len; i++) { + name = g_ptr_array_index (name_array, i); + rule_array = g_hash_table_lookup (rule_data, name); + if (!rule_array) { + fprintf (stderr, "Couldn't access rules: %s\n", name); + exit (1); + } + dump_rule_array (name, rule_array, fp); + } + + g_ptr_array_free (name_array, TRUE); + + fclose (fp); +} + + +static void +dump_add_rule (char *name, + GArray *rule_array, + GPtrArray *name_array) +{ + g_ptr_array_add (name_array, name); +} + + +static int +dump_compare_strings (const void *arg1, + const void *arg2) +{ + char **a, **b; + + a = (char**) arg1; + b = (char**) arg2; + + return strcmp (*a, *b); +} + + +void +dump_rule_array (char *name, + GArray *rule_array, + FILE *fp) +{ + static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + RuleData *rule; + int i; + +#if 0 + fprintf (fp, "\n# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S"); +#endif + + for (i = 0; i < rule_array->len; i++) { + rule = &g_array_index (rule_array, RuleData, i); + + fprintf (fp, "Rule\t%s\t%s\t", name, dump_year (rule->from_year)); + + if (rule->to_year == rule->from_year) + fprintf (fp, "only\t"); + else + fprintf (fp, "%s\t", dump_year (rule->to_year)); + + fprintf (fp, "%s\t", rule->type ? rule->type : "-"); + + fprintf (fp, "%s\t", months[rule->in_month]); + + fprintf (fp, "%s\t", + dump_day_coded (rule->on_day_code, rule->on_day_number, + rule->on_day_weekday)); + + fprintf (fp, "%s\t", dump_time (rule->at_time_seconds, rule->at_time_code, + FALSE)); + + fprintf (fp, "%s\t", dump_time (rule->save_seconds, TIME_WALL, TRUE)); + + fprintf (fp, "%s", rule->letter_s ? rule->letter_s : "-"); + + fprintf (fp, "\n"); + } +} + + +char* +dump_time (int seconds, + TimeCode time_code, + gboolean use_zero) +{ + static char buffer[256], *sign; + int hours, minutes; + char *code; + + if (time_code == TIME_STANDARD) + code = "s"; + else if (time_code == TIME_UNIVERSAL) + code = "u"; + else + code = ""; + + if (seconds < 0) { + seconds = -seconds; + sign = "-"; + } else { + sign = ""; + } + + hours = seconds / 3600; + minutes = (seconds % 3600) / 60; + seconds = seconds % 60; + + if (use_zero && hours == 0 && minutes == 0 && seconds == 0) + return "0"; + else if (seconds == 0) + sprintf (buffer, "%s%i:%02i%s", sign, hours, minutes, code); + else + sprintf (buffer, "%s%i:%02i:%02i%s", sign, hours, minutes, seconds, code); + + return buffer; +} + + +char* +dump_day_coded (DayCode day_code, + int day_number, + int day_weekday) +{ + static char buffer[256]; + static char *weekdays[] = { "Sun", "Mon", "Tue", "Wed", + "Thu", "Fri", "Sat" }; + + switch (day_code) { + case DAY_SIMPLE: + sprintf (buffer, "%i", day_number); + break; + case DAY_WEEKDAY_ON_OR_AFTER: + sprintf (buffer, "%s>=%i", weekdays[day_weekday], day_number); + break; + case DAY_WEEKDAY_ON_OR_BEFORE: + sprintf (buffer, "%s<=%i", weekdays[day_weekday], day_number); + break; + case DAY_LAST_WEEKDAY: + sprintf (buffer, "last%s", weekdays[day_weekday]); + break; + default: + fprintf (stderr, "Invalid day code: %i\n", day_code); + exit (1); + } + + return buffer; +} + + +char* +dump_year (int year) +{ + static char buffer[256]; + + if (year == YEAR_MINIMUM) + return "min"; + if (year == YEAR_MAXIMUM) + return "max"; + + sprintf (buffer, "%i", year); + return buffer; +} + + +void +dump_time_zone_names (GList *names, + char *output_dir, + GHashTable *zones_hash) +{ + char filename[PATHNAME_BUFFER_SIZE], *zone_name, *zone_name_in_hash = NULL; + char strings_filename[PATHNAME_BUFFER_SIZE]; + FILE *fp, *strings_fp = NULL; + GList *elem; + ZoneDescription *zone_desc; + + sprintf (filename, "%s/zones.tab", output_dir); + sprintf (strings_filename, "%s/zones.h", output_dir); + + fp = fopen (filename, "w"); + if (!fp) { + fprintf (stderr, "Couldn't create file: %s\n", filename); + exit (1); + } + + if (VzicDumpZoneTranslatableStrings) { + strings_fp = fopen (strings_filename, "w"); + if (!strings_fp) { + fprintf (stderr, "Couldn't create file: %s\n", strings_filename); + exit (1); + } + } + + names = g_list_sort (names, (GCompareFunc) strcmp); + + elem = names; + while (elem) { + zone_name = (char*) elem->data; + + zone_desc = g_hash_table_lookup (zones_hash, zone_name); + + /* SPECIAL CASES: These timezones are links from other zones and are + almost exactly the same - they are basically there so users can find + them a bit easier. But they don't have entries in the zone.tab file, + so we use the entry from the timezone linked from. */ + if (!zone_desc) { + if (!strcmp (zone_name, "America/Indiana/Indianapolis")) + zone_name_in_hash = "America/Indianapolis"; + else if (!strcmp (zone_name, "America/Kentucky/Louisville")) + zone_name_in_hash = "America/Louisville"; + else if (!strcmp (zone_name, "Asia/Istanbul")) + zone_name_in_hash = "Europe/Istanbul"; + else if (!strcmp (zone_name, "Europe/Nicosia")) + zone_name_in_hash = "Asia/Nicosia"; + + if (zone_name_in_hash) + zone_desc = g_hash_table_lookup (zones_hash, zone_name_in_hash); + } + + if (zone_desc) { + fprintf (fp, "%+04i%02i%02i %+04i%02i%02i %s\n", + zone_desc->latitude[0], zone_desc->latitude[1], + zone_desc->latitude[2], + zone_desc->longitude[0], zone_desc->longitude[1], + zone_desc->longitude[2], + zone_name); + } else { + g_print ("Zone description not found for: %s\n", zone_name); + fprintf (fp, "%s\n", zone_name); + } + + + if (VzicDumpZoneTranslatableStrings) { +#if 0 + char zone_name_buffer[1024], *src, *dest; + + for (src = zone_name, dest = zone_name_buffer; *src; src++, dest++) + *dest = (*src == '_') ? ' ' : *src; + *dest = '\0'; +#endif + + fprintf (strings_fp, "N_(\"%s\");\n", zone_name); + } + + elem = elem->next; + } + + fclose (fp); + + if (VzicDumpZoneTranslatableStrings) + fclose (strings_fp); +} + diff --git a/libkcal/libical/vzic-1.3/vzic-dump.h b/libkcal/libical/vzic-1.3/vzic-dump.h new file mode 100644 index 000000000..ab9fe001f --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-dump.h @@ -0,0 +1,58 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * These functions are for dumping all the parsed Zones and Rules to + * files, to be compared with the output of vzic-dump.pl to check our parsing + * code is OK. Some of the functions are also used for producing debugging + * output. + */ + +#ifndef _VZIC_DUMP_H_ +#define _VZIC_DUMP_H_ + +#include <glib.h> + +void dump_zone_data (GArray *zone_data, + char *filename); +void dump_rule_data (GHashTable *rule_data, + char *filename); + +void dump_rule_array (char *name, + GArray *rule_array, + FILE *fp); + +char* dump_year (int year); +char* dump_day_coded (DayCode day_code, + int day_number, + int day_weekday); +char* dump_time (int seconds, + TimeCode time_code, + gboolean use_zero); + +void dump_time_zone_names (GList *names, + char *output_dir, + GHashTable *zones_hash); + +#endif /* _VZIC_DUMP_H_ */ diff --git a/libkcal/libical/vzic-1.3/vzic-dump.pl b/libkcal/libical/vzic-1.3/vzic-dump.pl new file mode 100755 index 000000000..dc789bc81 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-dump.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl -w + +# +# Vzic - a program to convert Olson timezone database files into VZTIMEZONE +# files compatible with the iCalendar specification (RFC2445). +# +# Copyright (C) 2000-2001 Ximian, Inc. +# Copyright (C) 2003 Damon Chaplin. +# +# Author: Damon Chaplin <damon@gnome.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +# + +# +# This reads the Olson timezone files, strips any comments, and outputs them +# in a very simple format with tab-separated fields. It is used to compare +# with the output of dump_zone_data() and dump_rule_data() to double-check +# that we have parsed the files correctly. +# + +my $zones_fh = "zonesfile"; +my $rules_fh = "rulesfile"; + +my %Rules; + +if ($#ARGV != 0) { + die "Usage: $0 <OlsonDirectory>"; +} + +my $OLSON_DIR = $ARGV[0]; + +# We place output in subdirectories of the current directory. +my $OUTPUT_DIR = "zoneinfo"; + +if (! -d "$OUTPUT_DIR") { + mkdir ("$OUTPUT_DIR", 0777) + || die "Can't create directory: $OUTPUT_DIR"; +} +if (! -d "$OUTPUT_DIR/ZonesPerl") { + mkdir ("$OUTPUT_DIR/ZonesPerl", 0777) + || die "Can't create directory: $OUTPUT_DIR/ZonesPerl"; +} +if (! -d "$OUTPUT_DIR/RulesPerl") { + mkdir ("$OUTPUT_DIR/RulesPerl", 0777) + || die "Can't create directory: $OUTPUT_DIR/RulesPerl"; +} + + +&ReadOlsonFile ("africa"); +&ReadOlsonFile ("antarctica"); +&ReadOlsonFile ("asia"); +&ReadOlsonFile ("australasia"); +&ReadOlsonFile ("europe"); +&ReadOlsonFile ("northamerica"); +&ReadOlsonFile ("southamerica"); + +# These are backwards-compatability and weird stuff. +#&ReadOlsonFile ("backward"); +#&ReadOlsonFile ("etcetera"); +#&ReadOlsonFile ("leapseconds"); +#&ReadOlsonFile ("pacificnew"); +#&ReadOlsonFile ("solar87"); +#&ReadOlsonFile ("solar88"); +#&ReadOlsonFile ("solar89"); + +# We don't do this one since it is not useful and the use of '"' in the Zone +# line messes up our split() command. +#&ReadOlsonFile ("factory"); + +# We don't do this since the vzic program can't do it. +#&ReadOlsonFile ("systemv"); + + + + +1; + + +sub ReadOlsonFile { + my ($file) = @_; + +# print ("Reading olson file: $file\n"); + + open (OLSONFILE, "$OLSON_DIR/$file") + || die "Can't open file: $file"; + + open ($zones_fh, ">$OUTPUT_DIR/ZonesPerl/$file") + || die "Can't open file: $OUTPUT_DIR/ZonesPerl/$file"; + + open ($rules_fh, ">$OUTPUT_DIR/RulesPerl/$file") + || die "Can't open file: $OUTPUT_DIR/RulesPerl/$file"; + + %Rules = (); + + my $zone_continues = 0; + + while (<OLSONFILE>) { + next if (m/^#/); + + # '#' characters can appear in strings, but the Olson files don't use + # that feature at present so we treat all '#' as comments for now. + s/#.*//; + + next if (m/^\s*$/); + + if ($zone_continues) { + $zone_continues = &ReadZoneContinuationLine; + + } elsif (m/^Rule\s/) { + &ReadRuleLine; + + } elsif (m/^Zone\s/) { + $zone_continues = &ReadZoneLine; + + } elsif (m/^Link\s/) { +# print "Link: $link_from, $link_to\n"; + + } elsif (m/^Leap\s/) { +# print "Leap\n"; + + } else { + die "Invalid line: $_"; + } + } + +# print ("Read olson file: $file\n"); + + foreach $key (sort (keys (%Rules))) { + print $rules_fh "$Rules{$key}" + } + + close ($zones_fh); + close ($rules_fh); + close (OLSONFILE); +} + + +sub ReadZoneLine { + my ($zone, $name, $gmtoff, $rules_save, $format, + $until_year, $until_month, $until_day, $until_time, $remainder) + = split ' ', $_, 10; + + return &ReadZoneLineCommon ($zone, $name, $gmtoff, $rules_save, $format, + $until_year, $until_month, $until_day, + $until_time); +} + + +sub ReadZoneContinuationLine { + my ($gmtoff, $rules_save, $format, + $until_year, $until_month, $until_day, $until_time, $remainder) + = split ' ', $_, 8; + + return &ReadZoneLineCommon ("", "", $gmtoff, $rules_save, $format, + $until_year, $until_month, $until_day, + $until_time); +} + + +sub ReadZoneLineCommon { + my ($zone, $name, $gmtoff, $rules_save, $format, + $until_year, $until_month, $until_day, $until_time) = @_; + + if (!defined ($until_year)) { $until_year = ""; } + if (!defined ($until_month)) { $until_month = ""; } + if (!defined ($until_day)) { $until_day = ""; } + if (!defined ($until_time)) { $until_time = ""; } + + # A few of the gmtoffsets have an unnecessary :00 seconds. + $gmtoff =~ s/(\d+):(\d+):00/$1:$2/; + + # Make sure the gmtoff does have minutes. + $gmtoff =~ s/^(-?\d+)$/$1:00/; + + # Fix a few other bits so they all use the same format. + if ($gmtoff eq "0") { $gmtoff = "0:00"; } + $until_time =~ s/^0(\d):/$1:/; + if ($until_time eq "0:00") { $until_time = ""; } + if ($until_day eq "1" && $until_time eq "") { $until_day = ""; } + if ($until_month eq "Jan" && $until_day eq "" && $until_time eq "") { + $until_month = ""; + } + + # For Zone continuation lines we need to insert an extra TAB. + if (!$zone) { $zone = "\t" }; + + print $zones_fh "$zone\t$name\t$gmtoff\t$rules_save\t$format\t$until_year\t$until_month\t$until_day\t$until_time\n"; + + if (defined ($until_year) && $until_year) { + return 1; + } else { + return 0; + } +} + + +sub ReadRuleLine { + my ($rule, $name, $from, $to, $type, $in, $on, $at, $save, $letter_s, + $remainder) = split; + + $at =~ s/(\d+:\d+):00/$1/; + $save =~ s/(\d+:\d+):00/$1/; + if ($save eq "0:00") { $save = "0"; } + + $Rules{$name} .= "$rule\t$name\t$from\t$to\t$type\t$in\t$on\t$at\t$save\t$letter_s\n"; + +# print $rules_fh "$rule\t$name\t$from\t$to\t$type\t$in\t$on\t$at\t$save\t$letter_s\n"; +} + diff --git a/libkcal/libical/vzic-1.3/vzic-merge.pl b/libkcal/libical/vzic-1.3/vzic-merge.pl new file mode 100755 index 000000000..d1e545ee0 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-merge.pl @@ -0,0 +1,127 @@ +#!/usr/bin/perl -w + +# +# Vzic - a program to convert Olson timezone database files into VZTIMEZONE +# files compatible with the iCalendar specification (RFC2445). +# +# Copyright (C) 2001 Ximian, Inc. +# Copyright (C) 2003 Damon Chaplin. +# +# Author: Damon Chaplin <damon@gnome.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +# + +# +# This merges in a new set of VTIMEZONE files with the 'master' set. It only +# updates the files in the master set if the VTIMEZONE component has really +# been changes. Note that the TZID normally includes the date the VTIMEZONE +# file was generated on, so we have to ignore this when comparing the files. +# + +# Set these to the toplevel directories of the 2 sets of VTIMEZONE files. +#$MASTER_ZONEINFO_DIR = "/home/damon/cvs/libical/zoneinfo"; +$MASTER_ZONEINFO_DIR = "/usr/share/libical-evolution/zoneinfo"; +$NEW_ZONEINFO_DIR = "/home/damon/src/vzic-1.0/zoneinfo"; + +# Set this to 1 if you have version numbers in the TZID like libical. +$LIBICAL_VERSIONING = 1; + +# Set this to 0 for dry-runs, and 1 to actually update. +$DO_UPDATES = 1; + +# Save this so we can restore it later. +$input_record_separator = $/; + +chdir $NEW_ZONEINFO_DIR + || die "Can't cd to $NEW_ZONEINFO_DIR"; + +foreach $new_file (`find -name "*.ics"`) { + # Get rid of './' at start and whitespace at end. + $new_file =~ s/^\.\///; + $new_file =~ s/\s+$//; + +# print "File: $new_file\n"; + + open (NEWZONEFILE, "$new_file") + || die "Can't open file: $NEW_ZONEINFO_DIR/$new_file"; + undef $/; + $new_contents = <NEWZONEFILE>; + $/ = $input_record_separator; + close (NEWZONEFILE); + + $master_file = $MASTER_ZONEINFO_DIR . "/$new_file"; + +# print "Master File: $master_file\n"; + + $copy_to_master = 0; + + # If the ics file exists in the master copy we have to compare them, + # otherwise we can just copy the new file into the master directory. + if (-e $master_file) { + open (MASTERZONEFILE, "$master_file") + || die "Can't open file: $master_file"; + undef $/; + $master_contents = <MASTERZONEFILE>; + $/ = $input_record_separator; + close (MASTERZONEFILE); + + $new_contents_copy = $new_contents; + + # Strip the TZID from both contents. + $new_contents_copy =~ s/^TZID:\S+$//m; + $new_tzid = $&; + $master_contents =~ s/^TZID:\S+$//m; + $master_tzid = $&; + +# print "Matched: $master_tzid\n"; + + + if ($new_contents_copy ne $master_contents) { + print "$new_file has changed. Updating...\n"; + $copy_to_master = 1; + + if ($LIBICAL_VERSIONING) { + # We bump the version number in the new file. + $master_tzid =~ m%_(\d+)/%; + $version_num = $1; +# print "Version: $version_num\n"; + + $version_num++; + $new_tzid =~ s%_(\d+)/%_$version_num/%; + +# print "New TZID: $new_tzid\n"; + $new_contents =~ s/^TZID:\S+$/$new_tzid/m; + } + } + + } else { + print "$new_file doesn't exist in master directory. Copying...\n"; + $copy_to_master = 1; + } + + if ($copy_to_master) { +# print "Updating: $new_file\n"; + + if ($DO_UPDATES) { + open (MASTERZONEFILE, ">$master_file") + || die "Can't create file: $master_file"; + print MASTERZONEFILE $new_contents; + close (MASTERZONEFILE); + } + } + +} + diff --git a/libkcal/libical/vzic-1.3/vzic-output.c b/libkcal/libical/vzic-1.3/vzic-output.c new file mode 100644 index 000000000..a23ece13a --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-output.c @@ -0,0 +1,2325 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +/* ALGORITHM: + * + * First we expand all the Rule arrays, so that each element only represents 1 + * year. If a Rule extends to infinity we expand it up to a few years past the + * maximum UNTIL year used in any of the timezones. We do this to make sure + * that the last of the expanded Rules (which may be infinite) is only used + * in the last of the time periods (i.e. the last Zone line). + * + * The Rule arrays are also sorted by the start time (FROM + IN + ON + AT). + * Doing all this makes it much easier to find which rules apply to which + * periods. + * + * For each timezone (i.e. ZoneData element), we step through each of the + * time periods, the ZoneLineData elements (which represent each Zone line + * from the Olson file.) + * + * We calculate the start & end time of the period. + * - For the first line the start time is -infinity. + * - For the last line the end time is +infinity. + * - The end time of each line is also the start time of the next. + * + * We create an array of time changes which occur in this period, including + * the one implied by the Zone line itself (though this is later taken out + * if it is found to be at exactly the same time as the first Rule). + * + * Now we iterate over the time changes, outputting them as STANDARD or + * DAYLIGHT components. We also try to merge them together into RRULEs or + * use RDATEs. + */ + + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "vzic.h" +#include "vzic-output.h" + +#include "vzic-dump.h" + + +/* These come from the Makefile. See the comments there. */ +char *ProductID = PRODUCT_ID; +char *TZIDPrefix = TZID_PREFIX; + +/* We expand the TZIDPrefix, replacing %D with the date, in here. */ +char TZIDPrefixExpanded[1024]; + + +/* We only use RRULEs if there are at least MIN_RRULE_OCCURRENCES occurrences, + since otherwise RDATEs are more efficient. Actually, I've set this high + so we only use RRULEs for infinite recurrences. Since expanding RRULEs is + very time-consuming, this seems sensible. */ +#define MIN_RRULE_OCCURRENCES 100 + + +/* The year we go up to when dumping the list of timezone changes (used + for testing & debugging). */ +#define MAX_CHANGES_YEAR 2030 + +/* This is the maximum year that time_t value can typically hold on 32-bit + systems. */ +#define MAX_TIME_T_YEAR 2037 + + +/* The year we use to start RRULEs. */ +#define RRULE_START_YEAR 1970 + +/* The year we use for RDATEs. */ +#define RDATE_YEAR 1970 + + +static char *WeekDays[] = { "SU", "MO", "TU", "WE", "TH", "FR", "SA" }; +static int DaysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + +char *CurrentZoneName; + + +typedef struct _VzicTime VzicTime; +struct _VzicTime +{ + /* Normal years, e.g. 2001. */ + int year; + + /* 0 (Jan) to 11 (Dec). */ + int month; + + /* The day, either a simple month day number, 1-31, or a rule such as + the last Sunday, or the first Monday on or after the 8th. */ + DayCode day_code; + int day_number; /* 1 to 31. */ + int day_weekday; /* 0 (Sun) to 6 (Sat). */ + + /* The time, in seconds from midnight. The code specifies whether the + time is a wall clock time, local standard time, or universal time. */ + int time_seconds; + TimeCode time_code; + + /* The offset from UTC for local standard time. */ + int stdoff; + + /* The offset from UTC for local wall clock time. If this is different to + stdoff then this is a DAYLIGHT component. This is TZOFFSETTO. */ + int walloff; + + /* TRUE if the time change recurs every year to infinity. */ + gboolean is_infinite; + + /* TRUE if the change has already been output. */ + gboolean output; + + /* These are the offsets of the previous VzicTime, and are used when + calculating the time of the change. We place them here in + output_zone_components() to simplify the output code. */ + int prev_stdoff; + int prev_walloff; + + /* The abbreviated form of the timezone name. Note that this may not be + unique. */ + char *tzname; +}; + + +static void expand_and_sort_rule_array (gpointer key, + gpointer value, + gpointer data); +static int rule_sort_func (const void *arg1, + const void *arg2); +static void output_zone (char *directory, + ZoneData *zone, + char *zone_name, + GHashTable *rule_data); +static gboolean parse_zone_name (char *name, + char **directory, + char **subdirectory, + char **filename); +static void output_zone_to_files (ZoneData *zone, + char *zone_name, + GHashTable *rule_data, + FILE *fp, + FILE *changes_fp); +static gboolean add_rule_changes (ZoneLineData *zone_line, + char *zone_name, + GArray *changes, + GHashTable *rule_data, + VzicTime *start, + VzicTime *end, + char **start_letter_s, + int *save_seconds); +static char* expand_tzname (char *zone_name, + char *format, + gboolean have_letter_s, + char *letter_s, + gboolean is_daylight); +static int compare_times (VzicTime *time1, + int stdoff1, + int walloff1, + VzicTime *time2, + int stdoff2, + int walloff2); +static gboolean times_match (VzicTime *time1, + int stdoff1, + int walloff1, + VzicTime *time2, + int stdoff2, + int walloff2); +static void output_zone_components (FILE *fp, + char *name, + GArray *changes); +static void set_previous_offsets (GArray *changes); +static gboolean check_for_recurrence (FILE *fp, + GArray *changes, + int idx); +static void check_for_rdates (FILE *fp, + GArray *changes, + int idx); +static gboolean timezones_match (char *tzname1, + char *tzname2); +static int output_component_start (char *buffer, + VzicTime *vzictime, + gboolean output_rdate, + gboolean use_same_tz_offset); +static void output_component_end (FILE *fp, + VzicTime *vzictime); + +static void vzictime_init (VzicTime *vzictime); +static int calculate_actual_time (VzicTime *vzictime, + TimeCode time_code, + int stdoff, + int walloff); +static int calculate_wall_time (int time, + TimeCode time_code, + int stdoff, + int walloff, + int *day_offset); +static int calculate_until_time (int time, + TimeCode time_code, + int stdoff, + int walloff, + int *year, + int *month, + int *day); +static void fix_time_overflow (int *year, + int *month, + int *day, + int day_offset); + +static char* format_time (int year, + int month, + int day, + int time); +static char* format_tz_offset (int tz_offset, + gboolean round_seconds); +static gboolean output_rrule (char *rrule_buffer, + int month, + DayCode day_code, + int day_number, + int day_weekday, + int day_offset, + char *until); +static gboolean output_rrule_2 (char *buffer, + int month, + int day_number, + int day_weekday); + +static char* format_vzictime (VzicTime *vzictime); + +static void dump_changes (FILE *fp, + char *zone_name, + GArray *changes); +static void dump_change (FILE *fp, + char *zone_name, + VzicTime *vzictime, + int year); + +static void expand_tzid_prefix (void); + + +void +output_vtimezone_files (char *directory, + GArray *zone_data, + GHashTable *rule_data, + GHashTable *link_data, + int max_until_year) +{ + ZoneData *zone; + GList *links; + char *link_to; + int i; + + /* Insert today's date into the TZIDs we output. */ + expand_tzid_prefix (); + + /* Expand the rule data so that each entry specifies only one year, and + sort it so we can easily find the rules applicable to each Zone span. */ + g_hash_table_foreach (rule_data, expand_and_sort_rule_array, + GINT_TO_POINTER (max_until_year)); + + /* Output each timezone. */ + for (i = 0; i < zone_data->len; i++) { + zone = &g_array_index (zone_data, ZoneData, i); + output_zone (directory, zone, zone->zone_name, rule_data); + + /* Look for any links from this zone. */ + links = g_hash_table_lookup (link_data, zone->zone_name); + + while (links) { + link_to = links->data; + + /* We ignore Links that don't have a '/' in them (things like 'EST5EDT'). + */ + if (strchr (link_to, '/')) { + output_zone (directory, zone, link_to, rule_data); + } + + links = links->next; + } + } +} + + +static void +expand_and_sort_rule_array (gpointer key, + gpointer value, + gpointer data) +{ + char *name = key; + GArray *rule_array = value; + RuleData *rule, tmp_rule; + int len, max_year, i, from, to, year; + gboolean is_infinite; + + /* We expand the rule data to a year greater than any year used in a Zone + UNTIL value. This is so that we can easily get parts of the array to + use for each Zone line. */ + max_year = GPOINTER_TO_INT (data) + 2; + + /* If any of the rules apply to several years, we turn it into a single rule + for each year. If the Rule is infinite we go up to max_year. + We change the FROM field in the copies of the Rule, setting it to each + of the years, and set TO to FROM, except if TO was YEAR_MAXIMUM we set + the last TO to YEAR_MAXIMUM, so we still know the Rule is infinite. */ + len = rule_array->len; + for (i = 0; i < len; i++) { + rule = &g_array_index (rule_array, RuleData, i); + + /* None of the Rules currently use the TYPE field, but we'd better check. + */ + if (rule->type) { + fprintf (stderr, "Rules %s has a TYPE: %s\n", name, rule->type); + exit (1); + } + + if (rule->from_year != rule->to_year) { + from = rule->from_year; + to = rule->to_year; + + tmp_rule = *rule; + + /* Flag that this is a shallow copy so we don't free anything twice. */ + tmp_rule.is_shallow_copy = TRUE; + + /* See if it is an infinite Rule. */ + if (to == YEAR_MAXIMUM) { + is_infinite = TRUE; + to = max_year; + if (from < to) + rule->to_year = rule->from_year; + } else { + is_infinite = FALSE; + } + + /* Create a copy of the Rule for each year. */ + for (year = from + 1; year <= to; year++) { + tmp_rule.from_year = year; + + /* If the Rule is infinite, mark the last copy as infinite. */ + if (year == to && is_infinite) + tmp_rule.to_year = YEAR_MAXIMUM; + else + tmp_rule.to_year = year; + + g_array_append_val (rule_array, tmp_rule); + } + } + } + + /* Now sort the rules. */ + qsort (rule_array->data, rule_array->len, sizeof (RuleData), rule_sort_func); + +#if 0 + dump_rule_array (name, rule_array, stdout); +#endif +} + + +/* This is used to sort the rules, after the rules have all been expanded so + that each one is only for one year. */ +static int +rule_sort_func (const void *arg1, + const void *arg2) +{ + RuleData *rule1, *rule2; + int time1_year, time1_month, time1_day; + int time2_year, time2_month, time2_day; + int month_diff, result; + VzicTime t1, t2; + + rule1 = (RuleData*) arg1; + rule2 = (RuleData*) arg2; + + time1_year = rule1->from_year; + time1_month = rule1->in_month; + time2_year = rule2->from_year; + time2_month = rule2->in_month; + + /* If there is more that one month difference we don't need to calculate + the day or time. */ + month_diff = (time1_year - time2_year) * 12 + time1_month - time2_month; + + if (month_diff > 1) + return 1; + if (month_diff < -1) + return -1; + + /* Now we have to calculate the day and time of the Rule start and the + VzicTime, using the given offsets. */ + t1.year = time1_year; + t1.month = time1_month; + t1.day_code = rule1->on_day_code; + t1.day_number = rule1->on_day_number; + t1.day_weekday = rule1->on_day_weekday; + t1.time_code = rule1->at_time_code; + t1.time_seconds = rule1->at_time_seconds; + + t2.year = time2_year; + t2.month = time2_month; + t2.day_code = rule2->on_day_code; + t2.day_number = rule2->on_day_number; + t2.day_weekday = rule2->on_day_weekday; + t2.time_code = rule2->at_time_code; + t2.time_seconds = rule2->at_time_seconds; + + /* FIXME: We don't know the offsets yet, but I don't think any Rules are + close enough together that the offsets can make a difference. Should + check this. */ + calculate_actual_time (&t1, TIME_WALL, 0, 0); + calculate_actual_time (&t2, TIME_WALL, 0, 0); + + /* Now we can compare the entire time. */ + if (t1.year > t2.year) + result = 1; + else if (t1.year < t2.year) + result = -1; + + else if (t1.month > t2.month) + result = 1; + else if (t1.month < t2.month) + result = -1; + + else if (t1.day_number > t2.day_number) + result = 1; + else if (t1.day_number < t2.day_number) + result = -1; + + else if (t1.time_seconds > t2.time_seconds) + result = 1; + else if (t1.time_seconds < t2.time_seconds) + result = -1; + + else { + printf ("WARNING: Rule dates matched.\n"); + result = 0; + } + + return result; +} + + +static void +output_zone (char *directory, + ZoneData *zone, + char *zone_name, + GHashTable *rule_data) +{ + FILE *fp, *changes_fp = NULL; + char output_directory[PATHNAME_BUFFER_SIZE]; + char filename[PATHNAME_BUFFER_SIZE]; + char changes_filename[PATHNAME_BUFFER_SIZE]; + char *zone_directory, *zone_subdirectory, *zone_filename; + + /* Set a global for the zone_name, to be used only for debug messages. */ + CurrentZoneName = zone_name; + + /* Use this to only output a particular zone. */ +#if 0 + if (strcmp (zone_name, "Atlantic/Azores")) + return; +#endif + +#if 0 + printf ("Outputting Zone: %s\n", zone_name); +#endif + + if (!parse_zone_name (zone_name, &zone_directory, &zone_subdirectory, + &zone_filename)) + return; + + if (VzicDumpZoneNamesAndCoords) { + VzicTimeZoneNames = g_list_prepend (VzicTimeZoneNames, + g_strdup (zone_name)); + } + + sprintf (output_directory, "%s/%s", directory, zone_directory); + ensure_directory_exists (output_directory); + sprintf (filename, "%s/%s.ics", output_directory, zone_filename); + + if (VzicDumpChanges) { + sprintf (output_directory, "%s/ChangesVzic/%s", directory, zone_directory); + ensure_directory_exists (output_directory); + sprintf (changes_filename, "%s/%s", output_directory, zone_filename); + } + + if (zone_subdirectory) { + sprintf (output_directory, "%s/%s/%s", directory, zone_directory, + zone_subdirectory); + ensure_directory_exists (output_directory); + sprintf (filename, "%s/%s.ics", output_directory, zone_filename); + + if (VzicDumpChanges) { + sprintf (output_directory, "%s/ChangesVzic/%s/%s", directory, + zone_directory, zone_subdirectory); + ensure_directory_exists (output_directory); + sprintf (changes_filename, "%s/%s", output_directory, zone_filename); + } + } + + /* Create the files. */ + fp = fopen (filename, "w"); + if (!fp) { + fprintf (stderr, "Couldn't create file: %s\n", filename); + exit (1); + } + + if (VzicDumpChanges) { + changes_fp = fopen (changes_filename, "w"); + if (!changes_fp) { + fprintf (stderr, "Couldn't create file: %s\n", changes_filename); + exit (1); + } + } + + fprintf (fp, "BEGIN:VCALENDAR\nPRODID:%s\nVERSION:2.0\n", ProductID); + + output_zone_to_files (zone, zone_name, rule_data, fp, changes_fp); + + if (ferror (fp)) { + fprintf (stderr, "Error writing file: %s\n", filename); + exit (1); + } + + fprintf (fp, "END:VCALENDAR\n"); + + fclose (fp); + + g_free (zone_directory); + g_free (zone_subdirectory); + g_free (zone_filename); +} + + +/* This checks that the Zone name only uses the characters in [-+_/a-zA-Z0-9], + and outputs a warning if it isn't. */ +static gboolean +parse_zone_name (char *name, + char **directory, + char **subdirectory, + char **filename) +{ + static int invalid_zone_num = 1; + + char *p, ch, *first_slash_pos = NULL, *second_slash_pos = NULL; + gboolean invalid = FALSE; + + for (p = name; (ch = *p) != 0; p++) { + if ((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z') + && (ch < '0' || ch > '9') && ch != '/' && ch != '_' + && ch != '-' && ch != '+') { + fprintf (stderr, "WARNING: Unusual Zone name: %s\n", name); + invalid = TRUE; + break; + } + + if (ch == '/') { + if (!first_slash_pos) { + first_slash_pos = p; + } else if (!second_slash_pos) { + second_slash_pos = p; + } else { + fprintf (stderr, "WARNING: More than 2 '/' characters in Zone name: %s\n", name); + invalid = TRUE; + break; + } + } + } + + if (!first_slash_pos) { +#if 0 + fprintf (stderr, "No '/' character in Zone name: %s. Skipping.\n", name); +#endif + return FALSE; + } + + if (invalid) { + *directory = g_strdup ("Invalid"); + *filename = g_strdup_printf ("Zone%i", invalid_zone_num++); + } else { + *first_slash_pos = '\0'; + *directory = g_strdup (name); + *first_slash_pos = '/'; + + if (second_slash_pos) { + *second_slash_pos = '\0'; + *subdirectory = g_strdup (first_slash_pos + 1); + *second_slash_pos = '/'; + + *filename = g_strdup (second_slash_pos + 1); + } else { + *subdirectory = NULL; + *filename = g_strdup (first_slash_pos + 1); + } + } + + return invalid ? FALSE : TRUE; +} + + +static void +output_zone_to_files (ZoneData *zone, + char *zone_name, + GHashTable *rule_data, + FILE *fp, + FILE *changes_fp) +{ + ZoneLineData *zone_line; + GArray *changes; + int i, stdoff, walloff, start_index, save_seconds; + VzicTime start, end, *vzictime_start, *vzictime, *vzictime_first_rule_change; + gboolean is_daylight, found_letter_s; + char *start_letter_s; + + changes = g_array_new (FALSE, FALSE, sizeof (VzicTime)); + + vzictime_init (&start); + vzictime_init (&end); + + /* The first period starts at -infinity. */ + start.year = YEAR_MINIMUM; + + for (i = 0; i < zone->zone_line_data->len; i++) { + zone_line = &g_array_index (zone->zone_line_data, ZoneLineData, i); + + /* This is the local standard time offset from GMT for this period. */ + start.stdoff = stdoff = zone_line->stdoff_seconds; + start.walloff = walloff = stdoff + zone_line->save_seconds; + + if (zone_line->until_set) { + end.year = zone_line->until_year; + end.month = zone_line->until_month; + end.day_code = zone_line->until_day_code; + end.day_number = zone_line->until_day_number; + end.day_weekday = zone_line->until_day_weekday; + end.time_seconds = zone_line->until_time_seconds; + end.time_code = zone_line->until_time_code; + } else { + /* The last period ends at +infinity. */ + end.year = YEAR_MAXIMUM; + } + + /* Add a time change for the start of the period. This may be removed + later if one of the rules expands to exactly the same time. */ + start_index = changes->len; + g_array_append_val (changes, start); + + /* If there are Rules associated with this period, add all the relevant + time changes. */ + save_seconds = 0; + if (zone_line->rules) + found_letter_s = add_rule_changes (zone_line, zone_name, changes, + rule_data, &start, &end, + &start_letter_s, &save_seconds); + else + found_letter_s = FALSE; + + /* FIXME: I'm not really sure what to do about finding a LETTER_S for the + first part of the period (i.e. before the first Rule comes into effect). + Currently we try to use the same LETTER_S as the first Rule of the + period which is in local standard time. */ + if (zone_line->save_seconds) + save_seconds = zone_line->save_seconds; + is_daylight = save_seconds ? TRUE : FALSE; + vzictime_start = &g_array_index (changes, VzicTime, start_index); + walloff = vzictime_start->walloff = stdoff + save_seconds; + + /* TEST: See if the first Rule time is exactly the same as the change from + the Zone line. In which case we can remove the Zone line change. */ + if (changes->len > start_index + 1) { + int prev_stdoff, prev_walloff; + + if (start_index > 0) { + VzicTime *v = &g_array_index (changes, VzicTime, start_index - 1); + prev_stdoff = v->stdoff; + prev_walloff = v->walloff; + } else { + prev_stdoff = 0; + prev_walloff = 0; + } + vzictime_first_rule_change = &g_array_index (changes, VzicTime, + start_index + 1); + if (times_match (vzictime_start, prev_stdoff, prev_walloff, + vzictime_first_rule_change, stdoff, walloff)) { +#if 0 + printf ("Removing zone-line change (using new offsets)\n"); +#endif + g_array_remove_index (changes, start_index); + vzictime_start = NULL; + } else if (times_match (vzictime_start, prev_stdoff, prev_walloff, + vzictime_first_rule_change, prev_stdoff, prev_walloff)) { +#if 0 + printf ("Removing zone-line change (using previous offsets)\n"); +#endif + g_array_remove_index (changes, start_index); + vzictime_start = NULL; + } + } + + + if (vzictime_start) { + vzictime_start->tzname = expand_tzname (zone_name, zone_line->format, + found_letter_s, + start_letter_s, is_daylight); + } + + /* The start of the next Zone line is the end time of this one. */ + start = end; + } + + set_previous_offsets (changes); + + output_zone_components (fp, zone_name, changes); + + if (VzicDumpChanges) + dump_changes (changes_fp, zone_name, changes); + + /* Free all the TZNAME fields. */ + for (i = 0; i < changes->len; i++) { + vzictime = &g_array_index (changes, VzicTime, i); + g_free (vzictime->tzname); + } + + g_array_free (changes, TRUE); +} + + +/* This appends any timezone changes specified by the rules associated with + the timezone, that happen between the start and end times. + It returns the letter_s field of the first STANDARD rule found in the + search. We need this to fill in any %s in the FORMAT field of the first + component of the time period (the Zone line). */ +static gboolean +add_rule_changes (ZoneLineData *zone_line, + char *zone_name, + GArray *changes, + GHashTable *rule_data, + VzicTime *start, + VzicTime *end, + char **start_letter_s, + int *save_seconds) +{ + GArray *rule_array; + RuleData *rule, *prev_rule = NULL; + int stdoff, walloff, i, prev_stdoff, prev_walloff; + VzicTime vzictime; + gboolean is_daylight, found_start_letter_s = FALSE; + gboolean checked_for_previous = FALSE; + + *save_seconds = 0; + + rule_array = g_hash_table_lookup (rule_data, zone_line->rules); + if (!rule_array) { + fprintf (stderr, "Couldn't access rules: %s\n", zone_line->rules); + exit (1); + } + + /* The stdoff is the same for all the rules. */ + stdoff = start->stdoff; + + /* The walloff changes as we go through the rules. */ + walloff = start->walloff; + + /* Get the stdoff & walloff from the last change before this period. */ + if (changes->len >= 2) { + VzicTime *change = &g_array_index (changes, VzicTime, changes->len - 2); + prev_stdoff = change->stdoff; + prev_walloff = change->walloff; + } else { + prev_stdoff = prev_walloff = 0; + } + + + for (i = 0; i < rule_array->len; i++) { + rule = &g_array_index (rule_array, RuleData, i); + + is_daylight = rule->save_seconds != 0 ? TRUE : FALSE; + + vzictime_init (&vzictime); + vzictime.year = rule->from_year; + vzictime.month = rule->in_month; + vzictime.day_code = rule->on_day_code; + vzictime.day_number = rule->on_day_number; + vzictime.day_weekday = rule->on_day_weekday; + vzictime.time_seconds = rule->at_time_seconds; + vzictime.time_code = rule->at_time_code; + vzictime.stdoff = stdoff; + vzictime.walloff = stdoff + rule->save_seconds; + vzictime.is_infinite = (rule->to_year == YEAR_MAXIMUM) ? TRUE : FALSE; + + /* If the rule time is before the given start time, skip it. */ + if (compare_times (&vzictime, stdoff, walloff, + start, prev_stdoff, prev_walloff) < 0) + continue; + + /* If the previous Rule was a daylight Rule, then we may want to use the + walloff from that. */ + if (!checked_for_previous) { + checked_for_previous = TRUE; + if (i > 0) { + prev_rule = &g_array_index (rule_array, RuleData, i - 1); + if (prev_rule->save_seconds) { + walloff = start->walloff = stdoff + prev_rule->save_seconds; + *save_seconds = prev_rule->save_seconds; + found_start_letter_s = TRUE; + *start_letter_s = prev_rule->letter_s; +#if 0 + printf ("Could use save_seconds from previous Rule: %s\n", + zone_name); +#endif + } + } + } + + /* If an end time has been given, then if the rule time is on or after it + break out of the loop. */ + if (end->year != YEAR_MAXIMUM + && compare_times (&vzictime, stdoff, walloff, + end, stdoff, walloff) >= 0) + break; + + vzictime.tzname = expand_tzname (zone_name, zone_line->format, TRUE, + rule->letter_s, is_daylight); + + g_array_append_val (changes, vzictime); + + /* When we find the first STANDARD time we set letter_s. */ + if (!found_start_letter_s && !is_daylight) { + found_start_letter_s = TRUE; + *start_letter_s = rule->letter_s; + } + + /* Now that we have added the Rule, the new walloff comes into effect + for any following Rules. */ + walloff = vzictime.walloff; + } + + return found_start_letter_s; +} + + +/* This expands the Zone line FORMAT field, using the given LETTER_S from a + Rule line. There are 3 types of FORMAT field: + 1. a string with an %s in, e.g. "WE%sT". The %s is replaced with LETTER_S. + 2. a string with an '/' in, e.g. "CAT/CAWT". The first part is used for + standard time and the second part for when daylight-saving is in effect. + 3. a plain string, e.g. "LMT", which we leave as-is. + Note that (1) is the only type in which letter_s is required. +*/ +static char* +expand_tzname (char *zone_name, + char *format, + gboolean have_letter_s, + char *letter_s, + gboolean is_daylight) +{ + char *p, buffer[256], *guess = NULL; + int len; + +#if 0 + printf ("Expanding %s with %s\n", format, letter_s); +#endif + + if (!format || !format[0]) { + fprintf (stderr, "Missing FORMAT\n"); + exit (1); + } + + /* 1. Look for a "%s". */ + p = strchr (format, '%'); + if (p && *(p + 1) == 's') { + if (!have_letter_s) { + + /* NOTE: These are a few hard-coded TZNAMEs that I've looked up myself. + These are needed in a few places where a Zone line comes into effect + but no Rule has been found, so we have no LETTER_S to use. + I've tried to use whatever is the normal LETTER_S in the Rules for + the particular zone, in local standard time. */ + if (!strcmp (zone_name, "Asia/Macao") + && !strcmp (format, "C%sT")) + guess = "CST"; + else if (!strcmp (zone_name, "Asia/Macau") + && !strcmp (format, "C%sT")) + guess = "CST"; + else if (!strcmp (zone_name, "Asia/Ashgabat") + && !strcmp (format, "ASH%sT")) + guess = "ASHT"; + else if (!strcmp (zone_name, "Asia/Ashgabat") + && !strcmp (format, "TM%sT")) + guess = "TMT"; + else if (!strcmp (zone_name, "Asia/Samarkand") + && !strcmp (format, "TAS%sT")) + guess = "TAST"; + else if (!strcmp (zone_name, "Atlantic/Azores") + && !strcmp (format, "WE%sT")) + guess = "WET"; + else if (!strcmp (zone_name, "Europe/Paris") + && !strcmp (format, "WE%sT")) + guess = "WET"; + else if (!strcmp (zone_name, "Europe/Warsaw") + && !strcmp (format, "CE%sT")) + guess = "CET"; + else if (!strcmp (zone_name, "America/Phoenix") + && !strcmp (format, "M%sT")) + guess = "MST"; + else if (!strcmp (zone_name, "America/Nome") + && !strcmp (format, "Y%sT")) + guess = "YST"; + + if (guess) { +#if 0 + fprintf (stderr, + "WARNING: Couldn't find a LETTER_S to use in FORMAT: %s in Zone: %s Guessing: %s\n", + format, zone_name, guess); +#endif + return g_strdup (guess); + } + +#if 1 + fprintf (stderr, + "WARNING: Couldn't find a LETTER_S to use in FORMAT: %s in Zone: %s Leaving TZNAME empty\n", + format, zone_name); +#endif + +#if 0 + /* This is useful to spot exactly which component had a problem. */ + sprintf (buffer, "FIXME: %s", format); + return g_strdup (buffer); +#else + /* We give up and don't output a TZNAME. */ + return NULL; +#endif + } + + sprintf (buffer, format, letter_s ? letter_s : ""); + return g_strdup (buffer); + } + + /* 2. Look for a "/". */ + p = strchr (format, '/'); + if (p) { + if (is_daylight) { + return g_strdup (p + 1); + } else { + len = p - format; + strncpy (buffer, format, len); + buffer[len] = '\0'; + return g_strdup (buffer); + } + } + + /* 3. Just use format as it is. */ + return g_strdup (format); +} + + +/* Compares 2 VzicTimes, returning strcmp()-like values, i.e. 0 if equal, + 1 if the 1st is after the 2nd and -1 if the 1st is before the 2nd. */ +static int +compare_times (VzicTime *time1, + int stdoff1, + int walloff1, + VzicTime *time2, + int stdoff2, + int walloff2) +{ + VzicTime t1, t2; + int result; + + t1 = *time1; + t2 = *time2; + + calculate_actual_time (&t1, TIME_UNIVERSAL, stdoff1, walloff1); + calculate_actual_time (&t2, TIME_UNIVERSAL, stdoff2, walloff2); + + /* Now we can compare the entire time. */ + if (t1.year > t2.year) + result = 1; + else if (t1.year < t2.year) + result = -1; + + else if (t1.month > t2.month) + result = 1; + else if (t1.month < t2.month) + result = -1; + + else if (t1.day_number > t2.day_number) + result = 1; + else if (t1.day_number < t2.day_number) + result = -1; + + else if (t1.time_seconds > t2.time_seconds) + result = 1; + else if (t1.time_seconds < t2.time_seconds) + result = -1; + + else + result = 0; + +#if 0 + printf ("%i/%i/%i %i <=> %i/%i/%i %i -> %i\n", + t1.day_number, t1.month + 1, t1.year, t1.time_seconds, + t2.day_number, t2.month + 1, t2.year, t2.time_seconds, + result); +#endif + + return result; +} + + +/* Returns TRUE if the 2 times are exactly the same. It will calculate the + actual day, but doesn't convert times. */ +static gboolean +times_match (VzicTime *time1, + int stdoff1, + int walloff1, + VzicTime *time2, + int stdoff2, + int walloff2) +{ + VzicTime t1, t2; + + t1 = *time1; + t2 = *time2; + + calculate_actual_time (&t1, TIME_UNIVERSAL, stdoff1, walloff1); + calculate_actual_time (&t2, TIME_UNIVERSAL, stdoff2, walloff2); + + if (t1.year == t2.year + && t1.month == t2.month + && t1.day_number == t2.day_number + && t1.time_seconds == t2.time_seconds) + return TRUE; + + return FALSE; +} + + +static void +output_zone_components (FILE *fp, + char *name, + GArray *changes) +{ + VzicTime *vzictime; + int i, start_index = 0; + gboolean only_one_change = FALSE; + char start_buffer[1024]; + + fprintf (fp, "BEGIN:VTIMEZONE\nTZID:%s%s\n", TZIDPrefixExpanded, name); + + if (VzicUrlPrefix != NULL) + fprintf (fp, "TZURL:%s/%s\n", VzicUrlPrefix, name); + + /* We use an 'X-' property to place the city name in. */ + fprintf (fp, "X-LIC-LOCATION:%s\n", name); + + /* We try to find any recurring components first, or they may get output + as lots of RDATES instead. */ + if (!VzicNoRRules) { + int num_rrules_output = 0; + + for (i = 1; i < changes->len; i++) { + if (check_for_recurrence (fp, changes, i)) { + num_rrules_output++; + } + } + +#if 0 + printf ("Zone: %s had %i infinite RRULEs\n", CurrentZoneName, + num_rrules_output); +#endif + + if (!VzicPureOutput && num_rrules_output == 2) { +#if 0 + printf ("Zone: %s using 2 RRULEs\n", CurrentZoneName); +#endif + fprintf (fp, "END:VTIMEZONE\n"); + return; + } + } + + /* We skip the first change, which starts at -infinity, unless it is the only + change for the timezone. */ + if (changes->len > 1) + start_index = 1; + else + only_one_change = TRUE; + + /* For pure output, we start at the start of the array and step through it + outputting RDATEs. For Outlook-compatible output we start at the end + and step backwards to find the first STANDARD time to output. */ + if (VzicPureOutput) + i = start_index - 1; + else + i = changes->len; + + for (;;) { + if (VzicPureOutput) + i++; + else + i--; + + if (VzicPureOutput) { + if (i >= changes->len) + break; + } else { + if (i < start_index) + break; + } + + vzictime = &g_array_index (changes, VzicTime, i); + + /* If we have already output this component as part of an RRULE or RDATE, + then we skip it. */ + if (vzictime->output) + continue; + + /* For Outlook-compatible output we only want to output the last STANDARD + time as a DTSTART, so skip any DAYLIGHT changes. */ + if (!VzicPureOutput && vzictime->stdoff != vzictime->walloff) { + printf ("Skipping DAYLIGHT change\n"); + continue; + } + +#if 0 + printf ("Zone: %s using DTSTART Year: %i\n", CurrentZoneName, + vzictime->year); +#endif + + if (VzicPureOutput) { + output_component_start (start_buffer, vzictime, TRUE, only_one_change); + } else { + /* For Outlook compatability we don't output the RDATE and use the same + TZOFFSET for TZOFFSETFROM and TZOFFSETTO. */ + vzictime->year = RDATE_YEAR; + vzictime->month = 0; + vzictime->day_code = DAY_SIMPLE; + vzictime->day_number = 1; + vzictime->time_code = TIME_WALL; + vzictime->time_seconds = 0; + + output_component_start (start_buffer, vzictime, FALSE, TRUE); + } + + fprintf (fp, "%s", start_buffer); + + /* This will look for matching components and output them as RDATEs + instead of separate components. */ + if (VzicPureOutput && !VzicNoRDates) + check_for_rdates (fp, changes, i); + + output_component_end (fp, vzictime); + + vzictime->output = TRUE; + + if (!VzicPureOutput) + break; + } + + fprintf (fp, "END:VTIMEZONE\n"); +} + + +/* This sets the prev_stdoff and prev_walloff (i.e. the TZOFFSETFROM) of each + VzicTime, using the stdoff and walloff of the previous VzicTime. It makes + the rest of the code much simpler. */ +static void +set_previous_offsets (GArray *changes) +{ + VzicTime *vzictime, *prev_vzictime; + int i; + + prev_vzictime = &g_array_index (changes, VzicTime, 0); + prev_vzictime->prev_stdoff = 0; + prev_vzictime->prev_walloff = 0; + + for (i = 1; i < changes->len; i++) { + vzictime = &g_array_index (changes, VzicTime, i); + + vzictime->prev_stdoff = prev_vzictime->stdoff; + vzictime->prev_walloff = prev_vzictime->walloff; + + prev_vzictime = vzictime; + } +} + + +/* Returns TRUE if we output an infinite recurrence. */ +static gboolean +check_for_recurrence (FILE *fp, + GArray *changes, + int idx) +{ + VzicTime *vzictime_start, *vzictime, vzictime_start_copy; + gboolean is_daylight_start, is_daylight; + int last_match, i, next_year, day_offset; + char until[256], rrule_buffer[2048], start_buffer[1024]; + GList *matching_elements = NULL, *elem; + + vzictime_start = &g_array_index (changes, VzicTime, idx); + + /* If this change has already been output, skip it. */ + if (vzictime_start->output) + return FALSE; + + /* There can't possibly be an RRULE starting from YEAR_MINIMUM. */ + if (vzictime_start->year == YEAR_MINIMUM) + return FALSE; + + is_daylight_start = (vzictime_start->stdoff != vzictime_start->walloff) + ? TRUE : FALSE; + +#if 0 + printf ("\nChecking: %s OFFSETFROM: %i %s\n", + format_vzictime (vzictime_start), vzictime_start->prev_walloff, + is_daylight_start ? "DAYLIGHT" : ""); +#endif + + /* If this is an infinitely recurring change, output the RRULE and return. + There won't be any changes after it that we could merge. */ + if (vzictime_start->is_infinite) { + + /* Change the year to our minimum start year. */ + vzictime_start_copy = *vzictime_start; + if (!VzicPureOutput) + vzictime_start_copy.year = RRULE_START_YEAR; + + day_offset = output_component_start (start_buffer, &vzictime_start_copy, + FALSE, FALSE); + + if (!output_rrule (rrule_buffer, vzictime_start_copy.month, + vzictime_start_copy.day_code, + vzictime_start_copy.day_number, + vzictime_start_copy.day_weekday, day_offset, "")) { + if (vzictime_start->year != MAX_TIME_T_YEAR) { + fprintf (stderr, "WARNING: Failed to output infinite recurrence with start year: %i\n", vzictime_start->year); + } + return TRUE; + } + + fprintf (fp, "%s%s", start_buffer, rrule_buffer); + output_component_end (fp, vzictime_start); + vzictime_start->output = TRUE; + return TRUE; + } + + last_match = idx; + next_year = vzictime_start->year + 1; + for (i = idx + 1; i < changes->len; i++) { + vzictime = &g_array_index (changes, VzicTime, i); + + is_daylight = (vzictime->stdoff != vzictime->walloff) ? TRUE : FALSE; + + if (vzictime->output) + continue; + +#if 0 + printf (" %s OFFSETFROM: %i %s\n", + format_vzictime (vzictime), vzictime->prev_walloff, + is_daylight ? "DAYLIGHT" : ""); +#endif + + /* If it is more than one year ahead, we are finished, since we want + consecutive years. */ + if (vzictime->year > next_year) { + break; + } + + /* It must be the same type of component - STANDARD or DAYLIGHT. */ + if (is_daylight != is_daylight_start) { + continue; + } + + /* It must be the following year, with the same month, day & time. + It is possible that the time has a different code but does in fact + match when normalized, but we don't care (for now at least). */ + if (vzictime->year != next_year + || vzictime->month != vzictime_start->month + || vzictime->day_code != vzictime_start->day_code + || vzictime->day_number != vzictime_start->day_number + || vzictime->day_weekday != vzictime_start->day_weekday + || vzictime->time_seconds != vzictime_start->time_seconds + || vzictime->time_code != vzictime_start->time_code) { + continue; + } + + /* The TZOFFSETFROM and TZOFFSETTO must match. */ + if (vzictime->prev_walloff != vzictime_start->prev_walloff) { + continue; + } + + if (vzictime->walloff != vzictime_start->walloff) { + continue; + } + + /* TZNAME must match. */ + if (!timezones_match (vzictime->tzname, vzictime_start->tzname)) { + continue; + } + + /* We have a match. */ + last_match = i; + next_year = vzictime->year + 1; + + matching_elements = g_list_prepend (matching_elements, vzictime); + } + + if (last_match == idx) + return FALSE; + +#if 0 + printf ("Found recurrence %i - %i!!!\n", vzictime_start->year, + next_year - 1); +#endif + + vzictime = &g_array_index (changes, VzicTime, last_match); + +/* We only use RRULEs if there are at least MIN_RRULE_OCCURRENCES occurrences, + since otherwise RDATEs are more efficient. */ + if (!vzictime->is_infinite) { + int years = vzictime->year - vzictime_start->year + 1; +#if 0 + printf ("RRULE Years: %i\n", years); +#endif + if (years < MIN_RRULE_OCCURRENCES) + return FALSE; + } + + if (vzictime->is_infinite) { + until[0] = '\0'; + } else { + VzicTime t1 = *vzictime; + + printf ("RRULE with UNTIL - aborting\n"); + abort (); + + calculate_actual_time (&t1, TIME_UNIVERSAL, vzictime->prev_stdoff, + vzictime->prev_walloff); + + /* Output UNTIL, in UTC. */ + sprintf (until, ";UNTIL=%sZ", format_time (t1.year, t1.month, + t1.day_number, + t1.time_seconds)); + } + + /* Change the year to our minimum start year. */ + vzictime_start_copy = *vzictime_start; + if (!VzicPureOutput) + vzictime_start_copy.year = RRULE_START_YEAR; + + day_offset = output_component_start (start_buffer, &vzictime_start_copy, + FALSE, FALSE); + if (output_rrule (rrule_buffer, vzictime_start_copy.month, + vzictime_start_copy.day_code, + vzictime_start_copy.day_number, + vzictime_start_copy.day_weekday, day_offset, until)) { + fprintf (fp, "%s%s", start_buffer, rrule_buffer); + output_component_end (fp, vzictime_start); + + /* Mark all the changes as output. */ + vzictime_start->output = TRUE; + for (elem = matching_elements; elem; elem = elem->next) { + vzictime = elem->data; + vzictime->output = TRUE; + } + } + + g_list_free (matching_elements); + + return TRUE; +} + + +static void +check_for_rdates (FILE *fp, + GArray *changes, + int idx) +{ + VzicTime *vzictime_start, *vzictime, tmp_vzictime; + gboolean is_daylight_start, is_daylight; + int i, year, month, day, time; + + vzictime_start = &g_array_index (changes, VzicTime, idx); + + is_daylight_start = (vzictime_start->stdoff != vzictime_start->walloff) + ? TRUE : FALSE; + +#if 0 + printf ("\nChecking: %s OFFSETFROM: %i %s\n", + format_vzictime (vzictime_start), vzictime_start->prev_walloff, + is_daylight_start ? "DAYLIGHT" : ""); +#endif + + /* We want to go backwards through the array now, for Outlook compatability. + (It only looks at the first DTSTART/RDATE.) */ + for (i = idx + 1; i < changes->len; i++) { + vzictime = &g_array_index (changes, VzicTime, i); + + is_daylight = (vzictime->stdoff != vzictime->walloff) ? TRUE : FALSE; + + if (vzictime->output) + continue; + +#if 0 + printf (" %s OFFSETFROM: %i %s\n", format_vzictime (vzictime), + vzictime->prev_walloff, is_daylight ? "DAYLIGHT" : ""); +#endif + + /* It must be the same type of component - STANDARD or DAYLIGHT. */ + if (is_daylight != is_daylight_start) { + continue; + } + + /* The TZOFFSETFROM and TZOFFSETTO must match. */ + if (vzictime->prev_walloff != vzictime_start->prev_walloff) { + continue; + } + + if (vzictime->walloff != vzictime_start->walloff) { + continue; + } + + /* TZNAME must match. */ + if (!timezones_match (vzictime->tzname, vzictime_start->tzname)) { + continue; + } + + /* We have a match. */ + + tmp_vzictime = *vzictime; + calculate_actual_time (&tmp_vzictime, TIME_WALL, vzictime->prev_stdoff, + vzictime->prev_walloff); + + fprintf (fp, "RDATE:%s\n", format_time (tmp_vzictime.year, + tmp_vzictime.month, + tmp_vzictime.day_number, + tmp_vzictime.time_seconds)); + + vzictime->output = TRUE; + } +} + + +static gboolean +timezones_match (char *tzname1, + char *tzname2) +{ + if (tzname1 && tzname2 && !strcmp (tzname1, tzname2)) + return TRUE; + + if (!tzname1 && !tzname2) + return TRUE; + + return FALSE; +} + + +/* Outputs the start of a VTIMEZONE component, with the BEGIN line, + the DTSTART, TZOFFSETFROM, TZOFFSETTO & TZNAME properties. */ +static int +output_component_start (char *buffer, + VzicTime *vzictime, + gboolean output_rdate, + gboolean use_same_tz_offset) +{ + gboolean is_daylight, skip_day_offset = FALSE; + gint year, month, day, time, day_offset = 0; + GDate old_date, new_date; + char *formatted_time; + char line1[1024], line2[1024], line3[1024]; + char line4[1024], line5[1024], line6[1024]; + VzicTime tmp_vzictime; + int prev_walloff; + + is_daylight = (vzictime->stdoff != vzictime->walloff) ? TRUE : FALSE; + + tmp_vzictime = *vzictime; + day_offset = calculate_actual_time (&tmp_vzictime, TIME_WALL, + vzictime->prev_stdoff, + vzictime->prev_walloff); + + sprintf (line1, "BEGIN:%s\n", is_daylight ? "DAYLIGHT" : "STANDARD"); + + /* If the timezone only has one change, that means it uses the same offset + forever, so we use the same TZOFFSETFROM as the TZOFFSETTO. (If the zone + has more than one change, we don't output the first one.) */ + if (use_same_tz_offset) + prev_walloff = vzictime->walloff; + else + prev_walloff = vzictime->prev_walloff; + + sprintf (line2, "TZOFFSETFROM:%s\n", + format_tz_offset (prev_walloff, !VzicPureOutput)); + + sprintf (line3, "TZOFFSETTO:%s\n", + format_tz_offset (vzictime->walloff, !VzicPureOutput)); + + if (vzictime->tzname) + sprintf (line4, "TZNAME:%s\n", vzictime->tzname); + else + line4[0] = '\0'; + + formatted_time = format_time (tmp_vzictime.year, tmp_vzictime.month, + tmp_vzictime.day_number, + tmp_vzictime.time_seconds); + sprintf (line5, "DTSTART:%s\n", formatted_time); + if (output_rdate) + sprintf (line6, "RDATE:%s\n", formatted_time); + else + line6[0] = '\0'; + + sprintf (buffer, "%s%s%s%s%s%s", line1, line2, line3, line4, line5, line6); + + return day_offset; +} + + +/* Outputs the END line of the VTIMEZONE component. */ +static void +output_component_end (FILE *fp, + VzicTime *vzictime) +{ + gboolean is_daylight; + + is_daylight = (vzictime->stdoff != vzictime->walloff) ? TRUE : FALSE; + + fprintf (fp, "END:%s\n", is_daylight ? "DAYLIGHT" : "STANDARD"); +} + + +/* Initializes a VzicTime to 1st Jan in YEAR_MINIMUM at midnight, with all + offsets set to 0. */ +static void +vzictime_init (VzicTime *vzictime) +{ + vzictime->year = YEAR_MINIMUM; + vzictime->month = 0; + vzictime->day_code = DAY_SIMPLE; + vzictime->day_number = 1; + vzictime->day_weekday = 0; + vzictime->time_seconds = 0; + vzictime->time_code = TIME_UNIVERSAL; + vzictime->stdoff = 0; + vzictime->walloff = 0; + vzictime->is_infinite = FALSE; + vzictime->output = FALSE; + vzictime->prev_stdoff = 0; + vzictime->prev_walloff = 0; + vzictime->tzname = NULL; +} + + +/* This calculates the actual local time that a change will occur, given + the offsets from standard and wall-clock time. It returns -1 or 1 if it + had to move backwards or forwards one day while converting to local time. + If it does this then we need to change the RRULEs we output. */ +static int +calculate_actual_time (VzicTime *vzictime, + TimeCode time_code, + int stdoff, + int walloff) +{ + GDate date; + gint day_offset, days_in_month, weekday, offset, result; + + vzictime->time_seconds = calculate_wall_time (vzictime->time_seconds, + vzictime->time_code, + stdoff, walloff, &day_offset); + + if (vzictime->day_code != DAY_SIMPLE) { + if (vzictime->year == YEAR_MINIMUM || vzictime->year == YEAR_MAXIMUM) { + fprintf (stderr, "In calculate_actual_time: invalid year\n"); + exit (0); + } + + g_date_clear (&date, 1); + days_in_month = g_date_days_in_month (vzictime->month + 1, vzictime->year); + + /* Note that the day_code refers to the date before we convert it to + a wall-clock date and time. So we find the day it was referring to, + then make any adjustments needed due to converting the time. */ + if (vzictime->day_code == DAY_LAST_WEEKDAY) { + /* Find out what day the last day of the month is. */ + g_date_set_dmy (&date, days_in_month, vzictime->month + 1, + vzictime->year); + weekday = g_date_weekday (&date) % 7; + + /* Calculate how many days we have to go back to get to day_weekday. */ + offset = (weekday + 7 - vzictime->day_weekday) % 7; + + vzictime->day_number = days_in_month - offset; + } else { + /* Find out what day day_number actually is. */ + g_date_set_dmy (&date, vzictime->day_number, vzictime->month + 1, + vzictime->year); + weekday = g_date_weekday (&date) % 7; + + if (vzictime->day_code == DAY_WEEKDAY_ON_OR_AFTER) + offset = (vzictime->day_weekday + 7 - weekday) % 7; + else + offset = - ((weekday + 7 - vzictime->day_weekday) % 7); + + vzictime->day_number = vzictime->day_number + offset; + } + + vzictime->day_code = DAY_SIMPLE; + + if (vzictime->day_number <= 0 || vzictime->day_number > days_in_month) { + fprintf (stderr, "Day overflow: %i\n", vzictime->day_number); + exit (1); + } + } + +#if 0 + fprintf (stderr, "%s -> %i/%i/%i\n", + dump_day_coded (vzictime->day_code, vzictime->day_number, + vzictime->day_weekday), + vzictime->day_number, vzictime->month + 1, vzictime->year); +#endif + + fix_time_overflow (&vzictime->year, &vzictime->month, + &vzictime->day_number, day_offset); + + /* If we want UTC time, we have to convert it now. */ + if (time_code == TIME_UNIVERSAL) { + vzictime->time_seconds = calculate_until_time (vzictime->time_seconds, + TIME_WALL, stdoff, walloff, + &vzictime->year, + &vzictime->month, + &vzictime->day_number); + } + + return day_offset; +} + + +/* This converts the given time into universal time (UTC), to be used in + the UNTIL property. */ +static int +calculate_until_time (int time, + TimeCode time_code, + int stdoff, + int walloff, + int *year, + int *month, + int *day) +{ + int result, day_offset; + + day_offset = 0; + + switch (time_code) { + case TIME_WALL: + result = time - walloff; + break; + case TIME_STANDARD: + result = time - stdoff; + break; + case TIME_UNIVERSAL: + return time; + default: + fprintf (stderr, "Invalid time code\n"); + exit (1); + } + + if (result < 0) { + result += 24 * 60 * 60; + day_offset = -1; + } else if (result >= 24 * 60 * 60) { + result -= 24 * 60 * 60; + day_offset = 1; + } + + /* Sanity check - we shouldn't have an overflow any more. */ + if (result < 0 || result >= 24 * 60 * 60) { + fprintf (stderr, "Time overflow: %i\n", result); + abort (); + } + + fix_time_overflow (year, month, day, day_offset); + + return result; +} + + +/* This converts the given time into wall clock time (the local standard time + with any adjustment for daylight-saving). */ +static int +calculate_wall_time (int time, + TimeCode time_code, + int stdoff, + int walloff, + int *day_offset) +{ + int result; + + *day_offset = 0; + + switch (time_code) { + case TIME_WALL: + return time; + case TIME_STANDARD: + /* We have a local standard time, so we have to subtract stdoff to get + back to UTC, then add walloff to get wall time. */ + result = time - stdoff + walloff; + break; + case TIME_UNIVERSAL: + result = time + walloff; + break; + default: + fprintf (stderr, "Invalid time code\n"); + exit (1); + } + + if (result < 0) { + result += 24 * 60 * 60; + *day_offset = -1; + } else if (result >= 24 * 60 * 60) { + result -= 24 * 60 * 60; + *day_offset = 1; + } + + /* Sanity check - we shouldn't have an overflow any more. */ + if (result < 0 || result >= 24 * 60 * 60) { + fprintf (stderr, "Time overflow: %i\n", result); + exit (1); + } + +#if 0 + printf ("%s -> ", dump_time (time, time_code, TRUE)); + printf ("%s (%i)\n", dump_time (result, TIME_WALL, TRUE), *day_offset); +#endif + + return result; +} + + +static void +fix_time_overflow (int *year, + int *month, + int *day, + int day_offset) +{ + if (day_offset == -1) { + *day = *day - 1; + + if (*day == 0) { + *month = *month - 1; + if (*month == -1) { + *month = 11; + *year = *year - 1; + } + *day = g_date_days_in_month (*month + 1, *year); + } + } else if (day_offset == 1) { + *day = *day + 1; + + if (*day > g_date_days_in_month (*month + 1, *year)) { + *month = *month + 1; + if (*month == 12) { + *month = 0; + *year = *year + 1; + } + *day = 1; + } + } +} + + +static char* +format_time (int year, + int month, + int day, + int time) +{ + static char buffer[128]; + int hour, minute, second; + + /* When we are outputting the first component year will be YEAR_MINIMUM. + We used to use 1 when outputting this, but Outlook doesn't like any years + less that 1600, so we use 1600 instead. We don't output the first change + for most zones now, so it doesn't matter too much. */ + if (year == YEAR_MINIMUM) + year = 1601; + + /* We just use 9999 here, so we keep to 4 characters. But this should only + be needed when debugging - it shouldn't be needed in the VTIMEZONEs. */ + if (year == YEAR_MAXIMUM) { + fprintf (stderr, "format_time: YEAR_MAXIMUM used\n"); + year = 9999; + } + + hour = time / 3600; + minute = (time % 3600) / 60; + second = time % 60; + + sprintf (buffer, "%04i%02i%02iT%02i%02i%02i", + year, month + 1, day, hour, minute, second); + + return buffer; +} + + +/* Outlook doesn't support 6-digit values, i.e. including the seconds, so + we round to the nearest minute. No current offsets use the seconds value, + so we aren't losing much. */ +static char* +format_tz_offset (int tz_offset, + gboolean round_seconds) +{ + static char buffer[128]; + char *sign = "+"; + int hours, minutes, seconds; + + if (tz_offset < 0) { + tz_offset = -tz_offset; + sign = "-"; + } + + if (round_seconds) + tz_offset += 30; + + hours = tz_offset / 3600; + minutes = (tz_offset % 3600) / 60; + seconds = tz_offset % 60; + + if (round_seconds) + seconds = 0; + + /* Sanity check. Standard timezone offsets shouldn't be much more than 12 + hours, and daylight saving shouldn't change it by more than a few hours. + (The maximum offset is 15 hours 56 minutes at present.) */ + if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 + || seconds < 0 || seconds >= 60) { + fprintf (stderr, "WARNING: Strange timezone offset: H:%i M:%i S:%i\n", + hours, minutes, seconds); + } + + if (seconds == 0) + sprintf (buffer, "%s%02i%02i", sign, hours, minutes); + else + sprintf (buffer, "%s%02i%02i%02i", sign, hours, minutes, seconds); + + return buffer; +} + + +static gboolean +output_rrule (char *rrule_buffer, + int month, + DayCode day_code, + int day_number, + int day_weekday, + int day_offset, + char *until) +{ + char buffer[1024], buffer2[1024]; + + buffer[0] = '\0'; + + if (day_offset > 1 || day_offset < -1) { + fprintf (stderr, "Invalid day_offset: %i\n", day_offset); + exit (0); + } + + /* If the DTSTART time was moved to another day when converting to local + time, we need to adjust the RRULE accordingly. e.g. If the original RRULE + was on the 19th of the month, but DTSTART was moved 1 day forward, then + we output the 20th of the month instead. */ + if (day_offset == 1) { + if (day_code != DAY_LAST_WEEKDAY) + day_number++; + day_weekday = (day_weekday + 1) % 7; + + /* Check we don't use February 29th. */ + if (month == 1 && day_number > 28) { + fprintf (stderr, "Can't format RRULE - out of bounds. Month: %i Day number: %i\n", month + 1, day_number); + exit (0); + } + + /* If we go past the end of the month, move to the next month. */ + if (day_code != DAY_LAST_WEEKDAY && day_number > DaysInMonth[month]) { + month++; + day_number = 1; + } + + } else if (day_offset == -1) { + if (day_code != DAY_LAST_WEEKDAY) + day_number--; + day_weekday = (day_weekday + 6) % 7; + + if (day_code != DAY_LAST_WEEKDAY && day_number < 1) + fprintf (stderr, "Month: %i Day number: %i\n", month + 1, day_number); + } + + switch (day_code) { + case DAY_SIMPLE: + /* Outlook (2000) will not parse the simple YEARLY RRULEs in VTIMEZONEs, + or BYMONTHDAY, or BYYEARDAY, which makes this option difficult! + Currently we use something like BYDAY=1SU, which will be incorrect + at times. This only affects Asia/Baghdad, Asia/Gaza, Asia/Jerusalem & + Asia/Damascus at present (and Jerusalem doesn't have specific rules + at the moment anyway, so that isn't a big loss). */ + if (!VzicPureOutput) { + if (day_number < 8) { + printf ("WARNING: %s: Outputting BYDAY=1SU instead of BYMONTHDAY=1-7 for Outlook compatability\n", CurrentZoneName); + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=1SU", + month + 1); + } else if (day_number < 15) { + printf ("WARNING: %s: Outputting BYDAY=2SU instead of BYMONTHDAY=8-14 for Outlook compatability\n", CurrentZoneName); + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=2SU", + month + 1); + } else if (day_number < 22) { + printf ("WARNING: %s: Outputting BYDAY=3SU instead of BYMONTHDAY=15-21 for Outlook compatability\n", CurrentZoneName); + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=3SU", + month + 1); + } else { + printf ("ERROR: %s: Couldn't output RRULE (day=%i) compatible with Outlook\n", CurrentZoneName, day_number); + exit (1); + } + } else { + sprintf (buffer, "RRULE:FREQ=YEARLY"); + } + break; + + case DAY_WEEKDAY_ON_OR_AFTER: + if (day_number > DaysInMonth[month] - 6) { + /* This isn't actually needed at present. */ +#if 0 + fprintf (stderr, "DAY_WEEKDAY_ON_OR_AFTER: %i %i\n", day_number, + month + 1); +#endif + + if (!VzicPureOutput) { + printf ("ERROR: %s: Couldn't output RRULE (day>=x) compatible with Outlook\n", CurrentZoneName); + exit (1); + } else { + /* We do 6 days at the end of this month, and 1 at the start of the + next. We can't do this if we want Outlook compatability, as it + needs BYMONTHDAY, which Outlook doesn't support. */ + sprintf (buffer, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYMONTHDAY=%i,%i,%i,%i,%i,%i;BYDAY=%s", + month + 1, + day_number, day_number + 1, day_number + 2, day_number + 3, + day_number + 4, day_number + 5, + WeekDays[day_weekday]); + + sprintf (buffer2, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYMONTHDAY=1;BYDAY=%s", + (month + 1) % 12 + 1, + WeekDays[day_weekday]); + + sprintf (rrule_buffer, "%s%s\n%s%s\n", + buffer, until, buffer2, until); + + return TRUE; + } + } + + if (!output_rrule_2 (buffer, month, day_number, day_weekday)) + return FALSE; + + break; + + case DAY_WEEKDAY_ON_OR_BEFORE: + if (day_number < 7) { + /* FIXME: This is unimplemented, but it isn't needed at present anway. */ + fprintf (stderr, "DAY_WEEKDAY_ON_OR_BEFORE: %i. Unimplemented. Exiting...\n", day_number); + exit (0); + } + + if (!output_rrule_2 (buffer, month, day_number - 6, day_weekday)) + return FALSE; + + break; + + case DAY_LAST_WEEKDAY: + if (day_offset == 1) { + if (month == 1) { + fprintf (stderr, "DAY_LAST_WEEKDAY - day moved, in February - can't fix\n"); + exit (0); + } + + /* This is only used once at present, for Africa/Cairo. */ +#if 0 + fprintf (stderr, "DAY_LAST_WEEKDAY - day moved\n"); +#endif + + if (!VzicPureOutput) { + printf ("WARNING: %s: Modifying RRULE (last weekday) for Outlook compatability\n", CurrentZoneName); + sprintf (buffer, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=-1%s", + month + 1, WeekDays[day_weekday]); + printf (" Outputting: %s\n", buffer); + } else { + /* We do 6 days at the end of this month, and 1 at the start of the + next. We can't do this if we want Outlook compatability, as it needs + BYMONTHDAY, which Outlook doesn't support. */ + day_number = DaysInMonth[month]; + sprintf (buffer, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYMONTHDAY=%i,%i,%i,%i,%i,%i;BYDAY=%s", + month + 1, + day_number - 5, day_number - 4, day_number - 3, + day_number - 2, day_number - 1, day_number, + WeekDays[day_weekday]); + + sprintf (buffer2, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYMONTHDAY=1;BYDAY=%s", + (month + 1) % 12 + 1, + WeekDays[day_weekday]); + + sprintf (rrule_buffer, "%s%s\n%s%s\n", + buffer, until, buffer2, until); + + return TRUE; + } + + } else if (day_offset == -1) { + /* We do 7 days 1 day before the end of this month. */ + day_number = DaysInMonth[month]; + + if (!output_rrule_2 (buffer, month, day_number - 7, day_weekday)) + return FALSE; + + sprintf (rrule_buffer, "%s%s\n", buffer, until); + return TRUE; + } + + sprintf (buffer, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=-1%s", + month + 1, WeekDays[day_weekday]); + break; + + default: + fprintf (stderr, "Invalid day code\n"); + exit (1); + } + + sprintf (rrule_buffer, "%s%s\n", buffer, until); + return TRUE; +} + + +/* This tries to convert a RRULE like 'BYMONTHDAY=8,9,10,11,12,13,14;BYDAY=FR' + into 'BYDAY=2FR'. We need this since Outlook doesn't accept BYMONTHDAY. + It returns FALSE if conversion is not possible. */ +static gboolean +output_rrule_2 (char *buffer, + int month, + int day_number, + int day_weekday) +{ + + if (day_number == 1) { + /* Convert it to a BYDAY=1SU type of RRULE. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=1%s", + month + 1, WeekDays[day_weekday]); + + } else if (day_number == 8) { + /* Convert it to a BYDAY=2SU type of RRULE. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=2%s", + month + 1, WeekDays[day_weekday]); + + } else if (day_number == 15) { + /* Convert it to a BYDAY=3SU type of RRULE. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=3%s", + month + 1, WeekDays[day_weekday]); + + } else if (day_number == 22) { + /* Convert it to a BYDAY=4SU type of RRULE. (Currently not used.) */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=4%s", + month + 1, WeekDays[day_weekday]); + + } else if (month != 1 && day_number == DaysInMonth[month] - 6) { + /* Convert it to a BYDAY=-1SU type of RRULE. (But never for February.) */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=-1%s", + month + 1, WeekDays[day_weekday]); + + } else { + /* Can't convert to a correct RRULE. If we want Outlook compatability we + have to use a slightly incorrect RRULE, so the time change will be 1 + week out every 7 or so years. Alternatively we could possibly move the + change by an hour or so so we would always be 1 or 2 hours out, but + never 1 week out. Yes, that sounds a better idea. */ + if (!VzicPureOutput) { + printf ("WARNING: %s: Modifying RRULE to be compatible with Outlook (day >= %i, month = %i)\n", CurrentZoneName, day_number, month + 1); + + if (day_number == 2) { + /* Convert it to a BYDAY=1SU type of RRULE. + This is needed for Asia/Karachi. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=1%s", + month + 1, WeekDays[day_weekday]); + } else if (day_number == 9) { + /* Convert it to a BYDAY=2SU type of RRULE. + This is needed for Antarctica/Palmer & America/Santiago. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=2%s", + month + 1, WeekDays[day_weekday]); + } else if (month != 1 && day_number == DaysInMonth[month] - 7) { + /* Convert it to a BYDAY=-1SU type of RRULE. (But never for February.) + This is needed for America/Godthab. */ + sprintf (buffer, "RRULE:FREQ=YEARLY;BYMONTH=%i;BYDAY=-1%s", + month + 1, WeekDays[day_weekday]); + } else { + printf ("ERROR: %s: Couldn't modify RRULE to be compatible with Outlook (day >= %i, month = %i)\n", CurrentZoneName, day_number, month + 1); + exit (1); + } + + } else { + sprintf (buffer, + "RRULE:FREQ=YEARLY;BYMONTH=%i;BYMONTHDAY=%i,%i,%i,%i,%i,%i,%i;BYDAY=%s", + month + 1, + day_number, day_number + 1, day_number + 2, day_number + 3, + day_number + 4, day_number + 5, day_number + 6, + WeekDays[day_weekday]); + } + } + + return TRUE; +} + + +static char* +format_vzictime (VzicTime *vzictime) +{ + static char buffer[1024]; + + sprintf (buffer, "%s %2i %s %s %i %i %s", + dump_year (vzictime->year), vzictime->month + 1, + dump_day_coded (vzictime->day_code, vzictime->day_number, + vzictime->day_weekday), + dump_time (vzictime->time_seconds, vzictime->time_code, TRUE), + vzictime->stdoff, vzictime->walloff, + vzictime->is_infinite ? "INFINITE" : ""); + + return buffer; +} + + +static void +dump_changes (FILE *fp, + char *zone_name, + GArray *changes) +{ + VzicTime *vzictime, *vzictime2 = NULL; + int i, year_offset, year; + + for (i = 0; i < changes->len; i++) { + vzictime = &g_array_index (changes, VzicTime, i); + + if (vzictime->year > MAX_CHANGES_YEAR) + return; + + dump_change (fp, zone_name, vzictime, vzictime->year); + } + + if (changes->len < 2) + return; + + /* Now see if the changes array ends with a pair of recurring changes. */ + vzictime = &g_array_index (changes, VzicTime, changes->len - 2); + vzictime2 = &g_array_index (changes, VzicTime, changes->len - 1); + if (!vzictime->is_infinite || !vzictime2->is_infinite) + return; + + year_offset = 1; + for (;;) { + year = vzictime->year + year_offset; + if (year > MAX_CHANGES_YEAR) + break; + dump_change (fp, zone_name, vzictime, year); + + year = vzictime2->year + year_offset; + if (year > MAX_CHANGES_YEAR) + break; + dump_change (fp, zone_name, vzictime2, year); + + year_offset++; + } +} + + +static void +dump_change (FILE *fp, + char *zone_name, + VzicTime *vzictime, + int year) +{ + int hour, minute, second; + VzicTime tmp_vzictime; + static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + /* Output format is: + + Zone-Name [tab] Date [tab] Time [tab] UTC-Offset + + The Date and Time fields specify the time change in UTC. + + The UTC Offset is for local (wall-clock) time. It is the amount of time + to add to UTC to get local time. + */ + + fprintf (fp, "%s\t", zone_name); + + if (year == YEAR_MINIMUM) { + fprintf (fp, " 1 Jan 0001\t 0:00:00", zone_name); + } else if (year == YEAR_MAXIMUM) { + fprintf (stderr, "Maximum year found in change time\n"); + exit (1); + } else { + tmp_vzictime = *vzictime; + tmp_vzictime.year = year; + calculate_actual_time (&tmp_vzictime, TIME_UNIVERSAL, + vzictime->prev_stdoff, vzictime->prev_walloff); + + hour = tmp_vzictime.time_seconds / 3600; + minute = (tmp_vzictime.time_seconds % 3600) / 60; + second = tmp_vzictime.time_seconds % 60; + + fprintf (fp, "%2i %s %04i\t%2i:%02i:%02i", + tmp_vzictime.day_number, months[tmp_vzictime.month], + tmp_vzictime.year, hour, minute, second); + } + + fprintf (fp, "\t%s", format_tz_offset (vzictime->walloff, FALSE)); + + fprintf (fp, "\n"); +} + + +void +ensure_directory_exists (char *directory) +{ + struct stat filestat; + + if (stat (directory, &filestat) != 0) { + /* If the directory doesn't exist, try to create it. */ + if (errno == ENOENT) { + if (mkdir (directory, 0777) != 0) { + fprintf (stderr, "Can't create directory: %s\n", directory); + exit (1); + } + } else { + fprintf (stderr, "Error calling stat() on directory: %s\n", directory); + exit (1); + } + } else if (!S_ISDIR (filestat.st_mode)) { + fprintf (stderr, "Can't create directory, already exists: %s\n", + directory); + exit (1); + } +} + + +static void +expand_tzid_prefix (void) +{ + char *src, *dest; + char date_buf[16]; + char ch1, ch2; + time_t t; + struct tm *tm; + + /* Get today's date as a string in the format "YYYYMMDD". */ + t = time (NULL); + tm = localtime (&t); + sprintf (date_buf, "%4i%02i%02i", tm->tm_year + 1900, + tm->tm_mon + 1, tm->tm_mday); + + src = TZIDPrefix; + dest = TZIDPrefixExpanded; + + while (ch1 = *src++) { + + /* Look for a '%'. */ + if (ch1 == '%') { + ch2 = *src++; + + if (ch2 == 'D') { + /* '%D' gets expanded into the date string. */ + strcpy (dest, date_buf); + dest += strlen (dest); + } else if (ch2 == '%') { + /* '%%' gets converted into one '%'. */ + *dest++ = '%'; + } else { + /* Anything else is output as is. */ + *dest++ = '%'; + *dest++ = ch2; + } + } else { + *dest++ = ch1; + } + } + +#if 0 + printf ("TZID : %s\n", TZIDPrefix); + printf ("Expanded: %s\n", TZIDPrefixExpanded); +#endif +} diff --git a/libkcal/libical/vzic-1.3/vzic-output.h b/libkcal/libical/vzic-1.3/vzic-output.h new file mode 100644 index 000000000..4552ac7b9 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-output.h @@ -0,0 +1,38 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _VZIC_OUTPUT_H_ +#define _VZIC_OUTPUT_H_ + +#include <glib.h> + +void output_vtimezone_files (char *directory, + GArray *zone_data, + GHashTable *rule_data, + GHashTable *link_data, + int max_until_year); + +void ensure_directory_exists (char *directory); + +#endif /* _VZIC_OUTPUT_H_ */ diff --git a/libkcal/libical/vzic-1.3/vzic-parse.c b/libkcal/libical/vzic-1.3/vzic-parse.c new file mode 100644 index 000000000..6ecdb7218 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-parse.c @@ -0,0 +1,901 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <ctype.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> + +#include "vzic.h" +#include "vzic-parse.h" + +/* This is the maximum line length we allow. */ +#define MAX_LINE_LEN 1024 + +/* The maximum number of fields on a line. */ +#define MAX_FIELDS 12 + + +typedef enum +{ + ZONE_ID = 0, /* The 'Zone' at the start of the line. */ + ZONE_NAME = 1, + ZONE_GMTOFF = 2, + ZONE_RULES_SAVE = 3, + ZONE_FORMAT = 4, + ZONE_UNTIL_YEAR = 5, + ZONE_UNTIL_MONTH = 6, + ZONE_UNTIL_DAY = 7, + ZONE_UNTIL_TIME = 8 +} ZoneFieldNumber; + + +typedef enum +{ + RULE_ID = 0, /* The 'Rule' at the start of the line. */ + RULE_NAME = 1, + RULE_FROM = 2, + RULE_TO = 3, + RULE_TYPE = 4, + RULE_IN = 5, + RULE_ON = 6, + RULE_AT = 7, + RULE_SAVE = 8, + RULE_LETTER_S = 9 +} RuleFieldNumber; + + +typedef enum +{ + LINK_ID = 0, /* The 'Link' at the start of the line. */ + LINK_FROM = 1, + LINK_TO = 2 +} LinkFieldNumber; + + +/* This struct contains information used while parsing the files, and is + passed to most parsing functions. */ +typedef struct _ParsingData ParsingData; +struct _ParsingData +{ + /* This is the line being parsed. buffer is a copy that we break into fields + and sub-fields as it is parsed. */ + char line[MAX_LINE_LEN]; + char buffer[MAX_LINE_LEN]; + + /* These are pointers to the start of each field in buffer. */ + char *fields[MAX_FIELDS]; + int num_fields; + + /* These are just for producing error messages. */ + char *filename; + int line_number; + + + /* This is an array of ZoneData structs, 1 for each timezone read. */ + GArray *zone_data; + + /* This is a hash table of arrays of RuleData structs. As each Rule line is + read in, a new RuleData struct is filled in and appended to the + appropriate GArray in the hash table. */ + GHashTable *rule_data; + + /* A hash containing data on the Link lines. The keys are the timezones + where the link is from (i.e. the timezone we will be outputting anyway) + and the data is a GList of timezones to link to (where we will copy the + timezone data to). */ + GHashTable *link_data; + + int max_until_year; +}; + + +/* + * Parsing functions, used when reading the Olson timezone data file. + */ +static void parse_fields (ParsingData *data); +static gboolean parse_zone_line (ParsingData *data); +static gboolean parse_zone_continuation_line (ParsingData *data); +static gboolean parse_zone_common (ParsingData *data, + int offset); +static void parse_rule_line (ParsingData *data); +static void parse_link_line (ParsingData *data); + +static int parse_year (ParsingData *data, + char *field, + gboolean accept_only, + int only_value); +static int parse_month (ParsingData *data, + char *field); +static DayCode parse_day (ParsingData *data, + char *field, + int *day, + int *weekday); +static int parse_weekday (ParsingData *data, + char *field); +static int parse_time (ParsingData *data, + char *field, + TimeCode *time_code); +static int parse_number (ParsingData *data, + char **num); +static int parse_rules_save (ParsingData *data, + char *field, + char **rules); + +static void parse_coord (char *coord, + int len, + int *result); + +void +parse_olson_file (char *filename, + GArray **zone_data, + GHashTable **rule_data, + GHashTable **link_data, + int *max_until_year) +{ + ParsingData data; + FILE *fp; + int zone_continues = 0; + + *zone_data = g_array_new (FALSE, FALSE, sizeof (ZoneData)); + *rule_data = g_hash_table_new (g_str_hash, g_str_equal); + *link_data = g_hash_table_new (g_str_hash, g_str_equal); + + fp = fopen (filename, "r"); + if (!fp) { + fprintf (stderr, "Couldn't open file: %s\n", filename); + exit (1); + } + + data.filename = filename; + data.zone_data = *zone_data; + data.rule_data = *rule_data; + data.link_data = *link_data; + data.max_until_year = 0; + + for (data.line_number = 0; ; data.line_number++) { + if (fgets (data.line, sizeof (data.line), fp) != data.line) + break; + + strcpy (data.buffer, data.line); + + parse_fields (&data); + if (data.num_fields == 0) + continue; + + if (zone_continues) { + zone_continues = parse_zone_continuation_line (&data); + } else if (!strcmp (data.fields[0], "Zone")) { + zone_continues = parse_zone_line (&data); + } else if (!strcmp (data.fields[0], "Rule")) { + parse_rule_line (&data); + } else if (!strcmp (data.fields[0], "Link")) { + parse_link_line (&data); + } else if (!strcmp (data.fields[0], "Leap")) { + /* We don't care about Leap lines. */ + } else { + fprintf (stderr, "%s:%i: Invalid line.\n%s\n", filename, + data.line_number, data.line); + exit (1); + } + } + + if (ferror (fp)) { + fprintf (stderr, "Error reading file: %s\n", filename); + exit (1); + } + + if (zone_continues) { + fprintf (stderr, "%s:%i: Zone continuation line expected.\n%s\n", + filename, data.line_number, data.line); + exit (1); + } + + fclose (fp); + +#if 0 + printf ("Max UNTIL year: %i\n", data.max_until_year); +#endif + *max_until_year = data.max_until_year; +} + + +/* Converts the line into fields. */ +static void +parse_fields (ParsingData *data) +{ + int i; + char *p, *s, ch; + + /* Reset all fields to NULL. */ + for (i = 0; i < MAX_FIELDS; i++) + data->fields[i] = 0; + + data->num_fields = 0; + p = data->buffer; + + for (;;) { + /* Skip whitespace. */ + while (isspace (*p)) + p++; + + /* See if we have reached the end of the line or a comment. */ + if (*p == '\0' || *p == '#') + break; + + /* We must have another field, so save the start position. */ + data->fields[data->num_fields++] = p; + + /* Now find the end of the field. If the field contains '"' characters + they are removed and we have to move the rest of the chars back. */ + s = p; + for (;;) { + ch = *p; + if (ch == '\0' || ch == '#') { + /* Don't move p on since this is the end of the line. */ + *s = '\0'; + break; + } else if (isspace (ch)) { + *s = '\0'; + p++; + break; + } else if (ch == '"') { + p++; + for (;;) { + ch = *p; + if (ch == '\0') { + fprintf (stderr, + "%s:%i: Closing quote character ('\"') missing.\n%s\n", + data->filename, data->line_number, data->line); + exit (1); + } else if (ch == '"') { + p++; + break; + } else { + *s++ = ch; + } + p++; + } + } else { + *s++ = ch; + } + p++; + } + } + +#if 0 + printf ("%i fields: ", data->num_fields); + for (i = 0; i < data->num_fields; i++) + printf ("'%s' ", data->fields[i]); + printf ("\n"); +#endif +} + + +static gboolean +parse_zone_line (ParsingData *data) +{ + ZoneData zone; + + /* All 5 fields up to FORMAT must be present. */ + if (data->num_fields < 5 || data->num_fields > 9) { + fprintf (stderr, "%s:%i: Invalid Zone line - %i fields.\n%s\n", + data->filename, data->line_number, data->num_fields, + data->line); + exit (1); + } + + zone.zone_name = g_strdup (data->fields[ZONE_NAME]); + zone.zone_line_data = g_array_new (FALSE, FALSE, sizeof (ZoneLineData)); + + g_array_append_val (data->zone_data, zone); + + return parse_zone_common (data, 0); +} + + +static gboolean +parse_zone_continuation_line (ParsingData *data) +{ + /* All 3 fields up to FORMAT must be present. */ + if (data->num_fields < 3 || data->num_fields > 7) { + fprintf (stderr, + "%s:%i: Invalid Zone continuation line - %i fields.\n%s\n", + data->filename, data->line_number, data->num_fields, + data->line); + exit (1); + } + + return parse_zone_common (data, -2); +} + + +static gboolean +parse_zone_common (ParsingData *data, + int offset) +{ + ZoneData *zone; + ZoneLineData zone_line; + TimeCode time_code; + + zone_line.stdoff_seconds = parse_time (data, + data->fields[ZONE_GMTOFF + offset], + &time_code); + zone_line.save_seconds = parse_rules_save (data, + data->fields[ZONE_RULES_SAVE + offset], + &zone_line.rules); + + if (!VzicPureOutput) { + /* We round the UTC offsets to the nearest minute, to be compatible with + Outlook. This also works with -ve numbers, I think. + -56 % 60 = -59. -61 % 60 = -1. */ + if (zone_line.stdoff_seconds >= 0) + zone_line.stdoff_seconds += 30; + else + zone_line.stdoff_seconds -= 29; + zone_line.stdoff_seconds -= zone_line.stdoff_seconds % 60; + + if (zone_line.save_seconds >= 0) + zone_line.save_seconds += 30; + else + zone_line.save_seconds -= 29; + zone_line.save_seconds -= zone_line.save_seconds % 60; + } + + zone_line.format = g_strdup (data->fields[ZONE_FORMAT + offset]); + + if (data->num_fields - offset >= 6) { + zone_line.until_set = TRUE; + zone_line.until_year = parse_year (data, + data->fields[ZONE_UNTIL_YEAR + offset], + FALSE, 0); + zone_line.until_month = parse_month (data, + data->fields[ZONE_UNTIL_MONTH + offset]); + zone_line.until_day_code = parse_day (data, + data->fields[ZONE_UNTIL_DAY + offset], + &zone_line.until_day_number, + &zone_line.until_day_weekday); + zone_line.until_time_seconds = parse_time (data, + data->fields[ZONE_UNTIL_TIME + offset], + &zone_line.until_time_code); + + /* We also want to know the maximum year used in any UNTIL value, so we + know where to expand all the infinite Rule data to. */ + if (zone_line.until_year != YEAR_MAXIMUM + && zone_line.until_year != YEAR_MINIMUM) + data->max_until_year = MAX (data->max_until_year, zone_line.until_year); + + } else { + zone_line.until_set = FALSE; + } + + /* Append it to the last Zone, since that is the one we are currently + reading. */ + zone = &g_array_index (data->zone_data, ZoneData, data->zone_data->len - 1); + g_array_append_val (zone->zone_line_data, zone_line); + + return zone_line.until_set; +} + + +static void +parse_rule_line (ParsingData *data) +{ + GArray *rule_array; + RuleData rule; + char *name; + TimeCode time_code; + + /* All 10 fields must be present. */ + if (data->num_fields != 10) { + fprintf (stderr, "%s:%i: Invalid Rule line - %i fields.\n%s\n", + data->filename, data->line_number, data->num_fields, + data->line); + exit (1); + } + + name = data->fields[RULE_NAME]; + + /* Create the GArray and add it to the hash table if it doesn't already + exist. */ + rule_array = g_hash_table_lookup (data->rule_data, name); + if (!rule_array) { + rule_array = g_array_new (FALSE, FALSE, sizeof (RuleData)); + g_hash_table_insert (data->rule_data, g_strdup (name), rule_array); + } + + rule.from_year = parse_year (data, data->fields[RULE_FROM], FALSE, 0); + if (rule.from_year == YEAR_MAXIMUM) { + fprintf (stderr, "%s:%i: Invalid Rule FROM value: '%s'\n", + data->filename, data->line_number, data->fields[RULE_FROM]); + exit (1); + } + + rule.to_year = parse_year (data, data->fields[RULE_TO], TRUE, + rule.from_year); + if (rule.to_year == YEAR_MINIMUM) { + fprintf (stderr, "%s:%i: Invalid Rule TO value: %s\n", + data->filename, data->line_number, data->fields[RULE_TO]); + exit (1); + } + + if (!strcmp (data->fields[RULE_TYPE], "-")) + rule.type = NULL; + else { + printf ("Type: %s\n", data->fields[RULE_TYPE]); + rule.type = g_strdup (data->fields[RULE_TYPE]); + } + + rule.in_month = parse_month (data, data->fields[RULE_IN]); + rule.on_day_code = parse_day (data, data->fields[RULE_ON], + &rule.on_day_number, &rule.on_day_weekday); + rule.at_time_seconds = parse_time (data, data->fields[RULE_AT], + &rule.at_time_code); + rule.save_seconds = parse_time (data, data->fields[RULE_SAVE], &time_code); + + if (!strcmp (data->fields[RULE_LETTER_S], "-")) { + rule.letter_s = NULL; + } else { + rule.letter_s = g_strdup (data->fields[RULE_LETTER_S]); + } + + rule.is_shallow_copy = FALSE; + + g_array_append_val (rule_array, rule); +} + + +static void +parse_link_line (ParsingData *data) +{ + char *from, *to, *old_from; + GList *zone_list; + + /* We must have 3 fields for a Link. */ + if (data->num_fields != 3) { + fprintf (stderr, "%s:%i: Invalid Rule line - %i fields.\n%s\n", + data->filename, data->line_number, data->num_fields, + data->line); + exit (1); + } + + from = data->fields[LINK_FROM]; + to = data->fields[LINK_TO]; + +#if 0 + printf ("LINK FROM: %s\tTO: %s\n", from, to); +#endif + + if (g_hash_table_lookup_extended (data->link_data, from, + (gpointer) &old_from, + (gpointer) &zone_list)) { + from = old_from; + } else { + from = g_strdup (from); + zone_list = NULL; + } + + zone_list = g_list_prepend (zone_list, g_strdup (to)); + + g_hash_table_insert (data->link_data, from, zone_list); +} + + +static int +parse_year (ParsingData *data, + char *field, + gboolean accept_only, + int only_value) +{ + int len, year = 0; + char *p; + + if (!field) { + fprintf (stderr, "%s:%i: Missing year.\n%s\n", data->filename, + data->line_number, data->line); + exit (1); + } + + len = strlen (field); + if (accept_only && !strncmp (field, "only", len)) + return only_value; + if (len >= 2) { + if (!strncmp (field, "maximum", len)) + return YEAR_MAXIMUM; + else if (!strncmp (field, "minimum", len)) + return YEAR_MINIMUM; + } + + for (p = field; *p; p++) { + if (*p < '0' || *p > '9') { + fprintf (stderr, "%s:%i: Invalid year: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + + year = year * 10 + *p - '0'; + } + + if (year < 1000 || year > 2037) { + fprintf (stderr, "%s:%i: Strange year: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + + return year; +} + + +/* Parses a month name, returning 0 (Jan) to 11 (Dec). */ +static int +parse_month (ParsingData *data, + char *field) +{ + static char* months[] = { "january", "february", "march", "april", "may", + "june", "july", "august", "september", "october", + "november", "december" }; + char *p; + int len, i; + + /* If the field is missing, it must be the optional UNTIL month, so we return + 0 for January. */ + if (!field) + return 0; + + for (p = field, len = 0; *p; p++, len++) { + *p = tolower (*p); + } + + for (i = 0; i < 12; i++) { + if (!strncmp (field, months[i], len)) + return i; + } + + fprintf (stderr, "%s:%i: Invalid month: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); +} + + +/* Parses a day specifier, returning a code representing the type of match + together with a day of the month and a weekday number (0=Sun). */ +static DayCode +parse_day (ParsingData *data, + char *field, + int *day, + int *weekday) +{ + char *day_part, *p; + DayCode day_code; + + if (!field) { + *day = 1; + return DAY_SIMPLE; + } + + *day = *weekday = 0; + + if (!strncmp (field, "last", 4)) { + *weekday = parse_weekday (data, field + 4); + /* We set the day to the end of the month to make sorting Rules easy. */ + *day = 31; + return DAY_LAST_WEEKDAY; + } + + day_part = field; + day_code = DAY_SIMPLE; + + for (p = field; *p; p++) { + if (*p == '<' || *p == '>') { + if (*(p + 1) == '=') { + day_code = (*p == '<') ? DAY_WEEKDAY_ON_OR_BEFORE + : DAY_WEEKDAY_ON_OR_AFTER; + *p = '\0'; + *weekday = parse_weekday (data, field); + day_part = p + 2; + break; + } + + fprintf (stderr, "%s:%i: Invalid day: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + } + + for (p = day_part; *p; p++) { + if (*p < '0' || *p > '9') { + fprintf (stderr, "%s:%i: Invalid day: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + + *day = *day * 10 + *p - '0'; + } + + if (*day < 1 || *day > 31) { + fprintf (stderr, "%s:%i: Invalid day: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + + return day_code; +} + + +/* Parses a weekday name, returning 0 (Sun) to 6 (Sat). */ +static int +parse_weekday (ParsingData *data, + char *field) +{ + static char* weekdays[] = { "sunday", "monday", "tuesday", "wednesday", + "thursday", "friday", "saturday" }; + char *p; + int len, i; + + for (p = field, len = 0; *p; p++, len++) { + *p = tolower (*p); + } + + for (i = 0; i < 7; i++) { + if (!strncmp (field, weekdays[i], len)) + return i; + } + + fprintf (stderr, "%s:%i: Invalid weekday: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); +} + + +/* Parses a time (hour + minute + second) and returns the result in seconds, + together with a time code specifying whether it is Wall clock time, + local standard time, or universal time. + The time can start with a '-' in which case it will be negative. */ +static int +parse_time (ParsingData *data, + char *field, + TimeCode *time_code) +{ + char *p; + int hours = 0, minutes = 0, seconds = 0, result, negative = 0; + + if (!field) { + *time_code = TIME_WALL; + return 0; + } + + p = field; + if (*p == '-') { + p++; + negative = 1; + } + + hours = parse_number (data, &p); + + if (*p == ':') { + p++; + minutes = parse_number (data, &p); + + if (*p == ':') { + p++; + seconds = parse_number (data, &p); + } + } + + if (hours < 0 || hours > 24 + || minutes < 0 || minutes > 59 + || seconds < 0 || seconds > 59 + || (hours == 24 && (minutes != 0 || seconds != 0))) { + fprintf (stderr, "%s:%i: Invalid time: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); + } + + if (hours == 24) { + hours = 23; + minutes = 59; + seconds = 59; + } + +#if 0 + printf ("Time: %s -> %i:%02i:%02i\n", field, hours, minutes, seconds); +#endif + + result = hours * 3600 + minutes * 60 + seconds; + if (negative) + result = -result; + + if (*p == '\0') { + *time_code = TIME_WALL; + return result; + } + + if (*(p + 1) == '\0') { + if (*p == 'w') { + *time_code = TIME_WALL; + return result; + } else if (*p == 's') { + *time_code = TIME_STANDARD; + return result; + } else if (*p == 'u' || *p == 'g' || *p == 'z') { + *time_code = TIME_UNIVERSAL; + return result; + } + } + + fprintf (stderr, "%s:%i: Invalid time: %s\n%s\n", data->filename, + data->line_number, field, data->line); + exit (1); +} + + +/* Parses a simple number and returns the result. The pointer argument + is moved to the first character after the number. */ +static int +parse_number (ParsingData *data, + char **num) +{ + char *p; + int result; + + p = *num; + +#if 0 + printf ("In parse_number p:%s\n", p); +#endif + + if (*p < '0' || *p > '9') { + fprintf (stderr, "%s:%i: Invalid number: %s\n%s\n", data->filename, + data->line_number, *num, data->line); + exit (1); + } + + result = *p++ - '0'; + + while (*p >= '0' && *p <= '9') + result = result * 10 + *p++ - '0'; + + *num = p; + return result; +} + + +static int +parse_rules_save (ParsingData *data, + char *field, + char **rules) +{ + TimeCode time_code; + + *rules = NULL; + + /* Check for just "-". */ + if (field[0] == '-' && field[1] == '\0') + return 0; + + /* Check for a time to add to local standard time. We don't care about a + time code here, since it is just an offset. */ + if (*field == '-' || (*field >= '0' && *field <= '9')) + return parse_time (data, field, &time_code); + + /* It must be a rules name. */ + *rules = g_strdup (field); + return 0; +} + + + + + +GHashTable* +parse_zone_tab (char *filename) +{ + GHashTable *zones_hash; + ZoneDescription *zone_desc; + FILE *fp; + char buf[4096]; + gchar **fields, *zone_name, *latitude, *longitude, *p; + + + fp = fopen (filename, "r"); + if (!fp) { + fprintf (stderr, "Couldn't open file: %s\n", filename); + exit (1); + } + + zones_hash = g_hash_table_new (g_str_hash, g_str_equal); + + while (fgets (buf, sizeof(buf), fp)) { + if (*buf == '#') continue; + + g_strchomp (buf); + fields = g_strsplit (buf,"\t", 4); + + if (strlen (fields[0]) != 2) { + fprintf (stderr, "Invalid zone description line: %s\n", buf); + exit (1); + } + + zone_name = g_strdup (fields[2]); + + zone_desc = g_new (ZoneDescription, 1); + zone_desc->country_code[0] = fields[0][0]; + zone_desc->country_code[1] = fields[0][1]; + zone_desc->comment = (fields[3] && fields[3][0]) ? g_strdup (fields[3]) + : NULL; + + /* Now parse the latitude and longitude. */ + latitude = fields[1]; + longitude = latitude + 1; + while (*longitude != '+' && *longitude != '-') + longitude++; + + parse_coord (latitude, longitude - latitude, zone_desc->latitude); + parse_coord (longitude, strlen (longitude), zone_desc->longitude); + + g_hash_table_insert (zones_hash, zone_name, zone_desc); + +#if 0 + g_print ("Found zone: %s %i %02i %02i,%i %02i %02i\n", zone_name, + zone_desc->latitude[0], zone_desc->latitude[1], + zone_desc->latitude[2], + zone_desc->longitude[0], zone_desc->longitude[1], + zone_desc->longitude[2]); +#endif + } + + fclose (fp); + + return zones_hash; +} + + +static void +parse_coord (char *coord, + int len, + int *result) +{ + int degrees = 0, minutes = 0, seconds = 0; + + if (len == 5) + sscanf (coord + 1, "%2d%2d", °rees, &minutes); + else if (len == 6) + sscanf (coord + 1, "%3d%2d", °rees, &minutes); + else if (len == 7) + sscanf (coord + 1, "%2d%2d%2d", °rees, &minutes, &seconds); + else if (len == 8) + sscanf (coord + 1, "%3d%2d%2d", °rees, &minutes, &seconds); + else { + fprintf (stderr, "Invalid coordinate: %s\n", coord); + exit (1); + } + + if (coord[0] == '-') + degrees = -degrees; + + result[0] = degrees; + result[1] = minutes; + result[2] = seconds; +} + diff --git a/libkcal/libical/vzic-1.3/vzic-parse.h b/libkcal/libical/vzic-1.3/vzic-parse.h new file mode 100644 index 000000000..fde3b2c71 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-parse.h @@ -0,0 +1,38 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _VZIC_PARSE_H_ +#define _VZIC_PARSE_H_ + +#include <glib.h> + +void parse_olson_file (char *filename, + GArray **zone_data, + GHashTable **rule_data, + GHashTable **link_data, + int *max_until_year); + +GHashTable* parse_zone_tab (char *filename); + +#endif /* _VZIC_PARSE_H_ */ diff --git a/libkcal/libical/vzic-1.3/vzic-test.pl b/libkcal/libical/vzic-1.3/vzic-test.pl new file mode 100755 index 000000000..cebac79fe --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic-test.pl @@ -0,0 +1,164 @@ +#!/usr/bin/perl -w + +# +# Vzic - a program to convert Olson timezone database files into VZTIMEZONE +# files compatible with the iCalendar specification (RFC2445). +# +# Copyright (C) 2001 Ximian, Inc. +# Copyright (C) 2003 Damon Chaplin. +# +# Author: Damon Chaplin <damon@gnome.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +# + +# +# This outputs an iCalendar file containing one event in each timezone, +# as well as all the VTIMEZONEs. We use it for testing compatability with +# other iCalendar apps like Outlook, by trying to import it there. +# +# Currently we have 377 timezones (with tzdata2001d). +# + +# Set this to the toplevel directory of the VTIMEZONE files. +$ZONEINFO_DIR = "/home/damon/src/zoneinfo"; + +$output_file = "calendar.ics"; + + +# Save this so we can restore it later. +$input_record_separator = $/; + +chdir $ZONEINFO_DIR + || die "Can't cd to $ZONEINFO_DIR"; + +# Create the output file, to contain all the VEVENTs & VTIMEZONEs. +open (OUTPUTFILE, ">$output_file") + || die "Can't create file: $output_file"; + +# Output the standard header. + print OUTPUTFILE <<EOF; +BEGIN:VCALENDAR +PRODID:-//Ximian//NONSGML Vzic Test//EN +VERSION:2.0 +METHOD:PUBLISH +EOF + +$zone_num = 0; + +# 365 days in a non-leap year. +@days_in_month = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); + +foreach $file (`find -name "*.ics"`) { + # Get rid of './' at start and whitespace at end. + $file =~ s/^\.\///; + $file =~ s/\s+$//; + + if ($file eq $output_file) { + next; + } + +# print "File: $file\n"; + + # Get the VTIMEZONE data. + open (ZONEFILE, "$file") + || die "Can't open file: $ZONEINFO_DIR/$file"; + undef $/; + $vtimezone = <ZONEFILE>; + $/ = $input_record_separator; + close (ZONEFILE); + + # Strip the stuff before and after the VTIMEZONE component + $vtimezone =~ s/^.*BEGIN:VTIMEZONE/BEGIN:VTIMEZONE/s; + $vtimezone =~ s/END:VTIMEZONE.*$/END:VTIMEZONE\n/s; + + print OUTPUTFILE $vtimezone; + + # Find the TZID. + $vtimezone =~ m/TZID:(.*)/; + $tzid = $1; +# print "TZID: $tzid\n"; + + # Find the location. + $file =~ m/(.*)\.ics/; + $location = $1; +# print "LOCATION: $location\n"; + + # Try to find the current UTC offset that Outlook will use. + # If there is an RRULE, we look for the first 2 TZOFFSETTO properties, + # else we just get the first one. + if ($vtimezone =~ m/RRULE/) { + $vtimezone =~ m/TZOFFSETTO:([+-]?\d+)/; + $tzoffsetto = $1; + $vtimezone =~ m/TZOFFSETFROM:([+-]?\d+)/; + $tzoffsetfrom = $1; + $tzoffset = "$tzoffsetfrom/$tzoffsetto"; + } else { + $vtimezone =~ m/TZOFFSETTO:([+-]?\d+)/s; + $tzoffset = $1; + } +# print "TZOFFSET: $tzoffset\n"; + + # We put each event on a separate day in 2001 and Jan 2002. + $day_num = $zone_num; + if ($day_num >= 365) { + $year = 2002; + $day_num -= 365; + } else { + $year = 2001; + } + $month = -1; + for ($i = 0; $i < 12; $i++) { + if ($day_num < $days_in_month[$i]) { + $month = $i; + last; + } + $day_num -= $days_in_month[$i] + } + if ($month == -1) { + die "month = -1"; + } + + $month++; + $day_num++; + $date = sprintf ("%i%02i%02i", $year, $month, $day_num); +# print "Date: $date\n"; + + # Output a VEVENT using the timezone. + print OUTPUTFILE <<EOF; +BEGIN:VEVENT +UID:vzic-test-${zone_num} +DTSTAMP:20010101T000000Z +DTSTART;TZID=${tzid}:${date}T120000 +DTEND;TZID=${tzid}:${date}T130000 +RRULE:FREQ=MONTHLY;BYMONTHDAY=${day_num} +SUMMARY:($tzoffset) ${location} 12:00-13:00 UTC +SEQUENCE:1 +END:VEVENT +EOF + + $zone_num++; + + # Use this to stop after a certain number. +# last if ($zone_num == 100); +} + +# Output the standard footer. + print OUTPUTFILE <<EOF; +END:VCALENDAR +EOF + +close (OUTPUTFILE); + diff --git a/libkcal/libical/vzic-1.3/vzic.c b/libkcal/libical/vzic-1.3/vzic.c new file mode 100644 index 000000000..1108d8777 --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic.c @@ -0,0 +1,320 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <stdio.h> +#include <string.h> + +#include "vzic.h" +#include "vzic-parse.h" +#include "vzic-dump.h" +#include "vzic-output.h" + + +/* + * Global command-line options. + */ + +/* By default we output Outlook-compatible output. If --pure is used we + output pure output, with no changes to be compatible with Outlook. */ +gboolean VzicPureOutput = FALSE; + +gboolean VzicDumpOutput = FALSE; +gboolean VzicDumpChanges = FALSE; +gboolean VzicDumpZoneNamesAndCoords = TRUE; +gboolean VzicDumpZoneTranslatableStrings= TRUE; +gboolean VzicNoRRules = FALSE; +gboolean VzicNoRDates = FALSE; +char* VzicOutputDir = "zoneinfo"; +char* VzicUrlPrefix = NULL; +char* VzicOlsonDir = OLSON_DIR; + +GList* VzicTimeZoneNames = NULL; + +static void convert_olson_file (char *olson_file); + +static void usage (void); + +static void free_zone_data (GArray *zone_data); +static void free_rule_array (gpointer key, + gpointer value, + gpointer data); +static void free_link_data (gpointer key, + gpointer value, + gpointer data); + + +int +main (int argc, + char *argv[]) +{ + int i; + char directory[PATHNAME_BUFFER_SIZE]; + char filename[PATHNAME_BUFFER_SIZE]; + GHashTable *zones_hash; + + /* + * Command-Line Option Parsing. + */ + for (i = 1; i < argc; i++) { + /* + * User Options. + */ + + /* --pure: Output the perfect VCALENDAR data, which Outlook won't parse + as it has problems with certain iCalendar constructs. */ + if (!strcmp (argv[i], "--pure")) + VzicPureOutput = TRUE; + + /* --output-dir: specify where to output all the files beneath. The + default is the current directory. */ + else if (argc > i + 1 && !strcmp (argv[i], "--output-dir")) + VzicOutputDir = argv[++i]; + + /* --url-prefix: Used as the base for the TZURL property in each + VTIMEZONE. The default is to not output TZURL properties. */ + else if (argc > i + 1 && !strcmp (argv[i], "--url-prefix")) { + int length; + VzicUrlPrefix = argv[++i]; + /* remove the trailing '/' if there is one */ + length = strlen (VzicUrlPrefix); + if (VzicUrlPrefix[length - 1] == '/') + VzicUrlPrefix[length - 1] = '\0'; + } + + else if (argc > i + 1 && !strcmp (argv[i], "--olson-dir")) { + VzicOlsonDir = argv[++i]; + } + + /* + * Debugging Options. + */ + + /* --dump: Dump the Rule and Zone data that we parsed from the Olson + timezone files. This is used to test the parsing code. */ + else if (!strcmp (argv[i], "--dump")) + VzicDumpOutput = TRUE; + + /* --dump-changes: Dumps a list of times when each timezone changed, + and the new local time offset from UTC. */ + else if (!strcmp (argv[i], "--dump-changes")) + VzicDumpChanges = TRUE; + + /* --no-rrules: Don't output RRULE properties in the VTIMEZONEs. Instead + it will just output RDATEs for each year up to a certain year. */ + else if (!strcmp (argv[i], "--no-rrules")) + VzicNoRRules = TRUE; + + /* --no-rdates: Don't output multiple RDATEs in a single VTIMEZONE + component. Instead they will be output separately. */ + else if (!strcmp (argv[i], "--no-rdates")) + VzicNoRDates = TRUE; + + else + usage (); + } + + /* + * Create any necessary directories. + */ + ensure_directory_exists (VzicOutputDir); + + if (VzicDumpOutput) { + /* Create the directories for the dump output, if they don't exist. */ + sprintf (directory, "%s/ZonesVzic", VzicOutputDir); + ensure_directory_exists (directory); + sprintf (directory, "%s/RulesVzic", VzicOutputDir); + ensure_directory_exists (directory); + } + + if (VzicDumpChanges) { + /* Create the directory for the changes output, if it doesn't exist. */ + sprintf (directory, "%s/ChangesVzic", VzicOutputDir); + ensure_directory_exists (directory); + } + + /* + * Convert the Olson timezone files. + */ + convert_olson_file ("africa"); + convert_olson_file ("antarctica"); + convert_olson_file ("asia"); + convert_olson_file ("australasia"); + convert_olson_file ("europe"); + convert_olson_file ("northamerica"); + convert_olson_file ("southamerica"); + + /* These are backwards-compatability and weird stuff. */ +#if 0 + convert_olson_file ("backward"); + convert_olson_file ("etcetera"); + convert_olson_file ("leapseconds"); + convert_olson_file ("pacificnew"); + convert_olson_file ("solar87"); + convert_olson_file ("solar88"); + convert_olson_file ("solar89"); +#endif + + /* This doesn't really do anything and it messes up vzic-dump.pl so we + don't bother. */ +#if 0 + convert_olson_file ("factory"); +#endif + + /* This is old System V stuff, which we don't currently support since it + uses 'min' as a Rule FROM value which messes up our algorithm, making + it too slow and use too much memory. */ +#if 0 + convert_olson_file ("systemv"); +#endif + + /* Output the timezone names and coordinates in a zone.tab file, and + the translatable strings to feed to gettext. */ + if (VzicDumpZoneNamesAndCoords) { + sprintf (filename, "%s/zone.tab", VzicOlsonDir); + zones_hash = parse_zone_tab (filename); + + dump_time_zone_names (VzicTimeZoneNames, VzicOutputDir, zones_hash); + } + + return 0; +} + + +static void +convert_olson_file (char *olson_file) +{ + char input_filename[PATHNAME_BUFFER_SIZE]; + GArray *zone_data; + GHashTable *rule_data, *link_data; + char dump_filename[PATHNAME_BUFFER_SIZE]; + ZoneData *zone; + int i, max_until_year; + + sprintf (input_filename, "%s/%s", VzicOlsonDir, olson_file); + + parse_olson_file (input_filename, &zone_data, &rule_data, &link_data, + &max_until_year); + + if (VzicDumpOutput) { + sprintf (dump_filename, "%s/ZonesVzic/%s", VzicOutputDir, olson_file); + dump_zone_data (zone_data, dump_filename); + + sprintf (dump_filename, "%s/RulesVzic/%s", VzicOutputDir, olson_file); + dump_rule_data (rule_data, dump_filename); + } + + output_vtimezone_files (VzicOutputDir, zone_data, rule_data, link_data, + max_until_year); + + free_zone_data (zone_data); + g_hash_table_foreach (rule_data, free_rule_array, NULL); + g_hash_table_destroy (rule_data); + g_hash_table_foreach (link_data, free_link_data, NULL); + g_hash_table_destroy (link_data); +} + + +static void +usage (void) +{ + fprintf (stderr, "Usage: vzic [--dump] [--dump-changes] [--no-rrules] [--no-rdates] [--pure] [--output-dir <directory>] [--url-prefix <url>] [--olson-dir <directory>]\n"); + + exit (1); +} + + + + +/* + * Functions to free the data structures. + */ + +static void +free_zone_data (GArray *zone_data) +{ + ZoneData *zone; + ZoneLineData *zone_line; + int i, j; + + for (i = 0; i < zone_data->len; i++) { + zone = &g_array_index (zone_data, ZoneData, i); + + g_free (zone->zone_name); + + for (j = 0; j < zone->zone_line_data->len; j++) { + zone_line = &g_array_index (zone->zone_line_data, ZoneLineData, j); + + g_free (zone_line->rules); + g_free (zone_line->format); + } + + g_array_free (zone->zone_line_data, TRUE); + } + + g_array_free (zone_data, TRUE); +} + + +static void +free_rule_array (gpointer key, + gpointer value, + gpointer data) +{ + char *name = key; + GArray *rule_array = value; + RuleData *rule; + int i; + + for (i = 0; i < rule_array->len; i++) { + rule = &g_array_index (rule_array, RuleData, i); + + if (!rule->is_shallow_copy) { + g_free (rule->type); + g_free (rule->letter_s); + } + } + + g_array_free (rule_array, TRUE); + + g_free (name); +} + + +static void +free_link_data (gpointer key, + gpointer value, + gpointer data) +{ + GList *link = data; + + g_free (key); + + while (link) { + g_free (link->data); + link = link->next; + } + + g_list_free (data); +} + diff --git a/libkcal/libical/vzic-1.3/vzic.h b/libkcal/libical/vzic-1.3/vzic.h new file mode 100644 index 000000000..afa84d67b --- /dev/null +++ b/libkcal/libical/vzic-1.3/vzic.h @@ -0,0 +1,196 @@ +/* + * Vzic - a program to convert Olson timezone database files into VZTIMEZONE + * files compatible with the iCalendar specification (RFC2445). + * + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2003 Damon Chaplin. + * + * Author: Damon Chaplin <damon@gnome.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _VZIC_H_ +#define _VZIC_H_ + +#include <glib.h> + + +/* + * Global command-line options. + */ + +/* By default we output Outlook-compatible output. If --pure is used we output + pure output, with no changes to be compatible with Outlook. */ +extern gboolean VzicPureOutput; + +extern gboolean VzicDumpOutput; +extern gboolean VzicDumpChanges; +extern gboolean VzicDumpZoneNamesAndCoords; +extern gboolean VzicDumpZoneTranslatableStrings; +extern gboolean VzicNoRRules; +extern gboolean VzicNoRDates; +extern char* VzicUrlPrefix; + +extern GList* VzicTimeZoneNames; + +/* The minimum & maximum years we can use. */ +#define YEAR_MINIMUM G_MININT +#define YEAR_MAXIMUM G_MAXINT + +/* The maximum size of any complete pathname. */ +#define PATHNAME_BUFFER_SIZE 1024 + +/* Days can be expressed either as a simple month day number, 1-31, or a rule + such as the last Sunday, or the first Monday on or after the 8th. */ +typedef enum +{ + DAY_SIMPLE, + DAY_WEEKDAY_ON_OR_AFTER, + DAY_WEEKDAY_ON_OR_BEFORE, + DAY_LAST_WEEKDAY +} DayCode; + + +/* Times can be given either as universal time (UTC), local standard time + (without daylight-saving adjustments) or wall clock time (local standard + time plus daylight-saving adjustments, i.e. what you would see on a clock + on the wall!). */ +typedef enum +{ + TIME_WALL, + TIME_STANDARD, + TIME_UNIVERSAL +} TimeCode; + + +/* This represents one timezone, e.g. "Africa/Algiers". + It contains the timezone name, and an array of ZoneLineData structs which + hold data from each Zone line, including the continuation lines. */ +typedef struct _ZoneData ZoneData; +struct _ZoneData +{ + char *zone_name; + + /* An array of ZoneLineData, one for each Zone & Zone continuation line + read in. */ + GArray *zone_line_data; +}; + + +typedef struct _ZoneLineData ZoneLineData; +struct _ZoneLineData +{ + /* The amount of time to add to UTC to get local standard time for the + current time range, in seconds. */ + int stdoff_seconds; + + /* Either rules is set to the name of a set of rules, or rules is NULL and + save is set to the time to add to local standard time to get wall time, in + seconds. If save is 0 as well, then standard time always applies. */ + char *rules; + int save_seconds; + + /* The format to use for the abbreviated timezone name, e.g. WE%sT. + The %s is replaced by variable part of the name. (See the letter_s field + in the RuleData struct below). */ + char *format; + + /* TRUE if an UNTIL time is given. */ + gboolean until_set; + + /* The UNTIL year, e.g. 2000. */ + int until_year; + + /* The UNTIL month 0 (Jan) to 11 (Dec). */ + int until_month; + + /* The UNTIL day, either a simple month day number, 1-31, or a rule such as + the last Sunday, or the first Monday on or after the 8th. */ + DayCode until_day_code; + int until_day_number; /* 1 to 31. */ + int until_day_weekday; /* 0 (Sun) to 6 (Sat). */ + + /* The UNTIL time, in seconds from midnight. The code specifies whether the + time is a wall clock time, local standard time, or universal time. */ + int until_time_seconds; + TimeCode until_time_code; +}; + + +typedef struct _RuleData RuleData; +struct _RuleData +{ + /* The first year that the rule applies to, e.g. 1996. + Can also be YEAR_MINIMUM. */ + int from_year; + + /* The last year that the rule applies to, e.g. 1996. + Can also be YEAR_MAXIMUM. */ + int to_year; + + /* A string used to only match certain years between from and to. + The rule only applies to the years which match. If type is NULL the rule + applies to all years betweeen from and to. + zic uses an external program called yearistype to check the string. + Currently it is not used in the Olson database. */ + char *type; + + /* The month of the rule 0 (Jan) to 11 (Dec). */ + int in_month; + + /* The day, either a simple month day number, 1-31, or a rule such as + the last Sunday, or the first Monday on or after the 8th. */ + DayCode on_day_code; + int on_day_number; + int on_day_weekday; /* 0 (Sun) to 6 (Sat). */ + + /* The time, in seconds from midnight. The code specifies whether the + time is a wall clock time, local standard time, or universal time. */ + int at_time_seconds; + TimeCode at_time_code; + + /* The amount of time to add to local standard time when the rule is in + effect, in seconds. If this is not 0 then it must be a daylight-saving + time. */ + int save_seconds; + + /* The letter(s) to use as the variable part in the abbreviated timezone + name. If this is NULL then no variable part is used. (See the format field + in the ZoneLineData struct above.) */ + char *letter_s; + + + /* This is set to TRUE if this element is a shallow copy of another one, + in which case we don't free any of the fields. */ + gboolean is_shallow_copy; +}; + + +typedef struct _ZoneDescription ZoneDescription; +struct _ZoneDescription +{ + /* 2-letter ISO 3166 country code. */ + char country_code[2]; + + /* latitude and longitude in degrees, minutes & seconds. The degrees value + holds the sign of the entire latitude/longitude. */ + int latitude[3]; + int longitude[3]; + + char *comment; +}; + +#endif /* _VZIC_H_ */ diff --git a/libkcal/libical/zoneinfo/Africa/Abidjan.ics b/libkcal/libical/zoneinfo/Africa/Abidjan.ics new file mode 100644 index 000000000..9eef562f9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Abidjan.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Abidjan +X-LIC-LOCATION:Africa/Abidjan +BEGIN:STANDARD +TZOFFSETFROM:-001608 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Accra.ics b/libkcal/libical/zoneinfo/Africa/Accra.ics new file mode 100644 index 000000000..93bb65bc7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Accra.ics @@ -0,0 +1,41 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Accra +X-LIC-LOCATION:Africa/Accra +BEGIN:STANDARD +TZOFFSETFROM:-000052 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19180101T000000 +RDATE:19180101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0020 +TZNAME:GHST +DTSTART:19360901T000000 +RDATE:19360901T000000 +RDATE:19370901T000000 +RDATE:19380901T000000 +RDATE:19390901T000000 +RDATE:19400901T000000 +RDATE:19410901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0020 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19361231T000000 +RDATE:19361231T000000 +RDATE:19371231T000000 +RDATE:19381231T000000 +RDATE:19391231T000000 +RDATE:19401231T000000 +RDATE:19411231T000000 +RDATE:19421231T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Addis_Ababa.ics b/libkcal/libical/zoneinfo/Africa/Addis_Ababa.ics new file mode 100644 index 000000000..7cc623ee9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Addis_Ababa.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Addis_Ababa +X-LIC-LOCATION:Africa/Addis_Ababa +BEGIN:STANDARD +TZOFFSETFROM:+023448 +TZOFFSETTO:+023520 +TZNAME:ADMT +DTSTART:18700101T000000 +RDATE:18700101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+023520 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19360505T000000 +RDATE:19360505T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Algiers.ics b/libkcal/libical/zoneinfo/Africa/Algiers.ics new file mode 100644 index 000000000..2a9b039ff --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Algiers.ics @@ -0,0 +1,90 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Algiers +X-LIC-LOCATION:Africa/Algiers +BEGIN:STANDARD +TZOFFSETFROM:+001212 +TZOFFSETTO:+000921 +TZNAME:PMT +DTSTART:18910315T000100 +RDATE:18910315T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000921 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19110311T000000 +RDATE:19110311T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19160614T230000 +RDATE:19160614T230000 +RDATE:19170324T230000 +RDATE:19180309T230000 +RDATE:19190301T230000 +RDATE:19200214T230000 +RDATE:19210314T230000 +RDATE:19390911T230000 +RDATE:19710425T230000 +RDATE:19770506T000000 +RDATE:19800425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19161002T000000 +RDATE:19161002T000000 +RDATE:19171008T000000 +RDATE:19181007T000000 +RDATE:19191006T000000 +RDATE:19201024T000000 +RDATE:19210622T000000 +RDATE:19391119T010000 +RDATE:19461007T000000 +RDATE:19630414T000000 +RDATE:19710927T000000 +RDATE:19791026T000000 +RDATE:19801031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19400225T020000 +RDATE:19400225T020000 +RDATE:19560129T000000 +RDATE:19810501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19440403T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19780324T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19441008T020000 +RDATE:19441008T020000 +RDATE:19450916T010000 +RDATE:19780922T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19771021T000000 +RDATE:19771021T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Asmara.ics b/libkcal/libical/zoneinfo/Africa/Asmara.ics new file mode 100644 index 000000000..dadf9b1e0 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Asmara.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Asmara +X-LIC-LOCATION:Africa/Asmara +BEGIN:STANDARD +TZOFFSETFROM:+023532 +TZOFFSETTO:+023532 +TZNAME:AMT +DTSTART:18700101T000000 +RDATE:18700101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+023532 +TZOFFSETTO:+023520 +TZNAME:ADMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+023520 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19360505T000000 +RDATE:19360505T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Bamako.ics b/libkcal/libical/zoneinfo/Africa/Bamako.ics new file mode 100644 index 000000000..72b75fcc8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Bamako.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Bamako +X-LIC-LOCATION:Africa/Bamako +BEGIN:STANDARD +TZOFFSETFROM:-0032 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19340226T000000 +RDATE:19340226T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19600620T000000 +RDATE:19600620T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Bangui.ics b/libkcal/libical/zoneinfo/Africa/Bangui.ics new file mode 100644 index 000000000..27ce2e161 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Bangui.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Bangui +X-LIC-LOCATION:Africa/Bangui +BEGIN:STANDARD +TZOFFSETFROM:+011420 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Banjul.ics b/libkcal/libical/zoneinfo/Africa/Banjul.ics new file mode 100644 index 000000000..e5a529826 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Banjul.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Banjul +X-LIC-LOCATION:Africa/Banjul +BEGIN:STANDARD +TZOFFSETFROM:-010636 +TZOFFSETTO:-010636 +TZNAME:BMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-010636 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19350101T000000 +RDATE:19350101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19640101T000000 +RDATE:19640101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Bissau.ics b/libkcal/libical/zoneinfo/Africa/Bissau.ics new file mode 100644 index 000000000..bc50677bc --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Bissau.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Bissau +X-LIC-LOCATION:Africa/Bissau +BEGIN:STANDARD +TZOFFSETFROM:-010220 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19110526T000000 +RDATE:19110526T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19750101T000000 +RDATE:19750101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Blantyre.ics b/libkcal/libical/zoneinfo/Africa/Blantyre.ics new file mode 100644 index 000000000..3a88e08b7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Blantyre.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Blantyre +X-LIC-LOCATION:Africa/Blantyre +BEGIN:STANDARD +TZOFFSETFROM:+0220 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Brazzaville.ics b/libkcal/libical/zoneinfo/Africa/Brazzaville.ics new file mode 100644 index 000000000..fec4b9eaf --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Brazzaville.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Brazzaville +X-LIC-LOCATION:Africa/Brazzaville +BEGIN:STANDARD +TZOFFSETFROM:+010108 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Bujumbura.ics b/libkcal/libical/zoneinfo/Africa/Bujumbura.ics new file mode 100644 index 000000000..e9d5e0aca --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Bujumbura.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Bujumbura +X-LIC-LOCATION:Africa/Bujumbura +BEGIN:STANDARD +TZOFFSETFROM:+015728 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Cairo.ics b/libkcal/libical/zoneinfo/Africa/Cairo.ics new file mode 100644 index 000000000..4ee8198ef --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Cairo.ics @@ -0,0 +1,148 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Cairo +X-LIC-LOCATION:Africa/Cairo +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19950428T000000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20080828T230000 +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=-1TH +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0205 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19001001T000000 +RDATE:19001001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19400715T000000 +RDATE:19400715T000000 +RDATE:19410415T000000 +RDATE:19420401T000000 +RDATE:19430401T000000 +RDATE:19440401T000000 +RDATE:19450416T000000 +RDATE:19570510T000000 +RDATE:19580501T000000 +RDATE:19590501T010000 +RDATE:19600501T010000 +RDATE:19610501T010000 +RDATE:19620501T010000 +RDATE:19630501T010000 +RDATE:19640501T010000 +RDATE:19650501T010000 +RDATE:19660501T010000 +RDATE:19670501T010000 +RDATE:19680501T010000 +RDATE:19690501T010000 +RDATE:19700501T010000 +RDATE:19710501T010000 +RDATE:19720501T010000 +RDATE:19730501T010000 +RDATE:19740501T010000 +RDATE:19750501T010000 +RDATE:19760501T010000 +RDATE:19770501T010000 +RDATE:19780501T010000 +RDATE:19790501T010000 +RDATE:19800501T010000 +RDATE:19810501T010000 +RDATE:19820725T010000 +RDATE:19830712T010000 +RDATE:19840501T010000 +RDATE:19850501T010000 +RDATE:19860501T010000 +RDATE:19870501T010000 +RDATE:19880501T010000 +RDATE:19890506T010000 +RDATE:19900501T010000 +RDATE:19910501T010000 +RDATE:19920501T010000 +RDATE:19930501T010000 +RDATE:19940501T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19401001T000000 +RDATE:19401001T000000 +RDATE:19410916T000000 +RDATE:19421027T000000 +RDATE:19431101T000000 +RDATE:19441101T000000 +RDATE:19451101T000000 +RDATE:19571001T000000 +RDATE:19581001T000000 +RDATE:19590930T030000 +RDATE:19600930T030000 +RDATE:19610930T030000 +RDATE:19620930T030000 +RDATE:19630930T030000 +RDATE:19640930T030000 +RDATE:19650930T030000 +RDATE:19661001T030000 +RDATE:19671001T030000 +RDATE:19681001T030000 +RDATE:19691001T030000 +RDATE:19701001T030000 +RDATE:19711001T030000 +RDATE:19721001T030000 +RDATE:19731001T030000 +RDATE:19741001T030000 +RDATE:19751001T030000 +RDATE:19761001T030000 +RDATE:19771001T030000 +RDATE:19781001T030000 +RDATE:19791001T030000 +RDATE:19801001T030000 +RDATE:19811001T030000 +RDATE:19821001T030000 +RDATE:19831001T030000 +RDATE:19841001T030000 +RDATE:19851001T030000 +RDATE:19861001T030000 +RDATE:19871001T030000 +RDATE:19881001T030000 +RDATE:19891001T030000 +RDATE:19901001T030000 +RDATE:19911001T030000 +RDATE:19921001T030000 +RDATE:19931001T030000 +RDATE:19941001T030000 +RDATE:19950929T000000 +RDATE:19960927T000000 +RDATE:19970926T000000 +RDATE:19980925T000000 +RDATE:19991001T000000 +RDATE:20000929T000000 +RDATE:20010928T000000 +RDATE:20020927T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20030925T230000 +RDATE:20030925T230000 +RDATE:20040930T230000 +RDATE:20050929T230000 +RDATE:20060921T230000 +RDATE:20070906T230000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Casablanca.ics b/libkcal/libical/zoneinfo/Africa/Casablanca.ics new file mode 100644 index 000000000..0ba6bd005 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Casablanca.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Casablanca +X-LIC-LOCATION:Africa/Casablanca +BEGIN:STANDARD +TZOFFSETFROM:-003020 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19131026T000000 +RDATE:19131026T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19390912T000000 +RDATE:19390912T000000 +RDATE:19400225T000000 +RDATE:19500611T000000 +RDATE:19670603T120000 +RDATE:19740624T000000 +RDATE:19760501T000000 +RDATE:19770501T000000 +RDATE:19780601T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19391119T000000 +RDATE:19391119T000000 +RDATE:19451118T000000 +RDATE:19501029T000000 +RDATE:19671001T000000 +RDATE:19740901T000000 +RDATE:19760801T000000 +RDATE:19770928T000000 +RDATE:19780804T000000 +RDATE:19860101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19840316T000000 +RDATE:19840316T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Ceuta.ics b/libkcal/libical/zoneinfo/Africa/Ceuta.ics new file mode 100644 index 000000000..adf26c99a --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Ceuta.ics @@ -0,0 +1,99 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Ceuta +X-LIC-LOCATION:Africa/Ceuta +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19860330T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-002116 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19180506T230000 +RDATE:19180506T230000 +RDATE:19240416T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19670603T120000 +RDATE:19740624T000000 +RDATE:19760501T000000 +RDATE:19770501T000000 +RDATE:19780601T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19181007T230000 +RDATE:19181007T230000 +RDATE:19241005T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19671001T000000 +RDATE:19740901T000000 +RDATE:19760801T000000 +RDATE:19770928T000000 +RDATE:19780804T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19240101T000000 +RDATE:19240101T000000 +RDATE:19290101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19840316T000000 +RDATE:19840316T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19860101T000000 +RDATE:19860101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19860928T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Conakry.ics b/libkcal/libical/zoneinfo/Africa/Conakry.ics new file mode 100644 index 000000000..ad55c750d --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Conakry.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Conakry +X-LIC-LOCATION:Africa/Conakry +BEGIN:STANDARD +TZOFFSETFROM:-005452 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19340226T000000 +RDATE:19340226T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19600101T000000 +RDATE:19600101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Dakar.ics b/libkcal/libical/zoneinfo/Africa/Dakar.ics new file mode 100644 index 000000000..f7920fd93 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Dakar.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Dakar +X-LIC-LOCATION:Africa/Dakar +BEGIN:STANDARD +TZOFFSETFROM:-010944 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19410601T000000 +RDATE:19410601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Dar_es_Salaam.ics b/libkcal/libical/zoneinfo/Africa/Dar_es_Salaam.ics new file mode 100644 index 000000000..9a55ed72b --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Dar_es_Salaam.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Dar_es_Salaam +X-LIC-LOCATION:Africa/Dar_es_Salaam +BEGIN:STANDARD +TZOFFSETFROM:+023708 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+024445 +TZNAME:BEAUT +DTSTART:19480101T000000 +RDATE:19480101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+024445 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19610101T000000 +RDATE:19610101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Djibouti.ics b/libkcal/libical/zoneinfo/Africa/Djibouti.ics new file mode 100644 index 000000000..a3cec4644 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Djibouti.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Djibouti +X-LIC-LOCATION:Africa/Djibouti +BEGIN:STANDARD +TZOFFSETFROM:+025236 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Douala.ics b/libkcal/libical/zoneinfo/Africa/Douala.ics new file mode 100644 index 000000000..c3a7b7a6f --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Douala.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Douala +X-LIC-LOCATION:Africa/Douala +BEGIN:STANDARD +TZOFFSETFROM:+003848 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/El_Aaiun.ics b/libkcal/libical/zoneinfo/Africa/El_Aaiun.ics new file mode 100644 index 000000000..aca7b03f4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/El_Aaiun.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/El_Aaiun +X-LIC-LOCATION:Africa/El_Aaiun +BEGIN:STANDARD +TZOFFSETFROM:-005248 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19340101T000000 +RDATE:19340101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19760414T000000 +RDATE:19760414T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Freetown.ics b/libkcal/libical/zoneinfo/Africa/Freetown.ics new file mode 100644 index 000000000..492a464a5 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Freetown.ics @@ -0,0 +1,81 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Freetown +X-LIC-LOCATION:Africa/Freetown +BEGIN:STANDARD +TZOFFSETFROM:-0053 +TZOFFSETTO:-0053 +TZNAME:FMT +DTSTART:18820101T000000 +RDATE:18820101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0053 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19130601T000000 +RDATE:19130601T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:-0020 +TZNAME:SLST +DTSTART:19350601T000000 +RDATE:19350601T000000 +RDATE:19360601T000000 +RDATE:19370601T000000 +RDATE:19380601T000000 +RDATE:19390601T000000 +RDATE:19400601T000000 +RDATE:19410601T000000 +RDATE:19420601T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0020 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19351001T000000 +RDATE:19351001T000000 +RDATE:19361001T000000 +RDATE:19371001T000000 +RDATE:19381001T000000 +RDATE:19391001T000000 +RDATE:19401001T000000 +RDATE:19411001T000000 +RDATE:19421001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19570101T000000 +RDATE:19570101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:SLST +DTSTART:19570601T000000 +RDATE:19570601T000000 +RDATE:19580601T000000 +RDATE:19590601T000000 +RDATE:19600601T000000 +RDATE:19610601T000000 +RDATE:19620601T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19570901T000000 +RDATE:19570901T000000 +RDATE:19580901T000000 +RDATE:19590901T000000 +RDATE:19600901T000000 +RDATE:19610901T000000 +RDATE:19620901T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Gaborone.ics b/libkcal/libical/zoneinfo/Africa/Gaborone.ics new file mode 100644 index 000000000..91c494abc --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Gaborone.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Gaborone +X-LIC-LOCATION:Africa/Gaborone +BEGIN:STANDARD +TZOFFSETFROM:+014340 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:18850101T000000 +RDATE:18850101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:CAST +DTSTART:19430919T020000 +RDATE:19430919T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19440319T020000 +RDATE:19440319T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Harare.ics b/libkcal/libical/zoneinfo/Africa/Harare.ics new file mode 100644 index 000000000..264796d71 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Harare.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Harare +X-LIC-LOCATION:Africa/Harare +BEGIN:STANDARD +TZOFFSETFROM:+020412 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Johannesburg.ics b/libkcal/libical/zoneinfo/Africa/Johannesburg.ics new file mode 100644 index 000000000..95a0eb5ce --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Johannesburg.ics @@ -0,0 +1,38 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Johannesburg +X-LIC-LOCATION:Africa/Johannesburg +BEGIN:STANDARD +TZOFFSETFROM:+0152 +TZOFFSETTO:+0130 +TZNAME:SAST +DTSTART:18920208T000000 +RDATE:18920208T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0130 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:SAST +DTSTART:19420920T020000 +RDATE:19420920T020000 +RDATE:19430919T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19430321T020000 +RDATE:19430321T020000 +RDATE:19440319T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Kampala.ics b/libkcal/libical/zoneinfo/Africa/Kampala.ics new file mode 100644 index 000000000..c332713d9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Kampala.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Kampala +X-LIC-LOCATION:Africa/Kampala +BEGIN:STANDARD +TZOFFSETFROM:+020940 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19280701T000000 +RDATE:19280701T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0230 +TZNAME:BEAT +DTSTART:19300101T000000 +RDATE:19300101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0230 +TZOFFSETTO:+024445 +TZNAME:BEAUT +DTSTART:19480101T000000 +RDATE:19480101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+024445 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19570101T000000 +RDATE:19570101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Khartoum.ics b/libkcal/libical/zoneinfo/Africa/Khartoum.ics new file mode 100644 index 000000000..7b1aa4c5b --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Khartoum.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Khartoum +X-LIC-LOCATION:Africa/Khartoum +BEGIN:STANDARD +TZOFFSETFROM:+021008 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:CAST +DTSTART:19700501T000000 +RDATE:19700501T000000 +RDATE:19710430T000000 +RDATE:19720430T000000 +RDATE:19730429T000000 +RDATE:19740428T000000 +RDATE:19750427T000000 +RDATE:19760425T000000 +RDATE:19770424T000000 +RDATE:19780430T000000 +RDATE:19790429T000000 +RDATE:19800427T000000 +RDATE:19810426T000000 +RDATE:19820425T000000 +RDATE:19830424T000000 +RDATE:19840429T000000 +RDATE:19850428T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19701015T000000 +RDATE:19701015T000000 +RDATE:19711015T000000 +RDATE:19721015T000000 +RDATE:19731015T000000 +RDATE:19741015T000000 +RDATE:19751015T000000 +RDATE:19761015T000000 +RDATE:19771015T000000 +RDATE:19781015T000000 +RDATE:19791015T000000 +RDATE:19801015T000000 +RDATE:19811015T000000 +RDATE:19821015T000000 +RDATE:19831015T000000 +RDATE:19841015T000000 +RDATE:19851015T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:20000115T120000 +RDATE:20000115T120000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Kigali.ics b/libkcal/libical/zoneinfo/Africa/Kigali.ics new file mode 100644 index 000000000..5a88f680e --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Kigali.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Kigali +X-LIC-LOCATION:Africa/Kigali +BEGIN:STANDARD +TZOFFSETFROM:+020016 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19350601T000000 +RDATE:19350601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Kinshasa.ics b/libkcal/libical/zoneinfo/Africa/Kinshasa.ics new file mode 100644 index 000000000..1120c1a9c --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Kinshasa.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Kinshasa +X-LIC-LOCATION:Africa/Kinshasa +BEGIN:STANDARD +TZOFFSETFROM:+010112 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:18971109T000000 +RDATE:18971109T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Lagos.ics b/libkcal/libical/zoneinfo/Africa/Lagos.ics new file mode 100644 index 000000000..66b9a040f --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Lagos.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Lagos +X-LIC-LOCATION:Africa/Lagos +BEGIN:STANDARD +TZOFFSETFROM:+001336 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19190901T000000 +RDATE:19190901T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Libreville.ics b/libkcal/libical/zoneinfo/Africa/Libreville.ics new file mode 100644 index 000000000..937dc157d --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Libreville.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Libreville +X-LIC-LOCATION:Africa/Libreville +BEGIN:STANDARD +TZOFFSETFROM:+003748 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Lome.ics b/libkcal/libical/zoneinfo/Africa/Lome.ics new file mode 100644 index 000000000..8b535f820 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Lome.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Lome +X-LIC-LOCATION:Africa/Lome +BEGIN:STANDARD +TZOFFSETFROM:+000452 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18930101T000000 +RDATE:18930101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Luanda.ics b/libkcal/libical/zoneinfo/Africa/Luanda.ics new file mode 100644 index 000000000..d48392b17 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Luanda.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Luanda +X-LIC-LOCATION:Africa/Luanda +BEGIN:STANDARD +TZOFFSETFROM:+005256 +TZOFFSETTO:+005204 +TZNAME:AOT +DTSTART:18920101T000000 +RDATE:18920101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005204 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19110526T000000 +RDATE:19110526T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Lubumbashi.ics b/libkcal/libical/zoneinfo/Africa/Lubumbashi.ics new file mode 100644 index 000000000..9ea664698 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Lubumbashi.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Lubumbashi +X-LIC-LOCATION:Africa/Lubumbashi +BEGIN:STANDARD +TZOFFSETFROM:+014952 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:18971109T000000 +RDATE:18971109T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Lusaka.ics b/libkcal/libical/zoneinfo/Africa/Lusaka.ics new file mode 100644 index 000000000..9f2c43aa4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Lusaka.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Lusaka +X-LIC-LOCATION:Africa/Lusaka +BEGIN:STANDARD +TZOFFSETFROM:+015308 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Malabo.ics b/libkcal/libical/zoneinfo/Africa/Malabo.ics new file mode 100644 index 000000000..0f057dfbb --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Malabo.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Malabo +X-LIC-LOCATION:Africa/Malabo +BEGIN:STANDARD +TZOFFSETFROM:+003508 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19631215T000000 +RDATE:19631215T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Maputo.ics b/libkcal/libical/zoneinfo/Africa/Maputo.ics new file mode 100644 index 000000000..63cfe3ae7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Maputo.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Maputo +X-LIC-LOCATION:Africa/Maputo +BEGIN:STANDARD +TZOFFSETFROM:+021020 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Maseru.ics b/libkcal/libical/zoneinfo/Africa/Maseru.ics new file mode 100644 index 000000000..ea185e3f9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Maseru.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Maseru +X-LIC-LOCATION:Africa/Maseru +BEGIN:STANDARD +TZOFFSETFROM:+0150 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:SAST +DTSTART:19430919T020000 +RDATE:19430919T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19440319T020000 +RDATE:19440319T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Mbabane.ics b/libkcal/libical/zoneinfo/Africa/Mbabane.ics new file mode 100644 index 000000000..808b6a7ab --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Mbabane.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Mbabane +X-LIC-LOCATION:Africa/Mbabane +BEGIN:STANDARD +TZOFFSETFROM:+020424 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Mogadishu.ics b/libkcal/libical/zoneinfo/Africa/Mogadishu.ics new file mode 100644 index 000000000..941a65ae8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Mogadishu.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Mogadishu +X-LIC-LOCATION:Africa/Mogadishu +BEGIN:STANDARD +TZOFFSETFROM:+030128 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:18931101T000000 +RDATE:18931101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0230 +TZNAME:BEAT +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0230 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19570101T000000 +RDATE:19570101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Monrovia.ics b/libkcal/libical/zoneinfo/Africa/Monrovia.ics new file mode 100644 index 000000000..9a36a0037 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Monrovia.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Monrovia +X-LIC-LOCATION:Africa/Monrovia +BEGIN:STANDARD +TZOFFSETFROM:-004308 +TZOFFSETTO:-004308 +TZNAME:MMT +DTSTART:18820101T000000 +RDATE:18820101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-004308 +TZOFFSETTO:-004430 +TZNAME:LRT +DTSTART:19190301T000000 +RDATE:19190301T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-004430 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19720501T000000 +RDATE:19720501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Nairobi.ics b/libkcal/libical/zoneinfo/Africa/Nairobi.ics new file mode 100644 index 000000000..a9b3c728d --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Nairobi.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Nairobi +X-LIC-LOCATION:Africa/Nairobi +BEGIN:STANDARD +TZOFFSETFROM:+022716 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19280701T000000 +RDATE:19280701T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0230 +TZNAME:BEAT +DTSTART:19300101T000000 +RDATE:19300101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0230 +TZOFFSETTO:+024445 +TZNAME:BEAUT +DTSTART:19400101T000000 +RDATE:19400101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+024445 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19600101T000000 +RDATE:19600101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Ndjamena.ics b/libkcal/libical/zoneinfo/Africa/Ndjamena.ics new file mode 100644 index 000000000..afb486616 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Ndjamena.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Ndjamena +X-LIC-LOCATION:Africa/Ndjamena +BEGIN:STANDARD +TZOFFSETFROM:+010012 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WAST +DTSTART:19791014T000000 +RDATE:19791014T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19800308T000000 +RDATE:19800308T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Niamey.ics b/libkcal/libical/zoneinfo/Africa/Niamey.ics new file mode 100644 index 000000000..09248ce93 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Niamey.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Niamey +X-LIC-LOCATION:Africa/Niamey +BEGIN:STANDARD +TZOFFSETFROM:+000828 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19340226T000000 +RDATE:19340226T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19600101T000000 +RDATE:19600101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Nouakchott.ics b/libkcal/libical/zoneinfo/Africa/Nouakchott.ics new file mode 100644 index 000000000..4ee701a25 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Nouakchott.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Nouakchott +X-LIC-LOCATION:Africa/Nouakchott +BEGIN:STANDARD +TZOFFSETFROM:-010348 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:WAT +DTSTART:19340226T000000 +RDATE:19340226T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19601128T000000 +RDATE:19601128T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Ouagadougou.ics b/libkcal/libical/zoneinfo/Africa/Ouagadougou.ics new file mode 100644 index 000000000..5e6d22565 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Ouagadougou.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Ouagadougou +X-LIC-LOCATION:Africa/Ouagadougou +BEGIN:STANDARD +TZOFFSETFROM:-000604 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Porto-Novo.ics b/libkcal/libical/zoneinfo/Africa/Porto-Novo.ics new file mode 100644 index 000000000..60dec2011 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Porto-Novo.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Porto-Novo +X-LIC-LOCATION:Africa/Porto-Novo +BEGIN:STANDARD +TZOFFSETFROM:+001028 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19340226T000000 +RDATE:19340226T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Sao_Tome.ics b/libkcal/libical/zoneinfo/Africa/Sao_Tome.ics new file mode 100644 index 000000000..9135c17a9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Sao_Tome.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Sao_Tome +X-LIC-LOCATION:Africa/Sao_Tome +BEGIN:STANDARD +TZOFFSETFROM:+002656 +TZOFFSETTO:-003632 +TZNAME:LMT +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-003632 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Tripoli.ics b/libkcal/libical/zoneinfo/Africa/Tripoli.ics new file mode 100644 index 000000000..0398b0403 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Tripoli.ics @@ -0,0 +1,67 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Tripoli +X-LIC-LOCATION:Africa/Tripoli +BEGIN:STANDARD +TZOFFSETFROM:+005244 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19511014T020000 +RDATE:19511014T020000 +RDATE:19531009T020000 +RDATE:19550930T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850406T000000 +RDATE:19860404T000000 +RDATE:19870401T000000 +RDATE:19880401T000000 +RDATE:19890401T000000 +RDATE:19970404T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19520101T000000 +RDATE:19520101T000000 +RDATE:19540101T000000 +RDATE:19560101T000000 +RDATE:19820101T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19841001T000000 +RDATE:19851001T000000 +RDATE:19861003T000000 +RDATE:19871001T000000 +RDATE:19881001T000000 +RDATE:19891001T000000 +RDATE:19960930T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19590101T000000 +RDATE:19590101T000000 +RDATE:19900504T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19971004T000000 +RDATE:19971004T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Tunis.ics b/libkcal/libical/zoneinfo/Africa/Tunis.ics new file mode 100644 index 000000000..6029fff73 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Tunis.ics @@ -0,0 +1,74 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Tunis +X-LIC-LOCATION:Africa/Tunis +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:20060326T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:20061029T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004044 +TZOFFSETTO:+000921 +TZNAME:PMT +DTSTART:18810512T000000 +RDATE:18810512T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000921 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19110311T000000 +RDATE:19110311T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19390415T230000 +RDATE:19390415T230000 +RDATE:19400225T230000 +RDATE:19420309T000000 +RDATE:19430329T020000 +RDATE:19430425T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19770430T000000 +RDATE:19780501T000000 +RDATE:19880601T000000 +RDATE:19890326T000000 +RDATE:19900501T000000 +RDATE:20050501T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19391119T000000 +RDATE:19391119T000000 +RDATE:19411006T000000 +RDATE:19421102T030000 +RDATE:19430417T020000 +RDATE:19431004T020000 +RDATE:19441008T000000 +RDATE:19450916T000000 +RDATE:19770924T010000 +RDATE:19781001T010000 +RDATE:19880925T010000 +RDATE:19890924T010000 +RDATE:19900930T010000 +RDATE:20050930T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Africa/Windhoek.ics b/libkcal/libical/zoneinfo/Africa/Windhoek.ics new file mode 100644 index 000000000..b9faf0bf4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Africa/Windhoek.ics @@ -0,0 +1,64 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Africa/Windhoek +X-LIC-LOCATION:Africa/Windhoek +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WAST +DTSTART:19940904T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19950402T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+010824 +TZOFFSETTO:+0130 +TZNAME:SWAT +DTSTART:18920208T000000 +RDATE:18920208T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0130 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19030301T000000 +RDATE:19030301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:SAST +DTSTART:19420920T020000 +RDATE:19420920T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:SAST +DTSTART:19430321T020000 +RDATE:19430321T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CAT +DTSTART:19900321T000000 +RDATE:19900321T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WAT +DTSTART:19940403T000000 +RDATE:19940403T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Adak.ics b/libkcal/libical/zoneinfo/America/Adak.ics new file mode 100644 index 000000000..2350c2680 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Adak.ics @@ -0,0 +1,186 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Adak +X-LIC-LOCATION:America/Adak +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +TZNAME:HADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +TZNAME:HAST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+121321 +TZOFFSETTO:-114638 +TZNAME:LMT +DTSTART:18671018T000000 +RDATE:18671018T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-114638 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19000820T120000 +RDATE:19000820T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1100 +TZOFFSETTO:-1000 +TZNAME:NWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:NPT +DTSTART:19450814T130000 +RDATE:19450814T130000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19450930T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19670401T000000 +RDATE:19670401T000000 +RDATE:19690101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1100 +TZOFFSETTO:-1000 +TZNAME:BDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:AHST +DTSTART:19831030T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:HAST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +TZNAME:HADT +DTSTART:19840429T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +TZNAME:HAST +DTSTART:19841028T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Anchorage.ics b/libkcal/libical/zoneinfo/America/Anchorage.ics new file mode 100644 index 000000000..d3c83bed0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Anchorage.ics @@ -0,0 +1,186 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Anchorage +X-LIC-LOCATION:America/Anchorage +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+140024 +TZOFFSETTO:-095936 +TZNAME:LMT +DTSTART:18671018T000000 +RDATE:18671018T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-095936 +TZOFFSETTO:-1000 +TZNAME:CAT +DTSTART:19000820T120000 +RDATE:19000820T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:CAT +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +TZNAME:CAWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:CAPT +DTSTART:19450814T140000 +RDATE:19450814T140000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +TZNAME:CAT +DTSTART:19450930T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:AHST +DTSTART:19670401T000000 +RDATE:19670401T000000 +RDATE:19690101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +TZNAME:AHDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +TZNAME:AHST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19831030T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:19840429T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19841028T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Anguilla.ics b/libkcal/libical/zoneinfo/America/Anguilla.ics new file mode 100644 index 000000000..040235f82 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Anguilla.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Anguilla +X-LIC-LOCATION:America/Anguilla +BEGIN:STANDARD +TZOFFSETFROM:-041216 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19120302T000000 +RDATE:19120302T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Antigua.ics b/libkcal/libical/zoneinfo/America/Antigua.ics new file mode 100644 index 000000000..bb999579d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Antigua.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Antigua +X-LIC-LOCATION:America/Antigua +BEGIN:STANDARD +TZOFFSETFROM:-040712 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19120302T000000 +RDATE:19120302T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19510101T000000 +RDATE:19510101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Araguaina.ics b/libkcal/libical/zoneinfo/America/Araguaina.ics new file mode 100644 index 000000000..7bb34fba6 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Araguaina.ics @@ -0,0 +1,84 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Araguaina +X-LIC-LOCATION:America/Araguaina +BEGIN:STANDARD +TZOFFSETFROM:-031248 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19951015T000000 +RDATE:19961006T000000 +RDATE:19971006T000000 +RDATE:19981011T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +RDATE:20021103T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19960211T000000 +RDATE:19970216T000000 +RDATE:19980301T000000 +RDATE:19990221T000000 +RDATE:20000227T000000 +RDATE:20010218T000000 +RDATE:20020217T000000 +RDATE:20030216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19900917T000000 +RDATE:19900917T000000 +RDATE:19950914T000000 +RDATE:20030924T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Buenos_Aires.ics b/libkcal/libical/zoneinfo/America/Argentina/Buenos_Aires.ics new file mode 100644 index 000000000..0a53523f3 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Buenos_Aires.ics @@ -0,0 +1,134 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Buenos_Aires +X-LIC-LOCATION:America/Argentina/Buenos_Aires +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-035348 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19910303T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Catamarca.ics b/libkcal/libical/zoneinfo/America/Argentina/Catamarca.ics new file mode 100644 index 000000000..362f94d43 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Catamarca.ics @@ -0,0 +1,154 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Catamarca +X-LIC-LOCATION:America/Argentina/Catamarca +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-042308 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:20040620T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910303T000000 +RDATE:19910303T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19911020T000000 +RDATE:19911020T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040601T000000 +RDATE:20040601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Cordoba.ics b/libkcal/libical/zoneinfo/America/Argentina/Cordoba.ics new file mode 100644 index 000000000..923fcafce --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Cordoba.ics @@ -0,0 +1,146 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Cordoba +X-LIC-LOCATION:America/Argentina/Cordoba +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910303T000000 +RDATE:19910303T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19911020T000000 +RDATE:19911020T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Jujuy.ics b/libkcal/libical/zoneinfo/America/Argentina/Jujuy.ics new file mode 100644 index 000000000..f3fc0abec --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Jujuy.ics @@ -0,0 +1,165 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Jujuy +X-LIC-LOCATION:America/Argentina/Jujuy +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-042112 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19900304T000000 +RDATE:19900304T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:WARST +DTSTART:19901028T000000 +RDATE:19901028T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910317T000000 +RDATE:19910317T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19911006T000000 +RDATE:19911006T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19920101T000000 +RDATE:19920101T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/La_Rioja.ics b/libkcal/libical/zoneinfo/America/Argentina/La_Rioja.ics new file mode 100644 index 000000000..7a0b3bc5c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/La_Rioja.ics @@ -0,0 +1,149 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/La_Rioja +X-LIC-LOCATION:America/Argentina/La_Rioja +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-042724 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:19910507T000000 +RDATE:20040620T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910301T000000 +RDATE:19910301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040601T000000 +RDATE:20040601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Mendoza.ics b/libkcal/libical/zoneinfo/America/Argentina/Mendoza.ics new file mode 100644 index 000000000..43c632e7f --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Mendoza.ics @@ -0,0 +1,160 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Mendoza +X-LIC-LOCATION:America/Argentina/Mendoza +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-043516 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:20040926T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19900304T000000 +RDATE:19900304T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:WARST +DTSTART:19901015T000000 +RDATE:19901015T000000 +RDATE:19911015T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910301T000000 +RDATE:19910301T000000 +RDATE:19920301T000000 +RDATE:20040523T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19921018T000000 +RDATE:19921018T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Rio_Gallegos.ics b/libkcal/libical/zoneinfo/America/Argentina/Rio_Gallegos.ics new file mode 100644 index 000000000..b2a59cd2c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Rio_Gallegos.ics @@ -0,0 +1,142 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Rio_Gallegos +X-LIC-LOCATION:America/Argentina/Rio_Gallegos +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-043652 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:20040620T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19910303T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040601T000000 +RDATE:20040601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/San_Juan.ics b/libkcal/libical/zoneinfo/America/Argentina/San_Juan.ics new file mode 100644 index 000000000..29641141a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/San_Juan.ics @@ -0,0 +1,149 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/San_Juan +X-LIC-LOCATION:America/Argentina/San_Juan +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-043404 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:19910507T000000 +RDATE:20040725T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910301T000000 +RDATE:19910301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040531T000000 +RDATE:20040531T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/San_Luis.ics b/libkcal/libical/zoneinfo/America/Argentina/San_Luis.ics new file mode 100644 index 000000000..cefad3a99 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/San_Luis.ics @@ -0,0 +1,141 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/San_Luis +X-LIC-LOCATION:America/Argentina/San_Luis +BEGIN:STANDARD +TZOFFSETFROM:-042524 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:19910507T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +RDATE:20080121T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910301T000000 +RDATE:19910301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040531T000000 +RDATE:20040531T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +DTSTART:20040725T000000 +RDATE:20040725T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Tucuman.ics b/libkcal/libical/zoneinfo/America/Argentina/Tucuman.ics new file mode 100644 index 000000000..0a49b0305 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Tucuman.ics @@ -0,0 +1,154 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Tucuman +X-LIC-LOCATION:America/Argentina/Tucuman +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-042052 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:20040613T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:19910303T000000 +RDATE:19910303T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19911020T000000 +RDATE:19911020T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040601T000000 +RDATE:20040601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Argentina/Ushuaia.ics b/libkcal/libical/zoneinfo/America/Argentina/Ushuaia.ics new file mode 100644 index 000000000..615a9b80b --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Argentina/Ushuaia.ics @@ -0,0 +1,142 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Argentina/Ushuaia +X-LIC-LOCATION:America/Argentina/Ushuaia +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:20081005T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-043312 +TZOFFSETTO:-041648 +TZNAME:CMT +DTSTART:18941031T000000 +RDATE:18941031T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041648 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19301201T000000 +RDATE:19301201T000000 +RDATE:19311015T000000 +RDATE:19321101T000000 +RDATE:19331101T000000 +RDATE:19341101T000000 +RDATE:19351101T000000 +RDATE:19361101T000000 +RDATE:19371101T000000 +RDATE:19381101T000000 +RDATE:19391101T000000 +RDATE:19400701T000000 +RDATE:19411015T000000 +RDATE:19431015T000000 +RDATE:19461001T000000 +RDATE:19631215T000000 +RDATE:19641015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19320301T000000 +RDATE:19330301T000000 +RDATE:19340301T000000 +RDATE:19350301T000000 +RDATE:19360301T000000 +RDATE:19370301T000000 +RDATE:19380301T000000 +RDATE:19390301T000000 +RDATE:19400301T000000 +RDATE:19410615T000000 +RDATE:19430801T000000 +RDATE:19460301T000000 +RDATE:19631001T000000 +RDATE:19640301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +RDATE:20040620T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +RDATE:19881201T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921018T000000 +RDATE:20071230T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19910303T000000 +RDATE:19920301T000000 +RDATE:19930307T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19991003T000000 +RDATE:19991003T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:20000303T000000 +RDATE:20000303T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:WART +DTSTART:20040530T000000 +RDATE:20040530T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Aruba.ics b/libkcal/libical/zoneinfo/America/Aruba.ics new file mode 100644 index 000000000..dd17d79ea --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Aruba.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Aruba +X-LIC-LOCATION:America/Aruba +BEGIN:STANDARD +TZOFFSETFROM:-044024 +TZOFFSETTO:-0430 +TZNAME:ANT +DTSTART:19120212T000000 +RDATE:19120212T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0430 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19650101T000000 +RDATE:19650101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Asuncion.ics b/libkcal/libical/zoneinfo/America/Asuncion.ics new file mode 100644 index 000000000..041f55322 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Asuncion.ics @@ -0,0 +1,121 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Asuncion +X-LIC-LOCATION:America/Asuncion +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:PYST +DTSTART:20041017T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:PYT +DTSTART:20050313T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-035040 +TZOFFSETTO:-035040 +TZNAME:AMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-035040 +TZOFFSETTO:-0400 +TZNAME:PYT +DTSTART:19311010T000000 +RDATE:19311010T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:PYT +DTSTART:19721001T000000 +RDATE:19721001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:PYT +DTSTART:19740401T000000 +RDATE:19740401T000000 +RDATE:19760301T000000 +RDATE:19770301T000000 +RDATE:19780301T000000 +RDATE:19790401T000000 +RDATE:19800401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850401T000000 +RDATE:19860401T000000 +RDATE:19870401T000000 +RDATE:19880401T000000 +RDATE:19890401T000000 +RDATE:19900401T000000 +RDATE:19910401T000000 +RDATE:19920301T000000 +RDATE:19930331T000000 +RDATE:19940227T000000 +RDATE:19950226T000000 +RDATE:19960301T000000 +RDATE:19970223T000000 +RDATE:19980301T000000 +RDATE:19990307T000000 +RDATE:20000305T000000 +RDATE:20010304T000000 +RDATE:20020407T000000 +RDATE:20030406T000000 +RDATE:20040404T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:PYT +DTSTART:19750301T000000 +RDATE:19750301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:PYST +DTSTART:19751001T000000 +RDATE:19751001T000000 +RDATE:19761001T000000 +RDATE:19771001T000000 +RDATE:19781001T000000 +RDATE:19791001T000000 +RDATE:19801001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19841001T000000 +RDATE:19851001T000000 +RDATE:19861001T000000 +RDATE:19871001T000000 +RDATE:19881001T000000 +RDATE:19891022T000000 +RDATE:19901001T000000 +RDATE:19911006T000000 +RDATE:19921005T000000 +RDATE:19931001T000000 +RDATE:19941001T000000 +RDATE:19951001T000000 +RDATE:19961006T000000 +RDATE:19971005T000000 +RDATE:19981004T000000 +RDATE:19991003T000000 +RDATE:20001001T000000 +RDATE:20011007T000000 +RDATE:20020901T000000 +RDATE:20030907T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Atikokan.ics b/libkcal/libical/zoneinfo/America/Atikokan.ics new file mode 100644 index 000000000..3bb60bd1c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Atikokan.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Atikokan +X-LIC-LOCATION:America/Atikokan +BEGIN:STANDARD +TZOFFSETFROM:-060628 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19400929T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181031T020000 +RDATE:19181031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19450930T020000 +RDATE:19450930T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Bahia.ics b/libkcal/libical/zoneinfo/America/Bahia.ics new file mode 100644 index 000000000..a95834080 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Bahia.ics @@ -0,0 +1,92 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Bahia +X-LIC-LOCATION:America/Bahia +BEGIN:STANDARD +TZOFFSETFROM:-023404 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921025T000000 +RDATE:19931017T000000 +RDATE:19941016T000000 +RDATE:19951015T000000 +RDATE:19961006T000000 +RDATE:19971006T000000 +RDATE:19981011T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +RDATE:20021103T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19910217T000000 +RDATE:19920209T000000 +RDATE:19930131T000000 +RDATE:19940220T000000 +RDATE:19950219T000000 +RDATE:19960211T000000 +RDATE:19970216T000000 +RDATE:19980301T000000 +RDATE:19990221T000000 +RDATE:20000227T000000 +RDATE:20010218T000000 +RDATE:20020217T000000 +RDATE:20030216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:20030924T000000 +RDATE:20030924T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Barbados.ics b/libkcal/libical/zoneinfo/America/Barbados.ics new file mode 100644 index 000000000..e28d7fa79 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Barbados.ics @@ -0,0 +1,42 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Barbados +X-LIC-LOCATION:America/Barbados +BEGIN:STANDARD +TZOFFSETFROM:-035828 +TZOFFSETTO:-035828 +TZNAME:BMT +DTSTART:19240101T000000 +RDATE:19240101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-035828 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19320101T000000 +RDATE:19320101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19770612T020000 +RDATE:19770612T020000 +RDATE:19780416T020000 +RDATE:19790415T020000 +RDATE:19800420T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19771002T020000 +RDATE:19771002T020000 +RDATE:19781001T020000 +RDATE:19790930T020000 +RDATE:19800925T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Belem.ics b/libkcal/libical/zoneinfo/America/Belem.ics new file mode 100644 index 000000000..5a4372240 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Belem.ics @@ -0,0 +1,62 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Belem +X-LIC-LOCATION:America/Belem +BEGIN:STANDARD +TZOFFSETFROM:-031356 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19880912T000000 +RDATE:19880912T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Belize.ics b/libkcal/libical/zoneinfo/America/Belize.ics new file mode 100644 index 000000000..b1b5fef8a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Belize.ics @@ -0,0 +1,93 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Belize +X-LIC-LOCATION:America/Belize +BEGIN:STANDARD +TZOFFSETFROM:-055248 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19120401T000000 +RDATE:19120401T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0530 +TZNAME:CHDT +DTSTART:19181006T000000 +RDATE:19181006T000000 +RDATE:19191005T000000 +RDATE:19201003T000000 +RDATE:19211002T000000 +RDATE:19221008T000000 +RDATE:19231007T000000 +RDATE:19241005T000000 +RDATE:19251004T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19301005T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19331008T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391008T000000 +RDATE:19401006T000000 +RDATE:19411005T000000 +RDATE:19421004T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0530 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19190209T000000 +RDATE:19190209T000000 +RDATE:19200215T000000 +RDATE:19210213T000000 +RDATE:19220212T000000 +RDATE:19230211T000000 +RDATE:19240210T000000 +RDATE:19250215T000000 +RDATE:19260214T000000 +RDATE:19270213T000000 +RDATE:19280212T000000 +RDATE:19290210T000000 +RDATE:19300209T000000 +RDATE:19310215T000000 +RDATE:19320214T000000 +RDATE:19330212T000000 +RDATE:19340211T000000 +RDATE:19350210T000000 +RDATE:19360209T000000 +RDATE:19370214T000000 +RDATE:19380213T000000 +RDATE:19390212T000000 +RDATE:19400211T000000 +RDATE:19410209T000000 +RDATE:19420215T000000 +RDATE:19430214T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19731205T000000 +RDATE:19731205T000000 +RDATE:19821218T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19740209T000000 +RDATE:19740209T000000 +RDATE:19830212T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Blanc-Sablon.ics b/libkcal/libical/zoneinfo/America/Blanc-Sablon.ics new file mode 100644 index 000000000..5d5304f0c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Blanc-Sablon.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Blanc-Sablon +X-LIC-LOCATION:America/Blanc-Sablon +BEGIN:STANDARD +TZOFFSETFROM:-034828 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19180414T020000 +RDATE:19180414T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19700101T000000 +RDATE:19700101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Boa_Vista.ics b/libkcal/libical/zoneinfo/America/Boa_Vista.ics new file mode 100644 index 000000000..155c5a56e --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Boa_Vista.ics @@ -0,0 +1,67 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Boa_Vista +X-LIC-LOCATION:America/Boa_Vista +BEGIN:STANDARD +TZOFFSETFROM:-040240 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:20000227T000000 +RDATE:20001015T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19880912T000000 +RDATE:19880912T000000 +RDATE:19990930T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Bogota.ics b/libkcal/libical/zoneinfo/America/Bogota.ics new file mode 100644 index 000000000..4ce5b4679 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Bogota.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Bogota +X-LIC-LOCATION:America/Bogota +BEGIN:STANDARD +TZOFFSETFROM:-045620 +TZOFFSETTO:-045620 +TZNAME:BMT +DTSTART:18840313T000000 +RDATE:18840313T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-045620 +TZOFFSETTO:-0500 +TZNAME:COT +DTSTART:19141123T000000 +RDATE:19141123T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:COST +DTSTART:19920503T000000 +RDATE:19920503T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:COT +DTSTART:19930404T000000 +RDATE:19930404T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Boise.ics b/libkcal/libical/zoneinfo/America/Boise.ics new file mode 100644 index 000000000..1572dfa0c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Boise.ics @@ -0,0 +1,166 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Boise +X-LIC-LOCATION:America/Boise +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-074449 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:18831118T121511 +RDATE:18831118T121511 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19230513T020000 +RDATE:19230513T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19670430T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740203T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19740101T000000 +RDATE:19740101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Cambridge_Bay.ics b/libkcal/libical/zoneinfo/America/Cambridge_Bay.ics new file mode 100644 index 000000000..63ac17252 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Cambridge_Bay.ics @@ -0,0 +1,155 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Cambridge_Bay +X-LIC-LOCATION:America/Cambridge_Bay +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0500 +TZNAME:MDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19991031T020000 +RDATE:19991031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20000402T020000 +RDATE:20000402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20001105T000000 +RDATE:20001105T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20010401T020000 +RDATE:20010401T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Campo_Grande.ics b/libkcal/libical/zoneinfo/America/Campo_Grande.ics new file mode 100644 index 000000000..cdc282261 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Campo_Grande.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Campo_Grande +X-LIC-LOCATION:America/Campo_Grande +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:20071014T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:20080217T000000 +RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-033828 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921025T000000 +RDATE:19931017T000000 +RDATE:19941016T000000 +RDATE:19951015T000000 +RDATE:19961006T000000 +RDATE:19971006T000000 +RDATE:19981011T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +RDATE:20021103T000000 +RDATE:20031019T000000 +RDATE:20041102T000000 +RDATE:20051016T000000 +RDATE:20061105T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19910217T000000 +RDATE:19920209T000000 +RDATE:19930131T000000 +RDATE:19940220T000000 +RDATE:19950219T000000 +RDATE:19960211T000000 +RDATE:19970216T000000 +RDATE:19980301T000000 +RDATE:19990221T000000 +RDATE:20000227T000000 +RDATE:20010218T000000 +RDATE:20020217T000000 +RDATE:20030216T000000 +RDATE:20040215T000000 +RDATE:20050220T000000 +RDATE:20060219T000000 +RDATE:20070225T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Cancun.ics b/libkcal/libical/zoneinfo/America/Cancun.ics new file mode 100644 index 000000000..841c7b316 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Cancun.ics @@ -0,0 +1,79 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Cancun +X-LIC-LOCATION:America/Cancun +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054704 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19220101T001256 +RDATE:19220101T001256 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19811223T000000 +RDATE:19811223T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19961027T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19980802T020000 +RDATE:19980802T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19981025T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19990404T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Caracas.ics b/libkcal/libical/zoneinfo/America/Caracas.ics new file mode 100644 index 000000000..0cb8bbd8c --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Caracas.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Caracas +X-LIC-LOCATION:America/Caracas +BEGIN:STANDARD +TZOFFSETFROM:-042744 +TZOFFSETTO:-042740 +TZNAME:CMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-042740 +TZOFFSETTO:-0430 +TZNAME:VET +DTSTART:19120212T000000 +RDATE:19120212T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0430 +TZOFFSETTO:-0400 +TZNAME:VET +DTSTART:19650101T000000 +RDATE:19650101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0430 +TZNAME:VET +DTSTART:20071209T030000 +RDATE:20071209T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Cayenne.ics b/libkcal/libical/zoneinfo/America/Cayenne.ics new file mode 100644 index 000000000..1f800ffbc --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Cayenne.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Cayenne +X-LIC-LOCATION:America/Cayenne +BEGIN:STANDARD +TZOFFSETFROM:-032920 +TZOFFSETTO:-0400 +TZNAME:GFT +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:GFT +DTSTART:19671001T000000 +RDATE:19671001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Cayman.ics b/libkcal/libical/zoneinfo/America/Cayman.ics new file mode 100644 index 000000000..8509d6749 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Cayman.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Cayman +X-LIC-LOCATION:America/Cayman +BEGIN:STANDARD +TZOFFSETFROM:-052532 +TZOFFSETTO:-050712 +TZNAME:KMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-050712 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19120201T000000 +RDATE:19120201T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Chicago.ics b/libkcal/libical/zoneinfo/America/Chicago.ics new file mode 100644 index 000000000..3de82b36e --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Chicago.ics @@ -0,0 +1,242 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Chicago +X-LIC-LOCATION:America/Chicago +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-055036 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T120924 +RDATE:18831118T120924 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19200613T020000 +RDATE:19210327T020000 +RDATE:19220430T020000 +RDATE:19230429T020000 +RDATE:19240427T020000 +RDATE:19250426T020000 +RDATE:19260425T020000 +RDATE:19270424T020000 +RDATE:19280429T020000 +RDATE:19290428T020000 +RDATE:19300427T020000 +RDATE:19310426T020000 +RDATE:19320424T020000 +RDATE:19330430T020000 +RDATE:19340429T020000 +RDATE:19350428T020000 +RDATE:19370425T020000 +RDATE:19380424T020000 +RDATE:19390430T020000 +RDATE:19400428T020000 +RDATE:19410427T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19201031T020000 +RDATE:19211030T020000 +RDATE:19220924T020000 +RDATE:19230930T020000 +RDATE:19240928T020000 +RDATE:19250927T020000 +RDATE:19260926T020000 +RDATE:19270925T020000 +RDATE:19280930T020000 +RDATE:19290929T020000 +RDATE:19300928T020000 +RDATE:19310927T020000 +RDATE:19320925T020000 +RDATE:19330924T020000 +RDATE:19340930T020000 +RDATE:19350929T020000 +RDATE:19361115T020000 +RDATE:19370926T020000 +RDATE:19380925T020000 +RDATE:19390924T020000 +RDATE:19400929T020000 +RDATE:19410928T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19551030T020000 +RDATE:19561028T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19670101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19360301T020000 +RDATE:19360301T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Chihuahua.ics b/libkcal/libical/zoneinfo/America/Chihuahua.ics new file mode 100644 index 000000000..97fbedcce --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Chihuahua.ics @@ -0,0 +1,90 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Chihuahua +X-LIC-LOCATION:America/Chihuahua +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-070420 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19211231T235540 +RDATE:19211231T235540 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19270610T230000 +RDATE:19270610T230000 +RDATE:19310501T230000 +RDATE:19320401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19301115T000000 +RDATE:19301115T000000 +RDATE:19311001T000000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19960101T000000 +RDATE:19960101T000000 +RDATE:19980101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19961027T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19980405T020000 +RDATE:19980405T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19990404T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Costa_Rica.ics b/libkcal/libical/zoneinfo/America/Costa_Rica.ics new file mode 100644 index 000000000..7c667f6ac --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Costa_Rica.ics @@ -0,0 +1,42 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Costa_Rica +X-LIC-LOCATION:America/Costa_Rica +BEGIN:STANDARD +TZOFFSETFROM:-053620 +TZOFFSETTO:-053620 +TZNAME:SJMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-053620 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19210115T000000 +RDATE:19210115T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19790225T000000 +RDATE:19790225T000000 +RDATE:19800224T000000 +RDATE:19910119T000000 +RDATE:19920118T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19790603T000000 +RDATE:19790603T000000 +RDATE:19800601T000000 +RDATE:19910701T000000 +RDATE:19920315T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Cuiaba.ics b/libkcal/libical/zoneinfo/America/Cuiaba.ics new file mode 100644 index 000000000..585839704 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Cuiaba.ics @@ -0,0 +1,113 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Cuiaba +X-LIC-LOCATION:America/Cuiaba +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:20071014T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:20080217T000000 +RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034420 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921025T000000 +RDATE:19931017T000000 +RDATE:19941016T000000 +RDATE:19951015T000000 +RDATE:19961006T000000 +RDATE:19971006T000000 +RDATE:19981011T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +RDATE:20021103T000000 +RDATE:20041102T000000 +RDATE:20051016T000000 +RDATE:20061105T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19910217T000000 +RDATE:19920209T000000 +RDATE:19930131T000000 +RDATE:19940220T000000 +RDATE:19950219T000000 +RDATE:19960211T000000 +RDATE:19970216T000000 +RDATE:19980301T000000 +RDATE:19990221T000000 +RDATE:20000227T000000 +RDATE:20010218T000000 +RDATE:20020217T000000 +RDATE:20030216T000000 +RDATE:20050220T000000 +RDATE:20060219T000000 +RDATE:20070225T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:20030924T000000 +RDATE:20030924T000000 +RDATE:20041001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Curacao.ics b/libkcal/libical/zoneinfo/America/Curacao.ics new file mode 100644 index 000000000..2bf9aa061 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Curacao.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Curacao +X-LIC-LOCATION:America/Curacao +BEGIN:STANDARD +TZOFFSETFROM:-043544 +TZOFFSETTO:-0430 +TZNAME:ANT +DTSTART:19120212T000000 +RDATE:19120212T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0430 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19650101T000000 +RDATE:19650101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Danmarkshavn.ics b/libkcal/libical/zoneinfo/America/Danmarkshavn.ics new file mode 100644 index 000000000..cf26fd4a5 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Danmarkshavn.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Danmarkshavn +X-LIC-LOCATION:America/Danmarkshavn +BEGIN:STANDARD +TZOFFSETFROM:-011440 +TZOFFSETTO:-0300 +TZNAME:WGT +DTSTART:19160728T000000 +RDATE:19160728T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:WGST +DTSTART:19800406T020000 +RDATE:19800406T020000 +RDATE:19810328T220000 +RDATE:19820327T220000 +RDATE:19830326T220000 +RDATE:19840324T220000 +RDATE:19850330T220000 +RDATE:19860329T220000 +RDATE:19870328T220000 +RDATE:19880326T220000 +RDATE:19890325T220000 +RDATE:19900324T220000 +RDATE:19910330T220000 +RDATE:19920328T220000 +RDATE:19930327T220000 +RDATE:19940326T220000 +RDATE:19950325T220000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:WGT +DTSTART:19800927T230000 +RDATE:19800927T230000 +RDATE:19810926T230000 +RDATE:19820925T230000 +RDATE:19830924T230000 +RDATE:19840929T230000 +RDATE:19850928T230000 +RDATE:19860927T230000 +RDATE:19870926T230000 +RDATE:19880924T230000 +RDATE:19890923T230000 +RDATE:19900929T230000 +RDATE:19910928T230000 +RDATE:19920926T230000 +RDATE:19930925T230000 +RDATE:19940924T230000 +RDATE:19950923T230000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Dawson.ics b/libkcal/libical/zoneinfo/America/Dawson.ics new file mode 100644 index 000000000..8ab18cd3a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Dawson.ics @@ -0,0 +1,153 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Dawson +X-LIC-LOCATION:America/Dawson +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-091740 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19000820T000000 +RDATE:19000820T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19190525T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191101T000000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:YPT +DTSTART:19450814T150000 +RDATE:19450814T150000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0700 +TZNAME:YDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +DTSTART:19731028T000000 +RDATE:19731028T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19801026T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Dawson_Creek.ics b/libkcal/libical/zoneinfo/America/Dawson_Creek.ics new file mode 100644 index 000000000..9b27cc19b --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Dawson_Creek.ics @@ -0,0 +1,109 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Dawson_Creek +X-LIC-LOCATION:America/Dawson_Creek +BEGIN:STANDARD +TZOFFSETFROM:-080056 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +RDATE:19610924T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:PPT +DTSTART:19450814T160000 +RDATE:19450814T160000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19470101T000000 +RDATE:19470101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19720830T020000 +RDATE:19720830T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Denver.ics b/libkcal/libical/zoneinfo/America/Denver.ics new file mode 100644 index 000000000..0dfeb68e1 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Denver.ics @@ -0,0 +1,158 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Denver +X-LIC-LOCATION:America/Denver +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-065956 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:18831118T120004 +RDATE:18831118T120004 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210327T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19201031T020000 +RDATE:19210522T020000 +RDATE:19450930T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19670101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Detroit.ics b/libkcal/libical/zoneinfo/America/Detroit.ics new file mode 100644 index 000000000..0930f31e8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Detroit.ics @@ -0,0 +1,145 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Detroit +X-LIC-LOCATION:America/Detroit +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-053211 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19050101T000000 +RDATE:19050101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19150515T020000 +RDATE:19150515T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19730101T000000 +RDATE:19750101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19480926T020000 +RDATE:19671029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19480425T020000 +RDATE:19480425T020000 +RDATE:19670614T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Dominica.ics b/libkcal/libical/zoneinfo/America/Dominica.ics new file mode 100644 index 000000000..bb08df292 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Dominica.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Dominica +X-LIC-LOCATION:America/Dominica +BEGIN:STANDARD +TZOFFSETFROM:-040536 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110701T000100 +RDATE:19110701T000100 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Edmonton.ics b/libkcal/libical/zoneinfo/America/Edmonton.ics new file mode 100644 index 000000000..5ed27cd40 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Edmonton.ics @@ -0,0 +1,151 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Edmonton +X-LIC-LOCATION:America/Edmonton +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-073352 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19060901T000000 +RDATE:19060901T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19190413T020000 +RDATE:19200425T020000 +RDATE:19210424T020000 +RDATE:19220430T020000 +RDATE:19230429T020000 +RDATE:19470427T020000 +RDATE:19670430T020000 +RDATE:19690427T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19190527T020000 +RDATE:19201031T020000 +RDATE:19210925T020000 +RDATE:19220924T020000 +RDATE:19230930T020000 +RDATE:19450930T020000 +RDATE:19470928T020000 +RDATE:19671029T020000 +RDATE:19691026T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19870101T000000 +RDATE:19870101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Eirunepe.ics b/libkcal/libical/zoneinfo/America/Eirunepe.ics new file mode 100644 index 000000000..6cdfe44bc --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Eirunepe.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Eirunepe +X-LIC-LOCATION:America/Eirunepe +BEGIN:STANDARD +TZOFFSETFROM:-043928 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:ACST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19931017T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19940220T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19880912T000000 +RDATE:19880912T000000 +RDATE:19930928T000000 +RDATE:19940922T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/El_Salvador.ics b/libkcal/libical/zoneinfo/America/El_Salvador.ics new file mode 100644 index 000000000..ed4127804 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/El_Salvador.ics @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/El_Salvador +X-LIC-LOCATION:America/El_Salvador +BEGIN:STANDARD +TZOFFSETFROM:-055648 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19210101T000000 +RDATE:19210101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19870503T000000 +RDATE:19870503T000000 +RDATE:19880501T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19870927T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Fortaleza.ics b/libkcal/libical/zoneinfo/America/Fortaleza.ics new file mode 100644 index 000000000..a72a627b0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Fortaleza.ics @@ -0,0 +1,75 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Fortaleza +X-LIC-LOCATION:America/Fortaleza +BEGIN:STANDARD +TZOFFSETFROM:-0234 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:20000227T000000 +RDATE:20001022T000000 +RDATE:20020217T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19900917T000000 +RDATE:19900917T000000 +RDATE:19990930T000000 +RDATE:20010913T000000 +RDATE:20021001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Glace_Bay.ics b/libkcal/libical/zoneinfo/America/Glace_Bay.ics new file mode 100644 index 000000000..5c025d90d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Glace_Bay.ics @@ -0,0 +1,140 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Glace_Bay +X-LIC-LOCATION:America/Glace_Bay +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-035948 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19020615T000000 +RDATE:19020615T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19530426T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19530927T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19530101T000000 +RDATE:19530101T000000 +RDATE:19540101T000000 +RDATE:19720101T000000 +RDATE:19740101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Godthab.ics b/libkcal/libical/zoneinfo/America/Godthab.ics new file mode 100644 index 000000000..9e562d22a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Godthab.ics @@ -0,0 +1,58 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Godthab +X-LIC-LOCATION:America/Godthab +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:WGST +DTSTART:19810328T220000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:WGT +DTSTART:19961026T230000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-032656 +TZOFFSETTO:-0300 +TZNAME:WGT +DTSTART:19160728T000000 +RDATE:19160728T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:WGST +DTSTART:19800406T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:WGT +DTSTART:19800927T230000 +RDATE:19800927T230000 +RDATE:19810926T230000 +RDATE:19820925T230000 +RDATE:19830924T230000 +RDATE:19840929T230000 +RDATE:19850928T230000 +RDATE:19860927T230000 +RDATE:19870926T230000 +RDATE:19880924T230000 +RDATE:19890923T230000 +RDATE:19900929T230000 +RDATE:19910928T230000 +RDATE:19920926T230000 +RDATE:19930925T230000 +RDATE:19940924T230000 +RDATE:19950923T230000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Goose_Bay.ics b/libkcal/libical/zoneinfo/America/Goose_Bay.ics new file mode 100644 index 000000000..fde693a25 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Goose_Bay.ics @@ -0,0 +1,258 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Goose_Bay +X-LIC-LOCATION:America/Goose_Bay +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T000100 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T000100 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-040140 +TZOFFSETTO:-033052 +TZNAME:NST +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-033052 +TZOFFSETTO:-033052 +TZNAME:NST +DTSTART:19180101T000000 +RDATE:19180101T000000 +RDATE:19190101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-033052 +TZOFFSETTO:-023052 +TZNAME:NDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-023052 +TZOFFSETTO:-033052 +TZNAME:NST +DTSTART:19181031T020000 +RDATE:19181031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-033052 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19350330T000000 +RDATE:19350330T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0330 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19360101T000000 +RDATE:19360101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0230 +TZNAME:NDT +DTSTART:19360511T000000 +RDATE:19360511T000000 +RDATE:19370510T000000 +RDATE:19380509T000000 +RDATE:19390515T000000 +RDATE:19400513T000000 +RDATE:19410512T000000 +RDATE:19460512T020000 +RDATE:19470511T020000 +RDATE:19480509T020000 +RDATE:19490508T020000 +RDATE:19500514T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0230 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19361005T000000 +RDATE:19361005T000000 +RDATE:19371004T000000 +RDATE:19381003T000000 +RDATE:19391002T000000 +RDATE:19401007T000000 +RDATE:19411006T000000 +RDATE:19450930T020000 +RDATE:19461006T020000 +RDATE:19471005T020000 +RDATE:19481003T020000 +RDATE:19491002T020000 +RDATE:19501008T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0230 +TZNAME:NWT +DTSTART:19420511T000000 +RDATE:19420511T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0230 +TZOFFSETTO:-0230 +TZNAME:NPT +DTSTART:19450814T203000 +RDATE:19450814T203000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0330 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19660315T020000 +RDATE:19660315T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19660424T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T000100 +RDATE:19890402T000100 +RDATE:19900401T000100 +RDATE:19910407T000100 +RDATE:19920405T000100 +RDATE:19930404T000100 +RDATE:19940403T000100 +RDATE:19950402T000100 +RDATE:19960407T000100 +RDATE:19970406T000100 +RDATE:19980405T000100 +RDATE:19990404T000100 +RDATE:20000402T000100 +RDATE:20010401T000100 +RDATE:20020407T000100 +RDATE:20030406T000100 +RDATE:20040404T000100 +RDATE:20050403T000100 +RDATE:20060402T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19661030T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T000100 +RDATE:19891029T000100 +RDATE:19901028T000100 +RDATE:19911027T000100 +RDATE:19921025T000100 +RDATE:19931031T000100 +RDATE:19941030T000100 +RDATE:19951029T000100 +RDATE:19961027T000100 +RDATE:19971026T000100 +RDATE:19981025T000100 +RDATE:19991031T000100 +RDATE:20001029T000100 +RDATE:20011028T000100 +RDATE:20021027T000100 +RDATE:20031026T000100 +RDATE:20041031T000100 +RDATE:20051030T000100 +RDATE:20061029T000100 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ADDT +DTSTART:19880403T000100 +RDATE:19880403T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19881030T000100 +RDATE:19881030T000100 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Grand_Turk.ics b/libkcal/libical/zoneinfo/America/Grand_Turk.ics new file mode 100644 index 000000000..d36e4eaf0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Grand_Turk.ics @@ -0,0 +1,104 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Grand_Turk +X-LIC-LOCATION:America/Grand_Turk +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-044432 +TZOFFSETTO:-050712 +TZNAME:KMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-050712 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19120201T000000 +RDATE:19120201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19790429T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19791028T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Grenada.ics b/libkcal/libical/zoneinfo/America/Grenada.ics new file mode 100644 index 000000000..da3fefccd --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Grenada.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Grenada +X-LIC-LOCATION:America/Grenada +BEGIN:STANDARD +TZOFFSETFROM:-0407 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Guadeloupe.ics b/libkcal/libical/zoneinfo/America/Guadeloupe.ics new file mode 100644 index 000000000..a5dc937f0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Guadeloupe.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Guadeloupe +X-LIC-LOCATION:America/Guadeloupe +BEGIN:STANDARD +TZOFFSETFROM:-040608 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110608T000000 +RDATE:19110608T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Guatemala.ics b/libkcal/libical/zoneinfo/America/Guatemala.ics new file mode 100644 index 000000000..2357724b2 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Guatemala.ics @@ -0,0 +1,35 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Guatemala +X-LIC-LOCATION:America/Guatemala +BEGIN:STANDARD +TZOFFSETFROM:-060204 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181005T000000 +RDATE:19181005T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19731125T000000 +RDATE:19731125T000000 +RDATE:19830521T000000 +RDATE:19910323T000000 +RDATE:20060430T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19740224T000000 +RDATE:19740224T000000 +RDATE:19830922T000000 +RDATE:19910907T000000 +RDATE:20061001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Guayaquil.ics b/libkcal/libical/zoneinfo/America/Guayaquil.ics new file mode 100644 index 000000000..621b18f6d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Guayaquil.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Guayaquil +X-LIC-LOCATION:America/Guayaquil +BEGIN:STANDARD +TZOFFSETFROM:-051920 +TZOFFSETTO:-0514 +TZNAME:QMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0514 +TZOFFSETTO:-0500 +TZNAME:ECT +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Guyana.ics b/libkcal/libical/zoneinfo/America/Guyana.ics new file mode 100644 index 000000000..4177e4075 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Guyana.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Guyana +X-LIC-LOCATION:America/Guyana +BEGIN:STANDARD +TZOFFSETFROM:-035240 +TZOFFSETTO:-0345 +TZNAME:GBGT +DTSTART:19150301T000000 +RDATE:19150301T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0345 +TZOFFSETTO:-0345 +TZNAME:GYT +DTSTART:19660526T000000 +RDATE:19660526T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0345 +TZOFFSETTO:-0300 +TZNAME:GYT +DTSTART:19750731T000000 +RDATE:19750731T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:GYT +DTSTART:19910101T000000 +RDATE:19910101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Halifax.ics b/libkcal/libical/zoneinfo/America/Halifax.ics new file mode 100644 index 000000000..cff8c41f5 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Halifax.ics @@ -0,0 +1,228 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Halifax +X-LIC-LOCATION:America/Halifax +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041424 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19020615T000000 +RDATE:19020615T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19160401T000000 +RDATE:19160401T000000 +RDATE:19180414T020000 +RDATE:19200509T000000 +RDATE:19210506T000000 +RDATE:19220430T000000 +RDATE:19230506T000000 +RDATE:19240504T000000 +RDATE:19250503T000000 +RDATE:19260516T000000 +RDATE:19270501T000000 +RDATE:19280513T000000 +RDATE:19290512T000000 +RDATE:19300511T000000 +RDATE:19310510T000000 +RDATE:19320501T000000 +RDATE:19330430T000000 +RDATE:19340520T000000 +RDATE:19350602T000000 +RDATE:19360601T000000 +RDATE:19370502T000000 +RDATE:19380501T000000 +RDATE:19390528T000000 +RDATE:19400505T000000 +RDATE:19410504T000000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19161001T000000 +RDATE:19161001T000000 +RDATE:19181031T020000 +RDATE:19200829T000000 +RDATE:19210905T000000 +RDATE:19220905T000000 +RDATE:19230904T000000 +RDATE:19240915T000000 +RDATE:19250928T000000 +RDATE:19260913T000000 +RDATE:19270926T000000 +RDATE:19280909T000000 +RDATE:19290903T000000 +RDATE:19300915T000000 +RDATE:19310928T000000 +RDATE:19320926T000000 +RDATE:19331002T000000 +RDATE:19340916T000000 +RDATE:19350930T000000 +RDATE:19360914T000000 +RDATE:19370927T000000 +RDATE:19380926T000000 +RDATE:19390925T000000 +RDATE:19400930T000000 +RDATE:19410929T000000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19180101T000000 +RDATE:19180101T000000 +RDATE:19190101T000000 +RDATE:19460101T000000 +RDATE:19740101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Havana.ics b/libkcal/libical/zoneinfo/America/Havana.ics new file mode 100644 index 000000000..f75460b5d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Havana.ics @@ -0,0 +1,148 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Havana +X-LIC-LOCATION:America/Havana +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:CST +DTSTART:20061029T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:CDT +DTSTART:20080316T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-052928 +TZOFFSETTO:-052936 +TZNAME:HMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-052936 +TZOFFSETTO:-0500 +TZNAME:CST +DTSTART:19250719T120000 +RDATE:19250719T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:CDT +DTSTART:19280610T000000 +RDATE:19280610T000000 +RDATE:19400602T000000 +RDATE:19410601T000000 +RDATE:19420607T000000 +RDATE:19450603T000000 +RDATE:19460602T000000 +RDATE:19650601T000000 +RDATE:19660529T000000 +RDATE:19670408T000000 +RDATE:19680414T000000 +RDATE:19690427T000000 +RDATE:19700426T000000 +RDATE:19710425T000000 +RDATE:19720430T000000 +RDATE:19730429T000000 +RDATE:19740428T000000 +RDATE:19750427T000000 +RDATE:19760425T000000 +RDATE:19770424T000000 +RDATE:19780507T000000 +RDATE:19790318T000000 +RDATE:19800316T000000 +RDATE:19810510T000000 +RDATE:19820509T000000 +RDATE:19830508T000000 +RDATE:19840506T000000 +RDATE:19850505T000000 +RDATE:19860316T000000 +RDATE:19870315T000000 +RDATE:19880320T000000 +RDATE:19890319T000000 +RDATE:19900401T000000 +RDATE:19910407T000000 +RDATE:19920405T000000 +RDATE:19930404T000000 +RDATE:19940403T000000 +RDATE:19950402T000000 +RDATE:19960407T000000 +RDATE:19970406T000000 +RDATE:19980329T000000 +RDATE:19990328T000000 +RDATE:20000402T000000 +RDATE:20010401T000000 +RDATE:20020407T000000 +RDATE:20030406T000000 +RDATE:20040404T000000 +RDATE:20070311T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:CST +DTSTART:19281010T000000 +RDATE:19281010T000000 +RDATE:19400901T000000 +RDATE:19410907T000000 +RDATE:19420906T000000 +RDATE:19450902T000000 +RDATE:19460901T000000 +RDATE:19650930T000000 +RDATE:19661002T000000 +RDATE:19670910T000000 +RDATE:19680908T000000 +RDATE:19691026T000000 +RDATE:19701025T000000 +RDATE:19711031T000000 +RDATE:19721008T000000 +RDATE:19731008T000000 +RDATE:19741008T000000 +RDATE:19751026T000000 +RDATE:19761031T000000 +RDATE:19771030T000000 +RDATE:19781008T000000 +RDATE:19791014T000000 +RDATE:19801012T000000 +RDATE:19811011T000000 +RDATE:19821010T000000 +RDATE:19831009T000000 +RDATE:19841014T000000 +RDATE:19851013T000000 +RDATE:19861012T000000 +RDATE:19871011T000000 +RDATE:19881009T000000 +RDATE:19891008T000000 +RDATE:19901014T000000 +RDATE:19911013T010000 +RDATE:19921011T010000 +RDATE:19931010T010000 +RDATE:19941009T010000 +RDATE:19951008T010000 +RDATE:19961006T010000 +RDATE:19971012T010000 +RDATE:19981025T010000 +RDATE:19991031T010000 +RDATE:20001029T010000 +RDATE:20011028T010000 +RDATE:20021027T010000 +RDATE:20031026T010000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:CDT +DTSTART:20050403T010000 +RDATE:20050403T010000 +RDATE:20060402T010000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Hermosillo.ics b/libkcal/libical/zoneinfo/America/Hermosillo.ics new file mode 100644 index 000000000..ca07efe85 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Hermosillo.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Hermosillo +X-LIC-LOCATION:America/Hermosillo +BEGIN:STANDARD +TZOFFSETFROM:-072352 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19211231T233608 +RDATE:19211231T233608 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19270610T230000 +RDATE:19270610T230000 +RDATE:19310501T230000 +RDATE:19320401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19301115T000000 +RDATE:19301115T000000 +RDATE:19311001T000000 +RDATE:19420424T000000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19490114T000000 +RDATE:19490114T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19700101T000000 +RDATE:19700101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19990101T000000 +RDATE:19990101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Indianapolis.ics b/libkcal/libical/zoneinfo/America/Indiana/Indianapolis.ics new file mode 100644 index 000000000..5df8b8983 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Indianapolis.ics @@ -0,0 +1,125 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Indianapolis +X-LIC-LOCATION:America/Indiana/Indianapolis +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054438 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121522 +RDATE:18831118T121522 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19410622T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19410928T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19570929T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19550424T020000 +RDATE:19550424T020000 +RDATE:19580427T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19710101T000000 +RDATE:20060101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Knox.ics b/libkcal/libical/zoneinfo/America/Indiana/Knox.ics new file mode 100644 index 000000000..91b9e238d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Knox.ics @@ -0,0 +1,169 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Knox +X-LIC-LOCATION:America/Indiana/Knox +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054630 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121330 +RDATE:18831118T121330 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19551030T020000 +RDATE:19561028T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19631027T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19470101T000000 +RDATE:19470101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19620429T020000 +RDATE:19620429T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19911027T020000 +RDATE:19911027T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20060402T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Marengo.ics b/libkcal/libical/zoneinfo/America/Indiana/Marengo.ics new file mode 100644 index 000000000..11e41f7fa --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Marengo.ics @@ -0,0 +1,133 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Marengo +X-LIC-LOCATION:America/Indiana/Marengo +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054523 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121437 +RDATE:18831118T121437 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19510429T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19510930T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19510101T000000 +RDATE:19510101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19610430T020000 +RDATE:19610430T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19741027T020000 +RDATE:19760101T000000 +RDATE:20060101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19750223T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19751026T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19740106T020000 +RDATE:19740106T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Petersburg.ics b/libkcal/libical/zoneinfo/America/Indiana/Petersburg.ics new file mode 100644 index 000000000..8427c1aaf --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Petersburg.ics @@ -0,0 +1,133 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Petersburg +X-LIC-LOCATION:America/Indiana/Petersburg +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20080309T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20081102T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054907 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121053 +RDATE:18831118T121053 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19550501T000000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:20070311T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19550101T000000 +RDATE:19550101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19650425T020000 +RDATE:19650425T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19771030T020000 +RDATE:19771030T020000 +RDATE:20071104T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20060402T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Tell_City.ics b/libkcal/libical/zoneinfo/America/Indiana/Tell_City.ics new file mode 100644 index 000000000..3c431cd7f --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Tell_City.ics @@ -0,0 +1,130 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Tell_City +X-LIC-LOCATION:America/Indiana/Tell_City +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054703 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121257 +RDATE:18831118T121257 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19460428T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550501T000000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19601030T020000 +RDATE:19610924T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19640426T020000 +RDATE:19640426T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19710101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20060402T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Vevay.ics b/libkcal/libical/zoneinfo/America/Indiana/Vevay.ics new file mode 100644 index 000000000..40cd5e63a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Vevay.ics @@ -0,0 +1,98 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Vevay +X-LIC-LOCATION:America/Indiana/Vevay +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054016 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121944 +RDATE:18831118T121944 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19540425T020000 +RDATE:19540425T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19730101T000000 +RDATE:20060101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Vincennes.ics b/libkcal/libical/zoneinfo/America/Indiana/Vincennes.ics new file mode 100644 index 000000000..3cdf3805e --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Vincennes.ics @@ -0,0 +1,132 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Vincennes +X-LIC-LOCATION:America/Indiana/Vincennes +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20080309T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20081102T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-055007 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T120953 +RDATE:18831118T120953 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19460428T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550501T000000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:20070311T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19601030T020000 +RDATE:19610924T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19640426T020000 +RDATE:19640426T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19710101T000000 +RDATE:20071104T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20060402T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Indiana/Winamac.ics b/libkcal/libical/zoneinfo/America/Indiana/Winamac.ics new file mode 100644 index 000000000..935f45301 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Indiana/Winamac.ics @@ -0,0 +1,143 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Indiana/Winamac +X-LIC-LOCATION:America/Indiana/Winamac +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20080309T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-054625 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121335 +RDATE:18831118T121335 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19551030T020000 +RDATE:19561028T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19610430T020000 +RDATE:19610430T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690101T000000 +RDATE:19690101T000000 +RDATE:19710101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20060402T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RDATE:20070311T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Inuvik.ics b/libkcal/libical/zoneinfo/America/Inuvik.ics new file mode 100644 index 000000000..bbbb49e00 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Inuvik.ics @@ -0,0 +1,122 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Inuvik +X-LIC-LOCATION:America/Inuvik +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19530101T000000 +RDATE:19530101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0600 +TZNAME:PDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +DTSTART:19790429T020000 +RDATE:19790429T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19801026T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Iqaluit.ics b/libkcal/libical/zoneinfo/America/Iqaluit.ics new file mode 100644 index 000000000..a6d927ca2 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Iqaluit.ics @@ -0,0 +1,135 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Iqaluit +X-LIC-LOCATION:America/Iqaluit +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420801T000000 +RDATE:19420801T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0300 +TZNAME:EDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19991031T020000 +RDATE:19991031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20000402T020000 +RDATE:20000402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Jamaica.ics b/libkcal/libical/zoneinfo/America/Jamaica.ics new file mode 100644 index 000000000..d70aa9aef --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Jamaica.ics @@ -0,0 +1,61 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Jamaica +X-LIC-LOCATION:America/Jamaica +BEGIN:STANDARD +TZOFFSETFROM:-050712 +TZOFFSETTO:-050712 +TZNAME:KMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-050712 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19120201T000000 +RDATE:19120201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19740428T020000 +RDATE:19740428T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19741027T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19840101T000000 +RDATE:19840101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Juneau.ics b/libkcal/libical/zoneinfo/America/Juneau.ics new file mode 100644 index 000000000..3b98b2292 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Juneau.ics @@ -0,0 +1,173 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Juneau +X-LIC-LOCATION:America/Juneau +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+150219 +TZOFFSETTO:-085741 +TZNAME:LMT +DTSTART:18671018T000000 +RDATE:18671018T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-085741 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19000820T120000 +RDATE:19000820T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19690101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:PPT +DTSTART:19450814T160000 +RDATE:19450814T160000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19831030T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:19840429T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19841028T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Kentucky/Louisville.ics b/libkcal/libical/zoneinfo/America/Kentucky/Louisville.ics new file mode 100644 index 000000000..14e07ac2a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Kentucky/Louisville.ics @@ -0,0 +1,205 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Kentucky/Louisville +X-LIC-LOCATION:America/Kentucky/Louisville +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054302 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T121658 +RDATE:18831118T121658 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19210501T020000 +RDATE:19410427T020000 +RDATE:19460101T000000 +RDATE:19470427T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19210901T020000 +RDATE:19410928T020000 +RDATE:19450930T020000 +RDATE:19460602T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19561028T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19210101T000000 +RDATE:19210101T000000 +RDATE:19420101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19460428T020000 +RDATE:19460428T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19740106T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19610723T020000 +RDATE:19610723T020000 +RDATE:19680101T000000 +RDATE:19741027T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19680428T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19681027T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Kentucky/Monticello.ics b/libkcal/libical/zoneinfo/America/Kentucky/Monticello.ics new file mode 100644 index 000000000..99f05c826 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Kentucky/Monticello.ics @@ -0,0 +1,164 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Kentucky/Monticello +X-LIC-LOCATION:America/Kentucky/Monticello +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-053924 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18831118T122036 +RDATE:18831118T122036 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19460101T000000 +RDATE:19460101T000000 +RDATE:19680101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20010401T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20011028T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/La_Paz.ics b/libkcal/libical/zoneinfo/America/La_Paz.ics new file mode 100644 index 000000000..10a922136 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/La_Paz.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/La_Paz +X-LIC-LOCATION:America/La_Paz +BEGIN:STANDARD +TZOFFSETFROM:-043236 +TZOFFSETTO:-043236 +TZNAME:CMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-043236 +TZOFFSETTO:-033236 +TZNAME:BOST +DTSTART:19311015T000000 +RDATE:19311015T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-033236 +TZOFFSETTO:-0400 +TZNAME:BOT +DTSTART:19320321T000000 +RDATE:19320321T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Lima.ics b/libkcal/libical/zoneinfo/America/Lima.ics new file mode 100644 index 000000000..ce63f4f44 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Lima.ics @@ -0,0 +1,48 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Lima +X-LIC-LOCATION:America/Lima +BEGIN:STANDARD +TZOFFSETFROM:-050812 +TZOFFSETTO:-050836 +TZNAME:LMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-050836 +TZOFFSETTO:-0500 +TZNAME:PET +DTSTART:19080728T000000 +RDATE:19080728T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:PEST +DTSTART:19380101T000000 +RDATE:19380101T000000 +RDATE:19380925T000000 +RDATE:19390924T000000 +RDATE:19860101T000000 +RDATE:19870101T000000 +RDATE:19900101T000000 +RDATE:19940101T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:PET +DTSTART:19380401T000000 +RDATE:19380401T000000 +RDATE:19390326T000000 +RDATE:19400324T000000 +RDATE:19860401T000000 +RDATE:19870401T000000 +RDATE:19900401T000000 +RDATE:19940401T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Los_Angeles.ics b/libkcal/libical/zoneinfo/America/Los_Angeles.ics new file mode 100644 index 000000000..15f048fd8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Los_Angeles.ics @@ -0,0 +1,184 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Los_Angeles +X-LIC-LOCATION:America/Los_Angeles +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-075258 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:18831118T120702 +RDATE:18831118T120702 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19480314T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19490101T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +RDATE:19610924T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:PPT +DTSTART:19450814T160000 +RDATE:19450814T160000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19460101T000000 +RDATE:19460101T000000 +RDATE:19670101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Maceio.ics b/libkcal/libical/zoneinfo/America/Maceio.ics new file mode 100644 index 000000000..f03e5d4c1 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Maceio.ics @@ -0,0 +1,79 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Maceio +X-LIC-LOCATION:America/Maceio +BEGIN:STANDARD +TZOFFSETFROM:-022252 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19951015T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19960211T000000 +RDATE:20000227T000000 +RDATE:20001022T000000 +RDATE:20020217T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19900917T000000 +RDATE:19900917T000000 +RDATE:19951013T000000 +RDATE:19960904T000000 +RDATE:19990930T000000 +RDATE:20010913T000000 +RDATE:20021001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Managua.ics b/libkcal/libical/zoneinfo/America/Managua.ics new file mode 100644 index 000000000..7645bb9c8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Managua.ics @@ -0,0 +1,54 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Managua +X-LIC-LOCATION:America/Managua +BEGIN:STANDARD +TZOFFSETFROM:-054508 +TZOFFSETTO:-054512 +TZNAME:MMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-054512 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19340623T000000 +RDATE:19340623T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19730501T000000 +RDATE:19730501T000000 +RDATE:19920101T040000 +RDATE:19930101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19750216T000000 +RDATE:19750216T000000 +RDATE:19790625T000000 +RDATE:19800623T000000 +RDATE:19920924T000000 +RDATE:19970101T000000 +RDATE:20051002T000000 +RDATE:20061001T010000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19790318T000000 +RDATE:19790318T000000 +RDATE:19800316T000000 +RDATE:20050410T000000 +RDATE:20060430T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Manaus.ics b/libkcal/libical/zoneinfo/America/Manaus.ics new file mode 100644 index 000000000..08bc95326 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Manaus.ics @@ -0,0 +1,66 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Manaus +X-LIC-LOCATION:America/Manaus +BEGIN:STANDARD +TZOFFSETFROM:-040004 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19931017T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19940220T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19880912T000000 +RDATE:19880912T000000 +RDATE:19930928T000000 +RDATE:19940922T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Marigot.ics b/libkcal/libical/zoneinfo/America/Marigot.ics new file mode 100644 index 000000000..8fa755a59 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Marigot.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Marigot +X-LIC-LOCATION:America/Marigot +BEGIN:STANDARD +TZOFFSETFROM:-040608 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110608T000000 +RDATE:19110608T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Martinique.ics b/libkcal/libical/zoneinfo/America/Martinique.ics new file mode 100644 index 000000000..d5abdcd19 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Martinique.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Martinique +X-LIC-LOCATION:America/Martinique +BEGIN:STANDARD +TZOFFSETFROM:-040420 +TZOFFSETTO:-040420 +TZNAME:FFMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-040420 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110501T000000 +RDATE:19110501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19800406T000000 +RDATE:19800406T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19800928T000000 +RDATE:19800928T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Mazatlan.ics b/libkcal/libical/zoneinfo/America/Mazatlan.ics new file mode 100644 index 000000000..fcd4c1a13 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Mazatlan.ics @@ -0,0 +1,79 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Mazatlan +X-LIC-LOCATION:America/Mazatlan +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-070540 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19211231T235420 +RDATE:19211231T235420 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19270610T230000 +RDATE:19270610T230000 +RDATE:19310501T230000 +RDATE:19320401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19301115T000000 +RDATE:19301115T000000 +RDATE:19311001T000000 +RDATE:19420424T000000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19490114T000000 +RDATE:19490114T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19700101T000000 +RDATE:19700101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Menominee.ics b/libkcal/libical/zoneinfo/America/Menominee.ics new file mode 100644 index 000000000..1b02d706b --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Menominee.ics @@ -0,0 +1,152 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Menominee +X-LIC-LOCATION:America/Menominee +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-055027 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18850918T120000 +RDATE:18850918T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19460428T020000 +RDATE:19660424T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19661030T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19690427T020000 +RDATE:19690427T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19730429T020000 +RDATE:19730429T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Merida.ics b/libkcal/libical/zoneinfo/America/Merida.ics new file mode 100644 index 000000000..97db7d993 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Merida.ics @@ -0,0 +1,61 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Merida +X-LIC-LOCATION:America/Merida +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-055828 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19220101T000132 +RDATE:19220101T000132 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19811223T000000 +RDATE:19811223T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19821202T000000 +RDATE:19821202T000000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Mexico_City.ics b/libkcal/libical/zoneinfo/America/Mexico_City.ics new file mode 100644 index 000000000..a825c018d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Mexico_City.ics @@ -0,0 +1,91 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Mexico_City +X-LIC-LOCATION:America/Mexico_City +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-063636 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19220101T002324 +RDATE:19220101T002324 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19270610T230000 +RDATE:19270610T230000 +RDATE:19310501T230000 +RDATE:19320401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19301115T000000 +RDATE:19301115T000000 +RDATE:19311001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19390205T000000 +RDATE:19390205T000000 +RDATE:19401209T000000 +RDATE:19500212T000000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19390625T000000 +RDATE:19390625T000000 +RDATE:19410401T000000 +RDATE:19440501T000000 +RDATE:19500730T000000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19431216T000000 +RDATE:19431216T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20020220T000000 +RDATE:20020220T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Miquelon.ics b/libkcal/libical/zoneinfo/America/Miquelon.ics new file mode 100644 index 000000000..131e26188 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Miquelon.ics @@ -0,0 +1,95 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Miquelon +X-LIC-LOCATION:America/Miquelon +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:PMDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:PMST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034440 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110515T000000 +RDATE:19110515T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:PMST +DTSTART:19800501T000000 +RDATE:19800501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:PMST +DTSTART:19870101T000000 +RDATE:19870101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:PMDT +DTSTART:19870405T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:PMST +DTSTART:19871025T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Moncton.ics b/libkcal/libical/zoneinfo/America/Moncton.ics new file mode 100644 index 000000000..a6cc7786a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Moncton.ics @@ -0,0 +1,215 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Moncton +X-LIC-LOCATION:America/Moncton +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041908 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:18831209T000000 +RDATE:18831209T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19020615T000000 +RDATE:19020615T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19330611T010000 +RDATE:19340610T010000 +RDATE:19350609T010000 +RDATE:19360607T010000 +RDATE:19370606T010000 +RDATE:19380605T010000 +RDATE:19390527T010000 +RDATE:19400519T010000 +RDATE:19410504T010000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T000100 +RDATE:19940403T000100 +RDATE:19950402T000100 +RDATE:19960407T000100 +RDATE:19970406T000100 +RDATE:19980405T000100 +RDATE:19990404T000100 +RDATE:20000402T000100 +RDATE:20010401T000100 +RDATE:20020407T000100 +RDATE:20030406T000100 +RDATE:20040404T000100 +RDATE:20050403T000100 +RDATE:20060402T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19330910T010000 +RDATE:19340909T010000 +RDATE:19350908T010000 +RDATE:19360906T010000 +RDATE:19370905T010000 +RDATE:19380904T010000 +RDATE:19390923T010000 +RDATE:19400921T010000 +RDATE:19410927T010000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T000100 +RDATE:19941030T000100 +RDATE:19951029T000100 +RDATE:19961027T000100 +RDATE:19971026T000100 +RDATE:19981025T000100 +RDATE:19991031T000100 +RDATE:20001029T000100 +RDATE:20011028T000100 +RDATE:20021027T000100 +RDATE:20031026T000100 +RDATE:20041031T000100 +RDATE:20051030T000100 +RDATE:20061029T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19330101T000000 +RDATE:19330101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19730101T000000 +RDATE:19930101T000000 +RDATE:20070101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Monterrey.ics b/libkcal/libical/zoneinfo/America/Monterrey.ics new file mode 100644 index 000000000..d7a76004e --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Monterrey.ics @@ -0,0 +1,63 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Monterrey +X-LIC-LOCATION:America/Monterrey +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20020407T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20021027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-064116 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19211231T231844 +RDATE:19211231T231844 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19880101T000000 +RDATE:19880101T000000 +RDATE:19890101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19880403T020000 +RDATE:19880403T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010506T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19881030T020000 +RDATE:19881030T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20010930T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Montevideo.ics b/libkcal/libical/zoneinfo/America/Montevideo.ics new file mode 100644 index 000000000..be87059b6 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Montevideo.ics @@ -0,0 +1,151 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Montevideo +X-LIC-LOCATION:America/Montevideo +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:UYST +DTSTART:20061001T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:UYT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034444 +TZOFFSETTO:-034444 +TZNAME:MMT +DTSTART:18980628T000000 +RDATE:18980628T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034444 +TZOFFSETTO:-0330 +TZNAME:UYT +DTSTART:19200501T000000 +RDATE:19200501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0300 +TZNAME:UYHST +DTSTART:19231002T000000 +RDATE:19231002T000000 +RDATE:19241001T000000 +RDATE:19251001T000000 +RDATE:19331029T000000 +RDATE:19341028T000000 +RDATE:19351027T000000 +RDATE:19361101T000000 +RDATE:19371031T000000 +RDATE:19381030T000000 +RDATE:19391029T000000 +RDATE:19401027T000000 +RDATE:19410801T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0330 +TZNAME:UYT +DTSTART:19240401T000000 +RDATE:19240401T000000 +RDATE:19250401T000000 +RDATE:19260401T000000 +RDATE:19340401T000000 +RDATE:19350331T000000 +RDATE:19360329T000000 +RDATE:19370328T000000 +RDATE:19380327T000000 +RDATE:19390326T000000 +RDATE:19400331T000000 +RDATE:19410330T000000 +RDATE:19420101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0200 +TZNAME:UYST +DTSTART:19421214T000000 +RDATE:19421214T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:UYT +DTSTART:19430314T000000 +RDATE:19430314T000000 +RDATE:19591115T000000 +RDATE:19600306T000000 +RDATE:19650926T000000 +RDATE:19661031T000000 +RDATE:19671031T000000 +RDATE:19720815T000000 +RDATE:19761001T000000 +RDATE:19780401T000000 +RDATE:19800501T000000 +RDATE:19880314T000000 +RDATE:19890312T000000 +RDATE:19900304T000000 +RDATE:19910303T000000 +RDATE:19920301T000000 +RDATE:19930228T000000 +RDATE:20050327T020000 +RDATE:20060312T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:UYST +DTSTART:19590524T000000 +RDATE:19590524T000000 +RDATE:19600117T000000 +RDATE:19650404T000000 +RDATE:19660403T000000 +RDATE:19670402T000000 +RDATE:19720424T000000 +RDATE:19771204T000000 +RDATE:19791001T000000 +RDATE:19871214T000000 +RDATE:19881211T000000 +RDATE:19891029T000000 +RDATE:19901021T000000 +RDATE:19911027T000000 +RDATE:19921018T000000 +RDATE:20040919T000000 +RDATE:20051009T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0230 +TZNAME:UYHST +DTSTART:19680527T000000 +RDATE:19680527T000000 +RDATE:19690527T000000 +RDATE:19700527T000000 +RDATE:19740310T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0230 +TZOFFSETTO:-0300 +TZNAME:UYT +DTSTART:19681202T000000 +RDATE:19681202T000000 +RDATE:19691202T000000 +RDATE:19701202T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0230 +TZOFFSETTO:-0200 +TZNAME:UYST +DTSTART:19741222T000000 +RDATE:19741222T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Montreal.ics b/libkcal/libical/zoneinfo/America/Montreal.ics new file mode 100644 index 000000000..03b2719bb --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Montreal.ics @@ -0,0 +1,233 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Montreal +X-LIC-LOCATION:America/Montreal +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-045416 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19180414T020000 +RDATE:19190331T023000 +RDATE:19200502T023000 +RDATE:19210501T020000 +RDATE:19220430T020000 +RDATE:19240517T020000 +RDATE:19250503T020000 +RDATE:19260502T020000 +RDATE:19270501T000000 +RDATE:19280429T000000 +RDATE:19290428T000000 +RDATE:19300427T000000 +RDATE:19310426T000000 +RDATE:19320501T000000 +RDATE:19330430T000000 +RDATE:19340429T000000 +RDATE:19350428T000000 +RDATE:19360426T000000 +RDATE:19370425T000000 +RDATE:19380424T000000 +RDATE:19390430T000000 +RDATE:19400428T000000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19170424T000000 +RDATE:19170424T000000 +RDATE:19181031T020000 +RDATE:19191025T023000 +RDATE:19201003T023000 +RDATE:19211002T023000 +RDATE:19221001T023000 +RDATE:19240928T023000 +RDATE:19250927T023000 +RDATE:19260926T023000 +RDATE:19270925T000000 +RDATE:19280930T000000 +RDATE:19290929T000000 +RDATE:19300928T000000 +RDATE:19310927T000000 +RDATE:19320925T000000 +RDATE:19331001T000000 +RDATE:19340930T000000 +RDATE:19350929T000000 +RDATE:19360927T000000 +RDATE:19370926T000000 +RDATE:19380925T000000 +RDATE:19390924T000000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19491030T020000 +RDATE:19501029T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19180101T000000 +RDATE:19180101T000000 +RDATE:19190101T000000 +RDATE:19460101T000000 +RDATE:19740101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Montserrat.ics b/libkcal/libical/zoneinfo/America/Montserrat.ics new file mode 100644 index 000000000..178aed906 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Montserrat.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Montserrat +X-LIC-LOCATION:America/Montserrat +BEGIN:STANDARD +TZOFFSETFROM:-040852 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110701T000100 +RDATE:19110701T000100 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Nassau.ics b/libkcal/libical/zoneinfo/America/Nassau.ics new file mode 100644 index 000000000..bba157cb1 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Nassau.ics @@ -0,0 +1,134 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Nassau +X-LIC-LOCATION:America/Nassau +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-050924 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19120302T000000 +RDATE:19120302T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19640426T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19641025T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19760101T000000 +RDATE:19760101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/New_York.ics b/libkcal/libical/zoneinfo/America/New_York.ics new file mode 100644 index 000000000..5167c4984 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/New_York.ics @@ -0,0 +1,236 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/New_York +X-LIC-LOCATION:America/New_York +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-045602 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:18831118T120358 +RDATE:18831118T120358 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210424T020000 +RDATE:19220430T020000 +RDATE:19230429T020000 +RDATE:19240427T020000 +RDATE:19250426T020000 +RDATE:19260425T020000 +RDATE:19270424T020000 +RDATE:19280429T020000 +RDATE:19290428T020000 +RDATE:19300427T020000 +RDATE:19310426T020000 +RDATE:19320424T020000 +RDATE:19330430T020000 +RDATE:19340429T020000 +RDATE:19350428T020000 +RDATE:19360426T020000 +RDATE:19370425T020000 +RDATE:19380424T020000 +RDATE:19390430T020000 +RDATE:19400428T020000 +RDATE:19410427T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19201031T020000 +RDATE:19210925T020000 +RDATE:19220924T020000 +RDATE:19230930T020000 +RDATE:19240928T020000 +RDATE:19250927T020000 +RDATE:19260926T020000 +RDATE:19270925T020000 +RDATE:19280930T020000 +RDATE:19290929T020000 +RDATE:19300928T020000 +RDATE:19310927T020000 +RDATE:19320925T020000 +RDATE:19330924T020000 +RDATE:19340930T020000 +RDATE:19350929T020000 +RDATE:19360927T020000 +RDATE:19370926T020000 +RDATE:19380925T020000 +RDATE:19390924T020000 +RDATE:19400929T020000 +RDATE:19410928T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19551030T020000 +RDATE:19561028T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19670101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Nipigon.ics b/libkcal/libical/zoneinfo/America/Nipigon.ics new file mode 100644 index 000000000..d82cb2fe8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Nipigon.ics @@ -0,0 +1,125 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Nipigon +X-LIC-LOCATION:America/Nipigon +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-055304 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19400929T000000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Nome.ics b/libkcal/libical/zoneinfo/America/Nome.ics new file mode 100644 index 000000000..a39654354 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Nome.ics @@ -0,0 +1,186 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Nome +X-LIC-LOCATION:America/Nome +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+125821 +TZOFFSETTO:-110138 +TZNAME:LMT +DTSTART:18671018T000000 +RDATE:18671018T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-110138 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19000820T120000 +RDATE:19000820T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1100 +TZOFFSETTO:-1000 +TZNAME:NWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:NPT +DTSTART:19450814T130000 +RDATE:19450814T130000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19450930T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19670401T000000 +RDATE:19670401T000000 +RDATE:19690101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1100 +TZOFFSETTO:-1000 +TZNAME:BDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19691026T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19831030T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:19840429T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19841028T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Noronha.ics b/libkcal/libical/zoneinfo/America/Noronha.ics new file mode 100644 index 000000000..f73e93ec4 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Noronha.ics @@ -0,0 +1,75 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Noronha +X-LIC-LOCATION:America/Noronha +BEGIN:STANDARD +TZOFFSETFROM:-020940 +TZOFFSETTO:-0200 +TZNAME:FNT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:FNST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:-0200 +TZNAME:FNT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:20000227T000000 +RDATE:20001015T000000 +RDATE:20020217T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0200 +TZNAME:FNT +DTSTART:19900917T000000 +RDATE:19900917T000000 +RDATE:19990930T000000 +RDATE:20010913T000000 +RDATE:20021001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/North_Dakota/Center.ics b/libkcal/libical/zoneinfo/America/North_Dakota/Center.ics new file mode 100644 index 000000000..8270353c4 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/North_Dakota/Center.ics @@ -0,0 +1,158 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/North_Dakota/Center +X-LIC-LOCATION:America/North_Dakota/Center +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-064512 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:18831118T121448 +RDATE:18831118T121448 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19921025T020000 +RDATE:19921025T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19930404T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19931031T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/North_Dakota/New_Salem.ics b/libkcal/libical/zoneinfo/America/North_Dakota/New_Salem.ics new file mode 100644 index 000000000..45eb01758 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/North_Dakota/New_Salem.ics @@ -0,0 +1,158 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/North_Dakota/New_Salem +X-LIC-LOCATION:America/North_Dakota/New_Salem +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-064539 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:18831118T121421 +RDATE:18831118T121421 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19450930T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20031026T020000 +RDATE:20031026T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20040404T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20041031T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Panama.ics b/libkcal/libical/zoneinfo/America/Panama.ics new file mode 100644 index 000000000..b31674d74 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Panama.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Panama +X-LIC-LOCATION:America/Panama +BEGIN:STANDARD +TZOFFSETFROM:-051808 +TZOFFSETTO:-051936 +TZNAME:CMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-051936 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19080422T000000 +RDATE:19080422T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Pangnirtung.ics b/libkcal/libical/zoneinfo/America/Pangnirtung.ics new file mode 100644 index 000000000..e73db19c7 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Pangnirtung.ics @@ -0,0 +1,160 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Pangnirtung +X-LIC-LOCATION:America/Pangnirtung +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19210101T000000 +RDATE:19210101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0200 +TZNAME:ADDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19950402T020000 +RDATE:19950402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19951029T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19960407T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19991031T020000 +RDATE:19991031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20000402T020000 +RDATE:20000402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Paramaribo.ics b/libkcal/libical/zoneinfo/America/Paramaribo.ics new file mode 100644 index 000000000..1a0afa2f7 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Paramaribo.ics @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Paramaribo +X-LIC-LOCATION:America/Paramaribo +BEGIN:STANDARD +TZOFFSETFROM:-034040 +TZOFFSETTO:-034052 +TZNAME:PMT +DTSTART:19110101T000000 +RDATE:19110101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034052 +TZOFFSETTO:-034036 +TZNAME:PMT +DTSTART:19350101T000000 +RDATE:19350101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-034036 +TZOFFSETTO:-0330 +TZNAME:NEGT +DTSTART:19451001T000000 +RDATE:19451001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0330 +TZOFFSETTO:-0330 +TZNAME:SRT +DTSTART:19751120T000000 +RDATE:19751120T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0330 +TZOFFSETTO:-0300 +TZNAME:SRT +DTSTART:19841001T000000 +RDATE:19841001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Phoenix.ics b/libkcal/libical/zoneinfo/America/Phoenix.ics new file mode 100644 index 000000000..359a5c251 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Phoenix.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Phoenix +X-LIC-LOCATION:America/Phoenix +BEGIN:STANDARD +TZOFFSETFROM:-072818 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:18831118T113142 +RDATE:18831118T113142 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19670430T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19440101T000100 +RDATE:19441001T000100 +RDATE:19671029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +RDATE:19440401T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19670101T000000 +RDATE:19670101T000000 +RDATE:19680321T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Port-au-Prince.ics b/libkcal/libical/zoneinfo/America/Port-au-Prince.ics new file mode 100644 index 000000000..886e92732 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Port-au-Prince.ics @@ -0,0 +1,68 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Port-au-Prince +X-LIC-LOCATION:America/Port-au-Prince +BEGIN:STANDARD +TZOFFSETFROM:-044920 +TZOFFSETTO:-0449 +TZNAME:PPMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0449 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19170124T120000 +RDATE:19170124T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19830508T000000 +RDATE:19830508T000000 +RDATE:19840429T000000 +RDATE:19850428T000000 +RDATE:19860427T000000 +RDATE:19870426T000000 +RDATE:19880403T010000 +RDATE:19890402T010000 +RDATE:19900401T010000 +RDATE:19910407T010000 +RDATE:19920405T010000 +RDATE:19930404T010000 +RDATE:19940403T010000 +RDATE:19950402T010000 +RDATE:19960407T010000 +RDATE:19970406T010000 +RDATE:20050403T000000 +RDATE:20060402T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19831030T000000 +RDATE:19831030T000000 +RDATE:19841028T000000 +RDATE:19851027T000000 +RDATE:19861026T000000 +RDATE:19871025T000000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:20051030T000000 +RDATE:20061029T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Port_of_Spain.ics b/libkcal/libical/zoneinfo/America/Port_of_Spain.ics new file mode 100644 index 000000000..2b8a39ae3 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Port_of_Spain.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Port_of_Spain +X-LIC-LOCATION:America/Port_of_Spain +BEGIN:STANDARD +TZOFFSETFROM:-040604 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19120302T000000 +RDATE:19120302T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Porto_Velho.ics b/libkcal/libical/zoneinfo/America/Porto_Velho.ics new file mode 100644 index 000000000..2036bb9ac --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Porto_Velho.ics @@ -0,0 +1,62 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Porto_Velho +X-LIC-LOCATION:America/Porto_Velho +BEGIN:STANDARD +TZOFFSETFROM:-041536 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AMST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AMT +DTSTART:19880912T000000 +RDATE:19880912T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Puerto_Rico.ics b/libkcal/libical/zoneinfo/America/Puerto_Rico.ics new file mode 100644 index 000000000..d8ad163a0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Puerto_Rico.ics @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Puerto_Rico +X-LIC-LOCATION:America/Puerto_Rico +BEGIN:STANDARD +TZOFFSETFROM:-042425 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:18990328T120000 +RDATE:18990328T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:AWT +DTSTART:19420503T000000 +RDATE:19420503T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:APT +DTSTART:19450814T200000 +RDATE:19450814T200000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19450930T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Rainy_River.ics b/libkcal/libical/zoneinfo/America/Rainy_River.ics new file mode 100644 index 000000000..63eef3cbd --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Rainy_River.ics @@ -0,0 +1,125 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Rainy_River +X-LIC-LOCATION:America/Rainy_River +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-061816 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19400929T000000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Rankin_Inlet.ics b/libkcal/libical/zoneinfo/America/Rankin_Inlet.ics new file mode 100644 index 000000000..613981b12 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Rankin_Inlet.ics @@ -0,0 +1,121 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Rankin_Inlet +X-LIC-LOCATION:America/Rankin_Inlet +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19570101T000000 +RDATE:19570101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0400 +TZNAME:CDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19801026T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20010401T020000 +RDATE:20010401T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Recife.ics b/libkcal/libical/zoneinfo/America/Recife.ics new file mode 100644 index 000000000..f7e938ddf --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Recife.ics @@ -0,0 +1,75 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Recife +X-LIC-LOCATION:America/Recife +BEGIN:STANDARD +TZOFFSETFROM:-021936 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:20000227T000000 +RDATE:20001015T000000 +RDATE:20020217T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19900917T000000 +RDATE:19900917T000000 +RDATE:19990930T000000 +RDATE:20010913T000000 +RDATE:20021001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Regina.ics b/libkcal/libical/zoneinfo/America/Regina.ics new file mode 100644 index 000000000..fe23ab8cd --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Regina.ics @@ -0,0 +1,97 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Regina +X-LIC-LOCATION:America/Regina +BEGIN:STANDARD +TZOFFSETFROM:-065836 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19050901T000000 +RDATE:19050901T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19300504T000000 +RDATE:19310503T000000 +RDATE:19320501T000000 +RDATE:19330507T000000 +RDATE:19340506T000000 +RDATE:19370411T000000 +RDATE:19380410T000000 +RDATE:19390409T000000 +RDATE:19400414T000000 +RDATE:19410413T000000 +RDATE:19460414T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19590426T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19301005T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19331001T000000 +RDATE:19341007T000000 +RDATE:19371010T000000 +RDATE:19381002T000000 +RDATE:19391008T000000 +RDATE:19401013T000000 +RDATE:19411012T000000 +RDATE:19450930T020000 +RDATE:19461013T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19591025T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19600424T020000 +RDATE:19600424T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Resolute.ics b/libkcal/libical/zoneinfo/America/Resolute.ics new file mode 100644 index 000000000..737298012 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Resolute.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Resolute +X-LIC-LOCATION:America/Resolute +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19470831T000000 +RDATE:19470831T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0400 +TZNAME:CDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19801026T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20001029T020000 +RDATE:20001029T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20010401T020000 +RDATE:20010401T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Rio_Branco.ics b/libkcal/libical/zoneinfo/America/Rio_Branco.ics new file mode 100644 index 000000000..ec3a86448 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Rio_Branco.ics @@ -0,0 +1,62 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Rio_Branco +X-LIC-LOCATION:America/Rio_Branco +BEGIN:STANDARD +TZOFFSETFROM:-043112 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:ACST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631209T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:ACT +DTSTART:19880912T000000 +RDATE:19880912T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Santiago.ics b/libkcal/libical/zoneinfo/America/Santiago.ics new file mode 100644 index 000000000..5132714f9 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Santiago.ics @@ -0,0 +1,193 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Santiago +X-LIC-LOCATION:America/Santiago +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:CLST +DTSTART:19991010T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:20090315T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-044246 +TZOFFSETTO:-044246 +TZNAME:SMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-044246 +TZOFFSETTO:-0500 +TZNAME:CLT +DTSTART:19100101T000000 +RDATE:19100101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-044246 +TZNAME:SMT +DTSTART:19160701T000000 +RDATE:19160701T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-044246 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:19180901T000000 +RDATE:19180901T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-044246 +TZNAME:SMT +DTSTART:19190701T000000 +RDATE:19190701T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-044246 +TZOFFSETTO:-0400 +TZNAME:CLST +DTSTART:19270901T000000 +RDATE:19270901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:CLT +DTSTART:19280401T000000 +RDATE:19280401T000000 +RDATE:19290401T000000 +RDATE:19300401T000000 +RDATE:19310401T000000 +RDATE:19320401T000000 +RDATE:19420601T000000 +RDATE:19460831T230000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:CLST +DTSTART:19280901T000000 +RDATE:19280901T000000 +RDATE:19290901T000000 +RDATE:19300901T000000 +RDATE:19310901T000000 +RDATE:19320901T000000 +RDATE:19420801T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:CLST +DTSTART:19460715T000000 +RDATE:19460715T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CLT +DTSTART:19470331T230000 +RDATE:19470331T230000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:19470522T000000 +RDATE:19470522T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:CLST +DTSTART:19681103T000000 +RDATE:19681103T000000 +RDATE:19691123T000000 +RDATE:19701011T000000 +RDATE:19711010T000000 +RDATE:19721015T000000 +RDATE:19730930T000000 +RDATE:19741013T000000 +RDATE:19751012T000000 +RDATE:19761010T000000 +RDATE:19771009T000000 +RDATE:19781015T000000 +RDATE:19791014T000000 +RDATE:19801012T000000 +RDATE:19811011T000000 +RDATE:19821010T000000 +RDATE:19831009T000000 +RDATE:19841014T000000 +RDATE:19851013T000000 +RDATE:19861012T000000 +RDATE:19871011T000000 +RDATE:19881002T000000 +RDATE:19891015T000000 +RDATE:19900916T000000 +RDATE:19911013T000000 +RDATE:19921011T000000 +RDATE:19931010T000000 +RDATE:19941009T000000 +RDATE:19951015T000000 +RDATE:19961013T000000 +RDATE:19971012T000000 +RDATE:19980927T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:19690330T000000 +RDATE:19690330T000000 +RDATE:19700329T000000 +RDATE:19710314T000000 +RDATE:19720312T000000 +RDATE:19730311T000000 +RDATE:19740310T000000 +RDATE:19750309T000000 +RDATE:19760314T000000 +RDATE:19770313T000000 +RDATE:19780312T000000 +RDATE:19790311T000000 +RDATE:19800309T000000 +RDATE:19810315T000000 +RDATE:19820314T000000 +RDATE:19830313T000000 +RDATE:19840311T000000 +RDATE:19850310T000000 +RDATE:19860309T000000 +RDATE:19870412T000000 +RDATE:19880313T000000 +RDATE:19890312T000000 +RDATE:19900318T000000 +RDATE:19910310T000000 +RDATE:19920315T000000 +RDATE:19930314T000000 +RDATE:19940313T000000 +RDATE:19950312T000000 +RDATE:19960310T000000 +RDATE:19970330T000000 +RDATE:19980315T000000 +RDATE:19990404T000000 +RDATE:20000312T000000 +RDATE:20010311T000000 +RDATE:20020310T000000 +RDATE:20030309T000000 +RDATE:20040314T000000 +RDATE:20050313T000000 +RDATE:20060312T000000 +RDATE:20070311T000000 +RDATE:20080330T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Santo_Domingo.ics b/libkcal/libical/zoneinfo/America/Santo_Domingo.ics new file mode 100644 index 000000000..49772186a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Santo_Domingo.ics @@ -0,0 +1,67 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Santo_Domingo +X-LIC-LOCATION:America/Santo_Domingo +BEGIN:STANDARD +TZOFFSETFROM:-043936 +TZOFFSETTO:-0440 +TZNAME:SDMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0440 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19330401T120000 +RDATE:19330401T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19661030T000000 +RDATE:19661030T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19670228T000000 +RDATE:19670228T000000 +RDATE:20001029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0430 +TZNAME:EHDT +DTSTART:19691026T000000 +RDATE:19691026T000000 +RDATE:19701025T000000 +RDATE:19711031T000000 +RDATE:19721029T000000 +RDATE:19731028T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0430 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19700221T000000 +RDATE:19700221T000000 +RDATE:19710120T000000 +RDATE:19720121T000000 +RDATE:19730121T000000 +RDATE:19740121T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19741027T000000 +RDATE:19741027T000000 +RDATE:20001203T010000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Sao_Paulo.ics b/libkcal/libical/zoneinfo/America/Sao_Paulo.ics new file mode 100644 index 000000000..9f9ff52be --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Sao_Paulo.ics @@ -0,0 +1,114 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Sao_Paulo +X-LIC-LOCATION:America/Sao_Paulo +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:20071014T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:20080217T000000 +RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-030628 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19311003T110000 +RDATE:19311003T110000 +RDATE:19321003T000000 +RDATE:19491201T000000 +RDATE:19501201T000000 +RDATE:19511201T000000 +RDATE:19521201T000000 +RDATE:19631023T000000 +RDATE:19650131T000000 +RDATE:19651201T000000 +RDATE:19661101T000000 +RDATE:19671101T000000 +RDATE:19851102T000000 +RDATE:19861025T000000 +RDATE:19871025T000000 +RDATE:19881016T000000 +RDATE:19891015T000000 +RDATE:19901021T000000 +RDATE:19911020T000000 +RDATE:19921025T000000 +RDATE:19931017T000000 +RDATE:19941016T000000 +RDATE:19951015T000000 +RDATE:19961006T000000 +RDATE:19971006T000000 +RDATE:19981011T000000 +RDATE:19991003T000000 +RDATE:20001008T000000 +RDATE:20011014T000000 +RDATE:20021103T000000 +RDATE:20031019T000000 +RDATE:20041102T000000 +RDATE:20051016T000000 +RDATE:20061105T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:BRT +DTSTART:19320401T000000 +RDATE:19320401T000000 +RDATE:19330401T000000 +RDATE:19500416T010000 +RDATE:19510401T000000 +RDATE:19520401T000000 +RDATE:19530301T000000 +RDATE:19640301T000000 +RDATE:19650331T000000 +RDATE:19660301T000000 +RDATE:19670301T000000 +RDATE:19680301T000000 +RDATE:19860315T000000 +RDATE:19870214T000000 +RDATE:19880207T000000 +RDATE:19890129T000000 +RDATE:19900211T000000 +RDATE:19910217T000000 +RDATE:19920209T000000 +RDATE:19930131T000000 +RDATE:19940220T000000 +RDATE:19950219T000000 +RDATE:19960211T000000 +RDATE:19970216T000000 +RDATE:19980301T000000 +RDATE:19990221T000000 +RDATE:20000227T000000 +RDATE:20010218T000000 +RDATE:20020217T000000 +RDATE:20030216T000000 +RDATE:20040215T000000 +RDATE:20050220T000000 +RDATE:20060219T000000 +RDATE:20070225T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0200 +TZNAME:BRST +DTSTART:19640101T000000 +RDATE:19640101T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Scoresbysund.ics b/libkcal/libical/zoneinfo/America/Scoresbysund.ics new file mode 100644 index 000000000..b8b3f2989 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Scoresbysund.ics @@ -0,0 +1,71 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Scoresbysund +X-LIC-LOCATION:America/Scoresbysund +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:EGST +DTSTART:19820328T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:EGT +DTSTART:19961027T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-012752 +TZOFFSETTO:-0200 +TZNAME:CGT +DTSTART:19160728T000000 +RDATE:19160728T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:CGST +DTSTART:19800406T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:-0200 +TZNAME:CGT +DTSTART:19800928T030000 +RDATE:19800928T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:+0000 +TZNAME:EGST +DTSTART:19810329T000000 +RDATE:19810329T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:EGT +DTSTART:19810927T010000 +RDATE:19810927T010000 +RDATE:19820926T010000 +RDATE:19830925T010000 +RDATE:19840930T010000 +RDATE:19850929T010000 +RDATE:19860928T010000 +RDATE:19870927T010000 +RDATE:19880925T010000 +RDATE:19890924T010000 +RDATE:19900930T010000 +RDATE:19910929T010000 +RDATE:19920927T010000 +RDATE:19930926T010000 +RDATE:19940925T010000 +RDATE:19950924T010000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Shiprock.ics b/libkcal/libical/zoneinfo/America/Shiprock.ics new file mode 100644 index 000000000..f79d50cce --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Shiprock.ics @@ -0,0 +1,158 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Shiprock +X-LIC-LOCATION:America/Shiprock +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-065956 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:18831118T120004 +RDATE:18831118T120004 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180331T020000 +RDATE:19180331T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210327T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191026T020000 +RDATE:19201031T020000 +RDATE:19210522T020000 +RDATE:19450930T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19670101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Barthelemy.ics b/libkcal/libical/zoneinfo/America/St_Barthelemy.ics new file mode 100644 index 000000000..97a1e4e8d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Barthelemy.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Barthelemy +X-LIC-LOCATION:America/St_Barthelemy +BEGIN:STANDARD +TZOFFSETFROM:-040608 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110608T000000 +RDATE:19110608T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Johns.ics b/libkcal/libical/zoneinfo/America/St_Johns.ics new file mode 100644 index 000000000..bb5f01cce --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Johns.ics @@ -0,0 +1,268 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Johns +X-LIC-LOCATION:America/St_Johns +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0230 +TZNAME:NDT +DTSTART:20070311T000100 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0230 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:20071104T000100 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-033052 +TZOFFSETTO:-033052 +TZNAME:NST +DTSTART:18840101T000000 +RDATE:18840101T000000 +RDATE:19180101T000000 +RDATE:19190101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-033052 +TZOFFSETTO:-023052 +TZNAME:NDT +DTSTART:19170408T020000 +RDATE:19170408T020000 +RDATE:19180414T020000 +RDATE:19190505T230000 +RDATE:19200502T230000 +RDATE:19210501T230000 +RDATE:19220507T230000 +RDATE:19230506T230000 +RDATE:19240504T230000 +RDATE:19250503T230000 +RDATE:19260502T230000 +RDATE:19270501T230000 +RDATE:19280506T230000 +RDATE:19290505T230000 +RDATE:19300504T230000 +RDATE:19310503T230000 +RDATE:19320501T230000 +RDATE:19330507T230000 +RDATE:19340506T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-023052 +TZOFFSETTO:-033052 +TZNAME:NST +DTSTART:19170917T020000 +RDATE:19170917T020000 +RDATE:19181031T020000 +RDATE:19190812T230000 +RDATE:19201031T230000 +RDATE:19211030T230000 +RDATE:19221029T230000 +RDATE:19231028T230000 +RDATE:19241026T230000 +RDATE:19251025T230000 +RDATE:19261031T230000 +RDATE:19271030T230000 +RDATE:19281028T230000 +RDATE:19291027T230000 +RDATE:19301026T230000 +RDATE:19311025T230000 +RDATE:19321030T230000 +RDATE:19331029T230000 +RDATE:19341028T230000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-033052 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19350330T000000 +RDATE:19350330T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0230 +TZNAME:NDT +DTSTART:19350505T230000 +RDATE:19350505T230000 +RDATE:19360511T000000 +RDATE:19370510T000000 +RDATE:19380509T000000 +RDATE:19390515T000000 +RDATE:19400513T000000 +RDATE:19410512T000000 +RDATE:19460512T020000 +RDATE:19470511T020000 +RDATE:19480509T020000 +RDATE:19490508T020000 +RDATE:19500514T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T000100 +RDATE:19890402T000100 +RDATE:19900401T000100 +RDATE:19910407T000100 +RDATE:19920405T000100 +RDATE:19930404T000100 +RDATE:19940403T000100 +RDATE:19950402T000100 +RDATE:19960407T000100 +RDATE:19970406T000100 +RDATE:19980405T000100 +RDATE:19990404T000100 +RDATE:20000402T000100 +RDATE:20010401T000100 +RDATE:20020407T000100 +RDATE:20030406T000100 +RDATE:20040404T000100 +RDATE:20050403T000100 +RDATE:20060402T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0230 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19351027T230000 +RDATE:19351027T230000 +RDATE:19361005T000000 +RDATE:19371004T000000 +RDATE:19381003T000000 +RDATE:19391002T000000 +RDATE:19401007T000000 +RDATE:19411006T000000 +RDATE:19450930T020000 +RDATE:19461006T020000 +RDATE:19471005T020000 +RDATE:19481003T020000 +RDATE:19491002T020000 +RDATE:19501008T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T000100 +RDATE:19891029T000100 +RDATE:19901028T000100 +RDATE:19911027T000100 +RDATE:19921025T000100 +RDATE:19931031T000100 +RDATE:19941030T000100 +RDATE:19951029T000100 +RDATE:19961027T000100 +RDATE:19971026T000100 +RDATE:19981025T000100 +RDATE:19991031T000100 +RDATE:20001029T000100 +RDATE:20011028T000100 +RDATE:20021027T000100 +RDATE:20031026T000100 +RDATE:20041031T000100 +RDATE:20051030T000100 +RDATE:20061029T000100 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0230 +TZNAME:NWT +DTSTART:19420511T000000 +RDATE:19420511T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0230 +TZOFFSETTO:-0230 +TZNAME:NPT +DTSTART:19450814T203000 +RDATE:19450814T203000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0330 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0330 +TZOFFSETTO:-0130 +TZNAME:NDDT +DTSTART:19880403T000100 +RDATE:19880403T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0130 +TZOFFSETTO:-0330 +TZNAME:NST +DTSTART:19881030T000100 +RDATE:19881030T000100 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Kitts.ics b/libkcal/libical/zoneinfo/America/St_Kitts.ics new file mode 100644 index 000000000..2860c855f --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Kitts.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Kitts +X-LIC-LOCATION:America/St_Kitts +BEGIN:STANDARD +TZOFFSETFROM:-041052 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19120302T000000 +RDATE:19120302T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Lucia.ics b/libkcal/libical/zoneinfo/America/St_Lucia.ics new file mode 100644 index 000000000..805c2f96a --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Lucia.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Lucia +X-LIC-LOCATION:America/St_Lucia +BEGIN:STANDARD +TZOFFSETFROM:-0404 +TZOFFSETTO:-0404 +TZNAME:CMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0404 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Thomas.ics b/libkcal/libical/zoneinfo/America/St_Thomas.ics new file mode 100644 index 000000000..35b110da8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Thomas.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Thomas +X-LIC-LOCATION:America/St_Thomas +BEGIN:STANDARD +TZOFFSETFROM:-041944 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/St_Vincent.ics b/libkcal/libical/zoneinfo/America/St_Vincent.ics new file mode 100644 index 000000000..edacd437d --- /dev/null +++ b/libkcal/libical/zoneinfo/America/St_Vincent.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/St_Vincent +X-LIC-LOCATION:America/St_Vincent +BEGIN:STANDARD +TZOFFSETFROM:-040456 +TZOFFSETTO:-040456 +TZNAME:KMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-040456 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Swift_Current.ics b/libkcal/libical/zoneinfo/America/Swift_Current.ics new file mode 100644 index 000000000..b8ab459bc --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Swift_Current.ics @@ -0,0 +1,74 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Swift_Current +X-LIC-LOCATION:America/Swift_Current +BEGIN:STANDARD +TZOFFSETFROM:-071120 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19050901T000000 +RDATE:19050901T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19570428T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19461013T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19571027T020000 +RDATE:19591025T020000 +RDATE:19600925T020000 +RDATE:19610924T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19720430T020000 +RDATE:19720430T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Tegucigalpa.ics b/libkcal/libical/zoneinfo/America/Tegucigalpa.ics new file mode 100644 index 000000000..e5ec1e0ad --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Tegucigalpa.ics @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Tegucigalpa +X-LIC-LOCATION:America/Tegucigalpa +BEGIN:STANDARD +TZOFFSETFROM:-054852 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19210401T000000 +RDATE:19210401T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19870503T000000 +RDATE:19870503T000000 +RDATE:19880501T000000 +RDATE:20060507T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19870927T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:20060807T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Thule.ics b/libkcal/libical/zoneinfo/America/Thule.ics new file mode 100644 index 000000000..7da99f4d5 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Thule.ics @@ -0,0 +1,73 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Thule +X-LIC-LOCATION:America/Thule +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-043508 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19160728T000000 +RDATE:19160728T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19910331T020000 +RDATE:19910331T020000 +RDATE:19920329T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19910929T020000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Thunder_Bay.ics b/libkcal/libical/zoneinfo/America/Thunder_Bay.ics new file mode 100644 index 000000000..1c54083f1 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Thunder_Bay.ics @@ -0,0 +1,145 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Thunder_Bay +X-LIC-LOCATION:America/Thunder_Bay +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0557 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19100101T000000 +RDATE:19100101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19700101T000000 +RDATE:19730101T000000 +RDATE:19740101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19700426T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Tijuana.ics b/libkcal/libical/zoneinfo/America/Tijuana.ics new file mode 100644 index 000000000..cf02aaced --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Tijuana.ics @@ -0,0 +1,106 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Tijuana +X-LIC-LOCATION:America/Tijuana +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19761031T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-074804 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19220101T001156 +RDATE:19220101T001156 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19240101T000000 +RDATE:19240101T000000 +RDATE:19301115T000000 +RDATE:19310930T000000 +RDATE:19451112T000000 +RDATE:19490114T000000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19270610T230000 +RDATE:19270610T230000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19310401T000000 +RDATE:19310401T000000 +RDATE:19480405T000000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PWT +DTSTART:19420424T000000 +RDATE:19420424T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:PPT +DTSTART:19450814T160000 +RDATE:19450814T160000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19540101T000000 +RDATE:19540101T000000 +RDATE:19610101T000000 +RDATE:19760101T000000 +RDATE:19960101T000000 +RDATE:20010101T000000 +RDATE:20020220T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Toronto.ics b/libkcal/libical/zoneinfo/America/Toronto.ics new file mode 100644 index 000000000..d6a31435b --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Toronto.ics @@ -0,0 +1,232 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Toronto +X-LIC-LOCATION:America/Toronto +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-051732 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19190330T233000 +RDATE:19200502T020000 +RDATE:19210515T020000 +RDATE:19220514T020000 +RDATE:19230513T020000 +RDATE:19240504T020000 +RDATE:19250503T020000 +RDATE:19260502T020000 +RDATE:19270501T020000 +RDATE:19280429T020000 +RDATE:19290428T020000 +RDATE:19300427T020000 +RDATE:19310426T020000 +RDATE:19320501T020000 +RDATE:19330430T020000 +RDATE:19340429T020000 +RDATE:19350428T020000 +RDATE:19360426T020000 +RDATE:19370425T020000 +RDATE:19380424T020000 +RDATE:19390430T020000 +RDATE:19400428T020000 +RDATE:19460428T020000 +RDATE:19470427T000000 +RDATE:19480425T000000 +RDATE:19490424T000000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19191026T000000 +RDATE:19200926T000000 +RDATE:19210915T020000 +RDATE:19220917T020000 +RDATE:19230916T020000 +RDATE:19240921T020000 +RDATE:19250920T020000 +RDATE:19260919T020000 +RDATE:19270925T020000 +RDATE:19280930T020000 +RDATE:19290929T020000 +RDATE:19300928T020000 +RDATE:19310927T020000 +RDATE:19320925T020000 +RDATE:19331001T020000 +RDATE:19340930T020000 +RDATE:19350929T020000 +RDATE:19360927T020000 +RDATE:19370926T020000 +RDATE:19380925T020000 +RDATE:19390924T020000 +RDATE:19450930T020000 +RDATE:19460929T020000 +RDATE:19470928T000000 +RDATE:19480926T000000 +RDATE:19491127T000000 +RDATE:19501126T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601030T020000 +RDATE:19611029T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:EST +DTSTART:19190101T000000 +RDATE:19190101T000000 +RDATE:19460101T000000 +RDATE:19740101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:EPT +DTSTART:19450814T190000 +RDATE:19450814T190000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Tortola.ics b/libkcal/libical/zoneinfo/America/Tortola.ics new file mode 100644 index 000000000..be30bd5b0 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Tortola.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Tortola +X-LIC-LOCATION:America/Tortola +BEGIN:STANDARD +TZOFFSETFROM:-041828 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Vancouver.ics b/libkcal/libical/zoneinfo/America/Vancouver.ics new file mode 100644 index 000000000..725387c9b --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Vancouver.ics @@ -0,0 +1,187 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Vancouver +X-LIC-LOCATION:America/Vancouver +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-081228 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19460428T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500430T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19610430T020000 +RDATE:19620429T020000 +RDATE:19630428T020000 +RDATE:19640426T020000 +RDATE:19650425T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19181031T020000 +RDATE:19181031T020000 +RDATE:19450930T020000 +RDATE:19461013T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500924T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19590927T020000 +RDATE:19600925T020000 +RDATE:19610924T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651031T020000 +RDATE:19661030T020000 +RDATE:19671029T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:PPT +DTSTART:19450814T160000 +RDATE:19450814T160000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19870101T000000 +RDATE:19870101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Whitehorse.ics b/libkcal/libical/zoneinfo/America/Whitehorse.ics new file mode 100644 index 000000000..e93d8aad8 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Whitehorse.ics @@ -0,0 +1,153 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Whitehorse +X-LIC-LOCATION:America/Whitehorse +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-090012 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19000820T000000 +RDATE:19000820T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YDT +DTSTART:19180414T020000 +RDATE:19180414T020000 +RDATE:19190525T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19181027T020000 +RDATE:19181027T020000 +RDATE:19191101T000000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:YPT +DTSTART:19450814T150000 +RDATE:19450814T150000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0700 +TZNAME:YDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +DTSTART:19660701T020000 +RDATE:19660701T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19801026T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Winnipeg.ics b/libkcal/libical/zoneinfo/America/Winnipeg.ics new file mode 100644 index 000000000..e75440d53 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Winnipeg.ics @@ -0,0 +1,183 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Winnipeg +X-LIC-LOCATION:America/Winnipeg +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-062836 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:18870716T000000 +RDATE:18870716T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +DTSTART:19160423T000000 +RDATE:19160423T000000 +RDATE:19180414T020000 +RDATE:19370516T020000 +RDATE:19460512T020000 +RDATE:19470427T020000 +RDATE:19480425T020000 +RDATE:19490424T020000 +RDATE:19500501T020000 +RDATE:19510429T020000 +RDATE:19520427T020000 +RDATE:19530426T020000 +RDATE:19540425T020000 +RDATE:19550424T020000 +RDATE:19560429T020000 +RDATE:19570428T020000 +RDATE:19580427T020000 +RDATE:19590426T020000 +RDATE:19600424T020000 +RDATE:19630428T020000 +RDATE:19660424T020000 +RDATE:19670430T020000 +RDATE:19680428T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:19160917T000000 +RDATE:19160917T000000 +RDATE:19181031T020000 +RDATE:19370926T020000 +RDATE:19450930T020000 +RDATE:19461013T020000 +RDATE:19470928T020000 +RDATE:19480926T020000 +RDATE:19490925T020000 +RDATE:19500930T020000 +RDATE:19510930T020000 +RDATE:19520928T020000 +RDATE:19530927T020000 +RDATE:19540926T020000 +RDATE:19550925T020000 +RDATE:19560930T020000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19591025T020000 +RDATE:19600925T020000 +RDATE:19630922T020000 +RDATE:19661030T030000 +RDATE:19671029T030000 +RDATE:19681027T030000 +RDATE:19691026T030000 +RDATE:19701025T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761031T030000 +RDATE:19771030T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T030000 +RDATE:19821031T030000 +RDATE:19831030T030000 +RDATE:19841028T030000 +RDATE:19851027T030000 +RDATE:19861026T030000 +RDATE:19871025T030000 +RDATE:19881030T030000 +RDATE:19891029T030000 +RDATE:19901028T030000 +RDATE:19911027T030000 +RDATE:19921025T030000 +RDATE:19931031T030000 +RDATE:19941030T030000 +RDATE:19951029T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +RDATE:20051030T030000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +TZOFFSETTO:-0500 +TZNAME:CPT +DTSTART:19450814T180000 +RDATE:19450814T180000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:CST +DTSTART:20060101T000000 +RDATE:20060101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Yakutat.ics b/libkcal/libical/zoneinfo/America/Yakutat.ics new file mode 100644 index 000000000..894ead5c5 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Yakutat.ics @@ -0,0 +1,167 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Yakutat +X-LIC-LOCATION:America/Yakutat +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+144105 +TZOFFSETTO:-091855 +TZNAME:LMT +DTSTART:18671018T000000 +RDATE:18671018T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-091855 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19000820T120000 +RDATE:19000820T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19420101T000000 +RDATE:19420101T000000 +RDATE:19460101T000000 +RDATE:19690101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:YPT +DTSTART:19450814T150000 +RDATE:19450814T150000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:YST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:YDT +DTSTART:19690427T020000 +RDATE:19690427T020000 +RDATE:19700426T020000 +RDATE:19710425T020000 +RDATE:19720430T020000 +RDATE:19730429T020000 +RDATE:19740106T020000 +RDATE:19750223T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0900 +TZOFFSETTO:-0800 +TZNAME:AKDT +DTSTART:19840429T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0800 +TZOFFSETTO:-0900 +TZNAME:AKST +DTSTART:19841028T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/America/Yellowknife.ics b/libkcal/libical/zoneinfo/America/Yellowknife.ics new file mode 100644 index 000000000..6d3e45b18 --- /dev/null +++ b/libkcal/libical/zoneinfo/America/Yellowknife.ics @@ -0,0 +1,131 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/America/Yellowknife +X-LIC-LOCATION:America/Yellowknife +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19350101T000000 +RDATE:19350101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:MPT +DTSTART:19450814T170000 +RDATE:19450814T170000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19450930T020000 +RDATE:19450930T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0500 +TZNAME:MDDT +DTSTART:19650425T000000 +RDATE:19650425T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19651031T020000 +RDATE:19651031T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:MST +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:MDT +DTSTART:19800427T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Casey.ics b/libkcal/libical/zoneinfo/Antarctica/Casey.ics new file mode 100644 index 000000000..09a832268 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Casey.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Casey +X-LIC-LOCATION:Antarctica/Casey +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0800 +TZNAME:WST +DTSTART:19690101T000000 +RDATE:19690101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Davis.ics b/libkcal/libical/zoneinfo/Antarctica/Davis.ics new file mode 100644 index 000000000..a7ac261ad --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Davis.ics @@ -0,0 +1,23 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Davis +X-LIC-LOCATION:Antarctica/Davis +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0700 +TZNAME:DAVT +DTSTART:19570113T000000 +RDATE:19570113T000000 +RDATE:19690201T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0000 +TZNAME:zzz +DTSTART:19641101T000000 +RDATE:19641101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/DumontDUrville.ics b/libkcal/libical/zoneinfo/Antarctica/DumontDUrville.ics new file mode 100644 index 000000000..05d3681f9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/DumontDUrville.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/DumontDUrville +X-LIC-LOCATION:Antarctica/DumontDUrville +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+1000 +TZNAME:PMT +DTSTART:19470101T000000 +RDATE:19470101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0000 +TZNAME:zzz +DTSTART:19520114T000000 +RDATE:19520114T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+1000 +TZNAME:DDUT +DTSTART:19561101T000000 +RDATE:19561101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Mawson.ics b/libkcal/libical/zoneinfo/Antarctica/Mawson.ics new file mode 100644 index 000000000..92d091cce --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Mawson.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Mawson +X-LIC-LOCATION:Antarctica/Mawson +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0600 +TZNAME:MAWT +DTSTART:19540213T000000 +RDATE:19540213T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/McMurdo.ics b/libkcal/libical/zoneinfo/Antarctica/McMurdo.ics new file mode 100644 index 000000000..7fa4368c0 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/McMurdo.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/McMurdo +X-LIC-LOCATION:Antarctica/McMurdo +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19560101T000000 +RDATE:19560101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:19741103T020000 +RDATE:19741103T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891008T020000 +RDATE:19901007T020000 +RDATE:19911006T020000 +RDATE:19921004T020000 +RDATE:19931003T020000 +RDATE:19941002T020000 +RDATE:19951001T020000 +RDATE:19961006T020000 +RDATE:19971005T020000 +RDATE:19981004T020000 +RDATE:19991003T020000 +RDATE:20001001T020000 +RDATE:20011007T020000 +RDATE:20021006T020000 +RDATE:20031005T020000 +RDATE:20041003T020000 +RDATE:20051002T020000 +RDATE:20061001T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19750223T030000 +RDATE:19750223T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820307T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860302T030000 +RDATE:19870301T030000 +RDATE:19880306T030000 +RDATE:19890305T030000 +RDATE:19900318T030000 +RDATE:19910317T030000 +RDATE:19920315T030000 +RDATE:19930321T030000 +RDATE:19940320T030000 +RDATE:19950319T030000 +RDATE:19960317T030000 +RDATE:19970316T030000 +RDATE:19980315T030000 +RDATE:19990321T030000 +RDATE:20000319T030000 +RDATE:20010318T030000 +RDATE:20020317T030000 +RDATE:20030316T030000 +RDATE:20040321T030000 +RDATE:20050320T030000 +RDATE:20060319T030000 +RDATE:20070318T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Palmer.ics b/libkcal/libical/zoneinfo/Antarctica/Palmer.ics new file mode 100644 index 000000000..a4fa54f7f --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Palmer.ics @@ -0,0 +1,118 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Palmer +X-LIC-LOCATION:Antarctica/Palmer +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:CLST +DTSTART:19991010T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:20000312T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19650101T000000 +RDATE:19650101T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:ART +DTSTART:19650301T000000 +RDATE:19650301T000000 +RDATE:19660301T000000 +RDATE:19670402T000000 +RDATE:19680407T000000 +RDATE:19690406T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ARST +DTSTART:19651015T000000 +RDATE:19651015T000000 +RDATE:19661015T000000 +RDATE:19671001T000000 +RDATE:19681006T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19691005T000000 +RDATE:19691005T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:ARST +DTSTART:19740123T000000 +RDATE:19740123T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:ART +DTSTART:19740501T000000 +RDATE:19740501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:CLT +DTSTART:19820501T000000 +RDATE:19820501T000000 +RDATE:19830313T000000 +RDATE:19840311T000000 +RDATE:19850310T000000 +RDATE:19860309T000000 +RDATE:19870412T000000 +RDATE:19880313T000000 +RDATE:19890312T000000 +RDATE:19900318T000000 +RDATE:19910310T000000 +RDATE:19920315T000000 +RDATE:19930314T000000 +RDATE:19940313T000000 +RDATE:19950312T000000 +RDATE:19960310T000000 +RDATE:19970330T000000 +RDATE:19980315T000000 +RDATE:19990404T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:CLST +DTSTART:19821010T000000 +RDATE:19821010T000000 +RDATE:19831009T000000 +RDATE:19841014T000000 +RDATE:19851013T000000 +RDATE:19861012T000000 +RDATE:19871011T000000 +RDATE:19881002T000000 +RDATE:19891015T000000 +RDATE:19900916T000000 +RDATE:19911013T000000 +RDATE:19921011T000000 +RDATE:19931010T000000 +RDATE:19941009T000000 +RDATE:19951015T000000 +RDATE:19961013T000000 +RDATE:19971012T000000 +RDATE:19980927T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Rothera.ics b/libkcal/libical/zoneinfo/Antarctica/Rothera.ics new file mode 100644 index 000000000..03c1c5a3c --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Rothera.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Rothera +X-LIC-LOCATION:Antarctica/Rothera +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0300 +TZNAME:ROTT +DTSTART:19761201T000000 +RDATE:19761201T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/South_Pole.ics b/libkcal/libical/zoneinfo/Antarctica/South_Pole.ics new file mode 100644 index 000000000..bda8f3628 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/South_Pole.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/South_Pole +X-LIC-LOCATION:Antarctica/South_Pole +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19560101T000000 +RDATE:19560101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:19741103T020000 +RDATE:19741103T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891008T020000 +RDATE:19901007T020000 +RDATE:19911006T020000 +RDATE:19921004T020000 +RDATE:19931003T020000 +RDATE:19941002T020000 +RDATE:19951001T020000 +RDATE:19961006T020000 +RDATE:19971005T020000 +RDATE:19981004T020000 +RDATE:19991003T020000 +RDATE:20001001T020000 +RDATE:20011007T020000 +RDATE:20021006T020000 +RDATE:20031005T020000 +RDATE:20041003T020000 +RDATE:20051002T020000 +RDATE:20061001T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19750223T030000 +RDATE:19750223T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820307T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860302T030000 +RDATE:19870301T030000 +RDATE:19880306T030000 +RDATE:19890305T030000 +RDATE:19900318T030000 +RDATE:19910317T030000 +RDATE:19920315T030000 +RDATE:19930321T030000 +RDATE:19940320T030000 +RDATE:19950319T030000 +RDATE:19960317T030000 +RDATE:19970316T030000 +RDATE:19980315T030000 +RDATE:19990321T030000 +RDATE:20000319T030000 +RDATE:20010318T030000 +RDATE:20020317T030000 +RDATE:20030316T030000 +RDATE:20040321T030000 +RDATE:20050320T030000 +RDATE:20060319T030000 +RDATE:20070318T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Syowa.ics b/libkcal/libical/zoneinfo/Antarctica/Syowa.ics new file mode 100644 index 000000000..93c9576b8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Syowa.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Syowa +X-LIC-LOCATION:Antarctica/Syowa +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0300 +TZNAME:SYOT +DTSTART:19570129T000000 +RDATE:19570129T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Antarctica/Vostok.ics b/libkcal/libical/zoneinfo/Antarctica/Vostok.ics new file mode 100644 index 000000000..0bbbca642 --- /dev/null +++ b/libkcal/libical/zoneinfo/Antarctica/Vostok.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Antarctica/Vostok +X-LIC-LOCATION:Antarctica/Vostok +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0600 +TZNAME:VOST +DTSTART:19571216T000000 +RDATE:19571216T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Arctic/Longyearbyen.ics b/libkcal/libical/zoneinfo/Arctic/Longyearbyen.ics new file mode 100644 index 000000000..467d6e47e --- /dev/null +++ b/libkcal/libical/zoneinfo/Arctic/Longyearbyen.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Arctic/Longyearbyen +X-LIC-LOCATION:Arctic/Longyearbyen +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0043 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160522T010000 +RDATE:19160522T010000 +RDATE:19400810T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19590315T020000 +RDATE:19600320T020000 +RDATE:19610319T020000 +RDATE:19620318T020000 +RDATE:19630317T020000 +RDATE:19640315T020000 +RDATE:19650425T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19160930T000000 +RDATE:19160930T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19451001T030000 +RDATE:19590920T030000 +RDATE:19600918T030000 +RDATE:19610917T030000 +RDATE:19620916T030000 +RDATE:19630915T030000 +RDATE:19640920T030000 +RDATE:19650919T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Aden.ics b/libkcal/libical/zoneinfo/Asia/Aden.ics new file mode 100644 index 000000000..4050107b5 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Aden.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Aden +X-LIC-LOCATION:Asia/Aden +BEGIN:STANDARD +TZOFFSETFROM:+030048 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Almaty.ics b/libkcal/libical/zoneinfo/Asia/Almaty.ics new file mode 100644 index 000000000..8092271a2 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Almaty.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Almaty +X-LIC-LOCATION:Asia/Almaty +BEGIN:STANDARD +TZOFFSETFROM:+050748 +TZOFFSETTO:+0500 +TZNAME:ALMT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:ALMT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:ALMST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:ALMT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:ALMT +DTSTART:19910101T000000 +RDATE:19910101T000000 +RDATE:19920101T000000 +RDATE:20050315T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Amman.ics b/libkcal/libical/zoneinfo/Asia/Amman.ics new file mode 100644 index 000000000..d474239a3 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Amman.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Amman +X-LIC-LOCATION:Asia/Amman +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20000330T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20061027T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+022344 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19730606T000000 +RDATE:19730606T000000 +RDATE:19740501T000000 +RDATE:19750501T000000 +RDATE:19760501T000000 +RDATE:19770501T000000 +RDATE:19780430T000000 +RDATE:19850401T000000 +RDATE:19860404T000000 +RDATE:19870403T000000 +RDATE:19880401T000000 +RDATE:19890508T000000 +RDATE:19900427T000000 +RDATE:19910417T000000 +RDATE:19920410T000000 +RDATE:19930402T000000 +RDATE:19940401T000000 +RDATE:19950407T000000 +RDATE:19960405T000000 +RDATE:19970404T000000 +RDATE:19980403T000000 +RDATE:19990701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19731001T000000 +RDATE:19731001T000000 +RDATE:19741001T000000 +RDATE:19751001T000000 +RDATE:19761101T000000 +RDATE:19771001T000000 +RDATE:19780930T000000 +RDATE:19851001T000000 +RDATE:19861003T000000 +RDATE:19871002T000000 +RDATE:19881007T000000 +RDATE:19891006T000000 +RDATE:19901005T000000 +RDATE:19910927T000000 +RDATE:19921002T000000 +RDATE:19931001T000000 +RDATE:19940916T000000 +RDATE:19950915T010000 +RDATE:19960920T010000 +RDATE:19970919T010000 +RDATE:19980918T010000 +RDATE:19990930T010000 +RDATE:20000928T010000 +RDATE:20010927T010000 +RDATE:20020926T010000 +RDATE:20031024T010000 +RDATE:20041015T010000 +RDATE:20050930T010000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Anadyr.ics b/libkcal/libical/zoneinfo/Asia/Anadyr.ics new file mode 100644 index 000000000..df5356441 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Anadyr.ics @@ -0,0 +1,112 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Anadyr +X-LIC-LOCATION:Asia/Anadyr +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:ANAST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:ANAT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+114956 +TZOFFSETTO:+1200 +TZNAME:ANAT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:ANAT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1300 +TZOFFSETTO:+1400 +TZNAME:ANAST +DTSTART:19810401T000000 +RDATE:19810401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1400 +TZOFFSETTO:+1300 +TZNAME:ANAT +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1300 +TZOFFSETTO:+1300 +TZNAME:ANAST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:ANAT +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:ANAST +DTSTART:19830401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1200 +TZNAME:ANAST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:ANAT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:ANAT +DTSTART:19920119T020000 +RDATE:19920119T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Aqtau.ics b/libkcal/libical/zoneinfo/Asia/Aqtau.ics new file mode 100644 index 000000000..c9062a811 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Aqtau.ics @@ -0,0 +1,143 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Aqtau +X-LIC-LOCATION:Asia/Aqtau +BEGIN:STANDARD +TZOFFSETFROM:+032104 +TZOFFSETTO:+0400 +TZNAME:FORT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:FORT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:SHET +DTSTART:19630101T000000 +RDATE:19630101T000000 +RDATE:19910101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:SHET +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:SHEST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:SHET +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:SHEST +DTSTART:19830401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:AQTT +DTSTART:19911216T000000 +RDATE:19911216T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:AQTST +DTSTART:19920328T230000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:AQTT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:AQTST +DTSTART:19950326T020000 +RDATE:19950326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:AQTT +DTSTART:19950924T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AQTST +DTSTART:19960331T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AQTT +DTSTART:20050315T000000 +RDATE:20050315T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Aqtobe.ics b/libkcal/libical/zoneinfo/Asia/Aqtobe.ics new file mode 100644 index 000000000..35dba9c16 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Aqtobe.ics @@ -0,0 +1,119 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Aqtobe +X-LIC-LOCATION:Asia/Aqtobe +BEGIN:STANDARD +TZOFFSETFROM:+034840 +TZOFFSETTO:+0400 +TZNAME:AKTT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AKTT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:AKTST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:AKTT +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:AKTST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:AKTT +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:AKTT +DTSTART:19910101T000000 +RDATE:19910101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:AQTT +DTSTART:19911216T000000 +RDATE:19911216T000000 +RDATE:20050315T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:AQTST +DTSTART:19920328T230000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:AQTT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Ashgabat.ics b/libkcal/libical/zoneinfo/Asia/Ashgabat.ics new file mode 100644 index 000000000..b8a3f6336 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Ashgabat.ics @@ -0,0 +1,82 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Ashgabat +X-LIC-LOCATION:Asia/Ashgabat +BEGIN:STANDARD +TZOFFSETFROM:+035332 +TZOFFSETTO:+0400 +TZNAME:ASHT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:ASHT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:ASHST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:ASHT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:ASHST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:ASHT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:TMT +DTSTART:19911027T000000 +RDATE:19911027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:TMT +DTSTART:19920119T020000 +RDATE:19920119T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Baghdad.ics b/libkcal/libical/zoneinfo/Asia/Baghdad.ics new file mode 100644 index 000000000..f84e61670 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Baghdad.ics @@ -0,0 +1,86 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Baghdad +X-LIC-LOCATION:Asia/Baghdad +BEGIN:STANDARD +TZOFFSETFROM:+025740 +TZOFFSETTO:+025736 +TZNAME:BMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+025736 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19180101T000000 +RDATE:19180101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:ADT +DTSTART:19820501T000000 +RDATE:19820501T000000 +RDATE:19830331T000000 +RDATE:19840401T000000 +RDATE:19850401T000000 +RDATE:19860330T010000 +RDATE:19870329T010000 +RDATE:19880327T010000 +RDATE:19890326T010000 +RDATE:19900325T010000 +RDATE:19910401T030000 +RDATE:19920401T030000 +RDATE:19930401T030000 +RDATE:19940401T030000 +RDATE:19950401T030000 +RDATE:19960401T030000 +RDATE:19970401T030000 +RDATE:19980401T030000 +RDATE:19990401T030000 +RDATE:20000401T030000 +RDATE:20010401T030000 +RDATE:20020401T030000 +RDATE:20030401T030000 +RDATE:20040401T030000 +RDATE:20050401T030000 +RDATE:20060401T030000 +RDATE:20070401T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19841001T000000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19911001T040000 +RDATE:19921001T040000 +RDATE:19931001T040000 +RDATE:19941001T040000 +RDATE:19951001T040000 +RDATE:19961001T040000 +RDATE:19971001T040000 +RDATE:19981001T040000 +RDATE:19991001T040000 +RDATE:20001001T040000 +RDATE:20011001T040000 +RDATE:20021001T040000 +RDATE:20031001T040000 +RDATE:20041001T040000 +RDATE:20051001T040000 +RDATE:20061001T040000 +RDATE:20071001T040000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Bahrain.ics b/libkcal/libical/zoneinfo/Asia/Bahrain.ics new file mode 100644 index 000000000..312e64a92 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Bahrain.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Bahrain +X-LIC-LOCATION:Asia/Bahrain +BEGIN:STANDARD +TZOFFSETFROM:+032220 +TZOFFSETTO:+0400 +TZNAME:GST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19720601T000000 +RDATE:19720601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Baku.ics b/libkcal/libical/zoneinfo/Asia/Baku.ics new file mode 100644 index 000000000..d839342c3 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Baku.ics @@ -0,0 +1,119 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Baku +X-LIC-LOCATION:Asia/Baku +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AZST +DTSTART:19970330T040000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:AZT +DTSTART:19971026T050000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+031924 +TZOFFSETTO:+0300 +TZNAME:BAKT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:BAKT +DTSTART:19570301T000000 +RDATE:19570301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:BAKST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:BAKT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:BAKST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:AZST +DTSTART:19910830T000000 +RDATE:19910830T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:AZT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:AZST +DTSTART:19920328T230000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:AZT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19960101T000000 +RDATE:19970101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AZST +DTSTART:19960331T050000 +RDATE:19960331T050000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:AZT +DTSTART:19961027T060000 +RDATE:19961027T060000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Bangkok.ics b/libkcal/libical/zoneinfo/Asia/Bangkok.ics new file mode 100644 index 000000000..bc40b4ffc --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Bangkok.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Bangkok +X-LIC-LOCATION:Asia/Bangkok +BEGIN:STANDARD +TZOFFSETFROM:+064204 +TZOFFSETTO:+064204 +TZNAME:BMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+064204 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19200401T000000 +RDATE:19200401T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Beirut.ics b/libkcal/libical/zoneinfo/Asia/Beirut.ics new file mode 100644 index 000000000..92e51eb7b --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Beirut.ics @@ -0,0 +1,97 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Beirut +X-LIC-LOCATION:Asia/Beirut +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19930328T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19991031T000000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0222 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19200328T000000 +RDATE:19200328T000000 +RDATE:19210403T000000 +RDATE:19220326T000000 +RDATE:19230422T000000 +RDATE:19570501T000000 +RDATE:19580501T000000 +RDATE:19590501T000000 +RDATE:19600501T000000 +RDATE:19610501T000000 +RDATE:19720622T000000 +RDATE:19730501T000000 +RDATE:19740501T000000 +RDATE:19750501T000000 +RDATE:19760501T000000 +RDATE:19770501T000000 +RDATE:19780430T000000 +RDATE:19840501T000000 +RDATE:19850501T000000 +RDATE:19860501T000000 +RDATE:19870501T000000 +RDATE:19880601T000000 +RDATE:19890510T000000 +RDATE:19900501T000000 +RDATE:19910501T000000 +RDATE:19920501T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19201025T000000 +RDATE:19201025T000000 +RDATE:19211003T000000 +RDATE:19221008T000000 +RDATE:19230916T000000 +RDATE:19571001T000000 +RDATE:19581001T000000 +RDATE:19591001T000000 +RDATE:19601001T000000 +RDATE:19611001T000000 +RDATE:19721001T000000 +RDATE:19731001T000000 +RDATE:19741001T000000 +RDATE:19751001T000000 +RDATE:19761001T000000 +RDATE:19771001T000000 +RDATE:19780930T000000 +RDATE:19841016T000000 +RDATE:19851016T000000 +RDATE:19861016T000000 +RDATE:19871016T000000 +RDATE:19881016T000000 +RDATE:19891016T000000 +RDATE:19901016T000000 +RDATE:19911016T000000 +RDATE:19921004T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +RDATE:19980927T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Bishkek.ics b/libkcal/libical/zoneinfo/Asia/Bishkek.ics new file mode 100644 index 000000000..68ebab268 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Bishkek.ics @@ -0,0 +1,108 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Bishkek +X-LIC-LOCATION:Asia/Bishkek +BEGIN:STANDARD +TZOFFSETFROM:+045824 +TZOFFSETTO:+0500 +TZNAME:FRUT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:FRUT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:FRUST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:FRUT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:FRUST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:KGT +DTSTART:19910831T020000 +RDATE:19910831T020000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19971026T023000 +RDATE:19981025T023000 +RDATE:19991031T023000 +RDATE:20001029T023000 +RDATE:20011028T023000 +RDATE:20021027T023000 +RDATE:20031026T023000 +RDATE:20041031T023000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:KGST +DTSTART:19920412T000000 +RDATE:19920412T000000 +RDATE:19930411T000000 +RDATE:19940410T000000 +RDATE:19950409T000000 +RDATE:19960407T000000 +RDATE:19970330T023000 +RDATE:19980329T023000 +RDATE:19990328T023000 +RDATE:20000326T023000 +RDATE:20010325T023000 +RDATE:20020331T023000 +RDATE:20030330T023000 +RDATE:20040328T023000 +RDATE:20050327T023000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:KGT +DTSTART:20050812T000000 +RDATE:20050812T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Brunei.ics b/libkcal/libical/zoneinfo/Asia/Brunei.ics new file mode 100644 index 000000000..37a10a388 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Brunei.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Brunei +X-LIC-LOCATION:Asia/Brunei +BEGIN:STANDARD +TZOFFSETFROM:+073940 +TZOFFSETTO:+0730 +TZNAME:BNT +DTSTART:19260301T000000 +RDATE:19260301T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:BNT +DTSTART:19330101T000000 +RDATE:19330101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Calcutta.ics b/libkcal/libical/zoneinfo/Asia/Calcutta.ics new file mode 100644 index 000000000..8940799db --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Calcutta.ics @@ -0,0 +1,37 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20071016_1/Asia/Calcutta +X-LIC-LOCATION:Asia/Calcutta +BEGIN:STANDARD +TZOFFSETFROM:+055328 +TZOFFSETTO:+055320 +TZNAME:HMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+055320 +TZOFFSETTO:+0630 +TZNAME:BURT +DTSTART:19411001T000000 +RDATE:19411001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19420515T000000 +RDATE:19420515T000000 +RDATE:19451015T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0530 +TZOFFSETTO:+0630 +TZNAME:IST +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Choibalsan.ics b/libkcal/libical/zoneinfo/Asia/Choibalsan.ics new file mode 100644 index 000000000..b15a710f4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Choibalsan.ics @@ -0,0 +1,84 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Choibalsan +X-LIC-LOCATION:Asia/Choibalsan +BEGIN:STANDARD +TZOFFSETFROM:+0738 +TZOFFSETTO:+0700 +TZNAME:ULAT +DTSTART:19050801T000000 +RDATE:19050801T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ULAT +DTSTART:19780101T000000 +RDATE:19780101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+1000 +TZNAME:CHOST +DTSTART:19830401T000000 +RDATE:19830401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:CHOT +DTSTART:19831001T000000 +RDATE:19831001T000000 +RDATE:19840930T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900930T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +RDATE:19980927T000000 +RDATE:20010929T020000 +RDATE:20020928T020000 +RDATE:20030927T020000 +RDATE:20040925T020000 +RDATE:20050924T020000 +RDATE:20060930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:CHOST +DTSTART:19840401T000000 +RDATE:19840401T000000 +RDATE:19850331T000000 +RDATE:19860330T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19970330T000000 +RDATE:19980329T000000 +RDATE:20010428T020000 +RDATE:20020330T020000 +RDATE:20030329T020000 +RDATE:20040327T020000 +RDATE:20050326T020000 +RDATE:20060325T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Chongqing.ics b/libkcal/libical/zoneinfo/Asia/Chongqing.ics new file mode 100644 index 000000000..77ec16b6a --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Chongqing.ics @@ -0,0 +1,46 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Chongqing +X-LIC-LOCATION:Asia/Chongqing +BEGIN:STANDARD +TZOFFSETFROM:+070620 +TZOFFSETTO:+0700 +TZNAME:LONT +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19800501T000000 +RDATE:19800501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19860504T000000 +RDATE:19860504T000000 +RDATE:19870412T000000 +RDATE:19880410T000000 +RDATE:19890416T000000 +RDATE:19900415T000000 +RDATE:19910414T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19860914T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890917T000000 +RDATE:19900916T000000 +RDATE:19910915T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Colombo.ics b/libkcal/libical/zoneinfo/Asia/Colombo.ics new file mode 100644 index 000000000..de2cd619d --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Colombo.ics @@ -0,0 +1,64 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Colombo +X-LIC-LOCATION:Asia/Colombo +BEGIN:STANDARD +TZOFFSETFROM:+051924 +TZOFFSETTO:+051932 +TZNAME:MMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+051932 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19060101T000000 +RDATE:19060101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0530 +TZOFFSETTO:+0600 +TZNAME:IHST +DTSTART:19420105T000000 +RDATE:19420105T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0630 +TZNAME:IST +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19451016T020000 +RDATE:19451016T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0630 +TZNAME:LKT +DTSTART:19960525T000000 +RDATE:19960525T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0600 +TZNAME:LKT +DTSTART:19961026T003000 +RDATE:19961026T003000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:20060415T003000 +RDATE:20060415T003000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Damascus.ics b/libkcal/libical/zoneinfo/Asia/Damascus.ics new file mode 100644 index 000000000..017e0870e --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Damascus.ics @@ -0,0 +1,131 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Damascus +X-LIC-LOCATION:Asia/Damascus +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20080404T000000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20081001T000000 +RRULE:FREQ=YEARLY +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+022512 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19200418T020000 +RDATE:19200418T020000 +RDATE:19210417T020000 +RDATE:19220416T020000 +RDATE:19230415T020000 +RDATE:19620429T020000 +RDATE:19630501T020000 +RDATE:19640501T020000 +RDATE:19650501T020000 +RDATE:19660424T020000 +RDATE:19670501T020000 +RDATE:19680501T020000 +RDATE:19690501T020000 +RDATE:19700501T020000 +RDATE:19710501T020000 +RDATE:19720501T020000 +RDATE:19730501T020000 +RDATE:19740501T020000 +RDATE:19750501T020000 +RDATE:19760501T020000 +RDATE:19770501T020000 +RDATE:19780501T020000 +RDATE:19830409T020000 +RDATE:19840409T020000 +RDATE:19860216T020000 +RDATE:19870301T020000 +RDATE:19880315T020000 +RDATE:19890331T020000 +RDATE:19900401T020000 +RDATE:19910401T000000 +RDATE:19920408T000000 +RDATE:19930326T000000 +RDATE:19940401T000000 +RDATE:19950401T000000 +RDATE:19960401T000000 +RDATE:19970331T000000 +RDATE:19980330T000000 +RDATE:19990401T000000 +RDATE:20000401T000000 +RDATE:20010401T000000 +RDATE:20020401T000000 +RDATE:20030401T000000 +RDATE:20040401T000000 +RDATE:20050401T000000 +RDATE:20060401T000000 +RDATE:20070330T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19201003T020000 +RDATE:19201003T020000 +RDATE:19211002T020000 +RDATE:19221001T020000 +RDATE:19231007T020000 +RDATE:19621001T020000 +RDATE:19630930T020000 +RDATE:19641001T020000 +RDATE:19650930T020000 +RDATE:19661001T020000 +RDATE:19671001T020000 +RDATE:19681001T020000 +RDATE:19691001T020000 +RDATE:19701001T020000 +RDATE:19711001T020000 +RDATE:19721001T020000 +RDATE:19731001T020000 +RDATE:19741001T020000 +RDATE:19751001T020000 +RDATE:19761001T020000 +RDATE:19770901T020000 +RDATE:19780901T020000 +RDATE:19831001T020000 +RDATE:19841001T020000 +RDATE:19861009T020000 +RDATE:19871031T020000 +RDATE:19881031T020000 +RDATE:19891001T020000 +RDATE:19900930T020000 +RDATE:19911001T000000 +RDATE:19921001T000000 +RDATE:19930925T000000 +RDATE:19941001T000000 +RDATE:19951001T000000 +RDATE:19961001T000000 +RDATE:19971001T000000 +RDATE:19981001T000000 +RDATE:19991001T000000 +RDATE:20001001T000000 +RDATE:20011001T000000 +RDATE:20021001T000000 +RDATE:20031001T000000 +RDATE:20041001T000000 +RDATE:20051001T000000 +RDATE:20060922T000000 +RDATE:20071102T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Dhaka.ics b/libkcal/libical/zoneinfo/Asia/Dhaka.ics new file mode 100644 index 000000000..950f7c6d0 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Dhaka.ics @@ -0,0 +1,50 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Dhaka +X-LIC-LOCATION:Asia/Dhaka +BEGIN:STANDARD +TZOFFSETFROM:+060140 +TZOFFSETTO:+055320 +TZNAME:HMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+055320 +TZOFFSETTO:+0630 +TZNAME:BURT +DTSTART:19411001T000000 +RDATE:19411001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19420515T000000 +RDATE:19420515T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0630 +TZNAME:BURT +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0600 +TZNAME:DACT +DTSTART:19510930T000000 +RDATE:19510930T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:BDT +DTSTART:19710326T000000 +RDATE:19710326T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Dili.ics b/libkcal/libical/zoneinfo/Asia/Dili.ics new file mode 100644 index 000000000..d3783b054 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Dili.ics @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Dili +X-LIC-LOCATION:Asia/Dili +BEGIN:STANDARD +TZOFFSETFROM:+082220 +TZOFFSETTO:+0800 +TZNAME:TLT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420221T230000 +RDATE:19420221T230000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +TZNAME:TLT +DTSTART:19450923T000000 +RDATE:19450923T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CIT +DTSTART:19760503T000000 +RDATE:19760503T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:TLT +DTSTART:20000917T000000 +RDATE:20000917T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Dubai.ics b/libkcal/libical/zoneinfo/Asia/Dubai.ics new file mode 100644 index 000000000..899645138 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Dubai.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Dubai +X-LIC-LOCATION:Asia/Dubai +BEGIN:STANDARD +TZOFFSETFROM:+034112 +TZOFFSETTO:+0400 +TZNAME:GST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Dushanbe.ics b/libkcal/libical/zoneinfo/Asia/Dushanbe.ics new file mode 100644 index 000000000..6e5bb620b --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Dushanbe.ics @@ -0,0 +1,68 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Dushanbe +X-LIC-LOCATION:Asia/Dushanbe +BEGIN:STANDARD +TZOFFSETFROM:+043512 +TZOFFSETTO:+0500 +TZNAME:DUST +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:DUST +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:DUSST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:DUST +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:DUSST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:TJT +DTSTART:19910909T030000 +RDATE:19910909T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Gaza.ics b/libkcal/libical/zoneinfo/Asia/Gaza.ics new file mode 100644 index 000000000..d1d347196 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Gaza.ics @@ -0,0 +1,147 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Gaza +X-LIC-LOCATION:Asia/Gaza +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20060401T000000 +RRULE:FREQ=YEARLY +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20070913T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2TH +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+021752 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19001001T000000 +RDATE:19001001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EET +DTSTART:19400601T000000 +RDATE:19400601T000000 +RDATE:19430401T020000 +RDATE:19440401T000000 +RDATE:19450416T000000 +RDATE:19460416T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19421101T000000 +RDATE:19421101T000000 +RDATE:19431101T000000 +RDATE:19441101T000000 +RDATE:19451101T020000 +RDATE:19461101T000000 +RDATE:19571001T000000 +RDATE:19581001T000000 +RDATE:19590930T030000 +RDATE:19600930T030000 +RDATE:19610930T030000 +RDATE:19620930T030000 +RDATE:19630930T030000 +RDATE:19640930T030000 +RDATE:19650930T030000 +RDATE:19661001T030000 +RDATE:19960920T010000 +RDATE:19970919T010000 +RDATE:19980918T010000 +RDATE:19991015T000000 +RDATE:20001020T000000 +RDATE:20011019T000000 +RDATE:20021018T000000 +RDATE:20031017T000000 +RDATE:20041001T010000 +RDATE:20051004T020000 +RDATE:20060922T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19480515T000000 +RDATE:19480515T000000 +RDATE:19960101T000000 +RDATE:19990101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19570510T000000 +RDATE:19570510T000000 +RDATE:19580501T000000 +RDATE:19590501T010000 +RDATE:19600501T010000 +RDATE:19610501T010000 +RDATE:19620501T010000 +RDATE:19630501T010000 +RDATE:19640501T010000 +RDATE:19650501T010000 +RDATE:19660501T010000 +RDATE:19670501T010000 +RDATE:19960405T000000 +RDATE:19970404T000000 +RDATE:19980403T000000 +RDATE:19990416T000000 +RDATE:20000421T000000 +RDATE:20010420T000000 +RDATE:20020419T000000 +RDATE:20030418T000000 +RDATE:20040416T000000 +RDATE:20050415T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:IST +DTSTART:19670605T000000 +RDATE:19670605T000000 +RDATE:19741013T000000 +RDATE:19750831T000000 +RDATE:19850915T000000 +RDATE:19860907T000000 +RDATE:19870913T000000 +RDATE:19880903T000000 +RDATE:19890903T000000 +RDATE:19900826T000000 +RDATE:19910901T000000 +RDATE:19920906T000000 +RDATE:19930905T000000 +RDATE:19940828T000000 +RDATE:19950903T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:IDT +DTSTART:19740707T000000 +RDATE:19740707T000000 +RDATE:19750420T000000 +RDATE:19850414T000000 +RDATE:19860518T000000 +RDATE:19870415T000000 +RDATE:19880409T000000 +RDATE:19890430T000000 +RDATE:19900325T000000 +RDATE:19910324T000000 +RDATE:19920329T000000 +RDATE:19930402T000000 +RDATE:19940401T000000 +RDATE:19950331T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Harbin.ics b/libkcal/libical/zoneinfo/Asia/Harbin.ics new file mode 100644 index 000000000..c3e4213ec --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Harbin.ics @@ -0,0 +1,61 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Harbin +X-LIC-LOCATION:Asia/Harbin +BEGIN:STANDARD +TZOFFSETFROM:+082644 +TZOFFSETTO:+0830 +TZNAME:CHAT +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0830 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19320301T000000 +RDATE:19320301T000000 +RDATE:19800501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CHAT +DTSTART:19400101T000000 +RDATE:19400101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0830 +TZNAME:CHAT +DTSTART:19660501T000000 +RDATE:19660501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19860504T000000 +RDATE:19860504T000000 +RDATE:19870412T000000 +RDATE:19880410T000000 +RDATE:19890416T000000 +RDATE:19900415T000000 +RDATE:19910414T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19860914T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890917T000000 +RDATE:19900916T000000 +RDATE:19910915T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Ho_Chi_Minh.ics b/libkcal/libical/zoneinfo/Asia/Ho_Chi_Minh.ics new file mode 100644 index 000000000..47dd97491 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Ho_Chi_Minh.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Ho_Chi_Minh +X-LIC-LOCATION:Asia/Ho_Chi_Minh +BEGIN:STANDARD +TZOFFSETFROM:+070640 +TZOFFSETTO:+070620 +TZNAME:SMT +DTSTART:19060609T000000 +RDATE:19060609T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+070620 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19110311T000100 +RDATE:19110311T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ICT +DTSTART:19120501T000000 +RDATE:19120501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19310501T000000 +RDATE:19310501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Hong_Kong.ics b/libkcal/libical/zoneinfo/Asia/Hong_Kong.ics new file mode 100644 index 000000000..aab7b56b7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Hong_Kong.ics @@ -0,0 +1,95 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Hong_Kong +X-LIC-LOCATION:Asia/Hong_Kong +BEGIN:STANDARD +TZOFFSETFROM:+073636 +TZOFFSETTO:+0800 +TZNAME:HKT +DTSTART:19041030T000000 +RDATE:19041030T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:HKST +DTSTART:19460420T033000 +RDATE:19460420T033000 +RDATE:19470413T033000 +RDATE:19480502T033000 +RDATE:19490403T033000 +RDATE:19500402T033000 +RDATE:19510401T033000 +RDATE:19520406T033000 +RDATE:19530405T033000 +RDATE:19540321T033000 +RDATE:19550320T033000 +RDATE:19560318T033000 +RDATE:19570324T033000 +RDATE:19580323T033000 +RDATE:19590322T033000 +RDATE:19600320T033000 +RDATE:19610319T033000 +RDATE:19620318T033000 +RDATE:19630324T033000 +RDATE:19640322T033000 +RDATE:19650418T033000 +RDATE:19660417T033000 +RDATE:19670416T033000 +RDATE:19680421T033000 +RDATE:19690420T033000 +RDATE:19700419T033000 +RDATE:19710418T033000 +RDATE:19720416T033000 +RDATE:19730422T033000 +RDATE:19740421T033000 +RDATE:19750420T033000 +RDATE:19760418T033000 +RDATE:19770417T033000 +RDATE:19790513T033000 +RDATE:19800511T033000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:HKT +DTSTART:19461201T033000 +RDATE:19461201T033000 +RDATE:19471230T033000 +RDATE:19481031T033000 +RDATE:19491030T033000 +RDATE:19501029T033000 +RDATE:19511028T033000 +RDATE:19521026T033000 +RDATE:19531101T033000 +RDATE:19541031T033000 +RDATE:19551106T033000 +RDATE:19561104T033000 +RDATE:19571103T033000 +RDATE:19581102T033000 +RDATE:19591101T033000 +RDATE:19601106T033000 +RDATE:19611105T033000 +RDATE:19621104T033000 +RDATE:19631103T033000 +RDATE:19641101T033000 +RDATE:19651017T033000 +RDATE:19661016T033000 +RDATE:19671022T033000 +RDATE:19681020T033000 +RDATE:19691019T033000 +RDATE:19701018T033000 +RDATE:19711017T033000 +RDATE:19721022T033000 +RDATE:19731021T033000 +RDATE:19741020T033000 +RDATE:19751019T033000 +RDATE:19761017T033000 +RDATE:19771016T033000 +RDATE:19791021T033000 +RDATE:19801019T033000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Hovd.ics b/libkcal/libical/zoneinfo/Asia/Hovd.ics new file mode 100644 index 000000000..7cd0a3a79 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Hovd.ics @@ -0,0 +1,78 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Hovd +X-LIC-LOCATION:Asia/Hovd +BEGIN:STANDARD +TZOFFSETFROM:+060636 +TZOFFSETTO:+0600 +TZNAME:HOVT +DTSTART:19050801T000000 +RDATE:19050801T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:HOVT +DTSTART:19780101T000000 +RDATE:19780101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:HOVST +DTSTART:19830401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T000000 +RDATE:19860330T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19970330T000000 +RDATE:19980329T000000 +RDATE:20010428T020000 +RDATE:20020330T020000 +RDATE:20030329T020000 +RDATE:20040327T020000 +RDATE:20050326T020000 +RDATE:20060325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:HOVT +DTSTART:19831001T000000 +RDATE:19831001T000000 +RDATE:19840930T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900930T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +RDATE:19980927T000000 +RDATE:20010929T020000 +RDATE:20020928T020000 +RDATE:20030927T020000 +RDATE:20040925T020000 +RDATE:20050924T020000 +RDATE:20060930T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Irkutsk.ics b/libkcal/libical/zoneinfo/Asia/Irkutsk.ics new file mode 100644 index 000000000..df1ce38b3 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Irkutsk.ics @@ -0,0 +1,95 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Irkutsk +X-LIC-LOCATION:Asia/Irkutsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:IRKST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:IRKT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+065720 +TZOFFSETTO:+065720 +TZNAME:IMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+065720 +TZOFFSETTO:+0700 +TZNAME:IRKT +DTSTART:19200125T000000 +RDATE:19200125T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:IRKT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:IRKST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:IRKT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0800 +TZNAME:IRKST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:IRKT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Istanbul.ics b/libkcal/libical/zoneinfo/Asia/Istanbul.ics new file mode 100644 index 000000000..fa0d27526 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Istanbul.ics @@ -0,0 +1,187 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Istanbul +X-LIC-LOCATION:Asia/Istanbul +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20070325T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20071028T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015552 +TZOFFSETTO:+015656 +TZNAME:IMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015656 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19101001T000000 +RDATE:19101001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19160501T000000 +RDATE:19160501T000000 +RDATE:19200328T000000 +RDATE:19210403T000000 +RDATE:19220326T000000 +RDATE:19240513T000000 +RDATE:19250501T000000 +RDATE:19400630T000000 +RDATE:19401201T000000 +RDATE:19420401T000000 +RDATE:19450402T000000 +RDATE:19460601T000000 +RDATE:19470420T000000 +RDATE:19480418T000000 +RDATE:19490410T000000 +RDATE:19500419T000000 +RDATE:19510422T000000 +RDATE:19620715T000000 +RDATE:19640515T000000 +RDATE:19700503T000000 +RDATE:19710502T000000 +RDATE:19720507T000000 +RDATE:19730603T010000 +RDATE:19740331T020000 +RDATE:19750330T000000 +RDATE:19760601T000000 +RDATE:19770403T000000 +RDATE:19780402T000000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19910331T010000 +RDATE:19920329T010000 +RDATE:19930328T010000 +RDATE:19940327T010000 +RDATE:19950326T010000 +RDATE:19960331T010000 +RDATE:19970330T010000 +RDATE:19980329T010000 +RDATE:19990328T010000 +RDATE:20000326T010000 +RDATE:20010325T010000 +RDATE:20020331T010000 +RDATE:20030330T010000 +RDATE:20040328T010000 +RDATE:20050327T010000 +RDATE:20060326T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19161001T000000 +RDATE:19161001T000000 +RDATE:19201025T000000 +RDATE:19211003T000000 +RDATE:19221008T000000 +RDATE:19241001T000000 +RDATE:19251001T000000 +RDATE:19401005T000000 +RDATE:19410921T000000 +RDATE:19421101T000000 +RDATE:19451008T000000 +RDATE:19461001T000000 +RDATE:19471005T000000 +RDATE:19481003T000000 +RDATE:19491002T000000 +RDATE:19501008T000000 +RDATE:19511008T000000 +RDATE:19621008T000000 +RDATE:19641001T000000 +RDATE:19701004T000000 +RDATE:19711003T000000 +RDATE:19721008T000000 +RDATE:19731104T030000 +RDATE:19741103T050000 +RDATE:19751026T000000 +RDATE:19761031T000000 +RDATE:19771016T000000 +RDATE:19850928T000000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19930926T020000 +RDATE:19940925T020000 +RDATE:19950924T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:TRST +DTSTART:19781015T000000 +RDATE:19781015T000000 +RDATE:19800406T030000 +RDATE:19810329T030000 +RDATE:19820328T030000 +RDATE:19830731T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:TRST +DTSTART:19790401T030000 +RDATE:19790401T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:TRT +DTSTART:19791015T000000 +RDATE:19791015T000000 +RDATE:19801013T000000 +RDATE:19811012T000000 +RDATE:19821011T000000 +RDATE:19831002T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19850420T000000 +RDATE:19850420T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20070101T000000 +RDATE:20070101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Jakarta.ics b/libkcal/libical/zoneinfo/Asia/Jakarta.ics new file mode 100644 index 000000000..e5037cc0d --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Jakarta.ics @@ -0,0 +1,64 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Jakarta +X-LIC-LOCATION:Asia/Jakarta +BEGIN:STANDARD +TZOFFSETFROM:+070712 +TZOFFSETTO:+070712 +TZNAME:JMT +DTSTART:18670810T000000 +RDATE:18670810T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+070712 +TZOFFSETTO:+0720 +TZNAME:JAVT +DTSTART:19231231T234712 +RDATE:19231231T234712 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0720 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19321101T000000 +RDATE:19321101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420323T000000 +RDATE:19420323T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19450923T000000 +RDATE:19450923T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:WIT +DTSTART:19480501T000000 +RDATE:19480501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19500501T000000 +RDATE:19500501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0700 +TZNAME:WIT +DTSTART:19640101T000000 +RDATE:19640101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Jayapura.ics b/libkcal/libical/zoneinfo/Asia/Jayapura.ics new file mode 100644 index 000000000..dc56e9afd --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Jayapura.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Jayapura +X-LIC-LOCATION:Asia/Jayapura +BEGIN:STANDARD +TZOFFSETFROM:+092248 +TZOFFSETTO:+0900 +TZNAME:EIT +DTSTART:19321101T000000 +RDATE:19321101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19440901T000000 +RDATE:19440901T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0930 +TZOFFSETTO:+0900 +TZNAME:EIT +DTSTART:19640101T000000 +RDATE:19640101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Jerusalem.ics b/libkcal/libical/zoneinfo/Asia/Jerusalem.ics new file mode 100644 index 000000000..3c1149ebc --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Jerusalem.ics @@ -0,0 +1,187 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Jerusalem +X-LIC-LOCATION:Asia/Jerusalem +BEGIN:STANDARD +TZOFFSETFROM:+022056 +TZOFFSETTO:+022040 +TZNAME:JMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+022040 +TZOFFSETTO:+0200 +TZNAME:IST +DTSTART:19180101T000000 +RDATE:19180101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:IDT +DTSTART:19400601T000000 +RDATE:19400601T000000 +RDATE:19430401T020000 +RDATE:19440401T000000 +RDATE:19450416T000000 +RDATE:19460416T020000 +RDATE:19490501T000000 +RDATE:19500416T000000 +RDATE:19510401T000000 +RDATE:19520420T020000 +RDATE:19530412T020000 +RDATE:19540613T000000 +RDATE:19550611T020000 +RDATE:19560603T000000 +RDATE:19570429T020000 +RDATE:19740707T000000 +RDATE:19750420T000000 +RDATE:19850414T000000 +RDATE:19860518T000000 +RDATE:19870415T000000 +RDATE:19880409T000000 +RDATE:19890430T000000 +RDATE:19900325T000000 +RDATE:19910324T000000 +RDATE:19920329T000000 +RDATE:19930402T000000 +RDATE:19940401T000000 +RDATE:19950331T000000 +RDATE:19960315T000000 +RDATE:19970321T000000 +RDATE:19980320T000000 +RDATE:19990402T020000 +RDATE:20000414T020000 +RDATE:20010409T010000 +RDATE:20020329T010000 +RDATE:20030328T010000 +RDATE:20040407T010000 +RDATE:20050401T020000 +RDATE:20060331T020000 +RDATE:20070330T020000 +RDATE:20080328T020000 +RDATE:20090327T020000 +RDATE:20100326T020000 +RDATE:20110401T020000 +RDATE:20120330T020000 +RDATE:20130329T020000 +RDATE:20140328T020000 +RDATE:20150327T020000 +RDATE:20160401T020000 +RDATE:20170331T020000 +RDATE:20180330T020000 +RDATE:20190329T020000 +RDATE:20200327T020000 +RDATE:20210326T020000 +RDATE:20220401T020000 +RDATE:20230331T020000 +RDATE:20240329T020000 +RDATE:20250328T020000 +RDATE:20260327T020000 +RDATE:20270326T020000 +RDATE:20280331T020000 +RDATE:20290330T020000 +RDATE:20300329T020000 +RDATE:20310328T020000 +RDATE:20320326T020000 +RDATE:20330401T020000 +RDATE:20340331T020000 +RDATE:20350330T020000 +RDATE:20360328T020000 +RDATE:20370327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:IST +DTSTART:19421101T000000 +RDATE:19421101T000000 +RDATE:19431101T000000 +RDATE:19441101T000000 +RDATE:19451101T020000 +RDATE:19461101T000000 +RDATE:19481101T020000 +RDATE:19491101T020000 +RDATE:19500915T030000 +RDATE:19511111T030000 +RDATE:19521019T030000 +RDATE:19530913T030000 +RDATE:19540912T000000 +RDATE:19550911T000000 +RDATE:19560930T030000 +RDATE:19570922T000000 +RDATE:19741013T000000 +RDATE:19750831T000000 +RDATE:19850915T000000 +RDATE:19860907T000000 +RDATE:19870913T000000 +RDATE:19880903T000000 +RDATE:19890903T000000 +RDATE:19900826T000000 +RDATE:19910901T000000 +RDATE:19920906T000000 +RDATE:19930905T000000 +RDATE:19940828T000000 +RDATE:19950903T000000 +RDATE:19960916T000000 +RDATE:19970914T000000 +RDATE:19980906T000000 +RDATE:19990903T020000 +RDATE:20001006T010000 +RDATE:20010924T010000 +RDATE:20021007T010000 +RDATE:20031003T010000 +RDATE:20040922T010000 +RDATE:20051009T020000 +RDATE:20061001T020000 +RDATE:20070916T020000 +RDATE:20081005T020000 +RDATE:20090927T020000 +RDATE:20100912T020000 +RDATE:20111002T020000 +RDATE:20120923T020000 +RDATE:20130908T020000 +RDATE:20140928T020000 +RDATE:20150920T020000 +RDATE:20161009T020000 +RDATE:20170924T020000 +RDATE:20180916T020000 +RDATE:20191006T020000 +RDATE:20200927T020000 +RDATE:20210912T020000 +RDATE:20221002T020000 +RDATE:20230924T020000 +RDATE:20241006T020000 +RDATE:20250928T020000 +RDATE:20260920T020000 +RDATE:20271010T020000 +RDATE:20280924T020000 +RDATE:20290916T020000 +RDATE:20301006T020000 +RDATE:20310921T020000 +RDATE:20320912T020000 +RDATE:20331002T020000 +RDATE:20340917T020000 +RDATE:20351007T020000 +RDATE:20360928T020000 +RDATE:20370913T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0400 +TZNAME:IDDT +DTSTART:19480523T000000 +RDATE:19480523T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:IDT +DTSTART:19480901T000000 +RDATE:19480901T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kabul.ics b/libkcal/libical/zoneinfo/Asia/Kabul.ics new file mode 100644 index 000000000..60f7d8922 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kabul.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kabul +X-LIC-LOCATION:Asia/Kabul +BEGIN:STANDARD +TZOFFSETFROM:+043648 +TZOFFSETTO:+0400 +TZNAME:AFT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0430 +TZNAME:AFT +DTSTART:19450101T000000 +RDATE:19450101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kamchatka.ics b/libkcal/libical/zoneinfo/Asia/Kamchatka.ics new file mode 100644 index 000000000..9e5b1c30e --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kamchatka.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kamchatka +X-LIC-LOCATION:Asia/Kamchatka +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:PETST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:PETT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+103436 +TZOFFSETTO:+1100 +TZNAME:PETT +DTSTART:19221110T000000 +RDATE:19221110T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:PETT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:PETST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:PETT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1200 +TZNAME:PETST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:PETT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Karachi.ics b/libkcal/libical/zoneinfo/Asia/Karachi.ics new file mode 100644 index 000000000..e07bc9add --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Karachi.ics @@ -0,0 +1,57 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Karachi +X-LIC-LOCATION:Asia/Karachi +BEGIN:STANDARD +TZOFFSETFROM:+042812 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19070101T000000 +RDATE:19070101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0530 +TZOFFSETTO:+0630 +TZNAME:IST +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19451015T000000 +RDATE:19451015T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0500 +TZNAME:KART +DTSTART:19510930T000000 +RDATE:19510930T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:PKT +DTSTART:19710326T000000 +RDATE:19710326T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:PKST +DTSTART:20020407T000100 +RDATE:20020407T000100 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:PKT +DTSTART:20021006T000100 +RDATE:20021006T000100 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kashgar.ics b/libkcal/libical/zoneinfo/Asia/Kashgar.ics new file mode 100644 index 000000000..6ddbce63b --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kashgar.ics @@ -0,0 +1,53 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kashgar +X-LIC-LOCATION:Asia/Kashgar +BEGIN:STANDARD +TZOFFSETFROM:+050356 +TZOFFSETTO:+0530 +TZNAME:KAST +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0500 +TZNAME:KAST +DTSTART:19400101T000000 +RDATE:19400101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19800501T000000 +RDATE:19800501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19860504T000000 +RDATE:19860504T000000 +RDATE:19870412T000000 +RDATE:19880410T000000 +RDATE:19890416T000000 +RDATE:19900415T000000 +RDATE:19910414T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19860914T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890917T000000 +RDATE:19900916T000000 +RDATE:19910915T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Katmandu.ics b/libkcal/libical/zoneinfo/Asia/Katmandu.ics new file mode 100644 index 000000000..c469dea22 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Katmandu.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Katmandu +X-LIC-LOCATION:Asia/Katmandu +BEGIN:STANDARD +TZOFFSETFROM:+054116 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0545 +TZNAME:NPT +DTSTART:19860101T000000 +RDATE:19860101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kolkata.ics b/libkcal/libical/zoneinfo/Asia/Kolkata.ics new file mode 100644 index 000000000..d170cb4f8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kolkata.ics @@ -0,0 +1,37 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kolkata +X-LIC-LOCATION:Asia/Kolkata +BEGIN:STANDARD +TZOFFSETFROM:+055328 +TZOFFSETTO:+055320 +TZNAME:HMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+055320 +TZOFFSETTO:+0630 +TZNAME:BURT +DTSTART:19411001T000000 +RDATE:19411001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19420515T000000 +RDATE:19420515T000000 +RDATE:19451015T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0530 +TZOFFSETTO:+0630 +TZNAME:IST +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Krasnoyarsk.ics b/libkcal/libical/zoneinfo/Asia/Krasnoyarsk.ics new file mode 100644 index 000000000..aab8fa269 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Krasnoyarsk.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Krasnoyarsk +X-LIC-LOCATION:Asia/Krasnoyarsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:KRAST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:KRAT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+061120 +TZOFFSETTO:+0600 +TZNAME:KRAT +DTSTART:19200106T000000 +RDATE:19200106T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:KRAT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:KRAST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:KRAT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0700 +TZNAME:KRAST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:KRAT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kuala_Lumpur.ics b/libkcal/libical/zoneinfo/Asia/Kuala_Lumpur.ics new file mode 100644 index 000000000..733236637 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kuala_Lumpur.ics @@ -0,0 +1,64 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kuala_Lumpur +X-LIC-LOCATION:Asia/Kuala_Lumpur +BEGIN:STANDARD +TZOFFSETFROM:+064646 +TZOFFSETTO:+065525 +TZNAME:SMT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+065525 +TZOFFSETTO:+0700 +TZNAME:MALT +DTSTART:19050601T000000 +RDATE:19050601T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0720 +TZNAME:MALST +DTSTART:19330101T000000 +RDATE:19330101T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0720 +TZOFFSETTO:+0720 +TZNAME:MALT +DTSTART:19360101T000000 +RDATE:19360101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0720 +TZOFFSETTO:+0730 +TZNAME:MALT +DTSTART:19410901T000000 +RDATE:19410901T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420216T000000 +RDATE:19420216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0730 +TZNAME:MALT +DTSTART:19450912T000000 +RDATE:19450912T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:MYT +DTSTART:19820101T000000 +RDATE:19820101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kuching.ics b/libkcal/libical/zoneinfo/Asia/Kuching.ics new file mode 100644 index 000000000..73d837956 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kuching.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kuching +X-LIC-LOCATION:Asia/Kuching +BEGIN:STANDARD +TZOFFSETFROM:+072120 +TZOFFSETTO:+0730 +TZNAME:BORT +DTSTART:19260301T000000 +RDATE:19260301T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:BORT +DTSTART:19330101T000000 +RDATE:19330101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0820 +TZNAME:BORTST +DTSTART:19350914T000000 +RDATE:19350914T000000 +RDATE:19360914T000000 +RDATE:19370914T000000 +RDATE:19380914T000000 +RDATE:19390914T000000 +RDATE:19400914T000000 +RDATE:19410914T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0820 +TZOFFSETTO:+0800 +TZNAME:BORT +DTSTART:19351214T000000 +RDATE:19351214T000000 +RDATE:19361214T000000 +RDATE:19371214T000000 +RDATE:19381214T000000 +RDATE:19391214T000000 +RDATE:19401214T000000 +RDATE:19411214T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420216T000000 +RDATE:19420216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:BORT +DTSTART:19450912T000000 +RDATE:19450912T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0800 +TZNAME:MYT +DTSTART:19820101T000000 +RDATE:19820101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Kuwait.ics b/libkcal/libical/zoneinfo/Asia/Kuwait.ics new file mode 100644 index 000000000..6c974846f --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Kuwait.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Kuwait +X-LIC-LOCATION:Asia/Kuwait +BEGIN:STANDARD +TZOFFSETFROM:+031156 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Macau.ics b/libkcal/libical/zoneinfo/Asia/Macau.ics new file mode 100644 index 000000000..b56839419 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Macau.ics @@ -0,0 +1,74 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Macau +X-LIC-LOCATION:Asia/Macau +BEGIN:STANDARD +TZOFFSETFROM:+073420 +TZOFFSETTO:+0800 +TZNAME:MOT +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:MOST +DTSTART:19610319T033000 +RDATE:19610319T033000 +RDATE:19620318T033000 +RDATE:19630317T000000 +RDATE:19640322T033000 +RDATE:19650321T000000 +RDATE:19660417T033000 +RDATE:19670416T033000 +RDATE:19680421T033000 +RDATE:19690420T033000 +RDATE:19700419T033000 +RDATE:19710418T033000 +RDATE:19720416T000000 +RDATE:19730415T000000 +RDATE:19740421T000000 +RDATE:19750420T033000 +RDATE:19760418T033000 +RDATE:19770417T033000 +RDATE:19780416T000000 +RDATE:19790415T000000 +RDATE:19800420T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:MOT +DTSTART:19611105T033000 +RDATE:19611105T033000 +RDATE:19621104T033000 +RDATE:19631103T033000 +RDATE:19641101T033000 +RDATE:19651031T000000 +RDATE:19661016T033000 +RDATE:19671022T033000 +RDATE:19681020T033000 +RDATE:19691019T033000 +RDATE:19701018T033000 +RDATE:19711017T033000 +RDATE:19721015T000000 +RDATE:19731021T000000 +RDATE:19741020T033000 +RDATE:19751019T033000 +RDATE:19761017T033000 +RDATE:19771016T033000 +RDATE:19781015T000000 +RDATE:19791021T000000 +RDATE:19801019T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19991220T000000 +RDATE:19991220T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Magadan.ics b/libkcal/libical/zoneinfo/Asia/Magadan.ics new file mode 100644 index 000000000..e20093ca8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Magadan.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Magadan +X-LIC-LOCATION:Asia/Magadan +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:MAGST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:MAGT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+100312 +TZOFFSETTO:+1000 +TZNAME:MAGT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:MAGT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:MAGST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:MAGT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1100 +TZNAME:MAGST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:MAGT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Makassar.ics b/libkcal/libical/zoneinfo/Asia/Makassar.ics new file mode 100644 index 000000000..50edb2056 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Makassar.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Makassar +X-LIC-LOCATION:Asia/Makassar +BEGIN:STANDARD +TZOFFSETFROM:+075736 +TZOFFSETTO:+075736 +TZNAME:MMT +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+075736 +TZOFFSETTO:+0800 +TZNAME:CIT +DTSTART:19321101T000000 +RDATE:19321101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420209T000000 +RDATE:19420209T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CIT +DTSTART:19450923T000000 +RDATE:19450923T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Manila.ics b/libkcal/libical/zoneinfo/Asia/Manila.ics new file mode 100644 index 000000000..5e8daf63d --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Manila.ics @@ -0,0 +1,48 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Manila +X-LIC-LOCATION:Asia/Manila +BEGIN:STANDARD +TZOFFSETFROM:-1556 +TZOFFSETTO:+0804 +TZNAME:LMT +DTSTART:18441231T000000 +RDATE:18441231T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0804 +TZOFFSETTO:+0800 +TZNAME:PHT +DTSTART:18990511T000000 +RDATE:18990511T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:PHST +DTSTART:19361101T000000 +RDATE:19361101T000000 +RDATE:19540412T000000 +RDATE:19780322T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:PHT +DTSTART:19370201T000000 +RDATE:19370201T000000 +RDATE:19441101T000000 +RDATE:19540701T000000 +RDATE:19780921T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420501T000000 +RDATE:19420501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Muscat.ics b/libkcal/libical/zoneinfo/Asia/Muscat.ics new file mode 100644 index 000000000..8039649d2 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Muscat.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Muscat +X-LIC-LOCATION:Asia/Muscat +BEGIN:STANDARD +TZOFFSETFROM:+035420 +TZOFFSETTO:+0400 +TZNAME:GST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Nicosia.ics b/libkcal/libical/zoneinfo/Asia/Nicosia.ics new file mode 100644 index 000000000..b0dd7b97c --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Nicosia.ics @@ -0,0 +1,95 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Nicosia +X-LIC-LOCATION:Asia/Nicosia +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19981025T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19990328T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+021328 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19211114T000000 +RDATE:19211114T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19750413T000000 +RDATE:19750413T000000 +RDATE:19760515T000000 +RDATE:19770403T000000 +RDATE:19780402T000000 +RDATE:19790401T000000 +RDATE:19800406T000000 +RDATE:19810329T000000 +RDATE:19820328T000000 +RDATE:19830327T000000 +RDATE:19840325T000000 +RDATE:19850331T000000 +RDATE:19860330T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19970330T000000 +RDATE:19980329T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19751012T000000 +RDATE:19751012T000000 +RDATE:19761011T000000 +RDATE:19770925T000000 +RDATE:19781002T000000 +RDATE:19790930T000000 +RDATE:19800928T000000 +RDATE:19810927T000000 +RDATE:19820926T000000 +RDATE:19830925T000000 +RDATE:19840930T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900930T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19980901T000000 +RDATE:19980901T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Novosibirsk.ics b/libkcal/libical/zoneinfo/Asia/Novosibirsk.ics new file mode 100644 index 000000000..02e7a844d --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Novosibirsk.ics @@ -0,0 +1,96 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Novosibirsk +X-LIC-LOCATION:Asia/Novosibirsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:NOVST +DTSTART:19940327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:NOVT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+053140 +TZOFFSETTO:+0600 +TZNAME:NOVT +DTSTART:19191214T060000 +RDATE:19191214T060000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:NOVT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:NOVST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +RDATE:19930328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:NOVT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0700 +TZNAME:NOVST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:NOVT +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:NOVST +DTSTART:19930523T000000 +RDATE:19930523T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Omsk.ics b/libkcal/libical/zoneinfo/Asia/Omsk.ics new file mode 100644 index 000000000..ebce6e367 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Omsk.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Omsk +X-LIC-LOCATION:Asia/Omsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:OMSST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:OMST +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+045336 +TZOFFSETTO:+0500 +TZNAME:OMST +DTSTART:19191114T000000 +RDATE:19191114T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:OMST +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:OMSST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:OMST +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:OMSST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:OMST +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Oral.ics b/libkcal/libical/zoneinfo/Asia/Oral.ics new file mode 100644 index 000000000..8b954d613 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Oral.ics @@ -0,0 +1,143 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Oral +X-LIC-LOCATION:Asia/Oral +BEGIN:STANDARD +TZOFFSETFROM:+032524 +TZOFFSETTO:+0400 +TZNAME:URAT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:URAT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:URAST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:URAT +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:URAST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:URAT +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:URAST +DTSTART:19890326T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:URAT +DTSTART:19890924T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:URAST +DTSTART:19900325T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:URAT +DTSTART:19910101T000000 +RDATE:19910101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:ORAT +DTSTART:19911216T000000 +RDATE:19911216T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:ORAST +DTSTART:19920328T230000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:ORAT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:ORAT +DTSTART:20050315T000000 +RDATE:20050315T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Phnom_Penh.ics b/libkcal/libical/zoneinfo/Asia/Phnom_Penh.ics new file mode 100644 index 000000000..d1afc8203 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Phnom_Penh.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Phnom_Penh +X-LIC-LOCATION:Asia/Phnom_Penh +BEGIN:STANDARD +TZOFFSETFROM:+065940 +TZOFFSETTO:+070620 +TZNAME:SMT +DTSTART:19060609T000000 +RDATE:19060609T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+070620 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19110311T000100 +RDATE:19110311T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ICT +DTSTART:19120501T000000 +RDATE:19120501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19310501T000000 +RDATE:19310501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Pontianak.ics b/libkcal/libical/zoneinfo/Asia/Pontianak.ics new file mode 100644 index 000000000..01b5b44db --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Pontianak.ics @@ -0,0 +1,64 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Pontianak +X-LIC-LOCATION:Asia/Pontianak +BEGIN:STANDARD +TZOFFSETFROM:+071720 +TZOFFSETTO:+071720 +TZNAME:PMT +DTSTART:19080501T000000 +RDATE:19080501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+071720 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19321101T000000 +RDATE:19321101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420129T000000 +RDATE:19420129T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19450923T000000 +RDATE:19450923T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:WIT +DTSTART:19480501T000000 +RDATE:19480501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0730 +TZNAME:WIT +DTSTART:19500501T000000 +RDATE:19500501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:CIT +DTSTART:19640101T000000 +RDATE:19640101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:WIT +DTSTART:19880101T000000 +RDATE:19880101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Pyongyang.ics b/libkcal/libical/zoneinfo/Asia/Pyongyang.ics new file mode 100644 index 000000000..9d22c6f45 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Pyongyang.ics @@ -0,0 +1,44 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Pyongyang +X-LIC-LOCATION:Asia/Pyongyang +BEGIN:STANDARD +TZOFFSETFROM:+0823 +TZOFFSETTO:+0830 +TZNAME:KST +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0830 +TZOFFSETTO:+0900 +TZNAME:KST +DTSTART:19041201T000000 +RDATE:19041201T000000 +RDATE:19320101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0830 +TZNAME:KST +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:KST +DTSTART:19540321T000000 +RDATE:19540321T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:KST +DTSTART:19610810T000000 +RDATE:19610810T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Qatar.ics b/libkcal/libical/zoneinfo/Asia/Qatar.ics new file mode 100644 index 000000000..d545c5cdd --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Qatar.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Qatar +X-LIC-LOCATION:Asia/Qatar +BEGIN:STANDARD +TZOFFSETFROM:+032608 +TZOFFSETTO:+0400 +TZNAME:GST +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19720601T000000 +RDATE:19720601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Qyzylorda.ics b/libkcal/libical/zoneinfo/Asia/Qyzylorda.ics new file mode 100644 index 000000000..d39249781 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Qyzylorda.ics @@ -0,0 +1,132 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Qyzylorda +X-LIC-LOCATION:Asia/Qyzylorda +BEGIN:STANDARD +TZOFFSETFROM:+042152 +TZOFFSETTO:+0400 +TZNAME:KIZT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:KIZT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:KIZST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:KIZT +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:KIZST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:KIZT +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:KIZT +DTSTART:19910101T000000 +RDATE:19910101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:QYZT +DTSTART:19911216T000000 +RDATE:19911216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:QYZT +DTSTART:19920119T020000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:QYZST +DTSTART:19920328T230000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:QYZT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T030000 +RDATE:19991031T030000 +RDATE:20001029T030000 +RDATE:20011028T030000 +RDATE:20021027T030000 +RDATE:20031026T030000 +RDATE:20041031T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:QYZT +DTSTART:20050315T000000 +RDATE:20050315T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Rangoon.ics b/libkcal/libical/zoneinfo/Asia/Rangoon.ics new file mode 100644 index 000000000..5aa260ae7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Rangoon.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Rangoon +X-LIC-LOCATION:Asia/Rangoon +BEGIN:STANDARD +TZOFFSETFROM:+062440 +TZOFFSETTO:+062436 +TZNAME:RMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+062436 +TZOFFSETTO:+0630 +TZNAME:BURT +DTSTART:19200101T000000 +RDATE:19200101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0630 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420501T000000 +RDATE:19420501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0630 +TZNAME:MMT +DTSTART:19450503T000000 +RDATE:19450503T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Riyadh.ics b/libkcal/libical/zoneinfo/Asia/Riyadh.ics new file mode 100644 index 000000000..355371359 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Riyadh.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Riyadh +X-LIC-LOCATION:Asia/Riyadh +BEGIN:STANDARD +TZOFFSETFROM:+030652 +TZOFFSETTO:+0300 +TZNAME:AST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Saigon.ics b/libkcal/libical/zoneinfo/Asia/Saigon.ics new file mode 100644 index 000000000..f7b076ae7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Saigon.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20071016_1/Asia/Saigon +X-LIC-LOCATION:Asia/Saigon +BEGIN:STANDARD +TZOFFSETFROM:+070640 +TZOFFSETTO:+070620 +TZNAME:SMT +DTSTART:19060609T000000 +RDATE:19060609T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+070620 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19110311T000100 +RDATE:19110311T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ICT +DTSTART:19120501T000000 +RDATE:19120501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19310501T000000 +RDATE:19310501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Sakhalin.ics b/libkcal/libical/zoneinfo/Asia/Sakhalin.ics new file mode 100644 index 000000000..2d7ac40d4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Sakhalin.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Sakhalin +X-LIC-LOCATION:Asia/Sakhalin +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:SAKT +DTSTART:19971026T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:SAKST +DTSTART:19980329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+093048 +TZOFFSETTO:+0900 +TZNAME:CJT +DTSTART:19050823T000000 +RDATE:19050823T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19380101T000000 +RDATE:19380101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+1100 +TZNAME:SAKT +DTSTART:19450825T000000 +RDATE:19450825T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:SAKST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:SAKT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1100 +TZNAME:SAKST +DTSTART:19910331T020000 +RDATE:19910331T020000 +RDATE:19970330T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:SAKT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:SAKT +DTSTART:19920119T020000 +RDATE:19920119T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Samarkand.ics b/libkcal/libical/zoneinfo/Asia/Samarkand.ics new file mode 100644 index 000000000..5aa8f36bd --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Samarkand.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Samarkand +X-LIC-LOCATION:Asia/Samarkand +BEGIN:STANDARD +TZOFFSETFROM:+042712 +TZOFFSETTO:+0400 +TZNAME:SAMT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:SAMT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:SAMST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:TAST +DTSTART:19811001T000000 +RDATE:19811001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:SAMST +DTSTART:19820401T000000 +RDATE:19820401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:SAMT +DTSTART:19821001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:UZST +DTSTART:19910901T000000 +RDATE:19910901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:UZT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:UZT +DTSTART:19920101T000000 +RDATE:19920101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Seoul.ics b/libkcal/libical/zoneinfo/Asia/Seoul.ics new file mode 100644 index 000000000..98334fe12 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Seoul.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Seoul +X-LIC-LOCATION:Asia/Seoul +BEGIN:STANDARD +TZOFFSETFROM:+082752 +TZOFFSETTO:+0830 +TZNAME:KST +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0830 +TZOFFSETTO:+0900 +TZNAME:KST +DTSTART:19041201T000000 +RDATE:19041201T000000 +RDATE:19320101T000000 +RDATE:19681001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0830 +TZNAME:KST +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:KST +DTSTART:19540321T000000 +RDATE:19540321T000000 +RDATE:19600913T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:KDT +DTSTART:19600515T000000 +RDATE:19600515T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0830 +TZNAME:KST +DTSTART:19610810T000000 +RDATE:19610810T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:KDT +DTSTART:19870510T000000 +RDATE:19870510T000000 +RDATE:19880508T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:KST +DTSTART:19871011T000000 +RDATE:19871011T000000 +RDATE:19881009T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Shanghai.ics b/libkcal/libical/zoneinfo/Asia/Shanghai.ics new file mode 100644 index 000000000..f58f26505 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Shanghai.ics @@ -0,0 +1,50 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Shanghai +X-LIC-LOCATION:Asia/Shanghai +BEGIN:STANDARD +TZOFFSETFROM:+080552 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19400603T000000 +RDATE:19400603T000000 +RDATE:19410316T000000 +RDATE:19860504T000000 +RDATE:19870412T000000 +RDATE:19880410T000000 +RDATE:19890416T000000 +RDATE:19900415T000000 +RDATE:19910414T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19401001T000000 +RDATE:19401001T000000 +RDATE:19411001T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890917T000000 +RDATE:19900916T000000 +RDATE:19910915T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19490101T000000 +RDATE:19490101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Singapore.ics b/libkcal/libical/zoneinfo/Asia/Singapore.ics new file mode 100644 index 000000000..ff2b61720 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Singapore.ics @@ -0,0 +1,71 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Singapore +X-LIC-LOCATION:Asia/Singapore +BEGIN:STANDARD +TZOFFSETFROM:+065525 +TZOFFSETTO:+065525 +TZNAME:SMT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+065525 +TZOFFSETTO:+0700 +TZNAME:MALT +DTSTART:19050601T000000 +RDATE:19050601T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0700 +TZOFFSETTO:+0720 +TZNAME:MALST +DTSTART:19330101T000000 +RDATE:19330101T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0720 +TZOFFSETTO:+0720 +TZNAME:MALT +DTSTART:19360101T000000 +RDATE:19360101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0720 +TZOFFSETTO:+0730 +TZNAME:MALT +DTSTART:19410901T000000 +RDATE:19410901T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420216T000000 +RDATE:19420216T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0730 +TZNAME:MALT +DTSTART:19450912T000000 +RDATE:19450912T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0730 +TZNAME:SGT +DTSTART:19650809T000000 +RDATE:19650809T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0730 +TZOFFSETTO:+0800 +TZNAME:SGT +DTSTART:19820101T000000 +RDATE:19820101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Taipei.ics b/libkcal/libical/zoneinfo/Asia/Taipei.ics new file mode 100644 index 000000000..327a5dc3d --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Taipei.ics @@ -0,0 +1,67 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Taipei +X-LIC-LOCATION:Asia/Taipei +BEGIN:STANDARD +TZOFFSETFROM:+0806 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:18960101T000000 +RDATE:18960101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19450501T000000 +RDATE:19450501T000000 +RDATE:19460501T000000 +RDATE:19470501T000000 +RDATE:19480501T000000 +RDATE:19490501T000000 +RDATE:19500501T000000 +RDATE:19510501T000000 +RDATE:19520301T000000 +RDATE:19530401T000000 +RDATE:19540401T000000 +RDATE:19550401T000000 +RDATE:19560401T000000 +RDATE:19570401T000000 +RDATE:19580401T000000 +RDATE:19590401T000000 +RDATE:19600601T000000 +RDATE:19610601T000000 +RDATE:19740401T000000 +RDATE:19750401T000000 +RDATE:19800630T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19451001T000000 +RDATE:19451001T000000 +RDATE:19461001T000000 +RDATE:19471001T000000 +RDATE:19481001T000000 +RDATE:19491001T000000 +RDATE:19501001T000000 +RDATE:19511001T000000 +RDATE:19521101T000000 +RDATE:19531101T000000 +RDATE:19541101T000000 +RDATE:19551001T000000 +RDATE:19561001T000000 +RDATE:19571001T000000 +RDATE:19581001T000000 +RDATE:19591001T000000 +RDATE:19601001T000000 +RDATE:19611001T000000 +RDATE:19741001T000000 +RDATE:19751001T000000 +RDATE:19800930T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Tashkent.ics b/libkcal/libical/zoneinfo/Asia/Tashkent.ics new file mode 100644 index 000000000..c4cfe3b36 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Tashkent.ics @@ -0,0 +1,82 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Tashkent +X-LIC-LOCATION:Asia/Tashkent +BEGIN:STANDARD +TZOFFSETFROM:+043712 +TZOFFSETTO:+0500 +TZNAME:TAST +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:TAST +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0700 +TZNAME:TASST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0600 +TZNAME:TAST +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:TASST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0600 +TZOFFSETTO:+0600 +TZNAME:UZST +DTSTART:19910901T000000 +RDATE:19910901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:UZT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:UZT +DTSTART:19920101T000000 +RDATE:19920101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Tbilisi.ics b/libkcal/libical/zoneinfo/Asia/Tbilisi.ics new file mode 100644 index 000000000..f08ef59d6 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Tbilisi.ics @@ -0,0 +1,159 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Tbilisi +X-LIC-LOCATION:Asia/Tbilisi +BEGIN:STANDARD +TZOFFSETFROM:+025916 +TZOFFSETTO:+025916 +TZNAME:TBMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+025916 +TZOFFSETTO:+0300 +TZNAME:TBIT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:TBIT +DTSTART:19570301T000000 +RDATE:19570301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:TBIST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:TBIT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:TBIST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:GEST +DTSTART:19910409T000000 +RDATE:19910409T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:GET +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:20041031T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:GET +DTSTART:19920101T000000 +RDATE:19920101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:GEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:GET +DTSTART:19940925T000000 +RDATE:19940925T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:GEST +DTSTART:19950326T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19980329T000000 +RDATE:19990328T000000 +RDATE:20000326T000000 +RDATE:20010325T000000 +RDATE:20020331T000000 +RDATE:20030330T000000 +RDATE:20040328T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:GET +DTSTART:19950924T000000 +RDATE:19950924T000000 +RDATE:19971026T000000 +RDATE:19981025T000000 +RDATE:19991031T000000 +RDATE:20001029T000000 +RDATE:20011028T000000 +RDATE:20021027T000000 +RDATE:20031026T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:GEST +DTSTART:19961027T000000 +RDATE:19961027T000000 +RDATE:19970330T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:GEST +DTSTART:20040627T000000 +RDATE:20040627T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:GET +DTSTART:20050327T020000 +RDATE:20050327T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Tehran.ics b/libkcal/libical/zoneinfo/Asia/Tehran.ics new file mode 100644 index 000000000..d09cc9f3c --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Tehran.ics @@ -0,0 +1,156 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Tehran +X-LIC-LOCATION:Asia/Tehran +BEGIN:STANDARD +TZOFFSETFROM:+032544 +TZOFFSETTO:+032544 +TZNAME:TMT +DTSTART:19160101T000000 +RDATE:19160101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+032544 +TZOFFSETTO:+0330 +TZNAME:IRST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0330 +TZOFFSETTO:+0400 +TZNAME:IRST +DTSTART:19771101T000000 +RDATE:19771101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:IRDT +DTSTART:19780321T000000 +RDATE:19780321T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:IRST +DTSTART:19781021T000000 +RDATE:19781021T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0330 +TZNAME:IRST +DTSTART:19790101T000000 +RDATE:19790101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0330 +TZOFFSETTO:+0430 +TZNAME:IRDT +DTSTART:19790321T000000 +RDATE:19790321T000000 +RDATE:19800321T000000 +RDATE:19910503T000000 +RDATE:19920322T000000 +RDATE:19930322T000000 +RDATE:19940322T000000 +RDATE:19950322T000000 +RDATE:19960321T000000 +RDATE:19970322T000000 +RDATE:19980322T000000 +RDATE:19990322T000000 +RDATE:20000321T000000 +RDATE:20010322T000000 +RDATE:20020322T000000 +RDATE:20030322T000000 +RDATE:20040321T000000 +RDATE:20050322T000000 +RDATE:20080321T000000 +RDATE:20090322T000000 +RDATE:20100322T000000 +RDATE:20110322T000000 +RDATE:20120321T000000 +RDATE:20130322T000000 +RDATE:20140322T000000 +RDATE:20150322T000000 +RDATE:20160321T000000 +RDATE:20170322T000000 +RDATE:20180322T000000 +RDATE:20190322T000000 +RDATE:20200321T000000 +RDATE:20210322T000000 +RDATE:20220322T000000 +RDATE:20230322T000000 +RDATE:20240321T000000 +RDATE:20250322T000000 +RDATE:20260322T000000 +RDATE:20270322T000000 +RDATE:20280321T000000 +RDATE:20290321T000000 +RDATE:20300322T000000 +RDATE:20310322T000000 +RDATE:20320321T000000 +RDATE:20330321T000000 +RDATE:20340322T000000 +RDATE:20350322T000000 +RDATE:20360321T000000 +RDATE:20370321T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0430 +TZOFFSETTO:+0330 +TZNAME:IRST +DTSTART:19790919T000000 +RDATE:19790919T000000 +RDATE:19800923T000000 +RDATE:19910922T000000 +RDATE:19920922T000000 +RDATE:19930922T000000 +RDATE:19940922T000000 +RDATE:19950922T000000 +RDATE:19960921T000000 +RDATE:19970922T000000 +RDATE:19980922T000000 +RDATE:19990922T000000 +RDATE:20000921T000000 +RDATE:20010922T000000 +RDATE:20020922T000000 +RDATE:20030922T000000 +RDATE:20040921T000000 +RDATE:20050922T000000 +RDATE:20080921T000000 +RDATE:20090922T000000 +RDATE:20100922T000000 +RDATE:20110922T000000 +RDATE:20120921T000000 +RDATE:20130922T000000 +RDATE:20140922T000000 +RDATE:20150922T000000 +RDATE:20160921T000000 +RDATE:20170922T000000 +RDATE:20180922T000000 +RDATE:20190922T000000 +RDATE:20200921T000000 +RDATE:20210922T000000 +RDATE:20220922T000000 +RDATE:20230922T000000 +RDATE:20240921T000000 +RDATE:20250922T000000 +RDATE:20260922T000000 +RDATE:20270922T000000 +RDATE:20280921T000000 +RDATE:20290921T000000 +RDATE:20300922T000000 +RDATE:20310922T000000 +RDATE:20320921T000000 +RDATE:20330921T000000 +RDATE:20340922T000000 +RDATE:20350922T000000 +RDATE:20360921T000000 +RDATE:20370921T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Thimphu.ics b/libkcal/libical/zoneinfo/Asia/Thimphu.ics new file mode 100644 index 000000000..1a6f56209 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Thimphu.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Thimphu +X-LIC-LOCATION:Asia/Thimphu +BEGIN:STANDARD +TZOFFSETFROM:+055836 +TZOFFSETTO:+0530 +TZNAME:IST +DTSTART:19470815T000000 +RDATE:19470815T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0530 +TZOFFSETTO:+0600 +TZNAME:BTT +DTSTART:19871001T000000 +RDATE:19871001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Tokyo.ics b/libkcal/libical/zoneinfo/Asia/Tokyo.ics new file mode 100644 index 000000000..e59ad3f28 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Tokyo.ics @@ -0,0 +1,49 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Tokyo +X-LIC-LOCATION:Asia/Tokyo +BEGIN:STANDARD +TZOFFSETFROM:+091859 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:18880101T001859 +RDATE:18880101T001859 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +TZNAME:CJT +DTSTART:18960101T000000 +RDATE:18960101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19380101T000000 +RDATE:19380101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:JDT +DTSTART:19480502T020000 +RDATE:19480502T020000 +RDATE:19490403T020000 +RDATE:19500507T020000 +RDATE:19510506T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19480911T020000 +RDATE:19480911T020000 +RDATE:19490910T020000 +RDATE:19500909T020000 +RDATE:19510908T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Ulaanbaatar.ics b/libkcal/libical/zoneinfo/Asia/Ulaanbaatar.ics new file mode 100644 index 000000000..cd6d869aa --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Ulaanbaatar.ics @@ -0,0 +1,78 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Ulaanbaatar +X-LIC-LOCATION:Asia/Ulaanbaatar +BEGIN:STANDARD +TZOFFSETFROM:+070732 +TZOFFSETTO:+0700 +TZNAME:ULAT +DTSTART:19050801T000000 +RDATE:19050801T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ULAT +DTSTART:19780101T000000 +RDATE:19780101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:ULAST +DTSTART:19830401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T000000 +RDATE:19860330T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19970330T000000 +RDATE:19980329T000000 +RDATE:20010428T020000 +RDATE:20020330T020000 +RDATE:20030329T020000 +RDATE:20040327T020000 +RDATE:20050326T020000 +RDATE:20060325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:ULAT +DTSTART:19831001T000000 +RDATE:19831001T000000 +RDATE:19840930T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900930T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +RDATE:19980927T000000 +RDATE:20010929T020000 +RDATE:20020928T020000 +RDATE:20030927T020000 +RDATE:20040925T020000 +RDATE:20050924T020000 +RDATE:20060930T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Urumqi.ics b/libkcal/libical/zoneinfo/Asia/Urumqi.ics new file mode 100644 index 000000000..fc4318b27 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Urumqi.ics @@ -0,0 +1,46 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Urumqi +X-LIC-LOCATION:Asia/Urumqi +BEGIN:STANDARD +TZOFFSETFROM:+055020 +TZOFFSETTO:+0600 +TZNAME:URUT +DTSTART:19280101T000000 +RDATE:19280101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19800501T000000 +RDATE:19800501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:CDT +DTSTART:19860504T000000 +RDATE:19860504T000000 +RDATE:19870412T000000 +RDATE:19880410T000000 +RDATE:19890416T000000 +RDATE:19900415T000000 +RDATE:19910414T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:CST +DTSTART:19860914T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890917T000000 +RDATE:19900916T000000 +RDATE:19910915T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Vientiane.ics b/libkcal/libical/zoneinfo/Asia/Vientiane.ics new file mode 100644 index 000000000..2b6f13093 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Vientiane.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Vientiane +X-LIC-LOCATION:Asia/Vientiane +BEGIN:STANDARD +TZOFFSETFROM:+065024 +TZOFFSETTO:+070620 +TZNAME:SMT +DTSTART:19060609T000000 +RDATE:19060609T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+070620 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19110311T000100 +RDATE:19110311T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0700 +TZOFFSETTO:+0800 +TZNAME:ICT +DTSTART:19120501T000000 +RDATE:19120501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:ICT +DTSTART:19310501T000000 +RDATE:19310501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Vladivostok.ics b/libkcal/libical/zoneinfo/Asia/Vladivostok.ics new file mode 100644 index 000000000..313a97e0e --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Vladivostok.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Vladivostok +X-LIC-LOCATION:Asia/Vladivostok +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:VLAST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:VLAT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+084744 +TZOFFSETTO:+0900 +TZNAME:VLAT +DTSTART:19221115T000000 +RDATE:19221115T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:VLAT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:VLAST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:VLAT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:VLASST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:VLAST +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Yakutsk.ics b/libkcal/libical/zoneinfo/Asia/Yakutsk.ics new file mode 100644 index 000000000..ee4c85000 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Yakutsk.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Yakutsk +X-LIC-LOCATION:Asia/Yakutsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:YAKST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:YAKT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+083840 +TZOFFSETTO:+0800 +TZNAME:YAKT +DTSTART:19191215T000000 +RDATE:19191215T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:YAKT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:YAKST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:YAKT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +TZNAME:YAKST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:YAKT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Yekaterinburg.ics b/libkcal/libical/zoneinfo/Asia/Yekaterinburg.ics new file mode 100644 index 000000000..1ef52437f --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Yekaterinburg.ics @@ -0,0 +1,106 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Yekaterinburg +X-LIC-LOCATION:Asia/Yekaterinburg +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:YEKST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:YEKT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+040224 +TZOFFSETTO:+0400 +TZNAME:SVET +DTSTART:19190715T040000 +RDATE:19190715T040000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:SVET +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:SVEST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:SVET +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0500 +TZNAME:SVEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:SVET +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:YEKT +DTSTART:19920119T020000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:YEKST +DTSTART:19920328T230000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0600 +TZOFFSETTO:+0500 +TZNAME:YEKT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Asia/Yerevan.ics b/libkcal/libical/zoneinfo/Asia/Yerevan.ics new file mode 100644 index 000000000..570932170 --- /dev/null +++ b/libkcal/libical/zoneinfo/Asia/Yerevan.ics @@ -0,0 +1,110 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Asia/Yerevan +X-LIC-LOCATION:Asia/Yerevan +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:AMST +DTSTART:19970330T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:AMT +DTSTART:19971026T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0258 +TZOFFSETTO:+0300 +TZNAME:YERT +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:YERT +DTSTART:19570301T000000 +RDATE:19570301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:YERST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:YERT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:YERST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:AMST +DTSTART:19910923T000000 +RDATE:19910923T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:AMT +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:AMST +DTSTART:19920328T230000 +RDATE:19920328T230000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:AMT +DTSTART:19950924T030000 +RDATE:19950924T030000 +RDATE:19970101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Azores.ics b/libkcal/libical/zoneinfo/Atlantic/Azores.ics new file mode 100644 index 000000000..e5734da8a --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Azores.ics @@ -0,0 +1,223 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Azores +X-LIC-LOCATION:Atlantic/Azores +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:AZOST +DTSTART:19940327T000000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:AZOT +DTSTART:19961027T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-014240 +TZOFFSETTO:-015432 +TZNAME:HMT +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-015432 +TZOFFSETTO:-0200 +TZNAME:AZOT +DTSTART:19110524T000000 +RDATE:19110524T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:AZOST +DTSTART:19160617T230000 +RDATE:19160617T230000 +RDATE:19170228T230000 +RDATE:19180301T230000 +RDATE:19190228T230000 +RDATE:19200229T230000 +RDATE:19210228T230000 +RDATE:19240416T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19310418T230000 +RDATE:19320402T230000 +RDATE:19340407T230000 +RDATE:19350330T230000 +RDATE:19360418T230000 +RDATE:19370403T230000 +RDATE:19380326T230000 +RDATE:19390415T230000 +RDATE:19400224T230000 +RDATE:19410405T230000 +RDATE:19420314T230000 +RDATE:19430313T230000 +RDATE:19440311T230000 +RDATE:19450310T230000 +RDATE:19460406T230000 +RDATE:19470406T020000 +RDATE:19480404T020000 +RDATE:19490403T020000 +RDATE:19510401T020000 +RDATE:19520406T020000 +RDATE:19530405T020000 +RDATE:19540404T020000 +RDATE:19550403T020000 +RDATE:19560401T020000 +RDATE:19570407T020000 +RDATE:19580406T020000 +RDATE:19590405T020000 +RDATE:19600403T020000 +RDATE:19610402T020000 +RDATE:19620401T020000 +RDATE:19630407T020000 +RDATE:19640405T020000 +RDATE:19650404T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:-0200 +TZNAME:AZOT +DTSTART:19161101T010000 +RDATE:19161101T010000 +RDATE:19171015T000000 +RDATE:19181015T000000 +RDATE:19191015T000000 +RDATE:19201015T000000 +RDATE:19211015T000000 +RDATE:19241015T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391119T000000 +RDATE:19401006T000000 +RDATE:19411006T000000 +RDATE:19421025T000000 +RDATE:19431031T000000 +RDATE:19441029T000000 +RDATE:19451028T000000 +RDATE:19461006T000000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19511007T030000 +RDATE:19521005T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611001T030000 +RDATE:19621007T030000 +RDATE:19631006T030000 +RDATE:19641004T030000 +RDATE:19651003T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:AZOMT +DTSTART:19420425T230000 +RDATE:19420425T230000 +RDATE:19430417T230000 +RDATE:19440422T230000 +RDATE:19450421T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:AZOST +DTSTART:19420816T000000 +RDATE:19420816T000000 +RDATE:19430829T000000 +RDATE:19440827T000000 +RDATE:19450826T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:AZOT +DTSTART:19660403T020000 +RDATE:19660403T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:AZOST +DTSTART:19770327T000000 +RDATE:19770327T000000 +RDATE:19780402T000000 +RDATE:19790401T000000 +RDATE:19800330T000000 +RDATE:19810329T010000 +RDATE:19820328T010000 +RDATE:19830327T020000 +RDATE:19840325T010000 +RDATE:19850331T010000 +RDATE:19860330T010000 +RDATE:19870329T010000 +RDATE:19880327T010000 +RDATE:19890326T010000 +RDATE:19900325T010000 +RDATE:19910331T010000 +RDATE:19920329T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:AZOT +DTSTART:19770925T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T020000 +RDATE:19800928T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19910929T020000 +RDATE:19930926T010000 +RDATE:19940925T010000 +RDATE:19950924T010000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19920927T020000 +RDATE:19920927T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:AZOST +DTSTART:19930328T010000 +RDATE:19930328T010000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Bermuda.ics b/libkcal/libical/zoneinfo/Atlantic/Bermuda.ics new file mode 100644 index 000000000..dab6b8122 --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Bermuda.ics @@ -0,0 +1,114 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Bermuda +X-LIC-LOCATION:Atlantic/Bermuda +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:20070311T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:20071104T020000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-041904 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19300101T020000 +RDATE:19300101T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:ADT +DTSTART:19740428T020000 +RDATE:19740428T020000 +RDATE:19750427T020000 +RDATE:19760425T020000 +RDATE:19770424T020000 +RDATE:19780430T020000 +RDATE:19790429T020000 +RDATE:19800427T020000 +RDATE:19810426T020000 +RDATE:19820425T020000 +RDATE:19830424T020000 +RDATE:19840429T020000 +RDATE:19850428T020000 +RDATE:19860427T020000 +RDATE:19870405T020000 +RDATE:19880403T020000 +RDATE:19890402T020000 +RDATE:19900401T020000 +RDATE:19910407T020000 +RDATE:19920405T020000 +RDATE:19930404T020000 +RDATE:19940403T020000 +RDATE:19950402T020000 +RDATE:19960407T020000 +RDATE:19970406T020000 +RDATE:19980405T020000 +RDATE:19990404T020000 +RDATE:20000402T020000 +RDATE:20010401T020000 +RDATE:20020407T020000 +RDATE:20030406T020000 +RDATE:20040404T020000 +RDATE:20050403T020000 +RDATE:20060402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19741027T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0400 +TZNAME:AST +DTSTART:19760101T000000 +RDATE:19760101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Canary.ics b/libkcal/libical/zoneinfo/Atlantic/Canary.ics new file mode 100644 index 000000000..66c83a27f --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Canary.ics @@ -0,0 +1,72 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Canary +X-LIC-LOCATION:Atlantic/Canary +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-010136 +TZOFFSETTO:-0100 +TZNAME:CANT +DTSTART:19220301T000000 +RDATE:19220301T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19460930T010000 +RDATE:19460930T010000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19800406T000000 +RDATE:19800406T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19800928T010000 +RDATE:19800928T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19800928T020000 +RDATE:19800928T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19930926T020000 +RDATE:19940925T020000 +RDATE:19950924T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Cape_Verde.ics b/libkcal/libical/zoneinfo/Atlantic/Cape_Verde.ics new file mode 100644 index 000000000..0d82f58ef --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Cape_Verde.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Cape_Verde +X-LIC-LOCATION:Atlantic/Cape_Verde +BEGIN:STANDARD +TZOFFSETFROM:-013404 +TZOFFSETTO:-0200 +TZNAME:CVT +DTSTART:19070101T000000 +RDATE:19070101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:CVST +DTSTART:19420901T000000 +RDATE:19420901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:-0200 +TZNAME:CVT +DTSTART:19451015T000000 +RDATE:19451015T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0100 +TZNAME:CVT +DTSTART:19751125T020000 +RDATE:19751125T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Faroe.ics b/libkcal/libical/zoneinfo/Atlantic/Faroe.ics new file mode 100644 index 000000000..56820c518 --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Faroe.ics @@ -0,0 +1,57 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Faroe +X-LIC-LOCATION:Atlantic/Faroe +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-002704 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19080111T000000 +RDATE:19080111T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19810101T000000 +RDATE:19810101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19810927T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19930926T020000 +RDATE:19940925T020000 +RDATE:19950924T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Jan_Mayen.ics b/libkcal/libical/zoneinfo/Atlantic/Jan_Mayen.ics new file mode 100644 index 000000000..eb92a1e99 --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Jan_Mayen.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20071016_1/Atlantic/Jan_Mayen +X-LIC-LOCATION:Atlantic/Jan_Mayen +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0043 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160522T010000 +RDATE:19160522T010000 +RDATE:19400810T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19590315T020000 +RDATE:19600320T020000 +RDATE:19610319T020000 +RDATE:19620318T020000 +RDATE:19630317T020000 +RDATE:19640315T020000 +RDATE:19650425T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19160930T000000 +RDATE:19160930T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19451001T030000 +RDATE:19590920T030000 +RDATE:19600918T030000 +RDATE:19610917T030000 +RDATE:19620916T030000 +RDATE:19630915T030000 +RDATE:19640920T030000 +RDATE:19650919T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Madeira.ics b/libkcal/libical/zoneinfo/Atlantic/Madeira.ics new file mode 100644 index 000000000..7c60c58ba --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Madeira.ics @@ -0,0 +1,201 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Madeira +X-LIC-LOCATION:Atlantic/Madeira +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19840325T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-010736 +TZOFFSETTO:-010736 +TZNAME:FMT +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-010736 +TZOFFSETTO:-0100 +TZNAME:MADT +DTSTART:19110524T000000 +RDATE:19110524T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:MADST +DTSTART:19160617T230000 +RDATE:19160617T230000 +RDATE:19170228T230000 +RDATE:19180301T230000 +RDATE:19190228T230000 +RDATE:19200229T230000 +RDATE:19210228T230000 +RDATE:19240416T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19310418T230000 +RDATE:19320402T230000 +RDATE:19340407T230000 +RDATE:19350330T230000 +RDATE:19360418T230000 +RDATE:19370403T230000 +RDATE:19380326T230000 +RDATE:19390415T230000 +RDATE:19400224T230000 +RDATE:19410405T230000 +RDATE:19420314T230000 +RDATE:19430313T230000 +RDATE:19440311T230000 +RDATE:19450310T230000 +RDATE:19460406T230000 +RDATE:19470406T020000 +RDATE:19480404T020000 +RDATE:19490403T020000 +RDATE:19510401T020000 +RDATE:19520406T020000 +RDATE:19530405T020000 +RDATE:19540404T020000 +RDATE:19550403T020000 +RDATE:19560401T020000 +RDATE:19570407T020000 +RDATE:19580406T020000 +RDATE:19590405T020000 +RDATE:19600403T020000 +RDATE:19610402T020000 +RDATE:19620401T020000 +RDATE:19630407T020000 +RDATE:19640405T020000 +RDATE:19650404T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:MADT +DTSTART:19161101T010000 +RDATE:19161101T010000 +RDATE:19171015T000000 +RDATE:19181015T000000 +RDATE:19191015T000000 +RDATE:19201015T000000 +RDATE:19211015T000000 +RDATE:19241015T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391119T000000 +RDATE:19401006T000000 +RDATE:19411006T000000 +RDATE:19421025T000000 +RDATE:19431031T000000 +RDATE:19441029T000000 +RDATE:19451028T000000 +RDATE:19461006T000000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19511007T030000 +RDATE:19521005T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611001T030000 +RDATE:19621007T030000 +RDATE:19631006T030000 +RDATE:19641004T030000 +RDATE:19651003T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:MADMT +DTSTART:19420425T230000 +RDATE:19420425T230000 +RDATE:19430417T230000 +RDATE:19440422T230000 +RDATE:19450421T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:MADST +DTSTART:19420816T000000 +RDATE:19420816T000000 +RDATE:19430829T000000 +RDATE:19440827T000000 +RDATE:19450826T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19660403T020000 +RDATE:19660403T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19770327T000000 +RDATE:19770327T000000 +RDATE:19780402T000000 +RDATE:19790401T000000 +RDATE:19800330T000000 +RDATE:19810329T010000 +RDATE:19820328T010000 +RDATE:19830327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19770925T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T020000 +RDATE:19800928T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19930926T020000 +RDATE:19940925T020000 +RDATE:19950924T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Reykjavik.ics b/libkcal/libical/zoneinfo/Atlantic/Reykjavik.ics new file mode 100644 index 000000000..adbde80fb --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Reykjavik.ics @@ -0,0 +1,103 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Reykjavik +X-LIC-LOCATION:Atlantic/Reykjavik +BEGIN:STANDARD +TZOFFSETFROM:-012724 +TZOFFSETTO:-012748 +TZNAME:RMT +DTSTART:18370101T000000 +RDATE:18370101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-012748 +TZOFFSETTO:-0100 +TZNAME:IST +DTSTART:19080101T000000 +RDATE:19080101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:ISST +DTSTART:19170219T230000 +RDATE:19170219T230000 +RDATE:19180219T230000 +RDATE:19390429T230000 +RDATE:19400225T020000 +RDATE:19410302T010000 +RDATE:19420308T010000 +RDATE:19430307T010000 +RDATE:19440305T010000 +RDATE:19450304T010000 +RDATE:19460303T010000 +RDATE:19470406T010000 +RDATE:19480404T010000 +RDATE:19490403T010000 +RDATE:19500402T010000 +RDATE:19510401T010000 +RDATE:19520406T010000 +RDATE:19530405T010000 +RDATE:19540404T010000 +RDATE:19550403T010000 +RDATE:19560401T010000 +RDATE:19570407T010000 +RDATE:19580406T010000 +RDATE:19590405T010000 +RDATE:19600403T010000 +RDATE:19610402T010000 +RDATE:19620401T010000 +RDATE:19630407T010000 +RDATE:19640405T010000 +RDATE:19650404T010000 +RDATE:19660403T010000 +RDATE:19670402T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:-0100 +TZNAME:IST +DTSTART:19171021T010000 +RDATE:19171021T010000 +RDATE:19181116T010000 +RDATE:19391129T020000 +RDATE:19401103T020000 +RDATE:19411102T020000 +RDATE:19421025T020000 +RDATE:19431024T020000 +RDATE:19441022T020000 +RDATE:19451028T020000 +RDATE:19461027T020000 +RDATE:19471026T020000 +RDATE:19481024T020000 +RDATE:19491030T020000 +RDATE:19501022T020000 +RDATE:19511028T020000 +RDATE:19521026T020000 +RDATE:19531025T020000 +RDATE:19541024T020000 +RDATE:19551023T020000 +RDATE:19561028T020000 +RDATE:19571027T020000 +RDATE:19581026T020000 +RDATE:19591025T020000 +RDATE:19601023T020000 +RDATE:19611022T020000 +RDATE:19621028T020000 +RDATE:19631027T020000 +RDATE:19641025T020000 +RDATE:19651024T020000 +RDATE:19661023T020000 +RDATE:19671029T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19680407T010000 +RDATE:19680407T010000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/South_Georgia.ics b/libkcal/libical/zoneinfo/Atlantic/South_Georgia.ics new file mode 100644 index 000000000..0c6baa90c --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/South_Georgia.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/South_Georgia +X-LIC-LOCATION:Atlantic/South_Georgia +BEGIN:STANDARD +TZOFFSETFROM:-022608 +TZOFFSETTO:-0200 +TZNAME:GST +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/St_Helena.ics b/libkcal/libical/zoneinfo/Atlantic/St_Helena.ics new file mode 100644 index 000000000..c61644bde --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/St_Helena.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/St_Helena +X-LIC-LOCATION:Atlantic/St_Helena +BEGIN:STANDARD +TZOFFSETFROM:-002248 +TZOFFSETTO:-002248 +TZNAME:JMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-002248 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19510101T000000 +RDATE:19510101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Atlantic/Stanley.ics b/libkcal/libical/zoneinfo/Atlantic/Stanley.ics new file mode 100644 index 000000000..08e74197f --- /dev/null +++ b/libkcal/libical/zoneinfo/Atlantic/Stanley.ics @@ -0,0 +1,120 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Atlantic/Stanley +X-LIC-LOCATION:Atlantic/Stanley +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:FKT +DTSTART:20010415T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:FKST +DTSTART:20010902T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-035124 +TZOFFSETTO:-035124 +TZNAME:SMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-035124 +TZOFFSETTO:-0400 +TZNAME:FKT +DTSTART:19120312T000000 +RDATE:19120312T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:FKST +DTSTART:19370926T000000 +RDATE:19370926T000000 +RDATE:19380925T000000 +RDATE:19391001T000000 +RDATE:19400929T000000 +RDATE:19410928T000000 +RDATE:19420927T000000 +RDATE:19860914T000000 +RDATE:19870913T000000 +RDATE:19880911T000000 +RDATE:19890910T000000 +RDATE:19900909T000000 +RDATE:19910915T000000 +RDATE:19920913T000000 +RDATE:19930912T000000 +RDATE:19940911T000000 +RDATE:19950910T000000 +RDATE:19960915T000000 +RDATE:19970914T000000 +RDATE:19980913T000000 +RDATE:19990912T000000 +RDATE:20000910T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:FKT +DTSTART:19380320T000000 +RDATE:19380320T000000 +RDATE:19390319T000000 +RDATE:19400324T000000 +RDATE:19410323T000000 +RDATE:19420322T000000 +RDATE:19430101T000000 +RDATE:19860420T000000 +RDATE:19870419T000000 +RDATE:19880417T000000 +RDATE:19890416T000000 +RDATE:19900422T000000 +RDATE:19910421T000000 +RDATE:19920419T000000 +RDATE:19930418T000000 +RDATE:19940417T000000 +RDATE:19950416T000000 +RDATE:19960421T000000 +RDATE:19970420T000000 +RDATE:19980419T000000 +RDATE:19990418T000000 +RDATE:20000416T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0400 +TZOFFSETTO:-0300 +TZNAME:FKT +DTSTART:19830501T000000 +RDATE:19830501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0200 +TZNAME:FKST +DTSTART:19830925T000000 +RDATE:19830925T000000 +RDATE:19840916T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:FKT +DTSTART:19840429T000000 +RDATE:19840429T000000 +RDATE:19850428T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0300 +TZOFFSETTO:-0300 +TZNAME:FKST +DTSTART:19850915T000000 +RDATE:19850915T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Adelaide.ics b/libkcal/libical/zoneinfo/Australia/Adelaide.ics new file mode 100644 index 000000000..e842a0c0c --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Adelaide.ics @@ -0,0 +1,136 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Adelaide +X-LIC-LOCATION:Australia/Adelaide +BEGIN:STANDARD +TZOFFSETFROM:+1030 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0930 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:20081005T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+091420 +TZOFFSETTO:+0900 +TZNAME:CST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:18990501T000000 +RDATE:18990501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0930 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +RDATE:20071028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1030 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820307T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860316T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900318T030000 +RDATE:19910303T030000 +RDATE:19920322T030000 +RDATE:19930307T030000 +RDATE:19940320T030000 +RDATE:19950326T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +RDATE:20040328T030000 +RDATE:20050327T030000 +RDATE:20060402T030000 +RDATE:20070325T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0930 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19710101T000000 +RDATE:19710101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Brisbane.ics b/libkcal/libical/zoneinfo/Australia/Brisbane.ics new file mode 100644 index 000000000..d5fd27006 --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Brisbane.ics @@ -0,0 +1,50 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Brisbane +X-LIC-LOCATION:Australia/Brisbane +BEGIN:STANDARD +TZOFFSETFROM:+101208 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19900304T030000 +RDATE:19910303T030000 +RDATE:19920301T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19710101T000000 +RDATE:19710101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Broken_Hill.ics b/libkcal/libical/zoneinfo/Australia/Broken_Hill.ics new file mode 100644 index 000000000..16282c68d --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Broken_Hill.ics @@ -0,0 +1,150 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Broken_Hill +X-LIC-LOCATION:Australia/Broken_Hill +BEGIN:STANDARD +TZOFFSETFROM:+1030 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0930 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:20081005T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+092548 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:CST +DTSTART:18960823T000000 +RDATE:18960823T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:18990501T000000 +RDATE:18990501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0930 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +RDATE:20071028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1030 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820404T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860316T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900304T030000 +RDATE:19910303T030000 +RDATE:19920301T030000 +RDATE:19930307T030000 +RDATE:19940306T030000 +RDATE:19950305T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +RDATE:20040328T030000 +RDATE:20050327T030000 +RDATE:20060402T030000 +RDATE:20070325T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0930 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19710101T000000 +RDATE:19710101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1030 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:20000101T000000 +RDATE:20000101T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Currie.ics b/libkcal/libical/zoneinfo/Australia/Currie.ics new file mode 100644 index 000000000..a6501384c --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Currie.ics @@ -0,0 +1,129 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Currie +X-LIC-LOCATION:Australia/Currie +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:20011007T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:20080406T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+093528 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950901T000000 +RDATE:18950901T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19161001T020000 +RDATE:19161001T020000 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911006T020000 +RDATE:19921004T020000 +RDATE:19931003T020000 +RDATE:19941002T020000 +RDATE:19951001T020000 +RDATE:19961006T020000 +RDATE:19971005T020000 +RDATE:19981004T020000 +RDATE:19991003T020000 +RDATE:20000827T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170201T000000 +RDATE:19170201T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820328T030000 +RDATE:19830327T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860302T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900318T030000 +RDATE:19910331T030000 +RDATE:19920329T030000 +RDATE:19930328T030000 +RDATE:19940327T030000 +RDATE:19950326T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19710701T000000 +RDATE:19710701T000000 +RDATE:20040328T020000 +RDATE:20050327T020000 +RDATE:20060402T020000 +RDATE:20070325T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Darwin.ics b/libkcal/libical/zoneinfo/Australia/Darwin.ics new file mode 100644 index 000000000..9023bd23c --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Darwin.ics @@ -0,0 +1,42 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Darwin +X-LIC-LOCATION:Australia/Darwin +BEGIN:STANDARD +TZOFFSETFROM:+084320 +TZOFFSETTO:+0900 +TZNAME:CST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:18990501T000000 +RDATE:18990501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0930 +TZOFFSETTO:+1030 +TZNAME:CST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1030 +TZOFFSETTO:+0930 +TZNAME:CST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Eucla.ics b/libkcal/libical/zoneinfo/Australia/Eucla.ics new file mode 100644 index 000000000..f938227ec --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Eucla.ics @@ -0,0 +1,52 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Eucla +X-LIC-LOCATION:Australia/Eucla +BEGIN:STANDARD +TZOFFSETFROM:+083528 +TZOFFSETTO:+0845 +TZNAME:CWST +DTSTART:18951201T000000 +RDATE:18951201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0845 +TZOFFSETTO:+0945 +TZNAME:CWST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19741027T020000 +RDATE:19831030T020000 +RDATE:19911117T020000 +RDATE:20061203T020000 +RDATE:20071028T020000 +RDATE:20081026T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0945 +TZOFFSETTO:+0845 +TZNAME:CWST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19750302T030000 +RDATE:19840304T030000 +RDATE:19920301T030000 +RDATE:20070325T030000 +RDATE:20080330T030000 +RDATE:20090329T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0845 +TZOFFSETTO:+0845 +TZNAME:CWST +DTSTART:19430701T000000 +RDATE:19430701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Hobart.ics b/libkcal/libical/zoneinfo/Australia/Hobart.ics new file mode 100644 index 000000000..8e0e97f40 --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Hobart.ics @@ -0,0 +1,137 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Hobart +X-LIC-LOCATION:Australia/Hobart +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:20011007T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:20080406T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+094916 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950901T000000 +RDATE:18950901T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19161001T020000 +RDATE:19161001T020000 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19671001T020000 +RDATE:19681027T020000 +RDATE:19691026T020000 +RDATE:19701025T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911006T020000 +RDATE:19921004T020000 +RDATE:19931003T020000 +RDATE:19941002T020000 +RDATE:19951001T020000 +RDATE:19961006T020000 +RDATE:19971005T020000 +RDATE:19981004T020000 +RDATE:19991003T020000 +RDATE:20000827T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170201T000000 +RDATE:19170201T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19680331T030000 +RDATE:19690309T030000 +RDATE:19700308T030000 +RDATE:19710314T030000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820328T030000 +RDATE:19830327T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860302T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900318T030000 +RDATE:19910331T030000 +RDATE:19920329T030000 +RDATE:19930328T030000 +RDATE:19940327T030000 +RDATE:19950326T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19670101T000000 +RDATE:19670101T000000 +RDATE:20040328T020000 +RDATE:20050327T020000 +RDATE:20060402T020000 +RDATE:20070325T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Lindeman.ics b/libkcal/libical/zoneinfo/Australia/Lindeman.ics new file mode 100644 index 000000000..d1cb4f71c --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Lindeman.ics @@ -0,0 +1,55 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Lindeman +X-LIC-LOCATION:Australia/Lindeman +BEGIN:STANDARD +TZOFFSETFROM:+095556 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19900304T030000 +RDATE:19910303T030000 +RDATE:19920301T030000 +RDATE:19930307T030000 +RDATE:19940306T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19710101T000000 +RDATE:19710101T000000 +RDATE:19920701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Lord_Howe.ics b/libkcal/libical/zoneinfo/Australia/Lord_Howe.ics new file mode 100644 index 000000000..75f33da0c --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Lord_Howe.ics @@ -0,0 +1,113 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Lord_Howe +X-LIC-LOCATION:Australia/Lord_Howe +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1030 +TZNAME:LHST +DTSTART:20080406T020000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1030 +TZOFFSETTO:+1100 +TZNAME:LHST +DTSTART:20081005T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+103620 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1030 +TZNAME:LHST +DTSTART:19810301T000000 +RDATE:19810301T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1030 +TZOFFSETTO:+1130 +TZNAME:LHST +DTSTART:19811025T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1130 +TZOFFSETTO:+1030 +TZNAME:LHST +DTSTART:19820307T020000 +RDATE:19820307T020000 +RDATE:19830306T020000 +RDATE:19840304T020000 +RDATE:19850303T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1030 +TZOFFSETTO:+1100 +TZNAME:LHST +DTSTART:19851027T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20000827T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +RDATE:20071028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1030 +TZNAME:LHST +DTSTART:19860316T020000 +RDATE:19860316T020000 +RDATE:19870315T020000 +RDATE:19880320T020000 +RDATE:19890319T020000 +RDATE:19900304T020000 +RDATE:19910303T020000 +RDATE:19920301T020000 +RDATE:19930307T020000 +RDATE:19940306T020000 +RDATE:19950305T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T020000 +RDATE:20000326T020000 +RDATE:20010325T020000 +RDATE:20020331T020000 +RDATE:20030330T020000 +RDATE:20040328T020000 +RDATE:20050327T020000 +RDATE:20060402T020000 +RDATE:20070325T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Melbourne.ics b/libkcal/libical/zoneinfo/Australia/Melbourne.ics new file mode 100644 index 000000000..e1408a35e --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Melbourne.ics @@ -0,0 +1,129 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Melbourne +X-LIC-LOCATION:Australia/Melbourne +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:20081005T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+093952 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871018T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20000827T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +RDATE:20071028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820307T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860316T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900318T030000 +RDATE:19910303T030000 +RDATE:19920301T030000 +RDATE:19930307T030000 +RDATE:19940306T030000 +RDATE:19950326T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +RDATE:20040328T030000 +RDATE:20050327T030000 +RDATE:20060402T030000 +RDATE:20070325T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19710101T000000 +RDATE:19710101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Perth.ics b/libkcal/libical/zoneinfo/Australia/Perth.ics new file mode 100644 index 000000000..9202df18b --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Perth.ics @@ -0,0 +1,52 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Perth +X-LIC-LOCATION:Australia/Perth +BEGIN:STANDARD +TZOFFSETFROM:+074324 +TZOFFSETTO:+0800 +TZNAME:WST +DTSTART:18951201T000000 +RDATE:18951201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0800 +TZOFFSETTO:+0900 +TZNAME:WST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19741027T020000 +RDATE:19831030T020000 +RDATE:19911117T020000 +RDATE:20061203T020000 +RDATE:20071028T020000 +RDATE:20081026T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+0800 +TZNAME:WST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19750302T030000 +RDATE:19840304T030000 +RDATE:19920301T030000 +RDATE:20070325T030000 +RDATE:20080330T030000 +RDATE:20090329T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0800 +TZOFFSETTO:+0800 +TZNAME:WST +DTSTART:19430701T000000 +RDATE:19430701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Australia/Sydney.ics b/libkcal/libical/zoneinfo/Australia/Sydney.ics new file mode 100644 index 000000000..8c340a0a8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Australia/Sydney.ics @@ -0,0 +1,129 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Australia/Sydney +X-LIC-LOCATION:Australia/Sydney +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:20081005T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+100452 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1000 +TZOFFSETTO:+1100 +TZNAME:EST +DTSTART:19170101T000100 +RDATE:19170101T000100 +RDATE:19420101T020000 +RDATE:19420927T020000 +RDATE:19431003T020000 +RDATE:19711031T020000 +RDATE:19721029T020000 +RDATE:19731028T020000 +RDATE:19741027T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861019T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931031T020000 +RDATE:19941030T020000 +RDATE:19951029T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20000827T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +RDATE:20071028T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19170325T020000 +RDATE:19170325T020000 +RDATE:19420329T020000 +RDATE:19430328T020000 +RDATE:19440326T020000 +RDATE:19720227T030000 +RDATE:19730304T030000 +RDATE:19740303T030000 +RDATE:19750302T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820404T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860316T030000 +RDATE:19870315T030000 +RDATE:19880320T030000 +RDATE:19890319T030000 +RDATE:19900304T030000 +RDATE:19910303T030000 +RDATE:19920301T030000 +RDATE:19930307T030000 +RDATE:19940306T030000 +RDATE:19950305T030000 +RDATE:19960331T030000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +RDATE:20000326T030000 +RDATE:20010325T030000 +RDATE:20020331T030000 +RDATE:20030330T030000 +RDATE:20040328T030000 +RDATE:20050327T030000 +RDATE:20060402T030000 +RDATE:20070325T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:EST +DTSTART:19710101T000000 +RDATE:19710101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Amsterdam.ics b/libkcal/libical/zoneinfo/Europe/Amsterdam.ics new file mode 100644 index 000000000..206edf492 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Amsterdam.ics @@ -0,0 +1,164 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Amsterdam +X-LIC-LOCATION:Europe/Amsterdam +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+001932 +TZOFFSETTO:+001932 +TZNAME:AMT +DTSTART:18350101T000000 +RDATE:18350101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+001932 +TZOFFSETTO:+011932 +TZNAME:NST +DTSTART:19160501T000000 +RDATE:19160501T000000 +RDATE:19170416T020000 +RDATE:19180401T020000 +RDATE:19190407T020000 +RDATE:19200405T020000 +RDATE:19210404T020000 +RDATE:19220326T020000 +RDATE:19230601T020000 +RDATE:19240330T020000 +RDATE:19250605T020000 +RDATE:19260515T020000 +RDATE:19270515T020000 +RDATE:19280515T020000 +RDATE:19290515T020000 +RDATE:19300515T020000 +RDATE:19310515T020000 +RDATE:19320522T020000 +RDATE:19330515T020000 +RDATE:19340515T020000 +RDATE:19350515T020000 +RDATE:19360515T020000 +RDATE:19370522T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+011932 +TZOFFSETTO:+001932 +TZNAME:AMT +DTSTART:19161001T000000 +RDATE:19161001T000000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19200927T030000 +RDATE:19210926T030000 +RDATE:19221008T030000 +RDATE:19231007T030000 +RDATE:19241005T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+011932 +TZOFFSETTO:+0120 +TZNAME:NEST +DTSTART:19370701T000000 +RDATE:19370701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0120 +TZOFFSETTO:+0020 +TZNAME:NET +DTSTART:19371003T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391008T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0020 +TZOFFSETTO:+0120 +TZNAME:NEST +DTSTART:19380515T020000 +RDATE:19380515T020000 +RDATE:19390515T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0020 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19400516T000000 +RDATE:19400516T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19770925T030000 +RDATE:19781001T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Andorra.ics b/libkcal/libical/zoneinfo/Europe/Andorra.ics new file mode 100644 index 000000000..524cd1160 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Andorra.ics @@ -0,0 +1,53 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Andorra +X-LIC-LOCATION:Europe/Andorra +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19850331T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000604 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19460930T000000 +RDATE:19460930T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19850929T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Athens.ics b/libkcal/libical/zoneinfo/Europe/Athens.ics new file mode 100644 index 000000000..81d4609ad --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Athens.ics @@ -0,0 +1,116 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Athens +X-LIC-LOCATION:Europe/Athens +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19810329T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013452 +TZOFFSETTO:+013452 +TZNAME:AMT +DTSTART:18950914T000000 +RDATE:18950914T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013452 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19160728T000100 +RDATE:19160728T000100 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19320707T000000 +RDATE:19320707T000000 +RDATE:19410407T000000 +RDATE:19520701T000000 +RDATE:19750412T000000 +RDATE:19760411T020000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T090000 +RDATE:19800401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19320901T000000 +RDATE:19320901T000000 +RDATE:19521102T000000 +RDATE:19751126T010000 +RDATE:19761010T030000 +RDATE:19770926T030000 +RDATE:19780924T040000 +RDATE:19790929T020000 +RDATE:19800928T000000 +RDATE:19810927T040000 +RDATE:19820926T040000 +RDATE:19830925T040000 +RDATE:19840930T040000 +RDATE:19850929T040000 +RDATE:19860928T040000 +RDATE:19870927T040000 +RDATE:19880925T040000 +RDATE:19890924T040000 +RDATE:19900930T040000 +RDATE:19910929T040000 +RDATE:19920927T040000 +RDATE:19930926T040000 +RDATE:19940925T040000 +RDATE:19950924T040000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410430T000000 +RDATE:19410430T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430330T000000 +RDATE:19430330T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19440404T000000 +RDATE:19440404T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19810101T000000 +RDATE:19810101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Belgrade.ics b/libkcal/libical/zoneinfo/Europe/Belgrade.ics new file mode 100644 index 000000000..ee1ad80d7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Belgrade.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Belgrade +X-LIC-LOCATION:Europe/Belgrade +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Berlin.ics b/libkcal/libical/zoneinfo/Europe/Berlin.ics new file mode 100644 index 000000000..31f98f595 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Berlin.ics @@ -0,0 +1,103 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Berlin +X-LIC-LOCATION:Europe/Berlin +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005328 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18930401T000000 +RDATE:18930401T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460414T020000 +RDATE:19470406T020000 +RDATE:19480418T020000 +RDATE:19490410T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19451118T030000 +RDATE:19461007T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:CEMT +DTSTART:19450524T020000 +RDATE:19450524T020000 +RDATE:19470511T030000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19450924T030000 +RDATE:19450924T030000 +RDATE:19470629T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Bratislava.ics b/libkcal/libical/zoneinfo/Europe/Bratislava.ics new file mode 100644 index 000000000..9be30ffa1 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Bratislava.ics @@ -0,0 +1,96 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Bratislava +X-LIC-LOCATION:Europe/Bratislava +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+005744 +TZNAME:PMT +DTSTART:18500101T000000 +RDATE:18500101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18911001T000000 +RDATE:18911001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450408T020000 +RDATE:19460506T020000 +RDATE:19470420T020000 +RDATE:19480418T020000 +RDATE:19490409T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T030000 +RDATE:19451118T030000 +RDATE:19461006T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19790101T000000 +RDATE:19790101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Brussels.ics b/libkcal/libical/zoneinfo/Europe/Brussels.ics new file mode 100644 index 000000000..c3bb7ab26 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Brussels.ics @@ -0,0 +1,164 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Brussels +X-LIC-LOCATION:Europe/Brussels +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+001730 +TZOFFSETTO:+001730 +TZNAME:BMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+001730 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:18920501T120000 +RDATE:18920501T120000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19141108T000000 +RDATE:19141108T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160501T000000 +RDATE:19160501T000000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400520T030000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460519T020000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T030000 +RDATE:19450916T030000 +RDATE:19461007T030000 +RDATE:19770925T030000 +RDATE:19781001T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19181111T120000 +RDATE:19181111T120000 +RDATE:19191005T000000 +RDATE:19201024T000000 +RDATE:19211026T000000 +RDATE:19221008T000000 +RDATE:19231007T000000 +RDATE:19241005T000000 +RDATE:19251004T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19190301T230000 +RDATE:19190301T230000 +RDATE:19200214T230000 +RDATE:19210314T230000 +RDATE:19220325T230000 +RDATE:19230421T230000 +RDATE:19240329T230000 +RDATE:19250404T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320403T020000 +RDATE:19330326T020000 +RDATE:19340408T020000 +RDATE:19350331T020000 +RDATE:19360419T020000 +RDATE:19370404T020000 +RDATE:19380327T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19440903T000000 +RDATE:19440903T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Bucharest.ics b/libkcal/libical/zoneinfo/Europe/Bucharest.ics new file mode 100644 index 000000000..008e60a12 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Bucharest.ics @@ -0,0 +1,109 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Bucharest +X-LIC-LOCATION:Europe/Bucharest +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19970330T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19971026T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+014424 +TZOFFSETTO:+014424 +TZNAME:BMT +DTSTART:18911001T000000 +RDATE:18911001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+014424 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19310724T000000 +RDATE:19310724T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19320521T000000 +RDATE:19320521T000000 +RDATE:19330402T000000 +RDATE:19340408T000000 +RDATE:19350407T000000 +RDATE:19360405T000000 +RDATE:19370404T000000 +RDATE:19380403T000000 +RDATE:19390402T000000 +RDATE:19790527T000000 +RDATE:19800405T230000 +RDATE:19810329T020000 +RDATE:19820328T020000 +RDATE:19830327T020000 +RDATE:19840325T020000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19321002T010000 +RDATE:19321002T010000 +RDATE:19331001T010000 +RDATE:19341007T010000 +RDATE:19351006T010000 +RDATE:19361004T010000 +RDATE:19371003T010000 +RDATE:19381002T010000 +RDATE:19391001T010000 +RDATE:19790930T000000 +RDATE:19800928T010000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T010000 +RDATE:19920927T010000 +RDATE:19930926T010000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19961027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910101T000000 +RDATE:19910101T000000 +RDATE:19940101T000000 +RDATE:19970101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Budapest.ics b/libkcal/libical/zoneinfo/Europe/Budapest.ics new file mode 100644 index 000000000..236253452 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Budapest.ics @@ -0,0 +1,101 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Budapest +X-LIC-LOCATION:Europe/Budapest +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+011620 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18901001T000000 +RDATE:18901001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180401T030000 +RDATE:19190415T030000 +RDATE:19200405T030000 +RDATE:19410406T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450501T230000 +RDATE:19460331T020000 +RDATE:19470406T020000 +RDATE:19480404T020000 +RDATE:19490410T020000 +RDATE:19500417T020000 +RDATE:19540523T000000 +RDATE:19550523T000000 +RDATE:19560603T000000 +RDATE:19570602T010000 +RDATE:19800406T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180929T030000 +RDATE:19190915T030000 +RDATE:19200930T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19451103T000000 +RDATE:19461006T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19501023T030000 +RDATE:19541003T000000 +RDATE:19551003T000000 +RDATE:19560930T000000 +RDATE:19570929T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19180101T000000 +RDATE:19180101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Chisinau.ics b/libkcal/libical/zoneinfo/Europe/Chisinau.ics new file mode 100644 index 000000000..a0c4ec4d7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Chisinau.ics @@ -0,0 +1,161 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Chisinau +X-LIC-LOCATION:Europe/Chisinau +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19970330T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19971026T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015520 +TZOFFSETTO:+0155 +TZNAME:CMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0155 +TZOFFSETTO:+014424 +TZNAME:BMT +DTSTART:19180215T000000 +RDATE:19180215T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+014424 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19310724T000000 +RDATE:19310724T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19320521T000000 +RDATE:19320521T000000 +RDATE:19330402T000000 +RDATE:19340408T000000 +RDATE:19350407T000000 +RDATE:19360405T000000 +RDATE:19370404T000000 +RDATE:19380403T000000 +RDATE:19390402T000000 +RDATE:19400815T000000 +RDATE:19910331T020000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19321002T010000 +RDATE:19321002T010000 +RDATE:19331001T010000 +RDATE:19341007T010000 +RDATE:19351006T010000 +RDATE:19361004T010000 +RDATE:19371003T010000 +RDATE:19381002T010000 +RDATE:19391001T010000 +RDATE:19900506T000000 +RDATE:19910929T030000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19961027T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410717T000000 +RDATE:19410717T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19440824T000000 +RDATE:19440824T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19900101T000000 +RDATE:19900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910101T000000 +RDATE:19910101T000000 +RDATE:19920101T000000 +RDATE:19970101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Copenhagen.ics b/libkcal/libical/zoneinfo/Europe/Copenhagen.ics new file mode 100644 index 000000000..060c3e09c --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Copenhagen.ics @@ -0,0 +1,88 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Copenhagen +X-LIC-LOCATION:Europe/Copenhagen +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005020 +TZOFFSETTO:+005020 +TZNAME:CMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005020 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18940101T000000 +RDATE:18940101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160514T230000 +RDATE:19160514T230000 +RDATE:19400515T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460501T020000 +RDATE:19470504T020000 +RDATE:19480509T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19160930T230000 +RDATE:19160930T230000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450815T030000 +RDATE:19460901T030000 +RDATE:19470810T030000 +RDATE:19480808T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Dublin.ics b/libkcal/libical/zoneinfo/Europe/Dublin.ics new file mode 100644 index 000000000..3be21d733 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Dublin.ics @@ -0,0 +1,201 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Dublin +X-LIC-LOCATION:Europe/Dublin +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:IST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0025 +TZOFFSETTO:-002521 +TZNAME:DMT +DTSTART:18800802T000000 +RDATE:18800802T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-002521 +TZOFFSETTO:+003439 +TZNAME:IST +DTSTART:19160521T020000 +RDATE:19160521T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+003439 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19170408T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19170917T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19461006T020000 +RDATE:19471102T020000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611029T030000 +RDATE:19621028T030000 +RDATE:19631027T030000 +RDATE:19641025T030000 +RDATE:19651024T030000 +RDATE:19661023T030000 +RDATE:19671029T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761024T030000 +RDATE:19771023T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T020000 +RDATE:19821024T020000 +RDATE:19831023T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881023T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931024T020000 +RDATE:19941023T020000 +RDATE:19951022T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19211206T000000 +RDATE:19211206T000000 +RDATE:19960101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:IST +DTSTART:19220326T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19470316T020000 +RDATE:19480418T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +RDATE:19570414T020000 +RDATE:19580420T020000 +RDATE:19590419T020000 +RDATE:19600410T020000 +RDATE:19610326T020000 +RDATE:19620325T020000 +RDATE:19630331T020000 +RDATE:19640322T020000 +RDATE:19650321T020000 +RDATE:19660320T020000 +RDATE:19670319T020000 +RDATE:19680218T020000 +RDATE:19720319T020000 +RDATE:19730318T020000 +RDATE:19740317T020000 +RDATE:19750316T020000 +RDATE:19760321T020000 +RDATE:19770320T020000 +RDATE:19780319T020000 +RDATE:19790318T020000 +RDATE:19800316T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:IST +DTSTART:19681027T000000 +RDATE:19681027T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Gibraltar.ics b/libkcal/libical/zoneinfo/Europe/Gibraltar.ics new file mode 100644 index 000000000..f33980a4d --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Gibraltar.ics @@ -0,0 +1,171 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Gibraltar +X-LIC-LOCATION:Europe/Gibraltar +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19820328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-002124 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18800802T000000 +RDATE:18800802T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19160521T020000 +RDATE:19160521T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19460414T020000 +RDATE:19470316T020000 +RDATE:19480314T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19451007T030000 +RDATE:19461006T030000 +RDATE:19471102T030000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:BDST +DTSTART:19410504T020000 +RDATE:19410504T020000 +RDATE:19420405T020000 +RDATE:19430404T020000 +RDATE:19440402T020000 +RDATE:19450402T020000 +RDATE:19470413T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19410810T030000 +RDATE:19410810T030000 +RDATE:19420809T030000 +RDATE:19430815T030000 +RDATE:19440917T030000 +RDATE:19450715T030000 +RDATE:19470810T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19570414T020000 +RDATE:19570414T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19820101T000000 +RDATE:19820101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19820926T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Guernsey.ics b/libkcal/libical/zoneinfo/Europe/Guernsey.ics new file mode 100644 index 000000000..5aa50be2a --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Guernsey.ics @@ -0,0 +1,208 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Guernsey +X-LIC-LOCATION:Europe/Guernsey +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-000115 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18471201T000000 +RDATE:18471201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19160521T020000 +RDATE:19160521T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19460414T020000 +RDATE:19470316T020000 +RDATE:19480314T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +RDATE:19570414T020000 +RDATE:19580420T020000 +RDATE:19590419T020000 +RDATE:19600410T020000 +RDATE:19610326T020000 +RDATE:19620325T020000 +RDATE:19630331T020000 +RDATE:19640322T020000 +RDATE:19650321T020000 +RDATE:19660320T020000 +RDATE:19670319T020000 +RDATE:19680218T020000 +RDATE:19720319T020000 +RDATE:19730318T020000 +RDATE:19740317T020000 +RDATE:19750316T020000 +RDATE:19760321T020000 +RDATE:19770320T020000 +RDATE:19780319T020000 +RDATE:19790318T020000 +RDATE:19800316T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19451007T030000 +RDATE:19461006T030000 +RDATE:19471102T030000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611029T030000 +RDATE:19621028T030000 +RDATE:19631027T030000 +RDATE:19641025T030000 +RDATE:19651024T030000 +RDATE:19661023T030000 +RDATE:19671029T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761024T030000 +RDATE:19771023T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T020000 +RDATE:19821024T020000 +RDATE:19831023T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881023T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931024T020000 +RDATE:19941023T020000 +RDATE:19951022T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:BDST +DTSTART:19410504T020000 +RDATE:19410504T020000 +RDATE:19420405T020000 +RDATE:19430404T020000 +RDATE:19440402T020000 +RDATE:19450402T020000 +RDATE:19470413T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19410810T030000 +RDATE:19410810T030000 +RDATE:19420809T030000 +RDATE:19430815T030000 +RDATE:19440917T030000 +RDATE:19450715T030000 +RDATE:19470810T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19681027T000000 +RDATE:19681027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Helsinki.ics b/libkcal/libical/zoneinfo/Europe/Helsinki.ics new file mode 100644 index 000000000..113b0e624 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Helsinki.ics @@ -0,0 +1,72 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Helsinki +X-LIC-LOCATION:Europe/Helsinki +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19810329T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013952 +TZOFFSETTO:+013952 +TZNAME:HMT +DTSTART:18780531T000000 +RDATE:18780531T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013952 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19210501T000000 +RDATE:19210501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19420403T000000 +RDATE:19420403T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19421003T000000 +RDATE:19421003T000000 +RDATE:19810927T040000 +RDATE:19820926T040000 +RDATE:19830925T040000 +RDATE:19840930T040000 +RDATE:19850929T040000 +RDATE:19860928T040000 +RDATE:19870927T040000 +RDATE:19880925T040000 +RDATE:19890924T040000 +RDATE:19900930T040000 +RDATE:19910929T040000 +RDATE:19920927T040000 +RDATE:19930926T040000 +RDATE:19940925T040000 +RDATE:19950924T040000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19810329T020000 +RDATE:19810329T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Isle_of_Man.ics b/libkcal/libical/zoneinfo/Europe/Isle_of_Man.ics new file mode 100644 index 000000000..9b80ac707 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Isle_of_Man.ics @@ -0,0 +1,208 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Isle_of_Man +X-LIC-LOCATION:Europe/Isle_of_Man +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-000115 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18471201T000000 +RDATE:18471201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19160521T020000 +RDATE:19160521T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19460414T020000 +RDATE:19470316T020000 +RDATE:19480314T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +RDATE:19570414T020000 +RDATE:19580420T020000 +RDATE:19590419T020000 +RDATE:19600410T020000 +RDATE:19610326T020000 +RDATE:19620325T020000 +RDATE:19630331T020000 +RDATE:19640322T020000 +RDATE:19650321T020000 +RDATE:19660320T020000 +RDATE:19670319T020000 +RDATE:19680218T020000 +RDATE:19720319T020000 +RDATE:19730318T020000 +RDATE:19740317T020000 +RDATE:19750316T020000 +RDATE:19760321T020000 +RDATE:19770320T020000 +RDATE:19780319T020000 +RDATE:19790318T020000 +RDATE:19800316T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19451007T030000 +RDATE:19461006T030000 +RDATE:19471102T030000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611029T030000 +RDATE:19621028T030000 +RDATE:19631027T030000 +RDATE:19641025T030000 +RDATE:19651024T030000 +RDATE:19661023T030000 +RDATE:19671029T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761024T030000 +RDATE:19771023T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T020000 +RDATE:19821024T020000 +RDATE:19831023T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881023T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931024T020000 +RDATE:19941023T020000 +RDATE:19951022T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:BDST +DTSTART:19410504T020000 +RDATE:19410504T020000 +RDATE:19420405T020000 +RDATE:19430404T020000 +RDATE:19440402T020000 +RDATE:19450402T020000 +RDATE:19470413T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19410810T030000 +RDATE:19410810T030000 +RDATE:19420809T030000 +RDATE:19430815T030000 +RDATE:19440917T030000 +RDATE:19450715T030000 +RDATE:19470810T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19681027T000000 +RDATE:19681027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Istanbul.ics b/libkcal/libical/zoneinfo/Europe/Istanbul.ics new file mode 100644 index 000000000..f5db86650 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Istanbul.ics @@ -0,0 +1,187 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Istanbul +X-LIC-LOCATION:Europe/Istanbul +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20070325T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20071028T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015552 +TZOFFSETTO:+015656 +TZNAME:IMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015656 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19101001T000000 +RDATE:19101001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19160501T000000 +RDATE:19160501T000000 +RDATE:19200328T000000 +RDATE:19210403T000000 +RDATE:19220326T000000 +RDATE:19240513T000000 +RDATE:19250501T000000 +RDATE:19400630T000000 +RDATE:19401201T000000 +RDATE:19420401T000000 +RDATE:19450402T000000 +RDATE:19460601T000000 +RDATE:19470420T000000 +RDATE:19480418T000000 +RDATE:19490410T000000 +RDATE:19500419T000000 +RDATE:19510422T000000 +RDATE:19620715T000000 +RDATE:19640515T000000 +RDATE:19700503T000000 +RDATE:19710502T000000 +RDATE:19720507T000000 +RDATE:19730603T010000 +RDATE:19740331T020000 +RDATE:19750330T000000 +RDATE:19760601T000000 +RDATE:19770403T000000 +RDATE:19780402T000000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19910331T010000 +RDATE:19920329T010000 +RDATE:19930328T010000 +RDATE:19940327T010000 +RDATE:19950326T010000 +RDATE:19960331T010000 +RDATE:19970330T010000 +RDATE:19980329T010000 +RDATE:19990328T010000 +RDATE:20000326T010000 +RDATE:20010325T010000 +RDATE:20020331T010000 +RDATE:20030330T010000 +RDATE:20040328T010000 +RDATE:20050327T010000 +RDATE:20060326T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19161001T000000 +RDATE:19161001T000000 +RDATE:19201025T000000 +RDATE:19211003T000000 +RDATE:19221008T000000 +RDATE:19241001T000000 +RDATE:19251001T000000 +RDATE:19401005T000000 +RDATE:19410921T000000 +RDATE:19421101T000000 +RDATE:19451008T000000 +RDATE:19461001T000000 +RDATE:19471005T000000 +RDATE:19481003T000000 +RDATE:19491002T000000 +RDATE:19501008T000000 +RDATE:19511008T000000 +RDATE:19621008T000000 +RDATE:19641001T000000 +RDATE:19701004T000000 +RDATE:19711003T000000 +RDATE:19721008T000000 +RDATE:19731104T030000 +RDATE:19741103T050000 +RDATE:19751026T000000 +RDATE:19761031T000000 +RDATE:19771016T000000 +RDATE:19850928T000000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T020000 +RDATE:19920927T020000 +RDATE:19930926T020000 +RDATE:19940925T020000 +RDATE:19950924T020000 +RDATE:19961027T020000 +RDATE:19971026T020000 +RDATE:19981025T020000 +RDATE:19991031T020000 +RDATE:20001029T020000 +RDATE:20011028T020000 +RDATE:20021027T020000 +RDATE:20031026T020000 +RDATE:20041031T020000 +RDATE:20051030T020000 +RDATE:20061029T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:TRST +DTSTART:19781015T000000 +RDATE:19781015T000000 +RDATE:19800406T030000 +RDATE:19810329T030000 +RDATE:19820328T030000 +RDATE:19830731T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:TRST +DTSTART:19790401T030000 +RDATE:19790401T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:TRT +DTSTART:19791015T000000 +RDATE:19791015T000000 +RDATE:19801013T000000 +RDATE:19811012T000000 +RDATE:19821011T000000 +RDATE:19831002T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19850420T000000 +RDATE:19850420T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20070101T000000 +RDATE:20070101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Jersey.ics b/libkcal/libical/zoneinfo/Europe/Jersey.ics new file mode 100644 index 000000000..7c11f794b --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Jersey.ics @@ -0,0 +1,208 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Jersey +X-LIC-LOCATION:Europe/Jersey +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-000115 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18471201T000000 +RDATE:18471201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19160521T020000 +RDATE:19160521T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19460414T020000 +RDATE:19470316T020000 +RDATE:19480314T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +RDATE:19570414T020000 +RDATE:19580420T020000 +RDATE:19590419T020000 +RDATE:19600410T020000 +RDATE:19610326T020000 +RDATE:19620325T020000 +RDATE:19630331T020000 +RDATE:19640322T020000 +RDATE:19650321T020000 +RDATE:19660320T020000 +RDATE:19670319T020000 +RDATE:19680218T020000 +RDATE:19720319T020000 +RDATE:19730318T020000 +RDATE:19740317T020000 +RDATE:19750316T020000 +RDATE:19760321T020000 +RDATE:19770320T020000 +RDATE:19780319T020000 +RDATE:19790318T020000 +RDATE:19800316T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19451007T030000 +RDATE:19461006T030000 +RDATE:19471102T030000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611029T030000 +RDATE:19621028T030000 +RDATE:19631027T030000 +RDATE:19641025T030000 +RDATE:19651024T030000 +RDATE:19661023T030000 +RDATE:19671029T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761024T030000 +RDATE:19771023T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T020000 +RDATE:19821024T020000 +RDATE:19831023T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881023T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931024T020000 +RDATE:19941023T020000 +RDATE:19951022T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:BDST +DTSTART:19410504T020000 +RDATE:19410504T020000 +RDATE:19420405T020000 +RDATE:19430404T020000 +RDATE:19440402T020000 +RDATE:19450402T020000 +RDATE:19470413T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19410810T030000 +RDATE:19410810T030000 +RDATE:19420809T030000 +RDATE:19430815T030000 +RDATE:19440917T030000 +RDATE:19450715T030000 +RDATE:19470810T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19681027T000000 +RDATE:19681027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Kaliningrad.ics b/libkcal/libical/zoneinfo/Europe/Kaliningrad.ics new file mode 100644 index 000000000..a9db994a8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Kaliningrad.ics @@ -0,0 +1,138 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Kaliningrad +X-LIC-LOCATION:Europe/Kaliningrad +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18930401T000000 +RDATE:18930401T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CET +DTSTART:19450101T000000 +RDATE:19450101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:CEST +DTSTART:19450429T000000 +RDATE:19450429T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CET +DTSTART:19451101T000000 +RDATE:19451101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920328T230000 +RDATE:19920328T230000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Kiev.ics b/libkcal/libical/zoneinfo/Europe/Kiev.ics new file mode 100644 index 000000000..5c85fca6d --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Kiev.ics @@ -0,0 +1,137 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Kiev +X-LIC-LOCATION:Europe/Kiev +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19950326T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+020204 +TZOFFSETTO:+020204 +TZNAME:KMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+020204 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410920T000000 +RDATE:19410920T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19431106T000000 +RDATE:19431106T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19900101T000000 +RDATE:19900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19900701T020000 +RDATE:19900701T020000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T040000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19920101T000000 +RDATE:19920101T000000 +RDATE:19950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Lisbon.ics b/libkcal/libical/zoneinfo/Europe/Lisbon.ics new file mode 100644 index 000000000..e957eb6d0 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Lisbon.ics @@ -0,0 +1,227 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Lisbon +X-LIC-LOCATION:Europe/Lisbon +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19970330T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-003632 +TZOFFSETTO:-003632 +TZNAME:LMT +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-003632 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19120101T000000 +RDATE:19120101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19160617T230000 +RDATE:19160617T230000 +RDATE:19170228T230000 +RDATE:19180301T230000 +RDATE:19190228T230000 +RDATE:19200229T230000 +RDATE:19210228T230000 +RDATE:19240416T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19310418T230000 +RDATE:19320402T230000 +RDATE:19340407T230000 +RDATE:19350330T230000 +RDATE:19360418T230000 +RDATE:19370403T230000 +RDATE:19380326T230000 +RDATE:19390415T230000 +RDATE:19400224T230000 +RDATE:19410405T230000 +RDATE:19420314T230000 +RDATE:19430313T230000 +RDATE:19440311T230000 +RDATE:19450310T230000 +RDATE:19460406T230000 +RDATE:19470406T020000 +RDATE:19480404T020000 +RDATE:19490403T020000 +RDATE:19510401T020000 +RDATE:19520406T020000 +RDATE:19530405T020000 +RDATE:19540404T020000 +RDATE:19550403T020000 +RDATE:19560401T020000 +RDATE:19570407T020000 +RDATE:19580406T020000 +RDATE:19590405T020000 +RDATE:19600403T020000 +RDATE:19610402T020000 +RDATE:19620401T020000 +RDATE:19630407T020000 +RDATE:19640405T020000 +RDATE:19650404T020000 +RDATE:19770327T000000 +RDATE:19780402T000000 +RDATE:19790401T000000 +RDATE:19800330T000000 +RDATE:19810329T010000 +RDATE:19820328T010000 +RDATE:19830327T020000 +RDATE:19840325T010000 +RDATE:19850331T010000 +RDATE:19860330T010000 +RDATE:19870329T010000 +RDATE:19880327T010000 +RDATE:19890326T010000 +RDATE:19900325T010000 +RDATE:19910331T010000 +RDATE:19920329T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19161101T010000 +RDATE:19161101T010000 +RDATE:19171015T000000 +RDATE:19181015T000000 +RDATE:19191015T000000 +RDATE:19201015T000000 +RDATE:19211015T000000 +RDATE:19241015T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391119T000000 +RDATE:19401006T000000 +RDATE:19411006T000000 +RDATE:19421025T000000 +RDATE:19431031T000000 +RDATE:19441029T000000 +RDATE:19451028T000000 +RDATE:19461006T000000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19511007T030000 +RDATE:19521005T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611001T030000 +RDATE:19621007T030000 +RDATE:19631006T030000 +RDATE:19641004T030000 +RDATE:19651003T030000 +RDATE:19760926T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T020000 +RDATE:19800928T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T020000 +RDATE:19890924T020000 +RDATE:19900930T020000 +RDATE:19910929T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WEMT +DTSTART:19420425T230000 +RDATE:19420425T230000 +RDATE:19430417T230000 +RDATE:19440422T230000 +RDATE:19450421T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19420816T000000 +RDATE:19420816T000000 +RDATE:19430829T000000 +RDATE:19440827T000000 +RDATE:19450826T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19660403T020000 +RDATE:19660403T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19920927T020000 +RDATE:19920927T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19930328T020000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19930926T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19960331T020000 +RDATE:19960331T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Ljubljana.ics b/libkcal/libical/zoneinfo/Europe/Ljubljana.ics new file mode 100644 index 000000000..61e267e1a --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Ljubljana.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Ljubljana +X-LIC-LOCATION:Europe/Ljubljana +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/London.ics b/libkcal/libical/zoneinfo/Europe/London.ics new file mode 100644 index 000000000..56bca0cf8 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/London.ics @@ -0,0 +1,208 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/London +X-LIC-LOCATION:Europe/London +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19810329T010000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19961027T020000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-000115 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:18471201T000000 +RDATE:18471201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19160521T020000 +RDATE:19160521T020000 +RDATE:19170408T020000 +RDATE:19180324T020000 +RDATE:19190330T020000 +RDATE:19200328T020000 +RDATE:19210403T020000 +RDATE:19220326T020000 +RDATE:19230422T020000 +RDATE:19240413T020000 +RDATE:19250419T020000 +RDATE:19260418T020000 +RDATE:19270410T020000 +RDATE:19280422T020000 +RDATE:19290421T020000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320417T020000 +RDATE:19330409T020000 +RDATE:19340422T020000 +RDATE:19350414T020000 +RDATE:19360419T020000 +RDATE:19370418T020000 +RDATE:19380410T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +RDATE:19460414T020000 +RDATE:19470316T020000 +RDATE:19480314T020000 +RDATE:19490403T020000 +RDATE:19500416T020000 +RDATE:19510415T020000 +RDATE:19520420T020000 +RDATE:19530419T020000 +RDATE:19540411T020000 +RDATE:19550417T020000 +RDATE:19560422T020000 +RDATE:19570414T020000 +RDATE:19580420T020000 +RDATE:19590419T020000 +RDATE:19600410T020000 +RDATE:19610326T020000 +RDATE:19620325T020000 +RDATE:19630331T020000 +RDATE:19640322T020000 +RDATE:19650321T020000 +RDATE:19660320T020000 +RDATE:19670319T020000 +RDATE:19680218T020000 +RDATE:19720319T020000 +RDATE:19730318T020000 +RDATE:19740317T020000 +RDATE:19750316T020000 +RDATE:19760321T020000 +RDATE:19770320T020000 +RDATE:19780319T020000 +RDATE:19790318T020000 +RDATE:19800316T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19161001T030000 +RDATE:19161001T030000 +RDATE:19170917T030000 +RDATE:19180930T030000 +RDATE:19190929T030000 +RDATE:19201025T030000 +RDATE:19211003T030000 +RDATE:19221008T030000 +RDATE:19230916T030000 +RDATE:19240921T030000 +RDATE:19251004T030000 +RDATE:19261003T030000 +RDATE:19271002T030000 +RDATE:19281007T030000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +RDATE:19451007T030000 +RDATE:19461006T030000 +RDATE:19471102T030000 +RDATE:19481031T030000 +RDATE:19491030T030000 +RDATE:19501022T030000 +RDATE:19511021T030000 +RDATE:19521026T030000 +RDATE:19531004T030000 +RDATE:19541003T030000 +RDATE:19551002T030000 +RDATE:19561007T030000 +RDATE:19571006T030000 +RDATE:19581005T030000 +RDATE:19591004T030000 +RDATE:19601002T030000 +RDATE:19611029T030000 +RDATE:19621028T030000 +RDATE:19631027T030000 +RDATE:19641025T030000 +RDATE:19651024T030000 +RDATE:19661023T030000 +RDATE:19671029T030000 +RDATE:19711031T030000 +RDATE:19721029T030000 +RDATE:19731028T030000 +RDATE:19741027T030000 +RDATE:19751026T030000 +RDATE:19761024T030000 +RDATE:19771023T030000 +RDATE:19781029T030000 +RDATE:19791028T030000 +RDATE:19801026T030000 +RDATE:19811025T020000 +RDATE:19821024T020000 +RDATE:19831023T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881023T020000 +RDATE:19891029T020000 +RDATE:19901028T020000 +RDATE:19911027T020000 +RDATE:19921025T020000 +RDATE:19931024T020000 +RDATE:19941023T020000 +RDATE:19951022T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:BDST +DTSTART:19410504T020000 +RDATE:19410504T020000 +RDATE:19420405T020000 +RDATE:19430404T020000 +RDATE:19440402T020000 +RDATE:19450402T020000 +RDATE:19470413T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19410810T030000 +RDATE:19410810T030000 +RDATE:19420809T030000 +RDATE:19430815T030000 +RDATE:19440917T030000 +RDATE:19450715T030000 +RDATE:19470810T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:BST +DTSTART:19681027T000000 +RDATE:19681027T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:GMT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Luxembourg.ics b/libkcal/libical/zoneinfo/Europe/Luxembourg.ics new file mode 100644 index 000000000..35405628f --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Luxembourg.ics @@ -0,0 +1,155 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Luxembourg +X-LIC-LOCATION:Europe/Luxembourg +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+002436 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19040601T000000 +RDATE:19040601T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160514T230000 +RDATE:19160514T230000 +RDATE:19170428T230000 +RDATE:19180415T020000 +RDATE:19450402T020000 +RDATE:19460519T020000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T010000 +RDATE:19180916T030000 +RDATE:19440918T030000 +RDATE:19450916T030000 +RDATE:19461007T030000 +RDATE:19770925T030000 +RDATE:19781001T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19181125T000000 +RDATE:19181125T000000 +RDATE:19191005T030000 +RDATE:19201024T020000 +RDATE:19211026T020000 +RDATE:19221008T010000 +RDATE:19231007T020000 +RDATE:19241005T010000 +RDATE:19251004T010000 +RDATE:19261003T010000 +RDATE:19271002T010000 +RDATE:19281007T010000 +RDATE:19291006T030000 +RDATE:19301005T030000 +RDATE:19311004T030000 +RDATE:19321002T030000 +RDATE:19331008T030000 +RDATE:19341007T030000 +RDATE:19351006T030000 +RDATE:19361004T030000 +RDATE:19371003T030000 +RDATE:19381002T030000 +RDATE:19391119T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19190301T230000 +RDATE:19190301T230000 +RDATE:19200214T230000 +RDATE:19210314T230000 +RDATE:19220325T230000 +RDATE:19230421T230000 +RDATE:19240329T230000 +RDATE:19250405T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19300413T020000 +RDATE:19310419T020000 +RDATE:19320403T020000 +RDATE:19330326T020000 +RDATE:19340408T020000 +RDATE:19350331T020000 +RDATE:19360419T020000 +RDATE:19370404T020000 +RDATE:19380327T020000 +RDATE:19390416T020000 +RDATE:19400225T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WEST +DTSTART:19400514T030000 +RDATE:19400514T030000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Madrid.ics b/libkcal/libical/zoneinfo/Europe/Madrid.ics new file mode 100644 index 000000000..821250706 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Madrid.ics @@ -0,0 +1,136 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Madrid +X-LIC-LOCATION:Europe/Madrid +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-001444 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19170505T230000 +RDATE:19170505T230000 +RDATE:19180415T230000 +RDATE:19190405T230000 +RDATE:19240416T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19370522T230000 +RDATE:19380322T230000 +RDATE:19390415T230000 +RDATE:19400316T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19171007T000000 +RDATE:19171007T000000 +RDATE:19181007T000000 +RDATE:19191007T000000 +RDATE:19241005T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391008T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WEMT +DTSTART:19420502T230000 +RDATE:19420502T230000 +RDATE:19430417T230000 +RDATE:19440415T230000 +RDATE:19450414T230000 +RDATE:19460413T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19420902T000000 +RDATE:19420902T000000 +RDATE:19431004T000000 +RDATE:19441011T000000 +RDATE:19450930T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19460930T000000 +RDATE:19460930T000000 +RDATE:19490930T010000 +RDATE:19741006T010000 +RDATE:19751005T010000 +RDATE:19760926T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19490430T230000 +RDATE:19490430T230000 +RDATE:19740413T230000 +RDATE:19750419T230000 +RDATE:19760327T230000 +RDATE:19770402T230000 +RDATE:19780402T230000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19790101T000000 +RDATE:19790101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Malta.ics b/libkcal/libical/zoneinfo/Europe/Malta.ics new file mode 100644 index 000000000..14a292a6b --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Malta.ics @@ -0,0 +1,117 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Malta +X-LIC-LOCATION:Europe/Malta +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005804 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18931102T000000 +RDATE:18931102T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160603T000000 +RDATE:19160603T000000 +RDATE:19170401T000000 +RDATE:19180310T000000 +RDATE:19190302T000000 +RDATE:19200321T000000 +RDATE:19400615T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460317T020000 +RDATE:19470316T000000 +RDATE:19480229T020000 +RDATE:19660522T000000 +RDATE:19670528T000000 +RDATE:19680526T000000 +RDATE:19690601T000000 +RDATE:19700531T000000 +RDATE:19710523T000000 +RDATE:19720528T000000 +RDATE:19730331T000000 +RDATE:19740421T000000 +RDATE:19750420T020000 +RDATE:19760418T020000 +RDATE:19770417T020000 +RDATE:19780416T020000 +RDATE:19790415T020000 +RDATE:19800331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170930T010000 +RDATE:19181006T010000 +RDATE:19191005T010000 +RDATE:19200919T010000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450915T010000 +RDATE:19461006T030000 +RDATE:19471005T010000 +RDATE:19481003T030000 +RDATE:19660925T000000 +RDATE:19670924T000000 +RDATE:19680922T000000 +RDATE:19690928T000000 +RDATE:19700927T000000 +RDATE:19710926T010000 +RDATE:19721001T000000 +RDATE:19730929T010000 +RDATE:19740916T010000 +RDATE:19750921T020000 +RDATE:19760919T020000 +RDATE:19770918T020000 +RDATE:19780917T020000 +RDATE:19790916T020000 +RDATE:19800921T020000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19810101T000000 +RDATE:19810101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Mariehamn.ics b/libkcal/libical/zoneinfo/Europe/Mariehamn.ics new file mode 100644 index 000000000..9b2b31a35 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Mariehamn.ics @@ -0,0 +1,72 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Mariehamn +X-LIC-LOCATION:Europe/Mariehamn +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19810329T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013952 +TZOFFSETTO:+013952 +TZNAME:HMT +DTSTART:18780531T000000 +RDATE:18780531T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013952 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19210501T000000 +RDATE:19210501T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19420403T000000 +RDATE:19420403T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19421003T000000 +RDATE:19421003T000000 +RDATE:19810927T040000 +RDATE:19820926T040000 +RDATE:19830925T040000 +RDATE:19840930T040000 +RDATE:19850929T040000 +RDATE:19860928T040000 +RDATE:19870927T040000 +RDATE:19880925T040000 +RDATE:19890924T040000 +RDATE:19900930T040000 +RDATE:19910929T040000 +RDATE:19920927T040000 +RDATE:19930926T040000 +RDATE:19940925T040000 +RDATE:19950924T040000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19810329T020000 +RDATE:19810329T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Minsk.ics b/libkcal/libical/zoneinfo/Europe/Minsk.ics new file mode 100644 index 000000000..8039f595b --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Minsk.ics @@ -0,0 +1,129 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Minsk +X-LIC-LOCATION:Europe/Minsk +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015016 +TZOFFSETTO:+0150 +TZNAME:MMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0150 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19440703T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410628T000000 +RDATE:19410628T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19900101T000000 +RDATE:19900101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19920927T010000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Monaco.ics b/libkcal/libical/zoneinfo/Europe/Monaco.ics new file mode 100644 index 000000000..d7aedb7dd --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Monaco.ics @@ -0,0 +1,163 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Monaco +X-LIC-LOCATION:Europe/Monaco +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+002932 +TZOFFSETTO:+000921 +TZNAME:PMT +DTSTART:18910315T000000 +RDATE:18910315T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000921 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19110311T000000 +RDATE:19110311T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19160614T230000 +RDATE:19160614T230000 +RDATE:19170324T230000 +RDATE:19180309T230000 +RDATE:19190301T230000 +RDATE:19200214T230000 +RDATE:19210314T230000 +RDATE:19220325T230000 +RDATE:19230526T230000 +RDATE:19240329T230000 +RDATE:19250404T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19300412T230000 +RDATE:19310418T230000 +RDATE:19320402T230000 +RDATE:19330325T230000 +RDATE:19340407T230000 +RDATE:19350330T230000 +RDATE:19360418T230000 +RDATE:19370403T230000 +RDATE:19380326T230000 +RDATE:19390415T230000 +RDATE:19400225T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19161002T000000 +RDATE:19161002T000000 +RDATE:19171008T000000 +RDATE:19181007T000000 +RDATE:19191006T000000 +RDATE:19201024T000000 +RDATE:19211026T000000 +RDATE:19221008T000000 +RDATE:19231007T000000 +RDATE:19241005T000000 +RDATE:19251004T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19301005T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19331008T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391119T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WEMT +DTSTART:19410505T000000 +RDATE:19410505T000000 +RDATE:19420309T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19411006T000000 +RDATE:19411006T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441008T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19450916T030000 +RDATE:19450916T030000 +RDATE:19760926T010000 +RDATE:19770925T030000 +RDATE:19781001T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19760328T010000 +RDATE:19760328T010000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Moscow.ics b/libkcal/libical/zoneinfo/Europe/Moscow.ics new file mode 100644 index 000000000..59f017712 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Moscow.ics @@ -0,0 +1,155 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Moscow +X-LIC-LOCATION:Europe/Moscow +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+023020 +TZOFFSETTO:+0230 +TZNAME:MMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0230 +TZOFFSETTO:+023048 +TZNAME:MMT +DTSTART:19160703T000000 +RDATE:19160703T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+023048 +TZOFFSETTO:+033048 +TZNAME:MST +DTSTART:19170701T230000 +RDATE:19170701T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+033048 +TZOFFSETTO:+023048 +TZNAME:MMT +DTSTART:19171228T000000 +RDATE:19171228T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+023048 +TZOFFSETTO:+043048 +TZNAME:MDST +DTSTART:19180531T220000 +RDATE:19180531T220000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+043048 +TZOFFSETTO:+033048 +TZNAME:MST +DTSTART:19180916T010000 +RDATE:19180916T010000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+033048 +TZOFFSETTO:+043048 +TZNAME:MDST +DTSTART:19190531T230000 +RDATE:19190531T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+043048 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19190701T020000 +RDATE:19190701T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19190816T000000 +RDATE:19190816T000000 +RDATE:19211001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19210214T230000 +RDATE:19210214T230000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:MSD +DTSTART:19210320T230000 +RDATE:19210320T230000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19210901T000000 +RDATE:19210901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19221001T000000 +RDATE:19221001T000000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19920119T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Nicosia.ics b/libkcal/libical/zoneinfo/Europe/Nicosia.ics new file mode 100644 index 000000000..d33025763 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Nicosia.ics @@ -0,0 +1,95 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Nicosia +X-LIC-LOCATION:Europe/Nicosia +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19981025T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19990328T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+021328 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19211114T000000 +RDATE:19211114T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19750413T000000 +RDATE:19750413T000000 +RDATE:19760515T000000 +RDATE:19770403T000000 +RDATE:19780402T000000 +RDATE:19790401T000000 +RDATE:19800406T000000 +RDATE:19810329T000000 +RDATE:19820328T000000 +RDATE:19830327T000000 +RDATE:19840325T000000 +RDATE:19850331T000000 +RDATE:19860330T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +RDATE:19970330T000000 +RDATE:19980329T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19751012T000000 +RDATE:19751012T000000 +RDATE:19761011T000000 +RDATE:19770925T000000 +RDATE:19781002T000000 +RDATE:19790930T000000 +RDATE:19800928T000000 +RDATE:19810927T000000 +RDATE:19820926T000000 +RDATE:19830925T000000 +RDATE:19840930T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900930T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19960929T000000 +RDATE:19970928T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19980901T000000 +RDATE:19980901T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Oslo.ics b/libkcal/libical/zoneinfo/Europe/Oslo.ics new file mode 100644 index 000000000..38b5fc85e --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Oslo.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Oslo +X-LIC-LOCATION:Europe/Oslo +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0043 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160522T010000 +RDATE:19160522T010000 +RDATE:19400810T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19590315T020000 +RDATE:19600320T020000 +RDATE:19610319T020000 +RDATE:19620318T020000 +RDATE:19630317T020000 +RDATE:19640315T020000 +RDATE:19650425T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19160930T000000 +RDATE:19160930T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19451001T030000 +RDATE:19590920T030000 +RDATE:19600918T030000 +RDATE:19610917T030000 +RDATE:19620916T030000 +RDATE:19630915T030000 +RDATE:19640920T030000 +RDATE:19650919T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Paris.ics b/libkcal/libical/zoneinfo/Europe/Paris.ics new file mode 100644 index 000000000..19f268a89 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Paris.ics @@ -0,0 +1,168 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Paris +X-LIC-LOCATION:Europe/Paris +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000921 +TZOFFSETTO:+000921 +TZNAME:PMT +DTSTART:18910315T000100 +RDATE:18910315T000100 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+000921 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19110311T000100 +RDATE:19110311T000100 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19160614T230000 +RDATE:19160614T230000 +RDATE:19170324T230000 +RDATE:19180309T230000 +RDATE:19190301T230000 +RDATE:19200214T230000 +RDATE:19210314T230000 +RDATE:19220325T230000 +RDATE:19230526T230000 +RDATE:19240329T230000 +RDATE:19250404T230000 +RDATE:19260417T230000 +RDATE:19270409T230000 +RDATE:19280414T230000 +RDATE:19290420T230000 +RDATE:19300412T230000 +RDATE:19310418T230000 +RDATE:19320402T230000 +RDATE:19330325T230000 +RDATE:19340407T230000 +RDATE:19350330T230000 +RDATE:19360418T230000 +RDATE:19370403T230000 +RDATE:19380326T230000 +RDATE:19390415T230000 +RDATE:19400225T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +TZNAME:WET +DTSTART:19161002T000000 +RDATE:19161002T000000 +RDATE:19171008T000000 +RDATE:19181007T000000 +RDATE:19191006T000000 +RDATE:19201024T000000 +RDATE:19211026T000000 +RDATE:19221008T000000 +RDATE:19231007T000000 +RDATE:19241005T000000 +RDATE:19251004T000000 +RDATE:19261003T000000 +RDATE:19271002T000000 +RDATE:19281007T000000 +RDATE:19291006T000000 +RDATE:19301005T000000 +RDATE:19311004T000000 +RDATE:19321002T000000 +RDATE:19331008T000000 +RDATE:19341007T000000 +RDATE:19351006T000000 +RDATE:19361004T000000 +RDATE:19371003T000000 +RDATE:19381002T000000 +RDATE:19391119T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19400614T230000 +RDATE:19400614T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19760328T010000 +RDATE:19770403T020000 +RDATE:19780402T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19450916T030000 +RDATE:19760926T010000 +RDATE:19770925T030000 +RDATE:19781001T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:WEMT +DTSTART:19440825T000000 +RDATE:19440825T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:WEST +DTSTART:19441008T010000 +RDATE:19441008T010000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:WEMT +DTSTART:19450402T020000 +RDATE:19450402T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Podgorica.ics b/libkcal/libical/zoneinfo/Europe/Podgorica.ics new file mode 100644 index 000000000..fef823b77 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Podgorica.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Podgorica +X-LIC-LOCATION:Europe/Podgorica +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Prague.ics b/libkcal/libical/zoneinfo/Europe/Prague.ics new file mode 100644 index 000000000..b88970b26 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Prague.ics @@ -0,0 +1,96 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Prague +X-LIC-LOCATION:Europe/Prague +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+005744 +TZNAME:PMT +DTSTART:18500101T000000 +RDATE:18500101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+005744 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18911001T000000 +RDATE:18911001T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450408T020000 +RDATE:19460506T020000 +RDATE:19470420T020000 +RDATE:19480418T020000 +RDATE:19490409T020000 +RDATE:19790401T020000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T030000 +RDATE:19451118T030000 +RDATE:19461006T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19790930T030000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19790101T000000 +RDATE:19790101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Riga.ics b/libkcal/libical/zoneinfo/Europe/Riga.ics new file mode 100644 index 000000000..46c61b932 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Riga.ics @@ -0,0 +1,167 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Riga +X-LIC-LOCATION:Europe/Riga +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20010325T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20011028T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013624 +TZOFFSETTO:+013624 +TZNAME:RMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+013624 +TZOFFSETTO:+023624 +TZNAME:LST +DTSTART:19180415T020000 +RDATE:19180415T020000 +RDATE:19190401T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+023624 +TZOFFSETTO:+013624 +TZNAME:RMT +DTSTART:19180916T030000 +RDATE:19180916T030000 +RDATE:19190522T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013624 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19260511T000000 +RDATE:19260511T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19400805T000000 +RDATE:19400805T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410701T000000 +RDATE:19410701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19441013T000000 +RDATE:19441013T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19890326T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19890924T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19960929T030000 +RDATE:19971026T040000 +RDATE:19981025T040000 +RDATE:19991031T040000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19900325T020000 +RDATE:19900325T020000 +RDATE:19910331T020000 +RDATE:19920329T020000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T030000 +RDATE:19980329T030000 +RDATE:19990328T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19970121T000000 +RDATE:19970121T000000 +RDATE:20000229T000000 +RDATE:20010102T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Rome.ics b/libkcal/libical/zoneinfo/Europe/Rome.ics new file mode 100644 index 000000000..3e7d7db3e --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Rome.ics @@ -0,0 +1,131 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Rome +X-LIC-LOCATION:Europe/Rome +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+004956 +TZNAME:RMT +DTSTART:18660922T000000 +RDATE:18660922T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18931101T000000 +RDATE:18931101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160603T000000 +RDATE:19160603T000000 +RDATE:19170401T000000 +RDATE:19180310T000000 +RDATE:19190302T000000 +RDATE:19200321T000000 +RDATE:19400615T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460317T020000 +RDATE:19470316T000000 +RDATE:19480229T020000 +RDATE:19660522T000000 +RDATE:19670528T000000 +RDATE:19680526T000000 +RDATE:19690601T000000 +RDATE:19700531T000000 +RDATE:19710523T000000 +RDATE:19720528T000000 +RDATE:19730603T000000 +RDATE:19740526T000000 +RDATE:19750601T000000 +RDATE:19760530T000000 +RDATE:19770522T000000 +RDATE:19780528T000000 +RDATE:19790527T000000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170930T010000 +RDATE:19181006T010000 +RDATE:19191005T010000 +RDATE:19200919T010000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T010000 +RDATE:19450915T010000 +RDATE:19461006T030000 +RDATE:19471005T010000 +RDATE:19481003T030000 +RDATE:19660925T000000 +RDATE:19670924T000000 +RDATE:19680922T000000 +RDATE:19690928T000000 +RDATE:19700927T000000 +RDATE:19710926T010000 +RDATE:19721001T000000 +RDATE:19730930T000000 +RDATE:19740929T000000 +RDATE:19750928T010000 +RDATE:19760926T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T010000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19440701T000000 +RDATE:19440701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Samara.ics b/libkcal/libical/zoneinfo/Europe/Samara.ics new file mode 100644 index 000000000..703f948af --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Samara.ics @@ -0,0 +1,125 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Samara +X-LIC-LOCATION:Europe/Samara +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:SAMST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:SAMT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+032036 +TZOFFSETTO:+0300 +TZNAME:SAMT +DTSTART:19190701T020000 +RDATE:19190701T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:SAMT +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19911020T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:KUYT +DTSTART:19350127T000000 +RDATE:19350127T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:KUYST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:KUYT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:KUYST +DTSTART:19890326T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:KUYT +DTSTART:19890924T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:KUYST +DTSTART:19900325T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:KUYST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:KUYT +DTSTART:19910929T030000 +RDATE:19910929T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:SAMST +DTSTART:19920328T230000 +RDATE:19920328T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:SAMT +DTSTART:19920926T230000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/San_Marino.ics b/libkcal/libical/zoneinfo/Europe/San_Marino.ics new file mode 100644 index 000000000..e112b3904 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/San_Marino.ics @@ -0,0 +1,131 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/San_Marino +X-LIC-LOCATION:Europe/San_Marino +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+004956 +TZNAME:RMT +DTSTART:18660922T000000 +RDATE:18660922T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18931101T000000 +RDATE:18931101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160603T000000 +RDATE:19160603T000000 +RDATE:19170401T000000 +RDATE:19180310T000000 +RDATE:19190302T000000 +RDATE:19200321T000000 +RDATE:19400615T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460317T020000 +RDATE:19470316T000000 +RDATE:19480229T020000 +RDATE:19660522T000000 +RDATE:19670528T000000 +RDATE:19680526T000000 +RDATE:19690601T000000 +RDATE:19700531T000000 +RDATE:19710523T000000 +RDATE:19720528T000000 +RDATE:19730603T000000 +RDATE:19740526T000000 +RDATE:19750601T000000 +RDATE:19760530T000000 +RDATE:19770522T000000 +RDATE:19780528T000000 +RDATE:19790527T000000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170930T010000 +RDATE:19181006T010000 +RDATE:19191005T010000 +RDATE:19200919T010000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T010000 +RDATE:19450915T010000 +RDATE:19461006T030000 +RDATE:19471005T010000 +RDATE:19481003T030000 +RDATE:19660925T000000 +RDATE:19670924T000000 +RDATE:19680922T000000 +RDATE:19690928T000000 +RDATE:19700927T000000 +RDATE:19710926T010000 +RDATE:19721001T000000 +RDATE:19730930T000000 +RDATE:19740929T000000 +RDATE:19750928T010000 +RDATE:19760926T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T010000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19440701T000000 +RDATE:19440701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Sarajevo.ics b/libkcal/libical/zoneinfo/Europe/Sarajevo.ics new file mode 100644 index 000000000..aa8898d27 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Sarajevo.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Sarajevo +X-LIC-LOCATION:Europe/Sarajevo +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Simferopol.ics b/libkcal/libical/zoneinfo/Europe/Simferopol.ics new file mode 100644 index 000000000..543e92171 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Simferopol.ics @@ -0,0 +1,150 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Simferopol +X-LIC-LOCATION:Europe/Simferopol +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19971026T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19980329T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+021624 +TZOFFSETTO:+0216 +TZNAME:SMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0216 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19300621T000000 +RDATE:19300621T000000 +RDATE:19440413T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19411101T000000 +RDATE:19411101T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19940501T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19961027T040000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19900101T000000 +RDATE:19900101T000000 +RDATE:19970101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19900701T020000 +RDATE:19900701T020000 +RDATE:19920927T000000 +RDATE:19930926T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19920101T000000 +RDATE:19920101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19960331T040000 +RDATE:19960331T040000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19970330T040000 +RDATE:19970330T040000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Skopje.ics b/libkcal/libical/zoneinfo/Europe/Skopje.ics new file mode 100644 index 000000000..d3924c74b --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Skopje.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Skopje +X-LIC-LOCATION:Europe/Skopje +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Sofia.ics b/libkcal/libical/zoneinfo/Europe/Sofia.ics new file mode 100644 index 000000000..0e7b62420 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Sofia.ics @@ -0,0 +1,123 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Sofia +X-LIC-LOCATION:Europe/Sofia +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19970330T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19971026T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013316 +TZOFFSETTO:+015656 +TZNAME:IMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+015656 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:18941130T000000 +RDATE:18941130T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T020000 +RDATE:19421102T020000 +RDATE:19431004T030000 +RDATE:19441002T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19450402T030000 +RDATE:19450402T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19790331T230000 +RDATE:19790331T230000 +RDATE:19800405T230000 +RDATE:19810404T230000 +RDATE:19820403T230000 +RDATE:19830327T020000 +RDATE:19840325T020000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +RDATE:19910331T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +RDATE:19950326T000000 +RDATE:19960331T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19791001T010000 +RDATE:19791001T010000 +RDATE:19800929T010000 +RDATE:19810927T020000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T000000 +RDATE:19961027T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19820926T020000 +RDATE:19820926T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910101T000000 +RDATE:19910101T000000 +RDATE:19970101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Stockholm.ics b/libkcal/libical/zoneinfo/Europe/Stockholm.ics new file mode 100644 index 000000000..e9ca91aec --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Stockholm.ics @@ -0,0 +1,74 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Stockholm +X-LIC-LOCATION:Europe/Stockholm +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+011212 +TZOFFSETTO:+010014 +TZNAME:SET +DTSTART:18790101T000000 +RDATE:18790101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+010014 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19000101T000000 +RDATE:19000101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160514T230000 +RDATE:19160514T230000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Tallinn.ics b/libkcal/libical/zoneinfo/Europe/Tallinn.ics new file mode 100644 index 000000000..1fcb6975c --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Tallinn.ics @@ -0,0 +1,160 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Tallinn +X-LIC-LOCATION:Europe/Tallinn +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20020331T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20021027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0139 +TZOFFSETTO:+0139 +TZNAME:TMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0139 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19180201T000000 +RDATE:19180201T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19180415T020000 +RDATE:19180415T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19180916T030000 +RDATE:19180916T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0139 +TZNAME:TMT +DTSTART:19190701T000000 +RDATE:19190701T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0139 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19210501T000000 +RDATE:19210501T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19400806T000000 +RDATE:19400806T000000 +RDATE:19440922T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410915T000000 +RDATE:19410915T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19890326T020000 +RDATE:19890326T020000 +RDATE:19980922T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19890924T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +RDATE:19981025T040000 +RDATE:19991031T040000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19900325T020000 +RDATE:19900325T020000 +RDATE:19910331T020000 +RDATE:19920329T020000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +RDATE:19980329T020000 +RDATE:19990328T030000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19991101T000000 +RDATE:19991101T000000 +RDATE:20020221T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Tirane.ics b/libkcal/libical/zoneinfo/Europe/Tirane.ics new file mode 100644 index 000000000..1759f11fe --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Tirane.ics @@ -0,0 +1,85 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Tirane +X-LIC-LOCATION:Europe/Tirane +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19850331T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+011920 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19140101T000000 +RDATE:19140101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19400616T000000 +RDATE:19400616T000000 +RDATE:19430329T020000 +RDATE:19740504T000000 +RDATE:19750501T000000 +RDATE:19760502T000000 +RDATE:19770508T000000 +RDATE:19780506T000000 +RDATE:19790505T000000 +RDATE:19800503T000000 +RDATE:19810426T000000 +RDATE:19820502T000000 +RDATE:19830418T000000 +RDATE:19840401T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19430410T030000 +RDATE:19741002T000000 +RDATE:19751002T000000 +RDATE:19761003T000000 +RDATE:19771002T000000 +RDATE:19781001T000000 +RDATE:19790930T000000 +RDATE:19801004T000000 +RDATE:19810927T000000 +RDATE:19821003T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19840701T000000 +RDATE:19840701T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Uzhgorod.ics b/libkcal/libical/zoneinfo/Europe/Uzhgorod.ics new file mode 100644 index 000000000..26ca4e57b --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Uzhgorod.ics @@ -0,0 +1,146 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Uzhgorod +X-LIC-LOCATION:Europe/Uzhgorod +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19950326T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+012912 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18901001T000000 +RDATE:18901001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19400101T000000 +RDATE:19400101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19400401T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441026T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19441001T000000 +RDATE:19441001T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19450629T000000 +RDATE:19450629T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19900101T000000 +RDATE:19900101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19900701T020000 +RDATE:19900701T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910331T030000 +RDATE:19910331T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19920101T000000 +RDATE:19920101T000000 +RDATE:19950101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19920927T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T040000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Vaduz.ics b/libkcal/libical/zoneinfo/Europe/Vaduz.ics new file mode 100644 index 000000000..7feee4484 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Vaduz.ics @@ -0,0 +1,57 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Vaduz +X-LIC-LOCATION:Europe/Vaduz +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+003804 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18940601T000000 +RDATE:18940601T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19810101T000000 +RDATE:19810101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19810927T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Vatican.ics b/libkcal/libical/zoneinfo/Europe/Vatican.ics new file mode 100644 index 000000000..d1e83ebb1 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Vatican.ics @@ -0,0 +1,131 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Vatican +X-LIC-LOCATION:Europe/Vatican +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+004956 +TZNAME:RMT +DTSTART:18660922T000000 +RDATE:18660922T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+004956 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18931101T000000 +RDATE:18931101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160603T000000 +RDATE:19160603T000000 +RDATE:19170401T000000 +RDATE:19180310T000000 +RDATE:19190302T000000 +RDATE:19200321T000000 +RDATE:19400615T000000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460317T020000 +RDATE:19470316T000000 +RDATE:19480229T020000 +RDATE:19660522T000000 +RDATE:19670528T000000 +RDATE:19680526T000000 +RDATE:19690601T000000 +RDATE:19700531T000000 +RDATE:19710523T000000 +RDATE:19720528T000000 +RDATE:19730603T000000 +RDATE:19740526T000000 +RDATE:19750601T000000 +RDATE:19760530T000000 +RDATE:19770522T000000 +RDATE:19780528T000000 +RDATE:19790527T000000 +RDATE:19800406T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170930T010000 +RDATE:19181006T010000 +RDATE:19191005T010000 +RDATE:19200919T010000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19440917T010000 +RDATE:19450915T010000 +RDATE:19461006T030000 +RDATE:19471005T010000 +RDATE:19481003T030000 +RDATE:19660925T000000 +RDATE:19670924T000000 +RDATE:19680922T000000 +RDATE:19690928T000000 +RDATE:19700927T000000 +RDATE:19710926T010000 +RDATE:19721001T000000 +RDATE:19730930T000000 +RDATE:19740929T000000 +RDATE:19750928T010000 +RDATE:19760926T010000 +RDATE:19770925T010000 +RDATE:19781001T010000 +RDATE:19790930T010000 +RDATE:19800928T030000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19440701T000000 +RDATE:19440701T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19800101T000000 +RDATE:19800101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Vienna.ics b/libkcal/libical/zoneinfo/Europe/Vienna.ics new file mode 100644 index 000000000..a18861c2a --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Vienna.ics @@ -0,0 +1,89 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Vienna +X-LIC-LOCATION:Europe/Vienna +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+010520 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18930401T000000 +RDATE:18930401T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19200405T020000 +RDATE:19400401T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450402T020000 +RDATE:19460414T020000 +RDATE:19470406T020000 +RDATE:19480418T020000 +RDATE:19800406T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19180916T030000 +RDATE:19200913T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450412T030000 +RDATE:19461006T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19800928T000000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19200101T000000 +RDATE:19200101T000000 +RDATE:19460101T000000 +RDATE:19810101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Vilnius.ics b/libkcal/libical/zoneinfo/Europe/Vilnius.ics new file mode 100644 index 000000000..a2cf346fa --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Vilnius.ics @@ -0,0 +1,170 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Vilnius +X-LIC-LOCATION:Europe/Vilnius +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:20030330T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:20031026T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+014116 +TZOFFSETTO:+0124 +TZNAME:WMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0124 +TZOFFSETTO:+013536 +TZNAME:KMT +DTSTART:19170101T000000 +RDATE:19170101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+013536 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19191010T000000 +RDATE:19191010T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19200712T000000 +RDATE:19200712T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19201009T000000 +RDATE:19201009T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19981025T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19400803T000000 +RDATE:19400803T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410624T000000 +RDATE:19410624T000000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19990328T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19440801T000000 +RDATE:19440801T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910929T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +RDATE:19961027T030000 +RDATE:19971026T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T020000 +RDATE:19920329T020000 +RDATE:19930328T020000 +RDATE:19940327T020000 +RDATE:19950326T020000 +RDATE:19960331T020000 +RDATE:19970330T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19980101T000000 +RDATE:19980101T000000 +RDATE:19991031T030000 +RDATE:20030101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19980329T030000 +RDATE:19980329T030000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Volgograd.ics b/libkcal/libical/zoneinfo/Europe/Volgograd.ics new file mode 100644 index 000000000..7d9090d55 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Volgograd.ics @@ -0,0 +1,112 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Volgograd +X-LIC-LOCATION:Europe/Volgograd +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:VOLST +DTSTART:19930328T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:VOLT +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+025740 +TZOFFSETTO:+0300 +TZNAME:TSAT +DTSTART:19200103T000000 +RDATE:19200103T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:STAT +DTSTART:19250406T000000 +RDATE:19250406T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:STAT +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:VOLT +DTSTART:19611111T000000 +RDATE:19611111T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0500 +TZNAME:VOLST +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:VOLT +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0400 +TZOFFSETTO:+0400 +TZNAME:VOLST +DTSTART:19890326T020000 +RDATE:19890326T020000 +RDATE:19920329T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:VOLT +DTSTART:19890924T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19920926T230000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:VOLST +DTSTART:19900325T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:VOLT +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Warsaw.ics b/libkcal/libical/zoneinfo/Europe/Warsaw.ics new file mode 100644 index 000000000..166995a5c --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Warsaw.ics @@ -0,0 +1,152 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Warsaw +X-LIC-LOCATION:Europe/Warsaw +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19880327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0124 +TZOFFSETTO:+0124 +TZNAME:WMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0124 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19150805T000000 +RDATE:19150805T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19160430T230000 +RDATE:19160430T230000 +RDATE:19170416T020000 +RDATE:19180415T020000 +RDATE:19400623T020000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450429T000000 +RDATE:19460414T000000 +RDATE:19470504T020000 +RDATE:19480418T020000 +RDATE:19490410T020000 +RDATE:19570602T010000 +RDATE:19580330T010000 +RDATE:19590531T010000 +RDATE:19600403T010000 +RDATE:19610528T010000 +RDATE:19620527T010000 +RDATE:19630526T010000 +RDATE:19640531T010000 +RDATE:19770403T010000 +RDATE:19780402T010000 +RDATE:19790401T010000 +RDATE:19800406T010000 +RDATE:19810329T010000 +RDATE:19820328T010000 +RDATE:19830327T010000 +RDATE:19840325T010000 +RDATE:19850331T010000 +RDATE:19860330T010000 +RDATE:19870329T010000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19161001T010000 +RDATE:19161001T010000 +RDATE:19170917T030000 +RDATE:19220601T000000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441004T020000 +RDATE:19451101T000000 +RDATE:19461007T030000 +RDATE:19471005T030000 +RDATE:19481003T030000 +RDATE:19491002T030000 +RDATE:19570929T020000 +RDATE:19580928T020000 +RDATE:19591004T020000 +RDATE:19601002T020000 +RDATE:19611001T020000 +RDATE:19620930T020000 +RDATE:19630929T020000 +RDATE:19640927T020000 +RDATE:19770925T020000 +RDATE:19781001T020000 +RDATE:19790930T020000 +RDATE:19800928T020000 +RDATE:19810927T020000 +RDATE:19820926T020000 +RDATE:19830925T020000 +RDATE:19840930T020000 +RDATE:19850929T020000 +RDATE:19860928T020000 +RDATE:19870927T020000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19180916T030000 +RDATE:19180916T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19190415T020000 +RDATE:19190415T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19190916T030000 +RDATE:19190916T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19441001T000000 +RDATE:19441001T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19770101T000000 +RDATE:19770101T000000 +RDATE:19880101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Zagreb.ics b/libkcal/libical/zoneinfo/Europe/Zagreb.ics new file mode 100644 index 000000000..ae215dde3 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Zagreb.ics @@ -0,0 +1,69 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Zagreb +X-LIC-LOCATION:Europe/Zagreb +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19830327T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0122 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18840101T000000 +RDATE:18840101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410418T230000 +RDATE:19410418T230000 +RDATE:19430329T020000 +RDATE:19440403T020000 +RDATE:19450508T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +RDATE:19441002T030000 +RDATE:19450916T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19821127T000000 +RDATE:19821127T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Zaporozhye.ics b/libkcal/libical/zoneinfo/Europe/Zaporozhye.ics new file mode 100644 index 000000000..e58e13283 --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Zaporozhye.ics @@ -0,0 +1,138 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Zaporozhye +X-LIC-LOCATION:Europe/Zaporozhye +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19950326T030000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19961027T040000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+022040 +TZOFFSETTO:+0220 +TZNAME:CUT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0220 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19240502T000000 +RDATE:19240502T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19300621T000000 +RDATE:19300621T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19410825T000000 +RDATE:19410825T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19421102T030000 +RDATE:19421102T030000 +RDATE:19431004T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19430329T020000 +RDATE:19430329T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19431025T000000 +RDATE:19431025T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:MSD +DTSTART:19810401T000000 +RDATE:19810401T000000 +RDATE:19820401T000000 +RDATE:19830401T000000 +RDATE:19840401T000000 +RDATE:19850331T020000 +RDATE:19860330T020000 +RDATE:19870329T020000 +RDATE:19880327T020000 +RDATE:19890326T020000 +RDATE:19900325T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:MSK +DTSTART:19811001T000000 +RDATE:19811001T000000 +RDATE:19821001T000000 +RDATE:19831001T000000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19910331T020000 +RDATE:19910331T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19910929T000000 +RDATE:19910929T000000 +RDATE:19920927T000000 +RDATE:19930926T000000 +RDATE:19940925T000000 +RDATE:19950924T040000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +TZNAME:EEST +DTSTART:19920329T000000 +RDATE:19920329T000000 +RDATE:19930328T000000 +RDATE:19940327T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0200 +TZNAME:EET +DTSTART:19950101T000000 +RDATE:19950101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Europe/Zurich.ics b/libkcal/libical/zoneinfo/Europe/Zurich.ics new file mode 100644 index 000000000..ace550dfc --- /dev/null +++ b/libkcal/libical/zoneinfo/Europe/Zurich.ics @@ -0,0 +1,76 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Europe/Zurich +X-LIC-LOCATION:Europe/Zurich +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19810329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19961027T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+003408 +TZOFFSETTO:+002944 +TZNAME:BMT +DTSTART:18480912T000000 +RDATE:18480912T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+002944 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:18940601T000000 +RDATE:18940601T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19401102T000000 +RDATE:19401102T000000 +RDATE:19410504T020000 +RDATE:19420503T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19401231T000000 +RDATE:19401231T000000 +RDATE:19411005T000000 +RDATE:19421004T000000 +RDATE:19810927T030000 +RDATE:19820926T030000 +RDATE:19830925T030000 +RDATE:19840930T030000 +RDATE:19850929T030000 +RDATE:19860928T030000 +RDATE:19870927T030000 +RDATE:19880925T030000 +RDATE:19890924T030000 +RDATE:19900930T030000 +RDATE:19910929T030000 +RDATE:19920927T030000 +RDATE:19930926T030000 +RDATE:19940925T030000 +RDATE:19950924T030000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0100 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19810101T000000 +RDATE:19810101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Antananarivo.ics b/libkcal/libical/zoneinfo/Indian/Antananarivo.ics new file mode 100644 index 000000000..62dd89608 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Antananarivo.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Antananarivo +X-LIC-LOCATION:Indian/Antananarivo +BEGIN:STANDARD +TZOFFSETFROM:+031004 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+0300 +TZOFFSETTO:+0400 +TZNAME:EAST +DTSTART:19540227T230000 +RDATE:19540227T230000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19540530T000000 +RDATE:19540530T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Chagos.ics b/libkcal/libical/zoneinfo/Indian/Chagos.ics new file mode 100644 index 000000000..0f9392c16 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Chagos.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Chagos +X-LIC-LOCATION:Indian/Chagos +BEGIN:STANDARD +TZOFFSETFROM:+044940 +TZOFFSETTO:+0500 +TZNAME:IOT +DTSTART:19070101T000000 +RDATE:19070101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0500 +TZOFFSETTO:+0600 +TZNAME:IOT +DTSTART:19960101T000000 +RDATE:19960101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Christmas.ics b/libkcal/libical/zoneinfo/Indian/Christmas.ics new file mode 100644 index 000000000..057f9752c --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Christmas.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Christmas +X-LIC-LOCATION:Indian/Christmas +BEGIN:STANDARD +TZOFFSETFROM:+070252 +TZOFFSETTO:+0700 +TZNAME:CXT +DTSTART:18950201T000000 +RDATE:18950201T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Cocos.ics b/libkcal/libical/zoneinfo/Indian/Cocos.ics new file mode 100644 index 000000000..071096cb6 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Cocos.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Cocos +X-LIC-LOCATION:Indian/Cocos +BEGIN:STANDARD +TZOFFSETFROM:+062740 +TZOFFSETTO:+0630 +TZNAME:CCT +DTSTART:19000101T000000 +RDATE:19000101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Comoro.ics b/libkcal/libical/zoneinfo/Indian/Comoro.ics new file mode 100644 index 000000000..c30abcca6 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Comoro.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Comoro +X-LIC-LOCATION:Indian/Comoro +BEGIN:STANDARD +TZOFFSETFROM:+025304 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Kerguelen.ics b/libkcal/libical/zoneinfo/Indian/Kerguelen.ics new file mode 100644 index 000000000..ed3d18011 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Kerguelen.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Kerguelen +X-LIC-LOCATION:Indian/Kerguelen +BEGIN:STANDARD +TZOFFSETFROM:+0000 +TZOFFSETTO:+0500 +TZNAME:TFT +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Mahe.ics b/libkcal/libical/zoneinfo/Indian/Mahe.ics new file mode 100644 index 000000000..87ef36b01 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Mahe.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Mahe +X-LIC-LOCATION:Indian/Mahe +BEGIN:STANDARD +TZOFFSETFROM:+034148 +TZOFFSETTO:+0400 +TZNAME:SCT +DTSTART:19060601T000000 +RDATE:19060601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Maldives.ics b/libkcal/libical/zoneinfo/Indian/Maldives.ics new file mode 100644 index 000000000..4b0efb988 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Maldives.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Maldives +X-LIC-LOCATION:Indian/Maldives +BEGIN:STANDARD +TZOFFSETFROM:+0454 +TZOFFSETTO:+0454 +TZNAME:MMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0454 +TZOFFSETTO:+0500 +TZNAME:MVT +DTSTART:19600101T000000 +RDATE:19600101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Mauritius.ics b/libkcal/libical/zoneinfo/Indian/Mauritius.ics new file mode 100644 index 000000000..0a12e9503 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Mauritius.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Mauritius +X-LIC-LOCATION:Indian/Mauritius +BEGIN:STANDARD +TZOFFSETFROM:+0350 +TZOFFSETTO:+0400 +TZNAME:MUT +DTSTART:19070101T000000 +RDATE:19070101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Mayotte.ics b/libkcal/libical/zoneinfo/Indian/Mayotte.ics new file mode 100644 index 000000000..f4df84281 --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Mayotte.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Mayotte +X-LIC-LOCATION:Indian/Mayotte +BEGIN:STANDARD +TZOFFSETFROM:+030056 +TZOFFSETTO:+0300 +TZNAME:EAT +DTSTART:19110701T000000 +RDATE:19110701T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Indian/Reunion.ics b/libkcal/libical/zoneinfo/Indian/Reunion.ics new file mode 100644 index 000000000..028dbe53e --- /dev/null +++ b/libkcal/libical/zoneinfo/Indian/Reunion.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Indian/Reunion +X-LIC-LOCATION:Indian/Reunion +BEGIN:STANDARD +TZOFFSETFROM:+034152 +TZOFFSETTO:+0400 +TZNAME:RET +DTSTART:19110601T000000 +RDATE:19110601T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Makefile.am b/libkcal/libical/zoneinfo/Makefile.am new file mode 100644 index 000000000..db05f1742 --- /dev/null +++ b/libkcal/libical/zoneinfo/Makefile.am @@ -0,0 +1,39 @@ + +zoneinfodir = $(kde_datadir)/libical/zoneinfo + +zoneinfo_DATA = zones.tab + +DIRS = \ + Africa \ + America \ + America/Argentina \ + America/Indiana \ + America/Kentucky \ + America/North_Dakota \ + Antarctica \ + Arctic \ + Asia \ + Atlantic \ + Australia \ + Europe \ + Indian \ + Pacific + + +install-data-local: + for dir in $(DIRS); do \ + $(mkinstalldirs) $(DESTDIR)$(zoneinfodir)/$$dir; \ + for tzfile in $(srcdir)/$$dir/*.ics; do \ + $(INSTALL_DATA) $$tzfile $(DESTDIR)$(zoneinfodir)/$$dir; \ + done \ + done + +dist-hook: + for dir in $(DIRS); do \ + mkdir $(distdir)/$$dir; \ + for tzfile in $(srcdir)/$$dir/*.ics; do \ + cp -p $$tzfile $(distdir)/$$dir; \ + done \ + done + +EXTRA_DIST = $(zoneinfo_DATA) diff --git a/libkcal/libical/zoneinfo/Pacific/Apia.ics b/libkcal/libical/zoneinfo/Pacific/Apia.ics new file mode 100644 index 000000000..acb433c89 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Apia.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Apia +X-LIC-LOCATION:Pacific/Apia +BEGIN:STANDARD +TZOFFSETFROM:+123304 +TZOFFSETTO:-112656 +TZNAME:LMT +DTSTART:18790705T000000 +RDATE:18790705T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-112656 +TZOFFSETTO:-1130 +TZNAME:SAMT +DTSTART:19110101T000000 +RDATE:19110101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1130 +TZOFFSETTO:-1100 +TZNAME:WST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Auckland.ics b/libkcal/libical/zoneinfo/Pacific/Auckland.ics new file mode 100644 index 000000000..27a701660 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Auckland.ics @@ -0,0 +1,165 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Auckland +X-LIC-LOCATION:Pacific/Auckland +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:20070930T020000 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:20080406T030000 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+113904 +TZOFFSETTO:+1130 +TZNAME:NZMT +DTSTART:18681102T000000 +RDATE:18681102T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1130 +TZOFFSETTO:+1230 +TZNAME:NZST +DTSTART:19271106T020000 +RDATE:19271106T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1230 +TZOFFSETTO:+1130 +TZNAME:NZMT +DTSTART:19280304T020000 +RDATE:19280304T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1130 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19281014T020000 +RDATE:19281014T020000 +RDATE:19291013T020000 +RDATE:19301012T020000 +RDATE:19311011T020000 +RDATE:19321009T020000 +RDATE:19331008T020000 +RDATE:19340930T020000 +RDATE:19350929T020000 +RDATE:19360927T020000 +RDATE:19370926T020000 +RDATE:19380925T020000 +RDATE:19390924T020000 +RDATE:19400929T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1130 +TZNAME:NZMT +DTSTART:19290317T020000 +RDATE:19290317T020000 +RDATE:19300316T020000 +RDATE:19310315T020000 +RDATE:19320320T020000 +RDATE:19330319T020000 +RDATE:19340429T020000 +RDATE:19350428T020000 +RDATE:19360426T020000 +RDATE:19370425T020000 +RDATE:19380424T020000 +RDATE:19390430T020000 +RDATE:19400428T020000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19460101T000000 +RDATE:19460101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:NZDT +DTSTART:19741103T020000 +RDATE:19741103T020000 +RDATE:19751026T020000 +RDATE:19761031T020000 +RDATE:19771030T020000 +RDATE:19781029T020000 +RDATE:19791028T020000 +RDATE:19801026T020000 +RDATE:19811025T020000 +RDATE:19821031T020000 +RDATE:19831030T020000 +RDATE:19841028T020000 +RDATE:19851027T020000 +RDATE:19861026T020000 +RDATE:19871025T020000 +RDATE:19881030T020000 +RDATE:19891008T020000 +RDATE:19901007T020000 +RDATE:19911006T020000 +RDATE:19921004T020000 +RDATE:19931003T020000 +RDATE:19941002T020000 +RDATE:19951001T020000 +RDATE:19961006T020000 +RDATE:19971005T020000 +RDATE:19981004T020000 +RDATE:19991003T020000 +RDATE:20001001T020000 +RDATE:20011007T020000 +RDATE:20021006T020000 +RDATE:20031005T020000 +RDATE:20041003T020000 +RDATE:20051002T020000 +RDATE:20061001T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:NZST +DTSTART:19750223T030000 +RDATE:19750223T030000 +RDATE:19760307T030000 +RDATE:19770306T030000 +RDATE:19780305T030000 +RDATE:19790304T030000 +RDATE:19800302T030000 +RDATE:19810301T030000 +RDATE:19820307T030000 +RDATE:19830306T030000 +RDATE:19840304T030000 +RDATE:19850303T030000 +RDATE:19860302T030000 +RDATE:19870301T030000 +RDATE:19880306T030000 +RDATE:19890305T030000 +RDATE:19900318T030000 +RDATE:19910317T030000 +RDATE:19920315T030000 +RDATE:19930321T030000 +RDATE:19940320T030000 +RDATE:19950319T030000 +RDATE:19960317T030000 +RDATE:19970316T030000 +RDATE:19980315T030000 +RDATE:19990321T030000 +RDATE:20000319T030000 +RDATE:20010318T030000 +RDATE:20020317T030000 +RDATE:20030316T030000 +RDATE:20040321T030000 +RDATE:20050320T030000 +RDATE:20060319T030000 +RDATE:20070318T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Chatham.ics b/libkcal/libical/zoneinfo/Pacific/Chatham.ics new file mode 100644 index 000000000..7ea62d9ae --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Chatham.ics @@ -0,0 +1,107 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Chatham +X-LIC-LOCATION:Pacific/Chatham +BEGIN:DAYLIGHT +TZOFFSETFROM:+1245 +TZOFFSETTO:+1345 +TZNAME:CHADT +DTSTART:20070930T024500 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1345 +TZOFFSETTO:+1245 +TZNAME:CHAST +DTSTART:20080406T034500 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+121348 +TZOFFSETTO:+1245 +TZNAME:CHAST +DTSTART:19570101T000000 +RDATE:19570101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1245 +TZOFFSETTO:+1345 +TZNAME:CHADT +DTSTART:19741103T024500 +RDATE:19741103T024500 +RDATE:19751026T024500 +RDATE:19761031T024500 +RDATE:19771030T024500 +RDATE:19781029T024500 +RDATE:19791028T024500 +RDATE:19801026T024500 +RDATE:19811025T024500 +RDATE:19821031T024500 +RDATE:19831030T024500 +RDATE:19841028T024500 +RDATE:19851027T024500 +RDATE:19861026T024500 +RDATE:19871025T024500 +RDATE:19881030T024500 +RDATE:19891008T024500 +RDATE:19901007T024500 +RDATE:19911006T024500 +RDATE:19921004T024500 +RDATE:19931003T024500 +RDATE:19941002T024500 +RDATE:19951001T024500 +RDATE:19961006T024500 +RDATE:19971005T024500 +RDATE:19981004T024500 +RDATE:19991003T024500 +RDATE:20001001T024500 +RDATE:20011007T024500 +RDATE:20021006T024500 +RDATE:20031005T024500 +RDATE:20041003T024500 +RDATE:20051002T024500 +RDATE:20061001T024500 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1345 +TZOFFSETTO:+1245 +TZNAME:CHAST +DTSTART:19750223T034500 +RDATE:19750223T034500 +RDATE:19760307T034500 +RDATE:19770306T034500 +RDATE:19780305T034500 +RDATE:19790304T034500 +RDATE:19800302T034500 +RDATE:19810301T034500 +RDATE:19820307T034500 +RDATE:19830306T034500 +RDATE:19840304T034500 +RDATE:19850303T034500 +RDATE:19860302T034500 +RDATE:19870301T034500 +RDATE:19880306T034500 +RDATE:19890305T034500 +RDATE:19900318T034500 +RDATE:19910317T034500 +RDATE:19920315T034500 +RDATE:19930321T034500 +RDATE:19940320T034500 +RDATE:19950319T034500 +RDATE:19960317T034500 +RDATE:19970316T034500 +RDATE:19980315T034500 +RDATE:19990321T034500 +RDATE:20000319T034500 +RDATE:20010318T034500 +RDATE:20020317T034500 +RDATE:20030316T034500 +RDATE:20040321T034500 +RDATE:20050320T034500 +RDATE:20060319T034500 +RDATE:20070318T034500 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Easter.ics b/libkcal/libical/zoneinfo/Pacific/Easter.ics new file mode 100644 index 000000000..586d695ed --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Easter.ics @@ -0,0 +1,154 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Easter +X-LIC-LOCATION:Pacific/Easter +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EASST +DTSTART:19991009T220000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:EAST +DTSTART:20090314T220000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-071744 +TZOFFSETTO:-071728 +TZNAME:EMT +DTSTART:18900101T000000 +RDATE:18900101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-071728 +TZOFFSETTO:-0600 +TZNAME:EASST +DTSTART:19320901T000000 +RDATE:19320901T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0700 +TZNAME:EAST +DTSTART:19420531T220000 +RDATE:19420531T220000 +RDATE:19460831T210000 +RDATE:19690329T210000 +RDATE:19700328T210000 +RDATE:19710313T210000 +RDATE:19720311T210000 +RDATE:19730310T210000 +RDATE:19740309T210000 +RDATE:19750308T210000 +RDATE:19760313T210000 +RDATE:19770312T210000 +RDATE:19780311T210000 +RDATE:19790310T210000 +RDATE:19800308T210000 +RDATE:19810314T210000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0700 +TZOFFSETTO:-0600 +TZNAME:EASST +DTSTART:19420731T220000 +RDATE:19420731T220000 +RDATE:19681102T210000 +RDATE:19691122T210000 +RDATE:19701010T210000 +RDATE:19711009T210000 +RDATE:19721014T210000 +RDATE:19730929T210000 +RDATE:19741012T210000 +RDATE:19751011T210000 +RDATE:19761009T210000 +RDATE:19771008T210000 +RDATE:19781014T210000 +RDATE:19791013T210000 +RDATE:19801011T210000 +RDATE:19811010T210000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:EASST +DTSTART:19460714T220000 +RDATE:19460714T220000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0700 +TZOFFSETTO:-0700 +TZNAME:EAST +DTSTART:19470331T210000 +RDATE:19470331T210000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0600 +TZOFFSETTO:-0600 +TZNAME:EAST +DTSTART:19820313T210000 +RDATE:19820313T210000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:EASST +DTSTART:19821009T220000 +RDATE:19821009T220000 +RDATE:19831008T220000 +RDATE:19841013T220000 +RDATE:19851012T220000 +RDATE:19861011T220000 +RDATE:19871010T220000 +RDATE:19881001T220000 +RDATE:19891014T220000 +RDATE:19900915T220000 +RDATE:19911012T220000 +RDATE:19921010T220000 +RDATE:19931009T220000 +RDATE:19941008T220000 +RDATE:19951014T220000 +RDATE:19961012T220000 +RDATE:19971011T220000 +RDATE:19980926T220000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:EAST +DTSTART:19830312T220000 +RDATE:19830312T220000 +RDATE:19840310T220000 +RDATE:19850309T220000 +RDATE:19860308T220000 +RDATE:19870411T220000 +RDATE:19880312T220000 +RDATE:19890311T220000 +RDATE:19900317T220000 +RDATE:19910309T220000 +RDATE:19920314T220000 +RDATE:19930313T220000 +RDATE:19940312T220000 +RDATE:19950311T220000 +RDATE:19960309T220000 +RDATE:19970329T220000 +RDATE:19980314T220000 +RDATE:19990403T220000 +RDATE:20000311T220000 +RDATE:20010310T220000 +RDATE:20020309T220000 +RDATE:20030308T220000 +RDATE:20040313T220000 +RDATE:20050312T220000 +RDATE:20060311T220000 +RDATE:20070310T220000 +RDATE:20080329T220000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Efate.ics b/libkcal/libical/zoneinfo/Pacific/Efate.ics new file mode 100644 index 000000000..8e948a459 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Efate.ics @@ -0,0 +1,47 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Efate +X-LIC-LOCATION:Pacific/Efate +BEGIN:STANDARD +TZOFFSETFROM:+111316 +TZOFFSETTO:+1100 +TZNAME:VUT +DTSTART:19120113T000000 +RDATE:19120113T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:VUST +DTSTART:19830925T000000 +RDATE:19830925T000000 +RDATE:19841023T000000 +RDATE:19850929T000000 +RDATE:19860928T000000 +RDATE:19870927T000000 +RDATE:19880925T000000 +RDATE:19890924T000000 +RDATE:19900923T000000 +RDATE:19910929T000000 +RDATE:19921025T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:VUT +DTSTART:19840325T000000 +RDATE:19840325T000000 +RDATE:19850324T000000 +RDATE:19860323T000000 +RDATE:19870329T000000 +RDATE:19880327T000000 +RDATE:19890326T000000 +RDATE:19900325T000000 +RDATE:19910324T000000 +RDATE:19920126T000000 +RDATE:19930124T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Enderbury.ics b/libkcal/libical/zoneinfo/Pacific/Enderbury.ics new file mode 100644 index 000000000..8cd363806 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Enderbury.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Enderbury +X-LIC-LOCATION:Pacific/Enderbury +BEGIN:STANDARD +TZOFFSETFROM:-112420 +TZOFFSETTO:-1200 +TZNAME:PHOT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1200 +TZOFFSETTO:-1100 +TZNAME:PHOT +DTSTART:19791001T000000 +RDATE:19791001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:+1300 +TZNAME:PHOT +DTSTART:19950101T000000 +RDATE:19950101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Fakaofo.ics b/libkcal/libical/zoneinfo/Pacific/Fakaofo.ics new file mode 100644 index 000000000..7596b3390 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Fakaofo.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Fakaofo +X-LIC-LOCATION:Pacific/Fakaofo +BEGIN:STANDARD +TZOFFSETFROM:-112456 +TZOFFSETTO:-1000 +TZNAME:TKT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Fiji.ics b/libkcal/libical/zoneinfo/Pacific/Fiji.ics new file mode 100644 index 000000000..d1360ead4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Fiji.ics @@ -0,0 +1,31 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Fiji +X-LIC-LOCATION:Pacific/Fiji +BEGIN:STANDARD +TZOFFSETFROM:+115340 +TZOFFSETTO:+1200 +TZNAME:FJT +DTSTART:19151026T000000 +RDATE:19151026T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +TZNAME:FJST +DTSTART:19981101T020000 +RDATE:19981101T020000 +RDATE:19991107T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +TZNAME:FJT +DTSTART:19990228T030000 +RDATE:19990228T030000 +RDATE:20000227T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Funafuti.ics b/libkcal/libical/zoneinfo/Pacific/Funafuti.ics new file mode 100644 index 000000000..d9635414b --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Funafuti.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Funafuti +X-LIC-LOCATION:Pacific/Funafuti +BEGIN:STANDARD +TZOFFSETFROM:+115652 +TZOFFSETTO:+1200 +TZNAME:TVT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Galapagos.ics b/libkcal/libical/zoneinfo/Pacific/Galapagos.ics new file mode 100644 index 000000000..d046d8a78 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Galapagos.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Galapagos +X-LIC-LOCATION:Pacific/Galapagos +BEGIN:STANDARD +TZOFFSETFROM:-055824 +TZOFFSETTO:-0500 +TZNAME:ECT +DTSTART:19310101T000000 +RDATE:19310101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:GALT +DTSTART:19860101T000000 +RDATE:19860101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Gambier.ics b/libkcal/libical/zoneinfo/Pacific/Gambier.ics new file mode 100644 index 000000000..ee42de04a --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Gambier.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Gambier +X-LIC-LOCATION:Pacific/Gambier +BEGIN:STANDARD +TZOFFSETFROM:-085948 +TZOFFSETTO:-0900 +TZNAME:GAMT +DTSTART:19121001T000000 +RDATE:19121001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Guadalcanal.ics b/libkcal/libical/zoneinfo/Pacific/Guadalcanal.ics new file mode 100644 index 000000000..2ee7a6c05 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Guadalcanal.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Guadalcanal +X-LIC-LOCATION:Pacific/Guadalcanal +BEGIN:STANDARD +TZOFFSETFROM:+103948 +TZOFFSETTO:+1100 +TZNAME:SBT +DTSTART:19121001T000000 +RDATE:19121001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Guam.ics b/libkcal/libical/zoneinfo/Pacific/Guam.ics new file mode 100644 index 000000000..da6526a74 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Guam.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Guam +X-LIC-LOCATION:Pacific/Guam +BEGIN:STANDARD +TZOFFSETFROM:-1421 +TZOFFSETTO:+0939 +TZNAME:LMT +DTSTART:18441231T000000 +RDATE:18441231T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0939 +TZOFFSETTO:+1000 +TZNAME:GST +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:ChST +DTSTART:20001223T000000 +RDATE:20001223T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Honolulu.ics b/libkcal/libical/zoneinfo/Pacific/Honolulu.ics new file mode 100644 index 000000000..dc714faf3 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Honolulu.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Honolulu +X-LIC-LOCATION:Pacific/Honolulu +BEGIN:STANDARD +TZOFFSETFROM:-103126 +TZOFFSETTO:-1030 +TZNAME:HST +DTSTART:19000101T120000 +RDATE:19000101T120000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1030 +TZOFFSETTO:-0930 +TZNAME:HDT +DTSTART:19330430T020000 +RDATE:19330430T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0930 +TZOFFSETTO:-1030 +TZNAME:HST +DTSTART:19330521T020000 +RDATE:19330521T020000 +RDATE:19450930T020000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1030 +TZOFFSETTO:-0930 +TZNAME:HWT +DTSTART:19420209T020000 +RDATE:19420209T020000 +END:DAYLIGHT +BEGIN:DAYLIGHT +TZOFFSETFROM:-0930 +TZOFFSETTO:-0930 +TZNAME:HPT +DTSTART:19450814T133000 +RDATE:19450814T133000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1030 +TZOFFSETTO:-1000 +TZNAME:HST +DTSTART:19470608T020000 +RDATE:19470608T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Johnston.ics b/libkcal/libical/zoneinfo/Pacific/Johnston.ics new file mode 100644 index 000000000..bc2493685 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Johnston.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Johnston +X-LIC-LOCATION:Pacific/Johnston +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1000 +TZNAME:HST +DTSTART:16010101T000000 +RDATE:16010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Kiritimati.ics b/libkcal/libical/zoneinfo/Pacific/Kiritimati.ics new file mode 100644 index 000000000..2dc18c735 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Kiritimati.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Kiritimati +X-LIC-LOCATION:Pacific/Kiritimati +BEGIN:STANDARD +TZOFFSETFROM:-102920 +TZOFFSETTO:-1040 +TZNAME:LINT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1040 +TZOFFSETTO:-1000 +TZNAME:LINT +DTSTART:19791001T000000 +RDATE:19791001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:+1400 +TZNAME:LINT +DTSTART:19950101T000000 +RDATE:19950101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Kosrae.ics b/libkcal/libical/zoneinfo/Pacific/Kosrae.ics new file mode 100644 index 000000000..1dc914cc4 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Kosrae.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Kosrae +X-LIC-LOCATION:Pacific/Kosrae +BEGIN:STANDARD +TZOFFSETFROM:+105156 +TZOFFSETTO:+1100 +TZNAME:KOST +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:KOST +DTSTART:19691001T000000 +RDATE:19691001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:KOST +DTSTART:19990101T000000 +RDATE:19990101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Kwajalein.ics b/libkcal/libical/zoneinfo/Pacific/Kwajalein.ics new file mode 100644 index 000000000..9ec5dd3c9 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Kwajalein.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Kwajalein +X-LIC-LOCATION:Pacific/Kwajalein +BEGIN:STANDARD +TZOFFSETFROM:+110920 +TZOFFSETTO:+1100 +TZNAME:MHT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:-1200 +TZNAME:KWAT +DTSTART:19691001T000000 +RDATE:19691001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1200 +TZOFFSETTO:+1200 +TZNAME:MHT +DTSTART:19930820T000000 +RDATE:19930820T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Majuro.ics b/libkcal/libical/zoneinfo/Pacific/Majuro.ics new file mode 100644 index 000000000..8c9d6fc3c --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Majuro.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Majuro +X-LIC-LOCATION:Pacific/Majuro +BEGIN:STANDARD +TZOFFSETFROM:+112448 +TZOFFSETTO:+1100 +TZNAME:MHT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:MHT +DTSTART:19691001T000000 +RDATE:19691001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Marquesas.ics b/libkcal/libical/zoneinfo/Pacific/Marquesas.ics new file mode 100644 index 000000000..e827d7451 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Marquesas.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Marquesas +X-LIC-LOCATION:Pacific/Marquesas +BEGIN:STANDARD +TZOFFSETFROM:-0918 +TZOFFSETTO:-0930 +TZNAME:MART +DTSTART:19121001T000000 +RDATE:19121001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Midway.ics b/libkcal/libical/zoneinfo/Pacific/Midway.ics new file mode 100644 index 000000000..9f83ccc6f --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Midway.ics @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Midway +X-LIC-LOCATION:Pacific/Midway +BEGIN:STANDARD +TZOFFSETFROM:-114928 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1100 +TZOFFSETTO:-1000 +TZNAME:NDT +DTSTART:19560603T000000 +RDATE:19560603T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-1000 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19560902T000000 +RDATE:19560902T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19670401T000000 +RDATE:19670401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:SST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Nauru.ics b/libkcal/libical/zoneinfo/Pacific/Nauru.ics new file mode 100644 index 000000000..d3e600dab --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Nauru.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Nauru +X-LIC-LOCATION:Pacific/Nauru +BEGIN:STANDARD +TZOFFSETFROM:+110740 +TZOFFSETTO:+1130 +TZNAME:NRT +DTSTART:19210115T000000 +RDATE:19210115T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1130 +TZOFFSETTO:+0900 +TZNAME:JST +DTSTART:19420315T000000 +RDATE:19420315T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+1130 +TZNAME:NRT +DTSTART:19440815T000000 +RDATE:19440815T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1130 +TZOFFSETTO:+1200 +TZNAME:NRT +DTSTART:19790501T000000 +RDATE:19790501T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Niue.ics b/libkcal/libical/zoneinfo/Pacific/Niue.ics new file mode 100644 index 000000000..11e0a909b --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Niue.ics @@ -0,0 +1,29 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Niue +X-LIC-LOCATION:Pacific/Niue +BEGIN:STANDARD +TZOFFSETFROM:-111940 +TZOFFSETTO:-1120 +TZNAME:NUT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1120 +TZOFFSETTO:-1130 +TZNAME:NUT +DTSTART:19510101T000000 +RDATE:19510101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1130 +TZOFFSETTO:-1100 +TZNAME:NUT +DTSTART:19781001T000000 +RDATE:19781001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Norfolk.ics b/libkcal/libical/zoneinfo/Pacific/Norfolk.ics new file mode 100644 index 000000000..186b77435 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Norfolk.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Norfolk +X-LIC-LOCATION:Pacific/Norfolk +BEGIN:STANDARD +TZOFFSETFROM:+111152 +TZOFFSETTO:+1112 +TZNAME:NMT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1112 +TZOFFSETTO:+1130 +TZNAME:NFT +DTSTART:19510101T000000 +RDATE:19510101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Noumea.ics b/libkcal/libical/zoneinfo/Pacific/Noumea.ics new file mode 100644 index 000000000..fc61fb848 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Noumea.ics @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Noumea +X-LIC-LOCATION:Pacific/Noumea +BEGIN:STANDARD +TZOFFSETFROM:+110548 +TZOFFSETTO:+1100 +TZNAME:NCT +DTSTART:19120113T000000 +RDATE:19120113T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1100 +TZOFFSETTO:+1200 +TZNAME:NCST +DTSTART:19771204T000000 +RDATE:19771204T000000 +RDATE:19781203T000000 +RDATE:19961201T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:NCT +DTSTART:19780227T000000 +RDATE:19780227T000000 +RDATE:19790227T000000 +RDATE:19970302T030000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Pago_Pago.ics b/libkcal/libical/zoneinfo/Pacific/Pago_Pago.ics new file mode 100644 index 000000000..d46cfa32a --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Pago_Pago.ics @@ -0,0 +1,43 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Pago_Pago +X-LIC-LOCATION:Pacific/Pago_Pago +BEGIN:STANDARD +TZOFFSETFROM:+123712 +TZOFFSETTO:-112248 +TZNAME:LMT +DTSTART:18790705T000000 +RDATE:18790705T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-112248 +TZOFFSETTO:-1130 +TZNAME:SAMT +DTSTART:19110101T000000 +RDATE:19110101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1130 +TZOFFSETTO:-1100 +TZNAME:NST +DTSTART:19500101T000000 +RDATE:19500101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:BST +DTSTART:19670401T000000 +RDATE:19670401T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-1100 +TZOFFSETTO:-1100 +TZNAME:SST +DTSTART:19831130T000000 +RDATE:19831130T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Palau.ics b/libkcal/libical/zoneinfo/Pacific/Palau.ics new file mode 100644 index 000000000..3ab5df8f1 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Palau.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Palau +X-LIC-LOCATION:Pacific/Palau +BEGIN:STANDARD +TZOFFSETFROM:+085756 +TZOFFSETTO:+0900 +TZNAME:PWT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Pitcairn.ics b/libkcal/libical/zoneinfo/Pacific/Pitcairn.ics new file mode 100644 index 000000000..13b9b743d --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Pitcairn.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Pitcairn +X-LIC-LOCATION:Pacific/Pitcairn +BEGIN:STANDARD +TZOFFSETFROM:-084020 +TZOFFSETTO:-0830 +TZNAME:PNT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:-0830 +TZOFFSETTO:-0800 +TZNAME:PST +DTSTART:19980427T000000 +RDATE:19980427T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Ponape.ics b/libkcal/libical/zoneinfo/Pacific/Ponape.ics new file mode 100644 index 000000000..0aeb6face --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Ponape.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Ponape +X-LIC-LOCATION:Pacific/Ponape +BEGIN:STANDARD +TZOFFSETFROM:+103252 +TZOFFSETTO:+1100 +TZNAME:PONT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Port_Moresby.ics b/libkcal/libical/zoneinfo/Pacific/Port_Moresby.ics new file mode 100644 index 000000000..eb782f1a7 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Port_Moresby.ics @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Port_Moresby +X-LIC-LOCATION:Pacific/Port_Moresby +BEGIN:STANDARD +TZOFFSETFROM:+094840 +TZOFFSETTO:+094832 +TZNAME:PMMT +DTSTART:18800101T000000 +RDATE:18800101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+094832 +TZOFFSETTO:+1000 +TZNAME:PGT +DTSTART:18950101T000000 +RDATE:18950101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Rarotonga.ics b/libkcal/libical/zoneinfo/Pacific/Rarotonga.ics new file mode 100644 index 000000000..e074a0be0 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Rarotonga.ics @@ -0,0 +1,59 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Rarotonga +X-LIC-LOCATION:Pacific/Rarotonga +BEGIN:STANDARD +TZOFFSETFROM:-103904 +TZOFFSETTO:-1030 +TZNAME:CKT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1030 +TZOFFSETTO:-0930 +TZNAME:CKHST +DTSTART:19781112T000000 +RDATE:19781112T000000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0930 +TZOFFSETTO:-1000 +TZNAME:CKT +DTSTART:19790304T000000 +RDATE:19790304T000000 +RDATE:19800302T000000 +RDATE:19810301T000000 +RDATE:19820307T000000 +RDATE:19830306T000000 +RDATE:19840304T000000 +RDATE:19850303T000000 +RDATE:19860302T000000 +RDATE:19870301T000000 +RDATE:19880306T000000 +RDATE:19890305T000000 +RDATE:19900304T000000 +RDATE:19910303T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:-1000 +TZOFFSETTO:-0930 +TZNAME:CKHST +DTSTART:19791028T000000 +RDATE:19791028T000000 +RDATE:19801026T000000 +RDATE:19811025T000000 +RDATE:19821031T000000 +RDATE:19831030T000000 +RDATE:19841028T000000 +RDATE:19851027T000000 +RDATE:19861026T000000 +RDATE:19871025T000000 +RDATE:19881030T000000 +RDATE:19891029T000000 +RDATE:19901028T000000 +END:DAYLIGHT +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Saipan.ics b/libkcal/libical/zoneinfo/Pacific/Saipan.ics new file mode 100644 index 000000000..b26a4381c --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Saipan.ics @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Saipan +X-LIC-LOCATION:Pacific/Saipan +BEGIN:STANDARD +TZOFFSETFROM:-1417 +TZOFFSETTO:+0943 +TZNAME:LMT +DTSTART:18441231T000000 +RDATE:18441231T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0943 +TZOFFSETTO:+0900 +TZNAME:MPT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+0900 +TZOFFSETTO:+1000 +TZNAME:MPT +DTSTART:19691001T000000 +RDATE:19691001T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1000 +TZOFFSETTO:+1000 +TZNAME:ChST +DTSTART:20001223T000000 +RDATE:20001223T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Tahiti.ics b/libkcal/libical/zoneinfo/Pacific/Tahiti.ics new file mode 100644 index 000000000..61ad21c46 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Tahiti.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Tahiti +X-LIC-LOCATION:Pacific/Tahiti +BEGIN:STANDARD +TZOFFSETFROM:-095816 +TZOFFSETTO:-1000 +TZNAME:TAHT +DTSTART:19121001T000000 +RDATE:19121001T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Tarawa.ics b/libkcal/libical/zoneinfo/Pacific/Tarawa.ics new file mode 100644 index 000000000..084dd648b --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Tarawa.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Tarawa +X-LIC-LOCATION:Pacific/Tarawa +BEGIN:STANDARD +TZOFFSETFROM:+113204 +TZOFFSETTO:+1200 +TZNAME:GILT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Tongatapu.ics b/libkcal/libical/zoneinfo/Pacific/Tongatapu.ics new file mode 100644 index 000000000..b5ccc03f2 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Tongatapu.ics @@ -0,0 +1,47 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Tongatapu +X-LIC-LOCATION:Pacific/Tongatapu +BEGIN:STANDARD +TZOFFSETFROM:+121920 +TZOFFSETTO:+1220 +TZNAME:TOT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1220 +TZOFFSETTO:+1300 +TZNAME:TOT +DTSTART:19410101T000000 +RDATE:19410101T000000 +END:STANDARD +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1300 +TZNAME:TOT +DTSTART:19990101T000000 +RDATE:19990101T000000 +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1300 +TZOFFSETTO:+1400 +TZNAME:TOST +DTSTART:19991007T020000 +RDATE:19991007T020000 +RDATE:20001105T020000 +RDATE:20011104T020000 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+1400 +TZOFFSETTO:+1300 +TZNAME:TOT +DTSTART:20000319T030000 +RDATE:20000319T030000 +RDATE:20010128T020000 +RDATE:20020127T020000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Truk.ics b/libkcal/libical/zoneinfo/Pacific/Truk.ics new file mode 100644 index 000000000..a4183533e --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Truk.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Truk +X-LIC-LOCATION:Pacific/Truk +BEGIN:STANDARD +TZOFFSETFROM:+100708 +TZOFFSETTO:+1000 +TZNAME:TRUT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Wake.ics b/libkcal/libical/zoneinfo/Pacific/Wake.ics new file mode 100644 index 000000000..c4ab5bc46 --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Wake.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Wake +X-LIC-LOCATION:Pacific/Wake +BEGIN:STANDARD +TZOFFSETFROM:+110628 +TZOFFSETTO:+1200 +TZNAME:WAKT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/Pacific/Wallis.ics b/libkcal/libical/zoneinfo/Pacific/Wallis.ics new file mode 100644 index 000000000..83d5d3f0c --- /dev/null +++ b/libkcal/libical/zoneinfo/Pacific/Wallis.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//KDE//NONSGML KCal Olson-VTIMEZONE Converter//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/kde.org/Olson_20080523_1/Pacific/Wallis +X-LIC-LOCATION:Pacific/Wallis +BEGIN:STANDARD +TZOFFSETFROM:+121520 +TZOFFSETTO:+1200 +TZNAME:WFT +DTSTART:19010101T000000 +RDATE:19010101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/libkcal/libical/zoneinfo/zones.h b/libkcal/libical/zoneinfo/zones.h new file mode 100644 index 000000000..46c09b160 --- /dev/null +++ b/libkcal/libical/zoneinfo/zones.h @@ -0,0 +1,401 @@ +N_("Africa/Abidjan"); +N_("Africa/Accra"); +N_("Africa/Addis_Ababa"); +N_("Africa/Algiers"); +N_("Africa/Asmara"); +N_("Africa/Bamako"); +N_("Africa/Bangui"); +N_("Africa/Banjul"); +N_("Africa/Bissau"); +N_("Africa/Blantyre"); +N_("Africa/Brazzaville"); +N_("Africa/Bujumbura"); +N_("Africa/Cairo"); +N_("Africa/Casablanca"); +N_("Africa/Ceuta"); +N_("Africa/Conakry"); +N_("Africa/Dakar"); +N_("Africa/Dar_es_Salaam"); +N_("Africa/Djibouti"); +N_("Africa/Douala"); +N_("Africa/El_Aaiun"); +N_("Africa/Freetown"); +N_("Africa/Gaborone"); +N_("Africa/Harare"); +N_("Africa/Johannesburg"); +N_("Africa/Kampala"); +N_("Africa/Khartoum"); +N_("Africa/Kigali"); +N_("Africa/Kinshasa"); +N_("Africa/Lagos"); +N_("Africa/Libreville"); +N_("Africa/Lome"); +N_("Africa/Luanda"); +N_("Africa/Lubumbashi"); +N_("Africa/Lusaka"); +N_("Africa/Malabo"); +N_("Africa/Maputo"); +N_("Africa/Maseru"); +N_("Africa/Mbabane"); +N_("Africa/Mogadishu"); +N_("Africa/Monrovia"); +N_("Africa/Nairobi"); +N_("Africa/Ndjamena"); +N_("Africa/Niamey"); +N_("Africa/Nouakchott"); +N_("Africa/Ouagadougou"); +N_("Africa/Porto-Novo"); +N_("Africa/Sao_Tome"); +N_("Africa/Tripoli"); +N_("Africa/Tunis"); +N_("Africa/Windhoek"); +N_("America/Adak"); +N_("America/Anchorage"); +N_("America/Anguilla"); +N_("America/Antigua"); +N_("America/Araguaina"); +N_("America/Argentina/Buenos_Aires"); +N_("America/Argentina/Catamarca"); +N_("America/Argentina/Cordoba"); +N_("America/Argentina/Jujuy"); +N_("America/Argentina/La_Rioja"); +N_("America/Argentina/Mendoza"); +N_("America/Argentina/Rio_Gallegos"); +N_("America/Argentina/San_Juan"); +N_("America/Argentina/San_Luis"); +N_("America/Argentina/Tucuman"); +N_("America/Argentina/Ushuaia"); +N_("America/Aruba"); +N_("America/Asuncion"); +N_("America/Atikokan"); +N_("America/Bahia"); +N_("America/Barbados"); +N_("America/Belem"); +N_("America/Belize"); +N_("America/Blanc-Sablon"); +N_("America/Boa_Vista"); +N_("America/Bogota"); +N_("America/Boise"); +N_("America/Cambridge_Bay"); +N_("America/Campo_Grande"); +N_("America/Cancun"); +N_("America/Caracas"); +N_("America/Cayenne"); +N_("America/Cayman"); +N_("America/Chicago"); +N_("America/Chihuahua"); +N_("America/Costa_Rica"); +N_("America/Cuiaba"); +N_("America/Curacao"); +N_("America/Danmarkshavn"); +N_("America/Dawson"); +N_("America/Dawson_Creek"); +N_("America/Denver"); +N_("America/Detroit"); +N_("America/Dominica"); +N_("America/Edmonton"); +N_("America/Eirunepe"); +N_("America/El_Salvador"); +N_("America/Fortaleza"); +N_("America/Glace_Bay"); +N_("America/Godthab"); +N_("America/Goose_Bay"); +N_("America/Grand_Turk"); +N_("America/Grenada"); +N_("America/Guadeloupe"); +N_("America/Guatemala"); +N_("America/Guayaquil"); +N_("America/Guyana"); +N_("America/Halifax"); +N_("America/Havana"); +N_("America/Hermosillo"); +N_("America/Indiana/Indianapolis"); +N_("America/Indiana/Knox"); +N_("America/Indiana/Marengo"); +N_("America/Indiana/Petersburg"); +N_("America/Indiana/Tell_City"); +N_("America/Indiana/Vevay"); +N_("America/Indiana/Vincennes"); +N_("America/Indiana/Winamac"); +N_("America/Inuvik"); +N_("America/Iqaluit"); +N_("America/Jamaica"); +N_("America/Juneau"); +N_("America/Kentucky/Louisville"); +N_("America/Kentucky/Monticello"); +N_("America/La_Paz"); +N_("America/Lima"); +N_("America/Los_Angeles"); +N_("America/Maceio"); +N_("America/Managua"); +N_("America/Manaus"); +N_("America/Marigot"); +N_("America/Martinique"); +N_("America/Mazatlan"); +N_("America/Menominee"); +N_("America/Merida"); +N_("America/Mexico_City"); +N_("America/Miquelon"); +N_("America/Moncton"); +N_("America/Monterrey"); +N_("America/Montevideo"); +N_("America/Montreal"); +N_("America/Montserrat"); +N_("America/Nassau"); +N_("America/New_York"); +N_("America/Nipigon"); +N_("America/Nome"); +N_("America/Noronha"); +N_("America/North_Dakota/Center"); +N_("America/North_Dakota/New_Salem"); +N_("America/Panama"); +N_("America/Pangnirtung"); +N_("America/Paramaribo"); +N_("America/Phoenix"); +N_("America/Port-au-Prince"); +N_("America/Port_of_Spain"); +N_("America/Porto_Velho"); +N_("America/Puerto_Rico"); +N_("America/Rainy_River"); +N_("America/Rankin_Inlet"); +N_("America/Recife"); +N_("America/Regina"); +N_("America/Resolute"); +N_("America/Rio_Branco"); +N_("America/Santiago"); +N_("America/Santo_Domingo"); +N_("America/Sao_Paulo"); +N_("America/Scoresbysund"); +N_("America/Shiprock"); +N_("America/St_Barthelemy"); +N_("America/St_Johns"); +N_("America/St_Kitts"); +N_("America/St_Lucia"); +N_("America/St_Thomas"); +N_("America/St_Vincent"); +N_("America/Swift_Current"); +N_("America/Tegucigalpa"); +N_("America/Thule"); +N_("America/Thunder_Bay"); +N_("America/Tijuana"); +N_("America/Toronto"); +N_("America/Tortola"); +N_("America/Vancouver"); +N_("America/Whitehorse"); +N_("America/Winnipeg"); +N_("America/Yakutat"); +N_("America/Yellowknife"); +N_("Antarctica/Casey"); +N_("Antarctica/Davis"); +N_("Antarctica/DumontDUrville"); +N_("Antarctica/Mawson"); +N_("Antarctica/McMurdo"); +N_("Antarctica/Palmer"); +N_("Antarctica/Rothera"); +N_("Antarctica/South_Pole"); +N_("Antarctica/Syowa"); +N_("Antarctica/Vostok"); +N_("Arctic/Longyearbyen"); +N_("Asia/Aden"); +N_("Asia/Almaty"); +N_("Asia/Amman"); +N_("Asia/Anadyr"); +N_("Asia/Aqtau"); +N_("Asia/Aqtobe"); +N_("Asia/Ashgabat"); +N_("Asia/Baghdad"); +N_("Asia/Bahrain"); +N_("Asia/Baku"); +N_("Asia/Bangkok"); +N_("Asia/Beirut"); +N_("Asia/Bishkek"); +N_("Asia/Brunei"); +N_("Asia/Choibalsan"); +N_("Asia/Chongqing"); +N_("Asia/Colombo"); +N_("Asia/Damascus"); +N_("Asia/Dhaka"); +N_("Asia/Dili"); +N_("Asia/Dubai"); +N_("Asia/Dushanbe"); +N_("Asia/Gaza"); +N_("Asia/Harbin"); +N_("Asia/Ho_Chi_Minh"); +N_("Asia/Hong_Kong"); +N_("Asia/Hovd"); +N_("Asia/Irkutsk"); +N_("Asia/Istanbul"); +N_("Asia/Jakarta"); +N_("Asia/Jayapura"); +N_("Asia/Jerusalem"); +N_("Asia/Kabul"); +N_("Asia/Kamchatka"); +N_("Asia/Karachi"); +N_("Asia/Kashgar"); +N_("Asia/Katmandu"); +N_("Asia/Kolkata"); +N_("Asia/Krasnoyarsk"); +N_("Asia/Kuala_Lumpur"); +N_("Asia/Kuching"); +N_("Asia/Kuwait"); +N_("Asia/Macau"); +N_("Asia/Magadan"); +N_("Asia/Makassar"); +N_("Asia/Manila"); +N_("Asia/Muscat"); +N_("Asia/Nicosia"); +N_("Asia/Novosibirsk"); +N_("Asia/Omsk"); +N_("Asia/Oral"); +N_("Asia/Phnom_Penh"); +N_("Asia/Pontianak"); +N_("Asia/Pyongyang"); +N_("Asia/Qatar"); +N_("Asia/Qyzylorda"); +N_("Asia/Rangoon"); +N_("Asia/Riyadh"); +N_("Asia/Sakhalin"); +N_("Asia/Samarkand"); +N_("Asia/Seoul"); +N_("Asia/Shanghai"); +N_("Asia/Singapore"); +N_("Asia/Taipei"); +N_("Asia/Tashkent"); +N_("Asia/Tbilisi"); +N_("Asia/Tehran"); +N_("Asia/Thimphu"); +N_("Asia/Tokyo"); +N_("Asia/Ulaanbaatar"); +N_("Asia/Urumqi"); +N_("Asia/Vientiane"); +N_("Asia/Vladivostok"); +N_("Asia/Yakutsk"); +N_("Asia/Yekaterinburg"); +N_("Asia/Yerevan"); +N_("Atlantic/Azores"); +N_("Atlantic/Bermuda"); +N_("Atlantic/Canary"); +N_("Atlantic/Cape_Verde"); +N_("Atlantic/Faroe"); +N_("Atlantic/Madeira"); +N_("Atlantic/Reykjavik"); +N_("Atlantic/South_Georgia"); +N_("Atlantic/St_Helena"); +N_("Atlantic/Stanley"); +N_("Australia/Adelaide"); +N_("Australia/Brisbane"); +N_("Australia/Broken_Hill"); +N_("Australia/Currie"); +N_("Australia/Darwin"); +N_("Australia/Eucla"); +N_("Australia/Hobart"); +N_("Australia/Lindeman"); +N_("Australia/Lord_Howe"); +N_("Australia/Melbourne"); +N_("Australia/Perth"); +N_("Australia/Sydney"); +N_("Europe/Amsterdam"); +N_("Europe/Andorra"); +N_("Europe/Athens"); +N_("Europe/Belgrade"); +N_("Europe/Berlin"); +N_("Europe/Bratislava"); +N_("Europe/Brussels"); +N_("Europe/Bucharest"); +N_("Europe/Budapest"); +N_("Europe/Chisinau"); +N_("Europe/Copenhagen"); +N_("Europe/Dublin"); +N_("Europe/Gibraltar"); +N_("Europe/Guernsey"); +N_("Europe/Helsinki"); +N_("Europe/Isle_of_Man"); +N_("Europe/Istanbul"); +N_("Europe/Jersey"); +N_("Europe/Kaliningrad"); +N_("Europe/Kiev"); +N_("Europe/Lisbon"); +N_("Europe/Ljubljana"); +N_("Europe/London"); +N_("Europe/Luxembourg"); +N_("Europe/Madrid"); +N_("Europe/Malta"); +N_("Europe/Mariehamn"); +N_("Europe/Minsk"); +N_("Europe/Monaco"); +N_("Europe/Moscow"); +N_("Europe/Nicosia"); +N_("Europe/Oslo"); +N_("Europe/Paris"); +N_("Europe/Podgorica"); +N_("Europe/Prague"); +N_("Europe/Riga"); +N_("Europe/Rome"); +N_("Europe/Samara"); +N_("Europe/San_Marino"); +N_("Europe/Sarajevo"); +N_("Europe/Simferopol"); +N_("Europe/Skopje"); +N_("Europe/Sofia"); +N_("Europe/Stockholm"); +N_("Europe/Tallinn"); +N_("Europe/Tirane"); +N_("Europe/Uzhgorod"); +N_("Europe/Vaduz"); +N_("Europe/Vatican"); +N_("Europe/Vienna"); +N_("Europe/Vilnius"); +N_("Europe/Volgograd"); +N_("Europe/Warsaw"); +N_("Europe/Zagreb"); +N_("Europe/Zaporozhye"); +N_("Europe/Zurich"); +N_("Indian/Antananarivo"); +N_("Indian/Chagos"); +N_("Indian/Christmas"); +N_("Indian/Cocos"); +N_("Indian/Comoro"); +N_("Indian/Kerguelen"); +N_("Indian/Mahe"); +N_("Indian/Maldives"); +N_("Indian/Mauritius"); +N_("Indian/Mayotte"); +N_("Indian/Reunion"); +N_("Pacific/Apia"); +N_("Pacific/Auckland"); +N_("Pacific/Chatham"); +N_("Pacific/Easter"); +N_("Pacific/Efate"); +N_("Pacific/Enderbury"); +N_("Pacific/Fakaofo"); +N_("Pacific/Fiji"); +N_("Pacific/Funafuti"); +N_("Pacific/Galapagos"); +N_("Pacific/Gambier"); +N_("Pacific/Guadalcanal"); +N_("Pacific/Guam"); +N_("Pacific/Honolulu"); +N_("Pacific/Johnston"); +N_("Pacific/Kiritimati"); +N_("Pacific/Kosrae"); +N_("Pacific/Kwajalein"); +N_("Pacific/Majuro"); +N_("Pacific/Marquesas"); +N_("Pacific/Midway"); +N_("Pacific/Nauru"); +N_("Pacific/Niue"); +N_("Pacific/Norfolk"); +N_("Pacific/Noumea"); +N_("Pacific/Pago_Pago"); +N_("Pacific/Palau"); +N_("Pacific/Pitcairn"); +N_("Pacific/Ponape"); +N_("Pacific/Port_Moresby"); +N_("Pacific/Rarotonga"); +N_("Pacific/Saipan"); +N_("Pacific/Tahiti"); +N_("Pacific/Tarawa"); +N_("Pacific/Tongatapu"); +N_("Pacific/Truk"); +N_("Pacific/Wake"); +N_("Pacific/Wallis"); diff --git a/libkcal/libical/zoneinfo/zones.tab b/libkcal/libical/zoneinfo/zones.tab new file mode 100644 index 000000000..1aae2c41c --- /dev/null +++ b/libkcal/libical/zoneinfo/zones.tab @@ -0,0 +1,401 @@ ++0051900 -0040200 Africa/Abidjan ++0053300 +0001300 Africa/Accra ++0090200 +0384200 Africa/Addis_Ababa ++0364700 +0030300 Africa/Algiers ++0152000 +0385300 Africa/Asmara ++0123900 -0080000 Africa/Bamako ++0042200 +0183500 Africa/Bangui ++0132800 -0163900 Africa/Banjul ++0115100 -0153500 Africa/Bissau +-0154700 +0350000 Africa/Blantyre +-0041600 +0151700 Africa/Brazzaville +-0032300 +0292200 Africa/Bujumbura ++0300300 +0311500 Africa/Cairo ++0333900 -0073500 Africa/Casablanca ++0355300 -0051900 Africa/Ceuta ++0093100 -0134300 Africa/Conakry ++0144000 -0172600 Africa/Dakar +-0064800 +0391700 Africa/Dar_es_Salaam ++0113600 +0430900 Africa/Djibouti ++0040300 +0094200 Africa/Douala ++0270900 -0131200 Africa/El_Aaiun ++0083000 -0131500 Africa/Freetown +-0254500 +0255500 Africa/Gaborone +-0175000 +0310300 Africa/Harare +-0261500 +0280000 Africa/Johannesburg ++0001900 +0322500 Africa/Kampala ++0153600 +0323200 Africa/Khartoum +-0015700 +0300400 Africa/Kigali +-0041800 +0151800 Africa/Kinshasa ++0062700 +0032400 Africa/Lagos ++0002300 +0092700 Africa/Libreville ++0060800 +0011300 Africa/Lome +-0084800 +0131400 Africa/Luanda +-0114000 +0272800 Africa/Lubumbashi +-0152500 +0281700 Africa/Lusaka ++0034500 +0084700 Africa/Malabo +-0255800 +0323500 Africa/Maputo +-0292800 +0273000 Africa/Maseru +-0261800 +0310600 Africa/Mbabane ++0020400 +0452200 Africa/Mogadishu ++0061800 -0104700 Africa/Monrovia +-0011700 +0364900 Africa/Nairobi ++0120700 +0150300 Africa/Ndjamena ++0133100 +0020700 Africa/Niamey ++0180600 -0155700 Africa/Nouakchott ++0122200 -0013100 Africa/Ouagadougou ++0062900 +0023700 Africa/Porto-Novo ++0002000 +0064400 Africa/Sao_Tome ++0325400 +0131100 Africa/Tripoli ++0364800 +0101100 Africa/Tunis +-0223400 +0170600 Africa/Windhoek ++0515248 -1763929 America/Adak ++0611305 -1495401 America/Anchorage ++0181200 -0630400 America/Anguilla ++0170300 -0614800 America/Antigua +-0071200 -0481200 America/Araguaina +-0343600 -0582700 America/Argentina/Buenos_Aires +-0282800 -0654700 America/Argentina/Catamarca +-0312400 -0641100 America/Argentina/Cordoba +-0241100 -0651800 America/Argentina/Jujuy +-0292600 -0665100 America/Argentina/La_Rioja +-0325300 -0684900 America/Argentina/Mendoza +-0513800 -0691300 America/Argentina/Rio_Gallegos +-0313200 -0683100 America/Argentina/San_Juan +-0331900 -0662100 America/Argentina/San_Luis +-0264900 -0651300 America/Argentina/Tucuman +-0544800 -0681800 America/Argentina/Ushuaia ++0123000 -0695800 America/Aruba +-0251600 -0574000 America/Asuncion ++0484531 -0913718 America/Atikokan +-0125900 -0383100 America/Bahia ++0130600 -0593700 America/Barbados +-0012700 -0482900 America/Belem ++0173000 -0881200 America/Belize ++0512500 -0570700 America/Blanc-Sablon ++0024900 -0604000 America/Boa_Vista ++0043600 -0740500 America/Bogota ++0433649 -1161209 America/Boise ++0690650 -1050310 America/Cambridge_Bay +-0202700 -0543700 America/Campo_Grande ++0210500 -0864600 America/Cancun ++0103000 -0665600 America/Caracas ++0045600 -0522000 America/Cayenne ++0191800 -0812300 America/Cayman ++0415100 -0873900 America/Chicago ++0283800 -1060500 America/Chihuahua ++0095600 -0840500 America/Costa_Rica +-0153500 -0560500 America/Cuiaba ++0121100 -0690000 America/Curacao ++0764600 -0184000 America/Danmarkshavn ++0640400 -1392500 America/Dawson ++0594600 -1201400 America/Dawson_Creek ++0394421 -1045903 America/Denver ++0421953 -0830245 America/Detroit ++0151800 -0612400 America/Dominica ++0533300 -1132800 America/Edmonton +-0064000 -0695200 America/Eirunepe ++0134200 -0891200 America/El_Salvador +-0034300 -0383000 America/Fortaleza ++0461200 -0595700 America/Glace_Bay ++0641100 -0514400 America/Godthab ++0532000 -0602500 America/Goose_Bay ++0212800 -0710800 America/Grand_Turk ++0120300 -0614500 America/Grenada ++0161400 -0613200 America/Guadeloupe ++0143800 -0903100 America/Guatemala +-0021000 -0795000 America/Guayaquil ++0064800 -0581000 America/Guyana ++0443900 -0633600 America/Halifax ++0230800 -0822200 America/Havana ++0290400 -1105800 America/Hermosillo ++0394606 -0860929 America/Indiana/Indianapolis ++0411745 -0863730 America/Indiana/Knox ++0382232 -0862041 America/Indiana/Marengo ++0382931 -0871643 America/Indiana/Petersburg ++0375711 -0864541 America/Indiana/Tell_City ++0384452 -0850402 America/Indiana/Vevay ++0384038 -0873143 America/Indiana/Vincennes ++0410305 -0863611 America/Indiana/Winamac ++0682059 -1334300 America/Inuvik ++0634400 -0682800 America/Iqaluit ++0180000 -0764800 America/Jamaica ++0581807 -1342511 America/Juneau ++0381515 -0854534 America/Kentucky/Louisville ++0364947 -0845057 America/Kentucky/Monticello +-0163000 -0680900 America/La_Paz +-0120300 -0770300 America/Lima ++0340308 -1181434 America/Los_Angeles +-0094000 -0354300 America/Maceio ++0120900 -0861700 America/Managua +-0030800 -0600100 America/Manaus ++0180400 -0630500 America/Marigot ++0143600 -0610500 America/Martinique ++0231300 -1062500 America/Mazatlan ++0450628 -0873651 America/Menominee ++0205800 -0893700 America/Merida ++0192400 -0990900 America/Mexico_City ++0470300 -0562000 America/Miquelon ++0460600 -0644700 America/Moncton ++0254000 -1001900 America/Monterrey +-0345300 -0561100 America/Montevideo ++0453100 -0733400 America/Montreal ++0164300 -0621300 America/Montserrat ++0250500 -0772100 America/Nassau ++0404251 -0740023 America/New_York ++0490100 -0881600 America/Nipigon ++0643004 -1652423 America/Nome +-0035100 -0322500 America/Noronha ++0470659 -1011757 America/North_Dakota/Center ++0465042 -1012439 America/North_Dakota/New_Salem ++0085800 -0793200 America/Panama ++0660800 -0654400 America/Pangnirtung ++0055000 -0551000 America/Paramaribo ++0332654 -1120424 America/Phoenix ++0183200 -0722000 America/Port-au-Prince ++0103900 -0613100 America/Port_of_Spain +-0084600 -0635400 America/Porto_Velho ++0182806 -0660622 America/Puerto_Rico ++0484300 -0943400 America/Rainy_River ++0624900 -0920459 America/Rankin_Inlet +-0080300 -0345400 America/Recife ++0502400 -1043900 America/Regina ++0744144 -0944945 America/Resolute +-0095800 -0674800 America/Rio_Branco +-0332700 -0704000 America/Santiago ++0182800 -0695400 America/Santo_Domingo +-0233200 -0463700 America/Sao_Paulo ++0702900 -0215800 America/Scoresbysund ++0364708 -1084111 America/Shiprock ++0175300 -0625100 America/St_Barthelemy ++0473400 -0524300 America/St_Johns ++0171800 -0624300 America/St_Kitts ++0140100 -0610000 America/St_Lucia ++0182100 -0645600 America/St_Thomas ++0130900 -0611400 America/St_Vincent ++0501700 -1075000 America/Swift_Current ++0140600 -0871300 America/Tegucigalpa ++0763400 -0684700 America/Thule ++0482300 -0891500 America/Thunder_Bay ++0323200 -1170100 America/Tijuana ++0433900 -0792300 America/Toronto ++0182700 -0643700 America/Tortola ++0491600 -1230700 America/Vancouver ++0604300 -1350300 America/Whitehorse ++0495300 -0970900 America/Winnipeg ++0593249 -1394338 America/Yakutat ++0622700 -1142100 America/Yellowknife +-0661700 +1103100 Antarctica/Casey +-0683500 +0775800 Antarctica/Davis +-0664000 +1400100 Antarctica/DumontDUrville +-0673600 +0625300 Antarctica/Mawson +-0775000 +1663600 Antarctica/McMurdo +-0644800 -0640600 Antarctica/Palmer +-0673400 -0680800 Antarctica/Rothera +-0900000 +0000000 Antarctica/South_Pole +-0690022 +0393524 Antarctica/Syowa +-0782400 +1065400 Antarctica/Vostok ++0780000 +0160000 Arctic/Longyearbyen ++0124500 +0451200 Asia/Aden ++0431500 +0765700 Asia/Almaty ++0315700 +0355600 Asia/Amman ++0644500 +1772900 Asia/Anadyr ++0443100 +0501600 Asia/Aqtau ++0501700 +0571000 Asia/Aqtobe ++0375700 +0582300 Asia/Ashgabat ++0332100 +0442500 Asia/Baghdad ++0262300 +0503500 Asia/Bahrain ++0402300 +0495100 Asia/Baku ++0134500 +1003100 Asia/Bangkok ++0335300 +0353000 Asia/Beirut ++0425400 +0743600 Asia/Bishkek ++0045600 +1145500 Asia/Brunei ++0480400 +1143000 Asia/Choibalsan ++0293400 +1063500 Asia/Chongqing ++0065600 +0795100 Asia/Colombo ++0333000 +0361800 Asia/Damascus ++0234300 +0902500 Asia/Dhaka +-0083300 +1253500 Asia/Dili ++0251800 +0551800 Asia/Dubai ++0383500 +0684800 Asia/Dushanbe ++0313000 +0342800 Asia/Gaza ++0454500 +1264100 Asia/Harbin ++0104500 +1064000 Asia/Ho_Chi_Minh ++0221700 +1140900 Asia/Hong_Kong ++0480100 +0913900 Asia/Hovd ++0521600 +1042000 Asia/Irkutsk ++0410100 +0285800 Asia/Istanbul +-0061000 +1064800 Asia/Jakarta +-0023200 +1404200 Asia/Jayapura ++0314600 +0351400 Asia/Jerusalem ++0343100 +0691200 Asia/Kabul ++0530100 +1583900 Asia/Kamchatka ++0245200 +0670300 Asia/Karachi ++0392900 +0755900 Asia/Kashgar ++0274300 +0851900 Asia/Katmandu ++0223200 +0882200 Asia/Kolkata ++0560100 +0925000 Asia/Krasnoyarsk ++0031000 +1014200 Asia/Kuala_Lumpur ++0013300 +1102000 Asia/Kuching ++0292000 +0475900 Asia/Kuwait ++0221400 +1133500 Asia/Macau ++0593400 +1504800 Asia/Magadan +-0050700 +1192400 Asia/Makassar ++0143500 +1210000 Asia/Manila ++0233600 +0583500 Asia/Muscat ++0351000 +0332200 Asia/Nicosia ++0550200 +0825500 Asia/Novosibirsk ++0550000 +0732400 Asia/Omsk ++0511300 +0512100 Asia/Oral ++0113300 +1045500 Asia/Phnom_Penh ++0000200 +1092000 Asia/Pontianak ++0390100 +1254500 Asia/Pyongyang ++0251700 +0513200 Asia/Qatar ++0444800 +0652800 Asia/Qyzylorda ++0164700 +0961000 Asia/Rangoon ++0243800 +0464300 Asia/Riyadh ++0465800 +1424200 Asia/Sakhalin ++0394000 +0664800 Asia/Samarkand ++0373300 +1265800 Asia/Seoul ++0311400 +1212800 Asia/Shanghai ++0011700 +1035100 Asia/Singapore ++0250300 +1213000 Asia/Taipei ++0412000 +0691800 Asia/Tashkent ++0414300 +0444900 Asia/Tbilisi ++0354000 +0512600 Asia/Tehran ++0272800 +0893900 Asia/Thimphu ++0353916 +1394441 Asia/Tokyo ++0475500 +1065300 Asia/Ulaanbaatar ++0434800 +0873500 Asia/Urumqi ++0175800 +1023600 Asia/Vientiane ++0431000 +1315600 Asia/Vladivostok ++0620000 +1294000 Asia/Yakutsk ++0565100 +0603600 Asia/Yekaterinburg ++0401100 +0443000 Asia/Yerevan ++0374400 -0254000 Atlantic/Azores ++0321700 -0644600 Atlantic/Bermuda ++0280600 -0152400 Atlantic/Canary ++0145500 -0233100 Atlantic/Cape_Verde ++0620100 -0064600 Atlantic/Faroe ++0323800 -0165400 Atlantic/Madeira ++0640900 -0215100 Atlantic/Reykjavik +-0541600 -0363200 Atlantic/South_Georgia +-0155500 -0054200 Atlantic/St_Helena +-0514200 -0575100 Atlantic/Stanley +-0345500 +1383500 Australia/Adelaide +-0272800 +1530200 Australia/Brisbane +-0315700 +1412700 Australia/Broken_Hill +-0395600 +1435200 Australia/Currie +-0122800 +1305000 Australia/Darwin +-0314300 +1285200 Australia/Eucla +-0425300 +1471900 Australia/Hobart +-0201600 +1490000 Australia/Lindeman +-0313300 +1590500 Australia/Lord_Howe +-0374900 +1445800 Australia/Melbourne +-0315700 +1155100 Australia/Perth +-0335200 +1511300 Australia/Sydney ++0522200 +0045400 Europe/Amsterdam ++0423000 +0013100 Europe/Andorra ++0375800 +0234300 Europe/Athens ++0445000 +0203000 Europe/Belgrade ++0523000 +0132200 Europe/Berlin ++0480900 +0170700 Europe/Bratislava ++0505000 +0042000 Europe/Brussels ++0442600 +0260600 Europe/Bucharest ++0473000 +0190500 Europe/Budapest ++0470000 +0285000 Europe/Chisinau ++0554000 +0123500 Europe/Copenhagen ++0532000 -0061500 Europe/Dublin ++0360800 -0052100 Europe/Gibraltar ++0492700 -0023200 Europe/Guernsey ++0601000 +0245800 Europe/Helsinki ++0540900 -0042800 Europe/Isle_of_Man ++0410100 +0285800 Europe/Istanbul ++0491200 -0020700 Europe/Jersey ++0544300 +0203000 Europe/Kaliningrad ++0502600 +0303100 Europe/Kiev ++0384300 -0090800 Europe/Lisbon ++0460300 +0143100 Europe/Ljubljana ++0513030 +0000731 Europe/London ++0493600 +0060900 Europe/Luxembourg ++0402400 -0034100 Europe/Madrid ++0355400 +0143100 Europe/Malta ++0600600 +0195700 Europe/Mariehamn ++0535400 +0273400 Europe/Minsk ++0434200 +0072300 Europe/Monaco ++0554500 +0373500 Europe/Moscow ++0351000 +0332200 Europe/Nicosia ++0595500 +0104500 Europe/Oslo ++0485200 +0022000 Europe/Paris ++0422600 +0191600 Europe/Podgorica ++0500500 +0142600 Europe/Prague ++0565700 +0240600 Europe/Riga ++0415400 +0122900 Europe/Rome ++0531200 +0500900 Europe/Samara ++0435500 +0122800 Europe/San_Marino ++0435200 +0182500 Europe/Sarajevo ++0445700 +0340600 Europe/Simferopol ++0415900 +0212600 Europe/Skopje ++0424100 +0231900 Europe/Sofia ++0592000 +0180300 Europe/Stockholm ++0592500 +0244500 Europe/Tallinn ++0412000 +0195000 Europe/Tirane ++0483700 +0221800 Europe/Uzhgorod ++0470900 +0093100 Europe/Vaduz ++0415400 +0122700 Europe/Vatican ++0481300 +0162000 Europe/Vienna ++0544100 +0251900 Europe/Vilnius ++0484400 +0442500 Europe/Volgograd ++0521500 +0210000 Europe/Warsaw ++0454800 +0155800 Europe/Zagreb ++0475000 +0351000 Europe/Zaporozhye ++0472300 +0083200 Europe/Zurich +-0185500 +0473100 Indian/Antananarivo +-0072000 +0722500 Indian/Chagos +-0102500 +1054300 Indian/Christmas +-0121000 +0965500 Indian/Cocos +-0114100 +0431600 Indian/Comoro +-0492110 +0701303 Indian/Kerguelen +-0044000 +0552800 Indian/Mahe ++0041000 +0733000 Indian/Maldives +-0201000 +0573000 Indian/Mauritius +-0124700 +0451400 Indian/Mayotte +-0205200 +0552800 Indian/Reunion +-0135000 -1714400 Pacific/Apia +-0365200 +1744600 Pacific/Auckland +-0435700 -1763300 Pacific/Chatham +-0270900 -1092600 Pacific/Easter +-0174000 +1682500 Pacific/Efate +-0030800 -1710500 Pacific/Enderbury +-0092200 -1711400 Pacific/Fakaofo +-0180800 +1782500 Pacific/Fiji +-0083100 +1791300 Pacific/Funafuti ++0005400 -0893600 Pacific/Galapagos +-0230800 -1345700 Pacific/Gambier +-0093200 +1601200 Pacific/Guadalcanal ++0132800 +1444500 Pacific/Guam ++0211825 -1575130 Pacific/Honolulu ++0164500 -1693100 Pacific/Johnston ++0015200 -1572000 Pacific/Kiritimati ++0051900 +1625900 Pacific/Kosrae ++0090500 +1672000 Pacific/Kwajalein ++0070900 +1711200 Pacific/Majuro +-0090000 -1393000 Pacific/Marquesas ++0281300 -1772200 Pacific/Midway ++0003100 +1665500 Pacific/Nauru +-0190100 +1695500 Pacific/Niue +-0290300 +1675800 Pacific/Norfolk +-0221600 +1653000 Pacific/Noumea +-0141600 -1704200 Pacific/Pago_Pago ++0072000 +1342900 Pacific/Palau +-0250400 -1300500 Pacific/Pitcairn ++0065800 +1581300 Pacific/Ponape +-0093000 +1471000 Pacific/Port_Moresby +-0211400 -1594600 Pacific/Rarotonga ++0151200 +1454500 Pacific/Saipan +-0173200 -1493400 Pacific/Tahiti ++0012500 +1730000 Pacific/Tarawa +-0211000 +1751000 Pacific/Tongatapu ++0072500 +1514700 Pacific/Truk ++0191700 +1663700 Pacific/Wake +-0131800 -1761000 Pacific/Wallis |