diff options
141 files changed, 42278 insertions, 0 deletions
diff --git a/libical/AUTHORS b/libical/AUTHORS new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/libical/AUTHORS diff --git a/libical/CHANGES b/libical/CHANGES new file mode 100644 index 0000000000..953514a9e4 --- /dev/null +++ b/libical/CHANGES @@ -0,0 +1,222 @@ + +Version 0.15 +------------ + +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 +--------------------
\ No newline at end of file diff --git a/libical/COPYING b/libical/COPYING new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/libical/COPYING diff --git a/libical/ChangeLog b/libical/ChangeLog new file mode 100644 index 0000000000..935d5cfede --- /dev/null +++ b/libical/ChangeLog @@ -0,0 +1,62 @@ +2000-05-13 Ettore Perazzoli <ettore@helixcode.com> + + * src/libical/Makefile.am (INCLUDES): Include from the build + directory too. + +2000-05-10 Christopher James Lahey <clahey@helixcode.com> + + * configure.in: Reorder Makefiles so that it will build. + +2000-04-27 Ettore Perazzoli <ettore@helixcode.com> + + * src/test/Makefile.am + (INCLUDES): Add `-I ../libical' here too. + + * src/libicalss/Makefile.am: + (INCLUDES): I am an idiot. It should be `-I ../libical'. + +2000-04-27 Ettore Perazzoli <ettore@helixcode.com> + + * src/libicalss/Makefile.am: + (INCLUDES): Add `$(builddir)/../libicalss so that we can #include + "libicalversion.h" too. + +2000-04-26 Matt Loper <matt@helixcode.com> + + * src/libical/.cvsignore: added icalversion.h. + + * src/libical/icalversion.h: autogenerated file removed from cvs. + +2000-04-26 Christopher James Lahey <clahey@helixcode.com> + + * src/test/Makefile.in: Removed. + +2000-04-25 Ettore Perazzoli <ettore@helixcode.com> + + * src/libicalss/Makefile.am (INCLUDES): Use `$(srcdir)' properly. + +2000-04-24 Seth Alves <alves@hungry.com> + + * src/libical/icaltypes.c (icaldurationtype_from_timet): convert + from a time_t to an icaldurationtype. + +2000-03-17 Eric Busboom <eric@agony.qualcomm.com> + + * icalstore.c Vastly improved icalstore_test. + +2000-03-16 Eric Busboom <eric@agony.qualcomm.com> + + * 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/libical/INSTALL b/libical/INSTALL new file mode 100644 index 0000000000..88e2a5e7d6 --- /dev/null +++ b/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 ) 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/libical/MacOS/errno.h b/libical/MacOS/errno.h new file mode 100644 index 0000000000..4be3479b50 --- /dev/null +++ b/libical/MacOS/errno.h @@ -0,0 +1,185 @@ +/* + * Copyright (c) 1982, 1986, 1989 Regents of the University of California. + * All rights reserved. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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. + * + * @(#)errno.h 7.13 (Berkeley) 2/19/91 + */ + +#ifdef macintosh +#include <errno.h> +#else +#ifndef KERNEL +extern int errno; /* global error number */ +#endif +#endif + + +#define EPERM 1 /* Operation not permitted */ +/* MSL defines ENOMEM, EACCES, ENOENT, ENOSYS. We give in. */ +#ifndef ENOENT +#define ENOENT 2 /* No such file or directory */ +#endif +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* Input/output error */ +#define ENXIO 6 /* Device not configured */ +#define E2BIG 7 /* Argument list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file descriptor */ +#define ECHILD 10 /* No child processes */ +#define EDEADLK 11 /* Resource deadlock avoided */ + /* 11 was EAGAIN */ +#ifndef ENOMEM +#define ENOMEM 12 /* Cannot allocate memory */ +#define EACCES 13 /* Permission denied */ +#endif +#define EFAULT 14 /* Bad address */ +#ifndef _POSIX_SOURCE +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device busy */ +#endif +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* Operation not supported by device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* Too many open files in system */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Inappropriate ioctl for device */ +#ifndef _POSIX_SOURCE +#define ETXTBSY 26 /* Text file busy */ +#endif +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ + +#ifndef __MWERKS__ +/* math software */ +#define EDOM 33 /* Numerical argument out of domain */ +#define ERANGE 34 /* Result too large */ +#endif + +/* non-blocking and interrupt i/o */ +#if defined(macintosh) +#ifndef EAGAIN +#define EAGAIN 11 +#endif +#else +#define EAGAIN 35 /* Resource temporarily unavailable */ +#endif +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#ifndef _POSIX_SOURCE +/* Did I tell that MSL also occupies errnos 33-40? We give in. */ +#if ENOMEM==37 +#define EINPROGRESS 136 /* Operation now in progress */ +#define EALREADY 137 /* Operation already in progress */ + +/* ipc/network software -- argument errors */ +#define ENOTSOCK 138 /* Socket operation on non-socket */ +#define EDESTADDRREQ 139 /* Destination address required */ +#define EMSGSIZE 140 /* Message too long */ +#else +#define EINPROGRESS 36 /* Operation now in progress */ +#define EALREADY 37 /* Operation already in progress */ + +/* ipc/network software -- argument errors */ +#define ENOTSOCK 38 /* Socket operation on non-socket */ +#define EDESTADDRREQ 39 /* Destination address required */ +#define EMSGSIZE 40 /* Message too long */ +#endif +#define EPROTOTYPE 41 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 42 /* Protocol not available */ +#define EPROTONOSUPPORT 43 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 44 /* Socket type not supported */ +#define EOPNOTSUPP 45 /* Operation not supported on socket */ +#define EPFNOSUPPORT 46 /* Protocol family not supported */ +#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */ +#define EADDRINUSE 48 /* Address already in use */ +#define EADDRNOTAVAIL 49 /* Can't assign requested address */ + +/* ipc/network software -- operational errors */ +#define ENETDOWN 50 /* Network is down */ +#define ENETUNREACH 51 /* Network is unreachable */ +#define ENETRESET 52 /* Network dropped connection on reset */ +#define ECONNABORTED 53 /* Software caused connection abort */ +#define ECONNRESET 54 /* Connection reset by peer */ +#define ENOBUFS 55 /* No buffer space available */ +#define EISCONN 56 /* Socket is already connected */ +#define ENOTCONN 57 /* Socket is not connected */ +#define ESHUTDOWN 58 /* Can't send after socket shutdown */ +#define ETOOMANYREFS 59 /* Too many references: can't splice */ +#define ETIMEDOUT 60 /* Connection timed out */ +#define ECONNREFUSED 61 /* Connection refused */ + +#define ELOOP 62 /* Too many levels of symbolic links */ +#endif /* _POSIX_SOURCE */ +#define ENAMETOOLONG 63 /* File name too long */ + +/* should be rearranged */ +#ifndef _POSIX_SOURCE +#define EHOSTDOWN 64 /* Host is down */ +#define EHOSTUNREACH 65 /* No route to host */ +#endif /* _POSIX_SOURCE */ +#define ENOTEMPTY 66 /* Directory not empty */ + +/* quotas & mush */ +#ifndef _POSIX_SOURCE +#define EPROCLIM 67 /* Too many processes */ +#define EUSERS 68 /* Too many users */ +#define EDQUOT 69 /* Disc quota exceeded */ + +/* Network File System */ +#define ESTALE 70 /* Stale NFS file handle */ +#define EREMOTE 71 /* Too many levels of remote in path */ +#define EBADRPC 72 /* RPC struct is bad */ +#define ERPCMISMATCH 73 /* RPC version wrong */ +#define EPROGUNAVAIL 74 /* RPC prog. not avail */ +#define EPROGMISMATCH 75 /* Program version wrong */ +#define EPROCUNAVAIL 76 /* Bad procedure for program */ +#endif /* _POSIX_SOURCE */ + +#define ENOLCK 77 /* No locks available */ + +#ifndef ENOSYS +#define ENOSYS 78 /* Function not implemented */ +#endif + +#define EFTYPE 79 /* Inappropriate file type or format */ + +#ifdef KERNEL +/* pseudo-errors returned inside kernel to modify return to process */ +#define ERESTART -1 /* restart syscall */ +#define EJUSTRETURN -2 /* don't modify regs, just return */ +#endif diff --git a/libical/MacOS/libical.mcp b/libical/MacOS/libical.mcp Binary files differnew file mode 100644 index 0000000000..1c0ec4a35b --- /dev/null +++ b/libical/MacOS/libical.mcp diff --git a/libical/MacOS/libical.mcp.exp b/libical/MacOS/libical.mcp.exp new file mode 100644 index 0000000000..07c84e0efc --- /dev/null +++ b/libical/MacOS/libical.mcp.exp @@ -0,0 +1 @@ +icalvalue_get_utcoffset
icalvalue_set_utcoffset
icalvalue_new_utcoffset
icalvalue_get_uri
icalvalue_set_uri
icalvalue_new_uri
icalvalue_get_trigger
icalvalue_set_trigger
icalvalue_new_trigger
icalvalue_get_time
icalvalue_set_time
icalvalue_new_time
icalvalue_get_text
icalvalue_set_text
icalvalue_new_text
icalvalue_get_recur
icalvalue_set_recur
icalvalue_new_recur
icalvalue_get_period
icalvalue_set_period
icalvalue_new_period
icalvalue_get_integer
icalvalue_set_integer
icalvalue_new_integer
icalvalue_get_geo
icalvalue_set_geo
icalvalue_new_geo
icalvalue_get_float
icalvalue_set_float
icalvalue_new_float
icalvalue_get_duration
icalvalue_set_duration
icalvalue_new_duration
icalvalue_get_datetimeperiod
icalvalue_set_datetimeperiod
icalvalue_new_datetimeperiod
icalvalue_get_datetimedate
icalvalue_set_datetimedate
icalvalue_new_datetimedate
icalvalue_get_datetime
icalvalue_set_datetime
icalvalue_new_datetime
icalvalue_get_date
icalvalue_set_date
icalvalue_new_date
icalvalue_get_caladdress
icalvalue_set_caladdress
icalvalue_new_caladdress
icalvalue_get_boolean
icalvalue_set_boolean
icalvalue_new_boolean
icalvalue_get_binary
icalvalue_set_binary
icalvalue_new_binary
icalvalue_get_attach
icalvalue_set_attach
icalvalue_new_attach
icalvalue_isa_value
icalvalue_isa
icalvalue_as_ical_string
icalvalue_trigger_as_ical_string
icalvalue_period_as_ical_string
icalvalue_datetimeperiod_as_ical_string
icalvalue_recur_as_ical_string
icalvalue_geo_as_ical_string
icalvalue_float_as_ical_string
icalvalue_datetimedate_as_ical_string
icalvalue_datetime_as_ical_string
icalvalue_date_as_ical_string
icalvalue_time_as_ical_string
icalvalue_duration_as_ical_string
icalvalue_attach_as_ical_string
icalvalue_string_as_ical_string
icalvalue_int_as_ical_string
icalvalue_binary_as_ical_string
icalvalue_is_valid
icalvalue_free
icalvalue_new
icalvalue_new_impl
icalproperty_get_action
icalproperty_set_action
icalproperty_vanew_action
icalproperty_new_action
icalproperty_get_due
icalproperty_set_due
icalproperty_vanew_due
icalproperty_new_due
icalproperty_get_dtstamp
icalproperty_set_dtstamp
icalproperty_vanew_dtstamp
icalproperty_new_dtstamp
icalproperty_get_completed
icalproperty_set_completed
icalproperty_vanew_completed
icalproperty_new_completed
icalproperty_get_geo
icalproperty_set_geo
icalproperty_vanew_geo
icalproperty_new_geo
icalproperty_get_created
icalproperty_set_created
icalproperty_vanew_created
icalproperty_new_created
icalproperty_get_calscale
icalproperty_set_calscale
icalproperty_vanew_calscale
icalproperty_new_calscale
icalproperty_get_percentcomplete
icalproperty_set_percentcomplete
icalproperty_vanew_percentcomplete
icalproperty_new_percentcomplete
icalproperty_get_exrule
icalproperty_set_exrule
icalproperty_vanew_exrule
icalproperty_new_exrule
icalproperty_get_attach
icalproperty_set_attach
icalproperty_vanew_attach
icalproperty_new_attach
icalproperty_get_url
icalproperty_set_url
icalproperty_vanew_url
icalproperty_new_url
icalproperty_get_rdate
icalproperty_set_rdate
icalproperty_vanew_rdate
icalproperty_new_rdate
icalproperty_get_tzname
icalproperty_set_tzname
icalproperty_vanew_tzname
icalproperty_new_tzname
icalproperty_get_dtend
icalproperty_set_dtend
icalproperty_vanew_dtend
icalproperty_new_dtend
icalproperty_get_summary
icalproperty_set_summary
icalproperty_vanew_summary
icalproperty_new_summary
icalproperty_get_recurrenceid
icalproperty_set_recurrenceid
icalproperty_vanew_recurrenceid
icalproperty_new_recurrenceid
icalproperty_get_dtstart
icalproperty_set_dtstart
icalproperty_vanew_dtstart
icalproperty_new_dtstart
icalproperty_get_freebusy
icalproperty_set_freebusy
icalproperty_vanew_freebusy
icalproperty_new_freebusy
icalproperty_get_priority
icalproperty_set_priority
icalproperty_vanew_priority
icalproperty_new_priority
icalproperty_get_repeat
icalproperty_set_repeat
icalproperty_vanew_repeat
icalproperty_new_repeat
icalproperty_get_tzurl
icalproperty_set_tzurl
icalproperty_vanew_tzurl
icalproperty_new_tzurl
icalproperty_get_resources
icalproperty_set_resources
icalproperty_vanew_resources
icalproperty_new_resources
icalproperty_get_tzid
icalproperty_set_tzid
icalproperty_vanew_tzid
icalproperty_new_tzid
icalproperty_get_exdate
icalproperty_set_exdate
icalproperty_vanew_exdate
icalproperty_new_exdate
icalproperty_get_requeststatus
icalproperty_set_requeststatus
icalproperty_vanew_requeststatus
icalproperty_new_requeststatus
icalproperty_get_location
icalproperty_set_location
icalproperty_vanew_location
icalproperty_new_location
icalproperty_get_sequence
icalproperty_set_sequence
icalproperty_vanew_sequence
icalproperty_new_sequence
icalproperty_get_transp
icalproperty_set_transp
icalproperty_vanew_transp
icalproperty_new_transp
icalproperty_get_tzoffsetto
icalproperty_set_tzoffsetto
icalproperty_vanew_tzoffsetto
icalproperty_new_tzoffsetto
icalproperty_get_x_name
icalproperty_get_x
icalproperty_set_x_name
icalproperty_set_x
icalproperty_vanew_x
icalproperty_new_x
icalproperty_get_class
icalproperty_set_class
icalproperty_vanew_class
icalproperty_new_class
icalproperty_get_trigger
icalproperty_set_trigger
icalproperty_vanew_trigger
icalproperty_new_trigger
icalproperty_get_comment
icalproperty_set_comment
icalproperty_vanew_comment
icalproperty_new_comment
icalproperty_get_organizer
icalproperty_set_organizer
icalproperty_vanew_organizer
icalproperty_new_organizer
icalproperty_get_relatedto
icalproperty_set_relatedto
icalproperty_vanew_relatedto
icalproperty_new_relatedto
icalproperty_get_contact
icalproperty_set_contact
icalproperty_vanew_contact
icalproperty_new_contact
icalproperty_get_attendee
icalproperty_set_attendee
icalproperty_vanew_attendee
icalproperty_new_attendee
icalproperty_get_rrule
icalproperty_set_rrule
icalproperty_vanew_rrule
icalproperty_new_rrule
icalproperty_get_tzoffsetfrom
icalproperty_set_tzoffsetfrom
icalproperty_vanew_tzoffsetfrom
icalproperty_new_tzoffsetfrom
icalproperty_get_version
icalproperty_set_version
icalproperty_vanew_version
icalproperty_new_version
icalproperty_get_categories
icalproperty_set_categories
icalproperty_vanew_categories
icalproperty_new_categories
icalproperty_get_description
icalproperty_set_description
icalproperty_vanew_description
icalproperty_new_description
icalproperty_get_status
icalproperty_set_status
icalproperty_vanew_status
icalproperty_new_status
icalproperty_get_prodid
icalproperty_set_prodid
icalproperty_vanew_prodid
icalproperty_new_prodid
icalproperty_get_uid
icalproperty_set_uid
icalproperty_vanew_uid
icalproperty_new_uid
icalproperty_get_lastmodified
icalproperty_set_lastmodified
icalproperty_vanew_lastmodified
icalproperty_new_lastmodified
icalproperty_get_method
icalproperty_set_method
icalproperty_vanew_method
icalproperty_new_method
icalproperty_get_value
icalproperty_set_value
icalproperty_get_next_parameter
icalproperty_get_first_parameter
icalproperty_count_parameters
icalproperty_remove_parameter
icalproperty_add_parameter
icalproperty_isa_property
icalproperty_isa
icalproperty_as_ical_string
icalproperty_free
icalproperty_new
icalproperty_new_impl
icalproperty_add_parameters
icalparameter_set_x
icalparameter_get_x
icalparameter_new_x
icalparameter_set_value
icalparameter_get_value
icalparameter_new_value
icalparameter_set_tzid
icalparameter_get_tzid
icalparameter_new_tzid
icalparameter_set_sentby
icalparameter_get_sentby
icalparameter_new_sentby
icalparameter_set_rsvp
icalparameter_get_rsvp
icalparameter_new_rsvp
icalparameter_set_role
icalparameter_get_role
icalparameter_new_role
icalparameter_set_reltype
icalparameter_get_reltype
icalparameter_new_reltype
icalparameter_set_related
icalparameter_get_related
icalparameter_new_related
icalparameter_set_range
icalparameter_get_range
icalparameter_new_range
icalparameter_set_partstat
icalparameter_get_partstat
icalparameter_new_partstat
icalparameter_set_member
icalparameter_get_member
icalparameter_new_member
icalparameter_set_language
icalparameter_get_language
icalparameter_new_language
icalparameter_set_fmttype
icalparameter_get_fmttype
icalparameter_new_fmttype
icalparameter_set_fbtype
icalparameter_get_fbtype
icalparameter_new_fbtype
icalparameter_set_encoding
icalparameter_get_encoding
icalparameter_new_encoding
icalparameter_set_dir
icalparameter_get_dir
icalparameter_new_dir
icalparameter_set_delegatedto
icalparameter_get_delegatedto
icalparameter_new_delegatedto
icalparameter_set_delegatedfrom
icalparameter_get_delegatedfrom
icalparameter_new_delegatedfrom
icalparameter_set_cutype
icalparameter_get_cutype
icalparameter_new_cutype
icalparameter_set_cn
icalparameter_get_cn
icalparameter_new_cn
icalparameter_set_altrep
icalparameter_get_altrep
icalparameter_new_altrep
icalparameter_get_xname
icalparameterset_xname
icalparameter_isa_parameter
icalparameter_isa
icalparameter_is_valid
icalparameter_as_ical_string
icalparameter_free
icalparameter_new
icalparameter_new_impl
icalenum_string_to_component_kind
icalenum_component_kind_to_string
icalenum_value_kind_by_prop
icalenum_string_to_parameter_kind
icalenum_parameter_kind_to_string
icalenum_string_to_property_kind
icalenum_property_kind_to_string
icalcomponent_get_component
icalcomponent_get_next_component
icalcomponent_get_first_component
icalcomponent_count_components
icalcomponent_remove_component
icalcomponent_add_component
icalcomponent_get_properties
icalcomponent_get_next_property
icalcomponent_get_first_property
icalcomponent_count_properties
icalcomponent_remove_property
icalcomponent_add_property
icalcomponent_isa_component
icalcomponent_isa
icalcomponent_is_valid
icalcomponent_as_ical_string
icalcomponent_free
icalcomponent_vanew
icalcomponent_new
icalcomponent_new_impl
icalcomponent_add_children
#pvl_list_count
#pvl_elem_count
#pvl_apply
#pvl_data
#pvl_tail
#pvl_head
#pvl_prior
#pvl_next
#pvl_count
#pvl_clear
#pvl_find_next
#pvl_find
#pvl_remove
#pvl_insert_before
#pvl_insert_after
#pvl_insert_ordered
#pvl_pop
#pvl_push
#pvl_shift
#pvl_unshift
#pvl_new_element
#pvl_newlist
#strdup
icalrestriction_records
icalrestriction_is_parameter_allowed
icalrestriction_get_component_restriction
icalrestriction_get_property_restriction
icalerrno
icalerror_set_errno
icalerror_clear_errno
buffer_ring
initialized
buffer_pos
icalmemory_append_string
icalmemory_free_buffer
icalmemory_resize_buffer
icalmemory_new_buffer
icalmemory_free_tmp_buffer
icalmemory_resize_tmp_buffer
icalmemory_new_tmp_buffer
#__msipl_rd__3std # std::__msipl_rd
#__dt__Q23std18__random_generatorFv # std::__random_generator::~__random_generator()
#seed__Q23std18__random_generatorFUl # std::__random_generator::seed(unsigned long)
#setfill__3stdFi # std::setfill(int)
#setbase__3stdFi # std::setbase(int)
#setiosflags__3stdFl # std::setiosflags(long)
#resetiosflags__3stdFl # std::resetiosflags(long)
#ffill__3stdFRQ23std35basic_ios<w,Q23std14char_traits<w>>w # std::ffill(std::basic_ios<wchar_t, std::char_traits<wchar_t>>&,wchar_t)
#ffill__3stdFRQ23std35basic_ios<c,Q23std14char_traits<c>>i # std::ffill(std::basic_ios<char, std::char_traits<char>>&,int)
#setw__3stdFi # std::setw(int)
#setprecision__3stdFi # std::setprecision(int)
#__vt__Q23std39basic_istream<c,Q23std14char_traits<c>> # std::basic_istream<char, std::char_traits<char>>::__vt
#__vt__Q23std35basic_ios<c,Q23std14char_traits<c>> # std::basic_ios<char, std::char_traits<char>>::__vt
#__vt__Q23std39basic_ostream<c,Q23std14char_traits<c>> # std::basic_ostream<char, std::char_traits<char>>::__vt
#__vt__Q23std39basic_filebuf<c,Q23std14char_traits<c>> # std::basic_filebuf<char, std::char_traits<char>>::__vt
#__vt__Q23std41basic_streambuf<c,Q23std14char_traits<c>> # std::basic_streambuf<char, std::char_traits<char>>::__vt
#__vt__Q23std8bad_cast # std::bad_cast::__vt
#__vt__Q23std9exception # std::exception::__vt
#cerr__3std # std::cerr
#clog__3std # std::clog
#cout__3std # std::cout
#cin__3std # std::cin
#index__Q23std8ios_base # std::ios_base::index
#heap_size__Q23std14base_allocator # std::base_allocator::heap_size
#end_free__Q23std14base_allocator # std::base_allocator::end_free
#start_free__Q23std14base_allocator # std::base_allocator::start_free
#free_list__Q23std14base_allocator # std::base_allocator::free_list
#init_cnt__Q33std8ios_base4Init # std::ios_base::Init::init_cnt
#use_facet<Q23std8ctype<c>>__3stdFRCQ23std6locale # std::use_facet<Q23std8ctype<c>>(const std::locale&)
#what__Q23std9exceptionCFv # std::exception::what() const
#what__Q23std8bad_castCFv # std::bad_cast::what() const
#__dt__Q23std9exceptionFv # std::exception::~exception()
#use_facet<Q23std14codecvt<c,c,i>>__3stdFRCQ23std6locale # std::use_facet<Q23std14codecvt<c,c,i>>(const std::locale&)
#__dt__Q23std8bad_castFv # std::bad_cast::~bad_cast()
#init__Q23std35basic_ios<c,Q23std14char_traits<c>>FPQ23std41basic_streambuf<c,Q23std14char_traits<c>> # std::basic_ios<char, std::char_traits<char>>::init(std::basic_streambuf<char, std::char_traits<char>>*)
#always_noconv__Q23std23_Generic_codecvt<c,c,i>CFv # std::_Generic_codecvt<char, char, int>::always_noconv() const
#out__Q23std23_Generic_codecvt<c,c,i>CFRiPCcPCcRPCcPcPcRPc # std::_Generic_codecvt<char, char, int>::out(int&,const char*,const char*,const char*&,char*,char*,char*&) const
#__ct__Q23std39basic_ostream<c,Q23std14char_traits<c>>FPQ23std41basic_streambuf<c,Q23std14char_traits<c>> # std::basic_ostream<char, std::char_traits<char>>::basic_ostream(std::basic_streambuf<char, std::char_traits<char>>*)
#__ct__Q23std39basic_istream<c,Q23std14char_traits<c>>FPQ23std41basic_streambuf<c,Q23std14char_traits<c>> # std::basic_istream<char, std::char_traits<char>>::basic_istream(std::basic_streambuf<char, std::char_traits<char>>*)
#__dt__Q33std39basic_ostream<c,Q23std14char_traits<c>>6sentryFv # std::basic_ostream<char, std::char_traits<char>>::sentry::~sentry()
#flush__Q23std39basic_ostream<c,Q23std14char_traits<c>>Fv # std::basic_ostream<char, std::char_traits<char>>::flush()
#close__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::close()
#overflow__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fi # std::basic_streambuf<char, std::char_traits<char>>::overflow(int)
#xsputn__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FPCci # std::basic_streambuf<char, std::char_traits<char>>::xsputn(const char*,int)
#pbackfail__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fi # std::basic_streambuf<char, std::char_traits<char>>::pbackfail(int)
#uflow__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fv # std::basic_streambuf<char, std::char_traits<char>>::uflow()
#underflow__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fv # std::basic_streambuf<char, std::char_traits<char>>::underflow()
#xsgetn__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FPci # std::basic_streambuf<char, std::char_traits<char>>::xsgetn(char*,int)
#showmanyc__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fv # std::basic_streambuf<char, std::char_traits<char>>::showmanyc()
#sync__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fv # std::basic_streambuf<char, std::char_traits<char>>::sync()
#seekpos__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FQ23std7fpos<i>s # std::basic_streambuf<char, std::char_traits<char>>::seekpos(std::fpos<int>,short)
#seekoff__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FlQ33std8ios_base7seekdirs # std::basic_streambuf<char, std::char_traits<char>>::seekoff(long,std::ios_base::seekdir,short)
#setbuf__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FPci # std::basic_streambuf<char, std::char_traits<char>>::setbuf(char*,int)
#imbue__Q23std41basic_streambuf<c,Q23std14char_traits<c>>FRCQ23std6locale # std::basic_streambuf<char, std::char_traits<char>>::imbue(const std::locale&)
#xsputn__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FPCci # std::basic_filebuf<char, std::char_traits<char>>::xsputn(const char*,int)
#xsgetn__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FPci # std::basic_filebuf<char, std::char_traits<char>>::xsgetn(char*,int)
#showmanyc__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::showmanyc()
#imbue__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FRCQ23std6locale # std::basic_filebuf<char, std::char_traits<char>>::imbue(const std::locale&)
#uflow__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::uflow()
#sync__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::sync()
#setbuf__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FPci # std::basic_filebuf<char, std::char_traits<char>>::setbuf(char*,int)
#seekpos__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FQ23std7fpos<i>s # std::basic_filebuf<char, std::char_traits<char>>::seekpos(std::fpos<int>,short)
#seekoff__Q23std39basic_filebuf<c,Q23std14char_traits<c>>FlQ33std8ios_base7seekdirs # std::basic_filebuf<char, std::char_traits<char>>::seekoff(long,std::ios_base::seekdir,short)
#underflow__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::underflow()
#pbackfail__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fi # std::basic_filebuf<char, std::char_traits<char>>::pbackfail(int)
#overflow__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fi # std::basic_filebuf<char, std::char_traits<char>>::overflow(int)
#@8@68@__dt__Q23std39basic_ostream<c,Q23std14char_traits<c>>Fv
#__dt__Q23std35basic_ios<c,Q23std14char_traits<c>>Fv # std::basic_ios<char, std::char_traits<char>>::~basic_ios()
#@12@68@__dt__Q23std39basic_istream<c,Q23std14char_traits<c>>Fv
#__dt__Q23std39basic_istream<c,Q23std14char_traits<c>>Fv # std::basic_istream<char, std::char_traits<char>>::~basic_istream()
#__dt__Q23std39basic_ostream<c,Q23std14char_traits<c>>Fv # std::basic_ostream<char, std::char_traits<char>>::~basic_ostream()
#__dt__Q33std8ios_base4InitFv # std::ios_base::Init::~Init()
#__dt__Q23std41basic_streambuf<c,Q23std14char_traits<c>>Fv # std::basic_streambuf<char, std::char_traits<char>>::~basic_streambuf()
#__ct__Q33std8ios_base4InitFv # std::ios_base::Init::Init()
#__dt__Q23std39basic_filebuf<c,Q23std14char_traits<c>>Fv # std::basic_filebuf<char, std::char_traits<char>>::~basic_filebuf()
#__mask_map__3std # std::__mask_map
#__vt__Q23std15moneypunct<w,1> # std::moneypunct<wchar_t, 1>::__vt
#__vt__Q23std15moneypunct<w,0> # std::moneypunct<wchar_t, 0>::__vt
#__vt__Q23std15moneypunct<c,1> # std::moneypunct<char, 1>::__vt
#__vt__Q23std15moneypunct<c,0> # std::moneypunct<char, 0>::__vt
#__vt__Q23std12timepunct<w> # std::timepunct<wchar_t>::__vt
#__vt__Q23std12timepunct<c> # std::timepunct<char>::__vt
#__vt__Q23std11numpunct<w> # std::numpunct<wchar_t>::__vt
#__vt__Q23std11numpunct<c> # std::numpunct<char>::__vt
#__vt__Q23std14codecvt<w,c,i> # std::codecvt<wchar_t, char, int>::__vt
#__vt__Q23std14codecvt<c,c,i> # std::codecvt<char, char, int>::__vt
#__vt__Q23std15ctype_byname<c> # std::ctype_byname<char>::__vt
#__vt__Q23std8ctype<c> # std::ctype<char>::__vt
#__vt__Q23std8ctype<w> # std::ctype<wchar_t>::__vt
#__vt__Q33std6locale5facet # std::locale::facet::__vt
#__vt__Q23std13runtime_error # std::runtime_error::__vt
#__vt__Q23std12out_of_range # std::out_of_range::__vt
#__vt__Q23std12length_error # std::length_error::__vt
#__vt__Q23std11logic_error # std::logic_error::__vt
#__vt__Q23std9bad_alloc # std::bad_alloc::__vt
#__vt__Q23std23_Generic_codecvt<c,c,i> # std::_Generic_codecvt<char, char, int>::__vt
#__vt__Q23std23_Generic_codecvt<w,c,i> # std::_Generic_codecvt<wchar_t, char, int>::__vt
#__vt__Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::num_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std20_Generic_numpunct<c> # std::_Generic_numpunct<char>::__vt
#__vt__Q23std20_Generic_numpunct<w> # std::_Generic_numpunct<wchar_t>::__vt
#__vt__Q23std10collate<c> # std::collate<char>::__vt
#__vt__Q23std10collate<w> # std::collate<wchar_t>::__vt
#__vt__Q23std21_Generic_timepunct<c> # std::_Generic_timepunct<char>::__vt
#__vt__Q23std21_Generic_timepunct<w> # std::_Generic_timepunct<wchar_t>::__vt
#__vt__Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::time_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::money_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::__vt
#__vt__Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::__vt
#__vt__Q23std24_Generic_moneypunct<c,0> # std::_Generic_moneypunct<char, 0>::__vt
#__vt__Q23std24_Generic_moneypunct<c,1> # std::_Generic_moneypunct<char, 1>::__vt
#__vt__Q23std24_Generic_moneypunct<w,0> # std::_Generic_moneypunct<wchar_t, 0>::__vt
#__vt__Q23std24_Generic_moneypunct<w,1> # std::_Generic_moneypunct<wchar_t, 1>::__vt
#id__Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::num_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std10collate<c> # std::collate<char>::id
#__init__id__Q23std10collate<c>
#id__Q23std10collate<w> # std::collate<wchar_t>::id
#__init__id__Q23std10collate<w>
#id__Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::time_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::money_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::id
#__init__id__Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>
#id__Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::id
#__init__id__Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>
#id__Q23std15moneypunct<w,1> # std::moneypunct<wchar_t, 1>::id
#__init__id__Q23std15moneypunct<w,1>
#id__Q23std15moneypunct<w,0> # std::moneypunct<wchar_t, 0>::id
#__init__id__Q23std15moneypunct<w,0>
#id__Q23std15moneypunct<c,1> # std::moneypunct<char, 1>::id
#__init__id__Q23std15moneypunct<c,1>
#id__Q23std15moneypunct<c,0> # std::moneypunct<char, 0>::id
#__init__id__Q23std15moneypunct<c,0>
#id__Q23std12timepunct<w> # std::timepunct<wchar_t>::id
#__init__id__Q23std12timepunct<w>
#id__Q23std12timepunct<c> # std::timepunct<char>::id
#__init__id__Q23std12timepunct<c>
#id__Q23std11numpunct<w> # std::numpunct<wchar_t>::id
#__init__id__Q23std11numpunct<w>
#id__Q23std11numpunct<c> # std::numpunct<char>::id
#__init__id__Q23std11numpunct<c>
#id__Q23std14codecvt<w,c,i> # std::codecvt<wchar_t, char, int>::id
#__init__id__Q23std14codecvt<w,c,i>
#id__Q23std14codecvt<c,c,i> # std::codecvt<char, char, int>::id
#__init__id__Q23std14codecvt<c,c,i>
#id__Q23std8ctype<c> # std::ctype<char>::id
#__init__id__Q23std8ctype<c>
#id__Q23std8ctype<w> # std::ctype<wchar_t>::id
#__init__id__Q23std8ctype<w>
#global_s__Q23std6locale # std::locale::global_s
#id_count_s__Q33std6locale2id # std::locale::id::id_count_s
#insert__Q23std32vector<Pv,Q23std13allocator<Pv>>FPPvUlRCPv # std::vector<void*, std::allocator<void*>>::insert(void**,unsigned long,void*const&)
#erase__Q23std32vector<Pv,Q23std13allocator<Pv>>FPPvPPv # std::vector<void*, std::allocator<void*>>::erase(void**,void**)
#do_assign<PCPv>__Q23std32vector<Pv,Q23std13allocator<Pv>>FPCPvPCPvQ23std20forward_iterator_tag # std::vector<void*, std::allocator<void*>>::do_assign<PCPv>(void*const*,void*const*,std::forward_iterator_tag)
#resize__Q23std32vector<Pv,Q23std13allocator<Pv>>FUlPv # std::vector<void*, std::allocator<void*>>::resize(unsigned long,void*)
#compare__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>CFUlUlPCcUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::compare(unsigned long,unsigned long,const char*,unsigned long) const
#max_size__Q23std13allocator<Pv>CFv # std::allocator<void*>::max_size() const
#max_size__Q23std12allocator<w>CFv # std::allocator<wchar_t>::max_size() const
#max_size__Q23std12allocator<c>CFv # std::allocator<char>::max_size() const
#init__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FPCcPCcRCQ23std12allocator<c>Q23std26random_access_iterator_tag # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::init(const char*,const char*,const std::allocator<char>&,std::random_access_iterator_tag)
#append__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>UlUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::append(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&,unsigned long,unsigned long)
#init__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FPCwPCwRCQ23std12allocator<w>Q23std26random_access_iterator_tag # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::init(const wchar_t*,const wchar_t*,const std::allocator<wchar_t>&,std::random_access_iterator_tag)
#__dt__Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~money_put()
#__dt__Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::~money_put()
#__dt__Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::money_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~money_get()
#__dt__Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::~money_get()
#__dt__Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~time_put()
#__dt__Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::~time_put()
#__dt__Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::time_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~time_get()
#__dt__Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::~time_get()
#__dt__Q23std10collate<w>Fv # std::collate<wchar_t>::~collate()
#__dt__Q23std10collate<c>Fv # std::collate<char>::~collate()
#__dt__Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~num_put()
#__dt__Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::~num_put()
#__dt__Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>Fv # std::num_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::~num_get()
#__dt__Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>Fv # std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::~num_get()
#what__Q23std9bad_allocCFv # std::bad_alloc::what() const
#what__Q23std11logic_errorCFv # std::logic_error::what() const
#replace<Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::time_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std12timepunct<w>>__Q33std6locale3impFRCQ23std12timepunct<w> # std::locale::imp::replace<Q23std12timepunct<w>>(const std::timepunct<wchar_t>&)
#replace<Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std12timepunct<c>>__Q33std6locale3impFRCQ23std12timepunct<c> # std::locale::imp::replace<Q23std12timepunct<c>>(const std::timepunct<char>&)
#replace<Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::num_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std11numpunct<w>>__Q33std6locale3impFRCQ23std11numpunct<w> # std::locale::imp::replace<Q23std11numpunct<w>>(const std::numpunct<wchar_t>&)
#replace<Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std11numpunct<c>>__Q33std6locale3impFRCQ23std11numpunct<c> # std::locale::imp::replace<Q23std11numpunct<c>>(const std::numpunct<char>&)
#replace<Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__Q33std6locale3impFRCQ23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>> # std::locale::imp::replace<Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::money_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>&)
#replace<Q23std15moneypunct<w,1>>__Q33std6locale3impFRCQ23std15moneypunct<w,1> # std::locale::imp::replace<Q23std15moneypunct<w,1>>(const std::moneypunct<wchar_t, 1>&)
#replace<Q23std15moneypunct<w,0>>__Q33std6locale3impFRCQ23std15moneypunct<w,0> # std::locale::imp::replace<Q23std15moneypunct<w,0>>(const std::moneypunct<wchar_t, 0>&)
#replace<Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__Q33std6locale3impFRCQ23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>> # std::locale::imp::replace<Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>&)
#replace<Q23std15moneypunct<c,1>>__Q33std6locale3impFRCQ23std15moneypunct<c,1> # std::locale::imp::replace<Q23std15moneypunct<c,1>>(const std::moneypunct<char, 1>&)
#replace<Q23std15moneypunct<c,0>>__Q33std6locale3impFRCQ23std15moneypunct<c,0> # std::locale::imp::replace<Q23std15moneypunct<c,0>>(const std::moneypunct<char, 0>&)
#replace<Q23std14codecvt<w,c,i>>__Q33std6locale3impFRCQ23std14codecvt<w,c,i> # std::locale::imp::replace<Q23std14codecvt<w,c,i>>(const std::codecvt<wchar_t, char, int>&)
#replace<Q23std8ctype<w>>__Q33std6locale3impFRCQ23std8ctype<w> # std::locale::imp::replace<Q23std8ctype<w>>(const std::ctype<wchar_t>&)
#replace<Q23std14codecvt<c,c,i>>__Q33std6locale3impFRCQ23std14codecvt<c,c,i> # std::locale::imp::replace<Q23std14codecvt<c,c,i>>(const std::codecvt<char, char, int>&)
#replace<Q23std8ctype<c>>__Q33std6locale3impFRCQ23std8ctype<c> # std::locale::imp::replace<Q23std8ctype<c>>(const std::ctype<char>&)
#replace<Q23std10collate<w>>__Q33std6locale3impFRCQ23std10collate<w> # std::locale::imp::replace<Q23std10collate<w>>(const std::collate<wchar_t>&)
#replace<Q23std10collate<c>>__Q33std6locale3impFRCQ23std10collate<c> # std::locale::imp::replace<Q23std10collate<c>>(const std::collate<char>&)
#use_facet<Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std12timepunct<w>>__3stdFRCQ23std6locale # std::use_facet<Q23std12timepunct<w>>(const std::locale&)
#use_facet<Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std12timepunct<c>>__3stdFRCQ23std6locale # std::use_facet<Q23std12timepunct<c>>(const std::locale&)
#use_facet<Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std11numpunct<w>>__3stdFRCQ23std6locale # std::use_facet<Q23std11numpunct<w>>(const std::locale&)
#use_facet<Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std11numpunct<c>>__3stdFRCQ23std6locale # std::use_facet<Q23std11numpunct<c>>(const std::locale&)
#use_facet<Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>>(const std::locale&)
#use_facet<Q23std15moneypunct<w,1>>__3stdFRCQ23std6locale # std::use_facet<Q23std15moneypunct<w,1>>(const std::locale&)
#use_facet<Q23std15moneypunct<w,0>>__3stdFRCQ23std6locale # std::use_facet<Q23std15moneypunct<w,0>>(const std::locale&)
#use_facet<Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>__3stdFRCQ23std6locale # std::use_facet<Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>>(const std::locale&)
#use_facet<Q23std15moneypunct<c,1>>__3stdFRCQ23std6locale # std::use_facet<Q23std15moneypunct<c,1>>(const std::locale&)
#use_facet<Q23std15moneypunct<c,0>>__3stdFRCQ23std6locale # std::use_facet<Q23std15moneypunct<c,0>>(const std::locale&)
#use_facet<Q23std14codecvt<w,c,i>>__3stdFRCQ23std6locale # std::use_facet<Q23std14codecvt<w,c,i>>(const std::locale&)
#use_facet<Q23std8ctype<w>>__3stdFRCQ23std6locale # std::use_facet<Q23std8ctype<w>>(const std::locale&)
#use_facet<Q23std10collate<w>>__3stdFRCQ23std6locale # std::use_facet<Q23std10collate<w>>(const std::locale&)
#use_facet<Q23std10collate<c>>__3stdFRCQ23std6locale # std::use_facet<Q23std10collate<c>>(const std::locale&)
#__ct__Q23std32vector<Pv,Q23std13allocator<Pv>>FRCQ23std32vector<Pv,Q23std13allocator<Pv>> # std::vector<void*, std::allocator<void*>>::vector(const std::vector<void*, std::allocator<void*>>&)
#__as__Q23std32vector<Pv,Q23std13allocator<Pv>>FRCQ23std32vector<Pv,Q23std13allocator<Pv>> # std::vector<void*, std::allocator<void*>>::operator =(const std::vector<void*, std::allocator<void*>>&)
#init__Q23std32vector<Pv,Q23std13allocator<Pv>>FUlRCPv # std::vector<void*, std::allocator<void*>>::init(unsigned long,void*const&)
#__ne<c,Q23std14char_traits<c>,Q23std12allocator<c>>__3stdFRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>PCc # std::operator !=<char, std::char_traits<char>, std::allocator<char>>(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&,const char*)
#__pl<c,Q23std14char_traits<c>,Q23std12allocator<c>>__3stdFRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>RCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>> # std::operator +<char, std::char_traits<char>, std::allocator<char>>(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&,const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
#__ct__Q33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArrayFRCQ23std12allocator<w>Ul # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray::CharArray(const std::allocator<wchar_t>&,unsigned long)
#__dt__Q23std40_EmptyMemberOpt<Q23std12allocator<w>,Ul>Fv # std::_EmptyMemberOpt<std::allocator<wchar_t>, unsigned long>::~_EmptyMemberOpt()
#__ct__Q33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArrayFRCQ33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArray # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray::CharArray(const std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray&)
#get_allocator__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>CFv # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::get_allocator() const
#__ct__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FRCQ23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>UlUl # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::basic_string(const std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>&,unsigned long,unsigned long)
#__ct__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FPCwRCQ23std12allocator<w> # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::basic_string(const wchar_t*,const std::allocator<wchar_t>&)
#init__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FUlwRCQ23std12allocator<w> # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::init(unsigned long,wchar_t,const std::allocator<wchar_t>&)
#change_size__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FUlb # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::change_size(unsigned long,bool)
#__ct__Q33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArrayFRCQ23std12allocator<c>Ul # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray::CharArray(const std::allocator<char>&,unsigned long)
#get_allocator__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>CFv # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::get_allocator() const
#__ct__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>UlUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&,unsigned long,unsigned long)
#__ct__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FPCcRCQ23std12allocator<c> # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(const char*,const std::allocator<char>&)
#__dt__Q23std40_EmptyMemberOpt<Q23std12allocator<c>,Ul>Fv # std::_EmptyMemberOpt<std::allocator<char>, unsigned long>::~_EmptyMemberOpt()
#__ct__Q33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArrayFRCQ33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArray # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray::CharArray(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray&)
#assign__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>UlUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&,unsigned long,unsigned long)
#replace__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUlUlUlc # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::replace(unsigned long,unsigned long,unsigned long,char)
#__dt__Q23std12out_of_rangeFv # std::out_of_range::~out_of_range()
#init__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUlcRCQ23std12allocator<c> # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::init(unsigned long,char,const std::allocator<char>&)
#__dt__Q23std11logic_errorFv # std::logic_error::~logic_error()
#change_size__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUlb # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::change_size(unsigned long,bool)
#__dt__Q23std12length_errorFv # std::length_error::~length_error()
#__ct__62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>>FPQ33std6locale3imp # _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>::_RefCountedPtr(std::locale::imp*)
#__as__62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>>FRC62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>> # _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>::operator =(const _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>&)
#__dt__28_RefCountedPtr<c,9_Array<c>>Fv # _RefCountedPtr<char, _Array<char>>::~_RefCountedPtr()
#__ct__62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>>FRC62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>> # _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>::_RefCountedPtr(const _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>&)
#assign__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FPCcUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const char*,unsigned long)
#__vc__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUl # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::operator [](unsigned long)
#resize__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUlc # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::resize(unsigned long,char)
#end__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>Fv # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::end()
#begin__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>Fv # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::begin()
#__ct__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FRCQ23std12allocator<c> # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(const std::allocator<char>&)
#__vc__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FUl # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::operator [](unsigned long)
#resize__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FUlw # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::resize(unsigned long,wchar_t)
#__ct__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FRCQ23std12allocator<w> # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::basic_string(const std::allocator<wchar_t>&)
#__dt__Q23std9bad_allocFv # std::bad_alloc::~bad_alloc()
#__dt__Q23std23_Generic_codecvt<c,c,i>Fv # std::_Generic_codecvt<char, char, int>::~_Generic_codecvt()
#__ct__Q23std23_Generic_codecvt<c,c,i>FUl # std::_Generic_codecvt<char, char, int>::_Generic_codecvt(unsigned long)
#__dt__Q23std23_Generic_codecvt<w,c,i>Fv # std::_Generic_codecvt<wchar_t, char, int>::~_Generic_codecvt()
#__ct__Q23std23_Generic_codecvt<w,c,i>FUl # std::_Generic_codecvt<wchar_t, char, int>::_Generic_codecvt(unsigned long)
#__ct__Q23std64num_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::num_get(unsigned long)
#__ct__Q23std64num_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::num_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::num_get(unsigned long)
#__ct__Q23std64num_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::num_put(unsigned long)
#__ct__Q23std64num_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::num_put(unsigned long)
#__dt__Q23std20_Generic_numpunct<c>Fv # std::_Generic_numpunct<char>::~_Generic_numpunct()
#__ct__Q23std20_Generic_numpunct<c>FUl # std::_Generic_numpunct<char>::_Generic_numpunct(unsigned long)
#__dt__Q23std20_Generic_numpunct<w>Fv # std::_Generic_numpunct<wchar_t>::~_Generic_numpunct()
#__ct__Q23std20_Generic_numpunct<w>FUl # std::_Generic_numpunct<wchar_t>::_Generic_numpunct(unsigned long)
#__ct__Q23std10collate<c>FUl # std::collate<char>::collate(unsigned long)
#__ct__Q23std10collate<w>FUl # std::collate<wchar_t>::collate(unsigned long)
#__dt__Q23std21_Generic_timepunct<c>Fv # std::_Generic_timepunct<char>::~_Generic_timepunct()
#__ct__Q23std21_Generic_timepunct<c>FUl # std::_Generic_timepunct<char>::_Generic_timepunct(unsigned long)
#__dt__Q23std21_Generic_timepunct<w>Fv # std::_Generic_timepunct<wchar_t>::~_Generic_timepunct()
#__ct__Q23std21_Generic_timepunct<w>FUl # std::_Generic_timepunct<wchar_t>::_Generic_timepunct(unsigned long)
#__ct__Q23std65time_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::time_get(unsigned long)
#__ct__Q23std65time_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::time_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::time_get(unsigned long)
#__ct__Q23std65time_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::time_put(unsigned long)
#__ct__Q23std65time_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::time_put(unsigned long)
#__ct__Q23std66money_get<c,Q23std45istreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>>>::money_get(unsigned long)
#__ct__Q23std66money_get<w,Q23std45istreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::money_get<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::money_get(unsigned long)
#__ct__Q23std66money_put<c,Q23std45ostreambuf_iterator<c,Q23std14char_traits<c>>>FUl # std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>>>::money_put(unsigned long)
#__ct__Q23std66money_put<w,Q23std45ostreambuf_iterator<w,Q23std14char_traits<w>>>FUl # std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t>>>::money_put(unsigned long)
#__dt__Q23std24_Generic_moneypunct<c,0>Fv # std::_Generic_moneypunct<char, 0>::~_Generic_moneypunct()
#__ct__Q23std24_Generic_moneypunct<c,0>FUl # std::_Generic_moneypunct<char, 0>::_Generic_moneypunct(unsigned long)
#__dt__Q23std24_Generic_moneypunct<c,1>Fv # std::_Generic_moneypunct<char, 1>::~_Generic_moneypunct()
#__ct__Q23std24_Generic_moneypunct<c,1>FUl # std::_Generic_moneypunct<char, 1>::_Generic_moneypunct(unsigned long)
#__dt__Q23std24_Generic_moneypunct<w,0>Fv # std::_Generic_moneypunct<wchar_t, 0>::~_Generic_moneypunct()
#__ct__Q23std24_Generic_moneypunct<w,0>FUl # std::_Generic_moneypunct<wchar_t, 0>::_Generic_moneypunct(unsigned long)
#__dt__Q23std24_Generic_moneypunct<w,1>Fv # std::_Generic_moneypunct<wchar_t, 1>::~_Generic_moneypunct()
#__ct__Q23std24_Generic_moneypunct<w,1>FUl # std::_Generic_moneypunct<wchar_t, 1>::_Generic_moneypunct(unsigned long)
#__ct<PQ33std6locale5facet>__Q23std13allocator<Pv>FRCQ23std31allocator<PQ33std6locale5facet> # std::allocator<void*>::!<std::locale::facet*>(const std::allocator<std::locale::facet*>&)
#__ct<c>__Q23std88allocator<Q33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArray>FRCQ23std12allocator<c> # std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray>::!<char>(const std::allocator<char>&)
#__ct<w>__Q23std88allocator<Q33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArray>FRCQ23std12allocator<w> # std::allocator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray>::!<wchar_t>(const std::allocator<wchar_t>&)
#what__Q23std13runtime_errorCFv # std::runtime_error::what() const
#__dt__Q23std8ctype<w>Fv # std::ctype<wchar_t>::~ctype()
#__dt__Q23std15ctype_byname<c>Fv # std::ctype_byname<char>::~ctype_byname()
#__dt__Q23std14codecvt<c,c,i>Fv # std::codecvt<char, char, int>::~codecvt()
#__dt__Q23std14codecvt<w,c,i>Fv # std::codecvt<wchar_t, char, int>::~codecvt()
#do_falsename__Q23std11numpunct<c>CFv # std::numpunct<char>::do_falsename() const
#do_truename__Q23std11numpunct<c>CFv # std::numpunct<char>::do_truename() const
#do_grouping__Q23std11numpunct<c>CFv # std::numpunct<char>::do_grouping() const
#do_thousands_sep__Q23std11numpunct<c>CFv # std::numpunct<char>::do_thousands_sep() const
#do_decimal_point__Q23std11numpunct<c>CFv # std::numpunct<char>::do_decimal_point() const
#__dt__Q23std11numpunct<c>Fv # std::numpunct<char>::~numpunct()
#do_falsename__Q23std11numpunct<w>CFv # std::numpunct<wchar_t>::do_falsename() const
#do_truename__Q23std11numpunct<w>CFv # std::numpunct<wchar_t>::do_truename() const
#do_grouping__Q23std11numpunct<w>CFv # std::numpunct<wchar_t>::do_grouping() const
#do_thousands_sep__Q23std11numpunct<w>CFv # std::numpunct<wchar_t>::do_thousands_sep() const
#do_decimal_point__Q23std11numpunct<w>CFv # std::numpunct<wchar_t>::do_decimal_point() const
#__dt__Q23std11numpunct<w>Fv # std::numpunct<wchar_t>::~numpunct()
#__dt__Q23std12timepunct<c>Fv # std::timepunct<char>::~timepunct()
#__dt__Q23std12timepunct<w>Fv # std::timepunct<wchar_t>::~timepunct()
#do_neg_format__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_neg_format() const
#do_pos_format__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_pos_format() const
#do_frac_digits__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_frac_digits() const
#do_negative_sign__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_negative_sign() const
#do_positive_sign__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_positive_sign() const
#do_curr_symbol__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_curr_symbol() const
#do_grouping__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_grouping() const
#do_thousands_sep__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_thousands_sep() const
#do_decimal_point__Q23std15moneypunct<c,0>CFv # std::moneypunct<char, 0>::do_decimal_point() const
#__dt__Q23std15moneypunct<c,0>Fv # std::moneypunct<char, 0>::~moneypunct()
#do_neg_format__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_neg_format() const
#do_pos_format__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_pos_format() const
#do_frac_digits__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_frac_digits() const
#do_negative_sign__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_negative_sign() const
#do_positive_sign__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_positive_sign() const
#do_curr_symbol__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_curr_symbol() const
#do_grouping__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_grouping() const
#do_thousands_sep__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_thousands_sep() const
#do_decimal_point__Q23std15moneypunct<c,1>CFv # std::moneypunct<char, 1>::do_decimal_point() const
#__dt__Q23std15moneypunct<c,1>Fv # std::moneypunct<char, 1>::~moneypunct()
#__dt__Q23std88allocator<Q33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArray>Fv # std::allocator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray>::~allocator()
#__dt__Q23std192_EmptyMemberOpt<Q23std88allocator<Q33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArray>,PQ33std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>9CharArray>Fv # std::_EmptyMemberOpt<std::allocator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray>, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::CharArray*>::~_EmptyMemberOpt()
#__ct__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>FUlwRCQ23std12allocator<w> # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::basic_string(unsigned long,wchar_t,const std::allocator<wchar_t>&)
#do_neg_format__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_neg_format() const
#do_pos_format__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_pos_format() const
#do_frac_digits__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_frac_digits() const
#do_negative_sign__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_negative_sign() const
#do_positive_sign__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_positive_sign() const
#do_curr_symbol__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_curr_symbol() const
#do_grouping__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_grouping() const
#do_thousands_sep__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_thousands_sep() const
#do_decimal_point__Q23std15moneypunct<w,0>CFv # std::moneypunct<wchar_t, 0>::do_decimal_point() const
#__dt__Q23std15moneypunct<w,0>Fv # std::moneypunct<wchar_t, 0>::~moneypunct()
#__dt__Q23std88allocator<Q33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArray>Fv # std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray>::~allocator()
#__dt__Q23std192_EmptyMemberOpt<Q23std88allocator<Q33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArray>,PQ33std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>9CharArray>Fv # std::_EmptyMemberOpt<std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>::CharArray*>::~_EmptyMemberOpt()
#__ct__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>FUlcRCQ23std12allocator<c> # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(unsigned long,char,const std::allocator<char>&)
#do_neg_format__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_neg_format() const
#do_pos_format__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_pos_format() const
#do_frac_digits__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_frac_digits() const
#do_negative_sign__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_negative_sign() const
#do_positive_sign__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_positive_sign() const
#do_curr_symbol__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_curr_symbol() const
#do_grouping__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_grouping() const
#do_thousands_sep__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_thousands_sep() const
#do_decimal_point__Q23std15moneypunct<w,1>CFv # std::moneypunct<wchar_t, 1>::do_decimal_point() const
#__dt__Q23std15moneypunct<w,1>Fv # std::moneypunct<wchar_t, 1>::~moneypunct()
#__two_exp__3stdFs # std::__two_exp(short)
#__amu__Q23std4_BCDFQ23std4_BCD # std::_BCD::operator *=(std::_BCD)
#__apl__Q23std4_BCDFQ23std4_BCD # std::_BCD::operator +=(std::_BCD)
#__ct__Q23std4_BCDFPCci # std::_BCD::_BCD(const char*,int)
#to_string__Q23std4_BCDCFiRi # std::_BCD::to_string(int,int&) const
#__ct__Q23std4_BCDFri # std::_BCD::_BCD(long double,int)
#__dt__Q23std4_BCDFv # std::_BCD::~_BCD()
#__ct__Q23std15moneypunct<w,1>FUl # std::moneypunct<wchar_t, 1>::moneypunct(unsigned long)
#__ct__Q23std15moneypunct<w,0>FUl # std::moneypunct<wchar_t, 0>::moneypunct(unsigned long)
#__ct__Q23std15moneypunct<c,1>FUl # std::moneypunct<char, 1>::moneypunct(unsigned long)
#__ct__Q23std15moneypunct<c,0>FUl # std::moneypunct<char, 0>::moneypunct(unsigned long)
#do_am_pm__Q23std12timepunct<w>CFi # std::timepunct<wchar_t>::do_am_pm(int) const
#do_month_name__Q23std12timepunct<w>CFUl # std::timepunct<wchar_t>::do_month_name(unsigned long) const
#do_weekday_name__Q23std12timepunct<w>CFUl # std::timepunct<wchar_t>::do_weekday_name(unsigned long) const
#__ct__Q23std12timepunct<w>FUl # std::timepunct<wchar_t>::timepunct(unsigned long)
#do_am_pm__Q23std12timepunct<c>CFi # std::timepunct<char>::do_am_pm(int) const
#do_month_name__Q23std12timepunct<c>CFUl # std::timepunct<char>::do_month_name(unsigned long) const
#do_weekday_name__Q23std12timepunct<c>CFUl # std::timepunct<char>::do_weekday_name(unsigned long) const
#__ct__Q23std12timepunct<c>FUl # std::timepunct<char>::timepunct(unsigned long)
#__ct__Q23std11numpunct<w>FUl # std::numpunct<wchar_t>::numpunct(unsigned long)
#__ct__Q23std11numpunct<c>FUl # std::numpunct<char>::numpunct(unsigned long)
#do_in__Q23std14codecvt<w,c,i>CFRiPCcPCcRPCcPwPwRPw # std::codecvt<wchar_t, char, int>::do_in(int&,const char*,const char*,const char*&,wchar_t*,wchar_t*,wchar_t*&) const
#do_out__Q23std14codecvt<w,c,i>CFRiPCwPCwRPCwPcPcRPc # std::codecvt<wchar_t, char, int>::do_out(int&,const wchar_t*,const wchar_t*,const wchar_t*&,char*,char*,char*&) const
#__ct__Q23std14codecvt<w,c,i>FUl # std::codecvt<wchar_t, char, int>::codecvt(unsigned long)
#do_nothing__Q23std14codecvt<c,c,i>CFPCcPCcRPCcPcPcRPc # std::codecvt<char, char, int>::do_nothing(const char*,const char*,const char*&,char*,char*,char*&) const
#__ct__Q23std14codecvt<c,c,i>FUl # std::codecvt<char, char, int>::codecvt(unsigned long)
#__ct__Q23std15ctype_byname<c>FPCcUl # std::ctype_byname<char>::ctype_byname(const char*,unsigned long)
#do_tolower__Q23std8ctype<c>CFPcPCc # std::ctype<char>::do_tolower(char*,const char*) const
#do_toupper__Q23std8ctype<c>CFPcPCc # std::ctype<char>::do_toupper(char*,const char*) const
#scan_not__Q23std8ctype<c>CFQ33std10ctype_base4maskPCcPCc # std::ctype<char>::scan_not(std::ctype_base::mask,const char*,const char*) const
#scan_is__Q23std8ctype<c>CFQ33std10ctype_base4maskPCcPCc # std::ctype<char>::scan_is(std::ctype_base::mask,const char*,const char*) const
#is__Q23std8ctype<c>CFPCcPCcPQ33std10ctype_base4mask # std::ctype<char>::is(const char*,const char*,std::ctype_base::mask*) const
#__dt__Q23std8ctype<c>Fv # std::ctype<char>::~ctype()
#__ct__Q23std8ctype<c>FPCQ33std10ctype_base4maskbUl # std::ctype<char>::ctype(const std::ctype_base::mask*,bool,unsigned long)
#__dt__Q23std59basic_string<w,Q23std14char_traits<w>,Q23std12allocator<w>>Fv # std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>::~basic_string()
#__dt__Q23std12allocator<w>Fv # std::allocator<wchar_t>::~allocator()
#widen__Q23std8ctype<w>CFRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>> # std::ctype<wchar_t>::widen(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&) const
#classify__Q23std8ctype<w>CFw # std::ctype<wchar_t>::classify(wchar_t) const
#do_narrow__Q23std8ctype<w>CFPCwPCwcPc # std::ctype<wchar_t>::do_narrow(const wchar_t*,const wchar_t*,char,char*) const
#do_widen__Q23std8ctype<w>CFPCcPCcPw # std::ctype<wchar_t>::do_widen(const char*,const char*,wchar_t*) const
#do_tolower__Q23std8ctype<w>CFPwPCw # std::ctype<wchar_t>::do_tolower(wchar_t*,const wchar_t*) const
#do_toupper__Q23std8ctype<w>CFPwPCw # std::ctype<wchar_t>::do_toupper(wchar_t*,const wchar_t*) const
#do_scan_not__Q23std8ctype<w>CFQ33std10ctype_base4maskPCwPCw # std::ctype<wchar_t>::do_scan_not(std::ctype_base::mask,const wchar_t*,const wchar_t*) const
#do_scan_is__Q23std8ctype<w>CFQ33std10ctype_base4maskPCwPCw # std::ctype<wchar_t>::do_scan_is(std::ctype_base::mask,const wchar_t*,const wchar_t*) const
#do_is__Q23std8ctype<w>CFPCwPCwPQ33std10ctype_base4mask # std::ctype<wchar_t>::do_is(const wchar_t*,const wchar_t*,std::ctype_base::mask*) const
#__as__Q33std6locale3impFRCQ33std6locale3imp # std::locale::imp::operator =(const std::locale::imp&)
#__dt__Q33std6locale3impFv # std::locale::imp::~imp()
#__ct__Q33std6locale3impFRCQ33std6locale3imp # std::locale::imp::imp(const std::locale::imp&)
#__dt__Q23std32vector<Pv,Q23std13allocator<Pv>>Fv # std::vector<void*, std::allocator<void*>>::~vector()
#__dt__Q23std68vector<PQ33std6locale5facet,Q23std31allocator<PQ33std6locale5facet>>Fv # std::vector<std::locale::facet*, std::allocator<std::locale::facet*>>::~vector()
#__dt__Q23std31allocator<PQ33std6locale5facet>Fv # std::allocator<std::locale::facet*>::~allocator()
#__dt__Q23std13allocator<Pv>Fv # std::allocator<void*>::~allocator()
#__dt__Q23std41_EmptyMemberOpt<Q23std13allocator<Pv>,Ul>Fv # std::_EmptyMemberOpt<std::allocator<void*>, unsigned long>::~_EmptyMemberOpt()
#__ct__Q33std6locale3impFUl # std::locale::imp::imp(unsigned long)
#__dt__Q33std6locale5facetFv # std::locale::facet::~facet()
#make_classic__Q23std6localeFv # std::locale::make_classic()
#__ct__Q23std6localeFRC62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>> # std::locale::locale(const _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>&)
#classic__Q23std6localeFv # std::locale::classic()
#global__Q23std6localeFRCQ23std6locale # std::locale::global(const std::locale&)
#name__Q23std6localeCFv # std::locale::name() const
#__as__Q23std6localeFRCQ23std6locale # std::locale::operator =(const std::locale&)
#__ct__Q23std6localeFRCQ23std6localeRCQ23std6localei # std::locale::locale(const std::locale&,const std::locale&,int)
#__dt__Q23std6localeFv # std::locale::~locale()
#__ct__Q23std6localeFRCQ23std6localePCci # std::locale::locale(const std::locale&,const char*,int)
#__dt__Q23std10_MSLstringFv # std::_MSLstring::~_MSLstring()
#__dt__Q23std12allocator<c>Fv # std::allocator<char>::~allocator()
#__dt__Q23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>>Fv # std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string()
#__ct__Q23std6localeFPCc # std::locale::locale(const char*)
#__dt__Q23std13runtime_errorFv # std::runtime_error::~runtime_error()
#__ct__Q23std6localeFRCQ23std6locale # std::locale::locale(const std::locale&)
#__dt__62_RefCountedPtr<Q33std6locale3imp,26_Single<Q33std6locale3imp>>Fv # _RefCountedPtr<std::locale::imp, _Single<std::locale::imp>>::~_RefCountedPtr()
#__ct__Q23std6localeFv # std::locale::locale()
#__ct__28_RefCountedPtr<c,9_Array<c>>FPc # _RefCountedPtr<char, _Array<char>>::_RefCountedPtr(char*)
#__as__28_RefCountedPtr<c,9_Array<c>>FRC28_RefCountedPtr<c,9_Array<c>> # _RefCountedPtr<char, _Array<char>>::operator =(const _RefCountedPtr<char, _Array<char>>&)
#__ct__Q23std10_MSLstringFRCQ23std59basic_string<c,Q23std14char_traits<c>,Q23std12allocator<c>> # std::_MSLstring::_MSLstring(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
#__vt__Q33std8ios_base7failure # std::ios_base::failure::__vt
#__vt__Q23std8ios_base # std::ios_base::__vt
#what__Q33std8ios_base7failureCFv # std::ios_base::failure::what() const
#throwfailure__Q23std8ios_baseFv # std::ios_base::throwfailure()
#__dt__Q33std8ios_base7failureFv # std::ios_base::failure::~failure()
#__dt__Q23std8ios_baseFv # std::ios_base::~ios_base()
#__ct__Q23std8ios_baseFv # std::ios_base::ios_base()
#register_callback__Q23std8ios_baseFPFQ33std8ios_base5eventRQ23std8ios_basei_vi # std::ios_base::register_callback(void (*)(std::ios_base::event, std::ios_base&, int),int)
#__ct__Q23std50pair<PFQ33std8ios_base5eventRQ23std8ios_basei_v,i>Fv # std::pair<void (*)(std::ios_base::event, std::ios_base&, int), int>::pair()
#pword__Q23std8ios_baseFi # std::ios_base::pword(int)
#iword__Q23std8ios_baseFi # std::ios_base::iword(int)
#getloc__Q23std8ios_baseCFv # std::ios_base::getloc() const
#imbue__Q23std8ios_baseFRCQ23std6locale # std::ios_base::imbue(const std::locale&)
#__vt__Q23std12strstreambuf # std::strstreambuf::__vt
#init__Q23std12strstreambufFPciPc # std::strstreambuf::init(char*,int,char*)
#setbuf__Q23std12strstreambufFPci # std::strstreambuf::setbuf(char*,int)
#seekpos__Q23std12strstreambufFQ23std7fpos<i>s # std::strstreambuf::seekpos(std::fpos<int>,short)
#seekoff__Q23std12strstreambufFlQ33std8ios_base7seekdirs # std::strstreambuf::seekoff(long,std::ios_base::seekdir,short)
#underflow__Q23std12strstreambufFv # std::strstreambuf::underflow()
#pbackfail__Q23std12strstreambufFi # std::strstreambuf::pbackfail(int)
#overflow__Q23std12strstreambufFi # std::strstreambuf::overflow(int)
#freeze__Q23std12strstreambufFb # std::strstreambuf::freeze(bool)
#__dt__Q23std12strstreambufFv # std::strstreambuf::~strstreambuf()
#__console_exit
#__stdio_exit
#__aborting
#__exit
#exit
#__atexit
#atexit
#abort
#__malloc_pool
#free
#realloc
#calloc
#malloc
#__files
#__num_to_file
#__file_to_num
#__flush_line_buffered_output_files
#__flush_all
#__close_all
#__init_file
#__find_unopened_file
#__llmod
#__lmod
#__mod
#__lldiv
#__ldiv
#__div
#__llmul
#__lmul
#__mul
#__lladd
#__ladd
#__add
#lldiv
#ldiv
#div
#llabs
#labs
#abs
#__assertion_failed
#bsearch
#setbuf
#setvbuf
#__flush_buffer
#__load_buffer
#__prep_buffer
#__convert_to_newlines
#__convert_from_newlines
#puts
#fputs
#putchar
#putc
#fputc
#__put_char
#__ungotten
#ungetc
#gets
#fgets
#getchar
#getc
#fgetc
#__get_char
#__ctype_map
#__lower_map
#__upper_map
#toupper
#tolower
#isxdigit
#isupper
#isspace
#ispunct
#isprint
#islower
#isgraph
#isdigit
#iscntrl
#isalpha
#isalnum
#fwrite
#fread
#errno
#__temp_file_mode
#__set_idle_proc
#__get_file_modes
#__handle_reopen
#__handle_open
#freopen
#fopen
#fflush
#fclose
#tmpfile
#tmpnam
#rename
#remove
#rewind
#fsetpos
#fseek
#_fseek
#fgetpos
#ftell
#_ftell
#__float_nan
#__float_huge
#__double_min
#__double_max
#__double_epsilon
#__double_tiny
#__double_huge
#__double_nan
#__extended_min
#__extended_max
#__extended_epsilon
#__extended_tiny
#__extended_huge
#__extended_nan
#__lconv
#localeconv
#setlocale
#wcstombs
#mbstowcs
#wctomb
#mbtowc
#mblen
#memcmp
#__memrchr
#memchr
#memset
#memmove
#memcpy
#__fill_mem
#__copy_longs_rev_unaligned
#__copy_longs_unaligned
#__copy_longs_rev_aligned
#__copy_longs_aligned
#__move_mem
#__copy_mem
#__stdio_atexit
#perror
#ferror
#feof
#clearerr
#__pool_free_all
#__pool_free
#__pool_realloc
#__pool_alloc_clear
#__pool_alloc
#__pool_preassign
#__pool_preallocate
#__init_pool_obj
#sprintf
#snprintf
#vsprintf
#vsnprintf
#printf
#vprintf
#fprintf
#vfprintf
#qsort
#srand
#rand
#sscanf
#__vsscanf
#scanf
#fscanf
#__vfscanf
#raise
#signal
#__strerror
#strerror
#strstr
#strtok
#strcspn
#strspn
#strpbrk
#strrchr
#strxfrm
#strcoll
#strchr
#strncmp
#strcmp
#strncat
#strcat
#strncpy
#strcpy
#strlen
#__close_string
#__write_string
#__read_string
#__open_string_file
#atof
#strtod
#__strtold
#strtoumax
#strtoimax
#atol
#atoi
#strtoll
#strtol
#strtoull
#strtoul
#__strtoull
#__strtoul
#system
#getenv
#__month_to_days
#strftime
#localtime
#gmtime
#ctime
#asctime
#time
#mktime
#difftime
#clock
#__leap_year
#ccommand
#clrscr
#__close_console
#__write_console
#__read_console
#__end_critical_region
#__begin_critical_region
#__kill_critical_regions
#__init_critical_regions
#fcntl
#creat
#open
#__rename_file
#__delete_file
#__temp_file_name
#__close_file
#__position_file
#__write_file
#__read_file
#__open_temp_file
#__open_file
#__path2fss
#__sys_free
#__sys_alloc
#mkdir
#fstat
#stat
#__to_gm_time
#__get_time
#__get_clock
#write
#unlink
#ttyname
#sleep
#rmdir
#read
#lseek
#isatty
#getlogin
#getcwd
#exec
#cuserid
#close
#chdir
#_ftype
#_fcreator
#tell
#fdopen
#fileno
#__gettype
#__getcreator
#__ctopstring
#__system7present
#__myraise
#utimes
#utime
#uname
#fwide
#fgetws
#fputws
#ungetwc
#fgetwc
#getwchar
#getwc
#fputwc
#putwchar
#putwc
#watof
#wcstod
#__wcstold
#wcstoumax
#wcstoimax
#watol
#watoi
#wcstoll
#wcstol
#wcstoull
#wcstoul
#__wcstoull
#__wcstoul
#wctrans
#towctrans
#__wctype_map
#__wlower_map
#__wupper_map
#iswctype
#wctype
#wctob
#towupper
#towlower
#iswxdigit
#iswupper
#iswspace
#iswpunct
#iswprint
#iswlower
#iswgraph
#iswdigit
#iswcntrl
#iswalpha
#iswalnum
#wmemcmp
#wmemchr
#wmemset
#wmemmove
#wmemcpy
#swprintf
#vwprintf
#vswprintf
#wprintf
#fwprintf
#vfwprintf
#swscanf
#__vswscanf
#vwscanf
#wscanf
#fwscanf
#__vfwscanf
#wcsstr
#wcstok
#wcscspn
#wcsspn
#wcspbrk
#wcsrchr
#wcsxfrm
#wcscoll
#wcschr
#wcsncmp
#wcscmp
#wcsncat
#wcscat
#wcsncpy
#wcscpy
#wcslen
#wcsftime
#wctime
#wasctime
#ValidateMallocHeap
#GetNextMallocHeapRegistration
#GetFirstMallocHeapRegistration
#UnregisterMallocHeap
#RegisterMallocHeap
#__fminl
#__fmaxl
#__fdiml
#__nextafterl
#__remquol
#__copysignl
#__remainderl
#__fmodl
#__modfl
#__truncl
#llroundl
#lroundl
#__roundl
#llrintl
#lrintl
#__rintl
#__nearbyintl
#__floorl
#__ceill
#__lgammal
#__gammal
#__erfcl
#__erfl
#__hypotl
#__sqrtl
#__powl
#__fabsl
#scalblnl
#scalbnl
#__logbl
#__log2l
#__log1pl
#__expm1l
#__exp2l
#__log10l
#__logl
#__ldexpl
#__frexpl
#__expl
#__atanhl
#__asinhl
#__acoshl
#__tanhl
#__sinhl
#__coshl
#__tanl
#__sinl
#__cosl
#__atan2l
#__atanl
#__asinl
#__acosl
#fminf
#fmaxf
#fdimf
#remquof
#copysignf
#remainderf
#fmodf
#truncf
#llroundf
#lroundf
#roundf
#llrintf
#lrintf
#rintf
#nearbyintf
#floorf
#ceilf
#lgammaf
#gammaf
#erfcf
#erff
#hypotf
#sqrtf
#powf
#fabsf
#scalblnf
#scalbnf
#logbf
#log2f
#log1pf
#expm1f
#exp2f
#log10f
#logf
#ldexpf
#frexpf
#expf
#atanhf
#asinhf
#acoshf
#tanhf
#sinhf
#coshf
#tanf
#sinf
#cosf
#atan2f
#atanf
#asinf
#acosf
#nextafter
#llround
#lround
#llrint
#lrint
#scalbln
#scalbn
#__dc_arr
#__del_arr
#__new_arr
#__init_arr
#__copy
#__som_check_ev
#__som_check_new
#__vt__Q23std13bad_exception # std::bad_exception::__vt
#what__Q23std13bad_exceptionCFv # std::bad_exception::what() const
#__end__catch
#__throw
#__ct__Q23std9exceptionFv # std::exception::exception()
#__unexpected
#__dt__Q23std13bad_exceptionFv # std::bad_exception::~bad_exception()
#__unregister_fragment
#__register_fragment
#__global_destructor_chain
#__destroy_global_chain
#__register_global_object
#__destroy_new_array2
#__destroy_new_array
#__destroy_arr
#__construct_array
#__dt__26__partial_array_destructorFv # __partial_array_destructor::~__partial_array_destructor()
#__construct_new_array
#__throw_catch_compare
#unexpected__3stdFv # std::unexpected()
#set_unexpected__3stdFPFv_v # std::set_unexpected(void (*)(void))
#terminate__3stdFv # std::terminate()
#set_terminate__3stdFPFv_v # std::set_terminate(void (*)(void))
#__vt__Q23std10bad_typeid # std::bad_typeid::__vt
#what__Q23std10bad_typeidCFv # std::bad_typeid::what() const
#__dynamic_cast
#__get_typeid
#__dt__Q23std10bad_typeidFv # std::bad_typeid::~bad_typeid()
#nothrow__3std # std::nothrow
#__dla__FPv # operator delete[](void*)
#__nwa__FUlRCQ23std9nothrow_t # operator new[](unsigned long,const std::nothrow_t&)
#__nwa__FUl # operator new[](unsigned long)
#__dl__FPv # operator delete(void*)
#__nw__FUlRCQ23std9nothrow_t # operator new(unsigned long,const std::nothrow_t&)
#__nw__FUl # operator new(unsigned long)
#_prealloc_newpool__3stdFUl # std::_prealloc_newpool(unsigned long)
#_set_newnonptrmax__3stdFUl # std::_set_newnonptrmax(unsigned long)
#_set_newpoolsize__3stdFUl # std::_set_newpoolsize(unsigned long)
#__throws_bad_alloc__3std # std::__throws_bad_alloc
#__new_handler__3std # std::__new_handler
#__del_hdl
#__new_hdl
#set_new_handler__3stdFPFv_v # std::set_new_handler(void (*)(void))
#__throw_bad_alloc__3stdFv # std::__throw_bad_alloc()
#qd
#__terminate
#__initialize
#__start
#__ptmf_null
\ No newline at end of file diff --git a/libical/MacOS/libical_prefix.h b/libical/MacOS/libical_prefix.h new file mode 100644 index 0000000000..0810563119 --- /dev/null +++ b/libical/MacOS/libical_prefix.h @@ -0,0 +1,5 @@ +/* libical_prefix.h */ + +#include <stdlib.h> +#define _TIME_T +#include "errno.h"
\ No newline at end of file diff --git a/libical/MacOS/restrictions.make b/libical/MacOS/restrictions.make new file mode 100644 index 0000000000..dd146f5ed3 --- /dev/null +++ b/libical/MacOS/restrictions.make @@ -0,0 +1 @@ +#pseudo target
all Ä {libical_c_src}parameterrestrictions.inc {libical_c_src}restrictionrecords.inc
# Generate source file
{libical_c_src}parameterrestrictions.inc Ä ¶
{libical_scripts}mkparameterrestrictions.pl ¶
{libical_data}params-in-prop.txt ¶
{libical_project}restrictions.make
perl {libical_scripts}mkparameterrestrictions.pl {libical_data}params-in-prop.txt ¶
> {libical_c_src}parameterrestrictions.inc
# Set file creator to CodeWarrior
setfile {libical_c_src}parameterrestrictions.inc -c CWIE
# Generate source file
{libical_c_src}restrictionrecords.inc Ä ¶
{libical_scripts}mkrestrictionrecords.pl ¶
{libical_data}restrictions.csv ¶
{libical_project}restrictions.make
perl {libical_scripts}mkrestrictionrecords.pl {libical_data}restrictions.csv ¶
> {libical_c_src}restrictionrecords.inc
# Set file creator to CodeWarrior
setfile {libical_c_src}restrictionrecords.inc -c CWIE
\ No newline at end of file diff --git a/libical/MacOS/restrictions.script b/libical/MacOS/restrictions.script new file mode 100644 index 0000000000..ab719b87d5 --- /dev/null +++ b/libical/MacOS/restrictions.script @@ -0,0 +1 @@ +directory {libical_project}
# Generate source files
make all -f restrictions.make > make.out
make.out
\ No newline at end of file diff --git a/libical/MacOS/strdup.c b/libical/MacOS/strdup.c new file mode 100644 index 0000000000..ae60fee3df --- /dev/null +++ b/libical/MacOS/strdup.c @@ -0,0 +1,17 @@ + +#include "strdup.h" +#include <string.h> +#include <stdlib.h> + + +char *strdup(const char *s ) +{ + char *p; + + if ( (p = (char *) malloc( strlen( s ) + 1 )) == NULL ) + return( NULL ); + + strcpy( p, s ); + + return( p ); +} diff --git a/libical/MacOS/strdup.h b/libical/MacOS/strdup.h new file mode 100644 index 0000000000..1bb73aa535 --- /dev/null +++ b/libical/MacOS/strdup.h @@ -0,0 +1,3 @@ +/* strdup.h */ + +char * strdup(const char *str); diff --git a/libical/Makefile.am b/libical/Makefile.am new file mode 100644 index 0000000000..66b37da052 --- /dev/null +++ b/libical/Makefile.am @@ -0,0 +1,11 @@ + + +EXTRA_DIST = \ + ChangeLog \ + README \ + TEST \ + TODO + +SUBDIRS = design-data doc scripts test-data src + + diff --git a/libical/NEWS b/libical/NEWS new file mode 100644 index 0000000000..d5fd9cb9cf --- /dev/null +++ b/libical/NEWS @@ -0,0 +1,250 @@ +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/libical/README b/libical/README new file mode 100644 index 0000000000..e0f7641e1e --- /dev/null +++ b/libical/README @@ -0,0 +1,96 @@ + +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. + +The code in this distribution implements the iCal protocols as +described in RFC2445 and RFC2446. The code is in very early stages of +development. + +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 ) 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. + + +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. + + +Perl Library +------------ + +There is a perl language binding of this library, LIBICAL. +It is available from http://www.softwarestudio.org/libical + +Parser +------ + +The parser is a test program that will convert a text representation +of an iCal object to the internal representation and print it back out +as text. It is primarily a test tool, but it is also a good +demonstration of how the library works. + +To use it, cat one of the test components into the parser +executable. For example, from the root of the distribution: + + src/test/icalparser < test-data/1.1 + + +Eric Busboom +eric@softwarestudio.org diff --git a/libical/TEST b/libical/TEST new file mode 100644 index 0000000000..90c3473b31 --- /dev/null +++ b/libical/TEST @@ -0,0 +1,4 @@ + +Parser Tests +------------ +Use iCAL keywords as first words of unquoted strings
\ No newline at end of file diff --git a/libical/THANKS b/libical/THANKS new file mode 100644 index 0000000000..4130c35e23 --- /dev/null +++ b/libical/THANKS @@ -0,0 +1,6 @@ +Thanks to: + + +Graham Davison for MacOS support and miscelaneous code bits + +Seth Alves for the first cut at the Makefile.am files
\ No newline at end of file diff --git a/libical/TODO b/libical/TODO new file mode 100644 index 0000000000..c5c85f6753 --- /dev/null +++ b/libical/TODO @@ -0,0 +1,28 @@ + +TODOs for libical-0.16 +--------------------- + +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 + diff --git a/libical/acconfig.h b/libical/acconfig.h new file mode 100644 index 0000000000..e9383f73a4 --- /dev/null +++ b/libical/acconfig.h @@ -0,0 +1,7 @@ +/* Define to make icalerror_* calls abort instead of internally + signalling an error */ +#undef ICAL_ERRORS_ARE_FATAL + +/* Define to make icalcluster_commit() save to a temp file and mv to + the original file instead of writing to the orig file directly */ +#undef ICAL_SAFESAVES diff --git a/libical/autogen.sh b/libical/autogen.sh new file mode 100755 index 0000000000..e15e4e33a8 --- /dev/null +++ b/libical/autogen.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir +PROJECT=libical +TEST_TYPE=-d +FILE=src + +DIE=0 + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROJECT." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have automake installed to compile $PROJECT." + echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +test $TEST_TYPE $FILE || { + echo "You must run this script in the top-level $PROJECT directory" + exit 1 +} + +if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." +fi + +case $CC in +*xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;; +esac + +if test -z "$ACLOCAL_FLAGS"; then + + acdir=`aclocal --print-ac-dir` + m4list="glib.m4" + + for file in $m4list + do + if [ ! -f "$acdir/$file" ]; then + echo "WARNING: aclocal's directory is $acdir, but..." + echo " no file $acdir/$file" + echo " You may see fatal macro warnings below." + echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS " + echo " environment variable to \"-I /some/dir\", or install" + echo " $acdir/$file." + echo "" + fi + done +fi + +aclocal $ACLOCAL_FLAGS + +# optionally feature autoheader +(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader + +automake -a $am_opt +autoconf +cd $ORIGDIR + +$srcdir/configure "$@" + +echo +echo "Now type 'make' to compile $PROJECT." diff --git a/libical/configure.in b/libical/configure.in new file mode 100644 index 0000000000..db9177b3b3 --- /dev/null +++ b/libical/configure.in @@ -0,0 +1,51 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(src/libical/ical.h) +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(libical,0.16) + +dnl Checks for programs. +AC_PROG_YACC +AC_PROG_CC +AM_PROG_LEX +AC_PROG_LN_S +AC_PROG_RANLIB +AC_PROG_INSTALL + +AM_PROG_LIBTOOL + +AC_SUBST(AR) +AC_CHECK_PROGS(AR, ar aal, ar) + +AC_DEFINE(ICAL_ERRORS_ARE_FATAL,1) +AC_DEFINE(ICAL_SAFESAVES,1) + +dnl Checks for libraries. +dnl Replace `main' with a function in -lical: +dnl AC_CHECK_LIB(ical, main) + +dnl Checks for header files. +AC_HEADER_STDC +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 + +dnl Checks for library functions. +AC_CHECK_FUNCS(strdup) + +AC_OUTPUT([ +Makefile +src/Makefile +src/libical/Makefile +src/libical/icalversion.h +src/libicalss/Makefile +src/test/Makefile +design-data/Makefile +doc/Makefile +scripts/Makefile +test-data/Makefile +src/Makefile +config.h +]) diff --git a/libical/configure.scan b/libical/configure.scan new file mode 100644 index 0000000000..c07a9f6bf8 --- /dev/null +++ b/libical/configure.scan @@ -0,0 +1,30 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(src/comp-cc/usecases.cc) + +dnl Checks for programs. +AC_PROG_YACC +AC_PROG_CC +AC_PROG_LEX +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_RANLIB + +dnl Checks for libraries. +dnl Replace `main' with a function in -lical: +AC_CHECK_LIB(ical, main) + +dnl Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS(fcntl.h limits.h malloc.h unistd.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_OFF_T +AC_TYPE_SIZE_T +AC_STRUCT_TM + +dnl Checks for library functions. +AC_CHECK_FUNCS(mkdir strdup uname) + +AC_OUTPUT(src/libicalss/Makefile src/test/Makefile src/libical/Makefile src/Makefile src/pvl/Makefile src/comp-cc/Makefile Makefile) diff --git a/libical/design-data/.cvsignore b/libical/design-data/.cvsignore new file mode 100644 index 0000000000..3dda72986f --- /dev/null +++ b/libical/design-data/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile diff --git a/libical/design-data/Makefile.am b/libical/design-data/Makefile.am new file mode 100644 index 0000000000..0548974160 --- /dev/null +++ b/libical/design-data/Makefile.am @@ -0,0 +1,10 @@ +EXTRA_DIST =\ + components.txt \ + param-c-types.txt \ + params-in-prop.txt \ + prop-to-value.txt \ + property-tokens.txt \ + restrictions.csv \ + status.txt \ + value-c-types.txt \ + value-mem-semantics.txt \ diff --git a/libical/design-data/components.txt b/libical/design-data/components.txt new file mode 100644 index 0000000000..15417eaf2f --- /dev/null +++ b/libical/design-data/components.txt @@ -0,0 +1,21 @@ +VCALENDAR +VEVENT +VTODO +VJOURNAL +VFREEBUSY +VTIMEZONE +XSTANDARDTIME +XDAYLIGHTSAVINGSTIME +VALARM +XAUDIOALARM +XDISPLAYALARM +XEMAILALARM +XPROCEDUREALARM +X +VSCHEDULE +VQUERY +VCAR +VCOMMAND +XLICINVALID +ANY + diff --git a/libical/design-data/param-c-types.txt b/libical/design-data/param-c-types.txt new file mode 100644 index 0000000000..d2f28e688a --- /dev/null +++ b/libical/design-data/param-c-types.txt @@ -0,0 +1,23 @@ +ALTREP char* +CN char* +CUTYPE icalparameter_cutype +DELEGATED-FROM char* +DELEGATED-TO char* +DIR char* +ENCODING icalparameter_encoding +FBTYPE icalparameter_fbtype +FMTTYPE char* +LANGUAGE char* +MEMBER char* +PARTSTAT icalparameter_partstat +RANGE icalparameter_range +RELATED icalparameter_related +RELTYPE icalparameter_reltype +ROLE icalparameter_role +RSVP int +SENT-BY char* +TZID char* +VALUE icalparameter_value +X char* +X-LIC-ERRORTYPE icalparameter_xlicerrortype +X-LIC-COMPARETYPE icalparameter_xliccomparetype diff --git a/libical/design-data/params-in-prop.txt b/libical/design-data/params-in-prop.txt new file mode 100644 index 0000000000..4d4e133fc3 --- /dev/null +++ b/libical/design-data/params-in-prop.txt @@ -0,0 +1,55 @@ +ACTION VALUE X +ATTACH FMTTYPE ENCODING VALUE X +ATTENDEE CN CUTYPE DELEGATED-FROM DELEGATED-TO DIR LANGUAGE MEMBER PARTSTAT ROLE RSVP SENT-BY X +CALSCALE X +CATEGORIES LANGUAGE X +CLASS X +COMMENT ALTREP LANGUAGE X +COMPLETED X +CONTACT ALTREP LANGUAGE X +CREATED X +DESCRIPTION ALTREP LANGUAGE X +DTEND VALUE TZID X +DTSTAMP X +DTSTART VALUE TZID X +DUE VALUE TZID X +DURATION X +EXDATE VALUE TZID X +EXRULE X +FREEBUSY FBTYPE X +GEO X +LAST-MODIFIED X +LOCATION ALTREP LANGUAGE X +METHOD X +ORGANIZER CN DIR LANGUAGE SENT-BY X +PERCENT-COMPLETE X +PRIORITY X +PRODID X +RDATE VALUE TZID X +RECURRENCE-ID VALUE RANGE TZID X +RELATED-TO RELTYPE X +REPEAT X +REQUEST-STATUS LANGUAGE X +RESOURCES ALTREP LANGUAGE X +RRULE X +SEQUENCE X +STATUS X +SUMMARY ALTREP LANGUAGE X +TRANSP X +TRIGGER VALUE RELATED X +TZID X +TZNAME LANGUAGE X +TZOFFSETFROM X +TZOFFSETTO X +TZURL X +UID X +URL X +VERSION X +XPROP LANGUAGE X +X-LIC-ERROR XLICEERRORTYPE X +SCOPE X +MAXRESULTS X +MAXRESULTSSIZE X +QUERY X +QUERYNAME X +TARGET X
\ No newline at end of file diff --git a/libical/design-data/prop-to-value.txt b/libical/design-data/prop-to-value.txt new file mode 100644 index 0000000000..017c944983 --- /dev/null +++ b/libical/design-data/prop-to-value.txt @@ -0,0 +1,50 @@ +CALSCALE TEXT +METHOD METHOD # Non-std. RFC2445 specifies TEXT +PRODID TEXT +VERSION TEXT +CATEGORIES TEXT +CLASS TEXT +COMMENT TEXT +DESCRIPTION TEXT +LOCATION TEXT +PERCENT-COMPLETE INTEGER +PRIORITY INTEGER +RESOURCES TEXT +STATUS TEXT +SUMMARY TEXT +COMPLETED DATE-TIME +FREEBUSY PERIOD +TRANSP TEXT +TZNAME TEXT +TZOFFSETFROM UTC-OFFSET +TZOFFSETTO UTC-OFFSET +TZURL URI +TZID TEXT +ATTENDEE CAL-ADDRESS +CONTACT TEXT +ORGANIZER CAL-ADDRESS +RELATED-TO TEXT +URL URI +UID TEXT +EXRULE RECUR +RRULE RECUR +ACTION TEXT +REPEAT INTEGER +CREATED DATE-TIME +DTSTAMP DATE-TIME +LAST-MODIFIED DATE-TIME +SEQUENCE INTEGER +X-LIC-ERROR TEXT +X-LIC-CLUSTERCOUNT INTEGER +REQUEST-STATUS STRING +ATTACH ATTACH # Non-std: URI or BINARY +GEO GEO # Non-std: Two FLOATS +DTEND DATE-TIME-DATE # Non-std: DATE-TIME or DATE +DUE DATE-TIME-DATE # Non-std: DATE-TIME or DATE +DTSTART DATE-TIME-DATE # Non-std: DATE-TIME or DATE +RECURRENCE-ID DATE-TIME-DATE # Non-std: DATE-TIME or DATE +EXDATE DATE-TIME-DATE # Non-std: DATE-TIME or DATE +RDATE DATE-TIME-PERIOD # Non-std: DATE-TIME or DATE or PERIOD +TRIGGER TRIGGER # Non-std: DURATION or DATE-TIME +DURATION DURATION +QUERY QUERY diff --git a/libical/design-data/property-tokens.txt b/libical/design-data/property-tokens.txt new file mode 100644 index 0000000000..f8a95861c4 --- /dev/null +++ b/libical/design-data/property-tokens.txt @@ -0,0 +1,65 @@ +8BIT +ACCEPTED +ADD +AUDIO +BASE64 +BINARY +BOOLEAN +BUSY +BUSY-TENTATIVE +BUSY-UNAVAILABLE +CAL-ADDRESS +CANCEL +CANCELLED +CHAIR +CHILD +COMPLETED +CONFIDENTIAL +CONFIRMED +COUNTER +DATE +DATE-TIME +DECLINECOUNTER +DECLINED +DELEGATED +DISPLAY +DRAFT +DURATION +EMAIL +END +FINAL +FLOAT +FREE +GREGORIAN +GROUP +INDIVIDUAL +IN-PROCESS +INTEGER +NEEDS-ACTION +NON-PARTICIPANT +OPAQUE +OPT-PARTICIPANT +PARENT +PERIOD +PRIVATE +PROCEDURE +PUBLIC +PUBLISH +RECUR +REFRESH +REPLY +REQ-PARTICIPANT +REQUEST +RESOURCE +ROOM +SIBLING +START +TENTATIVE +TEXT +THISANDFUTURE +THISANDPRIOR +TIME +TRANSPAENT +UNKNOWN +UTCOFFSET +XNAME diff --git a/libical/design-data/restrictions.csv b/libical/design-data/restrictions.csv new file mode 100644 index 0000000000..e93f0a2a2a --- /dev/null +++ b/libical/design-data/restrictions.csv @@ -0,0 +1,1348 @@ +# 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 +PUBLISH,VEVENT,SEQUENCE,NONE,ZEROORONE +PUBLISH,VEVENT,ATTACH,NONE,ZEROPLUS +PUBLISH,VEVENT,CATEGORIES,NONE,ZEROORONE +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,ZEROORONE +PUBLISH,VEVENT,DURATION,NONE,ZEROORONE +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 +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 +PUBLISH,VEVENT,NONE,X,ZEROPLUS +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,ZEROORONE +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,icalrestriction_check_exclusive +REQUEST,VEVENT,DURATION,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive +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 +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 +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 +REQUEST,VEVENT,NONE,X,ZEROPLUS +REQUEST,VEVENT,NONE,VFREEBUSY,ZERO +REQUEST,VEVENT,NONE,VJOURNAL,ZERO +REQUEST,VEVENT,NONE,VTODO,ZERO +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 +REPLY,VEVENT,UID,NONE,ONE +REPLY,VEVENT,SEQUENCE,NONE,ZEROORONE +REPLY,VEVENT,ATTACH,NONE,ZEROPLUS +REPLY,VEVENT,CATEGORIES,NONE,ZEROORONE +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,icalrestriction_check_exclusive +REPLY,VEVENT,DTSTART,NONE,ZEROORONE +REPLY,VEVENT,DURATION,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive +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 +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 +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,ZEROORONE +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, icalrestriction_check_exclusive +ADD,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive +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 +ADD,VEVENT,TRANSP,NONE,ZEROORONE +ADD,VEVENT,URL,NONE,ZEROORONE +ADD,VEVENT,X,NONE,ZEROPLUS +ADD,VEVENT,RECURRENCEID,NONE,ZERO +ADD,VEVENT,REQUESTSTATUS,NONE,ZERO +ADD,VEVENT,NONE,VALARM,ZEROPLUS +ADD,VEVENT,NONE,VTIMEZONE,ZEROPLUS +ADD,VEVENT,NONE,X,ZEROPLUS +ADD,VEVENT,NONE,VFREEBUSY,ZERO +ADD,VEVENT,NONE,VTODO,ZERO +ADD,VEVENT,NONE,VJOURNAL,ZERO +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,ZEROORONE +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, icalrestriction_check_exclusive +CANCEL,VEVENT,DTSTART,NONE,ZEROORONE +CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive +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 +CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS +CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE +CANCEL,VEVENT,RRULE,NONE,ZEROPLUS +CANCEL,VEVENT,STATUS,NONE,ZEROORONE +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 +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 +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 +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 +REFRESH,VEVENT,NONE,VALARM,ZERO +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,ZEROORONE +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, icalrestriction_check_exclusive +COUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive +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 +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 +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 +COUNTER,VEVENT,NONE,X,ZEROPLUS +COUNTER,VEVENT,NONE,VTODO,ZERO +COUNTER,VEVENT,NONE,VJOURNAL,ZERO +COUNTER,VEVENT,NONE,VFREEBUSY,ZERO +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 +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 +DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO +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 +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,ZEROORONE +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 +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 +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,ZEROORONE +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 +REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS +REQUEST,VTODO,RESOURCES,NONE,ZEROORONE +REQUEST,VTODO,RRULE,NONE,ZEROPLUS +REQUEST,VTODO,STATUS,NONE,ZEROORONE +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 +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,ZEROORONE +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 +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 +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,ZEROORONE +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 +ADD,VTODO,URL,NONE,ZEROORONE +ADD,VTODO,X,NONE,ZEROPLUS +ADD,VTODO,RECURRENCEID,NONE,ZERO +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 +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,ZEROORONE +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 +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 +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 +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 +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 +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,ZEROORONE +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 +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 +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 +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,ZEROORONE +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 +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 +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,ZEROORONE +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 +PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS +PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE +PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE +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,ZEROORONE +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,ZEROORONE +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 +CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS +CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS +CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE +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 +NONE,VCALENDAR,ACTION,NONE,ZERO +NONE,VCALENDAR,ATTACH,NONE,ZERO +NONE,VCALENDAR,ATTENDEE,NONE,ZERO +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, icalrestriction_check_exclusive +NONE,VEVENT,DTSTAMP,NONE,ZEROORONE +NONE,VEVENT,DTSTART,NONE,ZEROORONE +NONE,VEVENT,DUE,NONE,ZERO +NONE,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive +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 +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,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 +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,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 +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,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,icalrestriction_check_mutual +NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual +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,icalrestriction_check_mutual +NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual +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 +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,icalrestriction_check_mutual +NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual +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,icalrestriction_check_mutual +NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual +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 diff --git a/libical/design-data/status-new.txt b/libical/design-data/status-new.txt new file mode 100644 index 0000000000..9e7bbf83a7 --- /dev/null +++ b/libical/design-data/status-new.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/libical/design-data/status.foo b/libical/design-data/status.foo new file mode 100644 index 0000000000..a2591bd26a --- /dev/null +++ b/libical/design-data/status.foo @@ -0,0 +1,104 @@ +2.0 STATOK Operation was successfully performed. + +2.0.1 START-SENDATA Start ICAL input; end with + <CRLF>.<CRLF> + +2.0.11 OK-DATAFOLLOWS The request was processed + successfully. Reply data follows on + the next line and terminates with + <CRLF>.<CRLF> + +2.0.2 REPLY-PENDING 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 In response to the client issuing an + ABORT command, this reply code + indicates that any command currently + underway was successsfully aborted. + +2.0.4 WILL-ATTEMPT The specified Calendar is not here + but an attempt will be made to deliver + the request or reply to the Calendar + anyway. There is a trust relationship + between this iRIP server and the + iRIP server for the target calendar. + +2.0.5 TRUSTED-WILL-QUEUE The specified Calendar cannot be + contacted directly and a trust + relationship exists between this + server and the server on which the + Calendar exists. 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 WILL-ATTEMPT The specified Calendar is not here + but an attempt will be made to deliver + the request or reply to the Calendar + anyway. There is not a trust + relationship between the iRIP server + and the iRIP server for the target + calendar. + +2.0.7 QUEUED The message has been queued for + delivery. + +2.0.8 QUEUE-EMPTY There are no more queued messages. + +2.2 NO COMMAND IN PROGRESS An ABORT or CONTINUE was received when + no command was in progress + +6.1 AUTHENTICATE FAILURE Unsupported authentication mechanism, + credentials rejected + +6.2 AUTHENTICATION ABORTED Sender aborted authentication, + authentication exchange cancelled + +8.0 GENERAL FAILURE A failure has occurred in the Receiver + that prevents the operation from + succeeding. + +8.1 SERVER TOO BUSY Sent when a session cannot be + established because the iRIP + Receiver is too busy. + +8.2 ICAL OBJECT TOO BIG Used to signal that an ICAL object has + exceeded the server's size limit. + +8.3 DATE TOO LARGE A DATETIME value was too far in the + future to be represented on this + Calendar. + +8.4 DATE TOO SMALL A DATETIME value was too far in the + past to be represented on this + Calendar. + +9.0 INVALID iRIP COMMAND An unrecongnized command was received. + +9.1 UNEXPECTED COMMAND A command was issued in a manner + inconsistent with the state diagram. + For example, issuing the SENDATA + command without having specified any + RECIPIENTs will cause this error. +10.1 REFERRAL Accompanied by an alternate address. + The RECIPIENT specified should be + contacted at the given alternate + address. The referral address MUST + follow the reply code. + +10.2 SERVER SHUT DOWN The server is shutting down. + +10.3 SERVER STOPPING FLOOD 2 + + +10.4 EXCEEDED QUOTAS The operation has not be performed + because it would cause the resources + (memory, disk, CPU, etc) to exceed the + allocated quota + +10.5 QUEUED TOO LONG The ITIP message has been queued too + long. Delivery has been aborted.
\ No newline at end of file diff --git a/libical/design-data/status.txt b/libical/design-data/status.txt new file mode 100644 index 0000000000..9e7bbf83a7 --- /dev/null +++ b/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/libical/design-data/value-c-types.txt b/libical/design-data/value-c-types.txt new file mode 100644 index 0000000000..c7dd26034f --- /dev/null +++ b/libical/design-data/value-c-types.txt @@ -0,0 +1,22 @@ +ATTACH struct icalattachtype # Non-std +BINARY char* +BOOLEAN int +CAL-ADDRESS char* +DATE struct icaltimetype +DATE-TIME struct icaltimetype +DATE-TIME-DATE struct icaltimetype # Non-std +DATE-TIME-PERIOD struct icalperiodtype # Non-std +DURATION struct icaldurationtype +FLOAT float +GEO struct icalgeotype # Non-std +INTEGER int +METHOD icalproperty_method # Non-std +PERIOD struct icalperiodtype +RECUR struct icalrecurrencetype +STRING char* # Non-std +TEXT char* +TIME struct icaltimetype +TRIGGER union icaltriggertype # Non-std +URI char* +UTC-OFFSET int +QUERY char* diff --git a/libical/design-data/value-mem-semantics.txt b/libical/design-data/value-mem-semantics.txt new file mode 100644 index 0000000000..5948e244f6 --- /dev/null +++ b/libical/design-data/value-mem-semantics.txt @@ -0,0 +1,19 @@ +ATTACH struct icalattachtype +BINARY char* +BOOLEAN int +CAL-ADDRESS char* +DATE time_t +DATE-TIME time_t +DATE-TIME-DATE time_t +DATE-TIME-PERIOD struct icalperiodtype +DURATION struct icaldurationtype +FLOAT float +GEO struct icalgeotype +INTEGER int +PERIOD struct icalperiodtype +RECUR struct icalrecurrencetype +TEXT char* +TIME time_t +TRIGGER struct icaltriggertimetype +URI char* +UTC-OFFSET int diff --git a/libical/doc/.cvsignore b/libical/doc/.cvsignore new file mode 100644 index 0000000000..3dda72986f --- /dev/null +++ b/libical/doc/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile diff --git a/libical/doc/Makefile.am b/libical/doc/Makefile.am new file mode 100644 index 0000000000..0df4f3f42d --- /dev/null +++ b/libical/doc/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = UsingLibical.lyx UsingLibical.ps diff --git a/libical/doc/UsingLibical.lyx b/libical/doc/UsingLibical.lyx new file mode 100644 index 0000000000..afc5b0608d --- /dev/null +++ b/libical/doc/UsingLibical.lyx @@ -0,0 +1,2256 @@ +#This file was created by <eric> Sat Feb 19 10:33:21 2000 +#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team +\lyxformat 2.15 +\textclass linuxdoc +\language default +\inputencoding default +\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 2000 +\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 for users can store their calendar data and arrange + meetings with other users. + +\layout Standard + +Libical implements the following specifications and protocols +\layout Standard +\added_space_top 0.3cm \added_space_bottom 0.3cm \LyXTable +multicol5 +5 2 0 0 -1 -1 -1 -1 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 1 0 0 +8 1 0 "" "" +8 1 1 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" + +iCal Core +\newline +2445 +\newline +iTIP +\newline +2446 +\newline +iMIP +\newline +2447 +\newline +iRIP +\newline +draft +\newline +CAP +\newline +draft +\layout Standard + +(The current version, 0.15, does not implement iRip or CAP. + ) +\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 Verbatim + +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 Verbatim + +http://softwarestudio.org/libical/index.html +\layout Standard + +and a mailing list that you can join by sending the following mail: +\layout Verbatim + +To: minimalist@softwarestudio.org +\layout Verbatim + +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 + +Purpose & Goals +\layout Subsection + +Document version +\layout Verbatim + +$Id: UsingLibical.lyx,v 1.4 2000/05/15 06:18:16 ericb Exp $ +\layout Section + +Building the Library +\layout Standard + +Libical uses autoconf to generate makefiles, although it uses none of the + autoconf flags to influence the compilation. + It should built with no adjustments on Linux, FreeBSD and Solaris. + +\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 Verbatim + +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. + +\layout Standard + +The central goal of libical is to parse iTIP data into an internal representatio +n of Components, Properties, Parameters an Values, and to allow the user + to manipulate the data in various ways +\layout Standard +\added_space_bottom 0.3cm +\begin_float fig +\layout Standard + + +\begin_inset Figure size 180 147 +file icaluml.eps +flags 13 + +\end_inset + + +\end_float +When a component is send across a network, if it is un-encrypted, it will + look something like: +\layout Code + +BEGIN:VEVENT +\layout Code + +DTSTAMP:19980309T231000Z +\layout Code + +UID:guid-1.host1.com +\layout Code + +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com +\layout Code + +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: +\layout Code + + +\protected_separator + MAILTO:employee-A@host.com +\layout Code + +DESCRIPTION:Project XYZ Review Meeting +\layout Code + +CATEGORIES:MEETING +\layout Code + +CLASS:PUBLIC +\layout Code + +CREATED:19980309T130000Z +\layout Code + +SUMMARY:XYZ Project Review +\layout Code + +DTSTART;TZID=US-Eastern:19980312T083000 +\layout Code + +DTEND;TZID=US-Eastern:19980312T093000 +\layout Code + +LOCATION:1CP Conference Room 4350 +\layout Code + +END:VEVENT +\layout Subsection + +Core iCal classes +\layout Subsubsection + +Components +\layout Subsubsection + +Properties +\layout Subsubsection + +Values +\layout Subsubsection + +Parameters +\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 +\layout Subsubsection + +Types +\layout Subsubsection + +The Parser +\layout Subsubsection + +Restrictions +\layout Subsubsection + +Error objects +\layout Subsubsection + +Memory Management +\layout Subsubsection + +Storage classes +\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 keey 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 classess + 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 cumbersone 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 + +\noun on +struct icaltriggertype +\noun default +. + 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 Verbatim + +CATEGORIES: work, home +\layout Standard + +becomes in libical's internal representation +\layout Verbatim + +CATEGORIES: work +\layout Verbatim + +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 + +Implementation Limitations +\layout Section + +Using libical +\layout Subsection + +Creating Components +\layout Standard + +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. + +\layout Subsubsection + +Constructor Interfaces +\layout Standard + +Using constructor interfaces, you create each of the objects seperately + and them assemble them in to components: +\layout Code + +icalcomponent *event; +\layout Code + +icalproperty *prop; +\layout Code + +icalparameter *param; +\layout Code + +struct icaltimetype atime; +\layout Code + +event = icalcomponent_new(ICAL_VEVENT_COMPONENT); +\layout Code + +prop = icalproperty_new_dtstamp(atime) ; +\layout Code + +icalcomponent_add_property(event, prop); +\layout Code + +prop = icalproperty_new_uid(strdup("guid-1.host1.com")) ); +\layout Code + +icalcomponent_add_property(event,prop); +\layout Code + +prop=icalproperty_new_organizer(strdup("mrbig@host.com")); +\layout Code + +param = icalparameter_new_role(ICAL_ROLE_CHAIR) +\layout Code + +icalproperty_add_parameter(prop, param); +\layout Code + +icalcomponent_add_property(event,prop); +\layout Standard + +While we are on this example, you should 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. + Strings, of course, are passed in by reference, but libical will take ownership + of the memory, so you had beter strdup() the data unless you want a core + dump when the memory is freed for the second time. + Libical has some complex bu 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 arguable more + elegant, if you are not horrified by vaargs. + The vaargs constructor interface all you to create intricate components + in a single block of text. + +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + calendar = +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent_vanew( +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + ICAL_VCALENDAR_COMPONENT, +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalproperty_new_version(strdup("2.0")), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalproperty_new_prodid(strdup("-//RDU Software//NONSGML HandCal//EN")), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalcomponent_vanew( +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +ICAL_VEVENT_COMPONENT, +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_new_dtstamp(atime), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_new_uid(strdup("guid-1.host1.com")), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_vanew_organizer( +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + strdup("mrbig@host.com"), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalparameter_new_role(ICAL_ROLE_CHAIR), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 0 +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_vanew_attendee( +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + strdup("employee-A@host.com"), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalparameter_new_rsvp(1), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 0 +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + ), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_new_location(strdup("1CP Conference Room 4350")), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +0 +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +), +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 0 +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + ); +\layout Standard + +This form is similar to the regular constructor, except that they 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 contstructor can + have a list of properties, and the property constructor can have a list + or parameters. + Be sure to terminate every list with a '0', or your code will crash, if + you are lucky. + +\layout Subsubsection + +Parsing Text Files +\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 Verbatim + +icalcomponent* icalparser_parse_string(char* str); +\layout Standard + +This may seem wasteful if you want to pull a large component off of the + network; you may prefer to parse the component line by line. + This is possible too, with +\layout Verbatim + +icalcomponent* icalparser_parse(char*(*line_gen_func)(char *s, size_t size, + void *d)); +\layout Standard + +This routine takes a pointer to a function that copies 'size' characters + to 's'. + The routine returns 's', similar to fgets(). + See string_line_generator in icalparser.c for an example. + +\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. + +\layout Subsubsection + +Finding Components +\layout Standard + +To find a sub-component of a component, use: +\layout Verbatim + +icalproperty* icalcomponent_get_first_component( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent* component, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +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 Code + +ICAL_ANY_COMPONENT +\layout Code + +ICAL_VEVENT_COMPONENT +\layout Code + +ICAL_VTODO_COMPONENT +\layout Code + +ICAL_VJOURNAL_COMPONENT +\layout Code + +ICAL_VCALENDAR_COMPONENT +\layout Code + +ICAL_VFREEBUSY_COMPONENT +\layout 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 + +Interating Through Components +\layout Standard + +Iteration requires a second routine to get the next subcomponent after the + first: +\layout Verbatim + +icalcomponent* icalcomponent_get_next_component(icalcomponent* component, + +\layout Verbatim + +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 Code + + +\protected_separator + for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +c != 0; +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) +\layout Code + +{ +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + do_something(c); +\layout 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 + +Removing Components +\layout Standard + +Libical component have internal iterators, so you can only have one iteration + over a component at a time. + Removing an element from a list while iterating through the list can cause + problems, since you will probably be removing the element that the internal + iterator points to. + This will result in the iteration loop terminating immediately after removing + the element. + To avoid the problem, you will need to step the iterator ahead of the element + you are going to remove, like this: +\layout Code + +for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); + +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +c != 0; +\layout Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +c = next +\layout Code + +{ +\protected_separator + +\protected_separator + +\layout Code + + +\protected_separator +next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); +\layout Code + + +\protected_separator + +\protected_separator + icalcomponent_remove_component(parent_comp,c); +\layout 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 Verbatim + +icalproperty* icalcomponent_get_first_property( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent* component, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_kind kind); +\layout Verbatim + +icalproperty* icalcomponent_get_next_property( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent* component, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty_kind kind); +\layout Verbatim + +void icalcomponent_add_property( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent* component, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* property); +\layout Verbatim + +void icalcomponent_remove_property( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalcomponent* component, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* property); +\layout Verbatim + +icalparameter* icalproperty_get_first_parameter( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* prop, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalparameter_kind kind); +\layout Verbatim + +icalparameter* icalproperty_get_next_parameter( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* prop, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalparameter_kind kind); +\layout Verbatim + +void icalproperty_add_parameter( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* prop, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalparameter* parameter); +\layout Verbatim + +void icalproperty_remove_parameter( +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalproperty* prop, +\layout Verbatim + + +\protected_separator + +\protected_separator + +\protected_separator +icalparameter_kind kind); +\layout Subsubsection + +Getting Values +\layout Subsubsection + +Setting Values +\layout Subsubsection + +Getting Parameters +\layout Subsubsection + +Setting Parameters +\layout Subsubsection + +Removing Parameters +\layout Subsubsection + +Checking Component Validity +\layout Subsection + +Storing Objects +\layout Standard + +The libical distribution inclues a seperate library, libicalss, that allows + you to store iCal component data to disk in a variety of ways. + This library is documented seperately. + +\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 transfering 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. + 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 + +icalerror_errno. + Return values. + #defines. + icalerror_stop_here. + X-LIC-ERROR +\layout Subsubsection + +Return values +\layout Subsubsection + +icalerrno +\layout Subsubsection + +Component errors +\layout Subsubsection + +icalerror_stop_here +\layout Subsubsection + +X-LIC-ERROR +\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 + +Useful Recipies +\layout Standard + +Iteration +\layout Standard + +Copying components. + Remember that you must clone or remove an object before putting in on another + list. + +\layout Standard + +Finding compliance errors +\layout Section + +Performance +\layout Standard + +Checking restrictions is computationally expensive +\layout Section + +Hacks and Bugs +\the_end diff --git a/libical/doc/UsingLibical.ps b/libical/doc/UsingLibical.ps new file mode 100644 index 0000000000..0417ded6a5 --- /dev/null +++ b/libical/doc/UsingLibical.ps @@ -0,0 +1,1308 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software +%%Title: UsingLibical.dvi +%%Pages: 6 +%%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 2000.02.18:1517 +%%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 ecbx1000 10 47 +/Fa 47 122 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF +FE0FF0D93FF8ECF81F90267FE0019038F03FF849485A4816E014804816C00200ED1FF081 +F007C06F91C7FCA8B912E0A4000390C701C0C7FCB3ABB5D8FC3FEBFF80A43D3A7EB938> +27 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F12007F137E137FA2EB3F80A214C013 +1F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A414E0131FA214C0133F1480A2EB +7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC123E5A12F05A16537BBD25>41 +D<EA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F800D0D798C1B>46 +D<49B4FC011F13F0017F13FC9038FF83FE4848C67E4848EB7F804848EB3FC04848EB1FE0 +A2001F15F0A24848EB0FF8A3007F15FCA400FF15FEB3007F15FCA5003F15F86D131FA200 +1F15F0A26C6CEB3FE0000715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13F001 +0190C7FC27377CB530>48 D<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB6 +1280A4213679B530>I<EB0FFE90387FFFC048B512F0000714FC390FE03FFF261F800F13 +80263F000313C0D87F8014E0EBE00100FF6D13F07FA2ED7FF8A46C5A6C5A0006C7FCC8FC +EDFFF0A216E05C16C04A138016004A5A4A5AEC1FF05D4A5A4AC7FC14FE495AD903F01378 +495A495A495A49C712F8017C14F05B49130148B6FC5A5A5A5A5A4815E0B7FCA425367BB5 +30>I<EB03FF011F13F0017F13FC3901FC07FF2603F003138048486C13C0496C13E0EA0F +F86D14F0487EA66C4814E06C5A6C485AC714C04A138016004A5A4A5AEC3FF090380FFFC0 +5D15F090380007FE913801FF806E13C016E0ED7FF016F8ED3FFCA216FEEA1FC0487E487E +487EA416FCA249137F007F15F801C0EBFFF06C5A6C6C4813E0260FFC0713806CB6120000 +0114FC6C6C13F0010790C7FC27377CB530>I<ED07C0150FA2151F153F157F15FF5CA25C +5C5C5C143E143C5C5C1301495A5C495A495A5B133E5B13785B485A1203485A5B48C7FC12 +1E5A127C5AB81280A4C70001EBC000AA0103B61280A429367DB530>I<001C15C0D81F80 +130701F8137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFF +E0017F13F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0 +A216F8A3121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F49 +13806C6C481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>I< +EC0FF8ECFFFE0103EBFF8090390FF80FC090393FE003E090397F8001F09038FF000F48EC +1FF84848133F485A120F5B121FA2003FEC1FF0ED0FE0484890C7FCA31408EC7FF039FFF1 +FFFC01F313FFD9F78013809039FF007FC049EB3FE04914F0ED1FF85B16FCA34914FEA412 +7FA5123F16FCA26C7E16F8000F143F6D14F0000715E06C6CEB7FC03A01FF81FF806C90B5 +1200013F13FC010F13F00101138027377CB530>I<123C123EEA3FE090B71280A4170048 +5D5E5E5E5EA2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA2 +4A5A143F4AC8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A +29397BB730>I<49B47E010F13F0013F13FC9038FE01FF3A01F8007F804848EB3FC04848 +EB1FE0150F484814F01507121FA27F7F7F6D130F01FF14E014C09138E01FC06CEBF83F91 +38FE7F806C9038FFFE005D6C14F06C14FC6C14FF6D14806D14C090B612E0D803FD14F026 +07F07F13F848487E261FC00F13FC383F8003007F010013FE90C7127F151F00FE14071503 +1501A21500A216FC7E6C14016D14F86C6C13036DEB07F06C6CEB0FE0D80FFEEB7FC00003 +B61200C614FC013F13F00103138027377CB530>I<EB03FF011F13E0017F13F83901FF01 +FE48486C7E4848EB7F80484814C0001FEC3FE0485AED1FF0127F16F8A212FF16FCA416FE +A5007F143FA3123F157F6C7E000F14FF6C6C5A3903FE03DF6CB5129F6C6C131FD91FFC13 +FCEB00201400A3D80FE0EB3FF8487E486C14F0A216E0157F16C0EDFF80495A6C48481300 +90388007FE390FE01FF86CB55A6C14C0C691C7FCEB1FF027377CB530>I<DB3FFCEB01C0 +0203B5EAC003021FECF00791B6EAFC0F01039039FC00FF3F4901C0EB1FFFD91FFEC77E49 +481403D97FF080494880485B48177F4849153F4890C9FC181F485A180F123F5B1807127F +A24993C7FC12FFAD127F7FF003C0123FA27F001F1707A26C6C1780180F6C6D16006C6D5D +6C173E6C6D157ED97FF85D6D6C4A5A6DB44A5A010701C0EB0FE06D01FCEBFF80010090B5 +48C7FC021F14F8020314E09126003FFEC8FC3A3B7BB945>67 D<B87E17F817FF18C02800 +7FF8000713F09338007FF8EF1FFE717E050313807113C0A27113E0F07FF0A2F03FF8A219 +FC181FA219FEA419FFAC19FEA419FC183FA219F8187F19F0F0FFE0A24D13C04D13804D13 +00EF1FFEEF7FFC933807FFF0B912C095C7FC17FC178040397DB849>I<B912C0A43A007F +F800039338007FE0171F170F1707A21703A21701A318F0EE7800A41800A216F8A2150115 +0791B5FCA4ECF80715011500A21678A693C8FCADB7FCA434397DB83C>70 +D<DB3FFCEB01C00203B5EAC003021FECF00791B6EAFC0F01039039FC00FF3F4901C0EB1F +FFD91FFEC77E49481403D97FF080494880485B48177F4849153F4890C9FC181F485A180F +123F5B1807127FA24993C8FC12FFAB043FB61280A2127F7FDC0003EBC000123FA27F121F +A26C7EA26C7F6C7F6C7F7ED97FF85C6D7E6DB45C010701C05B6D01FCEBFF3F010090B5EA +FE0F021FECF8030203ECE0009126003FFEC9FC413B7BB94B>I<B612FCA439007FF800B3 +B3ADB612FCA41E397DB824>73 D<B7FCA426007FF8C9FCB3ACEF0780A5170F1800A35FA2 +5FA25F5F5E5EEE0FFE167FB8FCA431397DB839>76 D<B8FC17F017FEEFFF8028007FF800 +0F13C0040113E07013F0EF7FF8EF3FFCA2EF1FFEA218FFA818FEA2EF3FFCA2EF7FF8EFFF +F04C13E0040F13C091B7120017FC17E002F8C9FCB3A4B612FCA438397DB841>80 +D<B712FCEEFFE017FC17FF28007FF8000F13C004017F707F717E717EA2717EA284A760A2 +4D5A604D5A4D5A04035B041F90C8FC91B612FC17E0839139F8003FFCEE0FFF707F707F82 +84A2707FA584A51A601AF084177F1901DD3FFE13E0B600FC011F130394390FFF87C071EB +FF8005011400CBEA1FFC443A7DB848>82 D<D907FF130E013FEBE01E90B5EAF83E0003EC +FE7E3A07FC01FFFE390FF0001F4848130F48481303491301007F140090C8FC167E5A163E +A27F161E7F7F6D91C7FC13FC387FFFE014FEECFFF06C14FE6F7E6C816C15F06C816C81C6 +81133F010F801301D9000F1480EC007F030F13C01503818100F0157FA3163FA27E17807E +167F6C16007E6D14FE01E0495A01F813039039FF801FF800FC90B512E0D8F83F5CD8F007 +49C7FC39E0007FF02A3B7BB935>I<003FB91280A4D9F800EBF003D87FC09238007FC049 +161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE010FB7FC +A43B387DB742>I<B600FC011FB512C0A426007FF8C8381FC000725AB3B3181F013F94C7 +FC8060011F163E6D6C157E187C6D6C15FC6D6D495A6D6DEB07F06D01F0EB1FE0DA7FFEEB +FFC0021FB6C8FC02075C020014F0030F1380423A7DB849>I<B600F00103B512E0A4C601 +F0C83807F0006E5E017F5F6E150FA2013F5F6E151F011F94C7FC6E5D6D163E6F147E6D16 +7CA26F14FC6D5E6F13016D5E6F13036D5E811707027F5D6F130F023F5D6F131F021F92C8 +FC815F6E143EEE807E6E147CEEC0FC6E5C16E016E16E5C16F36E5C16FF6F5BA36F5BA26F +90C9FCA26F5AA36F5AA26F5AA26F5A433A7EB848>I<EB3FFE0003B512E0000F14F8391F +F00FFE003FEB03FF6D6C7F6E7FA26F7EA26C5A6C5AEA0380C8FCA2EC3FFF010FB5FC137F +3901FFF87F00071380380FFE00EA3FF85B485A12FF5BA415FF6D5A127F263FF00713F83B +1FFC1FBFFFC0390FFFFE1F0003EBF80F39003FE0032A257DA42E>97 +D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF00013804AEB7FC002 +80EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F06E133F6EEB7FE0 +6E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9C00390C7FC2F3A +7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C048485AEA0FF812 +1F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01E06C7E15036C6C +EB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023257DA42A>I<EE +7F80ED7FFFA4150381AF903801FF81010F13F1013F13FD9038FFC07F0003EB001FD807FC +1307000F8048487F5B123FA2485AA312FFAA127FA27F123FA26C6C5B000F5C6C6C5B6C6C +4913C02701FF80FD13FE39007FFFF9011F13E1010113012F3A7DB935>I<903803FF8001 +1F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC1FE05B003FEC0F +F0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D14F0 +00071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025257DA42C>I<EC +1FF0903801FFFC010713FF90391FF87F8090383FE0FFD9FFC113C0A2481381A24813016E +1380A2ED3E0092C7FCA8B6FCA4000390C8FCB3ABB512FEA4223A7DB91D>I<161FD907FE +EBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF4990 +387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B512F8 +6D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C816C81 +5A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81FF0EB +07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I<13FFB5FCA41207 +7EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25CA291 +C7FCB3A3B5D8FC3F13FFA4303A7DB935>I<EA01F0EA07FC487EA2487EA56C5AA26C5AEA +01F0C8FCA913FF127FA412077EB3A9B512F8A4153B7DBA1B>I<13FFB5FCA412077EAF92 +380FFFE0A4923803FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7F +E04A7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13 +F8A42D3A7EB932>107 D<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97F +E0EB0FFC00FF902601FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00 +903887801F000749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5 +D8FC1FB50083B512F0A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F +03FFDA3C011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430 +257DA435>I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D +7E48486D7EA2003F81491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA2 +6C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430> +I<9039FF01FF80B5000F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7F +E091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEB +FFC0DAF00313809139FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F +357EA435>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5C +A29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114 +D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E +7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE +140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400 +38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7 +FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425> +I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90 +387FFFFC011F13F00103138030257DA435>I<B539F001FFF8A4000390C7EA1F00161E6E +133E6C153C6E137C6C15786E13F8017F5CECF001013F5C14F8011F495AA2ECFC07010F5C +ECFE0F010791C7FC6E5A6D131E15BE6D13BC15FC6D5BA36E5AA26E5AA26E5AA26E5AA22D +257EA432>I<B539F01FFFF0A4000390398003F8006C01C013E06C1407D97FE05B6D6C48 +5A6E48C7FC90381FFC3E010F5B903807FEFC6D6C5A5D6D5B6D5B6E7E6E7E814A7EA24A7E +903801F3FFD903E37FD907C17FEB0FC049486C7E4A6C7E013E80496D7E49130F00016E7E +B590383FFFF8A42D257EA432>120 D<B539F001FFF8A4000390C7EA1F00161E6E133E6C +153C6E137C6C15786E13F8017F5CECF001013F5C14F8011F495AA2ECFC07010F5CECFE0F +010791C7FC6E5A6D131E15BE6D13BC15FC6D5BA36E5AA26E5AA26E5AA26E5AA292C8FCA2 +5C141E003F133E387F803C38FFC07C147814F8EBC1F0EBC3E06C485A387D1F80D83FFFC9 +FCEA1FFCEA07F02D357EA432>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fb ecbx1200 12 47 +/Fb 47 122 df<157F913803FFC0020F7F4A7F91383FE1F891387F80789138FF007C4914 +3C495A163E4948131EA3130FA3163E163C167C16786E13F84B5A4B5A15075E6D6C485A4B +C70003B512E0153E15FC6D5B5D4B91390007C0004B5E6D6D150F4FC7FC6D6D151E49173E +496D5D491778496D15F890261FBFFE4A5AD93F3F5E9026FE1FFF1403D801FC6E495A0003 +6D5E48486C6D130F000F6F49C8FC001F6D6D133E48486C6D133C187C007F6D6D5B6F6C48 +5A00FF6E6C485A6FEB87C06F13CFEFFF806F91C9FC6D6D5B6F49EC01E06F7F6C6CEC3FFF +706D13036C6C4A6DEB07C06C6C91B500F0130FDA800702FCEB1F806C9026E03FF89039FF +80FF00000390B5D8F03FEBFFFE6CDBC00F5C6C6CDA00035C011F01F8D9007F13E0010301 +80020790C7FC4B477BC557>38 D<B612F8A91D097F9A25>45 D<EA07C0EA1FF0EA3FF8EA +7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F>I<EC03C01407141F147FEB03 +FF133FB6FCA413C3EA0003B3B3ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D +7E90B612E0000315F82607FC0313FE3A0FE0007FFFD81F806D138048C7000F13C0488001 +C015E001F07F00FF6E13F07F17F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B1380 +4B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE +495A494814F8D907E014F0495A495A49C8FC017C140149140348B7FC4816E05A5A5A5A5A +B8FC17C0A42D417BC038>I<ECFFF0010713FF011F14C0017F14F049C66C7ED803F8EB3F +FED807E06D7E81D80FF86D138013FE001F16C07FA66C5A6C4815806C485BC814005D5E4B +5A4B5A4B5A4A5B020F1380902607FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF +80816F13C017E0A26F13F0A217F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A49 +4913C05BD83F80491380D81FF0491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49 +C7FC010113E02D427BC038>I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7 +140715C7EC0F87EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E +5BA25B485A485A485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280 +A531417DC038>I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15 +E092C8FC01C0C9FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01 +FC6D7E01F06D13804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF +7FA317F05B5D6C4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD8 +07FEEBFFFC6CB612F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E02 +1F13F0027F13FC49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFF +E048495A5A1400485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC +91381FFF8000FF017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A +6C13C05B6F13E0A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C +15C06D4913806C018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC +9038003FF02D427BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A248 +1680007EC8EA3F00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E +5DA24A5A14035D14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D +5A6D5A6D5A2F447AC238>I<EC7FF00103B5FC010F14C0013F14F090397F801FFC3A01FC +0003FE48486D7E497F4848EC7F80163F484815C0A2001F151FA27FA27F7F01FE143F6D15 +8002C0137F02F014006C01FC5B6E485A6C9038FF83FCEDE7F86CECFFE06C5D6C92C7FC6D +14C06D80010F14F882013F8090B7FC48013F14802607FC0F14C0260FF80314E04848C6FC +496D13F0003F141F48481307496D13F8150000FF157F90C8123F161F160FA21607A36D15 +F0127F160F6D15E06C6C141F6DEC3FC06C6CEC7F80D80FFE903801FF003A07FFC00FFE6C +90B55AC615F0013F14C0010F91C7FC010013F02D427BC038>I<EC7FF0903807FFFE011F +6D7E017F14E09039FFE03FF0489038800FF848496C7E48488048486D7E001F80003F1680 +A2484815C08117E0A212FF17F0A617F8A45D127FA3003F5CA26C7E5D6C6C5B12076C6C13 +1E6CEBC07C6CEBFFF8013F5B010F01C013F00101130090C8FCA217E05DA2EA03C0D80FF0 +15C0487E486C491380A217004B5A150F5E49495A6C48495A01C0EBFFE0260FF0035B6CB6 +5A6C4AC7FC6C14F86C6C13E0D907FEC8FC2D427BC038>I<EE1F80A24C7EA24C7EA34C7E +A24B7FA34B7FA24B7FA34B7F169F031F80161F82033F80ED3E07037E80157C8203FC804B +7E02018115F0820203814B137F0207815D173F020F814B7F021F8292C77EA24A82023E80 +027E82027FB7FCA291B87EA2498302F0C8FCA20103834A157F0107834A153FA249488284 +011F8491C97E4984133E017E82B6020FB612F0A54C457CC455>65 +D<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791B539E001FF0F4949 +C7EA3F9F010701F0EC0FFF4901C0804990C87E4948814948814948167F4849163F484916 +1F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C7FC12FFAE127F7F1AF0A2 +123FA27F6C18011AE06C7F19036C6D17C06E16077E6C6DEE0F806C6DEE1F006D6C5E6D6C +167E6D6C6C5D6D6D4A5A6D01F0EC07F0010101FEEC1FE06D903AFFF001FF80023F90B6C7 +FC020715FC020115F0DA001F1480030001F8C8FC44467AC451>67 +D<B9FC18F018FE727E19E026003FFEC7001F13F805017F9438003FFF060F7F727F727F72 +7F84737E737EA2737EA2737EA21B80A2851BC0A51BE0AD1BC0A51B8061A21B006162193F +624F5A19FF624E5B06075B4E5B063F90C7FC4DB45A050F13F8BA5A19C04EC8FC18F095C9 +FC4B447CC356>I<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E193E +A3191EA21778A285A405F890C7FCA316011603161F92B5FCA5ED001F160316011600A2F1 +01E01778A2F103C0A494C7FC1907A21A80A2190FA2191FA2193FF17F0061601807181F4D +B5FCBBFC61A443447DC34A>I<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023F +EDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E4948814948 +814948167F4849163F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A349 +94C8FC12FFAD057FB612F0127F7FA3003FDC0001EBF000A27F7EA26C7FA26C7F807E6C7F +6C7F6D7E6D6C5D6D6C7E6D6D5C6D01F05C010101FE143F6D903AFFF001FF9F023F90B612 +0F0207EDFC030201EDF000DA001F02C01330030001FCC9FC4C467AC458>71 +D<B7D88003B612FEA526003FFEC9EBF800B3A791B9FCA54AC9FCB3AAB7D88003B612FEA5 +4F447CC358>I<B712F0A526003FFECAFCB3B1F00780A4180F1900A460A360A2187EA218 +FE170117031707171F177FEE03FFB95AA539447CC343>76 D<B500FE067FB512806E95B6 +FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6DEE079FA26E6CEE0F1FA26E6C161EA2 +6E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A26E6DEC03C0A36E6DEC0780A26F6CEC +0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F6D485AA26F6D485AA26F6D485AA370 +6C48C7FCA293383FF81EA2706C5AA2706C5AA3706C5AA2705BA2705BA2705BA2B6057FB6 +128071C7FCA2173E171C61447CC36A>I<B64BB512FE8181A281D8003F6D91C7EA780081 +013D7F81133C6E7E6E7F6E7F6E7F6E7F82806E7F6E7F6F7E6F7F83816F7F6F7F6F7F6F7F +6F7F8382707F707F707F707F8482707F707F717E7113807113C019E0837113F07113F871 +13FC7113FE19FF847213F884848484A28484197F193F191FA2190F1907B6160319011900 +1A78A24F447CC358>I<923807FFC092B512FE0207ECFFC0021F15F091267FFE0013FC90 +2601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E6C7E49486F7E49486F7E01FF +8348496F7E48496F1380A248496F13C0A24890C96C13E0A24819F04982003F19F8A3007F +19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A26D5E6C19F0A26E5D6C19E0A2 +6C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D6C4B5A6D6C4A5B6D01C00107 +5B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F8020715C002004AC8FC030713C0 +47467AC454>I<B9FC18F018FE727E19E0D8001F90C7000F7F05017F716C7E727E727E72 +1380A21AC084A21AE0A91AC0A24E1380A21A00604E5A4E5A4D485A050F5B92B712C096C7 +FC18FC18C092CBFCB3A7B712E0A543447DC34D>I<B812F8EFFFC018F818FE727ED8001F +90C7003F13E005037F05007F727E727E727EA28684A286A762A24E90C7FCA24E5A61187F +943801FFF005075B053F138092B7C8FC18F818E018F892C77FEF3FFF050F7F717F717FA2 +717FA2717FA785A61B0F85A2187F73131F72141EB700E06DEB803E72EBE0FC72EBFFF806 +0114F0726C13E0CC0007138050457DC354>82 D<DAFFE0131C010701FE133C013F9038FF +807C90B6EAE0FC4815F9489038801FFF3907FC00014848EB007F4848143F4848140F4914 +07007F15035B1601160012FF177CA27FA26D153C7F7F6D92C7FC6C7EEBFFE014FE6CEBFF +F015FF6C15E016FC6C816C6F7E6C826C826C6C81011F810107811300020F80140003077F +ED007F82040F1380828212F082A282A27EA218007EA26C5D6C5E6D14036D5D6D140701F8 +4A5A01FFEC3FF002F8EBFFE0486CB65AD8FC1F92C7FCD8F80714FC48C614F04801071380 +31467AC43E>I<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C71607 +A2007E1803007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA54543 +7CC24E>I<B792B6FCA526003FFECAEAFC00806D606F15016D608119036D606F15076D60 +6F150F6D6081191F6D6D93C7FC61027F163E6F157E023F167C8119FC6E6D5C18016E5E70 +13036E5E8218076E6D5C180F6E5E70131F6E93C8FC705B037F143E82187E033F147C7013 +FC6F5C17816F5C17C117C36F5C17E76F5C17FF6F5CA36F91C9FCA2705AA2705AA3705AA2 +705AA2705AA250457EC355>86 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007F +F84848EB1FFC6D6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6 +FC1307013F13F19038FFFC01000313E0481380381FFE00485A5B127F5B12FF5BA35DA26D +5B6C6C5B4B13F0D83FFE013EEBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D9 +0FFCC9FC322F7DAD36>97 D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F8 +9139DFC03FFC9139FF000FFE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F817 +3FA318FCAC18F8A2177F18F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903A +FC1FC07FFC496CB512F0D9F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B5 +12C0010F14F0013F14FC90397FF003FE9039FFC001FF0003495A48494813805B120F485A +A2485A6F1300007F6E5AED00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C140700 +0F16806D140F6C6DEB1F006C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7 +FC9038003FF82A2F7CAD32>I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010F +EBFF8F013F14CF9039FFF807FF48EBC00148903880007F4890C7123F4848141F49140F12 +1F485AA3127F5BA212FFAC127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC +6CD9C00314FC6C9038F01FEF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467C +C43E>I<EC3FF80103B57E010F14E0013F8090397FF83FF89039FFC007FC48496C7E4849 +6C7E48486D1380485A001FED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401 +F0C9FCA5127FA27FA2123F17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C +01F0EB3F0090397FFE01FE011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33> +I<DAFFE0137E010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF848 +48EB0FFC4848903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D +5B000F5D6C6C495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F +90CAFCA47F7F7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77E +D83FC014074848020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD8 +0FFEEC3FF83B07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427D +AC38>103 D<EB7FC0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F0 +3FFC9138CF801F9139DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA53745 +7CC43E>I<137C48B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7 +FCAAEB7FC0EA7FFFA512037EB3AFB6FCA518467CC520>I<EC03E0EC0FF8EC1FFCEC3FFE +A2EC7FFFA5EC3FFEA2EC1FFCEC0FF8EC03E091C7FCAAEC01FF0103B5FCA5EB000F80B3B3 +A7EA1F80EA3FC0EA7FE0EAFFF0EC0FFEA215FC141F01E013F8007FEB3FF0393FC0FFE06C +B512806C1400000313FCC613C0205A86C522>I<EB7FC0B5FCA512037EB3B3B3A3B61280 +A519457CC420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B5 +12E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E +007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B5 +12FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC +91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5 +372D7CAC3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F4849 +6C7F4848C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF1780 +AA007F1700A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27 +007FF80F90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC0 +0FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D +13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15 +C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1F +F092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC +91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B6 +12E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383FC000 +49133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015 +F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F15 +0FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E0 +26E007FEC7FC232F7CAD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF12 +03000F90B51280B7FCA4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F +8090391FFC1F006DB5FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB501 +03B5FCA50003EC000F6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E76D +B512C7010F1407010313FE9026007FF0EBFC00372E7CAC3E>I<B6903803FFFCA5000101 +E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5D +ED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F +5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578362C7EAB3B>I<B6903803FFFCA5 +000101E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13 +076D5DED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15 +FD021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14015D001F1303 +D83F805B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06CB45A6C5B0007 +90CAFCEA01FC36407EAB3B>121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fc ectt1000 10 59 +/Fc 59 126 df<121FEA3F80EA7FC0EAFFE0B0EA7FC0AEEA1F00C7FCA7121FEA3F80EA7F +C0EAFFE0A5EA7FC0EA3F80EA1F000B3470B32C>33 D<003C131E007F137F481480A66C14 +00A6007E7FA6003E133EA3003C131E001C131C191977B32C>I<143814FC13011303EB07 +F8EB0FF0EB1FC0EB3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A +127EA312FE5AAC7E127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F +80EB1FC0EB0FF0EB07F8EB03FC130113001438164272B92C>40 D<127012FC7E7E6C7E6C +7EEA0FE06C7E6C7E6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301 +A314FC1300AC130114F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE48 +5A485A485A485AEA3FC0485A48C7FC5A5A1270164279B92C>I<EA0F80EA1FE0EA3FF0EA +7FF8A213FCA3123F121F120F120013F8A21201EA03F01207EA1FE0EA7FC0EAFF80130012 +FC12700E17718A2C>44 D<007FB512F0B612F8A36C14F01D0579942C>I<121FEA3F80EA +7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507ED0F80A2151F16005D153E15 +7E157CA215FC5D14015D14035D14075D140F5D141F92C7FC5C143EA2147E147C14FC5C13 +015C13035C13075C130F5C131F91C8FC5B133EA2137E137C13FC5B12015B12035B12075B +120F5B121F90C9FCA25A123E127E127C12FC5AA2127021417BB92C>I<EB03F8EB0FFE90 +383FFF80497F90B57E3901FE0FF03903F803F848486C7EEBE0004848137EA248487FA248 +C7EA1F80A2003E140F007E15C0A3007C140700FC15E0AC6C140F007E15C0A46CEC1F80A3 +6C6CEB3F00A26C6C137E6D13FE00075CEBF0016C6C485A3901FE0FF06CB55A6D5B6D5BD9 +0FFEC7FCEB03F823357CB32C>I<1307497EA2131FA2133F137F13FF5A1207127FB5FC13 +DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C3477B32C>I<121FEA3F80EA7F +C0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA +1F000B2470A32C>58 D<EA0F80EA1FC0EA3FE0EA7FF0A5EA3FE0EA1FC0EA0F80C7FCAEEA +0F80EA1FE0EA3FF0EA7FF8A213FCA3123F121F120F120013F8A21201EA03F01207EA1FE0 +EA7FC0EAFF80130012FC12700E3071A32C>I<007FB612F0B712F8A36C15F0CAFCA8007F +B612F0B712F8A36C15F025127DA12C>61 D<EC7F80903803FFE0010F7F013F7F497F9038 +FFC0FE3901FE007FD803F87F4848EB1F809038E00FCF390FC03FFF48484813C091B5FCEA +3F01393E03F87F903907F03FE0007EEBE01F397C0FC00FEC8007A2EAFC1F00F8EB0003A9 +00FCEB8007D87C0F14C0A2ECC00F3A7E07E01F80003EEBF03F903903F87F00393F01FFFE +D81F805B6E5A6C6C6C5A3907E00FC09039F00007C06C6CEB0FE0D801FE131F3900FFC0FF +6DB512C06D1480010FEBFE00010313F89038007FC023337CB22C>64 +D<14FE497EA4497FA214EFA2130781A214C7A2010F7FA314C390381F83F0A590383F01F8 +A490387E00FCA549137E90B512FEA34880A29038F8003FA34848EB1F80A4000715C04913 +0FD87FFEEBFFFC6D5AB514FE6C15FC497E27347EB32C>I<02FF13700107EBE0F84913F9 +013F13FD4913FFEBFF813901FE007F4848131FD807F0130F1507485A491303485A150148 +C7FCA25A007EEC00F01600A212FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C1303 +6D14F06C6C130716E0D803FC131F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13 +F00100138025357DB32C>67 D<007FB612F0B712F8A37E3903F00001A7ED00F01600A4EC +01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8007FB612FEB7FCA36C15FC27 +337EB22C>69 D<903901FC038090390FFF87C04913EF017F13FF90B6FC4813073803FC01 +497E4848137F4848133F49131F121F5B003F140F90C7FCA2127EED078092C7FCA212FE5A +A8913803FFF84A13FCA27E007E6D13F89138000FC0A36C141FA27F121F6D133F120F6D13 +7F6C7E6C6C13FF6D5A3801FF076C90B5FC6D13EF011F13CF6DEB0780D901FCC7FC26357D +B32C>71 D<D87FFEEBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E000 +0FB3D87FFEEBFFFCB54813FEA36C486C13FC27337EB22C>I<007FB512F8B612FCA36C14 +F839000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I<387FFFE0B57EA36C +5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15F025337DB22C>76 +D<D87FE0EB0FFC486CEB1FFEA26D133F007F15FC000F15E001BC137BA4019E13F3A3EB9F +01A2018F13E3A21483A2018713C314C7A201831383A214EFA201811303A214FFEB80FEA3 +147C14381400ACD87FF0EB1FFC486CEB3FFEA36C48EB1FFC27337EB22C>I<D87FF0EB7F +FC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA2148013C714C0A213C3 +14E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587A2140715C7A21403 +15E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F8027337EB22C>I<EB7F +FF0003B512E0000F14F848804880EBE003EB800048C7127FA2007E80A300FE158048141F +B3A86C143FA2007E1500A3007F5CA26C6C13FEEBF00790B5FC6C5C6C5C000314E0C66C90 +C7FC21357BB32C>I<007FB512C0B612F88115FF6C15802603F00013C0153FED0FE0ED07 +F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280160015FC5D15C001 +F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<387FFFFCB67E15E015F86C803907E007 +FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE140790B55A5D15E0818190 +38E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8 +EA01F029347EB22C>82 D<90381FF80790B5EA0F804814CF000714FF5A381FF01F383FC0 +03497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFC +EBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07FF02001380153FED1F +C0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90 +B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007FB612FCB712FEA43AFC +007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA227337EB22C>I<D87FFCEB +7FFC486CEBFFFEA36C48EB7FFCD80FC0EB07E06D130F000715C0A36D131F00031580A36D +133F00011500A36D5B0000147EA4017E5BA46D485AA490381F83F0A4010F5B14C7A30107 +5BA214EFA201035BA214FFA26D90C7FCA46D5A27347EB22C>86 D<D87FFCEB7FFC486CEB +FFFEA36C48EB7FFCD807F0EB0FC0151F000315806D133F12016DEB7F0012006D137E017E +13FE017F5BEB3F01EC81F8131FEC83F0EB0FC314C7903807E7E0A201035B14EF6DB45AA2 +92C7FC7F5C147EB0903807FFE0497FA36D5B27337EB22C>89 D<003FB612C04815E0A400 +7EC7EA1FC0ED3F80A2ED7F00157E15FE4A5A003C5CC712034A5AA24A5A4A5AA24A5A4AC7 +FCA214FE495AA2495A495AA2495A495AA2495A49C8FCA213FE485AA24848EB03C049EB07 +E01207485A5B121F485AA248C7FCB7FCA46C15C023337CB22C>I<007FB6FCB71280A46C +150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC +381F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090 +C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003F +F007FC27247CA32C>97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13FE90B6FC16 +809138F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D +14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F8 +13F83900F03FC027337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48804848C6FC +EA0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D +133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I< +EC0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E +497E48487F90C7FC007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807 +FC1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03FE90381FFF +C0017F13F048B57E48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1FC090C7120F +5A007E15E015075AB7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E06C7ED80FF0 +130F6C6CEB3FC001FF13FF000190B512806C1500013F13FC010F13F00101138023247CA3 +2C>I<EC0FF8EC3FFE91B5FC4914805B903807FC7F14F090390FE03F0014C092C7FCA600 +7FB512FEB7FCA36C5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB22C>I<ED03 +F8903907F80FFC90391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607F003133E3A +0FE001FC1CD9C0001300001F8049137EA66D13FE000F5CEBE0016C6C485A3903FC0FF048 +B5FC5D481480D99FFEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48ECFF804815E0 +4815F03A3FC0001FF848C7EA03FC007E1400007C157C00FC157E48153EA46C157E007E15 +FCD87F801303D83FE0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D8003F13F80107 +13C028387EA42C>I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE01FB7F90B6 +FC9138F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E014 +0029337FB22C>I<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7E +A2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2EC7FC0A3EC +3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3B3A2141F003C1480007E133FB4 +14005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467CB32C>I<EA7FE0487EA3127F12 +01AA91381FFFF04A13F8A36E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A4AC7FC14FE +EBF1FC13F3EBF7FE90B5FCA2EC9F80EC0FC001FE7FEBFC07496C7E496C7E811400157E81 +1680151F3A7FFFC0FFFCB500E113FEA36C01C013FC27337EB22C>I<387FFFE0B57EA37E +EA0003B3B3A5007FB61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1F +F83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E0 +13C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D +2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC0 +1F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>I< +EB07FCEB1FFF017F13C048B512F048803907FC07FC390FF001FE48486C7E0180133F003F +158090C7121F007EEC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15806D133F6C +6CEB7F006D5B6C6C485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07FC23247CA3 +2C>I<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091 +380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07 +F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFF +E0B57EA36C5B27367FA32C>I<D87FFEEB3FC0B53801FFF0020713F8021F13FC6C5B3900 +3F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391C8FCAF007FB512E0B67EA36C5C +26247EA32C>114 D<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA3 +6CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007 +EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E0 +00F8148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8 +FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003F +E0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D13 +7F3900FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFC +B514FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E01 +7C137CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035B +A214FF6D90C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF6EB5FCB515806C16004A7E +D807C0EB01F0A66C6C495AA3143E147FA2D801F0495AECFF87A214F7A201F113C700005D +9038F9E3CFA201FB13EFA3D97BC190C7FC017F13FFA21480A2013F5B90381F007C29247F +A32C>I<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5B +EB1F83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803 +EF80903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7F +FF01FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE14831481 +6C010113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA201 +3F13FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC +80A2143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C +90C8FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED +7F80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A49 +5A495A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA3 +2C>I<15FF02071380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE013FF00 +7F5BB55A49C8FC6D7E6C7FC67F131FEB07F01303B380EB01FEECFFC06D13FF6E1380141F +14070200130021417BB92C>I<EA7FC0EAFFF813FE6D7E6C7FC67F131FEB07F01303B380 +EB01FEECFFC06D13FF6E1380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE0 +13FF007F5BB55A49C8FC13F8EA7FC021417BB92C>125 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fd ecbx1440 14.4 41 +/Fd 41 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<121F7F7FEBFF8091B8FCA45A18FE18FC18 +F818F0A218E018C018804817000180C8123E007EC9127E5F007C4B5A4C5A5F16074C5A48 +4B5A4CC7FC167E167CC912FC4B5A4B5AA24B5A150F4B5AA24B5AA24BC8FC5DA25C5D1403 +A214075D140FA3141FA2143FA34A5AA414FFA65BAB6D5B6E5A6E5A6E5A385279D042>I< +913803FFC0023F13FC49B67E010715E090260FFC0013F8D93FE0EB1FFCD97F80EB07FE49 +C76C7E496E1380484880000317C049157F120718E0173F120FA27FA27F7F6E147F02E015 +C08002FC14FF6C01FF15806F481300EDE0036C9138F807FE6F485A6C9138FF1FF06CEDFF +E017806D4AC7FC7F010F6E7E6D81010115F06D81010315FE010F81D93FF71580D97FC115 +C02701FF807F14E048EB001F48486D14F04848010314F848481300496E13FC003F151F49 +1407007F6F13FE491400177F00FF163F49151F170F1707A21703A218FCA27F127F6DED07 +F8A26C6CED0FF07F6C6CED1FE06C6CED3FC06C6CEDFF806C01C0010313006C01FCEB3FFE +6C6CB612F8011F15E001071580010002FCC7FC020F13C0374F7BCD42>I<913807FF8002 +7F13F849B512FE01076E7E90261FFE0113E0903A7FF8003FF049486D7E48496D7E48496D +7E484980486F138091C7FC486F13C05A18E0485A18F0A27013F812FFA318FCA618FEA35E +127FA4003F5DA26C7E5E7E6C6D5B161E6C7F6C6D5B6C6C6C13F890393FFC03F06DB55A01 +074A13FC01001400EC1FF891C8FCA218F85EA301FC16F0487E2607FF8015E05E486D15C0 +A24C1380A24C13005F4A131F6C4B5A49C7485A494A5A6C48495B6D01075B2701FF803F90 +C7FC6C90B512FC013F5C6D14C0010791C8FC9038007FF0374F7BCD42>I<B912FEF0FFF0 +19FE737E1AE0D8000F01C0C7001F7F06037F727F726C7E867313807313C0A27313E0A373 +13F0A94F13E0A34F13C01B80614F1300624F5A06035B4E13E0063F5B92B8C7FC19F8A2F1 +FF8003C0C7001F13E0060113F89538007FFE737E070F13C01BE07313F0851BF87313FCA2 +7313FEA31BFFA91BFEA2611BFCA2614F13F81BF0614F13E0077F13C04EB51280060FEBFE +00BB5A1AF01AC04FC7FC19C050527BD15D>66 D<932603FFF01407047F01FF140F0307B6 +00E0131F033F03F8133F92B700FE137F02039126C003FF13FF020F01F8C7EA3FC1023F01 +C0EC0FE391B5C80003B5FC4901FC814949814901E082011F498249498292CA7E49488349 +48835A4A83485B4885A24849187FA2485B1B3FA2485B1B1FA25AA21B0091CDFCA2B5FCAE +7EA280A36C1A1FA36C7FA21B3F6C7F1B3E6C7F1B7E6C6D187C6C1AFC6E18F86C19016D6C +EF03F06D7E6FEE07E06D6DEE0FC001076DEE1F806D01F8EE3F006D6D16FE6D01FF4B5A02 +3F01C0EC07F8020F01FCEC3FF00203903AFFC001FFC0020091B6C7FC033F15FC030715F0 +DB007F1480040301F0C8FC505479D25F>I<BAFC19F819FF1AE01AF8D8000701F0C7001F +13FE06017FDE003F13C0070F7F07037F737F737F747E747E747F86747F8886888688A274 +7FA3881B7FA288A51D80AF1D00A564A21BFF64A3505BA2505BA2505BA2505B505B99C7FC +505A1A7F4F485A4F13F0070F5B073F5B4EB55A061F49C8FCBB12F81AE097C9FC19F896CA +FC59527CD165>I<BB12FCA5D8000701F0C7000F7F1800191F190F19071903190119001A +7E1A7F86A386A51B80DD03E0130FA497C7FCA31707A3170F171F173FEE01FF92B6FCA5ED +F001EE003F171F170F1707A31703A794CAFCB3A2B812F0A549527CD153>70 +D<B8D88007B712FCA5D8000701F0C9003FEB8000B3AE92BAFCA503F0C9123FB3B1B8D880 +07B712FCA55E527CD167>72 D<B81280A5D8000701F0C7FCB3B3B3B2B81280A529527DD1 +30>I<B812E0A5D8000F01E0CAFCB3B3A91AF8A419011AF0A51903A31907A2190F1AE019 +1FA2193F197F19FF60180760187F0503B5FCBB12C0A545527CD14F>76 +D<B912FCF0FFE019FE737E1AE0D8000F01E0C7003F7F060313FC06007F737E7313807313 +C07313E0851BF0A21BF885A21BFCA91BF8A3611BF0A21BE04F13C0614F13804F13004F5A +060713F8063F5B92B812C097C7FC19F8198003E0CBFCB3AEB712FEA54E527CD15A>80 +D<B912E018FF19F019FE737ED8000701F0C714E0060F7F060313FC06007F737E737F8587 +737FA28785A287A863A261636361634F90C8FC4F5A4F5A06035B060F13E095B5128092B7 +48C9FC19F019C019F09226F0000713FC050013FF063F7F727F727F727F727FA2727FA284 +86A886A71D707513F8A2851C017301C013F0A273EBE003B86C6D9038F007E0739038FC1F +C0070190B51280736C1400080F5BCE13F85D537CD162>82 D<DA0FFE141C91B500F0133C +010702FC137C011F02FF13FC017F15C19026FFF00113E148903980001FFB4890C7EA07FF +D807FC14014848804848153F171F4848150FA2007F1607491503A2170112FFA217007FA2 +6D167CA27F7F6D93C7FC6C7E14C014F8ECFF806C14F8EDFFC06C15FC6CEDFF8017F06C16 +FC6C826C707E6C836D82011F8201078213016D6C81020781EC007F030380ED003F040314 +801600173F837113C0838312F883A3837EA319807EA26C5E19007F6D4B5A7F6D4B5A01FC +4B5A6D151FD9FFC04A5AD97FF8ECFFE028FE1FFF80075B010790B6C7FCD8FC0115FC486C +6C14F048010F14C0489026007FFCC8FC3A5479D249>I<B700FE4AB612F0A5D8000F01E0 +CA387FC000091FC7FCB3B3B26D611B3E811B7E6D197CA26D6D17FC636D6D1601027F4D5A +6F4C5A023F170F6E6C4C5A6E6D4B5A6E01E003FFC8FC6E01F8EC03FE020001FEEC1FFC92 +3B7FFFE001FFF8031F90B612E00307168003004BC9FC041F14F0040091CAFC5C537CD165 +>85 D<EC3FFE0107B512E0011F14FC017F14FF2701FFC00F13C02703FE00037F486C0100 +7F6E6D7E486D80707EA2707EA3707F6C5B6C90C7FC6C5AC9FCA60307B5FC0203B6FC147F +0103B7FC011FEBF00F017F1300EBFFFC000313F04813C0485B4890C7FC5A5B485AF081F0 +12FF5BA35EA26D5C127F6D5C003F03F713C36DD901E314E06CD9C00714FF00079026F01F +8114C06C90B5C61480C602FC6D1300011F01F0EB3FFC01010180EB07F03C387CB642>97 +D<EB3FF8B5FCA51203C6FCB3A4EE7FF00307B5FC031F14C0037F14F0913AF9FF007FFCDA +FFF8EB1FFF03E001077F03806D7F92C76C7F4A6E7F5C4A6F7E85183F85A38584A31A80AD +1A00A36061A261187F616E15FF616E4A5B6E4A5B6F495BDACFE04990C7FCDA87F0EB3FFE +913A01FE01FFF8496CB65A49013F14C049010749C8FC90C813E041547DD249>I<913803 +FFE0023F13FE91B67E010315E0010F9038003FF8D93FFCEB07FC4948497E4948131F4849 +497E485B485BA24890C7FC5A5B003F6F5A705A705A007F92C8FC5BA312FFAD127F7FA312 +3F7F6CEE0F80A26C6D141F18006C6D5C6C6D143E6C6D147E6C6D5C6D6C495A6DB4EB07F0 +010F9038C01FE06D90B5128001014AC7FCD9003F13F80203138031387CB63A>I<943803 +FF80040FB5FCA5EE003F170FB3A4913803FF80023F13F849B512FE0107ECFF8F011F9038 +C03FEF90273FFE0007B5FCD97FF8130149487F484980484980484980488291C8FC5A5B12 +3FA2127F5BA312FFAD127FA37F123FA3121F7F6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D49 +14E0D97FFCD90FEFEBFF80D91FFFEB7F8F010790B5120F010114FC6D6C13E00207010049 +C7FC41547CD249>I<913807FF80027F13F849B512FE01076E7E011F010313E0903A3FFC +007FF0D97FF06D7E49486D7E4849130F48496D7E48824890C77E1880485A82003F17C0A3 +485A18E082A212FFA290B8FCA401FCCAFCA6127FA37F123FA2EF03E06C7E17076C17C06C +6D140F18806C6D141F6C6DEC3F006C6D147ED97FFC495AD91FFFEB07F86D9038E03FF001 +0390B512C001005D023F01FCC7FC020113E033387CB63C>I<ED1FF8913803FFFE020FEB +FF80023F14C09139FFF83FE001039038E0FFF049138049010113F85BEB3FFEA2EB7FFCA2 +6F13F0495AEE7FE0EE1F8093C7FCAEB712C0A5C601F8C8FCB3B3A7B612FEA52D547CD328 +>I<DA1FFE14FE49B539E007FF80010FDAFC1F13C0013FDAFF7F13E090267FF807EBFF07 +2701FFE001EBF07F48497E484990387FF83F91C7003F14C048EEFC1F489338FE07004902 +1F90C7FCA2003F82A9001F5EA26D143F6C5E6C5E6E137F6C6D495A6C6D485B6CD9F80713 +804890B6C8FCD803EF14FC01C114E02707C01FFEC9FC49CBFCA2487EA37FA27F13FC90B6 +12FE6CEDFFF017FCEFFF806C8318F06C836C837F48B87E1207D80FFCC700037F4848EC00 +3F4848150F48486F138083485A83A56D5D007F18006D5D003F5F6C6C4B5A01FE153FD807 +FFED7FF06C01C049485AC601FC011F1380013FB648C7FC010F15F8010115C0D9000F01F8 +C8FC3B4F7CB542>I<EB3FF8B5FCA51203C6FCB3A4EE1FFC93B57E030314E0030F14F892 +391FC07FFC92397E003FFE03F86D7EECF9F04B6D7FECFBC0ECFF8092C76C7FA25CA25CA4 +5CB3ACB6D8F807B612C0A542537CD249>I<133FEBFFC0487F487FA2487FA66C5BA26C5B +6C5B013FC7FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD324>I<EB3FF8 +B5FCA51203C6FCB3A50407B512F0A59339007FF000EF3FC04D5A4DC7FCEE01FC4C5AEE0F +F04C5A4C5A4CC8FC16FEED03FC4B5A4B5A4B5A4B7E4B7EECF9FF02FB7F91B57EA28203BF +7F031F7F14FE4A6C7FDAF0077F6F7FA26F7F6F7F167F83707F707FA2707F707F707FA270 +7F707F84B6D8F00F14FEA53F537DD245>107 D<EB3FF8B5FCA51203C6FCB3B3B3B1B612 +F8A51D537CD224>I<D93FF0D91FF84AB47EB591B56C010F13F8030302E0013F13FE030F +6E90B6FCDB3F809027F803F80F7F922A7E007FFC07E0077F000302F890283FFE0F80037F +C6D9F1F0011F49487EDAF3E0DAFF3E814B153CDAF7805D92C76C496D7F14FF4A5EA24A5E +A34A5EB3ADB6D8F80FB66CB612F8A565367BB56E>I<D93FF0EB1FFCB591B57E030314E0 +030F14F892391FC07FFC92397E003FFE000302F86D7EC6EBF1F04B6D7FECF3C0ECF78092 +C76C7F14FF5CA25CA45CB3ACB6D8F807B612C0A542367CB549>I<913801FFC0023F13FE +91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF49486D7F48496D7F4849 +6D7F91C8127F4883488349153F001F83A2003F8349151FA2007F83A400FF1880AC007F18 +00A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D495B6C6D495B6D6C4990 +C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F49C8FC020313E039387C +B642>I<D93FF8EB7FF0B50107B5FC031F14C0037F14F09126F9FF0013FCDAFFF8EB3FFF +000302E0010F7FC602806D7F92C76C7F4A824A804A6E7F85187F85A2183F85A4721380AD +4E1300A44E5AA26118FF616E5C616E4A5B6E4A5B6F495B03E04990C7FC6FEB7FFE913AF9 +FE01FFF802F8B65A033F14C0030749C8FC030013E093CAFCB1B612F8A5414D7DB549>I< +90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138F1F83F00019138F07FFC +6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC5CA45CB3ABB612FEA52E +367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315FE3907FE003FD80FF013 +0F4848130348481301491300127F90C8127EA248153EA27FA27F01F091C7FC13FCEBFF80 +6C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F010F15801301D9000F14C0 +EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D143F17807F6DEC7F0001 +F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791C7FC39E0007FF02B387C +B634>I<147CA614FCA41301A31303A21307A2130F131F133F137F13FF1203000F90B512 +FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E806D6D5A6DEBC1F86DEB +FFF001005C023F1380DA03FEC7FC294D7ECB33>I<D93FF8913801FFC0B50207B5FCA500 +03ED001FC61607B3AE5FA35FA25F137F5F6D6C14F7DC01E713F06D6CD907C7EBFFC0903A +0FFF801F876D90B51207010114FC6D6C13F0020701C091C7FC42377CB549>I<B600E090 +381FFFFCA5000101F8C7000113006CEE007C6E15FC017F5E6E1401013F5E8017036D6D5C +17076D5E6F130F6D5E6F131F6D93C7FC815F6D6D133E177E6D157C6F13FC027F5C811601 +DA3FFF5B16036E5C16876E5C16CF6E5C16EF16FF6E91C8FCA26E5BA26E5BA26F5AA36F5A +A26F5AA26F5AA35E151F93C9FC5D153E157ED81FC0137C487E486C13FC486C5B14015D4A +5A14074A5A6C48485A4948CAFC495A383F81FC6CB45A6C5B000313C0C648CBFC3E4D7DB4 +45>121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fe ecss2074 20.74 10 +/Fe 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 +%DVIPSBitmapFont: Ff ecrm0700 7 1 +/Ff 1 66 df<140EA2141FA34A7EA3EC6FC0A2ECEFE014C7A290380183F0A390380301F8 +A201067F1400A249137EA2011C137F01187FA24980013FB5FCA2903960000FC0A201E080 +491307A248486D7EA200038115011207D81FC0497ED8FFF890383FFFE0A22B2A7EA931> +65 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fg ecrm1000 10 78 +/Fg 78 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<030C497EA2031C130303 +1891C7FCA303385B03301306A30370130E0360130CA303E0131C4B1318A3020114384B13 +30A30203147092C71260A34A14E0007FB91280BA12C0C7270C000180C7FCA2021C130302 +1891C8FCA402385B02301306A50270130E0260130CA2BA12C06C1880280001C00038C8FC +4A1330A30103147091C71260A34914E001065CA3010E1301010C5CA3011C1303011891C9 +FCA301385B01301306A30170130E0160130CA23A4A7BB945>I<EB0380A3EB0FF0EB7FFE +48B512803903F38FC03907C381E0390F8380F0D81F031338123E003C141C007C140C150E +0078143E00F814FE1481A400FCEB80FC157800FE140012FF127F13C313E3EA3FFF6C7F14 +F86C13FE6CEBFF80000114C06C14E0013F13F01303ECBFF8148FEC83FC1481A2EC80FE15 +7E123C12FF153EA412FE00F8143C00E0147C12600070147815F8003814F0003C1381001E +EB83E0000FEB87C03907E39F803901FFFE006C5BEB1FE0EB0380A41F437BBD2A>I<121C +127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A +1979B917>39 D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA21207 +5B120F90C7FCA25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203 +A26C7EA26C7E1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12 +707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB +07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A48 +5AA2485A48C7FC120E5A5A5A5A5A13527CBD20>I<EB0380497EA7397803803C00FC147E +00FE14FE397F8383FC393FC387F8390FE38FE03903FBBF803900FFFE00EB3FF8EB0FE0A2 +EB3FF8EBFFFE3903FBBF80390FE38FE0393FC387F8397F8383FC39FE0380FE00FC147E00 +78143C390007C000A76D5A1F247BBD2A>I<121C127FEAFF80A213C0A3127F121C1200A4 +12011380A2120313005A1206120E5A5A5A12600A19798817>44 D<B512FCA516057F941C +>I<121C127FEAFF80A5EA7F00121C0909798817>I<1506A2150E150CA2151C1518153815 +30A215701560A215E015C0A214011580A2140315005C1406A2140E140CA2141C1418A214 +381430A21470146014E05CA213015CA2130391C7FCA25B1306A2130E130C131C1318A213 +381330A213701360A213E05BA212015B120390C8FCA25A1206A2120E120CA2121C1218A2 +1238123012701260A212E05AA21F537BBD2A>I<EB03F8EB1FFF90387E0FC09038F803E0 +3901E000F0484813780007147C48487FA248C77EA2481580A3007EEC0FC0A500FE15E0B3 +007E15C0A4007F141F6C1580A36C1500A26C6C133EA26C6C5B6C6C5BEBF0013900F803E0 +90387E0FC0D91FFFC7FCEB03F823397DB62A>I<EB01C013031307131F13FFB5FCA2131F +1200B3B3A7497E007FB512F0A31C3779B62A>I<EB0FF0EB7FFE48B57E3903E03FE0390F +000FF0001E6D7E001C6D7E486D7E5A6E7E126012FE6CEC7F807FA56CC7FC121CC8FCEDFF +00A25D14015D14035D4A5A4A5A5D4A5A4AC7FC147E5C495A14E0495A495A49C8FC011EEB +01805B5B49130348481400485A485A90C75A48B6FC5A5A485CB6FCA321377CB62A>I<EB +07F8EB3FFF90B512C03901F80FF03903C007F848486C7E390E0001FEEA0F80391FE000FF +7FA56C5A6C5AC7485AA25D14035D4A5A5DEC0F80027FC7FCEB1FFCECFF809038000FE06E +7EEC01FC816E7EED7F80A216C0A2153F16E0A2121EEA7F80A2487EA316C0157F49148000 +7EC7FC0070ECFF006C495A121E390F8003F83907F00FF00001B512C06C6C90C7FCEB0FF8 +23397DB62A>I<1538A2157815F8A2140114031407A2140F141F141B14331473146314C3 +13011483EB030313071306130C131C131813301370136013C01201EA038013005A120E12 +0C5A123812305A12E0B712F8A3C73803F800AA4A7E0103B512F8A325387EB72A>I<0006 +140CD80780133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB +1FFE9038780F809038E007E03907C003F0496C7E130000066D7E81C8FC8181A21680A412 +1C127F5A7FA390C713005D12FC00605C12704A5A6C5C6C1303001E495A6C6C485A3907E0 +3F800001B5C7FC38007FFCEB1FE021397CB62A>I<EC3FC0903801FFF0010713FC90380F +E03E90383F800790387E001F49EB3F804848137F485A12075B000FEC3F0049131E001F91 +C7FC5B123FA3127F90C9FCEB01FC903807FF8039FF1E07E090383801F0496C7E01607F01 +E0137E497F16805BED1FC0A390C713E0A57EA47F123F16C0A2001FEC3F807F000F15006D +5B000714FE6C6C5B6C6C485A3900FE07F090387FFFC0011F90C7FCEB03FC23397DB62A> +I<12301238123E003FB612E0A316C05A168016000070C712060060140E5D5D00E0143048 +14705D5DC712014A5A4AC7FC1406140E5CA25C1478147014F05C1301A213035C1307A213 +0FA3131F5CA2133FA5137FA96DC8FC131E233A7BB72A>I<EB03F8EB1FFF017F13C09038 +FC07F03901E001F83903C0007C4848133C90C7123E48141E000E141F001E80A3121FA26D +5B6D131E7FD80FF85B6D137C01FF13786C6D5A6CEBE3E0ECF780C601FFC7FC6D5A6D6C7E +010F13E0013F7F01F97F3901E07FFE48486C7E380F800F48486C1380001E010113C0487F +007C143F0078EC1FE0150F00F81407481403A21501A36C15C0A200781403007C15806C14 +076CEC0F006C6C131ED807E0137C3903F803F0C6B55A013F1380D907FCC7FC23397DB62A +>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317> +58 D<EC03FF021F13E09138FC00FCD901E0131ED90780EB0780011EC7EA01E00138EC00 +704981498148488148488190C97E48D901FC1480000ED907FFEB01C0000C90391F03C000 +001C90267E00E013E000184901701360263801F86D13700030496D13300103EC0FE02670 +07E00107133800601718495AA200E0171C484848150CAA6C6C7E1260A26D6C151C007017 +18263003F0130F0101141F00386D013F1338261800FC01771330001C017E9038E3F07000 +0C90261F03C113E0000E903A07FF00FFC06CD901FCEB3F006C90CAFC7F6C7E6C7E13706D +167C011EED03FCD90780EC1FF0D901E0ECFF80D900FC90383FFC00021FB51280020301E0 +C7FC363C7BBA41>64 D<1538A3157CA315FEA34A7EA34A6C7EA202077FEC063FA2020E7F +EC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F1501A2D901807F81 +A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E7EA3496E7EA213 +E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>I<B712E016FC16FF +0001903980007FC06C90C7EA1FE0707E707E707EA2707EA283A75F16035F4C5A4C5A4C5A +4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E707E83707EA21880177F18 +C0A7188017FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C094C7FC16F832397DB83B +>I<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03FC000F0FD90FF0EB +039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F4848150FA248481507 +A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F001F16031800 +6C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D6CEB03C0D903 +FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA3C>I<B712C0 +16F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E707E177FA2EF3F8018C0 +171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2171F18C0EF3F80A2EF7F +0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036397DB83F>I<B812FEA3 +000190388000076C90C8FC173F838383A383A31880170116C0A394C7FCA31501A2150315 +0F91B5FCA3EC000F15031501A21500A21860A318E093C712C0A41701A3EF0380A21707A2 +170F173F177F486D903807FF00B9FCA333397EB838>I<B812F8A30001903880001F6C90 +C71201EE00FC177C173C171CA2170CA4170E1706A2ED0180A21700A41503A21507151F91 +B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612C0A32F397DB836>I<DBFF8013 +C0020FEBF001023F13FC9139FF803F03903A03FC000787D90FF0EB03CF4948EB00EF4948 +147F4948143F49C8121F485A4848150F48481507A248481503A2485A1701123F5B007F16 +00A448481600AB93B6FCA26C7E9338007FE0EF3FC0A2123F7F121FA26C7EA26C7EA26C7E +6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03C7D903FEEB0783903A00FFC03F0191 +393FFFFC00020F01F0130002001380383D7CBA41>I<B648B512FEA30001902680000313 +006C90C76C5AB3A491B6FCA391C71201B3A6486D497EB648B512FEA337397DB83E>I<B6 +12C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>I<013FB512E0A39039001FFC +00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070131F6C5C6C495A6C49C7 +FC380781FC3801FFF038007F80233B7DB82B>I<B612E0A3000101C0C8FC6C90C9FCB3AD +1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB834> +76 D<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563 +A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A2 +6E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8C +A2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED01804539 +7DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7 +FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC016 +E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0F +FEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA2170637397D +B83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80EB +07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F17 +E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A26C +6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C +495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC36 +3D7BBA41>I<B712C016FC16FF0001D9800013C06C90C7EA1FE0707EEE03F883707EA270 +7EA21880A71800A24C5AA24C5A5FEE0FF04C5AEEFF8091B548C7FC16F091CAFCB3A5487F +B6FCA331397EB838>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F804948 +6D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F0007178049153F000F17C0 +49151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF17FCAC007F17F8A26D150F +A2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4FC3C03F80383807F003B01 +FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77F0D91FCCEB3FE0D907EE14 +806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E131C161F183CEF807CEFC0F8 +EE0FFFA318F08218E07013C07013809338007E00364B7BBA41>I<B612FEEDFFE016F800 +0190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283A65FA24C5AA24C5A4C5AEE +3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE82707E707EA2161F83A583 +A6F00180A217F8160F1803486D01071400B66D6C5A04011306933800FE0ECAEA3FFCEF07 +F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F807E33907E000F74848137F +4848133F48C7121F003E140F007E1407A2007C140312FC1501A36C1400A37E6D14006C7E +7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F1480010714C0EB007F0207 +13E0EC007FED3FF0151F150FED07F8A200C01403A21501A37EA216F07E15036C15E06C14 +076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFFF8010F13E0D8C00190C7 +FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000 +701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397D +B83C>I<B6903807FFFEA3000101809038007FE06C90C8EA1F80EF0F001706B3B2170E6D +150C80171C133F17186D6C14385F6D6C14F06D6C5C6D6C495A6D6CEB07806D6C49C7FC91 +387F807E91381FFFF8020713E09138007F80373B7DB83E>I<B500FC91387FFF80A30003 +018091380FFC006C90C8EA07E0715A6C705A6E1403017F93C7FCA280013F1506A26E140E +011F150C80010F5DA28001075DA26E147001031560A26D6C5CA2806D4A5AA2ED8003027F +91C8FCA291383FC006A215E0021F5BA2EDF01C020F1318A26E6C5AA215FC02035BA2EDFE +E002015BA26E6C5AA36FC9FCA3153EA2151CA3393B7EB83E>I<007FB590383FFFFCA3C6 +01F801071380D97FE0D903FCC7FC013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C13 +06160E6D6C5B6DEB8018163891387FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC +5D14036E7EA26E7F6F7EA24B7E15DF9138019FF09138038FF8150F91380607FC91380E03 +FE140C4A6C7EEC38000230804A6D7E14E04A6D7E49486D7E130391C76C7E01066E7E130E +010C6E7E011C1401013C8101FE822607FF80010713E0B500E0013FEBFF80A339397EB83E +>88 D<B500FE91383FFFE0A3000301E0913807FE00C649EC03F0017F6F5A606D6C5D6D6C +140395C7FC6D6C1406A26D6C5C6D6C141C17186D6C143817306D6D5B6E6C13E05F91383F +E0015F91381FF003DA0FF890C8FC1606913807FC0E160C913803FE1C913801FF185E6E13 +B016E0157F6F5AB3A24B7E023FB512C0A33B397FB83E>I<003FB7FCA39039FC0001FE01 +C0130349495A003EC7FC003C4A5A5E0038141F00784A5A12704B5A5E006014FF4A90C7FC +A24A5A5DC712074A5AA24A5A5D143F4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB01 +80A2495A5C137F495A16034890C7FC5B1203485AEE0700485A495C001F5D48485C5E4848 +495A49130FB8FCA329397BB833>I<007FB81280B912C0A26C17803204797041>95 +D<EB1FE0EBFFFC3803E03F3907000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A6C5A +C8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FEA314 +01A26C13036CEB077C903980063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F8007 +C026277DA52A>97 D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3801F +809039F7000FC001FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA167E16 +FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E9038 +00FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF8090387E03E03901F80070484813F8 +3907E001FC380FC003A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E127F +A26C14067F001F140E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090381F +FF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F +9038F801EF3903F0007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FEAA12 +7E127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F90 +381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001 +F0D807E013F8380FC0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA5 +127EA2127FA26C14037F001F14076C6C13060007140E6D131CD801F013386C6C13709038 +7E03E090381FFF80903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F8790 +383F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8 +A31C3B7FBA19>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903 +E007C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D +48C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815 +C03A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0 +003F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A +>I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0EBF7 +0013FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA0FE0 +487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717>I< +EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A2123C12 +7E00FF13F01303A214E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA03F0 +12FFA3120F1203B1913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC141E14 +38147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E157F +811680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203B3B3 +AD487EB512C0A3123A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E0 +7E903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2 +495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000 +FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C +497EB500C1B51280A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F84848 +137C48487F48487F4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15F8A9 +007E15F0A2007F14076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137EC66C +13F890387E03F090381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF89038 +F1E07E9039F3801F803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016 +FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F0090 +38F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>I<D903F813C09038 +1FFE0190387E07819038FC01C33903F000E3000714774848133749133F001F141F485A15 +0F48C7FCA312FEAA127FA37E6D131F121F6D133F120F6C6C137F6C6C13EF3901F801CF39 +007E078F90381FFE0FEB07F890C7FCABED1FE00203B5FCA328357DA42C>I<3807E01F00 +FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300 +A45BB3A2487EB512F0A31C257EA421>I<EBFF03000313E7380F80FF381E003F487F487F +00707F12F0A2807EA27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F01071380 +EB007F141F00C0EB0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C38E1 +FFF038C03F801A277DA521>I<1318A51338A31378A313F8120112031207001FB5FCB6FC +A2D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220 +>I<D803F0EB07E000FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D133F00 +00EC77F86D9038E7FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<B538 +803FFEA33A0FF8000FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D130E +017E130CA26D5BA2EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901FBC7 +FCA214FF6D5AA2147CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038000F +F86C48017EEB03E018C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2017E +9038EFC00C15C7171CD93F01EBE01815830281EBF038D91F831430150102C3EBF8709026 +0FC6001360A2D907E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100 +141E4A130E0260130C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092 +C7FC017E131C6D13186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F +804A7E8114CF903801C7E090380383F090380703F8EB0601496C7E011C137E49137F0178 +7F496D7E486C80000FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8 +000FF06C48EB07C00003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2 +ECC070010F1360A26D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A214 +30A214701460A25CA2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC0 +27357EA32C>I<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB +1FC0EC3F800060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FE +A2485A485A0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F +247EA325>I E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + +%%EndSetup +%%Page: 1 1 +1 0 bop 0 162 a Fg(11)17 b(11)h(T)249 180 y(E)295 162 +y(X)h(L)398 145 y Ff(A)435 162 y Fg(T)481 180 y(E)527 +162 y(X)0 353 y Fe(Using)54 b(Libical)p 0 467 3900 24 +v 0 580 a Fg(Eric)28 b(Busb)r(o)r(om)f(\(eric@soft)n(w)n +(arestudio.org\))1921 b(Jan)n(uary)25 b(2000)0 1217 y +Fd(1)131 b(In)l(tro)t(duction)0 1456 y Fg(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 1570 y(sp)r(eci\034cation)k(describ)r(es)g(ho)n +(w)f(calendar)g(clien)n(ts)i(can)f(comm)n(unicate)f(with)i(calendar)e +(serv)n(ers)f(for)i(users)g(can)g(store)f(their)0 1683 +y(calendar)g(data)h(and)h(arrange)d(meetings)i(with)h(other)f(users.)0 +1840 y(Libical)g(implemen)n(ts)h(the)g(follo)n(wing)e(sp)r +(eci\034cations)h(and)h(proto)r(cols)0 1996 y(iCal)f(Core)g(2445)e +(iTIP)k(2446)c(iMIP)j(2447)e(iRIP)i(draft)g(CAP)g(draft)0 +2153 y(\(The)g(curren)n(t)f(v)n(ersion,)f(0.15,)g(do)r(es)h(not)h +(implemen)n(t)g(iRip)g(or)e(CAP)-7 b(.)29 b(\))0 2309 +y(This)j(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 2423 y(these)c(sp)r(eci\034cations)e(are)h(online)g(on)h +(the)g(CALSCH)g(w)n(ebpage)e(at:)p 0 2475 3900 4 v 0 +2617 a Fc(http://www.imc.o)o(rg)o(/ie)o(tf)o(-c)o(ale)o(nd)o(ar)o(/)p +0 2776 V 0 2996 a Fb(1.1)112 b(The)38 b(libical)c(pro)6 +b(ject)0 3207 y Fg(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 3320 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)332 3518 y(h)n(ttp://soft)n(w)n(arestudio.org/libical/index.h)n +(tml)0 3716 y(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:)p 0 3769 +V 0 3904 a Fc(To:)42 b(minimalist@softwa)o(re)o(st)o(udi)o(o.)o(or)o(g) +0 4017 y(Subject:)e(subscribe)g(libical)p 0 4176 V 0 +4396 a Fb(1.2)112 b(License)0 4607 y Fg(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 4720 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 4834 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 4947 y(for)27 b(a)g(cop)n(y)g(of)g(the)h(LGPL.) +0 5104 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 5217 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 +5331 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 5615 y Fb(1.3)112 +b(Purp)s(ose)38 b(&)f(Goals)0 5844 y(1.4)112 b(Do)s(cumen)m(t)37 +b(v)m(ersion)0 6054 y Fg($Id:)g(UsingLibical.lyx,v)26 +b(1.4)h(2000/02/18)22 b(23:06:04)j(eric)i(Exp)h(eric)f($)0 +6386 y Fd(2)131 b(Building)46 b(the)e(Library)0 6624 +y Fg(Libical)37 b(uses)g(auto)r(conf)h(to)f(generate)f(mak)n(e\034les,) +k(although)c(it)i(uses)g(none)f(of)h(the)g(auto)r(conf)f(\035ags)f(to)i +(in\035uence)g(the)0 6738 y(compilation.)e(It)28 b(should)f(built)i +(with)f(no)f(adjustmen)n(ts)h(on)f(Lin)n(ux,)g(F)-7 b(reeBSD)28 +b(and)f(Solaris.)0 7069 y Fd(3)131 b(Structure)0 7308 +y Fg(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 +7464 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 7578 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 +7691 y(line)p 0 7728 V 0 7863 a 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)p eop +%%Page: 2 2 +2 1 bop 0 -167 3900 5 v 0 -200 a Fa(4.)73 b(Di\033erences)31 +b(F)-8 b(rom)31 b(RF)m(Cs)2732 b Fg(2)p 0 162 3900 4 +v 0 312 a(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 425 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 582 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 695 y(timezones.)0 852 y(The)k(cen)n(tral)f(goal)g(of)h +(libical)g(is)g(to)g(parse)f(iTIP)i(data)e(in)n(to)h(an)g(in)n(ternal)f +(represen)n(tation)g(of)h(Comp)r(onen)n(ts,)g(Prop)r(erties,)0 +965 y(P)n(arameters)d(an)h(V)-7 b(alues,)27 b(and)h(to)f(allo)n(w)g +(the)h(user)f(to)g(manipulate)g(the)h(data)g(in)f(v)-5 +b(arious)27 b(w)n(a)n(ys)0 1257 y Fb(3.1)112 b(Comp)s(onen)m(ts)0 +1486 y(3.2)g(Prop)s(erties)0 1715 y(3.3)g(V)-9 b(alues)0 +1944 y(3.4)112 b(P)m(arameters)0 2173 y(3.5)g(En)m(umerations)0 +2402 y(3.6)g(T)m(yp)s(es)0 2631 y(3.7)g(The)38 b(P)m(arser)0 +2860 y(3.8)112 b(Restrictions)0 3089 y(3.9)g(Memory)37 +b(Managemen)m(t)0 3356 y Fd(4)131 b(Di\033erences)44 +b(F)-11 b(rom)43 b(RF)l(Cs)0 3594 y Fg(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 3708 y(standards)30 b(are)g(also)g(k)n(eey)g(ob)5 +b(jects)31 b(in)h(the)f(library)-7 b(.)47 b(Ho)n(w)n(ev)n(er,)30 +b(there)h(are)f(a)h(few)g(areas)e(where)i(the)h(sp)r(eci\034cations)e +(are)0 3821 y(\(arguably\))g(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 3935 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 +4227 y Fb(4.1)112 b(Pseudo)38 b(Comp)s(onen)m(ts)0 4437 +y Fg(Libical)g(de\034nes)g(comp)r(onen)n(ts)g(for)g(groups)f(of)i(prop) +r(erties)e(that)i(lo)r(ok)e(and)i(act)f(lik)n(e)g(comp)r(onen)n(ts,)i +(but)f(are)f(not)g(de-)0 4550 y(\034ned)c(as)f(comp)r(onen)n(ts)g(in)h +(the)g(sp)r(eci\034cation.)54 b(XD)n(A)-7 b(YLIGHT)35 +b(and)e(XST)-7 b(AND)n(ARD)36 b(are)c(notable)h(examples.)54 +b(These)0 4664 y(pseudo)23 b(comp)r(onen)n(ts)g(group)g(prop)r(erties)g +(within)h(the)g(VTIMEZONE)h(comp)r(onen)n(ts.)35 b(XD)n(A)-7 +b(YLIGHT)25 b(starts)d(with)j("BE-)0 4777 y(GIN:D)n(A)-7 +b(YLIGHT")35 b(and)f(ends)g(with)g("END:D)n(A)-7 b(YLIGHT,)36 +b(just)e(lik)n(e)g(other)f(comp)r(onen)n(ts,)i(but)g(is)f(not)g +(de\034ned)g(as)f(a)0 4891 y(comp)r(onen)n(t)27 b(in)h(RF)n(C2445.)35 +b(\()28 b(See)f(RF)n(C2445,)f(page)h(61)f(\))i(In)g(Libical,)f(it)h(is) +g(a)f(comp)r(onen)n(t.)0 5047 y(There)35 b(are)g(also)g(pseudo)h(comp)r +(onen)n(ts)f(that)i(are)e(conceptually)g(deriv)n(ed)g(classess)f(of)i +(V)-9 b(ALARM.)37 b(RF)n(C2446)d(de\034nes)0 5161 y(what)d(prop)r +(erties)f(ma)n(y)g(b)r(e)h(included)g(in)g(eac)n(h)f(comp)r(onen)n(t,)i +(and)e(for)h(V)-9 b(ALARM,)31 b(the)g(set)g(of)g(prop)r(erties)f(it)h +(ma)n(y)f(ha)n(v)n(e)0 5275 y(dep)r(ends)e(on)f(the)h(v)-5 +b(alue)28 b(of)f(the)h(A)n(CTION)f(prop)r(ert)n(y)-7 +b(.)0 5431 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 +5545 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 5658 y(ha)n(v)n(e)26 b(a)i(DESCRIPTION)g(prop)r(ert)n +(y)-7 b(.)p eop +%%Page: 3 3 +3 2 bop 0 -167 3900 5 v 0 -200 a Fa(5.)73 b(Implemen)m(tation)29 +b(Limitations)2539 b Fg(3)0 162 y(T)-7 b(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 275 y(DIO)n(ALARM,)28 b(XDISPLA)-7 b(Y)g(ALARM,)30 +b(XEMAILALARM)f(and)f(XPR)n(OCEDUREALARM.)0 567 y Fb(4.2)112 +b(Com)m(bined)37 b(V)-9 b(alues)0 777 y Fg(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 890 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 1004 y(asso)r(ciated)26 +b(with)i(a)f(prop)r(ert)n(y)-7 b(.)0 1161 y(It)30 b(is)g(natural)g(to)f +(ha)n(v)n(e)g(in)n(terfaces)g(that)i(w)n(ould)e(return)h(the)g(v)-5 +b(alue)30 b(of)g(a)g(prop)r(ert)n(y)-7 b(,)29 b(but)i(it)f(is)g(cum)n +(b)r(ersone)f(for)h(a)g(single)0 1274 y(routine)i(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 1388 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 1501 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 +1793 y Fb(4.3)112 b(Multi-V)-9 b(alued)36 b(Prop)s(erties)0 +2003 y Fg(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 2116 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 +2230 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 +2344 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 +2457 y(That)c(is,)f(an)g(input)i(line)e(lik)n(e,)p 0 +2526 3900 4 v 0 2703 a Fc(CATEGORIES:)39 b(work,)i(home)p +0 2903 V 0 3053 a Fg(b)r(ecomes)27 b(in)h(libical's)f(in)n(ternal)g +(represen)n(tation)p 0 3122 V 0 3299 a Fc(CATEGORIES:)39 +b(work)0 3412 y(CATEGORIES:)g(home)p 0 3612 V 0 3767 +a Fg(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 3881 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 3994 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 4108 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 4446 y Fd(5)131 b(Implemen)l(tation)44 b(Limitations)0 +4742 y(6)131 b(Using)44 b(libical)0 4999 y Fb(6.1)112 +b(Creating)37 b(Comp)s(onen)m(ts)0 5209 y Fg(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 5323 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.)p +eop +%%Page: 4 4 +4 3 bop 0 -167 3900 5 v 0 -200 a Fa(6.)73 b(Using)32 +b(libical)3190 b Fg(4)0 162 y Fa(6.1.1)94 b(Constructor)32 +b(In)m(terfaces)0 372 y Fg(Using)d(constructor)f(in)n(terfaces,)h(y)n +(ou)f(create)h(eac)n(h)f(of)i(the)f(ob)5 b(jects)29 b(sep)r(erately)g +(and)g(them)h(assem)n(ble)e(them)i(in)g(to)f(com-)0 485 +y(p)r(onen)n(ts:)p 0 555 3900 4 v 0 738 a Fc(event)41 +b(=)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 852 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o +(nt)o(,)38 b(icalproperty_ne)o(w_)o(dts)o(ta)o(mp)o(\(at)o(im)o(e\))f +(\);)0 965 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o +(,ic)o(al)o(pr)o(ope)o(rt)o(y_)o(new)o(_u)o(id\()o(st)o(rd)o(up\()o("g) +o(ui)o(d-1)o(.h)o(os)o(t1.)o(co)o(m")o(\)\))g(\);)0 1079 +y(property=icalpro)o(pe)o(rty)o(_n)o(ew)o(_or)o(ga)o(ni)o(zer)o(\(s)o +(tr)o(dup)o(\(")o(mr)o(big)o(@h)o(ost)o(.c)o(om)o("\)\))o(;)0 +1192 y(icalproperty_add)o(_p)o(ara)o(me)o(te)o(r\(p)o(ro)o(pe)o(rty)o +(,i)o(ca)o(lpa)o(ra)o(me)o(ter)o(_n)o(ew_)o(ro)o(le)o(\(IC)o(AL)o(_R)o +(OLE)o(_C)o(HA)o(IR\))g(\);)0 1306 y(icalcomponent_ad)o(d_)o(pro)o(pe)o +(rt)o(y\(e)o(ve)o(nt)o(,pr)o(op)o(er)o(ty\))o(;)p 0 1506 +V 0 1722 a Fa(6.1.2)94 b(v)-5 b(aargs)32 b(Constructors)0 +1932 y(6.1.3)94 b(P)m(arsing)32 b(T)-8 b(ext)32 b(Files)0 +2161 y Fb(6.2)112 b(A)m(ccessing)37 b(Comp)s(onen)m(ts)0 +2371 y Fa(6.2.1)94 b(Finding)30 b(Comp)s(onen)m(ts)0 +2582 y(6.2.2)94 b(Remo)m(ving)29 b(Comp)s(onen)m(ts)0 +2792 y Fg(Remo)n(ving)23 b(an)h(elemen)n(t)h(from)f(a)g(list)g(while)h +(iterating)e(through)h(the)h(list)f(can)g(cause)g(problems,)g(since)g +(y)n(ou)g(will)g(probably)0 2905 y(b)r(e)e(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)i(to.)34 +b(This)22 b(will)g(result)f(in)h(the)g(iteration)f(lo)r(op)h +(terminating)0 3019 y(immediately)29 b(after)f(remo)n(ving)g(the)h +(elemen)n(t.)41 b(T)-7 b(o)28 b(a)n(v)n(oid)g(the)h(problem,)f(y)n(ou)h +(will)g(need)g(to)f(step)h(the)h(iterator)d(ahead)h(of)0 +3132 y(the)g(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:)p 0 3202 V 0 3385 a 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 +3499 y(c)f(!=)g(0;)305 3612 y(c)g(=)g(next)0 3726 y({)174 +3839 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 3953 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 4067 y(})p +0 4267 V eop +%%Page: 5 5 +5 4 bop 0 -167 3900 5 v 0 -200 a Fa(6.)73 b(Using)32 +b(libical)3190 b Fg(5)0 162 y Fa(6.2.3)94 b(Finding)30 +b(Prop)s(erties)0 372 y(6.2.4)94 b(Remo)m(ving)29 b(Prop)s(erties)0 +582 y(6.2.5)94 b(Getting)31 b(V)-8 b(alues)0 792 y(6.2.6)94 +b(Setting)31 b(V)-8 b(alues)0 1002 y(6.2.7)94 b(Getting)31 +b(P)m(arameters)0 1212 y(6.2.8)94 b(Setting)31 b(P)m(arameters)0 +1422 y(6.2.9)94 b(Remo)m(ving)29 b(P)m(arameters)0 1632 +y(6.2.10)93 b(Chec)m(king)32 b(Comp)s(onen)m(t)e(V)-8 +b(alidit)m(y)0 1861 y Fb(6.3)112 b(Storing)37 b(Ob)6 +b(jects)0 2071 y Fg(The)27 b(libical)g(distribution)h(inclues)f(a)g +(sep)r(erate)f(library)-7 b(,)26 b(libicalss,)h(that)g(allo)n(ws)f(y)n +(ou)g(to)i(store)e(iCal)h(comp)r(onen)n(t)g(data)f(to)0 +2185 y(disk)h(in)h(a)f(v)-5 b(ariet)n(y)27 b(of)h(w)n(a)n(ys.)35 +b(This)27 b(library)g(is)g(do)r(cumen)n(ted)h(sep)r(erately)-7 +b(.)0 2476 y Fb(6.4)112 b(Memory)37 b(Managemen)m(t)0 +2686 y Fg(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 2800 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 2914 y(library)-7 +b(.)36 b(Here)27 b(is)g(a)g(summary)g(of)h(the)g(memory)e(rules.)0 +3153 y Fa(1\))208 3300 y Fg(If)k(the)g(function)g(name)g(has)f +Fc(")p Fg(new)p Fc(")g Fg(in)h(it,)h(the)f(caller)f(gets)g(con)n(trol)g +(of)h(the)g(memory)-7 b(.)42 b(\()31 b(suc)n(h)e(as)g(icalcomp)r(onen-) +208 3413 y(t_new\(\),)f(or)e(icalprop)r(ert)n(y_new_clone\(\))f(\))0 +3593 y Fa(2\))208 3740 y Fg(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 3854 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 4034 y Fa(3\))208 4181 y Fg(If)h(the)g(function)g(name)f +(has)g Fc(")p Fg(add)p Fc(")g Fg(in)h(it,)g(the)g(caller)e(is)i +(transfering)e(con)n(trol)g(of)i(the)g(memory)f(to)g(the)h(routine.)40 +b(\()208 4294 y(icalprop)r(ert)n(y_add_parameter\(\))23 +b(\))0 4474 y Fa(4\))208 4621 y Fg(If)29 b(the)h(function)g(name)f(has) +g Fc(")p Fg(remo)n(v)n(e)p Fc(")e Fg(in)j(it,)g(the)g(caller)f(passes)f +(in)i(a)f(p)r(oin)n(ter)g(to)g(an)g(ob)5 b(ject)29 b(and)h(after)f(the) +g(call)208 4735 y(returns,)j(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 4848 +y(y)n(ou)26 b(do)i(not)f(o)n(wn)g Fc(")p Fg(fo)r(o)p +Fc(")g Fg(and)g(after)g(the)h(call)f(returns,)g(y)n(ou)g(do.)0 +5028 y Fa(5\))208 5175 y Fg(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 5288 y(Y)-7 +b(ou'd)27 b(b)r(etter)h(strdup\(\))g(it)g(if)g(y)n(ou)f(w)n(an)n(t)g +(to)h(k)n(eep)f(it,)h(and)f(y)n(ou)g(don't)h(ha)n(v)n(e)e(to)h(delete)h +(it.)0 5580 y Fb(6.5)112 b(Error)36 b(Handling)0 5790 +y Fg(icalerror_errno.)c(Return)c(v)-5 b(alues.)37 b(#de\034nes.)g +(icalerror_stop_here)p eop +%%Page: 6 6 +6 5 bop 0 -167 3900 5 v 0 -200 a Fa(7.)73 b(Useful)32 +b(Recipies)3067 b Fg(6)0 162 y Fa(6.5.1)94 b(Return)31 +b(v)-5 b(alues)0 372 y(6.5.2)94 b(icalerrno)0 582 y(6.5.3)g(Comp)s +(onen)m(t)29 b(errors)0 811 y Fb(6.6)112 b(Naming)36 +b(Standard)0 1021 y Fg(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 1134 +y(allo)n(w)n(ed)g(to)i(see)f(inside)g(and)h(p)r(ok)n(e)f(at.)0 +1291 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 1405 y(hidden.)0 1561 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 1675 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 1788 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 1902 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 2058 y(En)n(ums)d(that)f(iden)n(tify)h(a)f(comp)r(onen)n +(t,)h(prop)r(ert)n(y)-7 b(,)24 b(v)-5 b(alue)24 b(or)g(parameter)e(end) +j(with)g("_COMPONENT,")e("_PR)n(OPER-)0 2172 y(TY,")k("_V)-9 +b(ALUE,")28 b(or)e("_P)-7 b(AAMETER"s)0 2328 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 2442 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 2598 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.)0 +2937 y Fd(7)131 b(Useful)44 b(Recipies)0 3175 y Fg(Iteration)0 +3332 y(Cop)n(ying)26 b(comp)r(onen)n(ts.)37 b(Remem)n(b)r(er)27 +b(that)h(y)n(ou)f(m)n(ust)g(clone)g(or)g(remo)n(v)n(e)f(an)h(ob)5 +b(ject)28 b(b)r(efore)f(putting)h(in)g(on)f(anothr)g(list.)0 +3488 y(Finding)h(compliance)f(errors)0 3827 y Fd(8)131 +b(P)l(erformance)0 4065 y Fg(Chec)n(king)27 b(restrictions)f(is)h +(computationally)g(exp)r(ensiv)n(e)0 4404 y Fd(9)131 +b(Hac)l(ks)45 b(and)e(Bugs)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/libical/doc/UsingLibical.sgml b/libical/doc/UsingLibical.sgml new file mode 100644 index 0000000000..d967bd860c --- /dev/null +++ b/libical/doc/UsingLibical.sgml @@ -0,0 +1,318 @@ +<!doctype linuxdoc system> + +<!-- LinuxDoc file was created by LyX 1.0 (C) 1995-1999 by <eric> Wed Jan 5 22:30:06 2000 + --> + <article> + <title> +Using Libical + </title> + <author> +Eric Busboom (eric@softwarestudio.org) + </author> + <date> +January 2000 + </date> + <sect> +Introduction + <p> +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 for users can store their calendar data + and arrange meetings with other users. + </p> + <p> +Libical implements the following specifications and protocols + </p> + <p> +iCal Core +2445 +iTIP +2446 +iMIP +2447 +iRIP +draft +CAP +draft + </p> + <p> +(The current version, 0.14, does not implement iRip or CAP. ) + </p> + <p> +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 + </p> + <p> + <quote> +http://softwarestudio.org/libical/index.html + </quote> +</p> <p> +and a mailing list that you can join by sending the following mail: + </p> + <p> + <code> +------------ +To: minimalist@softwarestudio.org +Subject: subscribe libical +------------ + </code> +</p> <p> +$Id: UsingLibical.lyx,v 1.3 2000/01/06 06:20:06 eric Exp eric $ + </p> + <sect1> +License + <p> +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. + </p> + <p> +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. + </p> + <sect1> +Purpose & Goals + <sect> +Building the Library + <sect> +Structure + <p> +The iCal calendar model is based on four types of objects: components, + properties, values and parameters. + </p> + <p> +Components are the fundamental grouping of calendar information + </p> + <p> +Properties are the fundamental unit of information. Each property is composed + of a type, a value and collection of parameters. + </p> + <sect1> +Components + <p> +Components are named clusters of properties + </p> + <sect1> +Properties + <sect1> +Values + <sect1> +Parameters + <sect1> +Storage + <sect2> +Cluster + <sect2> +Store + <sect2> +Calendar + <sect1> +Other bits + <p> +Restrictions + </p> + <p> +Types + </p> + <sect> +Differences From RFCs + <p> +Although libical has been design to follow the standards as closely as + possible, there are a few areas where the specifications are irregular, and + following them exactly would result in an unfriendly interface. + </p> + <sect1> +Pseudo Components + <p> +Libical defines pseudo 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. XDAYLIGHT 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, it is a component. + + </p> + <p> +There are also pseudo componentsthat are conceptually derived classess + 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. + </p> + <p> +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. + </p> + <p> +To handle these various, complex restrictions, libical has pseudo components + for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREALARM. + + </p> + <sect1> +Combined Values + <p> +Many values can take more than one type. TRIGGER, for instance, can have + a value type of with DURATION or of DATE-TIME. It is natural to have interfaces + that would return the value of a property, but it is cumbersone 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. + In libical, the value of the TRIGGER property resolves to + </p> + <p> +struct icaltriggertype + </p> + <p> +This type is a union of a DURATION and a DATE-TIME. + </p> + <sect1> +Multi-Valued Properties + <p> +Some properties, such as CATEGORIES, have a single value type, but may + have multiple values in a single instance. This also results in a cumbersome + interface -- CATEGORIES accessors would have to return a list which 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. The is, + </p> + <p> + <code> +CATEGORIES: work, home + </code> +</p> <p> +becomes in libical's internal representation + </p> + <p> + <code> +CATEGORIES: work +CATEGORIES: home + </code> +</p> <p> +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. + </p> + <sect> +Implementation Limitations + <sect> +Using libical + <sect1> +Creating Components + <sect2> +Constructor interfaces + <sect2> +vaargs Constructors + <sect2> +Parsing Text Files + <sect1> +Accessing Components + <sect2> +Finding Components + <sect2> +Removing Components + <p> +Removing an element from a list while iterating through the list can cause + problems, since you will probably be removing the element that the internal + iterator points to. This will result in the iteration loop terminating immediately + after removing the element. To avoid the problem, you will need to step the + iterator ahead of the element you are going to remove, like this: + </p> + <p> + <code> +for(c = icalcomponent_get_first_component(s); + c != 0; + c = next) +{ + next = icalcomponent_get_next_component(s); + icalcomponent_remove_component(s,c); +} + </code> +</p> <sect2> +Finding Properties + <sect2> +Removing Properties + <sect2> +Getting Values + <sect2> +Setting Values + <sect2> +Getting Parameters + <sect2> +Setting Parameters + <sect2> +Removing Parameters + <sect1> +Storing Objects + <p> +When you store a component to the database with icalstore_add_component, + you give the library takes the memory, so the caller does not own the component + anymore. If you want to keep ownership, use clone to make a copy. ( See "Memory + Management" and "Naming Starndard for more about routines with "add" in the name. + ) + </p> + <sect1> +Memory Management + <p> +Here are the memory rules for the C library: + </p> + <p> + <descrip> + <tag> +1)</tag>If the function name has "new" in it, the caller gets + control of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone() + ) + <tag> +2)</tag>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()) + <tag> +3)</tag>If the function name has "add" in it, the caller is + transfering control of the memory to the routine. ( icalproperty_add_parameter() + ) + <tag> +4)</tag>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. + <tag> +5)</tag>If the routine returns a string, libical owns the memory and will + put it on a ring buffer to reclaim later. You'd better strdup it if you want + to keep it, and you don't have to delete it. + </descrip> +</p> <sect1> +Error Handling + <sect2> +Return values + <sect2> +icalerrno + <sect2> +Component errors + <sect1> +Naming Standard + <p> +Structures that you access with the "struct" keyword, such as "struct icaltimetype" + are things that you are allowed to see inside and poke at. + </p> + <p> +Structures that you access though a typedef, such as "icalcomponent" are + things where all of the data is hidden. + </p> + <p> +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. + </p> + <sect> +Hacks and Bugs + + + </article> diff --git a/libical/doc/UsingLibical.txt b/libical/doc/UsingLibical.txt new file mode 100644 index 0000000000..f80ea31121 --- /dev/null +++ b/libical/doc/UsingLibical.txt @@ -0,0 +1,302 @@ + + +Using Libical + +Eric Busboom (eric@softwarestudio.org) + +January 2000 + +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 for users can +store their calendar data and arrange meetings with other users. + +Libical implements the following specifications and protocols + ++----------+-------+ +|iCal Core | 2445 | ++----------+-------+ ++----------+-------+ +| iTIP | 2446 | ++----------+-------+ ++----------+-------+ +| iMIP | 2447 | ++----------+-------+ ++----------+-------+ +| iRIP | draft | ++----------+-------+ ++----------+-------+ +| CAP | draft | ++----------+-------+ + + +(The current version, 0.14, does not implement iRip or CAP. ) + +This documentation assumes that you are familiar with the iCalendar +standards RFC2445 and RFC2446. + +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 Purpose & Goals + +1.4 Document version + +$Id$ + +2 Building the Library + +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. + +The central goal of libical is to parse iTIP data into an internal +representation of Components, Properties, Parameters an Values, and +to allow the user to manipulate the data in various ways + +3.1 Components + +3.2 Properties + +3.3 Values + +3.4 Parameters + +3.5 Enumerations + +3.6 Types + +3.7 The Parser + +3.8 Restrictions + +3.9 Memory Management + +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 keey 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. XDAYLIGHT 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, it is a component. + +There are also pseudo components that are conceptually derived classess +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 cumbersone 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 Implementation Limitations + +6 Using libical + +6.1 Creating Components + +6.1.1 Constructor Interfaces + +6.1.2 vaargs Constructors + +6.1.3 Parsing Text Files + +6.2 Accessing Components + +6.2.1 Finding Components + +6.2.2 Removing Components + +Removing an element from a list while iterating through the list can +cause problems, since you will probably be removing the element that +the internal iterator points to. This will result in the iteration +loop terminating immediately after removing the element. 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(s); + + c != 0; + + c = next) + +{ + + next = icalcomponent_get_next_component(s); + + icalcomponent_remove_component(s,c); + +} + +6.2.3 Finding Properties + +6.2.4 Removing Properties + +6.2.5 Getting Values + +6.2.6 Setting Values + +6.2.7 Getting Parameters + +6.2.8 Setting Parameters + +6.2.9 Removing Parameters + +6.2.10 Checking Component Validity + +6.3 Storing Objects + +The libical distribution inclues a seperate library, libicalss, that +allows you to store iCal component data to disk in a variety of ways. +This library is documented seperately. + +6.4 Memory Management + +Here are the memory rules for the library: + +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 transfering + 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. You'd better strdup it + if you want to keep it, and you don't have to delete it. + +6.5 Error Handling + +6.5.1 Return values + +6.5.2 icalerrno + +6.5.3 Component errors + +6.6 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. + +7 Hacks and Bugs diff --git a/libical/install-sh b/libical/install-sh new file mode 100755 index 0000000000..0ff4b6a08e --- /dev/null +++ b/libical/install-sh @@ -0,0 +1,119 @@ +#!/bin/sh + +# +# install - install a program, script, or datafile +# This comes from X11R5; it is not part of GNU. +# +# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" + +instcmd="$mvprog" +chmodcmd="" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +fi + +if [ x"$dst" = x ] +then + echo "install: no destination specified" + exit 1 +fi + + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + +if [ -d $dst ] +then + dst="$dst"/`basename $src` +fi + +# Make a temp file name in the proper directory. + +dstdir=`dirname $dst` +dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + +$doit $instcmd $src $dsttmp + +# and set any options; do chmod last to preserve setuid bits + +if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi +if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi +if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi +if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi + +# Now rename the file to the real destination. + +$doit $rmcmd $dst +$doit $mvcmd $dsttmp $dst + + +exit 0 diff --git a/libical/missing b/libical/missing new file mode 100755 index 0000000000..7789652e87 --- /dev/null +++ b/libical/missing @@ -0,0 +1,190 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996. + +# 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, 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/libical/mkinstalldirs b/libical/mkinstalldirs new file mode 100644 index 0000000000..e82eeacbb3 --- /dev/null +++ b/libical/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.3 2000/05/15 06:18:13 ericb Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here
\ No newline at end of file diff --git a/libical/scripts/.cvsignore b/libical/scripts/.cvsignore new file mode 100644 index 0000000000..b840c21800 --- /dev/null +++ b/libical/scripts/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile
\ No newline at end of file diff --git a/libical/scripts/Makefile.am b/libical/scripts/Makefile.am new file mode 100644 index 0000000000..fd1b053cb6 --- /dev/null +++ b/libical/scripts/Makefile.am @@ -0,0 +1,8 @@ +EXTRA_DIST = \ +mkderivedcomponents.pl \ +mkderivedparameters.pl \ +mkderivedproperties.pl \ +mkderivedvalues.pl \ +mkparameterrestrictions.pl \ +mkrestrictionrecords.pl \ +mkrestrictiontable.pl diff --git a/libical/scripts/mkderivedcomponents.pl b/libical/scripts/mkderivedcomponents.pl new file mode 100755 index 0000000000..ac4e472250 --- /dev/null +++ b/libical/scripts/mkderivedcomponents.pl @@ -0,0 +1,170 @@ +#!/usr/local/bin/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/libical/scripts/mkderivedparameters.pl b/libical/scripts/mkderivedparameters.pl new file mode 100755 index 0000000000..2b505c878a --- /dev/null +++ b/libical/scripts/mkderivedparameters.pl @@ -0,0 +1,277 @@ +#!/usr/local/bin/perl + +use Getopt::Std; +getopts('chspi:'); + +%no_xname = (RELATED=>1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1); + +# Usually, open param-c-types.txt +open(F,"$ARGV[0]") || die "Can't open C parameter types 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; + + } + + 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"; + } + +} + + + +if (($opt_c or $opt_h) and !$opt_i) { + +print <<EOM; +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedparameters.{c,h} + CREATOR: eric 09 May 1999 + + \044Id: mkderivedparameters.pl,v 1.1 1999/05/14 07:04:31 eric Exp eric \044 + \044Locker: eric \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 + */ + + +EOM + +} + +if ($opt_p and !$opt_i){ + +print <<EOM; +# -*- Mode: Perl -*- +# ====================================================================== +# \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. +# +# The original author is Eric Busboom +# The original code is derivedparams.h +# +# ======================================================================*/ + +EOM + +} + + +while(<F>){ + + chop; + my ($param,$type) = split(/\s{2,}/,$_); + + my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param)); + + my $lc = lc($ucf); + my $uc = uc($lc); + + my $lctype = lc($type); + + + my $charorenum; + my $set_code; + my $pointer_check; + my $new_pointer_check; + my $new_pointer_check_v; + my $xrange; + + if ($type=~/char/){ + $new_pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; + $new_pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");"; + } + + + if ($type=~/char/ ) { + + $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return ((struct icalparameter_impl*)param)->string;"; + + $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; + + $set_code = "((struct icalparameter_impl*)param)->string = strdup(v);" + + } else { + + $xrange =" if ( ((struct icalparameter_impl*)param)->string != 0){\n return ICAL_${uc}_XNAME;\n }\n" if !exists $no_xname{$uc}; + + $charorenum=<<EOM; + icalerror_check_arg( (param!=0), \"param\"); +$xrange + return ((struct icalparameter_impl*)param)->data.v_${lc}; +EOM + + $pointer_check = "icalerror_check_arg( (v!=0),\"v\");"; + + $set_code = "((struct icalparameter_impl*)param)->data.v_${lc} = v;"; + + $print_code = "switch (impl->data.v_${lc}) {\ncase ICAL_${uc}_: {\n}\ncase ICAL_${uc}_XNAME: /* Fall Through */\n}\n"; + + } + + + + if ($opt_c) { + + print <<EOM; +/* $param */ +icalparameter* icalparameter_new_${lc}($type v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + $new_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}(icalparameter* param) +{ + icalerror_clear_errno(); +$charorenum +} + +void icalparameter_set_${lc}(icalparameter* param, ${type} v) +{ + $new_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}(icalparameter* value); +void icalparameter_set_${lc}(icalparameter* value, ${type} v); + +EOM + +} elsif ($opt_s) { + +next if $type =~ /char/; + +print<<EOM; +case ICAL_${uc}_PARAMETER: +{ + $print_code +} +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/libical/scripts/mkderivedproperties.pl b/libical/scripts/mkderivedproperties.pl new file mode 100755 index 0000000000..f3c94f2cfd --- /dev/null +++ b/libical/scripts/mkderivedproperties.pl @@ -0,0 +1,286 @@ +#!/usr/local/bin/perl + +use Getopt::Std; +getopts('chsypmi:'); + +# ARG 0 is prop-to-value +open(PV,"$ARGV[0]") || die "Can't open prop to value file $ARGV[0]:$!"; + + +while (<PV>){ + + chop; + my @v = split(/\s+/,$_); + + my $prop = shift @v; + my $value = shift @v; + my $comment = join(" ",@v); + + $propmap{$prop} = $value; +} + +close PV; + +# ARG 1 is value-c-types.txt +open(F,"$ARGV[1]") || die "Can't open C parameter types file $ARGV[1 ]:$!"; + +while (<F>){ + + chop; + my @v = split(/\t+/,$_); + + my $value = shift @v; + my $type = shift @v; + my $comment = join(" ",@v); + + $valuemap{$value} = $type; + +} + +close F; + +# 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"; + +} + + +if ( ($opt_h or $opt_s) 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 + */ + + +EOM + +} + + +if ($opt_p and !$opt_i){ + +print <<EOM; + +EOM + +} + +foreach $prop (keys %propmap) { + + next if !$prop; + + my $value = $propmap{$prop}; + + 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}; + + 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 + 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; +} + +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; +} + +void icalproperty_set_${lc}(icalproperty* prop, $type v) +{ + icalvalue *value; + + $set_pointer_check + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_${lcvalue}(v); + + icalproperty_set_value(prop,value); + +} + +$type icalproperty_get_${lc}(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_${lcvalue}(value); +} +EOM + + + } elsif ($opt_h) { # Generate C Header file + print<<EOM; + +/* $prop */ +icalproperty* icalproperty_new_${lc}($type v); +icalproperty* icalproperty_vanew_${lc}($type v, ...); +void icalproperty_set_${lc}(icalproperty* prop, $type v); +$type icalproperty_get_${lc}(icalproperty* prop); +EOM + +} elsif ($opt_s) { # Generate case in a switch statement + +print <<EOM; +case ICAL_${uc}_PROPERTY: +EOM + + +} elsif ($opt_p) { # Generate perl code + +print <<EOM; + +package Net::ICal::Property::${ucf}; +use Net::ICal::Property; +\@ISA=qw(Net::ICal::Property); +sub new +{ + my \$package = shift; + + my \$p = Net::ICal::icalproperty_new(\$Net::ICal::ICAL_${uc}_PROPERTY); + my \$self = Net::ICal::Property::new_from_ref(\$p); + + \$self->_add_elements(\\\@_); + + return bless \$self, \$package; +} + +sub set_value +{ + my \$self = shift; + my \$v = shift; + + my \$impl = \$self->_impl(); + + + if ( ref \$v && Net::ICal::icalvalue_isa_value(\$v->_impl())){ + Net::ICal::icalproperty_set_value(\$impl,\$v->_impl); + } else { + my \$value = Net::ICal::icalvalue_new_from_string(\$Net::ICal::ICAL_${ucvalue}_VALUE,\$v); + die if !\$impl; + Net::ICal::icalproperty_set_value(\$impl,\$value) unless !\$value; + } + +} + +sub get_value +{ + my \$self = shift; + my \$impl = \$self->_impl(); + + if (defined \$impl){ + my \$value = Net::ICal::icalproperty_get_value(\$impl); + return "" if !\$value; + return Net::ICal::icalvalue_as_ical_string(\$value); + } else { + return ""; + } +} + +EOM + +} elsif ($opt_m) { # Generate a map + +print "\'${uc}\' => \'Net::ICal::Property::${ucf},\'\n"; + +} + +} # This brace terminates the main loop + + + +# Add things to the end of the output. + +if ($opt_p) +{ + print "1;\n"; +} + +if ($opt_h){ + +print <<EOM; +#endif ICALPROPERTY_H +EOM +} + diff --git a/libical/scripts/mkderivedvalues.pl b/libical/scripts/mkderivedvalues.pl new file mode 100755 index 0000000000..a0909a6d94 --- /dev/null +++ b/libical/scripts/mkderivedvalues.pl @@ -0,0 +1,303 @@ +#!/usr/bin/perl + + +use Getopt::Std; +getopts('chspi:'); + +#Options +# c -> generate c code file +# h-> generate header file +# s -> generate switch statement + +# Open with value-c-types.txt + + +open(F,"$ARGV[0]") || die "Can't open values 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"; + +} + + +if (($opt_c || $opt_h) and !$opt_i) { +print <<EOM; +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedvalues.{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 + */ + + + +EOM +} + +if ($opt_p and !$opt_i){ + +print <<EOM; +# -*- Mode: Perl -*- +# ====================================================================== +# \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. +# +# The original author is Eric Busboom +# The original code is derivedvalues.h +# +# ======================================================================*/ + +EOM + +} + +# 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' + ); + +while(<F>) +{ + + chop; + my @v = split(/\t+/,$_); + + my $value = shift @v; + my $type = shift @v; + my $comment = join(" ",@v); + + 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 = "strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n"; + } else { + $assign = "v;"; + } + + my $union_data; + + if (exists $union_map{$uc} ){ + $union_data=$union_map{$uc}; + } else { + $union_data = $lc; + } + + if ($opt_c) { +print <<EOM; + +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; + impl->data.v_${union_data} = $assign +} + +$type +icalvalue_get_${lc}(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_${uc}_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_${union_data}; +} + +EOM + +} elsif($opt_h) { + + print <<EOM; +/* $value $comment */ +icalvalue* icalvalue_new_${lc}($type v); +$type icalvalue_get_${lc}(icalvalue* value); +void icalvalue_set_${lc}(icalvalue* value, ${type} v); + +EOM + +} elsif ($opt_s) { + +if ( $ud{$union_data}++ == 0) { + +print<<EOM; +char* icalvalue_${union_data}_as_ical_string(icalvalue* value) { + + $type data; + char temp[1024]; + char *str; + icalerror_check_arg( (value!=0),"value"); + data = ((struct icalvalue_impl*)value)->data.v_${union_data} + + str = strdup(temp); + + return str; +} + +EOM + +} +} elsif ($opt_p) { # Generate perl code + +print <<EOM; + +package ICal::Value::${ucf}; +use ICal::Value; +\@ISA=qw(ICal::Value); +sub new +{ + my \$self = []; + my \$package = shift; + my \$value = shift; + + bless \$self, \$package; + + my \$p; + + if (\$value){ + \$p = ICal::icalvalue_new_from_string(\$ICal::ICAL_${uc}_VALUE,\$value); + } else { + \$p = ICal::icalvalue_new(\$ICal::ICAL_${uc}_VALUE); + } + + \$self->[0] = \$p; + + return \$self; +} + +sub set +{ + my \$self = shift; + my \$v = shift; + + my \$impl = \$self->_impl(); + + if (\$v) { + my \$new_value = ICal::icalvalue_new_from_string(\$ICal::ICAL_${uc}_VALUE,\$v); + if (\$new_value){ + ICal::icalvalue_free(\$self->[0]); + \$self->[0] = \$new_value; + } + + } + +} + +sub get +{ + my \$self = shift; + my \$impl = \$self->[0]; + + if (defined \$impl){ + + return ICal::icalvalue_as_ical_string(\$impl); + + } +} + +EOM +} + + + +} + +if ($opt_p) +{ + print "1;\n"; +} + + +if ($opt_h){ + +print <<EOM; +#endif ICALVALUE_H +EOM +} + + +__END__ + diff --git a/libical/scripts/mkparameterrestrictions.pl b/libical/scripts/mkparameterrestrictions.pl new file mode 100755 index 0000000000..2c57eb4ca5 --- /dev/null +++ b/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/libical/scripts/mkrestrictionrecords.pl b/libical/scripts/mkrestrictionrecords.pl new file mode 100755 index 0000000000..e2c62ae748 --- /dev/null +++ b/libical/scripts/mkrestrictionrecords.pl @@ -0,0 +1,109 @@ +#!/usr/bin/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/libical/scripts/mkrestrictiontable.pl b/libical/scripts/mkrestrictiontable.pl new file mode 100755 index 0000000000..c91f3d0bc4 --- /dev/null +++ b/libical/scripts/mkrestrictiontable.pl @@ -0,0 +1,86 @@ +#!/usr/bin/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; +} + +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"; + } + + if($prop ne "NONE"){ + print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub\},\n"); + } + +} + + +print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE}\n"; + +print "};\n"; + +print "icalrestriction_component_record icalrestriction_component_records[] = {\n"; + + +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) = split(/,/,$_); + + next if !$method; + + + if($subcomp ne "NONE"){ + print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr}\},\n"); + } + +} + +print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}\n"; +print "};\n"; diff --git a/libical/src/.cvsignore b/libical/src/.cvsignore new file mode 100644 index 0000000000..c038ed7864 --- /dev/null +++ b/libical/src/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in
\ No newline at end of file diff --git a/libical/src/Makefile.am b/libical/src/Makefile.am new file mode 100644 index 0000000000..37dc5e39cb --- /dev/null +++ b/libical/src/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = libical libicalss test diff --git a/libical/src/libical/.cvsignore b/libical/src/libical/.cvsignore new file mode 100644 index 0000000000..708af857d7 --- /dev/null +++ b/libical/src/libical/.cvsignore @@ -0,0 +1,14 @@ +Makefile +Makefile.in +icalitipy.c +icalitipy.h +icalitipl.c +icallexer.c +icalyacc.c +icalyacc.h +y.output +*.lo +*.la +.libs +.deps +icalversion.h diff --git a/libical/src/libical/.gdb_history b/libical/src/libical/.gdb_history new file mode 100644 index 0000000000..55362e9165 --- /dev/null +++ b/libical/src/libical/.gdb_history @@ -0,0 +1,457 @@ +run +ptype E +graph display E +quit +run +print E +graph display E +up +print p +graph display p +ptype p +info line 'p' +graph display p +print parameter_iterator +break icalproperty.c:182 +run +next +print p +graph display p +quit +run +up +graph display p +print parameter_iterator +graph display p +print *(p) +quit +show directories +run +run +y +list usecases.c +list test_parameters +info line 'main' +info line 'test_parameters' +info line 'icalproperty_vanew_comment' +ptype icalproperty_add_parameters +info line 'icalproperty_add_parameters' +run +up +info line 'icalproperty_vanew_comment' +info line 'icalproperty_add_parameters' +break icalproperty.c:51 +run +step +next +nexti +info line 'icalproperty_vanew_comment' +info line 'icalproperty_add_parameters' +break icalproperty.c:53 +run +next +graph display vp +break icalparameter_isa_parameter +cont +run +step +next +quit +run +break icalcomponent_get_first_property +break icalcomponent_get_next_property +break icalcomponent_new +run +next +step +next +step +next +graph display impl +up +down +next +graph display *(impl) +next +cont +next +graph display c +next +graph display *(prop) +next +step +quit +run +up +graph display p +down +print E +up +print *(prop) +graph display *(prop) +down +up +print prop +print param +down +up +print p +up +break usecases.c:522 +run +step +next +up +run +step +next +step +next +quit +run +up +quit +info line 'test_memory' +break b1 +break usecases.c:558 +run +graph display *(f) +graph display *(p) +next +run +next +step +next +print pos +print *(pos) +graph display string +graph display *(pos) +next +set variable *pos = 0x8053520 +next +step +next +print buf_size +print *(buf_size) +print *(string) +ptype string +next +run +print f +graph display f +graph display p +next +step +next +run +next +graph display bufsize +next +quit +graph display test_memory +info line 'test_memory' +break usecases.c:560 +run +graph display f +next +graph display p +print p -f +print strlen(S1) +next +print p - f +print strlen(S1) + strlen(S2) +next +break usecases.c:572 +run +cont +step +graph display *(pos) +next +step +quit +info line 'test_memory' +break usecases.c:560 +set args +run +next +graph display f +graph display p +next +graph display bufsize +run +next +set args +run +quit +info line 'test_memory' +break usecases.c:560 +graph display f +graph display p +run +graph display f +graph display p +graph display bufsize +next +down +up +quit +run +where +frame 2 +break icalmemory.c:79 +run +next +run +graph display buffer_ring +run +ont(box, font) = font(box, font); +_fontfix(box) = fontfix(box); +ont(box, font) = font(box, font); +#pragma override font +font(box, font) = _fontfix(_font(box, string(font))); +ont(box, font) = font(box, font); +ist +list +print buffer_ring[buffer_pos] +break icalmemory.c:77 +run +cont +quit +run +up +break icalmemory.c:77 +break icalmemory.c:78 +run +graph display buffer_ring +next +cont +quit +run +up +break icalmemory.c:77 +run +break icalmemory.c:78 +cont +graph display buffer_ring[buffer_pos] +quit +break usecases.c:560 +run +step +break icalmemory.c:129 +disable 2 +next +info line 'icalmemory_resize_buffer' +break icalmemory.c:79 +cont +run +cont +next +run +cont +graph display buffer_ring[buffer_pos] +graph display buffer_ring +break icalmemory.c:78 +run +graph display buffer_pos +cont +run +cont +quit +info line 'test_memory' +info line 'icalmemory_append_string' +break icalmemory.c:78 +break icalmemory.c:79 +run +graph display buffer_ring +graph display buffer_ring[buffer_pos] +graph display buffer_pos +cont +next +free( buffer_ring[2] +free( buffer_ring[2] ) +call free(buffer_ring[2] ) +call free(buffer_ring[1] ) +free(buffer_ring[1]) +run +cont +set variable buffer_pos = 2 +next +run +cont +run +cont +run +cont +next +quit +info line 'test_memory' +info line 'icalmemory_append_string' +break icalmemory.c:78 +break icalmemory.c:79 +run +graph display buffer_ring +graph display buffer_pos +graph display buffer_ring[buffer_pos] +cont +run +cont +set variable buffer_pos = 2 +next +cont +next +cont +run +next +run +quit +info line 'test_memory' +info line 'icalmemory_append_string' +break icalmemory.c:76 +break icalmemory.c:77 +run +graph display buffer_ring +graph display buffer_pos +graph display buffer_ring[buffer_pos] +cont +next +cont +next +cont +run +cont +next +cont +run +cont +next +graph display rtrn +next +run +next +cont +next +run +step +run +next +quit +run +up +print pos +graph display string +run +up +break usecases.c:572 +run +print bufsize +step +next +step +quit +run +up +graph display buf_size +graph display *(buf_size) +break icalmemory.c:136 +run +next +run +graph display *(new_buf) +quit +run +up +down +break icalmemory.c:136 +run +graph display *(new_buf) +quit +run +up +break icalmemory.c:136 +run +print *(new_buf) +next +print *buf_size +print *bu +print *buf +next +print new_buf +quit +run +up +break icalmemory.c:136 +run +print *(new_buf) +graph display *(new_buf) +graph display new_pos +graph display *(buf) +next +graph display new_buf +run +next +run +graph display *(pos) +next +quit +info line 'test_memory' +info line 'icalmemory_append_string' +break icalmemory.c:136 +run +graph display *(buf_size) +next +quit +info line 'test_memory' +break usecases.c:570 +run +step +next +delete 1 +until usecases.c:572 +step +next +graph display *(buf_size) +next +graph display *(pos) +graph display *(buf) +graph display *(new_buf) +graph display new_buf +next +graph display string +print *pos - *buf +run +break icalmemory.c:136 +run +next +set variable *pos = 0x8054993 +next +run +next +set variable *pos = 0x8054980 +set variable *pos = 0x8054700 +next +run +next +down +up +down +quit +run < ../../test-data/1.1 +up +break icalproperty.c:165 +run +next +run +info line 'icalvalue_as_ical_string' +break icalvalue.c:424 +cont +next +print value +next +run +up +cont +up +print *(prop) +graph display *(icalproperty_impl*)prop +quit + diff --git a/libical/src/libical/.gdbinit b/libical/src/libical/.gdbinit new file mode 100644 index 0000000000..19de9b8209 --- /dev/null +++ b/libical/src/libical/.gdbinit @@ -0,0 +1,3 @@ +directory /home/eric/proj/FreeAssociation/libical/src/pvl/ +path /home/eric/proj/FreeAssociation/libical/src/pvl/ + diff --git a/libical/src/libical/Makefile.am b/libical/src/libical/Makefile.am new file mode 100644 index 0000000000..698a2d5a94 --- /dev/null +++ b/libical/src/libical/Makefile.am @@ -0,0 +1,87 @@ + +#AUTOMAKE_OPTIONS = no-dependencies + +#noinst_LTLIBRARIES = libical.la +lib_LTLIBRARIES = libical.la + +INCLUDES = -I. + +YFLAGS =-d -v -t + +libical_la_SOURCES = \ + ical.h \ + icalcomponent.c \ + icalcomponent.h \ + icalenums.c \ + icalenums.h \ + icalerror.c \ + icalerror.h \ + icalyacc.y \ + icallexer.l \ + icalmemory.c \ + icalmemory.h \ + icalparameter.c \ + icalparameter.h \ + icalparser.c \ + icalparser.h \ + icalproperty.c \ + icalproperty.h \ + icalrestriction.c \ + icalrestriction.h \ + icaltypes.c \ + icaltypes.h \ + icalvalue.c \ + icalvalue.h \ + icalvcal.h \ + pvl.c \ + pvl.h + +include_HEADERS=\ + ical.h \ + icalcomponent.h \ + icalenums.h \ + icalerror.h \ + icalmemory.h \ + icalparameter.h \ + icalparser.h \ + icalproperty.h \ + icalrestriction.h \ + icaltypes.h \ + icalvalue.h \ + icalvcal.h \ + icalversion.h \ + pvl.h + + + +EXTRA_DIST = icallexer.c icalyacc.c icalyacc.h + +CONFIG_CLEAN_FILES = y.output *~ + +DESIGNDATA = ../../design-data +ICALSCRIPTS = ../../scripts +derived: icalproperty icalparameter icalvalue + +icalproperty: + $(ICALSCRIPTS)/mkderivedproperties.pl -i icalproperty.h -h $(DESIGNDATA)/prop-to-value.txt ${DESIGNDATA}/value-c-types.txt > icalproperty.newh + mv icalproperty.newh icalproperty.h + + $(ICALSCRIPTS)/mkderivedproperties.pl -i icalproperty.c -c $(DESIGNDATA)/prop-to-value.txt ${DESIGNDATA}/value-c-types.txt > icalproperty.newc + mv icalproperty.newc icalproperty.c + + +icalparameter: + $(ICALSCRIPTS)/mkderivedparameters.pl -i icalparameter.h -h $(DESIGNDATA)/param-c-types.txt > icalparameter.newh + mv icalparameter.newh icalparameter.h + + $(ICALSCRIPTS)/mkderivedparameters.pl -i icalparameter.c -c $(DESIGNDATA)/param-c-types.txt > icalparameter.newc + mv icalparameter.newc icalparameter.c + +icalvalue: + $(ICALSCRIPTS)/mkderivedvalues.pl -i icalvalue.h -h $(DESIGNDATA)/value-c-types.txt > icalvalue.newh + mv icalvalue.newh icalvalue.h + + $(ICALSCRIPTS)/mkderivedvalues.pl -i icalvalue.c -c $(DESIGNDATA)/value-c-types.txt > icalvalue.newc + mv icalvalue.newc icalvalue.c + + diff --git a/libical/src/libical/base64.c b/libical/src/libical/base64.c new file mode 100644 index 0000000000..5925f977ac --- /dev/null +++ b/libical/src/libical/base64.c @@ -0,0 +1,323 @@ +/* + + Encode or decode file as MIME base64 (RFC 1341) + + by John Walker + http://www.fourmilab.ch/ + + This program is in the public domain. + +*/ + +#define REVDATE "11th August 1997" + +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <string.h> + +#define TRUE 1 +#define FALSE 0 + +#define LINELEN 72 /* Encoded line length (max 76) */ + +typedef unsigned char byte; /* Byte type */ + +static FILE *fi = stdin; /* Input file */ +static FILE *fo = stdout; /* Output file */ +static byte iobuf[256]; /* I/O buffer */ +static int iolen = 0; /* Bytes left in I/O buffer */ +static int iocp = 256; /* Character removal pointer */ +static int ateof = FALSE; /* EOF encountered */ +static byte dtable[256]; /* Encode / decode table */ +static int linelength = 0; /* Length of encoded output line */ +static char eol[] = "\r\n"; /* End of line sequence */ +static int errcheck = TRUE; /* Check decode input for errors ? */ + +/* INBUF -- Fill input buffer with data */ + +static int inbuf(void) +{ + int l; + + if (ateof) { + return FALSE; + } + l = fread(iobuf, 1, 256, fi); /* Read input buffer */ + if (l <= 0) { + if (ferror(fi)) { + exit(1); + } + ateof = TRUE; + return FALSE; + } + iolen = l; + iocp = 0; + return TRUE; +} + +/* INCHAR -- Return next character from input */ + +static int inchar(void) +{ + if (iocp >= iolen) { + if (!inbuf()) { + return EOF; + } + } + + return iobuf[iocp++]; +} + +/* OCHAR -- Output an encoded character, inserting line breaks + where required. */ + +static void ochar(int c) +{ + if (linelength >= LINELEN) { + if (fputs(eol, fo) == EOF) { + exit(1); + } + linelength = 0; + } + if (putc(((byte) c), fo) == EOF) { + exit(1); + } + linelength++; +} + +/* ENCODE -- Encode binary file into base64. */ + +static void encode(void) +{ + int i, hiteof = FALSE; + + /* Fill dtable with character encodings. */ + + for (i = 0; i < 26; i++) { + dtable[i] = 'A' + i; + dtable[26 + i] = 'a' + i; + } + for (i = 0; i < 10; i++) { + dtable[52 + i] = '0' + i; + } + dtable[62] = '+'; + dtable[63] = '/'; + + while (!hiteof) { + byte igroup[3], ogroup[4]; + int c, n; + + igroup[0] = igroup[1] = igroup[2] = 0; + for (n = 0; n < 3; n++) { + c = inchar(); + if (c == EOF) { + hiteof = TRUE; + break; + } + igroup[n] = (byte) c; + } + if (n > 0) { + ogroup[0] = dtable[igroup[0] >> 2]; + ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; + ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; + ogroup[3] = dtable[igroup[2] & 0x3F]; + + /* Replace characters in output stream with "=" pad + characters if fewer than three characters were + read from the end of the input stream. */ + + if (n < 3) { + ogroup[3] = '='; + if (n < 2) { + ogroup[2] = '='; + } + } + for (i = 0; i < 4; i++) { + ochar(ogroup[i]); + } + } + } + if (fputs(eol, fo) == EOF) { + exit(1); + } +} + +/* INSIG -- Return next significant input */ + +static int insig(void) +{ + int c; + + /*CONSTANTCONDITION*/ + while (TRUE) { + c = inchar(); + if (c == EOF || (c > ' ')) { + return c; + } + } + /*NOTREACHED*/ +} + +/* DECODE -- Decode base64. */ + +static void decode(void) +{ + int i; + + for (i = 0; i < 255; i++) { + dtable[i] = 0x80; + } + for (i = 'A'; i <= 'Z'; i++) { + dtable[i] = 0 + (i - 'A'); + } + for (i = 'a'; i <= 'z'; i++) { + dtable[i] = 26 + (i - 'a'); + } + for (i = '0'; i <= '9'; i++) { + dtable[i] = 52 + (i - '0'); + } + dtable['+'] = 62; + dtable['/'] = 63; + dtable['='] = 0; + + /*CONSTANTCONDITION*/ + while (TRUE) { + byte a[4], b[4], o[3]; + + for (i = 0; i < 4; i++) { + int c = insig(); + + if (c == EOF) { + if (errcheck && (i > 0)) { + fprintf(stderr, "Input file incomplete.\n"); + exit(1); + } + return; + } + if (dtable[c] & 0x80) { + if (errcheck) { + fprintf(stderr, "Illegal character '%c' in input file.\n", c); + exit(1); + } + /* Ignoring errors: discard invalid character. */ + i--; + continue; + } + a[i] = (byte) c; + b[i] = (byte) dtable[c]; + } + o[0] = (b[0] << 2) | (b[1] >> 4); + o[1] = (b[1] << 4) | (b[2] >> 2); + o[2] = (b[2] << 6) | b[3]; + i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3); + if (fwrite(o, i, 1, fo) == EOF) { + exit(1); + } + if (i < 3) { + return; + } + } +} + +/* USAGE -- Print how-to-call information. */ + +static void usage(char *pname) +{ + fprintf(stderr, "%s -- Encode/decode file as base64. Call:\n", pname); + fprintf(stderr, + " %s [-e[ncode] / -d[ecode]] [-n] [infile] [outfile]\n", pname); + fprintf(stderr, "\n"); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -D Decode base64 encoded file\n"); + fprintf(stderr, " -E Encode file into base64\n"); + fprintf(stderr, " -N Ignore errors when decoding\n"); + fprintf(stderr, " -U Print this message\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "by John Walker\n"); + fprintf(stderr, " WWW: http://www.fourmilab.ch/\n"); +} + +/* Main program */ + +int main(int argc, char *argv[]) +{ + int i, f = 0, decoding = FALSE; + char *cp, opt; + + for (i = 1; i < argc; i++) { + cp = argv[i]; + if (*cp == '-') { + opt = *(++cp); + if (islower(opt)) { + opt = toupper(opt); + } + switch (opt) { + + case 'D': /* -D Decode */ + decoding = TRUE; + break; + + case 'E': /* -E Encode */ + decoding = FALSE; + break; + + case 'N': /* -N Suppress error checking */ + errcheck = FALSE; + break; + + case 'U': /* -U Print how-to-call information */ + case '?': + usage(argv[0]); + return 0; + } + } else { + switch (f) { + + /** Warning! On systems which distinguish text mode and + binary I/O (MS-DOS, Macintosh, etc.) the modes in these + open statements will have to be made conditional based + upon whether an encode or decode is being done, which + will have to be specified earlier. But it's worse: if + input or output is from standard input or output, the + mode will have to be changed on the fly, which is + generally system and compiler dependent. 'Twasn't me + who couldn't conform to Unix CR/LF convention, so + don't ask me to write the code to work around + Apple and Microsoft's incompatible standards. **/ + + case 0: + if (strcmp(cp, "-") != 0) { + if ((fi = fopen(cp, "r")) == NULL) { + fprintf(stderr, "Cannot open input file %s\n", cp); + return 2; + } + } + f++; + break; + + case 1: + if (strcmp(cp, "-") != 0) { + if ((fo = fopen(cp, "w")) == NULL) { + fprintf(stderr, "Cannot open output file %s\n", cp); + return 2; + } + } + f++; + break; + + default: + fprintf(stderr, "Too many file names specified.\n"); + usage(argv[0]); + return 2; + } + } + } + + if (decoding) { + decode(); + } else { + encode(); + } + return 0; +} diff --git a/libical/src/libical/filelock.c b/libical/src/libical/filelock.c new file mode 100644 index 0000000000..0376bc2bec --- /dev/null +++ b/libical/src/libical/filelock.c @@ -0,0 +1,143 @@ + +/* + I Stole this from: + http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html + + CIS 307: An example using Read/Write File Locks + [fcntl.h], [fcntl.c], [fcntlmain.c] + +In Stevens "Advanced Programming in the Unix Environment" we see ways to use +the Unix service fcntl to lock portions of a file for reading and writing in +the manner stated in the Reader and Writer problem [any number of readers at +a time, but writers must operate alone]. Here we have three files that adapt +and use the code from Stevens: + +*fcntl.h: Specification of the locking functions. +*fcntl.c: Implementation of the locking functions. +*fcntlmain.c: Driver that does a simple test of the locking functions. + +WARNING: A file lock request which is blocked can be interrupted by a +signal. In this case the lock operation returns EINTR. Thus we may think we +got a lock when we really don't. A solution is to block signals when +locking. Another solution is to test the value returned by the lock +operation and relock if the value is EINTR. Another solution, which we adopt +here, is to do nothing about it. + +/* fcntl.c -- Defines mutexes in terms of read/write locks on files. + * (code is mostly from Stevens: Advanced Programming in the + * Unix environment. See from page 367 on. + * filerwlock, filerwlockCreate, filerwlockDelete, + * filerwreadlock, filerwlongreadlock, filerwlongunlock, + * filerwlockUnlock + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> + +int lock_reg(int, int, int, off_t, int, off_t); + +#define read_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len) + +#define readw_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len) + +#define write_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len) + +#define writew_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len) + +#define un_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len) + +pid_t lock_test(int, int , off_t , int , off_t ); + +#define is_readlock(fd, offset, whence, len) \ + lock_test(fd, F_RDLCK, offset, whence, len) + +#define is_writelock(fd, offset, whence, len) \ + lock_test(fd, F_WRLCK, offset, whence, len) + +int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) +{ + struct flock lock; + lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */ + lock.l_start = offset; /* byte offset relative to l_whence */ + lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = len; /* #bytes (0 means to EOF) */ + return (fcntl(fd, cmd, &lock)); +} + +pid_t lock_test(int fd, int type, off_t offset, int whence, off_t len) +{ + struct flock lock; + lock.l_type = type; /* F_RDLCK or F_WRLCK */ + lock.l_start = offset; /* byte offset relative to l_whence */ + lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = len; /* #bytes (0 means to EOF) */ + if (fcntl(fd,F_GETLK,&lock) < 0){ + perror("fcntl"); exit(1);} + if (lock.l_type == F_UNLCK) + return (0); /* false, region is not locked by another process */ + return (lock.l_pid); /* true, return pid of lock owner */ +} + +typedef struct { + int fd; + int n;} filerwlock; + +/* Create N read/write locks and returns the id of this cluster of locks. */ +filerwlock * filerwlockCreate(char *filename, int n) { + filerwlock *fl = (filerwlock *)malloc(sizeof(filerwlock)); + if (((fl->fd) = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IWUSR)) < 0) { + perror("open"); + exit(1);} + fl->n = n; + return fl; + } + +/* Delete the cluster of read/write locks associated with fl. */ +int filerwlockDelete(filerwlock *fl) { + if (close(fl->fd) < 0) { + perror("close"); + exit(1);} + return free(fl); + } + +/* Given the read/write lock cluster fl, lock its ith element */ +int filerwreadlock(filerwlock *fl, int i) { + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + readw_lock(fl->fd, i, SEEK_SET, 1); + } + +int filerwwritelock(filerwlock *fl, int i) { + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + writew_lock(fl->fd, i, SEEK_SET, 1); + } + +/* Given the lock cluster fl, unlock its ith element */ +int filerwunlock(filerwlock *fl, int i){ + + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockUnlock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + un_lock(fl->fd, i, SEEK_SET, 1); + } + +/* Given the lock cluster fl, it read locks all its elements */ +int filerwlongreadlock(filerwlock *fl) { + readw_lock(fl->fd, 0, SEEK_SET, fl->n); +} + +/* Given the lock cluster fl, it unlocks all its elements */ +int filerwlongunlock(filerwlock *fl) { + un_lock(fl->fd, 0, SEEK_SET, fl->n); +} + diff --git a/libical/src/libical/filelock.h b/libical/src/libical/filelock.h new file mode 100644 index 0000000000..dbe0715cc6 --- /dev/null +++ b/libical/src/libical/filelock.h @@ -0,0 +1,57 @@ +/* + I Stole this from: + http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html + + CIS 307: An example using Read/Write File Locks + [fcntl.h], [fcntl.c], [fcntlmain.c] + +In Stevens "Advanced Programming in the Unix Environment" we see ways to use +the Unix service fcntl to lock portions of a file for reading and writing in +the manner stated in the Reader and Writer problem [any number of readers at +a time, but writers must operate alone]. Here we have three files that adapt +and use the code from Stevens: + +*fcntl.h: Specification of the locking functions. +*fcntl.c: Implementation of the locking functions. +*fcntlmain.c: Driver that does a simple test of the locking functions. + +WARNING: A file lock request which is blocked can be interrupted by a +signal. In this case the lock operation returns EINTR. Thus we may think we +got a lock when we really don't. A solution is to block signals when +locking. Another solution is to test the value returned by the lock +operation and relock if the value is EINTR. Another solution, which we adopt +here, is to do nothing about it. + +fcntl.h + +*/ + +/* fcntl.h -- Defines mutexes in terms of read/write locks on files. + * filerwlock, filerwlockCreate, filerwlockDelete, + * filerwreadlock, filerwlockUnlock + */ + +typedef struct { + int fd; + int n; +} filerwlock; + +/* Create N read/write locks and returns the id of this cluster of locks. */ +filerwlock * filerwlockCreate(char *filename, int n); + +/* Delete the cluster of read/write locks associated with fl. */ +int filerwlockDelete(filerwlock *fl); + +/* Given the read/write lock cluster fl, lock its ith element */ +int filerwreadlock(filerwlock *fl, int i); + +int filerwwritelock(filerwlock *fl, int i); + +/* Given the lock cluster fl, unlock its ith element */ +int filerwunlock(filerwlock *fl, int i); + +/* Given the lock cluster fl, it read locks all its elements */ +int filerwlongreadlock(filerwlock *fl); + +/* Given the lock cluster fl, it unlocks all its elements */ +int filerwlongunlock(filerwlock *fl); diff --git a/libical/src/libical/foo b/libical/src/libical/foo new file mode 100644 index 0000000000..f46fdc7814 --- /dev/null +++ b/libical/src/libical/foo @@ -0,0 +1,1578 @@ +/* + ====================================================================== + File: icalrestriction.c + + (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. + + + ======================================================================*/ + +#include "icalenums.h" +#include "icalrestriction.h" + +/* Define the structs for the restrictions. these data are filled out +in machine generated code below */ + +typedef struct icalrestriction_property_record { + icalproperty_method method; + icalcomponent_kind component; + icalproperty_kind property; + icalrestriction_kind restriction; +} icalrestriction_property_record; + + +typedef struct icalrestriction_component_record { + icalproperty_method method; + icalcomponent_kind component; + icalcomponent_kind subcomponent; + icalrestriction_kind restriction; +} icalrestriction_component_record; + +icalrestriction_component_record icalrestriction_component_records[]; +icalrestriction_property_record icalrestriction_property_records[]; + +/* The 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' */ + +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 more",/*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){ + + if ( restr < ICAL_RESTRICTION_NONE || restr > ICAL_RESTRICTION_UNKNOWN + || count < 0){ + return -1; + } + + if (count > 2) { + count = 2; + } + + return compare_map[restr][count]; + +} + +int icalrestriction_check_component(icalproperty_method method, + icalcomponent* comp) +{ + icalproperty_kind kind; + icalcomponent_kind comp_kind; + icalrestriction_kind restr; + 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); + + restr = icalrestriction_get_property_restriction(method, + comp_kind, + kind); + + + if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE ) { + /* HACK. Treat this as a 0/1 restriction */ + restr = ICAL_RESTRICTION_ZEROORONE; + compare = icalrestriction_compare(restr,count); + } else if (restr == ICAL_RESTRICTION_ONEMUTUAL ) { + /* HACK. Treat this 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[1024]; + + sprintf(temp, "Failed iTIP restrictions for property %s. 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)); + } + + + 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_kind +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].restriction; + } + } + + return ICAL_RESTRICTION_UNKNOWN; +} + +icalrestriction_kind +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].restriction; + } + } + + return ICAL_RESTRICTION_UNKNOWN; +} + +/* Everything below this line is machine generated. Do not edit. */ +icalrestriction_property_record icalrestriction_property_records[] = { + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, + {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE} +}; +icalrestriction_component_record icalrestriction_component_records[] = { + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE} +}; diff --git a/libical/src/libical/ical.h b/libical/src/libical/ical.h new file mode 100644 index 0000000000..d0f33cd1a1 --- /dev/null +++ b/libical/src/libical/ical.h @@ -0,0 +1,43 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: ical.h + CREATOR: eric 20 March 1999 + + + (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. + + The original author is Eric Busboom + The original code is ical.h + +======================================================================*/ + +#ifndef ICAL_H +#define ICAL_H + +#include "icalversion.h" +#include "icalenums.h" +#include "icalvalue.h" +#include "icalparameter.h" +#include "icalproperty.h" +#include "icalcomponent.h" +#include "icaltypes.h" +#include "icalparser.h" +#include "icalmemory.h" +#include "icalerror.h" +#include "icalrestriction.h" + +#endif /* !ICAL_H */ + + + diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c new file mode 100644 index 0000000000..bd2b13189c --- /dev/null +++ b/libical/src/libical/icalcomponent.c @@ -0,0 +1,782 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcomponent.c + CREATOR: eric 28 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalcomponent.c + +======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "ical.h" +#include "pvl.h" /* "Pointer-to-void list" */ +#include <stdlib.h> /* for malloc */ +#include <stdarg.h> /* for va_list, etc */ +#include <errno.h> +#include "icalerror.h" +#include <assert.h> +#include <stdio.h> /* for fprintf */ +#include "icalmemory.h" +#include "icalenums.h" + +#define MAX_TMP 1024 + + +/* icalproperty functions that only components get to use */ +void icalproperty_set_parent(icalproperty* property, + icalcomponent* component); + +icalcomponent* icalproperty_get_parent(icalproperty* property); + + + +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; +}; + +void icalcomponent_add_children(struct icalcomponent_impl *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((icalcomponent*)impl, + (icalcomponent*)vp); + + } else if (icalproperty_isa_property(vp) != 0 ){ + + icalcomponent_add_property((icalcomponent*)impl, + (icalproperty*)vp); + } + } +} + +icalcomponent* +icalcomponent_new_impl (icalcomponent_kind kind) +{ + struct icalcomponent_impl* comp; + + if ( ( comp = (struct icalcomponent_impl*) + malloc(sizeof(struct icalcomponent_impl))) == 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; + + return comp; +} + +icalcomponent* +icalcomponent_new (icalcomponent_kind kind) +{ + return (icalcomponent*)icalcomponent_new_impl(kind); +} + +icalcomponent* +icalcomponent_vanew (icalcomponent_kind kind, ...) +{ + va_list args; + + struct icalcomponent_impl *impl = icalcomponent_new_impl(kind); + + if (impl == 0){ + return 0; + } + + va_start(args,kind); + icalcomponent_add_children(impl, args); + va_end(args); + + return (icalcomponent*) impl; +} + +icalcomponent* icalcomponent_new_from_string(char* str) +{ + icalcomponent_kind kind; + + icalerror_check_arg_rz( (str!=0), "str"); + + kind = icalenum_string_to_component_kind(str); + + if (kind == ICAL_NO_COMPONENT){ + return 0; + } + + return icalcomponent_new(kind); +} + +icalcomponent* icalcomponent_new_clone(icalcomponent* component) +{ + struct icalcomponent_impl *old = (struct icalcomponent_impl*)component; + struct icalcomponent_impl *new; + icalproperty *p; + icalcomponent *c; + + icalerror_check_arg_rv( (component!=0), "component"); + + new = icalcomponent_new_impl(old->kind); + + if (new == 0){ + return 0; + } + + + for(p = icalcomponent_get_first_property(old,ICAL_ANY_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(old,ICAL_ANY_PROPERTY)){ + + icalcomponent_add_property(new,icalproperty_new_clone(p)); + } + + + for(c = icalcomponent_get_first_component(old,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(old,ICAL_ANY_COMPONENT)){ + + icalcomponent_add_component(new,icalcomponent_new_clone(c)); + } + + return new; + +} + + +void +icalcomponent_free (icalcomponent* component) +{ + icalproperty* prop; + icalcomponent* comp; + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + icalerror_check_arg_rv( (component!=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(component != 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(component,comp); + icalcomponent_free(comp); + } + + pvl_free(c->components); + + if (c->x_name != 0) { + free(c->x_name); + } + + 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'; + + free(c); + } +} + +char* +icalcomponent_as_ical_string (icalcomponent* component) +{ + char* buf, *out_buf; + char* tmp_buf; + size_t buf_size = 1024; + char* buf_ptr = 0; + +#ifdef ICAL_UNIX_NEWLINE + char newline[] = "\n"; +#else + char newline[] = "\r\n"; +#endif + + icalcomponent *c; + icalproperty *p; + icalcomponent_kind kind = icalcomponent_isa(component); + + char* kind_string; + + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + icalerror_check_arg_rz( (component!=0), "component"); + icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT"); + + kind_string = icalenum_component_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(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY)){ + + tmp_buf = icalproperty_as_ical_string(p); + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); + } + + + for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ + + 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, + icalenum_component_kind_to_string(kind)); + 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) +{ + struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; + + + if ( (strcmp(impl->id,"comp") == 0) && + impl->kind != ICAL_NO_COMPONENT){ + return 1; + } else { + return 0; + } + +} + + +icalcomponent_kind +icalcomponent_isa (icalcomponent* component) +{ + struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; + icalerror_check_arg_rz( (component!=0), "component"); + + if(component != 0) + { + return impl->kind; + } + + return ICAL_NO_COMPONENT; +} + + +int +icalcomponent_isa_component (void* component) +{ + struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; + + icalerror_check_arg_rz( (component!=0), "component"); + + if (strcmp(impl->id,"comp") == 0) { + return 1; + } else { + return 0; + } + +} + +int icalcomponent_property_sorter(void *a, void *b) +{ + icalproperty_kind kinda, kindb; + char *ksa, *ksb; + + kinda = icalproperty_isa((icalproperty*)a); + kindb = icalproperty_isa((icalproperty*)b); + + ksa = icalenum_property_kind_to_string(kinda); + ksb = icalenum_property_kind_to_string(kindb); + + return strcmp(ksa,ksb); +} + + +void +icalcomponent_add_property (icalcomponent* component, icalproperty* property) +{ + struct icalcomponent_impl *impl; + + icalerror_check_arg_rv( (component!=0), "component"); + icalerror_check_arg_rv( (property!=0), "property"); + + impl = (struct icalcomponent_impl*)component; + + 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); + +#ifdef ICAL_INSERT_ORDERED + pvl_insert_ordered(impl->properties, + icalcomponent_property_sorter,property); +#else + pvl_push(impl->properties,property); +#endif + +} + + +void +icalcomponent_remove_property (icalcomponent* component, icalproperty* property) +{ + struct icalcomponent_impl *impl; + pvl_elem itr, next_itr; + struct icalproperty_impl *pimpl; + + icalerror_check_arg_rv( (component!=0), "component"); + icalerror_check_arg_rv( (property!=0), "property"); + + impl = (struct icalcomponent_impl*)component; + + pimpl = (struct icalproperty_impl*)property; + + icalerror_assert( (icalproperty_get_parent(property)),"The property is not a member of a component"); + + + for( itr = pvl_head(impl->properties); + itr != 0; + itr = next_itr) + { + next_itr = pvl_next(itr); + + if( pvl_data(itr) == (void*)property ){ + + if (impl->property_iterator == itr){ + impl->property_iterator = pvl_next(itr); + } + + pvl_remove( impl->properties, itr); + icalproperty_set_parent(property,0); + } + } +} + +int +icalcomponent_count_properties (icalcomponent* component, icalproperty_kind kind) +{ + int count=0; + icalproperty *p; + icalerror_check_arg_rz( (component!=0), "component"); + + for(p = icalcomponent_get_first_property(component,kind); + p != 0; + p = icalcomponent_get_next_property(component,kind)){ + + count++; + } + + + return count; + +} + +icalproperty* icalcomponent_get_current_property (icalcomponent* component) +{ + + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + icalerror_check_arg_rz( (component!=0),"component"); + + if ((c->property_iterator==0)){ + return 0; + } + + return (icalproperty*) pvl_data(c->property_iterator); + +} + +icalproperty* +icalcomponent_get_first_property (icalcomponent* component, icalproperty_kind kind) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + icalerror_check_arg_rz( (component!=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* component, icalproperty_kind kind) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + icalerror_check_arg_rz( (component!=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) +{ + struct icalcomponent_impl *impl, *cimpl; + + icalerror_check_arg_rv( (parent!=0), "parent"); + icalerror_check_arg_rv( (child!=0), "child"); + + impl = (struct icalcomponent_impl*)parent; + cimpl = (struct icalcomponent_impl*)child; + + icalerror_assert( (cimpl->parent ==0),"The child component has already been added to a parent component. Remove the component with icalcomponent_remove_componenet before calling icalcomponent_add_component"); + + cimpl->parent = parent; + + pvl_push(impl->components,child); +} + + +void +icalcomponent_remove_component (icalcomponent* parent, icalcomponent* child) +{ + struct icalcomponent_impl *impl,*cimpl; + pvl_elem itr, next_itr; + + icalerror_check_arg_rv( (parent!=0), "parent"); + icalerror_check_arg_rv( (child!=0), "child"); + + impl = (struct icalcomponent_impl*)parent; + cimpl = (struct icalcomponent_impl*)child; + + for( itr = pvl_head(impl->components); + itr != 0; + itr = next_itr) + { + next_itr = pvl_next(itr); + + if( pvl_data(itr) == (void*)child ){ + + if (impl->component_iterator == itr){ + /* impl->component_iterator = pvl_next(itr);*/ + } + pvl_remove( impl->components, itr); + cimpl->parent = 0; + } + } +} + + +int +icalcomponent_count_components (icalcomponent* component, icalcomponent_kind kind) +{ + int count=0; + icalcomponent *c; + icalerror_check_arg_rz( (component!=0), "component"); + + for(c = icalcomponent_get_first_component(component,kind); + c != 0; + c = icalcomponent_get_next_component(component,kind)){ + + count++; + } + + + return count; +} + +icalcomponent* +icalcomponent_get_current_component(icalcomponent* component) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + icalerror_check_arg_rz( (component!=0),"component"); + + if (c->component_iterator == 0){ + return 0; + } + + return (icalcomponent*) pvl_data(c->component_iterator); +} + +icalcomponent* +icalcomponent_get_first_component (icalcomponent* component, + icalcomponent_kind kind) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + icalerror_check_arg_rz( (component!=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* component, icalcomponent_kind kind) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + icalerror_check_arg_rz( (component!=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; +} + + +icalproperty** +icalcomponent_get_component (icalcomponent* component, icalproperty_kind kind); + + +int icalcomponent_count_errors(icalcomponent* component) +{ + int errors = 0; + icalproperty *p; + icalcomponent *c; + + for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY)){ + + if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) + { + errors++; + } + } + + for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ + + errors += icalcomponent_count_errors(c); + + } + + return errors; +} + + +void icalcomponent_strip_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) + { + 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_strip_errors(c); + } +} + + +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; + char tmp[MAX_TMP]; + 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: { + } + } + if (rst.code != ICAL_UNKNOWN_STATUS){ + + rst.debug = icalproperty_get_xlicerror(p); + icalcomponent_add_property(component, + icalproperty_new_requeststatus( + icalreqstattype_as_string(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) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + return c->parent; +} + +void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent) +{ + struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; + + c->parent = parent; +} + + diff --git a/libical/src/libical/icalcomponent.h b/libical/src/libical/icalcomponent.h new file mode 100644 index 0000000000..8d9f22ca76 --- /dev/null +++ b/libical/src/libical/icalcomponent.h @@ -0,0 +1,119 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcomponent.h + CREATOR: eric 20 March 1999 + + + (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. + + The original author is Eric Busboom + The original code is icalcomponent.h + +======================================================================*/ + +#ifndef ICALCOMPONENT_H +#define ICALCOMPONENT_H + +#include "icalproperty.h" +#include "icalvalue.h" +#include "icalenums.h" /* defines icalcomponent_kind */ + +typedef void icalcomponent; + +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(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); + +/* Return a null-terminated array of icalproperties*/ + +icalproperty** icalcomponent_get_properties(icalcomponent* component, + icalproperty_kind kind); + + +/* + * Working with components + */ + + +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); + +/* 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); + +/* Return a null-terminated array of icalproperties*/ +icalproperty** icalcomponent_get_component(icalcomponent* component, + icalproperty_kind kind); + +/* Working with embedded error properties */ + +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. You don't see these... */ +icalcomponent* icalcomponent_get_parent(icalcomponent* component); +void icalcomponent_set_parent(icalcomponent* component, + icalcomponent* parent); + +#endif /* !ICALCOMPONENT_H */ + + + diff --git a/libical/src/libical/icalenums.c b/libical/src/libical/icalenums.c new file mode 100644 index 0000000000..95f308eec6 --- /dev/null +++ b/libical/src/libical/icalenums.c @@ -0,0 +1,615 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalenum.c + CREATOR: eric 29 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalenum.c + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icalenums.h" + +struct icalproperty_kind_map { + icalproperty_kind kind; + char name[20]; +}; + +static struct icalproperty_kind_map property_map[] = +{ + { ICAL_ACTION_PROPERTY, "ACTION"}, + { ICAL_ATTACH_PROPERTY, "ATTACH"}, + { ICAL_ATTENDEE_PROPERTY, "ATTENDEE"}, + { ICAL_CALSCALE_PROPERTY, "CALSCALE"}, + { ICAL_CATEGORIES_PROPERTY, "CATEGORIES"}, + { ICAL_CLASS_PROPERTY, "CLASS"}, + { ICAL_COMMENT_PROPERTY, "COMMENT"}, + { ICAL_COMPLETED_PROPERTY, "COMPLETED"}, + { ICAL_CONTACT_PROPERTY, "CONTACT"}, + { ICAL_CREATED_PROPERTY, "CREATED"}, + { ICAL_DESCRIPTION_PROPERTY, "DESCRIPTION"}, + { ICAL_DTEND_PROPERTY, "DTEND"}, + { ICAL_DTSTAMP_PROPERTY, "DTSTAMP"}, + { ICAL_DTSTART_PROPERTY, "DTSTART"}, + { ICAL_DUE_PROPERTY, "DUE"}, + { ICAL_DURATION_PROPERTY, "DURATION"}, + { ICAL_EXDATE_PROPERTY, "EXDATE"}, + { ICAL_EXRULE_PROPERTY, "EXRULE"}, + { ICAL_FREEBUSY_PROPERTY, "FREEBUSY"}, + { ICAL_GEO_PROPERTY, "GEO"}, + { ICAL_LASTMODIFIED_PROPERTY, "LAST-MODIFIED"}, + { ICAL_LOCATION_PROPERTY, "LOCATION"}, + { ICAL_METHOD_PROPERTY, "METHOD"}, + { ICAL_ORGANIZER_PROPERTY, "ORGANIZER"}, + { ICAL_PERCENTCOMPLETE_PROPERTY, "PERCENT-COMPLETE"}, + { ICAL_PRIORITY_PROPERTY, "PRIORITY"}, + { ICAL_PRODID_PROPERTY, "PRODID"}, + { ICAL_RDATE_PROPERTY, "RDATE"}, + { ICAL_RECURRENCEID_PROPERTY, "RECURRENCE-ID"}, + { ICAL_RELATEDTO_PROPERTY, "RELATED-TO"}, + { ICAL_REPEAT_PROPERTY, "REPEAT"}, + { ICAL_REQUESTSTATUS_PROPERTY, "REQUEST-STATUS"}, + { ICAL_RESOURCES_PROPERTY, "RESOURCES"}, + { ICAL_RRULE_PROPERTY, "RRULE"}, + { ICAL_SEQUENCE_PROPERTY, "SEQUENCE"}, + { ICAL_STATUS_PROPERTY, "STATUS"}, + { ICAL_SUMMARY_PROPERTY, "SUMMARY"}, + { ICAL_TRANSP_PROPERTY, "TRANSP"}, + { ICAL_TRIGGER_PROPERTY, "TRIGGER"}, + { ICAL_TZID_PROPERTY, "TZID"}, + { ICAL_TZNAME_PROPERTY, "TZNAME"}, + { ICAL_TZOFFSETFROM_PROPERTY, "TZOFFSETFROM"}, + { ICAL_TZOFFSETTO_PROPERTY, "TZOFFSETTO"}, + { ICAL_TZURL_PROPERTY, "TZURL"}, + { ICAL_UID_PROPERTY, "UID"}, + { ICAL_URL_PROPERTY, "URL"}, + { ICAL_VERSION_PROPERTY, "VERSION"}, + { ICAL_X_PROPERTY,"X_PROPERTY"}, + + /* CAP Object Properties */ + + { ICAL_SCOPE_PROPERTY, "SCOPE"}, + { ICAL_MAXRESULTS_PROPERTY, "MAXRESULTS"}, + { ICAL_MAXRESULTSSIZE_PROPERTY, "MAXRESULTSSIZE"}, + { ICAL_QUERY_PROPERTY, "QUERY" }, + { ICAL_QUERYNAME_PROPERTY, "QUERYNAME" }, + { ICAL_TARGET_PROPERTY, "TARGET"}, + + /* libical private properties */ + { ICAL_XLICERROR_PROPERTY,"X-LIC-ERROR"}, + { ICAL_XLICCLUSTERCOUNT_PROPERTY,"X-LIC-CLUSTERCOUNT"}, + + /* End of the list */ + { ICAL_NO_PROPERTY, ""} +}; + + +char* icalenum_property_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 icalenum_string_to_property_kind(char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_PROPERTY; + } + + for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { + if (strcmp(property_map[i].name, string) == 0) { + return property_map[i].kind; + } + } + + return ICAL_NO_PROPERTY; +} + + + + +struct icalparameter_kind_map { + icalparameter_kind kind; + char name[20]; +}; + +static struct icalparameter_kind_map parameter_map[] = +{ + { ICAL_ALTREP_PARAMETER, "ALTREP"}, + { ICAL_CN_PARAMETER, "CN"}, + { ICAL_CUTYPE_PARAMETER, "CUTYPE"}, + { ICAL_DELEGATEDFROM_PARAMETER, "DELEGATED-FROM"}, + { ICAL_DELEGATEDTO_PARAMETER, "DELEGATED-TO"}, + { ICAL_DIR_PARAMETER, "DIR"}, + { ICAL_ENCODING_PARAMETER, "ENCODING"}, + { ICAL_FBTYPE_PARAMETER, "FBTYPE"}, + { ICAL_FMTTYPE_PARAMETER, "FMTTYPE"}, + { ICAL_LANGUAGE_PARAMETER, "LANGUAGE"}, + { ICAL_MEMBER_PARAMETER, "MEMBER"}, + { ICAL_PARTSTAT_PARAMETER, "PARTSTAT"}, + { ICAL_RANGE_PARAMETER, "RANGE"}, + { ICAL_RELATED_PARAMETER, "RELATED"}, + { ICAL_RELTYPE_PARAMETER, "RELTYPE"}, + { ICAL_ROLE_PARAMETER, "ROLE"}, + { ICAL_RSVP_PARAMETER, "RSVP"}, + { ICAL_SENTBY_PARAMETER, "SENT-BY"}, + { ICAL_TZID_PARAMETER, "TZID"}, + { ICAL_VALUE_PARAMETER, "VALUE"}, + + /* CAP parameters */ + + /* libical private parameters */ + { ICAL_XLICERRORTYPE_PARAMETER, "X-LIC-ERRORTYPE"}, + { ICAL_XLICCOMPARETYPE_PARAMETER, "X-LIC-COMPARETYPE"}, + + /* End of list */ + { ICAL_NO_PARAMETER, ""} +}; + +char* icalenum_parameter_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 icalenum_string_to_parameter_kind(char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_PARAMETER; + } + + for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { + if (strcmp(parameter_map[i].name, string) == 0) { + return parameter_map[i].kind; + } + } + + return ICAL_NO_PARAMETER; +} + +struct icalvalue_kind_map { + icalvalue_kind kind; + char name[20]; +}; + +static struct icalvalue_kind_map value_map[] = +{ + { ICAL_BINARY_VALUE, "BINARY"}, + { ICAL_BOOLEAN_VALUE, "BOOLEAN"}, + { ICAL_CALADDRESS_VALUE, "CAL-ADDRESS"}, + { ICAL_DATE_VALUE, "DATE"}, + { ICAL_DATETIME_VALUE, "DATE-TIME"}, + { ICAL_DURATION_VALUE, "DURATION"}, + { ICAL_FLOAT_VALUE, "FLOAT"}, + { ICAL_INTEGER_VALUE, "INTEGER"}, + { ICAL_PERIOD_VALUE, "PERIOD"}, + { ICAL_RECUR_VALUE, "RECUR"}, + { ICAL_TEXT_VALUE, "TEXT"}, + { ICAL_TIME_VALUE, "TIME"}, + { ICAL_URI_VALUE, "URI"}, + { ICAL_UTCOFFSET_VALUE, "UTC-OFFSET"}, + { ICAL_METHOD_VALUE, "METHOD"}, /* Not an RFC2445 type */ + { ICAL_GEO_VALUE, "FLOAT"}, /* Not an RFC2445 type */ + { ICAL_ATTACH_VALUE, "XATTACH"}, /* Not an RFC2445 type */ + { ICAL_DATETIMEDATE_VALUE, "XDATETIMEDATE"}, /* Not an RFC2445 type */ + { ICAL_DATETIMEPERIOD_VALUE, "XDATETIMEPERIOD"}, /* Not an RFC2445 type */ + { ICAL_QUERY_VALUE, "QUERY"}, + { ICAL_NO_VALUE, ""}, +}; + +char* icalenum_value_kind_to_string(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 icalenum_value_kind_by_prop(icalproperty_kind kind) +{ + + return ICAL_NO_VALUE; +} + + +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_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_ANY_COMPONENT, "ANY" }, + { ICAL_XROOT_COMPONENT, "XROOT" }, + + /* End of list */ + { ICAL_NO_COMPONENT, "" }, +}; + +char* icalenum_component_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 icalenum_string_to_component_kind(char* string) +{ + int i; + + if (string ==0 ) { + return ICAL_NO_COMPONENT; + } + + for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { + if (strcmp(component_map[i].name, string) == 0) { + return component_map[i].kind; + } + } + + return ICAL_NO_COMPONENT; +} + +struct icalproperty_kind_value_map { + icalproperty_kind prop; + icalvalue_kind value; +}; + +static struct icalproperty_kind_value_map propval_map[] = +{ + { ICAL_CALSCALE_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_METHOD_PROPERTY, ICAL_METHOD_VALUE }, + { ICAL_PRODID_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_VERSION_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_CATEGORIES_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_CLASS_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_COMMENT_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_DESCRIPTION_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_LOCATION_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_PERCENTCOMPLETE_PROPERTY, ICAL_INTEGER_VALUE }, + { ICAL_PRIORITY_PROPERTY, ICAL_INTEGER_VALUE }, + { ICAL_RESOURCES_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_STATUS_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_SUMMARY_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_COMPLETED_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_FREEBUSY_PROPERTY, ICAL_PERIOD_VALUE }, + { ICAL_TRANSP_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_TZNAME_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_TZOFFSETFROM_PROPERTY, ICAL_UTCOFFSET_VALUE }, + { ICAL_TZOFFSETTO_PROPERTY, ICAL_UTCOFFSET_VALUE }, + { ICAL_TZURL_PROPERTY, ICAL_URI_VALUE }, + { ICAL_TZID_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_ATTENDEE_PROPERTY, ICAL_CALADDRESS_VALUE }, + { ICAL_CONTACT_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_ORGANIZER_PROPERTY, ICAL_CALADDRESS_VALUE }, + { ICAL_RELATEDTO_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_URL_PROPERTY, ICAL_URI_VALUE }, + { ICAL_UID_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_EXRULE_PROPERTY, ICAL_RECUR_VALUE }, + { ICAL_RRULE_PROPERTY, ICAL_RECUR_VALUE }, + { ICAL_ACTION_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_REPEAT_PROPERTY, ICAL_INTEGER_VALUE }, + { ICAL_CREATED_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_DTSTAMP_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_LASTMODIFIED_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_SEQUENCE_PROPERTY, ICAL_INTEGER_VALUE }, + { ICAL_X_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_REQUESTSTATUS_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_ATTACH_PROPERTY, ICAL_URI_VALUE }, + { ICAL_GEO_PROPERTY, ICAL_GEO_VALUE }, + { ICAL_DTEND_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_DUE_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_DTSTART_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_RECURRENCEID_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_EXDATE_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_RDATE_PROPERTY, ICAL_DATETIME_VALUE }, + { ICAL_TRIGGER_PROPERTY, ICAL_DURATION_VALUE }, + { ICAL_DURATION_PROPERTY, ICAL_DURATION_VALUE }, + + /* CAP properties */ + { ICAL_SCOPE_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_MAXRESULTS_PROPERTY, ICAL_INTEGER_VALUE}, + { ICAL_MAXRESULTSSIZE_PROPERTY, ICAL_INTEGER_VALUE}, + { ICAL_QUERY_PROPERTY, ICAL_QUERY_VALUE }, + { ICAL_QUERYNAME_PROPERTY, ICAL_TEXT_VALUE }, + { ICAL_TARGET_PROPERTY, ICAL_CALADDRESS_VALUE }, + + + /* libical private properties */ + { ICAL_XLICERROR_PROPERTY,ICAL_TEXT_VALUE}, + { ICAL_XLICCLUSTERCOUNT_PROPERTY,ICAL_INTEGER_VALUE}, + + + /* End of list */ + { ICAL_NO_PROPERTY, ICAL_NO_PROPERTY} +}; + + +icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind) +{ + int i; + + for (i=0; propval_map[i].value != ICAL_NO_VALUE; i++) { + if ( propval_map[i].prop == kind ) { + return propval_map[i].value; + } + } + + return ICAL_NO_VALUE; +} + +struct {icalrecurrencetype_weekday wd; 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} +}; + +char* icalenum_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; +} + + +struct { + icalrecurrencetype_frequency kind; + 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} +}; + +char* icalenum_recurrence_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; +} + + +struct { + icalrecurrencetype_frequency kind; + int major; + int minor; + char* str; +} 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_4_0_BUSY_STATUS, 4,0,"Event conflict. Date/time is busy."}, + {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_UNKNOWN_STATUS, 0,0,"Error: Unknown request status"} +}; + + +char* icalenum_reqstat_desc(icalrequeststatus stat) +{ + + int i; + + for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( status_map[i].kind == stat) { + return status_map[i].str; + } + } + + return 0; +} + + +short icalenum_reqstat_major(icalrequeststatus stat) +{ + int i; + + for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( status_map[i].kind == stat) { + return status_map[i].major; + } + } + return -1; +} + +short icalenum_reqstat_minor(icalrequeststatus stat) +{ + int i; + + for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( status_map[i].kind == stat) { + return status_map[i].minor; + } + } + return -1; +} + + +icalrequeststatus icalenum_num_to_reqstat(short major, short minor) +{ + int i; + + for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + if ( status_map[i].major == major && status_map[i].minor == minor) { + return status_map[i].kind; + } + } + return 0; +} + + + +struct {icalproperty_method method; char* str;} method_map[] = { + {ICAL_METHOD_PUBLISH,"PUBLISH"}, + {ICAL_METHOD_REQUEST,"REQUEST"}, + {ICAL_METHOD_REPLY,"REPLY"}, + {ICAL_METHOD_ADD,"ADD"}, + {ICAL_METHOD_CANCEL,"CANCEL"}, + {ICAL_METHOD_REFRESH,"REFRESH"}, + {ICAL_METHOD_COUNTER,"CPUNTER"}, + {ICAL_METHOD_DECLINECOUNTER,"DECLINECOUNTER"}, + /* CAP Methods */ + {ICAL_METHOD_CREATE,"CREATE"}, + {ICAL_METHOD_READ,"READ"}, + {ICAL_METHOD_RESPONSE,"RESPONSE"}, + {ICAL_METHOD_MOVE,"MOVE"}, + {ICAL_METHOD_MODIFY,"MODIFY"}, + {ICAL_METHOD_GENERATEUID,"GENERATEUID"}, + {ICAL_METHOD_DELETE,"DELETE"}, + {ICAL_METHOD_NONE,"NONE"} +}; + + +char* icalenum_method_to_string(icalproperty_method method) +{ + int i; + + for (i=0; method_map[i].method != ICAL_METHOD_NONE; i++) { + if ( method_map[i].method == method) { + return method_map[i].str; + } + } + + return 0; +} + +icalproperty_method icalenum_string_to_method(char* str) +{ + int i; + + while(*str == ' '){ + str++; + } + + + for (i=0; method_map[i].method != ICAL_METHOD_NONE; i++) { + if ( strcmp(method_map[i].str, str) == 0) { + return method_map[i].method; + } + } + + return ICAL_METHOD_NONE; +} diff --git a/libical/src/libical/icalenums.h b/libical/src/libical/icalenums.h new file mode 100644 index 0000000000..ff7cee486e --- /dev/null +++ b/libical/src/libical/icalenums.h @@ -0,0 +1,466 @@ +/* -*- Mode: C -*-*/ +/*====================================================================== + FILE: icalenums.h + + + + (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. + + The original author is Eric Busboom + 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_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 +} icalcomponent_kind; + +/*********************************************************************** + * Property Enumerations +**********************************************************************/ + +typedef enum icalproperty_kind { + ICAL_ANY_PROPERTY = 0, /* This must be the first enum, for iteration */ + ICAL_CALSCALE_PROPERTY, + ICAL_METHOD_PROPERTY, + ICAL_PRODID_PROPERTY, + ICAL_VERSION_PROPERTY, + ICAL_ATTACH_PROPERTY, + ICAL_CATEGORIES_PROPERTY, + ICAL_CLASS_PROPERTY, + ICAL_COMMENT_PROPERTY, + ICAL_DESCRIPTION_PROPERTY, + ICAL_GEO_PROPERTY, + ICAL_LOCATION_PROPERTY, + ICAL_PERCENTCOMPLETE_PROPERTY, + ICAL_PRIORITY_PROPERTY, + ICAL_RESOURCES_PROPERTY, + ICAL_STATUS_PROPERTY, + ICAL_SUMMARY_PROPERTY, + ICAL_COMPLETED_PROPERTY, + ICAL_DTEND_PROPERTY, + ICAL_DUE_PROPERTY, + ICAL_DTSTART_PROPERTY, + ICAL_DURATION_PROPERTY, + ICAL_FREEBUSY_PROPERTY, + ICAL_TRANSP_PROPERTY, + ICAL_TZID_PROPERTY, + ICAL_TZNAME_PROPERTY, + ICAL_TZOFFSETFROM_PROPERTY, + ICAL_TZOFFSETTO_PROPERTY, + ICAL_TZURL_PROPERTY, + ICAL_ATTENDEE_PROPERTY, + ICAL_CONTACT_PROPERTY, + ICAL_ORGANIZER_PROPERTY, + ICAL_RECURRENCEID_PROPERTY, + ICAL_RELATEDTO_PROPERTY, + ICAL_URL_PROPERTY, + ICAL_UID_PROPERTY, + ICAL_EXDATE_PROPERTY, + ICAL_EXRULE_PROPERTY, + ICAL_RDATE_PROPERTY, + ICAL_RRULE_PROPERTY, + ICAL_ACTION_PROPERTY, + ICAL_REPEAT_PROPERTY, + ICAL_TRIGGER_PROPERTY, + ICAL_CREATED_PROPERTY, + ICAL_DTSTAMP_PROPERTY, + ICAL_LASTMODIFIED_PROPERTY, + ICAL_SEQUENCE_PROPERTY, + ICAL_REQUESTSTATUS_PROPERTY, + ICAL_X_PROPERTY, + + /* CAP Properties */ + ICAL_SCOPE_PROPERTY, + ICAL_MAXRESULTS_PROPERTY, + ICAL_MAXRESULTSSIZE_PROPERTY, + ICAL_QUERY_PROPERTY, + ICAL_QUERYNAME_PROPERTY, + ICAL_TARGET_PROPERTY, + + /* libical private properties */ + ICAL_XLICERROR_PROPERTY, + ICAL_XLICCLUSTERCOUNT_PROPERTY, + + ICAL_NO_PROPERTY /* This must be the last enum, for iteration */ + +} icalproperty_kind; + +/*********************************************************************** + * Enumerations for the values of properties + ***********************************************************************/ + +typedef enum icalproperty_method { + ICAL_METHOD_PUBLISH, + ICAL_METHOD_REQUEST, + ICAL_METHOD_REPLY, + ICAL_METHOD_ADD, + ICAL_METHOD_CANCEL, + ICAL_METHOD_REFRESH, + ICAL_METHOD_COUNTER, + ICAL_METHOD_DECLINECOUNTER, + /* CAP Methods */ + ICAL_METHOD_CREATE, + ICAL_METHOD_READ, + ICAL_METHOD_RESPONSE, + ICAL_METHOD_MOVE, + ICAL_METHOD_MODIFY, + ICAL_METHOD_GENERATEUID, + ICAL_METHOD_DELETE, + ICAL_METHOD_NONE +} icalproperty_method ; + +typedef enum icalproperty_transp { + ICAL_TRANSP_OPAQUE, + ICAL_TRANS_TRANSPARENT +} icalproperty_trans; + +typedef enum icalproperty_calscale { + ICAL_CALSCALE_GREGORIAN +} icalproperty_calscale ; + + +typedef enum icalproperty_class { + ICAL_CLASS_PUBLIC, + ICAL_CLASS_PRIVATE, + ICAL_CLASS_CONFIDENTIAL, + ICAL_CLASS_XNAME +} icalproperty_class; + + +typedef enum icalproperty_status { + ICAL_STATUS_TENTATIVE, + ICAL_STATUS_CONFIRMED, + ICAL_STATUS_CANCELLED, /* CANCELED? SIC */ + ICAL_STATUS_NEEDSACTION, + ICAL_STATUS_COMPLETED, + ICAL_STATUS_INPROCESS, + ICAL_STATUS_DRAFT, + ICAL_STATUS_FINAL +} icalproperty_status; + +typedef enum icalproperty_action { + ICAL_ACTION_AUDIO, + ICAL_ACTION_DISPLAY, + ICAL_ACTION_EMAIL, + ICAL_ACTION_PROCEDURE, + ICAL_ACTION_XNAME +} icalproperty_action; + +/*********************************************************************** + * Value enumerations +**********************************************************************/ + +typedef enum icalvalue_kind { + ICAL_NO_VALUE, + ICAL_ATTACH_VALUE, /* Non-Standard*/ + ICAL_BINARY_VALUE, + ICAL_BOOLEAN_VALUE, + ICAL_CALADDRESS_VALUE, + ICAL_DATE_VALUE, + ICAL_DATETIME_VALUE, + ICAL_DATETIMEDATE_VALUE, /* Non-Standard */ + ICAL_DATETIMEPERIOD_VALUE, /* Non-Standard */ + ICAL_DURATION_VALUE, + ICAL_FLOAT_VALUE, + ICAL_GEO_VALUE, /* Non-Standard */ + ICAL_INTEGER_VALUE, + ICAL_METHOD_VALUE, /* Non-Standard */ + ICAL_PERIOD_VALUE, + ICAL_RECUR_VALUE, + ICAL_STRING_VALUE, /* Non-Standard */ + ICAL_TEXT_VALUE, + ICAL_TIME_VALUE, + ICAL_TRIGGER_VALUE, /* Non-Standard */ + ICAL_URI_VALUE, + ICAL_UTCOFFSET_VALUE, + ICAL_QUERY_VALUE, + ICAL_XNAME_VALUE +} icalvalue_kind; + + +/*********************************************************************** + * Parameter Enumerations + **********************************************************************/ + + +typedef enum icalparameter_kind { + ICAL_NO_PARAMETER, + ICAL_ANY_PARAMETER, + ICAL_ALTREP_PARAMETER, /* DQUOTE uri DQUOTE */ + ICAL_CN_PARAMETER, /* text */ + ICAL_CUTYPE_PARAMETER, /*INDIVIDUAL, GROUP, RESOURCE,ROOM,UNKNOWN, x-name*/ + ICAL_DELEGATEDFROM_PARAMETER, /* *("," DQUOTE cal-address DQUOTE) */ + ICAL_DELEGATEDTO_PARAMETER, /* *("," DQUOTE cal-address DQUOTE) */ + ICAL_DIR_PARAMETER, /* DQUOTE uri DQUOTE */ + ICAL_ENCODING_PARAMETER, /* *BIT, BASE64, x-name */ + ICAL_FMTTYPE_PARAMETER, /* registered MINE content type */ + ICAL_FBTYPE_PARAMETER, /* FREE, BUSY, BUSY-UNAVAILABLE, BUSY-TENTATIVE,x-name */ + ICAL_LANGUAGE_PARAMETER, /* text from RFC 1766 */ + ICAL_MEMBER_PARAMETER, /* DQUOTE cal-address DQUOTE */ + ICAL_PARTSTAT_PARAMETER, /* NEEDS-ACTION, ACCEPTED, DECLINED, TENTATIVE, DELEGATED, x-name */ + ICAL_RANGE_PARAMETER, /* THISANDPRIOR, THISANDFUTURE */ + ICAL_RELATED_PARAMETER, /* START, END */ + ICAL_RELTYPE_PARAMETER, /* PARENT, CHILD, SIBLING,x-name */ + ICAL_ROLE_PARAMETER, /* CHAIR, REQ_PARTICIPANT, OPT_PARTICIPANT, NON_PARTICIPANT, x-name */ + ICAL_RSVP_PARAMETER, /* TRUE. FALSE */ + ICAL_SENTBY_PARAMETER, /* DQUOTE uri DQUOTE */ + ICAL_TZID_PARAMETER, /* [tzidprefix] paramtext CRLF */ + ICAL_VALUE_PARAMETER, /* BINARY, BOOLEAN, CAL_ADDRESS, DATE, DATE-TIME, DURATION, FLOAT, INTEGER, PERIOD, RECUR, TEXT, TIME, UTC_OFFSET, x-name */ + ICAL_XLICERRORTYPE_PARAMETER, /*ICAL_XLICERROR_PARSE_ERROR,ICAL_XLICERROR_INVALID_ITIP*/ + ICAL_XLICCOMPARETYPE_PARAMETER, /**/ + ICAL_X_PARAMETER /* text */ +} icalparameter_kind; + +typedef enum icalparameter_cutype { + ICAL_CUTYPE_INDIVIDUAL, + ICAL_CUTYPE_GROUP, + ICAL_CUTYPE_RESOURCE, + ICAL_CUTYPE_ROOM, + ICAL_CUTYPE_UNKNOWN, + ICAL_CUTYPE_XNAME +} icalparameter_cutype; + + +typedef enum icalparameter_encoding { + ICAL_ENCODING_8BIT, + ICAL_ENCODING_BASE64, + ICAL_ENCODING_XNAME +} icalparameter_encoding; + +typedef enum icalparameter_fbtype { + ICAL_FBTYPE_FREE, + ICAL_FBTYPE_BUSY, + ICAL_FBTYPE_BUSYUNAVAILABLE, + ICAL_FBTYPE_BUSYTENTATIVE, + ICAL_FBTYPE_XNAME +} icalparameter_fbtype; + +typedef enum icalparameter_partstat { + ICAL_PARTSTAT_NEEDSACTION, + ICAL_PARTSTAT_ACCEPTED, + ICAL_PARTSTAT_DECLINED, + ICAL_PARTSTAT_TENTATIVE, + ICAL_PARTSTAT_DELEGATED, + ICAL_PARTSTAT_COMPLETED, + ICAL_PARTSTAT_INPROCESS, + ICAL_PARTSTAT_XNAME +} icalparameter_partstat; + +typedef enum icalparameter_range { + ICAL_RANGE_THISANDPRIOR, + ICAL_RANGE_THISANDFUTURE +} icalparameter_range; + +typedef enum icalparameter_related { + ICAL_RELATED_START, + ICAL_RELATED_END +} icalparameter_related; + +typedef enum icalparameter_reltype { + ICAL_RELTYPE_PARENT, + ICAL_RELTYPE_CHILD, + ICAL_RELTYPE_SIBLING, + ICAL_RELTYPE_XNAME +} icalparameter_reltype; + +typedef enum icalparameter_role { + ICAL_ROLE_CHAIR, + ICAL_ROLE_REQPARTICIPANT, + ICAL_ROLE_OPTPARTICIPANT, + ICAL_ROLE_NONPARTICIPANT, + ICAL_ROLE_XNAME +} icalparameter_role; + +typedef enum icalparameter_xlicerrortype { + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR, + ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR, + ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR, + ICAL_XLICERRORTYPE_PROPERTYPARSEERROR, + ICAL_XLICERRORTYPE_VALUEPARSEERROR, + ICAL_XLICERRORTYPE_INVALIDITIP +} icalparameter_xlicerrortype; + +typedef enum icalparameter_xliccomparetype { + ICAL_XLICCOMPARETYPE_EQUAL=0, + ICAL_XLICCOMPARETYPE_LESS=-1, + ICAL_XLICCOMPARETYPE_LESSEQUAL=2, + ICAL_XLICCOMPARETYPE_GREATER=1, + ICAL_XLICCOMPARETYPE_GREATEREQUAL=3, + ICAL_XLICCOMPARETYPE_NOTEQUAL=4, + ICAL_XLICCOMPARETYPE_REGEX=5 +} icalparameter_xliccomparetype; + +typedef enum icalparameter_value { + ICAL_VALUE_XNAME = ICAL_XNAME_VALUE, + ICAL_VALUE_BINARY = ICAL_BINARY_VALUE, + ICAL_VALUE_BOOLEAN = ICAL_BOOLEAN_VALUE, + ICAL_VALUE_CALADDRESS = ICAL_CALADDRESS_VALUE, + ICAL_VALUE_DATE = ICAL_DATE_VALUE, + ICAL_VALUE_DATETIME = ICAL_DATETIME_VALUE, + ICAL_VALUE_DURATION = ICAL_DURATION_VALUE, + ICAL_VALUE_FLOAT = ICAL_FLOAT_VALUE, + ICAL_VALUE_INTEGER = ICAL_INTEGER_VALUE, + ICAL_VALUE_PERIOD = ICAL_PERIOD_VALUE, + ICAL_VALUE_RECUR = ICAL_RECUR_VALUE, + ICAL_VALUE_TEXT = ICAL_TEXT_VALUE, + ICAL_VALUE_TIME = ICAL_TIME_VALUE, + ICAL_VALUE_UTCOFFSET = ICAL_UTCOFFSET_VALUE, + ICAL_VALUE_URI = ICAL_URI_VALUE, + ICAL_VALUE_ERROR = ICAL_NO_VALUE +} icalparameter_value; + +/*********************************************************************** + * Recurrances +**********************************************************************/ + + +typedef enum icalrecurrencetype_frequency +{ + ICAL_NO_RECURRENCE, + ICAL_SECONDLY_RECURRENCE, + ICAL_MINUTELY_RECURRENCE, + ICAL_HOURLY_RECURRENCE, + ICAL_DAILY_RECURRENCE, + ICAL_WEEKLY_RECURRENCE, + ICAL_MONTHLY_RECURRENCE, + ICAL_YEARLY_RECURRENCE +} 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 +}; + + +char* icalenum_recurrence_to_string(icalrecurrencetype_frequency kind); +char* icalenum_weekday_to_string(icalrecurrencetype_weekday 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_4_0_BUSY_STATUS, + ICAL_5_0_MAYBE_STATUS, + ICAL_5_1_UNAVAIL_STATUS, + ICAL_5_2_NOSERVICE_STATUS, + ICAL_5_3_NOSCHED_STATUS +} icalrequeststatus; + + +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); + +/*********************************************************************** + * Conversion functions +**********************************************************************/ + +char* icalenum_property_kind_to_string(icalproperty_kind kind); +icalproperty_kind icalenum_string_to_property_kind(char* string); + +char* icalenum_value_kind_to_string(icalvalue_kind kind); +icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind); + +char* icalenum_parameter_kind_to_string(icalparameter_kind kind); +icalparameter_kind icalenum_string_to_parameter_kind(char* string); + +char* icalenum_component_kind_to_string(icalcomponent_kind kind); +icalcomponent_kind icalenum_string_to_component_kind(char* string); + +icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind); + +char* icalenum_method_to_string(icalproperty_method); +icalproperty_method icalenum_string_to_method(char* string); + +#endif /* !ICALENUMS_H */ + + + diff --git a/libical/src/libical/icalerror.c b/libical/src/libical/icalerror.c new file mode 100644 index 0000000000..fb9e152b16 --- /dev/null +++ b/libical/src/libical/icalerror.c @@ -0,0 +1,99 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalerror.c + CREATOR: eric 16 May 1999 + + $Id$ + $Locker$ + + + (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. + + The original author is Eric Busboom + The original code is icalerror.c + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icalerror.h" + +icalerrorenum icalerrno; + +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); +} + + +void icalerror_clear_errno() { + + icalerrno = ICAL_NO_ERROR; +} + +void icalerror_set_errno(icalerrorenum e) { + + icalerror_stop_here(); + icalerrno = e; +} + + +struct icalerror_string_map { + icalerrorenum error; + char name[160]; +}; + +static struct icalerror_string_map string_map[] = +{ + {ICAL_BADARG_ERROR,"Bad argumnet to function"}, + {ICAL_NEWFAILED_ERROR,"Failed to create a new object via a *_new() routine"}, + {ICAL_MALFORMEDDATA_ERROR,"An input string was not correctly formed"}, + {ICAL_PARSE_ERROR,"Failed to parse a part of an iCal componet"}, + {ICAL_INTERNAL_ERROR,"Random internal error. This indicates an error in the library code, not an error in use"}, + {ICAL_FILE_ERROR,"An operation on a file failed. Check errno for more detail."}, + {ICAL_ALLOCATION_ERROR,"Failed to allocate memory"}, + {ICAL_USAGE_ERROR,"The caller failed to properly sequence called to an object's interface"}, + {ICAL_NO_ERROR,"No error"}, + {ICAL_UNKNOWN_ERROR,"Unknown error type -- icalerror_strerror() was probably given bad input"} +}; + + +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/libical/src/libical/icalerror.h b/libical/src/libical/icalerror.h new file mode 100644 index 0000000000..124699c21b --- /dev/null +++ b/libical/src/libical/icalerror.h @@ -0,0 +1,141 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalerror.h + CREATOR: eric 09 May 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalerror.h + +======================================================================*/ + + +#ifndef ICALERROR_H +#define ICALERROR_H + +#include <assert.h> +#include <stdio.h> /* For icalerror_warn() */ + +/* 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); + +#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 +#define icalerror_assert(test,message) +#endif + + +/* Check & abort if check fails */ +#ifdef ICAL_ERRORS_ARE_FATAL +#define icalerror_check_arg(test,arg) icalerror_stop_here();assert(test) +#else +#define icalerror_check_arg(test,arg) +#endif +/* Check & return void if check failes*/ + +#ifdef ICAL_ERRORS_ARE_FATAL +#define icalerror_check_arg_rv(test,arg) icalerror_stop_here();assert(test); +#else +#define icalerror_check_arg_rv(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return; } +#endif + +/* Check & return 0 if check failes*/ +#ifdef ICAL_ERRORS_ARE_FATAL +#define icalerror_check_arg_rz(test,arg) icalerror_stop_here();assert(test); +#else +#define icalerror_check_arg_rz(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} +#endif + + +/* Check & return an error if check failes*/ +#ifdef ICAL_ERRORS_ARE_FATAL +#define icalerror_check_arg_re(test,arg,error) icalerror_stop_here();assert(test); +#else +#define icalerror_check_arg_re(test,arg,error) if(!(test)) {icalerror_stop_here(); return error;} +#endif + + +/* Warning messages */ + +#ifdef ICAL_ERRORS_ARE_FATAL + +#ifdef __GNUC__ +#define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message); abort();} +#else /* __GNU_C__ */ +#define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message); abort();} +#endif /* __GNU_C__ */ + +#else /*ICAL_ERRORS_ARE_FATAL */ + +#ifdef __GNUC__ +#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__ */ + +#endif /*ICAL_ERRORS_ARE_FATAL*/ + +typedef enum icalerrorenum { + + ICAL_BADARG_ERROR, + ICAL_NEWFAILED_ERROR, + ICAL_MALFORMEDDATA_ERROR, + ICAL_PARSE_ERROR, + ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ + ICAL_FILE_ERROR, + ICAL_ALLOCATION_ERROR, + ICAL_USAGE_ERROR, + ICAL_NO_ERROR, + ICAL_MULTIPLEINCLUSION_ERROR, + ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ + +} icalerrorenum; + +extern icalerrorenum icalerrno; + + +void icalerror_clear_errno(); +void icalerror_set_errno(icalerrorenum); + +char* icalerror_strerror(icalerrorenum e); + + +#endif /* !ICALERROR_H */ + + + diff --git a/libical/src/libical/icalirip.h b/libical/src/libical/icalirip.h new file mode 100644 index 0000000000..eefbca35c5 --- /dev/null +++ b/libical/src/libical/icalirip.h @@ -0,0 +1,108 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalirip.h + CREATOR: eric 20 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalirip.h + +======================================================================*/ + + +#ifndef ICALIRIP_H +#define ICALIRIP_H + +#include "ical.h" + +typedef void* icalirip; + +/********************** Server (Reciever) Interfaces *************************/ + +icalirip* icalirip_new(); +void* icalirip_free(); + +/* Protocol functions */ +char* icalirip_process_request(icalirip* irip, char* string); + +/* iRIP server stubs */ +typedef struct icalirip_response { + char code[6]; + char caluid[1024]; + void* result; +} icalirip_response; + +icalirip_response icalirip_timedout_stub(icalirip* irip); +icalirip_response icalirip_authenticate_stub(icalirip* irip, char* mechanism, char* data); +icalirip_response icalirip_sendata_stub(icalirip* irip, unsigned int time); +icalirip_response icalirip_dequeue_stub(icalirip* irip, char* caluid,unsigned int time); +icalirip_response icalirip_recipient_stub(icalirip* irip, char* address, unsigned int time); +icalirip_response icalirip_switch_stub(icalirip* irip); +icalirip_response icalirip_disconnect_stub(icalirip* irip); +icalirip_response icalirip_unknown_stub(icalirip* irip, char* command); + +/* icalirip_set_stubs makes the module use function pointers to +instead of the above stubs. The set_stubs procedure will requires the +user to link another library with defined the above stubs and +re-directs the call to the appropriate pointer to function. */ + +typedef struct icalirip_stubs { + + void(*authenticate_stub)(icalirip* irip, char* mechanism, char* data); + void (*sendata_stub)(icalirip* irip, unsigned int time); + void (*dequeue_stub)(icalirip* irip, char* caluid, unsigned int time); + void (*recipient_stub)(icalirip* irip, char* address, unsigned int time); + void (*switch_stub)(icalirip* irip); + void (*disconnect_stub)(); + void (*unknown_stub)(icalirip* irip, char* command, char** data); + +} icalirip_stubs; + +void icalirip_set_stubs(icalirip* irip, icalirip_stubs* stubs); + +/********************** Client (Sender) Interfaces **************************/ + +/* Client API */ +icalirip_response icalirip_abort(icalirip* irip); +icalirip_response icalirip_authenticate(icalirip* irip, char* mechanism, char* data); +icalirip_response icalirip_capability(icalirip* irip); +icalirip_response icalirip_continue(icalirip* irip, unsigned int time); +icalirip_response icalirip_sendata(icalirip* irip, icalcomponent* comp, unsigned int time); +icalirip_response icalirip_recipient(icalirip* irip, char* address, unsigned int time); +icalirip_response icalirip_dequeue(icalirip* irip, char* address, unsigned int time); +icalirip_response icalirip_switch(icalirip* irip); +icalirip_response icalirip_disconnect(); +icalirip_response icalirip_unknown(icalirip* irip, char* command); + +/* client stubs */ +void icalirip_send_request(icalirip* irip,char* request); +char* icalirip_get_response(icalirip* irip); + +/********************** Configuration Interfaces **************************/ + +/* Configure capabilities */ +void icalirip_add_auth_mechanism(icalirip* irip, char* auth); +void icalirip_set_max_object_size(icalirip* irip, unsigned int size); +void icalirip_set_max_date(icalirip* irip, time_t time); +void icalirip_set_min_date(icalirip* irip, time_t time); + + +#endif /* !ICALIRIP_H */ + + + diff --git a/libical/src/libical/icalitip.output b/libical/src/libical/icalitip.output new file mode 100644 index 0000000000..1218f89c74 --- /dev/null +++ b/libical/src/libical/icalitip.output @@ -0,0 +1,1698 @@ + + +Terminals which are not used: + + FLOATNUMBER + STRING + EOL + CHARACTER + COLON + TIMESEPERATOR + BIT8 + ACCEPTED + ADD + AUDIO + BASE64 + BINARY + BOOLEAN + BUSY + BUSYTENTATIVE + BUSYUNAVAILABLE + CALADDRESS + CANCEL + CANCELLED + CHAIR + CHILD + COMPLETED + CONFIDENTIAL + CONFIRMED + COUNTER + DATE + DATETIME + DECLINECOUNTER + DECLINED + DELEGATED + DISPLAY + DRAFT + DURATION + EMAIL + END + FINAL + FLOAT + FREE + GREGORIAN + GROUP + INDIVIDUAL + INPROCESS + INTEGER + NEEDSACTION + NONPARTICIPANT + OPAQUE + OPTPARTICIPANT + PARENT + PERIOD + PRIVATE + PROCEDURE + PUBLIC + PUBLISH + RECUR + REFRESH + REPLY + REQPARTICIPANT + REQUEST + RESOURCE + ROOM + SIBLING + START + TENTATIVE + TEXT + THISANDFUTURE + THISANDPRIOR + TIME + TRANSPAENT + UNKNOWN + UTCOFFSET + XNAME + ALTREP + CN + CUTYPE + DAYLIGHT + DIR + ENCODING + EVENT + FBTYPE + FMTTYPE + LANGUAGE + MEMBER + PARTSTAT + RANGE + RELATED + RELTYPE + ROLE + RSVP + SENTBY + STANDARD + URI + + + +Grammar +rule 1 value -> binary_value +rule 2 value -> boolean_value +rule 3 value -> date_value +rule 4 value -> datetime_value +rule 5 value -> duration_value +rule 6 value -> period_value +rule 7 value -> recur_value +rule 8 value -> utcoffset_value +rule 9 value -> error +rule 10 binary_value -> "unimplemented2" +rule 11 boolean_value -> TRUE +rule 12 boolean_value -> FALSE +rule 13 date_value -> DIGITS +rule 14 utc_char -> /* empty */ +rule 15 utc_char -> UTC_CHAR +rule 16 utc_char_b -> /* empty */ +rule 17 utc_char_b -> UTC_CHAR +rule 18 datetime_value -> DIGITS TIME_CHAR DIGITS utc_char +rule 19 dur_date -> dur_day +rule 20 dur_date -> dur_day dur_time +rule 21 dur_week -> DIGITS 'W' +rule 22 dur_time -> TIME_CHAR dur_hour +rule 23 dur_time -> TIME_CHAR dur_minute +rule 24 dur_time -> TIME_CHAR dur_second +rule 25 dur_hour -> DIGITS 'H' +rule 26 dur_hour -> DIGITS 'H' dur_minute +rule 27 dur_minute -> DIGITS 'M' +rule 28 dur_minute -> DIGITS 'M' dur_second +rule 29 dur_second -> DIGITS 'S' +rule 30 dur_day -> DIGITS 'D' +rule 31 dur_prefix -> /* empty */ +rule 32 dur_prefix -> '+' +rule 33 dur_prefix -> '-' +rule 34 duration_value -> dur_prefix 'P' dur_date +rule 35 duration_value -> dur_prefix 'P' dur_time +rule 36 duration_value -> dur_prefix 'P' dur_week +rule 37 period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b +rule 38 period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' duration_value +rule 39 recur_start -> FREQ EQUALS SECONDLY +rule 40 recur_start -> FREQ EQUALS MINUTELY +rule 41 recur_start -> FREQ EQUALS HOURLY +rule 42 recur_start -> FREQ EQUALS DAILY +rule 43 recur_start -> FREQ EQUALS WEEKLY +rule 44 recur_start -> FREQ EQUALS MONTHLY +rule 45 recur_start -> FREQ EQUALS YEARLY +rule 46 weekday -> SU +rule 47 weekday -> MO +rule 48 weekday -> TU +rule 49 weekday -> WE +rule 50 weekday -> TH +rule 51 weekday -> FR +rule 52 weekday -> SA +rule 53 weekday_list -> weekday +rule 54 weekday_list -> DIGITS weekday +rule 55 weekday_list -> weekday_list COMMA weekday +rule 56 recur_list -> DIGITS +rule 57 recur_list -> recur_list COMMA DIGITS +rule 58 recur_skip -> INTERVAL EQUALS DIGITS +rule 59 recur_skip -> WKST EQUALS SU +rule 60 recur_skip -> WKST EQUALS MO +rule 61 recur_skip -> WKST EQUALS TU +rule 62 recur_skip -> WKST EQUALS WE +rule 63 recur_skip -> WKST EQUALS TH +rule 64 recur_skip -> WKST EQUALS FR +rule 65 recur_skip -> WKST EQUALS SA +rule 66 recur_skip -> BYSECOND EQUALS recur_list +rule 67 recur_skip -> BYMINUTE EQUALS recur_list +rule 68 recur_skip -> BYHOUR EQUALS recur_list +rule 69 recur_skip -> BYDAY EQUALS weekday_list +rule 70 recur_skip -> BYMONTH EQUALS recur_list +rule 71 recur_skip -> BYMONTHDAY EQUALS recur_list +rule 72 recur_skip -> BYYEARDAY EQUALS recur_list +rule 73 recur_skip -> BYWEEKNO EQUALS recur_list +rule 74 recur_skip -> BYSETPOS EQUALS recur_list +rule 75 recur_skip -> UNTIL EQUALS datetime_value +rule 76 recur_skip -> UNTIL EQUALS date_value +rule 77 recur_skip -> COUNT EQUALS DIGITS +rule 78 recur_skip_list -> /* empty */ +rule 79 recur_skip_list -> recur_skip_list SEMICOLON recur_skip +rule 80 recur_value -> recur_start recur_skip_list +rule 81 plusminus -> '+' +rule 82 plusminus -> '-' +rule 83 utcoffset_value -> plusminus INTNUMBER INTNUMBER +rule 84 utcoffset_value -> plusminus INTNUMBER INTNUMBER INTNUMBER + +Terminals, with rules where they appear + +$ (-1) +'+' (43) 32 81 +'-' (45) 33 82 +'/' (47) 37 38 +'D' (68) 30 +'H' (72) 25 26 +'M' (77) 27 28 +'P' (80) 34 35 36 +'S' (83) 29 +'W' (87) 21 +error (256) 9 +DIGITS (257) 13 18 21 25 26 27 28 29 30 37 38 54 56 57 58 77 +INTNUMBER (258) 83 84 +FLOATNUMBER (259) +STRING (260) +EOL (261) +EQUALS (262) 39 40 41 42 43 44 45 58 59 60 61 62 63 64 65 66 67 68 + 69 70 71 72 73 74 75 76 77 +CHARACTER (263) +COLON (264) +COMMA (265) 55 57 +SEMICOLON (266) 79 +TIMESEPERATOR (267) +TRUE (268) 11 +FALSE (269) 12 +FREQ (270) 39 40 41 42 43 44 45 +BYDAY (271) 69 +BYHOUR (272) 68 +BYMINUTE (273) 67 +BYMONTH (274) 70 +BYMONTHDAY (275) 71 +BYSECOND (276) 66 +BYSETPOS (277) 74 +BYWEEKNO (278) 73 +BYYEARDAY (279) 72 +DAILY (280) 42 +MINUTELY (281) 40 +MONTHLY (282) 44 +SECONDLY (283) 39 +WEEKLY (284) 43 +HOURLY (285) 41 +YEARLY (286) 45 +INTERVAL (287) 58 +COUNT (288) 77 +UNTIL (289) 75 76 +WKST (290) 59 60 61 62 63 64 65 +MO (291) 47 60 +SA (292) 52 65 +SU (293) 46 59 +TU (294) 48 61 +WE (295) 49 62 +TH (296) 50 63 +FR (297) 51 64 +BIT8 (298) +ACCEPTED (299) +ADD (300) +AUDIO (301) +BASE64 (302) +BINARY (303) +BOOLEAN (304) +BUSY (305) +BUSYTENTATIVE (306) +BUSYUNAVAILABLE (307) +CALADDRESS (308) +CANCEL (309) +CANCELLED (310) +CHAIR (311) +CHILD (312) +COMPLETED (313) +CONFIDENTIAL (314) +CONFIRMED (315) +COUNTER (316) +DATE (317) +DATETIME (318) +DECLINECOUNTER (319) +DECLINED (320) +DELEGATED (321) +DISPLAY (322) +DRAFT (323) +DURATION (324) +EMAIL (325) +END (326) +FINAL (327) +FLOAT (328) +FREE (329) +GREGORIAN (330) +GROUP (331) +INDIVIDUAL (332) +INPROCESS (333) +INTEGER (334) +NEEDSACTION (335) +NONPARTICIPANT (336) +OPAQUE (337) +OPTPARTICIPANT (338) +PARENT (339) +PERIOD (340) +PRIVATE (341) +PROCEDURE (342) +PUBLIC (343) +PUBLISH (344) +RECUR (345) +REFRESH (346) +REPLY (347) +REQPARTICIPANT (348) +REQUEST (349) +RESOURCE (350) +ROOM (351) +SIBLING (352) +START (353) +TENTATIVE (354) +TEXT (355) +THISANDFUTURE (356) +THISANDPRIOR (357) +TIME (358) +TRANSPAENT (359) +UNKNOWN (360) +UTCOFFSET (361) +XNAME (362) +ALTREP (363) +CN (364) +CUTYPE (365) +DAYLIGHT (366) +DIR (367) +ENCODING (368) +EVENT (369) +FBTYPE (370) +FMTTYPE (371) +LANGUAGE (372) +MEMBER (373) +PARTSTAT (374) +RANGE (375) +RELATED (376) +RELTYPE (377) +ROLE (378) +RSVP (379) +SENTBY (380) +STANDARD (381) +URI (382) +TIME_CHAR (383) 18 22 23 24 37 38 +UTC_CHAR (384) 15 17 +"unimplemented2" (385) 10 + +Nonterminals, with rules where they appear + +value (141) + on left: 1 2 3 4 5 6 7 8 9 +binary_value (142) + on left: 10, on right: 1 +boolean_value (143) + on left: 11 12, on right: 2 +date_value (144) + on left: 13, on right: 3 76 +utc_char (145) + on left: 14 15, on right: 18 37 38 +utc_char_b (146) + on left: 16 17, on right: 37 +datetime_value (147) + on left: 18, on right: 4 75 +dur_date (148) + on left: 19 20, on right: 34 +dur_week (149) + on left: 21, on right: 36 +dur_time (150) + on left: 22 23 24, on right: 20 35 +dur_hour (151) + on left: 25 26, on right: 22 +dur_minute (152) + on left: 27 28, on right: 23 26 +dur_second (153) + on left: 29, on right: 24 28 +dur_day (154) + on left: 30, on right: 19 20 +dur_prefix (155) + on left: 31 32 33, on right: 34 35 36 +duration_value (156) + on left: 34 35 36, on right: 5 38 +period_value (157) + on left: 37 38, on right: 6 +recur_start (158) + on left: 39 40 41 42 43 44 45, on right: 80 +weekday (159) + on left: 46 47 48 49 50 51 52, on right: 53 54 55 +weekday_list (160) + on left: 53 54 55, on right: 55 69 +recur_list (161) + on left: 56 57, on right: 57 66 67 68 70 71 72 73 74 +recur_skip (162) + on left: 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 + 76 77, on right: 79 +recur_skip_list (163) + on left: 78 79, on right: 79 80 +recur_value (164) + on left: 80, on right: 7 +plusminus (165) + on left: 81 82, on right: 83 84 +utcoffset_value (166) + on left: 83 84, on right: 8 + + +state 0 + + error shift, and go to state 1 + DIGITS shift, and go to state 2 + TRUE shift, and go to state 3 + FALSE shift, and go to state 4 + FREQ shift, and go to state 5 + "unimplemented2" shift, and go to state 6 + '+' shift, and go to state 7 + '-' shift, and go to state 8 + + 'P' reduce using rule 31 (dur_prefix) + + value go to state 133 + binary_value go to state 9 + boolean_value go to state 10 + date_value go to state 11 + datetime_value go to state 12 + dur_prefix go to state 13 + duration_value go to state 14 + period_value go to state 15 + recur_start go to state 16 + recur_value go to state 17 + plusminus go to state 18 + utcoffset_value go to state 19 + + + +state 1 + + value -> error . (rule 9) + + $default reduce using rule 9 (value) + + + +state 2 + + date_value -> DIGITS . (rule 13) + datetime_value -> DIGITS . TIME_CHAR DIGITS utc_char (rule 18) + period_value -> DIGITS . TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) + period_value -> DIGITS . TIME_CHAR DIGITS utc_char '/' duration_value (rule 38) + + TIME_CHAR shift, and go to state 20 + + $default reduce using rule 13 (date_value) + + + +state 3 + + boolean_value -> TRUE . (rule 11) + + $default reduce using rule 11 (boolean_value) + + + +state 4 + + boolean_value -> FALSE . (rule 12) + + $default reduce using rule 12 (boolean_value) + + + +state 5 + + recur_start -> FREQ . EQUALS SECONDLY (rule 39) + recur_start -> FREQ . EQUALS MINUTELY (rule 40) + recur_start -> FREQ . EQUALS HOURLY (rule 41) + recur_start -> FREQ . EQUALS DAILY (rule 42) + recur_start -> FREQ . EQUALS WEEKLY (rule 43) + recur_start -> FREQ . EQUALS MONTHLY (rule 44) + recur_start -> FREQ . EQUALS YEARLY (rule 45) + + EQUALS shift, and go to state 21 + + + +state 6 + + binary_value -> "unimplemented2" . (rule 10) + + $default reduce using rule 10 (binary_value) + + + +state 7 + + dur_prefix -> '+' . (rule 32) + plusminus -> '+' . (rule 81) + + INTNUMBER reduce using rule 81 (plusminus) + $default reduce using rule 32 (dur_prefix) + + + +state 8 + + dur_prefix -> '-' . (rule 33) + plusminus -> '-' . (rule 82) + + INTNUMBER reduce using rule 82 (plusminus) + $default reduce using rule 33 (dur_prefix) + + + +state 9 + + value -> binary_value . (rule 1) + + $default reduce using rule 1 (value) + + + +state 10 + + value -> boolean_value . (rule 2) + + $default reduce using rule 2 (value) + + + +state 11 + + value -> date_value . (rule 3) + + $default reduce using rule 3 (value) + + + +state 12 + + value -> datetime_value . (rule 4) + + $default reduce using rule 4 (value) + + + +state 13 + + duration_value -> dur_prefix . 'P' dur_date (rule 34) + duration_value -> dur_prefix . 'P' dur_time (rule 35) + duration_value -> dur_prefix . 'P' dur_week (rule 36) + + 'P' shift, and go to state 22 + + + +state 14 + + value -> duration_value . (rule 5) + + $default reduce using rule 5 (value) + + + +state 15 + + value -> period_value . (rule 6) + + $default reduce using rule 6 (value) + + + +state 16 + + recur_value -> recur_start . recur_skip_list (rule 80) + + $default reduce using rule 78 (recur_skip_list) + + recur_skip_list go to state 23 + + + +state 17 + + value -> recur_value . (rule 7) + + $default reduce using rule 7 (value) + + + +state 18 + + utcoffset_value -> plusminus . INTNUMBER INTNUMBER (rule 83) + utcoffset_value -> plusminus . INTNUMBER INTNUMBER INTNUMBER (rule 84) + + INTNUMBER shift, and go to state 24 + + + +state 19 + + value -> utcoffset_value . (rule 8) + + $default reduce using rule 8 (value) + + + +state 20 + + datetime_value -> DIGITS TIME_CHAR . DIGITS utc_char (rule 18) + period_value -> DIGITS TIME_CHAR . DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) + period_value -> DIGITS TIME_CHAR . DIGITS utc_char '/' duration_value (rule 38) + + DIGITS shift, and go to state 25 + + + +state 21 + + recur_start -> FREQ EQUALS . SECONDLY (rule 39) + recur_start -> FREQ EQUALS . MINUTELY (rule 40) + recur_start -> FREQ EQUALS . HOURLY (rule 41) + recur_start -> FREQ EQUALS . DAILY (rule 42) + recur_start -> FREQ EQUALS . WEEKLY (rule 43) + recur_start -> FREQ EQUALS . MONTHLY (rule 44) + recur_start -> FREQ EQUALS . YEARLY (rule 45) + + DAILY shift, and go to state 26 + MINUTELY shift, and go to state 27 + MONTHLY shift, and go to state 28 + SECONDLY shift, and go to state 29 + WEEKLY shift, and go to state 30 + HOURLY shift, and go to state 31 + YEARLY shift, and go to state 32 + + + +state 22 + + duration_value -> dur_prefix 'P' . dur_date (rule 34) + duration_value -> dur_prefix 'P' . dur_time (rule 35) + duration_value -> dur_prefix 'P' . dur_week (rule 36) + + DIGITS shift, and go to state 33 + TIME_CHAR shift, and go to state 34 + + dur_date go to state 35 + dur_week go to state 36 + dur_time go to state 37 + dur_day go to state 38 + + + +state 23 + + recur_skip_list -> recur_skip_list . SEMICOLON recur_skip (rule 79) + recur_value -> recur_start recur_skip_list . (rule 80) + + SEMICOLON shift, and go to state 39 + + $default reduce using rule 80 (recur_value) + + + +state 24 + + utcoffset_value -> plusminus INTNUMBER . INTNUMBER (rule 83) + utcoffset_value -> plusminus INTNUMBER . INTNUMBER INTNUMBER (rule 84) + + INTNUMBER shift, and go to state 40 + + + +state 25 + + datetime_value -> DIGITS TIME_CHAR DIGITS . utc_char (rule 18) + period_value -> DIGITS TIME_CHAR DIGITS . utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) + period_value -> DIGITS TIME_CHAR DIGITS . utc_char '/' duration_value (rule 38) + + UTC_CHAR shift, and go to state 41 + + $default reduce using rule 14 (utc_char) + + utc_char go to state 42 + + + +state 26 + + recur_start -> FREQ EQUALS DAILY . (rule 42) + + $default reduce using rule 42 (recur_start) + + + +state 27 + + recur_start -> FREQ EQUALS MINUTELY . (rule 40) + + $default reduce using rule 40 (recur_start) + + + +state 28 + + recur_start -> FREQ EQUALS MONTHLY . (rule 44) + + $default reduce using rule 44 (recur_start) + + + +state 29 + + recur_start -> FREQ EQUALS SECONDLY . (rule 39) + + $default reduce using rule 39 (recur_start) + + + +state 30 + + recur_start -> FREQ EQUALS WEEKLY . (rule 43) + + $default reduce using rule 43 (recur_start) + + + +state 31 + + recur_start -> FREQ EQUALS HOURLY . (rule 41) + + $default reduce using rule 41 (recur_start) + + + +state 32 + + recur_start -> FREQ EQUALS YEARLY . (rule 45) + + $default reduce using rule 45 (recur_start) + + + +state 33 + + dur_week -> DIGITS . 'W' (rule 21) + dur_day -> DIGITS . 'D' (rule 30) + + 'W' shift, and go to state 43 + 'D' shift, and go to state 44 + + + +state 34 + + dur_time -> TIME_CHAR . dur_hour (rule 22) + dur_time -> TIME_CHAR . dur_minute (rule 23) + dur_time -> TIME_CHAR . dur_second (rule 24) + + DIGITS shift, and go to state 45 + + dur_hour go to state 46 + dur_minute go to state 47 + dur_second go to state 48 + + + +state 35 + + duration_value -> dur_prefix 'P' dur_date . (rule 34) + + $default reduce using rule 34 (duration_value) + + + +state 36 + + duration_value -> dur_prefix 'P' dur_week . (rule 36) + + $default reduce using rule 36 (duration_value) + + + +state 37 + + duration_value -> dur_prefix 'P' dur_time . (rule 35) + + $default reduce using rule 35 (duration_value) + + + +state 38 + + dur_date -> dur_day . (rule 19) + dur_date -> dur_day . dur_time (rule 20) + + TIME_CHAR shift, and go to state 34 + + $default reduce using rule 19 (dur_date) + + dur_time go to state 49 + + + +state 39 + + recur_skip_list -> recur_skip_list SEMICOLON . recur_skip (rule 79) + + BYDAY shift, and go to state 50 + BYHOUR shift, and go to state 51 + BYMINUTE shift, and go to state 52 + BYMONTH shift, and go to state 53 + BYMONTHDAY shift, and go to state 54 + BYSECOND shift, and go to state 55 + BYSETPOS shift, and go to state 56 + BYWEEKNO shift, and go to state 57 + BYYEARDAY shift, and go to state 58 + INTERVAL shift, and go to state 59 + COUNT shift, and go to state 60 + UNTIL shift, and go to state 61 + WKST shift, and go to state 62 + + recur_skip go to state 63 + + + +state 40 + + utcoffset_value -> plusminus INTNUMBER INTNUMBER . (rule 83) + utcoffset_value -> plusminus INTNUMBER INTNUMBER . INTNUMBER (rule 84) + + INTNUMBER shift, and go to state 64 + + $default reduce using rule 83 (utcoffset_value) + + + +state 41 + + utc_char -> UTC_CHAR . (rule 15) + + $default reduce using rule 15 (utc_char) + + + +state 42 + + datetime_value -> DIGITS TIME_CHAR DIGITS utc_char . (rule 18) + period_value -> DIGITS TIME_CHAR DIGITS utc_char . '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) + period_value -> DIGITS TIME_CHAR DIGITS utc_char . '/' duration_value (rule 38) + + '/' shift, and go to state 65 + + $default reduce using rule 18 (datetime_value) + + + +state 43 + + dur_week -> DIGITS 'W' . (rule 21) + + $default reduce using rule 21 (dur_week) + + + +state 44 + + dur_day -> DIGITS 'D' . (rule 30) + + $default reduce using rule 30 (dur_day) + + + +state 45 + + dur_hour -> DIGITS . 'H' (rule 25) + dur_hour -> DIGITS . 'H' dur_minute (rule 26) + dur_minute -> DIGITS . 'M' (rule 27) + dur_minute -> DIGITS . 'M' dur_second (rule 28) + dur_second -> DIGITS . 'S' (rule 29) + + 'H' shift, and go to state 66 + 'M' shift, and go to state 67 + 'S' shift, and go to state 68 + + + +state 46 + + dur_time -> TIME_CHAR dur_hour . (rule 22) + + $default reduce using rule 22 (dur_time) + + + +state 47 + + dur_time -> TIME_CHAR dur_minute . (rule 23) + + $default reduce using rule 23 (dur_time) + + + +state 48 + + dur_time -> TIME_CHAR dur_second . (rule 24) + + $default reduce using rule 24 (dur_time) + + + +state 49 + + dur_date -> dur_day dur_time . (rule 20) + + $default reduce using rule 20 (dur_date) + + + +state 50 + + recur_skip -> BYDAY . EQUALS weekday_list (rule 69) + + EQUALS shift, and go to state 69 + + + +state 51 + + recur_skip -> BYHOUR . EQUALS recur_list (rule 68) + + EQUALS shift, and go to state 70 + + + +state 52 + + recur_skip -> BYMINUTE . EQUALS recur_list (rule 67) + + EQUALS shift, and go to state 71 + + + +state 53 + + recur_skip -> BYMONTH . EQUALS recur_list (rule 70) + + EQUALS shift, and go to state 72 + + + +state 54 + + recur_skip -> BYMONTHDAY . EQUALS recur_list (rule 71) + + EQUALS shift, and go to state 73 + + + +state 55 + + recur_skip -> BYSECOND . EQUALS recur_list (rule 66) + + EQUALS shift, and go to state 74 + + + +state 56 + + recur_skip -> BYSETPOS . EQUALS recur_list (rule 74) + + EQUALS shift, and go to state 75 + + + +state 57 + + recur_skip -> BYWEEKNO . EQUALS recur_list (rule 73) + + EQUALS shift, and go to state 76 + + + +state 58 + + recur_skip -> BYYEARDAY . EQUALS recur_list (rule 72) + + EQUALS shift, and go to state 77 + + + +state 59 + + recur_skip -> INTERVAL . EQUALS DIGITS (rule 58) + + EQUALS shift, and go to state 78 + + + +state 60 + + recur_skip -> COUNT . EQUALS DIGITS (rule 77) + + EQUALS shift, and go to state 79 + + + +state 61 + + recur_skip -> UNTIL . EQUALS datetime_value (rule 75) + recur_skip -> UNTIL . EQUALS date_value (rule 76) + + EQUALS shift, and go to state 80 + + + +state 62 + + recur_skip -> WKST . EQUALS SU (rule 59) + recur_skip -> WKST . EQUALS MO (rule 60) + recur_skip -> WKST . EQUALS TU (rule 61) + recur_skip -> WKST . EQUALS WE (rule 62) + recur_skip -> WKST . EQUALS TH (rule 63) + recur_skip -> WKST . EQUALS FR (rule 64) + recur_skip -> WKST . EQUALS SA (rule 65) + + EQUALS shift, and go to state 81 + + + +state 63 + + recur_skip_list -> recur_skip_list SEMICOLON recur_skip . (rule 79) + + $default reduce using rule 79 (recur_skip_list) + + + +state 64 + + utcoffset_value -> plusminus INTNUMBER INTNUMBER INTNUMBER . (rule 84) + + $default reduce using rule 84 (utcoffset_value) + + + +state 65 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' . DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' . duration_value (rule 38) + + DIGITS shift, and go to state 82 + '+' shift, and go to state 83 + '-' shift, and go to state 84 + + $default reduce using rule 31 (dur_prefix) + + dur_prefix go to state 13 + duration_value go to state 85 + + + +state 66 + + dur_hour -> DIGITS 'H' . (rule 25) + dur_hour -> DIGITS 'H' . dur_minute (rule 26) + + DIGITS shift, and go to state 86 + + $default reduce using rule 25 (dur_hour) + + dur_minute go to state 87 + + + +state 67 + + dur_minute -> DIGITS 'M' . (rule 27) + dur_minute -> DIGITS 'M' . dur_second (rule 28) + + DIGITS shift, and go to state 88 + + $default reduce using rule 27 (dur_minute) + + dur_second go to state 89 + + + +state 68 + + dur_second -> DIGITS 'S' . (rule 29) + + $default reduce using rule 29 (dur_second) + + + +state 69 + + recur_skip -> BYDAY EQUALS . weekday_list (rule 69) + + DIGITS shift, and go to state 90 + MO shift, and go to state 91 + SA shift, and go to state 92 + SU shift, and go to state 93 + TU shift, and go to state 94 + WE shift, and go to state 95 + TH shift, and go to state 96 + FR shift, and go to state 97 + + weekday go to state 98 + weekday_list go to state 99 + + + +state 70 + + recur_skip -> BYHOUR EQUALS . recur_list (rule 68) + + DIGITS shift, and go to state 100 + + recur_list go to state 101 + + + +state 71 + + recur_skip -> BYMINUTE EQUALS . recur_list (rule 67) + + DIGITS shift, and go to state 100 + + recur_list go to state 102 + + + +state 72 + + recur_skip -> BYMONTH EQUALS . recur_list (rule 70) + + DIGITS shift, and go to state 100 + + recur_list go to state 103 + + + +state 73 + + recur_skip -> BYMONTHDAY EQUALS . recur_list (rule 71) + + DIGITS shift, and go to state 100 + + recur_list go to state 104 + + + +state 74 + + recur_skip -> BYSECOND EQUALS . recur_list (rule 66) + + DIGITS shift, and go to state 100 + + recur_list go to state 105 + + + +state 75 + + recur_skip -> BYSETPOS EQUALS . recur_list (rule 74) + + DIGITS shift, and go to state 100 + + recur_list go to state 106 + + + +state 76 + + recur_skip -> BYWEEKNO EQUALS . recur_list (rule 73) + + DIGITS shift, and go to state 100 + + recur_list go to state 107 + + + +state 77 + + recur_skip -> BYYEARDAY EQUALS . recur_list (rule 72) + + DIGITS shift, and go to state 100 + + recur_list go to state 108 + + + +state 78 + + recur_skip -> INTERVAL EQUALS . DIGITS (rule 58) + + DIGITS shift, and go to state 109 + + + +state 79 + + recur_skip -> COUNT EQUALS . DIGITS (rule 77) + + DIGITS shift, and go to state 110 + + + +state 80 + + recur_skip -> UNTIL EQUALS . datetime_value (rule 75) + recur_skip -> UNTIL EQUALS . date_value (rule 76) + + DIGITS shift, and go to state 111 + + date_value go to state 112 + datetime_value go to state 113 + + + +state 81 + + recur_skip -> WKST EQUALS . SU (rule 59) + recur_skip -> WKST EQUALS . MO (rule 60) + recur_skip -> WKST EQUALS . TU (rule 61) + recur_skip -> WKST EQUALS . WE (rule 62) + recur_skip -> WKST EQUALS . TH (rule 63) + recur_skip -> WKST EQUALS . FR (rule 64) + recur_skip -> WKST EQUALS . SA (rule 65) + + MO shift, and go to state 114 + SA shift, and go to state 115 + SU shift, and go to state 116 + TU shift, and go to state 117 + WE shift, and go to state 118 + TH shift, and go to state 119 + FR shift, and go to state 120 + + + +state 82 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS . TIME_CHAR DIGITS utc_char_b (rule 37) + + TIME_CHAR shift, and go to state 121 + + + +state 83 + + dur_prefix -> '+' . (rule 32) + + $default reduce using rule 32 (dur_prefix) + + + +state 84 + + dur_prefix -> '-' . (rule 33) + + $default reduce using rule 33 (dur_prefix) + + + +state 85 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' duration_value . (rule 38) + + $default reduce using rule 38 (period_value) + + + +state 86 + + dur_minute -> DIGITS . 'M' (rule 27) + dur_minute -> DIGITS . 'M' dur_second (rule 28) + + 'M' shift, and go to state 67 + + + +state 87 + + dur_hour -> DIGITS 'H' dur_minute . (rule 26) + + $default reduce using rule 26 (dur_hour) + + + +state 88 + + dur_second -> DIGITS . 'S' (rule 29) + + 'S' shift, and go to state 68 + + + +state 89 + + dur_minute -> DIGITS 'M' dur_second . (rule 28) + + $default reduce using rule 28 (dur_minute) + + + +state 90 + + weekday_list -> DIGITS . weekday (rule 54) + + MO shift, and go to state 91 + SA shift, and go to state 92 + SU shift, and go to state 93 + TU shift, and go to state 94 + WE shift, and go to state 95 + TH shift, and go to state 96 + FR shift, and go to state 97 + + weekday go to state 122 + + + +state 91 + + weekday -> MO . (rule 47) + + $default reduce using rule 47 (weekday) + + + +state 92 + + weekday -> SA . (rule 52) + + $default reduce using rule 52 (weekday) + + + +state 93 + + weekday -> SU . (rule 46) + + $default reduce using rule 46 (weekday) + + + +state 94 + + weekday -> TU . (rule 48) + + $default reduce using rule 48 (weekday) + + + +state 95 + + weekday -> WE . (rule 49) + + $default reduce using rule 49 (weekday) + + + +state 96 + + weekday -> TH . (rule 50) + + $default reduce using rule 50 (weekday) + + + +state 97 + + weekday -> FR . (rule 51) + + $default reduce using rule 51 (weekday) + + + +state 98 + + weekday_list -> weekday . (rule 53) + + $default reduce using rule 53 (weekday_list) + + + +state 99 + + weekday_list -> weekday_list . COMMA weekday (rule 55) + recur_skip -> BYDAY EQUALS weekday_list . (rule 69) + + COMMA shift, and go to state 123 + + $default reduce using rule 69 (recur_skip) + + + +state 100 + + recur_list -> DIGITS . (rule 56) + + $default reduce using rule 56 (recur_list) + + + +state 101 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYHOUR EQUALS recur_list . (rule 68) + + COMMA shift, and go to state 124 + + $default reduce using rule 68 (recur_skip) + + + +state 102 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYMINUTE EQUALS recur_list . (rule 67) + + COMMA shift, and go to state 124 + + $default reduce using rule 67 (recur_skip) + + + +state 103 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYMONTH EQUALS recur_list . (rule 70) + + COMMA shift, and go to state 124 + + $default reduce using rule 70 (recur_skip) + + + +state 104 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYMONTHDAY EQUALS recur_list . (rule 71) + + COMMA shift, and go to state 124 + + $default reduce using rule 71 (recur_skip) + + + +state 105 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYSECOND EQUALS recur_list . (rule 66) + + COMMA shift, and go to state 124 + + $default reduce using rule 66 (recur_skip) + + + +state 106 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYSETPOS EQUALS recur_list . (rule 74) + + COMMA shift, and go to state 124 + + $default reduce using rule 74 (recur_skip) + + + +state 107 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYWEEKNO EQUALS recur_list . (rule 73) + + COMMA shift, and go to state 124 + + $default reduce using rule 73 (recur_skip) + + + +state 108 + + recur_list -> recur_list . COMMA DIGITS (rule 57) + recur_skip -> BYYEARDAY EQUALS recur_list . (rule 72) + + COMMA shift, and go to state 124 + + $default reduce using rule 72 (recur_skip) + + + +state 109 + + recur_skip -> INTERVAL EQUALS DIGITS . (rule 58) + + $default reduce using rule 58 (recur_skip) + + + +state 110 + + recur_skip -> COUNT EQUALS DIGITS . (rule 77) + + $default reduce using rule 77 (recur_skip) + + + +state 111 + + date_value -> DIGITS . (rule 13) + datetime_value -> DIGITS . TIME_CHAR DIGITS utc_char (rule 18) + + TIME_CHAR shift, and go to state 125 + + $default reduce using rule 13 (date_value) + + + +state 112 + + recur_skip -> UNTIL EQUALS date_value . (rule 76) + + $default reduce using rule 76 (recur_skip) + + + +state 113 + + recur_skip -> UNTIL EQUALS datetime_value . (rule 75) + + $default reduce using rule 75 (recur_skip) + + + +state 114 + + recur_skip -> WKST EQUALS MO . (rule 60) + + $default reduce using rule 60 (recur_skip) + + + +state 115 + + recur_skip -> WKST EQUALS SA . (rule 65) + + $default reduce using rule 65 (recur_skip) + + + +state 116 + + recur_skip -> WKST EQUALS SU . (rule 59) + + $default reduce using rule 59 (recur_skip) + + + +state 117 + + recur_skip -> WKST EQUALS TU . (rule 61) + + $default reduce using rule 61 (recur_skip) + + + +state 118 + + recur_skip -> WKST EQUALS WE . (rule 62) + + $default reduce using rule 62 (recur_skip) + + + +state 119 + + recur_skip -> WKST EQUALS TH . (rule 63) + + $default reduce using rule 63 (recur_skip) + + + +state 120 + + recur_skip -> WKST EQUALS FR . (rule 64) + + $default reduce using rule 64 (recur_skip) + + + +state 121 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR . DIGITS utc_char_b (rule 37) + + DIGITS shift, and go to state 126 + + + +state 122 + + weekday_list -> DIGITS weekday . (rule 54) + + $default reduce using rule 54 (weekday_list) + + + +state 123 + + weekday_list -> weekday_list COMMA . weekday (rule 55) + + MO shift, and go to state 91 + SA shift, and go to state 92 + SU shift, and go to state 93 + TU shift, and go to state 94 + WE shift, and go to state 95 + TH shift, and go to state 96 + FR shift, and go to state 97 + + weekday go to state 127 + + + +state 124 + + recur_list -> recur_list COMMA . DIGITS (rule 57) + + DIGITS shift, and go to state 128 + + + +state 125 + + datetime_value -> DIGITS TIME_CHAR . DIGITS utc_char (rule 18) + + DIGITS shift, and go to state 129 + + + +state 126 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS . utc_char_b (rule 37) + + UTC_CHAR shift, and go to state 130 + + $default reduce using rule 16 (utc_char_b) + + utc_char_b go to state 131 + + + +state 127 + + weekday_list -> weekday_list COMMA weekday . (rule 55) + + $default reduce using rule 55 (weekday_list) + + + +state 128 + + recur_list -> recur_list COMMA DIGITS . (rule 57) + + $default reduce using rule 57 (recur_list) + + + +state 129 + + datetime_value -> DIGITS TIME_CHAR DIGITS . utc_char (rule 18) + + UTC_CHAR shift, and go to state 41 + + $default reduce using rule 14 (utc_char) + + utc_char go to state 132 + + + +state 130 + + utc_char_b -> UTC_CHAR . (rule 17) + + $default reduce using rule 17 (utc_char_b) + + + +state 131 + + period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b . (rule 37) + + $default reduce using rule 37 (period_value) + + + +state 132 + + datetime_value -> DIGITS TIME_CHAR DIGITS utc_char . (rule 18) + + $default reduce using rule 18 (datetime_value) + + + +state 133 + + $ go to state 134 + + + +state 134 + + $ go to state 135 + + + +state 135 + + $default accept diff --git a/libical/src/libical/icalitip.tab.c b/libical/src/libical/icalitip.tab.c new file mode 100644 index 0000000000..82536647e3 --- /dev/null +++ b/libical/src/libical/icalitip.tab.c @@ -0,0 +1,1663 @@ + +/* A Bison parser, made from icalitip.y + by GNU Bison version 1.28 */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define yyparse icalparser_yyparse +#define yylex icalparser_yylex +#define yyerror icalparser_yyerror +#define yylval icalparser_yylval +#define yychar icalparser_yychar +#define yydebug icalparser_yydebug +#define yynerrs icalparser_yynerrs +#define DIGITS 257 +#define INTNUMBER 258 +#define FLOATNUMBER 259 +#define STRING 260 +#define EOL 261 +#define EQUALS 262 +#define CHARACTER 263 +#define COLON 264 +#define COMMA 265 +#define SEMICOLON 266 +#define TIMESEPERATOR 267 +#define TRUE 268 +#define FALSE 269 +#define FREQ 270 +#define BYDAY 271 +#define BYHOUR 272 +#define BYMINUTE 273 +#define BYMONTH 274 +#define BYMONTHDAY 275 +#define BYSECOND 276 +#define BYSETPOS 277 +#define BYWEEKNO 278 +#define BYYEARDAY 279 +#define DAILY 280 +#define MINUTELY 281 +#define MONTHLY 282 +#define SECONDLY 283 +#define WEEKLY 284 +#define HOURLY 285 +#define YEARLY 286 +#define INTERVAL 287 +#define COUNT 288 +#define UNTIL 289 +#define WKST 290 +#define MO 291 +#define SA 292 +#define SU 293 +#define TU 294 +#define WE 295 +#define TH 296 +#define FR 297 +#define BIT8 298 +#define ACCEPTED 299 +#define ADD 300 +#define AUDIO 301 +#define BASE64 302 +#define BINARY 303 +#define BOOLEAN 304 +#define BUSY 305 +#define BUSYTENTATIVE 306 +#define BUSYUNAVAILABLE 307 +#define CALADDRESS 308 +#define CANCEL 309 +#define CANCELLED 310 +#define CHAIR 311 +#define CHILD 312 +#define COMPLETED 313 +#define CONFIDENTIAL 314 +#define CONFIRMED 315 +#define COUNTER 316 +#define DATE 317 +#define DATETIME 318 +#define DECLINECOUNTER 319 +#define DECLINED 320 +#define DELEGATED 321 +#define DISPLAY 322 +#define DRAFT 323 +#define DURATION 324 +#define EMAIL 325 +#define END 326 +#define FINAL 327 +#define FLOAT 328 +#define FREE 329 +#define GREGORIAN 330 +#define GROUP 331 +#define INDIVIDUAL 332 +#define INPROCESS 333 +#define INTEGER 334 +#define NEEDSACTION 335 +#define NONPARTICIPANT 336 +#define OPAQUE 337 +#define OPTPARTICIPANT 338 +#define PARENT 339 +#define PERIOD 340 +#define PRIVATE 341 +#define PROCEDURE 342 +#define PUBLIC 343 +#define PUBLISH 344 +#define RECUR 345 +#define REFRESH 346 +#define REPLY 347 +#define REQPARTICIPANT 348 +#define REQUEST 349 +#define RESOURCE 350 +#define ROOM 351 +#define SIBLING 352 +#define START 353 +#define TENTATIVE 354 +#define TEXT 355 +#define THISANDFUTURE 356 +#define THISANDPRIOR 357 +#define TIME 358 +#define TRANSPAENT 359 +#define UNKNOWN 360 +#define UTCOFFSET 361 +#define XNAME 362 +#define ALTREP 363 +#define CN 364 +#define CUTYPE 365 +#define DAYLIGHT 366 +#define DIR 367 +#define ENCODING 368 +#define EVENT 369 +#define FBTYPE 370 +#define FMTTYPE 371 +#define LANGUAGE 372 +#define MEMBER 373 +#define PARTSTAT 374 +#define RANGE 375 +#define RELATED 376 +#define RELTYPE 377 +#define ROLE 378 +#define RSVP 379 +#define SENTBY 380 +#define STANDARD 381 +#define URI 382 +#define TIME_CHAR 383 +#define UTC_CHAR 384 + +#line 1 "icalitip.y" + +/* -*- Mode: C -*- + ====================================================================== + FILE: icalitip.y + CREATOR: eric 10 June 1999 + + DESCRIPTION: + + $Id$ + $Locker$ + + (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. + + The original author is Eric Busboom + The original code is icalitip.y + + + + ================================b======================================*/ + +#include <stdlib.h> +#include <string.h> /* for strdup() */ +#include <limits.h> /* for SHRT_MAX*/ +#include "icalparser.h" +#include "ical.h" +#include "pvl.h" + +#define YYERROR_VERBOSE +#define YYDEBUG 1 + +icalvalue *icalparser_yy_value; /* Current Value */ + +/* Globals for UTCOFFSET values */ +int utc; +int utc_b; +int utcsign; + +/* Globals for DURATION values */ +struct icaldurationtype duration; + +/* Globals for RECUR values */ +struct icalrecurrencetype recur; +short skiplist[367]; +short skippos; + +void copy_list(short* array, size_t size); +void clear_recur(); +void add_prop(icalproperty_kind); +void icalparser_fill_date(struct tm* t, char* dstr); +void icalparser_fill_time(struct tm* t, char* tstr); +void set_value_type(icalvalue_kind kind); +void yyerror(char *s); /* Don't know why I need this.... */ +int yylex(void); /* Or this. */ +void set_parser_value_state(); +struct icaltimetype fill_datetime(char* d, char* t); + + + +/* Set the state of the lexer so it will interpret values ( iCAL + VALUEs, that is, ) correctly. */ + + +#line 75 "icalitip.y" +typedef union { + float v_float; + int v_int; + char* v_string; + +} YYSTYPE; +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define YYFINAL 135 +#define YYFLAG -32768 +#define YYNTBASE 141 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 167) + +static const short yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 137, 2, 138, 2, 140, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 136, 2, 2, + 2, 133, 2, 2, 2, 2, 134, 2, 2, 139, + 2, 2, 135, 2, 2, 2, 132, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, + 20, 22, 24, 26, 27, 29, 30, 32, 37, 39, + 42, 45, 48, 51, 54, 57, 61, 64, 68, 71, + 74, 75, 77, 79, 83, 87, 91, 101, 108, 112, + 116, 120, 124, 128, 132, 136, 138, 140, 142, 144, + 146, 148, 150, 152, 155, 159, 161, 165, 169, 173, + 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, + 217, 221, 225, 229, 233, 237, 241, 245, 246, 250, + 253, 255, 257, 261 +}; + +static const short yyrhs[] = { 142, + 0, 143, 0, 144, 0, 147, 0, 156, 0, 157, + 0, 164, 0, 166, 0, 1, 0, 131, 0, 14, + 0, 15, 0, 3, 0, 0, 130, 0, 0, 130, + 0, 3, 129, 3, 145, 0, 154, 0, 154, 150, + 0, 3, 132, 0, 129, 151, 0, 129, 152, 0, + 129, 153, 0, 3, 133, 0, 3, 133, 152, 0, + 3, 134, 0, 3, 134, 153, 0, 3, 135, 0, + 3, 136, 0, 0, 137, 0, 138, 0, 155, 139, + 148, 0, 155, 139, 150, 0, 155, 139, 149, 0, + 3, 129, 3, 145, 140, 3, 129, 3, 146, 0, + 3, 129, 3, 145, 140, 156, 0, 16, 8, 29, + 0, 16, 8, 27, 0, 16, 8, 31, 0, 16, + 8, 26, 0, 16, 8, 30, 0, 16, 8, 28, + 0, 16, 8, 32, 0, 39, 0, 37, 0, 40, + 0, 41, 0, 42, 0, 43, 0, 38, 0, 159, + 0, 3, 159, 0, 160, 11, 159, 0, 3, 0, + 161, 11, 3, 0, 33, 8, 3, 0, 36, 8, + 39, 0, 36, 8, 37, 0, 36, 8, 40, 0, + 36, 8, 41, 0, 36, 8, 42, 0, 36, 8, + 43, 0, 36, 8, 38, 0, 22, 8, 161, 0, + 19, 8, 161, 0, 18, 8, 161, 0, 17, 8, + 160, 0, 20, 8, 161, 0, 21, 8, 161, 0, + 25, 8, 161, 0, 24, 8, 161, 0, 23, 8, + 161, 0, 35, 8, 147, 0, 35, 8, 144, 0, + 34, 8, 3, 0, 0, 163, 12, 162, 0, 158, + 163, 0, 137, 0, 138, 0, 165, 4, 4, 0, + 165, 4, 4, 4, 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 112, 114, 115, 116, 117, 118, 119, 120, 121, 127, + 129, 132, 135, 150, 152, 155, 157, 159, 175, 176, + 178, 183, 186, 189, 193, 197, 202, 206, 211, 216, + 221, 224, 227, 231, 236, 241, 250, 271, 303, 305, + 306, 307, 308, 309, 310, 314, 316, 317, 318, 319, + 320, 321, 325, 327, 328, 331, 333, 336, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 357, 360, 364, 366, 368, + 376, 377, 379, 385 +}; +#endif + + +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + +static const char * const yytname[] = { "$","error","$undefined.","DIGITS", +"INTNUMBER","FLOATNUMBER","STRING","EOL","EQUALS","CHARACTER","COLON","COMMA", +"SEMICOLON","TIMESEPERATOR","TRUE","FALSE","FREQ","BYDAY","BYHOUR","BYMINUTE", +"BYMONTH","BYMONTHDAY","BYSECOND","BYSETPOS","BYWEEKNO","BYYEARDAY","DAILY", +"MINUTELY","MONTHLY","SECONDLY","WEEKLY","HOURLY","YEARLY","INTERVAL","COUNT", +"UNTIL","WKST","MO","SA","SU","TU","WE","TH","FR","BIT8","ACCEPTED","ADD","AUDIO", +"BASE64","BINARY","BOOLEAN","BUSY","BUSYTENTATIVE","BUSYUNAVAILABLE","CALADDRESS", +"CANCEL","CANCELLED","CHAIR","CHILD","COMPLETED","CONFIDENTIAL","CONFIRMED", +"COUNTER","DATE","DATETIME","DECLINECOUNTER","DECLINED","DELEGATED","DISPLAY", +"DRAFT","DURATION","EMAIL","END","FINAL","FLOAT","FREE","GREGORIAN","GROUP", +"INDIVIDUAL","INPROCESS","INTEGER","NEEDSACTION","NONPARTICIPANT","OPAQUE","OPTPARTICIPANT", +"PARENT","PERIOD","PRIVATE","PROCEDURE","PUBLIC","PUBLISH","RECUR","REFRESH", +"REPLY","REQPARTICIPANT","REQUEST","RESOURCE","ROOM","SIBLING","START","TENTATIVE", +"TEXT","THISANDFUTURE","THISANDPRIOR","TIME","TRANSPAENT","UNKNOWN","UTCOFFSET", +"XNAME","ALTREP","CN","CUTYPE","DAYLIGHT","DIR","ENCODING","EVENT","FBTYPE", +"FMTTYPE","LANGUAGE","MEMBER","PARTSTAT","RANGE","RELATED","RELTYPE","ROLE", +"RSVP","SENTBY","STANDARD","URI","TIME_CHAR","UTC_CHAR","\"unimplemented2\"", +"'W'","'H'","'M'","'S'","'D'","'+'","'-'","'P'","'/'","value","binary_value", +"boolean_value","date_value","utc_char","utc_char_b","datetime_value","dur_date", +"dur_week","dur_time","dur_hour","dur_minute","dur_second","dur_day","dur_prefix", +"duration_value","period_value","recur_start","weekday","weekday_list","recur_list", +"recur_skip","recur_skip_list","recur_value","plusminus","utcoffset_value", NULL +}; +#endif + +static const short yyr1[] = { 0, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, + 143, 143, 144, 145, 145, 146, 146, 147, 148, 148, + 149, 150, 150, 150, 151, 151, 152, 152, 153, 154, + 155, 155, 155, 156, 156, 156, 157, 157, 158, 158, + 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, + 159, 159, 160, 160, 160, 161, 161, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 163, 163, 164, + 165, 165, 166, 166 +}; + +static const short yyr2[] = { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 0, 1, 4, 1, 2, + 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, + 0, 1, 1, 3, 3, 3, 9, 6, 3, 3, + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 3, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, + 1, 1, 3, 4 +}; + +static const short yydefact[] = { 0, + 9, 13, 11, 12, 0, 10, 32, 33, 1, 2, + 3, 4, 0, 5, 6, 78, 7, 0, 8, 0, + 0, 0, 80, 0, 14, 42, 40, 44, 39, 43, + 41, 45, 0, 0, 34, 36, 35, 19, 0, 83, + 15, 18, 21, 30, 0, 22, 23, 24, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 79, 84, 31, 25, 27, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 33, 38, 0, 26, 0, 28, 0, + 47, 52, 46, 48, 49, 50, 51, 53, 69, 56, + 68, 67, 70, 71, 66, 74, 73, 72, 58, 77, + 13, 76, 75, 60, 65, 59, 61, 62, 63, 64, + 0, 54, 0, 0, 0, 16, 55, 57, 14, 17, + 37, 18, 0, 0, 0 +}; + +static const short yydefgoto[] = { 133, + 9, 10, 11, 42, 131, 12, 35, 36, 37, 46, + 47, 48, 38, 13, 14, 15, 16, 98, 99, 101, + 63, 23, 17, 18, 19 +}; + +static const short yypact[] = { -1, +-32768, -123,-32768,-32768, 1,-32768, 3, 6,-32768,-32768, +-32768,-32768, -127,-32768,-32768,-32768,-32768, 64,-32768, 66, + -10, -2, 58, 67, -58,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, -128, 70,-32768,-32768,-32768, -55, 28, 71, +-32768, -64,-32768,-32768, -68,-32768,-32768,-32768,-32768, 69, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83,-32768,-32768, 2, 89, 90,-32768, 0, 91, + 91, 91, 91, 91, 91, 91, 91, 92, 93, 94, + -14, -51,-32768,-32768,-32768, -36,-32768, -56,-32768, -7, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 88,-32768, + 95, 95, 95, 95, 95, 95, 95, 95,-32768,-32768, + -29,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 98,-32768, -7, 99, 100, -26,-32768,-32768, -58,-32768, +-32768,-32768, 105, 107,-32768 +}; + +static const short yypgoto[] = {-32768, +-32768,-32768, 29, -21,-32768, 30,-32768,-32768, 84,-32768, + 45, 46,-32768,-32768, 47,-32768,-32768, -79,-32768, -17, +-32768,-32768,-32768,-32768,-32768 +}; + + +#define YYLAST 140 + + +static const short yytable[] = { 1, + 33, 2, 90, 43, 82, 20, -81, 44, 21, -82, + 122, 22, 3, 4, 5, 26, 27, 28, 29, 30, + 31, 32, 114, 115, 116, 117, 118, 119, 120, 91, + 92, 93, 94, 95, 96, 97, 91, 92, 93, 94, + 95, 96, 97, 127, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 102, 103, 104, 105, 106, 107, 108, + 59, 60, 61, 62, 66, 67, 68, 24, 25, 39, + 40, 41, 45, 34, 64, 65, 69, 121, 68, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 86, 88, 100, 109, 110, 111, 67, 123, 125, + 126, 128, 129, 130, 134, 124, 135, 132, 112, 113, + 87, 85, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 0, 0, 0, 0, 34, 0, 0, 6, + 0, 0, 0, 0, 0, 7, 8, -31, 83, 84 +}; + +static const short yycheck[] = { 1, + 3, 3, 3, 132, 3, 129, 4, 136, 8, 4, + 90, 139, 14, 15, 16, 26, 27, 28, 29, 30, + 31, 32, 37, 38, 39, 40, 41, 42, 43, 37, + 38, 39, 40, 41, 42, 43, 37, 38, 39, 40, + 41, 42, 43, 123, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 71, 72, 73, 74, 75, 76, 77, + 33, 34, 35, 36, 133, 134, 135, 4, 3, 12, + 4, 130, 3, 129, 4, 140, 8, 129, 135, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 3, 3, 3, 3, 3, 3, 134, 11, 129, + 3, 3, 3, 130, 0, 11, 0, 129, 80, 80, + 66, 65, 67, -1, -1, -1, -1, -1, -1, -1, + -1, 38, -1, -1, -1, -1, 129, -1, -1, 131, + -1, -1, -1, -1, -1, 137, 138, 139, 137, 138 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/lib/bison.simple" +/* This file comes from bison-1.28. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + 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, 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include <alloca.h> +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include <malloc.h> +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include <malloc.h> */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ + +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, unsigned int count) +{ + register char *t = to; + register char *f = from; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 217 "/usr/lib/bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +#ifdef YYPARSE_PARAM +int yyparse (void *); +#else +int yyparse (void); +#endif +#endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 9: +#line 121 "icalitip.y" +{ + icalparser_yy_value = 0; + icalparser_clear_flex_input(); + yyclearin; + ; + break;} +case 11: +#line 131 "icalitip.y" +{ icalparser_yy_value = icalvalue_new_boolean(1); ; + break;} +case 12: +#line 133 "icalitip.y" +{ icalparser_yy_value = icalvalue_new_boolean(0); ; + break;} +case 13: +#line 136 "icalitip.y" +{ + struct icaltimetype stm; + + stm = fill_datetime(yyvsp[0].v_string,0); + + stm.hour = -1; + stm.minute = -1; + stm.second = -1; + stm.is_utc = 0; + stm.is_date = 1; + + icalparser_yy_value = icalvalue_new_date(stm); + ; + break;} +case 14: +#line 151 "icalitip.y" +{utc = 0;; + break;} +case 15: +#line 152 "icalitip.y" +{utc = 1;; + break;} +case 16: +#line 156 "icalitip.y" +{utc_b = 0;; + break;} +case 17: +#line 157 "icalitip.y" +{utc_b = 1;; + break;} +case 18: +#line 161 "icalitip.y" +{ + struct icaltimetype stm; + stm = fill_datetime(yyvsp[-3].v_string, yyvsp[-1].v_string); + stm.is_utc = utc; + stm.is_date = 0; + + icalparser_yy_value = + icalvalue_new_datetime(stm); + ; + break;} +case 21: +#line 179 "icalitip.y" +{ + duration.weeks = atoi(yyvsp[-1].v_string); + ; + break;} +case 22: +#line 184 "icalitip.y" +{ + ; + break;} +case 23: +#line 187 "icalitip.y" +{ + ; + break;} +case 24: +#line 190 "icalitip.y" +{ + ; + break;} +case 25: +#line 194 "icalitip.y" +{ + duration.hours = atoi(yyvsp[-1].v_string); + ; + break;} +case 26: +#line 198 "icalitip.y" +{ + duration.hours = atoi(yyvsp[-2].v_string); + ; + break;} +case 27: +#line 203 "icalitip.y" +{ + duration.minutes = atoi(yyvsp[-1].v_string); + ; + break;} +case 28: +#line 207 "icalitip.y" +{ + duration.minutes = atoi(yyvsp[-2].v_string); + ; + break;} +case 29: +#line 212 "icalitip.y" +{ + duration.seconds = atoi(yyvsp[-1].v_string); + ; + break;} +case 30: +#line 217 "icalitip.y" +{ + duration.days = atoi(yyvsp[-1].v_string); + ; + break;} +case 31: +#line 222 "icalitip.y" +{ + ; + break;} +case 32: +#line 225 "icalitip.y" +{ + ; + break;} +case 33: +#line 228 "icalitip.y" +{ + ; + break;} +case 34: +#line 232 "icalitip.y" +{ + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + ; + break;} +case 35: +#line 237 "icalitip.y" +{ + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + ; + break;} +case 36: +#line 242 "icalitip.y" +{ + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + ; + break;} +case 37: +#line 251 "icalitip.y" +{ + struct icalperiodtype p; + + p.start = fill_datetime(yyvsp[-8].v_string,yyvsp[-6].v_string); + p.start.is_utc = utc; + p.start.is_date = 0; + + + p.end = fill_datetime(yyvsp[-3].v_string,yyvsp[-1].v_string); + p.end.is_utc = utc_b; + p.end.is_date = 0; + + p.duration.days = -1; + p.duration.weeks = -1; + p.duration.hours = -1; + p.duration.minutes = -1; + p.duration.seconds = -1; + + icalparser_yy_value = icalvalue_new_period(p); + ; + break;} +case 38: +#line 272 "icalitip.y" +{ + struct icalperiodtype p; + + p.start = fill_datetime(yyvsp[-5].v_string,yyvsp[-3].v_string); + p.start.is_utc = utc; + p.start.is_date = 0; + + p.end.year = -1; + p.end.month = -1; + p.end.day = -1; + p.end.hour = -1; + p.end.minute = -1; + p.end.second = -1; + + /* The duration_value rule setes the global 'duration' + variable, but it also creates a new value in + icalparser_yy_value. So, free that, then copy + 'duration' into the icalperiodtype struct. */ + + p.duration = icalvalue_get_duration(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); + icalparser_yy_value = 0; + + icalparser_yy_value = icalvalue_new_period(p); + + ; + break;} +case 39: +#line 304 "icalitip.y" +{clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;; + break;} +case 40: +#line 305 "icalitip.y" +{clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;; + break;} +case 41: +#line 306 "icalitip.y" +{clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;; + break;} +case 42: +#line 307 "icalitip.y" +{clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;; + break;} +case 43: +#line 308 "icalitip.y" +{clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;; + break;} +case 44: +#line 309 "icalitip.y" +{clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;; + break;} +case 45: +#line 310 "icalitip.y" +{clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;; + break;} +case 46: +#line 315 "icalitip.y" +{ skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;; + break;} +case 47: +#line 316 "icalitip.y" +{ skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 48: +#line 317 "icalitip.y" +{ skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 49: +#line 318 "icalitip.y" +{ skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 50: +#line 319 "icalitip.y" +{ skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 51: +#line 320 "icalitip.y" +{ skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 52: +#line 321 "icalitip.y" +{ skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;; + break;} +case 54: +#line 327 "icalitip.y" +{ ; + break;} +case 56: +#line 332 "icalitip.y" +{ skiplist[skippos] = atoi(yyvsp[0].v_string); skippos++;; + break;} +case 57: +#line 333 "icalitip.y" +{ skiplist[skippos] = atoi(yyvsp[0].v_string); if (skippos<367) skippos++;; + break;} +case 58: +#line 337 "icalitip.y" +{recur.interval = atoi(yyvsp[0].v_string);; + break;} +case 59: +#line 338 "icalitip.y" +{recur.week_start = ICAL_SUNDAY_WEEKDAY;; + break;} +case 60: +#line 339 "icalitip.y" +{recur.week_start = ICAL_MONDAY_WEEKDAY;; + break;} +case 61: +#line 340 "icalitip.y" +{recur.week_start = ICAL_TUESDAY_WEEKDAY;; + break;} +case 62: +#line 341 "icalitip.y" +{recur.week_start = ICAL_WEDNESDAY_WEEKDAY;; + break;} +case 63: +#line 342 "icalitip.y" +{recur.week_start = ICAL_THURSDAY_WEEKDAY;; + break;} +case 64: +#line 343 "icalitip.y" +{recur.week_start = ICAL_FRIDAY_WEEKDAY;; + break;} +case 65: +#line 344 "icalitip.y" +{recur.week_start = ICAL_SATURDAY_WEEKDAY;; + break;} +case 66: +#line 345 "icalitip.y" +{copy_list(recur.by_second,60);; + break;} +case 67: +#line 346 "icalitip.y" +{copy_list(recur.by_minute,60);; + break;} +case 68: +#line 347 "icalitip.y" +{copy_list(recur.by_hour,24);; + break;} +case 69: +#line 348 "icalitip.y" +{copy_list(recur.by_day,7);; + break;} +case 70: +#line 349 "icalitip.y" +{copy_list(recur.by_month,12);; + break;} +case 71: +#line 350 "icalitip.y" +{copy_list(recur.by_month_day,31);; + break;} +case 72: +#line 351 "icalitip.y" +{copy_list(recur.by_year_day,366);; + break;} +case 73: +#line 352 "icalitip.y" +{copy_list(recur.by_week_no,53);; + break;} +case 74: +#line 353 "icalitip.y" +{copy_list(recur.by_set_pos,366);; + break;} +case 75: +#line 355 "icalitip.y" +{ recur.until = icalvalue_get_datetime(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; + break;} +case 76: +#line 358 "icalitip.y" +{ recur.until = icalvalue_get_date(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; + break;} +case 77: +#line 361 "icalitip.y" +{ recur.count = atoi(yyvsp[0].v_string); ; + break;} +case 80: +#line 370 "icalitip.y" +{ icalparser_yy_value = icalvalue_new_recur(recur); ; + break;} +case 81: +#line 376 "icalitip.y" +{ utcsign = 1; ; + break;} +case 82: +#line 377 "icalitip.y" +{ utcsign = -1; ; + break;} +case 83: +#line 381 "icalitip.y" +{ + icalparser_yy_value = icalvalue_new_utcoffset( utcsign * (yyvsp[-1].v_int*3600) + (yyvsp[0].v_int*60) ); + ; + break;} +case 84: +#line 386 "icalitip.y" +{ + icalparser_yy_value = icalvalue_new_utcoffset(utcsign * (yyvsp[-2].v_int*3600) + (yyvsp[-1].v_int*60) +(yyvsp[0].v_int)); + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/usr/lib/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; + + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; + + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 1; +} +#line 392 "icalitip.y" + + + +void clear_recur() +{ + memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; + + icalrecurrencetype_clear(&recur); +} + +void copy_list(short* array, size_t size) +{ + memcpy(array, skiplist, size*sizeof(short)); + memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; +} + +struct icaltimetype fill_datetime(char* datestr, char* timestr) +{ + struct icaltimetype stm; + + memset(&stm,0,sizeof(stm)); + + if (datestr != 0){ + sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), + &(stm.day)); + } + + if (timestr != 0){ + sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), + &(stm.second)); + } + + return stm; + +} + +void yyerror(char* s) +{ + /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ +} + diff --git a/libical/src/libical/icalitip.tab.h b/libical/src/libical/icalitip.tab.h new file mode 100644 index 0000000000..197bd1c292 --- /dev/null +++ b/libical/src/libical/icalitip.tab.h @@ -0,0 +1,137 @@ +typedef union { + float v_float; + int v_int; + char* v_string; + +} YYSTYPE; +#define DIGITS 257 +#define INTNUMBER 258 +#define FLOATNUMBER 259 +#define STRING 260 +#define EOL 261 +#define EQUALS 262 +#define CHARACTER 263 +#define COLON 264 +#define COMMA 265 +#define SEMICOLON 266 +#define TIMESEPERATOR 267 +#define TRUE 268 +#define FALSE 269 +#define FREQ 270 +#define BYDAY 271 +#define BYHOUR 272 +#define BYMINUTE 273 +#define BYMONTH 274 +#define BYMONTHDAY 275 +#define BYSECOND 276 +#define BYSETPOS 277 +#define BYWEEKNO 278 +#define BYYEARDAY 279 +#define DAILY 280 +#define MINUTELY 281 +#define MONTHLY 282 +#define SECONDLY 283 +#define WEEKLY 284 +#define HOURLY 285 +#define YEARLY 286 +#define INTERVAL 287 +#define COUNT 288 +#define UNTIL 289 +#define WKST 290 +#define MO 291 +#define SA 292 +#define SU 293 +#define TU 294 +#define WE 295 +#define TH 296 +#define FR 297 +#define BIT8 298 +#define ACCEPTED 299 +#define ADD 300 +#define AUDIO 301 +#define BASE64 302 +#define BINARY 303 +#define BOOLEAN 304 +#define BUSY 305 +#define BUSYTENTATIVE 306 +#define BUSYUNAVAILABLE 307 +#define CALADDRESS 308 +#define CANCEL 309 +#define CANCELLED 310 +#define CHAIR 311 +#define CHILD 312 +#define COMPLETED 313 +#define CONFIDENTIAL 314 +#define CONFIRMED 315 +#define COUNTER 316 +#define DATE 317 +#define DATETIME 318 +#define DECLINECOUNTER 319 +#define DECLINED 320 +#define DELEGATED 321 +#define DISPLAY 322 +#define DRAFT 323 +#define DURATION 324 +#define EMAIL 325 +#define END 326 +#define FINAL 327 +#define FLOAT 328 +#define FREE 329 +#define GREGORIAN 330 +#define GROUP 331 +#define INDIVIDUAL 332 +#define INPROCESS 333 +#define INTEGER 334 +#define NEEDSACTION 335 +#define NONPARTICIPANT 336 +#define OPAQUE 337 +#define OPTPARTICIPANT 338 +#define PARENT 339 +#define PERIOD 340 +#define PRIVATE 341 +#define PROCEDURE 342 +#define PUBLIC 343 +#define PUBLISH 344 +#define RECUR 345 +#define REFRESH 346 +#define REPLY 347 +#define REQPARTICIPANT 348 +#define REQUEST 349 +#define RESOURCE 350 +#define ROOM 351 +#define SIBLING 352 +#define START 353 +#define TENTATIVE 354 +#define TEXT 355 +#define THISANDFUTURE 356 +#define THISANDPRIOR 357 +#define TIME 358 +#define TRANSPAENT 359 +#define UNKNOWN 360 +#define UTCOFFSET 361 +#define XNAME 362 +#define ALTREP 363 +#define CN 364 +#define CUTYPE 365 +#define DAYLIGHT 366 +#define DIR 367 +#define ENCODING 368 +#define EVENT 369 +#define FBTYPE 370 +#define FMTTYPE 371 +#define LANGUAGE 372 +#define MEMBER 373 +#define PARTSTAT 374 +#define RANGE 375 +#define RELATED 376 +#define RELTYPE 377 +#define ROLE 378 +#define RSVP 379 +#define SENTBY 380 +#define STANDARD 381 +#define URI 382 +#define TIME_CHAR 383 +#define UTC_CHAR 384 + + +extern YYSTYPE icalparser_yylval; diff --git a/libical/src/libical/icalitipl.l b/libical/src/libical/icalitipl.l new file mode 100644 index 0000000000..9abe9538c9 --- /dev/null +++ b/libical/src/libical/icalitipl.l @@ -0,0 +1,283 @@ +%{ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalitip.y + CREATOR: eric 10 June 1999 + + DESCRIPTION: + + $Id: icalitipl.l,v 1.3 2000/05/15 06:18:17 ericb Exp $ + $Locker: $ + + (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. + + The original author is Eric Busboom + The original code is icalitip.y + + + + ======================================================================*/ +#include "icalitipy.h" +#include "icalparser.h" +#include "icalenums.h" +#include "icalmemory.h" +#include "assert.h" + +#include <string.h> /* For strdup() */ + +#define ICAL_MAX_STR_CONST 1024 + +#undef YY_INPUT +#define YY_INPUT(b,r,ms) ( r= icalparser_flex_input(b,ms)) +#undef yywrap + +#undef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) icalparser_yyerror(msg) + +icalvalue_kind value_kind=ICAL_NO_VALUE; +void set_parser_value_state(); +extern enum icalparser_state_enum icalparser_state; +extern int yydebug; + +void icalparser_yyerror(char *s); + +void init_str_buf(); + +int last_state; + +char *str_buf; +char *str_buf_p; +size_t buf_sz; /* = ICAL_MAX_STR_CONST;*/ + + +%} + +crlf \x0D\x0A +nl \n +lbreak \x0D\x0A\x20 +ulbreak \x0A\x20 +space [ ] +qsafechar [^\x00-\x1F\"] +safechar [^\x00-\x1F\"\:\;\,] +tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E] +valuechar [^\x00-\x08\x10-\x1F] +xname X-[a-zA-Z0-9\-]+ +xname2 [a-zA-Z0-9\-\ ] +paramtext {safechar}+ +value {valuechar}+ +quotedstring \"{qsafechar}+\" +digit [0-9] + +%array /* Make yytext an array. Slow, but handy. HACK */ + +%option caseless + + +%s quoted_string +%s binary_value boolean_value uri_value time_value duration_value number_value period_value recur_value text_value utcoffset_value +%s enum_param_value string_param_value stringlist_param_value keyword line_start component seperator parameter end_of_value paramtext + + + +%% + +%{ +%} + + +<binary_value>{ +.* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); + return STRING;} +{crlf}|\n { return EOL;} + +} + +<boolean_value>{ +. { return CHARACTER; } +{crlf}|\n { return EOL;} + +} + +<uri_value>{ +.* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); + return STRING;} +{crlf}|\n { return EOL;} + +} + + +<time_value>{ +{digit}* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +{crlf}|\n { return EOL;} +} + +<duration_value>{ +{digit}+ { icalparser_yylval.v_string =icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +[\+\-PTWHMSD] { return yytext[0]; } +{crlf}|\n { return EOL;} + +} + +<number_value>{ +[\+\-\.0-9]+ { icalparser_yylval.v_int=atoi(yytext); return INTNUMBER; } +{crlf}|\n { return EOL;} +} + +<period_value>{ +{digit}+ { icalparser_yylval.v_string =icalmemory_tmp_copy(yytext) ; + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +[\/\+\-PWHMSD] { return yytext[0]; } +{crlf}|\n { return EOL;} + +} + +<recur_value>{ +INTERVAL { return INTERVAL; } +COUNT { return COUNT; } +UNTIL { return UNTIL; } +FREQ { return FREQ; } +BYDAY { return BYDAY; } +BYHOUR { return BYHOUR; } +BYMINUTE { return BYMINUTE; } +BYMONTH { return BYMONTH; } +BYMONTHDAY { return BYMONTHDAY; } +BYSECOND { return BYSECOND; } +BYSETPOS { return BYSETPOS; } +BYWEEKNO { return BYWEEKNO; } +BYYEARDAY { return BYYEARDAY; } +DAILY { return DAILY; } +SECONDLY { return SECONDLY; } +MINUTELY { return MINUTELY; } +HOURLY { return HOURLY; } +MONTHLY { return MONTHLY; } +WEEKLY { return WEEKLY; } +YEARLY { return YEARLY; } +WKST { return WKST; } +MO { return MO; } +SA { return SA; } +SU { return SU; } +TU { return TU; } +WE { return WE; } +TH { return TH; } +FR { return FR; } += { return EQUALS; } +, { return COMMA; } +; { return SEMICOLON; } +[\-\+0-9]+ { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +{crlf}|\n { return EOL;} +} + +<utcoffset_value>{ +{crlf}|\n { return EOL;} +\-|\+ { return yytext[0]; } +{digit}{digit} { icalparser_yylval.v_int=atoi(yytext); return INTNUMBER; } + +} + +<enum_param_value>{ +. { return CHARACTER; } +{crlf}|\n { return EOL;} + +} + +<seperator>{ +, { BEGIN(last_state); return COMMA; } +} + + +%% + +int yywrap() +{ + return 1; +} + + +void set_parser_value_state(icalvalue_kind kind) +{ + + switch (kind){ + + case ICAL_ATTACH_VALUE: + case ICAL_BINARY_VALUE: + {BEGIN(binary_value);break;} + + case ICAL_BOOLEAN_VALUE: + case ICAL_INTEGER_VALUE: + case ICAL_FLOAT_VALUE: + {BEGIN(number_value);break;} + + case ICAL_UTCOFFSET_VALUE: + {BEGIN(utcoffset_value);break;} + + case ICAL_TEXT_VALUE: + {BEGIN(text_value); + init_str_buf(); + break;} + + case ICAL_CALADDRESS_VALUE: + case ICAL_URI_VALUE: + {BEGIN(uri_value);break;} + + case ICAL_DATE_VALUE: + case ICAL_DATETIME_VALUE: + case ICAL_DATETIMEDATE_VALUE: + case ICAL_DATETIMEPERIOD_VALUE: + case ICAL_TIME_VALUE: + {BEGIN(time_value);break;} + + case ICAL_DURATION_VALUE: + {BEGIN(duration_value);break;} + + case ICAL_PERIOD_VALUE: + {BEGIN(period_value);break;} + + case ICAL_GEO_VALUE: + case ICAL_QUERY_VALUE: + {BEGIN(text_value);break;} + + case ICAL_RECUR_VALUE: + {BEGIN(recur_value);break;} + + case ICAL_NO_VALUE: + { + /* The value is probably actually a component name */ + {BEGIN(component); break;} + } + default: + { + assert(1==0); + } + } +} + +void init_str_buf() +{ + str_buf = icalmemory_tmp_buffer(ICAL_MAX_STR_CONST); + str_buf_p = str_buf; + buf_sz = ICAL_MAX_STR_CONST; + + +} + diff --git a/libical/src/libical/icalitipy.y b/libical/src/libical/icalitipy.y new file mode 100644 index 0000000000..07573d62cd --- /dev/null +++ b/libical/src/libical/icalitipy.y @@ -0,0 +1,434 @@ +%{ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalitip.y + CREATOR: eric 10 June 1999 + + DESCRIPTION: + + $Id: icalitipy.y,v 1.3 2000/05/15 06:18:17 ericb Exp $ + $Locker: $ + + (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. + + The original author is Eric Busboom + The original code is icalitip.y + + + + ================================b======================================*/ + +#include <stdlib.h> +#include <string.h> /* for strdup() */ +#include <limits.h> /* for SHRT_MAX*/ +#include "icalparser.h" +#include "ical.h" +#include "pvl.h" + +#define YYERROR_VERBOSE +#define YYDEBUG 1 + +icalvalue *icalparser_yy_value; /* Current Value */ + +/* Globals for UTCOFFSET values */ +int utc; +int utc_b; +int utcsign; + +/* Globals for DURATION values */ +struct icaldurationtype duration; + +/* Globals for RECUR values */ +struct icalrecurrencetype recur; +short skiplist[367]; +short skippos; + +void copy_list(short* array, size_t size); +void clear_recur(); +void add_prop(icalproperty_kind); +void icalparser_fill_date(struct tm* t, char* dstr); +void icalparser_fill_time(struct tm* t, char* tstr); +void set_value_type(icalvalue_kind kind); +void yyerror(char *s); /* Don't know why I need this.... */ +int yylex(void); /* Or this. */ +void set_parser_value_state(); +struct icaltimetype fill_datetime(char* d, char* t); + + + +/* Set the state of the lexer so it will interpret values ( iCAL + VALUEs, that is, ) correctly. */ + +%} + +%union { + float v_float; + int v_int; + char* v_string; + +} + +%token <v_string> DIGITS +%token <v_int> INTNUMBER +%token <v_float> FLOATNUMBER +%token <v_string> STRING +%token EOL EQUALS CHARACTER COLON COMMA SEMICOLON TIMESEPERATOR + +%token TRUE FALSE + +%token FREQ BYDAY BYHOUR BYMINUTE BYMONTH BYMONTHDAY BYSECOND BYSETPOS BYWEEKNO +%token BYYEARDAY DAILY MINUTELY MONTHLY SECONDLY WEEKLY HOURLY YEARLY +%token INTERVAL COUNT UNTIL WKST MO SA SU TU WE TH FR + +%token BIT8 ACCEPTED ADD AUDIO BASE64 BINARY BOOLEAN BUSY BUSYTENTATIVE +%token BUSYUNAVAILABLE CALADDRESS CANCEL CANCELLED CHAIR CHILD COMPLETED +%token CONFIDENTIAL CONFIRMED COUNTER DATE DATETIME DECLINECOUNTER DECLINED +%token DELEGATED DISPLAY DRAFT DURATION EMAIL END FINAL FLOAT FREE GREGORIAN +%token GROUP INDIVIDUAL INPROCESS INTEGER NEEDSACTION NONPARTICIPANT +%token OPAQUE OPTPARTICIPANT PARENT PERIOD PRIVATE PROCEDURE PUBLIC PUBLISH +%token RECUR REFRESH REPLY REQPARTICIPANT REQUEST RESOURCE ROOM SIBLING +%token START TENTATIVE TEXT THISANDFUTURE THISANDPRIOR TIME TRANSPAENT +%token UNKNOWN UTCOFFSET XNAME + +%token ALTREP CN CUTYPE DAYLIGHT DIR ENCODING EVENT FBTYPE FMTTYPE LANGUAGE +%token MEMBER PARTSTAT RANGE RELATED RELTYPE ROLE RSVP SENTBY STANDARD URI + +%token TIME_CHAR UTC_CHAR + + +%% + +value: + binary_value + | boolean_value + | date_value + | datetime_value + | duration_value + | period_value + | recur_value + | utcoffset_value + | error { + icalparser_yy_value = 0; + icalparser_clear_flex_input(); + yyclearin; + } + +binary_value: "unimplemented2" + +boolean_value: + TRUE + { icalparser_yy_value = icalvalue_new_boolean(1); } + | FALSE + { icalparser_yy_value = icalvalue_new_boolean(0); } + +date_value: DIGITS + { + struct icaltimetype stm; + + stm = fill_datetime($1,0); + + stm.hour = -1; + stm.minute = -1; + stm.second = -1; + stm.is_utc = 0; + stm.is_date = 1; + + icalparser_yy_value = icalvalue_new_date(stm); + } + +utc_char: + /*empty*/ {utc = 0;} + | UTC_CHAR {utc = 1;} + +/* This is used in the period_value, where there may be two utc characters per rule. */ +utc_char_b: + /*empty*/ {utc_b = 0;} + | UTC_CHAR {utc_b = 1;} + +datetime_value: + DIGITS TIME_CHAR DIGITS utc_char + { + struct icaltimetype stm; + stm = fill_datetime($1, $3); + stm.is_utc = utc; + stm.is_date = 0; + + icalparser_yy_value = + icalvalue_new_datetime(stm); + } + + +/* Duration */ + + +dur_date: dur_day + | dur_day dur_time + +dur_week: DIGITS 'W' + { + duration.weeks = atoi($1); + } + +dur_time: TIME_CHAR dur_hour + { + } + | TIME_CHAR dur_minute + { + } + | TIME_CHAR dur_second + { + } + +dur_hour: DIGITS 'H' + { + duration.hours = atoi($1); + } + | DIGITS 'H' dur_minute + { + duration.hours = atoi($1); + } + +dur_minute: DIGITS 'M' + { + duration.minutes = atoi($1); + } + | DIGITS 'M' dur_second + { + duration.minutes = atoi($1); + } + +dur_second: DIGITS 'S' + { + duration.seconds = atoi($1); + } + +dur_day: DIGITS 'D' + { + duration.days = atoi($1); + } + +dur_prefix: /* empty */ + { + } + | '+' + { + } + | '-' + { + } + +duration_value: dur_prefix 'P' dur_date + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + | dur_prefix 'P' dur_time + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + | dur_prefix 'P' dur_week + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + + +/* Period */ + +period_value: DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b + { + struct icalperiodtype p; + + p.start = fill_datetime($1,$3); + p.start.is_utc = utc; + p.start.is_date = 0; + + + p.end = fill_datetime($6,$8); + p.end.is_utc = utc_b; + p.end.is_date = 0; + + p.duration.days = -1; + p.duration.weeks = -1; + p.duration.hours = -1; + p.duration.minutes = -1; + p.duration.seconds = -1; + + icalparser_yy_value = icalvalue_new_period(p); + } + | DIGITS TIME_CHAR DIGITS utc_char '/' duration_value + { + struct icalperiodtype p; + + p.start = fill_datetime($1,$3); + p.start.is_utc = utc; + p.start.is_date = 0; + + p.end.year = -1; + p.end.month = -1; + p.end.day = -1; + p.end.hour = -1; + p.end.minute = -1; + p.end.second = -1; + + /* The duration_value rule setes the global 'duration' + variable, but it also creates a new value in + icalparser_yy_value. So, free that, then copy + 'duration' into the icalperiodtype struct. */ + + p.duration = icalvalue_get_duration(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); + icalparser_yy_value = 0; + + icalparser_yy_value = icalvalue_new_period(p); + + } + + + +/* Recur */ + +recur_start: + FREQ EQUALS SECONDLY {clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;} + | FREQ EQUALS MINUTELY {clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;} + | FREQ EQUALS HOURLY {clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;} + | FREQ EQUALS DAILY {clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;} + | FREQ EQUALS WEEKLY {clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;} + | FREQ EQUALS MONTHLY {clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;} + | FREQ EQUALS YEARLY {clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;} + ; + + +weekday: + SU { skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;} + | MO { skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;} + | TU { skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;} + | WE { skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;} + | TH { skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;} + | FR { skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;} + | SA { skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;} + ; + + +weekday_list: + weekday + | DIGITS weekday { } /* HACK Incorectly handles int in BYDAY */ + | weekday_list COMMA weekday + + +recur_list: + DIGITS { skiplist[skippos] = atoi($1); skippos++;} + | recur_list COMMA DIGITS { skiplist[skippos] = atoi($3); if (skippos<367) skippos++;} + ; + +recur_skip: + INTERVAL EQUALS DIGITS {recur.interval = atoi($3);} + | WKST EQUALS SU {recur.week_start = ICAL_SUNDAY_WEEKDAY;} + | WKST EQUALS MO {recur.week_start = ICAL_MONDAY_WEEKDAY;} + | WKST EQUALS TU {recur.week_start = ICAL_TUESDAY_WEEKDAY;} + | WKST EQUALS WE {recur.week_start = ICAL_WEDNESDAY_WEEKDAY;} + | WKST EQUALS TH {recur.week_start = ICAL_THURSDAY_WEEKDAY;} + | WKST EQUALS FR {recur.week_start = ICAL_FRIDAY_WEEKDAY;} + | WKST EQUALS SA {recur.week_start = ICAL_SATURDAY_WEEKDAY;} + | BYSECOND EQUALS recur_list{copy_list(recur.by_second,60);} + | BYMINUTE EQUALS recur_list{copy_list(recur.by_minute,60);} + | BYHOUR EQUALS recur_list{copy_list(recur.by_hour,24);} + | BYDAY EQUALS weekday_list{copy_list(recur.by_day,7);} + | BYMONTH EQUALS recur_list{copy_list(recur.by_month,12);} + | BYMONTHDAY EQUALS recur_list{copy_list(recur.by_month_day,31);} + | BYYEARDAY EQUALS recur_list{copy_list(recur.by_year_day,366);} + | BYWEEKNO EQUALS recur_list{copy_list(recur.by_week_no,53);} + | BYSETPOS EQUALS recur_list{copy_list(recur.by_set_pos,366);} + | UNTIL EQUALS datetime_value + { recur.until = icalvalue_get_datetime(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} + | UNTIL EQUALS date_value + { recur.until = icalvalue_get_date(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} + | COUNT EQUALS DIGITS + { recur.count = atoi($3); } + ; + +recur_skip_list: + /* empty */ + | recur_skip_list SEMICOLON recur_skip + +recur_value: + recur_start recur_skip_list + { icalparser_yy_value = icalvalue_new_recur(recur); } + + + +/* UTC Offset */ + +plusminus: '+' { utcsign = 1; } + | '-' { utcsign = -1; } + +utcoffset_value: + plusminus INTNUMBER INTNUMBER + { + icalparser_yy_value = icalvalue_new_utcoffset( utcsign * ($2*3600) + ($3*60) ); + } + + | plusminus INTNUMBER INTNUMBER INTNUMBER + { + icalparser_yy_value = icalvalue_new_utcoffset(utcsign * ($2*3600) + ($3*60) +($4)); + } + + + +%% + + +void clear_recur() +{ + memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; + + icalrecurrencetype_clear(&recur); +} + +void copy_list(short* array, size_t size) +{ + memcpy(array, skiplist, size*sizeof(short)); + memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; +} + +struct icaltimetype fill_datetime(char* datestr, char* timestr) +{ + struct icaltimetype stm; + + memset(&stm,0,sizeof(stm)); + + if (datestr != 0){ + sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), + &(stm.day)); + } + + if (timestr != 0){ + sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), + &(stm.second)); + } + + return stm; + +} + +void yyerror(char* s) +{ + /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ +} + diff --git a/libical/src/libical/icallexer.l b/libical/src/libical/icallexer.l new file mode 100644 index 0000000000..7f3358e079 --- /dev/null +++ b/libical/src/libical/icallexer.l @@ -0,0 +1,282 @@ +%{ +/* -*- Mode: C -*- + ====================================================================== + FILE: icallexer.l + CREATOR: eric 10 June 1999 + + DESCRIPTION: + + $Id: icallexer.l,v 1.3 2000/05/15 06:18:17 ericb Exp $ + $Locker: $ + + (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. + + The original author is Eric Busboom + The original code is icalitip.y + + + + ======================================================================*/ +#include "icalyacc.h" +#include "icalparser.h" +#include "icalenums.h" +#include "icalmemory.h" +#include "assert.h" + +#include <string.h> /* For strdup() */ + +int icalparser_flex_input(char* buf, int max_size); +void icalparser_clear_flex_input(); + + +#define ICAL_MAX_STR_CONST 1024 + +#undef YY_INPUT +#define YY_INPUT(b,r,ms) ( r= icalparser_flex_input(b,ms)) +#undef yywrap + +#undef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yyerror(msg) + +icalvalue_kind value_kind=ICAL_NO_VALUE; +void set_parser_value_state(); +extern int yydebug; + +void yyerror(char *s); + +void init_str_buf(); + +int last_state; + +char *str_buf; +char *str_buf_p; +size_t buf_sz; /* = ICAL_MAX_STR_CONST;*/ + + +%} + +crlf \x0D?\x0A +space [ ] +qsafechar [^\x00-\x1F\"] +safechar [^\x00-\x1F\"\:\;\,] +tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E] +valuechar [^\x00-\x08\x10-\x1F] +xname X-[a-zA-Z0-9\-]+ +xname2 [a-zA-Z0-9\-\ ] +paramtext {safechar}+ +value {valuechar}+ +quotedstring \"{qsafechar}+\" +digit [0-9] + +%array /* Make yytext an array. Slow, but handy. HACK */ + +%option caseless + +%s quoted_string +%s binary_value boolean_value uri_value time_value duration_value number_value period_value recur_value text_value utcoffset_value +%s enum_param_value string_param_value stringlist_param_value keyword line_start component seperator parameter end_of_value paramtext + + + +%% + +%{ +%} + + +<binary_value>{ +.* { yylval.v_string= icalmemory_tmp_copy(yytext); + return STRING;} +{crlf} { return EOL;} + +} + +<boolean_value>{ +. { return CHARACTER; } +{crlf} { return EOL;} + +} + +<uri_value>{ +.* { yylval.v_string= icalmemory_tmp_copy(yytext); + return STRING;} +{crlf} { return EOL;} + +} + + +<time_value>{ +{digit}* { yylval.v_string= icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +{crlf} { return EOL;} +} + +<duration_value>{ +{digit}+ { yylval.v_string =icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +[\+\-PTWHMSD] { return yytext[0]; } +{crlf} { return EOL;} + +} + +<number_value>{ +[\+\-\.0-9]+ { yylval.v_int=atoi(yytext); return INTNUMBER; } +{crlf} { return EOL;} +} + +<period_value>{ +{digit}+ { yylval.v_string =icalmemory_tmp_copy(yytext) ; + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +[\/\+\-PWHMSD] { return yytext[0]; } +{crlf} { return EOL;} + +} + +<recur_value>{ +INTERVAL { return INTERVAL; } +COUNT { return COUNT; } +UNTIL { return UNTIL; } +FREQ { return FREQ; } +BYDAY { return BYDAY; } +BYHOUR { return BYHOUR; } +BYMINUTE { return BYMINUTE; } +BYMONTH { return BYMONTH; } +BYMONTHDAY { return BYMONTHDAY; } +BYSECOND { return BYSECOND; } +BYSETPOS { return BYSETPOS; } +BYWEEKNO { return BYWEEKNO; } +BYYEARDAY { return BYYEARDAY; } +DAILY { return DAILY; } +SECONDLY { return SECONDLY; } +MINUTELY { return MINUTELY; } +HOURLY { return HOURLY; } +MONTHLY { return MONTHLY; } +WEEKLY { return WEEKLY; } +YEARLY { return YEARLY; } +WKST { return WKST; } +MO { return MO; } +SA { return SA; } +SU { return SU; } +TU { return TU; } +WE { return WE; } +TH { return TH; } +FR { return FR; } += { return EQUALS; } +, { return COMMA; } +; { return SEMICOLON; } +[\-\+0-9]+ { yylval.v_string= icalmemory_tmp_copy(yytext); + return DIGITS; } +T { return TIME_CHAR; } +Z { return UTC_CHAR; } +{crlf} { return EOL;} +} + +<utcoffset_value>{ +{crlf} { return EOL;} +\-|\+ { return yytext[0]; } +{digit}{digit} { yylval.v_int=atoi(yytext); return INTNUMBER; } + +} + +<enum_param_value>{ +. { return CHARACTER; } +{crlf} { return EOL;} + +} + +<seperator>{ +, { BEGIN(last_state); return COMMA; } +} + + +%% + +int yywrap() +{ + return 1; +} + + +void set_parser_value_state(icalvalue_kind kind) +{ + + switch (kind){ + + case ICAL_ATTACH_VALUE: + case ICAL_BINARY_VALUE: + {BEGIN(binary_value);break;} + + case ICAL_BOOLEAN_VALUE: + case ICAL_INTEGER_VALUE: + case ICAL_FLOAT_VALUE: + {BEGIN(number_value);break;} + + case ICAL_UTCOFFSET_VALUE: + {BEGIN(utcoffset_value);break;} + + case ICAL_TEXT_VALUE: + {BEGIN(text_value); + init_str_buf(); + break;} + + case ICAL_CALADDRESS_VALUE: + case ICAL_URI_VALUE: + {BEGIN(uri_value);break;} + + case ICAL_DATE_VALUE: + case ICAL_DATETIME_VALUE: + case ICAL_DATETIMEDATE_VALUE: + case ICAL_DATETIMEPERIOD_VALUE: + case ICAL_TIME_VALUE: + {BEGIN(time_value);break;} + + case ICAL_DURATION_VALUE: + {BEGIN(duration_value);break;} + + case ICAL_PERIOD_VALUE: + {BEGIN(period_value);break;} + + case ICAL_GEO_VALUE: + case ICAL_QUERY_VALUE: + {BEGIN(text_value);break;} + + case ICAL_RECUR_VALUE: + {BEGIN(recur_value);break;} + + case ICAL_NO_VALUE: + { + /* The value is probably actually a component name */ + {BEGIN(component); break;} + } + default: + { + assert(1==0); + } + } +} + +void init_str_buf() +{ + str_buf = icalmemory_tmp_buffer(ICAL_MAX_STR_CONST); + str_buf_p = str_buf; + buf_sz = ICAL_MAX_STR_CONST; + + +} + diff --git a/libical/src/libical/icalmemory.c b/libical/src/libical/icalmemory.c new file mode 100644 index 0000000000..e89451fbce --- /dev/null +++ b/libical/src/libical/icalmemory.c @@ -0,0 +1,244 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalmemory.c + CREATOR: eric 30 June 1999 + + $Id$ + $Locker$ + + 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. + + The Original Code is icalmemory.h + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 1999 The Software Studio. + http://www.softwarestudio.org + + ======================================================================*/ + +/* 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 + + +#include "icalmemory.h" +#include "icalerror.h" + +#include <stdio.h> /* for printf (debugging) */ +#include <stdlib.h> /* for malloc, realloc */ +#include <string.h> /* for memset() */ + +#define BUFFER_RING_SIZE 25 +#define MIN_BUFFER_SIZE 200 + +void* buffer_ring[BUFFER_RING_SIZE+1]; +int buffer_pos = 0; +int initialized = 0; + +/* Create a new temporary buffer on the ring. Libical owns these and wil deallocate them. */ +void* +icalmemory_tmp_buffer (size_t size) +{ + void *rtrn; + /* I don't think I need this -- I think static arrays are + initialized to 0 as a standard part of C, but I am not sure. */ + + if (initialized == 0){ + int i; + for(i=0; i<BUFFER_RING_SIZE; i++){ + buffer_ring[i] = 0; + } + initialized = 1; + } + + /* Ideally, this routine would re-use an existing buffer if it is + larger than the requested buffer. Maybe later.... */ + + if (size < MIN_BUFFER_SIZE){ + size = MIN_BUFFER_SIZE; + } + + if ( buffer_ring[buffer_pos] != 0){ + /*sprintf(buffer_ring[buffer_pos], "***DEALLOCATED MEMORY***: %d",buffer_pos);*/ + free( buffer_ring[buffer_pos]); + buffer_ring[buffer_pos] = 0; + } + + + rtrn = buffer_ring[buffer_pos] = (void*)malloc(size); + + memset(rtrn,0,size); + + if(++buffer_pos > BUFFER_RING_SIZE){ + buffer_pos = 0; + } + + return rtrn; +} + +void icalmemory_free_ring() +{ + + int i; + for(i=0; i<BUFFER_RING_SIZE; i++){ + if ( buffer_ring[i] != 0){ + free( buffer_ring[i]); + } + buffer_ring[i] = 0; + } + + initialized = 1; + +} + +/* Like strdup, but the buffer is on the ring. */ +char* +icalmemory_tmp_copy(char* str) +{ + char* b = icalmemory_tmp_buffer(strlen(str)+1); + + strcpy(b,str); + + return b; +} + + + +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 delocate the new memory */ + +void* icalmemory_new_buffer(size_t size) +{ + /* HACK. need to handle out of memory case */ + void *b = malloc(size); + + memset(b,0,size); + + return b; +} + +void* icalmemory_resize_buffer(void* buf, size_t size) +{ + /* HACK. need to handle out of memory case */ + + return realloc(buf, size); +} + +void icalmemory_free_buffer(void* buf) +{ + free(buf); +} + +void +icalmemory_append_string(char** buf, char** pos, size_t* buf_size, + 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; + +} diff --git a/libical/src/libical/icalmemory.h b/libical/src/libical/icalmemory.h new file mode 100644 index 0000000000..26d22b7316 --- /dev/null +++ b/libical/src/libical/icalmemory.h @@ -0,0 +1,76 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalmemory.h + CREATOR: eric 30 June 1999 + + + $Id$ + $Locker$ + + 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. + + The Original Code is icalmemory.h + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 1999 The Software Studio. + http://www.softwarestudio.org + +======================================================================*/ + +#ifndef ICALMEMORY_H +#define ICALMEMORY_H + +#include <sys/types.h> /* for size_t */ + +/* 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(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(); + +/* 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, + 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); + +#endif /* !ICALMEMORY_H */ + + + diff --git a/libical/src/libical/icalparameter.c b/libical/src/libical/icalparameter.c new file mode 100644 index 0000000000..cf37eb07b2 --- /dev/null +++ b/libical/src/libical/icalparameter.c @@ -0,0 +1,1913 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedparameters.{c,h} + CREATOR: eric 09 May 1999 + + $Id$ + $Locker$ + + + (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. + + The original author is Eric Busboom + The original code is icalderivedparameters.{c,h} + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "ical.h" +#include "icalerror.h" +#include <stdlib.h> /* for malloc() */ +#include <errno.h> +#include <string.h> /* for memset() */ +#include "icalmemory.h" + +struct icalparameter_impl +{ + icalparameter_kind kind; + char id[5]; + int size; + char* string; + char* x_name; + icalproperty* parent; + + union data { + int v_int; + int v_rsvp; + icalparameter_cutype v_cutype; + icalparameter_encoding v_encoding; + icalparameter_fbtype v_fbtype; + icalparameter_partstat v_partstat; + icalparameter_range v_range; + icalparameter_related v_related; + icalparameter_reltype v_reltype; + icalparameter_role v_role; + icalparameter_value v_value; + icalparameter_xlicerrortype v_xlicerrortype; + icalparameter_xliccomparetype v_xliccomparetype; + } data; +}; + +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; + memset(&(v->data),0,sizeof(v->data)); + + return v; +} + +icalparameter* +icalparameter_new (icalparameter_kind kind) +{ + struct icalparameter_impl* v = icalparameter_new_impl(kind); + + return (icalparameter*) v; + +} + +icalparameter* +icalparameter_new_clone(icalparameter* param) +{ + struct icalparameter_impl *old; + struct icalparameter_impl *new; + + old = (struct icalparameter_impl *)param; + new = icalparameter_new_impl(old->kind); + + icalerror_check_arg_rz((param!=0),"param"); + + if (new == 0){ + return 0; + } + + memcpy(new,old,sizeof(struct icalparameter_impl)); + + if (old->string != 0){ + new->string = strdup(old->string); + if (new->string == 0){ + icalparameter_free(new); + return 0; + } + } + + if (old->x_name != 0){ + new->x_name = strdup(old->x_name); + if (new->x_name == 0){ + icalparameter_free(new); + return 0; + } + } + + return new; +} + + +icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) +{ + + icalparameter* param=0; + + icalerror_check_arg_rz((val!=0),"val"); + + switch (kind) { + case ICAL_ALTREP_PARAMETER: + { + param = icalparameter_new_altrep(val); + + break; + } + case ICAL_CN_PARAMETER: + { + param = icalparameter_new_cn(val); + + break; + } + case ICAL_CUTYPE_PARAMETER: + { + if(strcmp(val,"INDIVIDUAL") == 0){ + param = icalparameter_new_cutype(ICAL_CUTYPE_INDIVIDUAL); + } + else if(strcmp(val,"GROUP") == 0){ + param = icalparameter_new_cutype(ICAL_CUTYPE_GROUP); + } + else if(strcmp(val,"RESOURCE") == 0){ + param = icalparameter_new_cutype(ICAL_CUTYPE_RESOURCE); + } + else if(strcmp(val,"ROOM") == 0){ + param = icalparameter_new_cutype(ICAL_CUTYPE_ROOM); + } + else if(strcmp(val,"UNKNOWN") == 0){ + param = icalparameter_new_cutype(ICAL_CUTYPE_UNKNOWN); + } + else { + param = icalparameter_new_cutype(ICAL_CUTYPE_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + + case ICAL_DELEGATEDFROM_PARAMETER: + { + param = icalparameter_new_delegatedfrom(val); + + break; + } + case ICAL_DELEGATEDTO_PARAMETER: + { + param = icalparameter_new_delegatedto(val); + + break; + } + case ICAL_DIR_PARAMETER: + { + param = icalparameter_new_dir(val); + + break; + } + case ICAL_ENCODING_PARAMETER: + { + if(strcmp(val,"BIT8") == 0){ + param = icalparameter_new_encoding(ICAL_ENCODING_8BIT); + } + else if(strcmp(val,"BASE64") == 0){ + param = icalparameter_new_encoding(ICAL_ENCODING_BASE64); + } + else { + param = icalparameter_new_encoding(ICAL_ENCODING_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + case ICAL_FBTYPE_PARAMETER: + { + if(strcmp(val,"FREE") == 0){ + param = icalparameter_new_fbtype(ICAL_FBTYPE_FREE); + } + else if(strcmp(val,"BUSY") == 0){ + param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSY); + } + else if(strcmp(val,"BUSYUNAVAILABLE") == 0){ + param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSYUNAVAILABLE); + } + else if(strcmp(val,"BUSYTENTATIVE") == 0){ + param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSYTENTATIVE); + } + else { + param = icalparameter_new_fbtype(ICAL_FBTYPE_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + case ICAL_FMTTYPE_PARAMETER: + { + param = icalparameter_new_fmttype(val); + break; + } + case ICAL_LANGUAGE_PARAMETER: + { + param = icalparameter_new_language(val); + + break; + } + case ICAL_MEMBER_PARAMETER: + { + param = icalparameter_new_member(val); + + break; + } + case ICAL_PARTSTAT_PARAMETER: + { + if(strcmp(val,"NEEDSACTION") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_NEEDSACTION); + } + else if(strcmp(val,"ACCEPTED") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_ACCEPTED); + } + else if(strcmp(val,"DECLINED") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_DECLINED); + } + else if(strcmp(val,"TENTATIVE") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE); + } + else if(strcmp(val,"DELEGATED") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED); + } + else if(strcmp(val,"COMPLETED") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_COMPLETED); + } + else if(strcmp(val,"INPROCESS") == 0){ + param = icalparameter_new_partstat(ICAL_PARTSTAT_INPROCESS); + } + else { + param = icalparameter_new_partstat(ICAL_PARTSTAT_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + case ICAL_RANGE_PARAMETER: + { + if(strcmp(val,"THISANDFUTURE") == 0){ + param = icalparameter_new_range(ICAL_RANGE_THISANDFUTURE); + } + else if(strcmp(val,"THISANDPRIOR") == 0){ + param = icalparameter_new_range(ICAL_RANGE_THISANDPRIOR); + } + + break; + } + case ICAL_RELATED_PARAMETER: + { + if(strcmp(val,"START") == 0){ + param = icalparameter_new_related(ICAL_RELATED_START); + } + else if(strcmp(val,"END") == 0){ + param = icalparameter_new_related(ICAL_RELATED_END); + } + + break; + } + case ICAL_RELTYPE_PARAMETER: + { + if(strcmp(val,"PARENT") == 0){ + param = icalparameter_new_reltype(ICAL_RELTYPE_PARENT); + } + else if(strcmp(val,"CHILD") == 0){ + param = icalparameter_new_reltype(ICAL_RELTYPE_CHILD); + } + else if(strcmp(val,"SIBLING") == 0){ + param = icalparameter_new_reltype(ICAL_RELTYPE_SIBLING); + } + else { + param = icalparameter_new_reltype(ICAL_RELTYPE_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + case ICAL_ROLE_PARAMETER: + { + if(strcmp(val,"CHAIR") == 0){ + param = icalparameter_new_role(ICAL_ROLE_CHAIR); + } + else if(strcmp(val,"REQ-PARTICIPANT") == 0){ + param = icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT); + } + else if(strcmp(val,"OPT-PARTICIPANT") == 0){ + param = icalparameter_new_role(ICAL_ROLE_OPTPARTICIPANT); + } + else if(strcmp(val,"NON-PARTICIPANT") == 0){ + param = icalparameter_new_role(ICAL_ROLE_NONPARTICIPANT); + } + else { + param = icalparameter_new_role(ICAL_ROLE_XNAME); + icalparameter_set_xvalue(param,val); + } + break; + } + case ICAL_RSVP_PARAMETER: + { + if(strcmp(val,"TRUE") == 0){ + param = icalparameter_new_rsvp(1); + } + else if(strcmp(val,"FALSE") == 0){ + param = icalparameter_new_rsvp(0); + } + + break; + } + case ICAL_SENTBY_PARAMETER: + { + param = icalparameter_new_sentby(val); + + break; + } + case ICAL_TZID_PARAMETER: + { + param = icalparameter_new_tzid(val); + + break; + } + case ICAL_VALUE_PARAMETER: + { + if(strcmp(val,"BINARY") == 0){ + param = icalparameter_new_value(ICAL_VALUE_BINARY); + } + else if(strcmp(val,"BOOLEAN") == 0){ + param = icalparameter_new_value(ICAL_VALUE_BOOLEAN); + } + else if(strcmp(val,"CAL-ADDRESS") == 0){ + param = icalparameter_new_value(ICAL_VALUE_CALADDRESS); + } + else if(strcmp(val,"DATE") == 0){ + param = icalparameter_new_value(ICAL_VALUE_DATE); + } + else if(strcmp(val,"DATE-TIME") == 0){ + param = icalparameter_new_value(ICAL_VALUE_DATETIME); + } + else if(strcmp(val,"DURATION") == 0){ + param = icalparameter_new_value(ICAL_VALUE_DURATION); + } + else if(strcmp(val,"FLOAT") == 0){ + param = icalparameter_new_value(ICAL_VALUE_FLOAT); + } + else if(strcmp(val,"INTEGER") == 0){ + param = icalparameter_new_value(ICAL_VALUE_INTEGER); + } + else if(strcmp(val,"PERIOD") == 0){ + param = icalparameter_new_value(ICAL_VALUE_PERIOD); + } + else if(strcmp(val,"RECUR") == 0){ + param = icalparameter_new_value(ICAL_VALUE_RECUR); + } + else if(strcmp(val,"TEXT") == 0){ + param = icalparameter_new_value(ICAL_VALUE_TEXT); + } + else if(strcmp(val,"TIME") == 0){ + param = icalparameter_new_value(ICAL_VALUE_TIME); + } + else if(strcmp(val,"URI") == 0){ + param = icalparameter_new_value(ICAL_VALUE_URI); + } + else if(strcmp(val,"UTC-OFFSET") == 0){ + param = icalparameter_new_value(ICAL_VALUE_UTCOFFSET); + } + else { + param = 0; + } + break; + } + case ICAL_XLICERRORTYPE_PARAMETER: + { + + if(strcmp(val,"COMPONENT_PARSE_ERROR") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + } + else if(strcmp(val,"PROPERTY_PARSE_ERROR") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); + } + else if(strcmp(val,"PARAMETER_NAME_PARSE_ERROR") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); + } + else if(strcmp(val,"PARAMETER_VALUE_PARSE_ERROR") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); + } + else if(strcmp(val,"VALUE_PARSE_ERROR") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_VALUEPARSEERROR); + } + else if(strcmp(val,"INVALID_ITIP") == 0){ + param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); + } + break; + } + + case ICAL_XLICCOMPARETYPE_PARAMETER: + { + + if(strcmp(val,"EQUAL") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL); + } + else if(strcmp(val,"NOTEQUAL") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_NOTEQUAL); + } + else if(strcmp(val,"LESS") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_LESS); + } + else if(strcmp(val,"GREATER") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_GREATER); + } + else if(strcmp(val,"LESSEQUAL") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_LESSEQUAL); + } + else if(strcmp(val,"GREATEREQUAL") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_GREATEREQUAL); + } + else if(strcmp(val,"REGEX") == 0){ + param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_REGEX); + } else { + param = 0; + } + break; + } + + + case ICAL_X_PARAMETER: + { + param = icalparameter_new(ICAL_FBTYPE_PARAMETER); + icalparameter_set_xvalue(param,val); + break; + } + + case ICAL_NO_PARAMETER: + default: + { + return 0; + } + + + } + + return param; +} + +void +icalparameter_free (icalparameter* parameter) +{ + struct icalparameter_impl * impl; + + impl = (struct icalparameter_impl*)parameter; + +/* 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( (impl->parent ==0),"Tried to free a parameter that is still attached to a component. "); + +#else + if(impl->parent !=0){ + return; + } +#endif + + + if (impl->string != 0){ + free (impl->string); + } + + if (impl->x_name != 0){ + free (impl->x_name); + } + + memset(impl,0,sizeof(impl)); + + impl->parent = 0; + impl->id[0] = 'X'; + free(impl); +} + + +char no_parameter[]="Error: No Parameter"; +char* +icalparameter_as_ical_string (icalparameter* parameter) +{ + struct icalparameter_impl* impl; + size_t buf_size = 1024; + char* buf; + char* buf_ptr; + char *out_buf; + char *kind_string; + + char tend[1024]; /* HACK . Should be using memory buffer ring */ + + icalerror_check_arg_rz( (parameter!=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; + impl = (struct icalparameter_impl*)parameter; + + kind_string = icalenum_parameter_kind_to_string(impl->kind); + + if (impl->kind == ICAL_NO_PARAMETER || + impl->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, "="); + + switch (impl->kind) { + case ICAL_CUTYPE_PARAMETER: + { + switch (impl->data.v_cutype) { + case ICAL_CUTYPE_INDIVIDUAL: { + strcpy(tend,"INDIVIDUAL");break; + } + case ICAL_CUTYPE_GROUP:{ + strcpy(tend,"GROUP");break; + } + case ICAL_CUTYPE_RESOURCE: { + strcpy(tend,"RESOURCE");break; + } + case ICAL_CUTYPE_ROOM:{ + strcpy(tend,"ROOM");break; + } + case ICAL_CUTYPE_UNKNOWN:{ + strcpy(tend,"UNKNOWN");break; + } + case ICAL_CUTYPE_XNAME:{ + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + + } + case ICAL_ENCODING_PARAMETER: + { + switch (impl->data.v_encoding) { + case ICAL_ENCODING_8BIT: { + strcpy(tend,"8BIT");break; + } + case ICAL_ENCODING_BASE64:{ + strcpy(tend,"BASE64");break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + + case ICAL_FBTYPE_PARAMETER: + { + switch (impl->data.v_fbtype) { + case ICAL_FBTYPE_FREE:{ + strcpy(tend,"FREE");break; + } + case ICAL_FBTYPE_BUSY: { + strcpy(tend,"BUSY");break; + } + case ICAL_FBTYPE_BUSYUNAVAILABLE:{ + strcpy(tend,"BUSYUNAVAILABLE");break; + } + case ICAL_FBTYPE_BUSYTENTATIVE:{ + strcpy(tend,"BUSYTENTATIVE");break; + } + case ICAL_FBTYPE_XNAME:{ + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + + } + case ICAL_PARTSTAT_PARAMETER: + { + switch (impl->data.v_partstat) { + case ICAL_PARTSTAT_NEEDSACTION: { + strcpy(tend,"NEEDSACTION");break; + } + case ICAL_PARTSTAT_ACCEPTED: { + strcpy(tend,"ACCEPTED");break; + } + case ICAL_PARTSTAT_DECLINED:{ + strcpy(tend,"DECLINED");break; + } + case ICAL_PARTSTAT_TENTATIVE:{ + strcpy(tend,"TENTATIVE");break; + } + case ICAL_PARTSTAT_DELEGATED:{ + strcpy(tend,"DELEGATED");break; + } + case ICAL_PARTSTAT_COMPLETED:{ + strcpy(tend,"COMPLETED");break; + } + case ICAL_PARTSTAT_INPROCESS:{ + strcpy(tend,"INPROCESS");break; + } + case ICAL_PARTSTAT_XNAME:{ + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + + } + case ICAL_RANGE_PARAMETER: + { + switch (impl->data.v_range) { + case ICAL_RANGE_THISANDPRIOR: { + strcpy(tend,"THISANDPRIOR");break; + } + case ICAL_RANGE_THISANDFUTURE: { + strcpy(tend,"THISANDFUTURE");break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + case ICAL_RELATED_PARAMETER: + { + switch (impl->data.v_related) { + case ICAL_RELATED_START: { + strcpy(tend,"START");break; + } + case ICAL_RELATED_END: { + strcpy(tend,"END");break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + case ICAL_RELTYPE_PARAMETER: + { + switch (impl->data.v_reltype) { + case ICAL_RELTYPE_PARENT: { + strcpy(tend,"PARENT");break; + } + case ICAL_RELTYPE_CHILD:{ + strcpy(tend,"CHILD");break; + } + case ICAL_RELTYPE_SIBLING:{ + strcpy(tend,"SIBLING");break; + } + case ICAL_RELTYPE_XNAME:{ + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + case ICAL_ROLE_PARAMETER: + { + switch (impl->data.v_role) { + case ICAL_ROLE_CHAIR: { + strcpy(tend,"CHAIR");break; + } + case ICAL_ROLE_REQPARTICIPANT: { + strcpy(tend,"REQ-PARTICIPANT");break; + } + case ICAL_ROLE_OPTPARTICIPANT: { + strcpy(tend,"OPT-PARTICIPANT");break; + } + case ICAL_ROLE_NONPARTICIPANT: { + strcpy(tend,"NON-PARTICIPANT");break; + } + case ICAL_ROLE_XNAME:{ + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + case ICAL_RSVP_PARAMETER: + { + switch (impl->data.v_rsvp) { + case 1: { + strcpy(tend,"TRUE");break; + } + case 0: { + strcpy(tend,"FALSE");break; + } + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + case ICAL_VALUE_PARAMETER: + { + switch (impl->data.v_value) { + case ICAL_VALUE_BINARY: { + strcpy(tend,"BINARY");break; + } + case ICAL_VALUE_BOOLEAN: { + strcpy(tend,"BOOLEAN");break; + } + case ICAL_VALUE_CALADDRESS: { + strcpy(tend,"CAL-ADDRESS");break; + } + case ICAL_VALUE_DATE: { + strcpy(tend,"DATE");break; + } + case ICAL_VALUE_DATETIME: { + strcpy(tend,"DATE-TIME");break; + } + case ICAL_VALUE_DURATION: { + strcpy(tend,"DURATION");break; + } + case ICAL_VALUE_FLOAT: { + strcpy(tend,"FLOAT");break; + } + case ICAL_VALUE_INTEGER: { + strcpy(tend,"INTEGER");break; + } + case ICAL_VALUE_PERIOD: { + strcpy(tend,"PERIOD");break; + } + case ICAL_VALUE_RECUR: { + strcpy(tend,"RECUR");break; + } + case ICAL_VALUE_TEXT: { + strcpy(tend,"TEXT");break; + } + case ICAL_VALUE_TIME: { + strcpy(tend,"TIME");break; + } + case ICAL_VALUE_URI: { + strcpy(tend,"URI");break; + } + case ICAL_VALUE_UTCOFFSET: { + strcpy(tend,"UTC-OFFSET");break; + } + case ICAL_VALUE_XNAME: { + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + } + default:{ + strcpy(tend,"ERROR"); + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + } + break; + } + + + case ICAL_XLICERRORTYPE_PARAMETER: + { + switch (impl->data.v_xlicerrortype) { + case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: + { + strcpy(tend,"COMPONENT_PARSE_ERROR");break; + } + case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: + { + strcpy(tend,"PROPERTY_PARSE_ERROR");break; + } + case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: + { + strcpy(tend,"PARAMETER_NAME_PARSE_ERROR");break; + } + case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: + { + strcpy(tend,"PARAMETER_VALUE_PARSE_ERROR");break; + } + case ICAL_XLICERRORTYPE_VALUEPARSEERROR: + { + strcpy(tend,"VALUE_PARSE_ERROR");break; + } + case ICAL_XLICERRORTYPE_INVALIDITIP: + { + strcpy(tend,"INVALID_ITIP");break; + } + } + break; + } + + case ICAL_XLICCOMPARETYPE_PARAMETER: + { + switch (impl->data.v_xliccomparetype) { + case ICAL_XLICCOMPARETYPE_EQUAL: + { + strcpy(tend,"EQUAL");break; + } + case ICAL_XLICCOMPARETYPE_NOTEQUAL: + { + strcpy(tend,"NOTEQUAL");break; + } + case ICAL_XLICCOMPARETYPE_LESS: + { + strcpy(tend,"LESS");break; + } + case ICAL_XLICCOMPARETYPE_GREATER: + { + strcpy(tend,"GREATER");break; + } + case ICAL_XLICCOMPARETYPE_LESSEQUAL: + { + strcpy(tend,"LESSEQUAL");break; + } + case ICAL_XLICCOMPARETYPE_GREATEREQUAL: + { + strcpy(tend,"GREATEREQUAL");break; + } + case ICAL_XLICCOMPARETYPE_REGEX: + { + strcpy(tend,"REGEX");break; + } + break; + } + + default:{ + icalerror_set_errno(ICAL_BADARG_ERROR);break; + } + break; + } + + + case ICAL_SENTBY_PARAMETER: + case ICAL_TZID_PARAMETER: + case ICAL_X_PARAMETER: + case ICAL_FMTTYPE_PARAMETER: + case ICAL_LANGUAGE_PARAMETER: + case ICAL_MEMBER_PARAMETER: + case ICAL_DELEGATEDFROM_PARAMETER: + case ICAL_DELEGATEDTO_PARAMETER: + case ICAL_DIR_PARAMETER: + case ICAL_ALTREP_PARAMETER: + case ICAL_CN_PARAMETER: + { + if (impl->string == 0){ return no_parameter;} + strcpy(tend,impl->string);break; + break; + } + + case ICAL_NO_PARAMETER: + case ICAL_ANY_PARAMETER: + { + /* These are actually handled before the case/switch + clause */ + } + + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, tend); + + /* 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)); + 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 ((struct icalparameter_impl *)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, char* v) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + icalerror_check_arg_rv( (param!=0),"param"); + icalerror_check_arg_rv( (v!=0),"v"); + + if (impl->x_name != 0){ + free(impl->x_name); + } + + impl->x_name = strdup(v); + + if (impl->x_name == 0){ + errno = ENOMEM; + } + +} + +char* +icalparameter_get_xname (icalparameter* param) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + icalerror_check_arg_rz( (param!=0),"param"); + + return impl->x_name; +} + +void +icalparameter_set_xvalue (icalparameter* param, char* v) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + + icalerror_check_arg_rv( (param!=0),"param"); + icalerror_check_arg_rv( (v!=0),"v"); + + if (impl->string != 0){ + free(impl->string); + } + + impl->string = strdup(v); + + if (impl->string == 0){ + errno = ENOMEM; + } + +} + +char* +icalparameter_get_xvalue (icalparameter* param) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + + icalerror_check_arg_rz( (param!=0),"param"); + + return impl->string; + +} + +void icalparameter_set_parent(icalparameter* param, + icalproperty* property) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + + icalerror_check_arg_rv( (param!=0),"param"); + + impl->parent = property; +} + +icalproperty* icalparameter_get_parent(icalparameter* param) +{ + struct icalparameter_impl *impl = (struct icalparameter_impl*)param; + + icalerror_check_arg_rv( (param!=0),"param"); + + return impl->parent; +} + + +/* Everything below this line is machine generated. Do not edit. */ +/* ALTREP */ +icalparameter* icalparameter_new_altrep(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_ALTREP_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_altrep((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_altrep(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_altrep(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* CN */ +icalparameter* icalparameter_new_cn(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_CN_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_cn((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_cn(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_cn(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* CUTYPE */ +icalparameter* icalparameter_new_cutype(icalparameter_cutype v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_CUTYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_cutype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_cutype icalparameter_get_cutype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_CUTYPE_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_cutype; + +} + +void icalparameter_set_cutype(icalparameter* param, icalparameter_cutype v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_cutype = v; +} + +/* DELEGATED-FROM */ +icalparameter* icalparameter_new_delegatedfrom(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_DELEGATEDFROM_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_delegatedfrom((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_delegatedfrom(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_delegatedfrom(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* DELEGATED-TO */ +icalparameter* icalparameter_new_delegatedto(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_DELEGATEDTO_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_delegatedto((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_delegatedto(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_delegatedto(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* DIR */ +icalparameter* icalparameter_new_dir(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_DIR_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_dir((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_dir(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_dir(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* ENCODING */ +icalparameter* icalparameter_new_encoding(icalparameter_encoding v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_ENCODING_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_encoding((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_encoding icalparameter_get_encoding(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_ENCODING_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_encoding; + +} + +void icalparameter_set_encoding(icalparameter* param, icalparameter_encoding v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_encoding = v; +} + +/* FBTYPE */ +icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_FBTYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_fbtype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_fbtype icalparameter_get_fbtype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_FBTYPE_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_fbtype; + +} + +void icalparameter_set_fbtype(icalparameter* param, icalparameter_fbtype v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_fbtype = v; +} + +/* FMTTYPE */ +icalparameter* icalparameter_new_fmttype(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_FMTTYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_fmttype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_fmttype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_fmttype(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* LANGUAGE */ +icalparameter* icalparameter_new_language(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_LANGUAGE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_language((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_language(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_language(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* MEMBER */ +icalparameter* icalparameter_new_member(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_MEMBER_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_member((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_member(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_member(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* PARTSTAT */ +icalparameter* icalparameter_new_partstat(icalparameter_partstat v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_PARTSTAT_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_partstat((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_partstat icalparameter_get_partstat(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_PARTSTAT_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_partstat; + +} + +void icalparameter_set_partstat(icalparameter* param, icalparameter_partstat v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_partstat = v; +} + +/* RANGE */ +icalparameter* icalparameter_new_range(icalparameter_range v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_RANGE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_range((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_range icalparameter_get_range(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + + return ((struct icalparameter_impl*)param)->data.v_range; + +} + +void icalparameter_set_range(icalparameter* param, icalparameter_range v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_range = v; +} + +/* RELATED */ +icalparameter* icalparameter_new_related(icalparameter_related v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_RELATED_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_related((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_related icalparameter_get_related(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + + return ((struct icalparameter_impl*)param)->data.v_related; + +} + +void icalparameter_set_related(icalparameter* param, icalparameter_related v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_related = v; +} + +/* RELTYPE */ +icalparameter* icalparameter_new_reltype(icalparameter_reltype v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_RELTYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_reltype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_reltype icalparameter_get_reltype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_RELTYPE_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_reltype; + +} + +void icalparameter_set_reltype(icalparameter* param, icalparameter_reltype v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_reltype = v; +} + +/* ROLE */ +icalparameter* icalparameter_new_role(icalparameter_role v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_ROLE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_role((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_role icalparameter_get_role(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_ROLE_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_role; + +} + +void icalparameter_set_role(icalparameter* param, icalparameter_role v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_role = v; +} + +/* RSVP */ +icalparameter* icalparameter_new_rsvp(int v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_RSVP_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_rsvp((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +int icalparameter_get_rsvp(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + + return ((struct icalparameter_impl*)param)->data.v_rsvp; + +} + +void icalparameter_set_rsvp(icalparameter* param, int v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_rsvp = v; +} + +/* SENT-BY */ +icalparameter* icalparameter_new_sentby(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_SENTBY_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_sentby((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_sentby(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_sentby(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* TZID */ +icalparameter* icalparameter_new_tzid(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_TZID_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_tzid((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_tzid(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_tzid(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* VALUE */ +icalparameter* icalparameter_new_value(icalparameter_value v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_VALUE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_value((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_value icalparameter_get_value(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + if ( ((struct icalparameter_impl*)param)->string != 0){ + return ICAL_VALUE_XNAME; + } + + return ((struct icalparameter_impl*)param)->data.v_value; + +} + +void icalparameter_set_value(icalparameter* param, icalparameter_value v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_value = v; +} + +/* X */ +icalparameter* icalparameter_new_x(char* v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + icalerror_check_arg_rz( (v!=0),"v"); + impl = icalparameter_new_impl(ICAL_X_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_x((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +char* icalparameter_get_x(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg_rz( (param!=0), "param"); + return ((struct icalparameter_impl*)param)->string; +} + +void icalparameter_set_x(icalparameter* param, char* v) +{ + icalerror_check_arg_rv( (v!=0),"v"); + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->string = strdup(v); +} + +/* X-LIC-ERRORTYPE */ +icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_XLICERRORTYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_xlicerrortype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_xlicerrortype icalparameter_get_xlicerrortype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + + return ((struct icalparameter_impl*)param)->data.v_xlicerrortype; + +} + +void icalparameter_set_xlicerrortype(icalparameter* param, icalparameter_xlicerrortype v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_xlicerrortype = v; +} + +/* X-LIC-COMPARETYPE */ +icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v) +{ + struct icalparameter_impl *impl; + icalerror_clear_errno(); + + impl = icalparameter_new_impl(ICAL_XLICCOMPARETYPE_PARAMETER); + if (impl == 0) { + return 0; + } + + icalparameter_set_xliccomparetype((icalparameter*) impl,v); + if (icalerrno != ICAL_NO_ERROR) { + icalparameter_free((icalparameter*) impl); + return 0; + } + + return (icalparameter*) impl; +} + +icalparameter_xliccomparetype icalparameter_get_xliccomparetype(icalparameter* param) +{ + icalerror_clear_errno(); + icalerror_check_arg( (param!=0), "param"); + + return ((struct icalparameter_impl*)param)->data.v_xliccomparetype; + +} + +void icalparameter_set_xliccomparetype(icalparameter* param, icalparameter_xliccomparetype v) +{ + + icalerror_check_arg_rv( (param!=0), "param"); + icalerror_clear_errno(); + + ((struct icalparameter_impl*)param)->data.v_xliccomparetype = v; +} + diff --git a/libical/src/libical/icalparameter.h b/libical/src/libical/icalparameter.h new file mode 100644 index 0000000000..174cae6f3f --- /dev/null +++ b/libical/src/libical/icalparameter.h @@ -0,0 +1,174 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalparam.h + CREATOR: eric 20 March 1999 + + + $Id$ + $Locker$ + + + + (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. + + The original author is Eric Busboom + The original code is icalparam.h + + ======================================================================*/ + +#ifndef ICALPARAM_H +#define ICALPARAM_H + +#include "icalenums.h" /* defined icalparameter_kind and other enums */ + +typedef void icalparameter; + +icalparameter* icalparameter_new(icalparameter_kind kind); +icalparameter* icalparameter_new_clone(icalparameter* p); +icalparameter* icalparameter_new_from_string(icalparameter_kind kind, 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); + +/* Acess the name of an X parameer */ +void icalparameter_set_xname (icalparameter* param, char* v); +char* icalparameter_get_xname(icalparameter* param); +void icalparameter_set_xvalue (icalparameter* param, char* v); +char* icalparameter_get_xvalue(icalparameter* param); + + +/* Everything below this line is machine generated. Do not edit. */ +/* ALTREP */ +icalparameter* icalparameter_new_altrep(char* v); +char* icalparameter_get_altrep(icalparameter* value); +void icalparameter_set_altrep(icalparameter* value, char* v); + +/* CN */ +icalparameter* icalparameter_new_cn(char* v); +char* icalparameter_get_cn(icalparameter* value); +void icalparameter_set_cn(icalparameter* value, char* v); + +/* CUTYPE */ +icalparameter* icalparameter_new_cutype(icalparameter_cutype v); +icalparameter_cutype icalparameter_get_cutype(icalparameter* value); +void icalparameter_set_cutype(icalparameter* value, icalparameter_cutype v); + +/* DELEGATED-FROM */ +icalparameter* icalparameter_new_delegatedfrom(char* v); +char* icalparameter_get_delegatedfrom(icalparameter* value); +void icalparameter_set_delegatedfrom(icalparameter* value, char* v); + +/* DELEGATED-TO */ +icalparameter* icalparameter_new_delegatedto(char* v); +char* icalparameter_get_delegatedto(icalparameter* value); +void icalparameter_set_delegatedto(icalparameter* value, char* v); + +/* DIR */ +icalparameter* icalparameter_new_dir(char* v); +char* icalparameter_get_dir(icalparameter* value); +void icalparameter_set_dir(icalparameter* value, char* v); + +/* ENCODING */ +icalparameter* icalparameter_new_encoding(icalparameter_encoding v); +icalparameter_encoding icalparameter_get_encoding(icalparameter* value); +void icalparameter_set_encoding(icalparameter* value, icalparameter_encoding v); + +/* FBTYPE */ +icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v); +icalparameter_fbtype icalparameter_get_fbtype(icalparameter* value); +void icalparameter_set_fbtype(icalparameter* value, icalparameter_fbtype v); + +/* FMTTYPE */ +icalparameter* icalparameter_new_fmttype(char* v); +char* icalparameter_get_fmttype(icalparameter* value); +void icalparameter_set_fmttype(icalparameter* value, char* v); + +/* LANGUAGE */ +icalparameter* icalparameter_new_language(char* v); +char* icalparameter_get_language(icalparameter* value); +void icalparameter_set_language(icalparameter* value, char* v); + +/* MEMBER */ +icalparameter* icalparameter_new_member(char* v); +char* icalparameter_get_member(icalparameter* value); +void icalparameter_set_member(icalparameter* value, char* v); + +/* PARTSTAT */ +icalparameter* icalparameter_new_partstat(icalparameter_partstat v); +icalparameter_partstat icalparameter_get_partstat(icalparameter* value); +void icalparameter_set_partstat(icalparameter* value, icalparameter_partstat v); + +/* RANGE */ +icalparameter* icalparameter_new_range(icalparameter_range v); +icalparameter_range icalparameter_get_range(icalparameter* value); +void icalparameter_set_range(icalparameter* value, icalparameter_range v); + +/* RELATED */ +icalparameter* icalparameter_new_related(icalparameter_related v); +icalparameter_related icalparameter_get_related(icalparameter* value); +void icalparameter_set_related(icalparameter* value, icalparameter_related v); + +/* RELTYPE */ +icalparameter* icalparameter_new_reltype(icalparameter_reltype v); +icalparameter_reltype icalparameter_get_reltype(icalparameter* value); +void icalparameter_set_reltype(icalparameter* value, icalparameter_reltype v); + +/* ROLE */ +icalparameter* icalparameter_new_role(icalparameter_role v); +icalparameter_role icalparameter_get_role(icalparameter* value); +void icalparameter_set_role(icalparameter* value, icalparameter_role v); + +/* RSVP */ +icalparameter* icalparameter_new_rsvp(int v); +int icalparameter_get_rsvp(icalparameter* value); +void icalparameter_set_rsvp(icalparameter* value, int v); + +/* SENT-BY */ +icalparameter* icalparameter_new_sentby(char* v); +char* icalparameter_get_sentby(icalparameter* value); +void icalparameter_set_sentby(icalparameter* value, char* v); + +/* TZID */ +icalparameter* icalparameter_new_tzid(char* v); +char* icalparameter_get_tzid(icalparameter* value); +void icalparameter_set_tzid(icalparameter* value, char* v); + +/* VALUE */ +icalparameter* icalparameter_new_value(icalparameter_value v); +icalparameter_value icalparameter_get_value(icalparameter* value); +void icalparameter_set_value(icalparameter* value, icalparameter_value v); + +/* X */ +icalparameter* icalparameter_new_x(char* v); +char* icalparameter_get_x(icalparameter* value); +void icalparameter_set_x(icalparameter* value, char* v); + +/* X-LIC-ERRORTYPE */ +icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v); +icalparameter_xlicerrortype icalparameter_get_xlicerrortype(icalparameter* value); +void icalparameter_set_xlicerrortype(icalparameter* value, icalparameter_xlicerrortype v); + +/* X-LIC-COMPARETYPE */ +icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v); +icalparameter_xliccomparetype icalparameter_get_xliccomparetype(icalparameter* value); +void icalparameter_set_xliccomparetype(icalparameter* value, icalparameter_xliccomparetype v); + +#endif ICALPARAMETER_H diff --git a/libical/src/libical/icalparser.c b/libical/src/libical/icalparser.c new file mode 100644 index 0000000000..8541ae4fab --- /dev/null +++ b/libical/src/libical/icalparser.c @@ -0,0 +1,990 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalparser.c + CREATOR: eric 04 August 1999 + + $Id$ + $Locker$ + + 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. + + The Initial Developer of the Original Code is Eric Busboom + + (C) COPYRIGHT 1999 The Software Studio. + http://www.softwarestudio.org + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "ical.h" +#include "pvl.h" +#include "icalparser.h" +#include "icalmemory.h" +#include <string.h> /* For strncpy & size_t */ +#include <stdio.h> /* For FILE and fgets and sprintf */ +#include <stdlib.h> /* for free */ + + +extern icalvalue* icalparser_yy_value; +void set_parser_value_state(icalvalue_kind kind); +int ical_yy_parse(void); + +char* icalparser_get_next_char(char c, char *str); +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; + size_t tmp_buf_size; + char temp[TMP_BUF_SIZE]; + icalcomponent *root_component; + icalcomponent *tail; + int version; + int level; + int lineno; + icalparser_state state; + pvl_list components; + + void *line_gen_data; + +}; + + +icalparser* icalparser_new() +{ + 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->lineno = 0; + + memset(impl->temp,0, TMP_BUF_SIZE); + + return (icalparser*)impl; +} + +void icalparser_free(icalparser* parser) +{ + struct icalparser_impl* impl = (struct icalparser_impl*)parser; + icalcomponent *c; + + if (impl->root_component != 0){ + icalcomponent_free(impl->root_component); + } + + while( (c=pvl_pop(impl->components)) != 0){ + icalcomponent_free(c); + } + + pvl_free(impl->components); +} + +void icalparser_set_gen_data(icalparser* parser, void* data) +{ + struct icalparser_impl* impl = (struct icalparser_impl*)parser; + + impl->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 quote_mode = 0; + char* p; + + + for(p=str; *p!=0; p++){ + + 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 */ +char* make_segment(char* start, char* end) +{ + char *buf; + size_t size = (size_t)end - (size_t)start; + + buf = icalmemory_tmp_buffer(size+1); + + + strncpy(buf,start,size); + *(buf+size) = 0; + + return buf; + +} + +char* input_buffer; +char* input_buffer_p; +#define min(a,b) ((a) < (b) ? (a) : (b)) + +int icalparser_flex_input(char* buf, int max_size) +{ + int n = min(max_size,strlen(input_buffer_p)); + + if (n > 0){ + memcpy(buf, input_buffer_p, n); + input_buffer_p += n; + return n; + } else { + return 0; + } +} + +void icalparser_clear_flex_input() +{ + input_buffer_p = input_buffer+strlen(input_buffer); +} + +/* Cal the flex parser to parse a complex value */ + +icalvalue* icalparser_parse_value(icalvalue_kind kind, + char* str, icalproperty** error) +{ + int r; + input_buffer_p = input_buffer = str; + + set_parser_value_state(kind); + icalparser_yy_value = 0; + + r = ical_yy_parse(); + + /* Error. Parse failed */ + if( icalparser_yy_value == 0 || r != 0){ + + if(icalparser_yy_value !=0){ + icalvalue_free(icalparser_yy_value); + icalparser_yy_value = 0; + } + + return 0; + } + + if (error != 0){ + *error = 0; + } + + return icalparser_yy_value; +} + +char* icalparser_get_prop_name(char* line, char** end) +{ + char* p; + char* v; + char *str; + + p = icalparser_get_next_char(';',line); + v = icalparser_get_next_char(':',line); + 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); + + if (next == 0) { + return 0; + } + + str = make_segment(line,next); + *end = next+1; + return str; + +} + +char* icalparser_get_next_paramvalue(char* line, char **end) +{ + + char* next; + char *str; + + next = icalparser_get_next_char(',',line); + + 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 seperated 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); + + /* Unforunately, RFC2445 says that for the RECUR value, COMMA + can both seperate digits in a list, and it can seperate + 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 seperator*/ + /* Fall through */ + printf("%s\n",next); + } else if (next != 0){ + /* Not real, get the next COMMA */ + p = next+1; + next = 0; + continue; + } + } + + /* If the comma is preceeded by a '\', then it is a literal and + not a value seperator*/ + + 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); + next = icalparser_get_next_char(';', line); + + /* 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); + } + + 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; + struct icalparser_impl* impl = (struct icalparser_impl*)parser; + size_t buf_size = impl->tmp_buf_size; + + + line_p = line = icalmemory_new_buffer(buf_size); + line[0] = '\0'; + + while(1) { + + /* The buffer is not clear, so transfer the data in it to the + output. This may be left over from a previous call */ + if (impl->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 (impl->temp[impl->tmp_buf_size-1] == 0){ + impl->buffer_full = 1; + } else { + impl->buffer_full = 0; + } + + /* Copy the temp to the output and clear the temp buffer. */ + icalmemory_append_string(&line,&line_p,&buf_size,impl->temp); + impl->temp[0] = '\0' ; + } + + impl->temp[impl->tmp_buf_size-1] = 1; /* Mark end of buffer */ + + if ((*line_gen_func)(impl->temp,impl->tmp_buf_size,impl->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 (impl->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' && impl->temp[0] == ' ') { + + /* back up the pointer to erase the continuation characters */ + line_p--; + + if ( *(line_p-1) == '\r'){ + line_p--; + } + + /* shift the temp buffer down to eliminate the leading space*/ + memmove(&(impl->temp[0]),&(impl->temp[1]),impl->tmp_buf_size); + + impl->temp[impl->tmp_buf_size-1] = impl->temp[impl->tmp_buf_size-2]; + + } else if ( impl->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'; + } + + return line; + +} + +void insert_error(icalcomponent* comp, char* text, + char* message, icalparameter_xlicerrortype type) +{ + char temp[1024]; + + if (strlen(text) > 256) { + sprintf(temp,"%s: \'%256s...\'",message,text); + } else { + sprintf(temp,"%s: \'%s\'",message,text); + } + + icalcomponent_add_property + (comp, + icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype(type), + 0)); +} + +icalcomponent* icalparser_parse(icalparser *parser, + char* (*line_gen_func)(char *s, size_t size, + void* d)) +{ + + char* line; + icalcomponent *c=0; + icalcomponent *root_component=0; + + icalerror_check_arg_rz((parser !=0),"parser"); + + do{ + line = icalparser_get_line(parser, line_gen_func); + + if ((c = icalparser_add_line(parser,line)) != 0){ + if (root_component == 0){ + /* Just one component */ + icalparser_claim(parser); + root_component = c; + } else if(icalcomponent_isa(root_component) + != ICAL_XROOT_COMPONENT) { + /*Got a second component, so move the two components under + an XROOT container */ + icalcomponent *tempc; + tempc = icalcomponent_new(ICAL_XROOT_COMPONENT); + icalcomponent_add_component(tempc, root_component); + icalparser_claim(parser); + icalcomponent_add_component(tempc, c); + root_component = tempc; + } else { + /* Already have an XROOT container, so add the component + to it*/ + icalcomponent_add_component(root_component, c); + icalparser_claim(parser); + } + } + } while ( line != 0); + + return root_component; + +} + +icalcomponent* icalparser_add_line(icalparser* parser, + char* line) +{ + char *p; + char *str; + char *end; + int vcount = 0; + icalproperty *prop; + icalvalue *value; + icalvalue_kind value_kind = ICAL_NO_VALUE; + + + struct icalparser_impl *impl = (struct icalparser_impl*)parser; + icalerror_check_arg_rz((parser != 0),"parser"); + + + if (line == 0) + { + impl->state = ICALPARSER_ERROR; + 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 market for the start or end of + a component */ + + end = 0; + str = icalparser_get_prop_name(line, &end); + + if (str == 0){ + /* Could not get a property name */ + icalcomponent *tail = pvl_data(pvl_tail(impl->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; + impl->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(strcmp(str,"BEGIN") == 0){ + icalcomponent *c; + + impl->level++; + str = icalparser_get_next_value(end,&end, value_kind); + + c = icalcomponent_new_from_string(str); + + if (c == 0){ + c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); + insert_error(c,str,"Parse error in component name", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + } + + pvl_push(impl->components,c); + + impl->state = ICALPARSER_BEGIN_COMP; + return 0; + + } else if (strcmp(str,"END") == 0 ) { + icalcomponent* tail; + + impl->level--; + str = icalparser_get_next_value(end,&end, value_kind); + + impl->root_component = pvl_pop(impl->components); + + tail = pvl_data(pvl_tail(impl->components)); + + if(tail != 0){ + icalcomponent_add_component(tail,impl->root_component); + } + + tail = 0; + + /* Return the component if we are back to the 0th level */ + if (impl->level == 0){ + impl->state = ICALPARSER_SUCCESS; + return impl->root_component; + } else { + impl->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(impl->components)) == 0){ + impl->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 = icalproperty_new_from_string(str); + + if (prop != 0){ + icalcomponent *tail = pvl_data(pvl_tail(impl->components)); + + 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 = + icalenum_property_kind_to_value_kind( + icalproperty_isa(prop)); + + } else { + icalcomponent* tail = pvl_data(pvl_tail(impl->components)); + + insert_error(tail,str,"Parse error in property name", + ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); + + tail = 0; + impl->state = ICALPARSER_ERROR; + return 0; + } + + /********************************************************************** + * Handle parameter values + **********************************************************************/ + + /* Now, add any parameters to the last property */ + + p = 0; + while(1) { + + if (*(end-1) == ':'){ + /* if the last seperator 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(impl->components)); + + name = icalparser_get_param_name(str,&pvalue); + + if (name == 0){ + /* 'tail' defined above */ + insert_error(tail, str, "Can't parse parameter name", + ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); + tail = 0; + break; + } + + kind = icalenum_string_to_parameter_kind(name); + + if (kind != ICAL_NO_PARAMETER){ + param = icalparameter_new_from_string(kind,pvalue); + } else { + /* Error. Failed to parse the parameter*/ + /* 'tail' defined above */ + insert_error(tail, str, "Can't parse parameter name", + ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); + tail = 0; + impl->state = ICALPARSER_ERROR; + return 0; + } + + if (param == 0){ + /* 'tail' defined above */ + insert_error(tail,str,"Can't parse parameter value", + ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); + + tail = 0; + impl->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_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 = + icalenum_property_kind_to_value_kind( + icalproperty_isa(prop)); + + icalparameter_free(param); + tail = 0; + impl->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(impl->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(impl->components)); + + sprintf(temp,"Can't parse as %s value in %s property. Removing entire property", + icalenum_value_kind_to_string(value_kind), + icalenum_property_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; + impl->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(impl->components)); + + sprintf(temp,"No value for %s property. Removing entire property", + icalenum_property_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; + impl->state = ICALPARSER_ERROR; + return 0; + } else { + + break; + } + } + } + + /**************************************************************** + * End of component parsing. + *****************************************************************/ + + if (pvl_data(pvl_tail(impl->components)) == 0 && + impl->level == 0){ + impl->state = ICALPARSER_SUCCESS; + return impl->root_component; + } else { + impl->state = ICALPARSER_IN_PROGRESS; + return 0; + } + +} + +icalparser_state icalparser_get_state(icalparser* parser) +{ + struct icalparser_impl* impl = (struct icalparser_impl*) parser; + return impl->state; + +} + +icalcomponent* icalparser_claim(icalparser* parser) +{ + struct icalparser_impl* impl = (struct icalparser_impl*) parser; + icalcomponent *c = impl->root_component; + + impl->root_component = 0; + + return c; + +} + + +icalcomponent* icalparser_clean(icalparser* parser) +{ + struct icalparser_impl* impl = (struct icalparser_impl*) parser; + icalcomponent *tail = pvl_data(pvl_tail(impl->components)); + + 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(impl->components))) != 0){ + + insert_error(tail," ", + "Missing END tag for this component. Closing component at end of input.", + ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); + + + impl->root_component = pvl_pop(impl->components); + tail=pvl_data(pvl_tail(impl->components)); + + if(tail != 0){ + icalcomponent_add_component(tail,impl->root_component); + } + } + + return impl->root_component; + +} + +struct slg_data { + char* pos; + char* str; +}; + +char* 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(char* str) +{ + icalcomponent *c; + struct slg_data d; + icalparser *p; + + d.pos = 0; + d.str = str; + + p = icalparser_new(); + icalparser_set_gen_data(p,&d); + c = icalparser_parse(p,string_line_generator); + icalparser_free(p); + + return c; + +} diff --git a/libical/src/libical/icalparser.h b/libical/src/libical/icalparser.h new file mode 100644 index 0000000000..25c07eca9f --- /dev/null +++ b/libical/src/libical/icalparser.h @@ -0,0 +1,94 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalparser.h + CREATOR: eric 20 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalparser.h + +======================================================================*/ + + +#ifndef ICALPARSER_H +#define ICALPARSER_H + +#include "ical.h" +#include <stdio.h> /* For FILE* */ + +typedef void* icalparser; +typedef enum icalparser_state { + ICALPARSER_ERROR, + ICALPARSER_SUCCESS, + ICALPARSER_BEGIN_COMP, + ICALPARSER_END_COMP, + ICALPARSER_IN_PROGRESS +} icalparser_state; + + +/*********************************************************************** + * 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)); + +/* A simple, and incorrect interface - can only return one component*/ +icalcomponent* icalparser_parse_string(char* str); + + +/*********************************************************************** + * Line-oriented parsing. + * + * Create a new parser via icalparse_new_parser, then add ines one at + * a time with icalparse_add_line(). icalparser_add_line() will return + * non-zero when it has finished with a component. + ***********************************************************************/ + +icalparser* icalparser_new(); +void icalparser_set_gen_data(icalparser* parser, void* data); +icalcomponent* icalparser_add_line(icalparser* parser, char* str ); +icalcomponent* icalparser_claim(icalparser* parser); +icalcomponent* icalparser_clean(icalparser* parser); +icalparser_state icalparser_get_state(icalparser* parser); +void icalparser_free(icalparser* parser); + +/*********************************************************************** + * Parser support functions + ***********************************************************************/ + +/* Use the flex/bison parser to turn a string into a value type */ +icalvalue* icalparser_parse_value(icalvalue_kind kind, 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)); + + +/* a line_gen_function that returns lines from a string. To use it, + set string_line_generator_str to point to the input string, and set + string_line_generator_pos to 0. These globals make the routine not + thead-safe. */ + +extern char* string_line_generator_str; +extern char* string_line_generator_pos; +char* string_line_generator(char *out, size_t buf_size, void *d); + +#endif /* !ICALPARSE_H */ diff --git a/libical/src/libical/icalproperty.c b/libical/src/libical/icalproperty.c new file mode 100644 index 0000000000..c3fe7c9073 --- /dev/null +++ b/libical/src/libical/icalproperty.c @@ -0,0 +1,3095 @@ +/* -*- Mode: C -*- */ + +/*====================================================================== + FILE: icalproperty.c + CREATOR: eric 28 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalproperty.c + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <string.h> /* For 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. */ + +#include "ical.h" +#include "pvl.h" +#include "icalenums.h" +#include "icalerror.h" +#include "icalmemory.h" + +#define TMP_BUF_SIZE 1024 + +/* 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, 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(struct icalproperty_impl *impl,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*)impl, + (icalparameter*)vp); + } else { + abort(); + } + + } + + +} + +struct icalproperty_impl* +icalproperty_new_impl (icalproperty_kind kind) +{ + struct icalproperty_impl* prop; + + if ( ( prop = (struct icalproperty_impl*) + malloc(sizeof(struct icalproperty_impl))) == 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) +{ + icalproperty *prop = (icalproperty*)icalproperty_new_impl(kind); + + return prop; +} + + +icalproperty* +icalproperty_new_clone(icalproperty* prop) +{ + struct icalproperty_impl *old = (struct icalproperty_impl*)prop; + struct icalproperty_impl *new = icalproperty_new_impl(old->kind); + pvl_elem p; + + icalerror_check_arg_rz((prop!=0),"Prop"); + 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 = 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; + +} + +/* This one works a little differently from the other *_from_string + routines; the string input is the name of the property, not the + data associated with the property, as it is in + icalvalue_from_string. All of the parsing associated with + properties is driven by routines in icalparse.c */ + +icalproperty* icalproperty_new_from_string(char* str) +{ + icalproperty_kind kind; + + icalerror_check_arg_rz( (str!=0),"str"); + + kind = icalenum_string_to_property_kind(str); + + if (kind == ICAL_NO_PROPERTY){ + + if( str[0] == 'X' && str[1] == '-'){ + icalproperty *p = icalproperty_new(ICAL_X_PROPERTY); + icalproperty_set_x_name(p,str); + return p; + } else { + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + return 0; + } + + } else { + return icalproperty_new(kind); + } +} + +void +icalproperty_free (icalproperty* prop) +{ + struct icalproperty_impl *p; + + icalparameter* param; + + icalerror_check_arg_rv((prop!=0),"prop"); + + p = (struct icalproperty_impl*)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); + +} + + +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 */ + + 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; + +#ifdef ICAL_UNIX_NEWLINE + char newline[] = "\n"; +#else + char newline[] = "\r\n"; +#endif + + struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + /* Append property name */ + + if (impl->kind == ICAL_X_PROPERTY && impl->x_name != 0){ + property_name = impl->x_name; + } else { + property_name = icalenum_property_kind_to_string(impl->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); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + + /* Append parameters */ + for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); + param != 0; + param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { + + char* kind_string = icalparameter_as_ical_string(param); + + if (kind_string == 0 ) { + char temp[TMP_BUF_SIZE]; + snprintf(temp, TMP_BUF_SIZE,"Got a parameter of unknown kind in %s property",property_name); + icalerror_warn(temp); + continue; + } + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, " ;"); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); + icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); + + } + + /* Append value */ + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, " :"); + + value = icalproperty_get_value(prop); + + if (value != 0){ + icalmemory_append_string(&buf, &buf_ptr, &buf_size, + icalvalue_as_ical_string(icalproperty_get_value(prop))); + } 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. */ + + + out_buf = icalmemory_tmp_buffer(strlen(buf)+1); + strcpy(out_buf, buf); + + icalmemory_free_buffer(buf); + + return out_buf; +} + + + +icalproperty_kind +icalproperty_isa (icalproperty* property) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)property; + + if(property != 0){ + return p->kind; + } + + return ICAL_NO_PROPERTY; +} + +int +icalproperty_isa_property (void* property) +{ + struct icalproperty_impl *impl = (struct icalproperty_impl*)property; + + icalerror_check_arg_rz( (property!=0), "property"); + + if (strcmp(impl->id,"prop") == 0) { + return 1; + } else { + return 0; + } +} + + +void +icalproperty_add_parameter (icalproperty* prop,icalparameter* parameter) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rv( (prop!=0),"prop"); + icalerror_check_arg_rv( (parameter!=0),"parameter"); + + pvl_push(p->parameters, parameter); + +} + + +void +icalproperty_remove_parameter (icalproperty* prop, icalparameter_kind kind) +{ + icalerror_check_arg_rv((prop!=0),"prop"); + + assert(0); /* This routine is not implemented */ +} + + +int +icalproperty_count_parameters (icalproperty* prop) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + + if(prop != 0){ + return pvl_count(p->parameters); + } + + icalerror_set_errno(ICAL_USAGE_ERROR); + return -1; +} + + +icalparameter* +icalproperty_get_first_parameter (icalproperty* prop, icalparameter_kind kind) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + p->parameter_iterator = pvl_head(p->parameters); + + if (p->parameter_iterator == 0) { + return 0; + } + + return (icalparameter*) pvl_data(p->parameter_iterator); +} + + +icalparameter* +icalproperty_get_next_parameter (icalproperty* prop, icalparameter_kind kind) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + icalerror_check_arg_rz( (prop!=0),"prop"); + + if (p->parameter_iterator == 0 ) { + return 0; + } + + p->parameter_iterator = pvl_next(p->parameter_iterator); + + if (p->parameter_iterator == 0 ) { + return 0; + } + + return (icalparameter*) pvl_data(p->parameter_iterator); +} + +void +icalproperty_set_value (icalproperty* prop, icalvalue* value) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rv((prop !=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,prop); +} + + +icalvalue* +icalproperty_get_value (icalproperty* prop) +{ + struct icalproperty_impl *p = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + return p->value; +} + + +void icalproperty_set_x_name(icalproperty* prop, char* name) +{ + struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rv( (name!=0),"name"); + icalerror_check_arg_rv( (prop!=0),"prop"); + + if (impl->x_name != 0) { + free(impl->x_name); + } + + impl->x_name = strdup(name); + + if(impl->x_name == 0){ + icalerror_set_errno(ICAL_ALLOCATION_ERROR); + } + +} + +char* icalproperty_get_x_name(icalproperty* prop){ + + struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; + + icalerror_check_arg_rz( (prop!=0),"prop"); + + return impl->x_name; +} + + +void icalproperty_set_parent(icalproperty* property, + icalcomponent* component) +{ + struct icalproperty_impl *impl = (struct icalproperty_impl*)property; + + icalerror_check_arg_rv( (property!=0),"property"); + + impl->parent = component; +} + +icalcomponent* icalproperty_get_parent(icalproperty* property) +{ + struct icalproperty_impl *impl = (struct icalproperty_impl*)property; + + icalerror_check_arg_rv( (property!=0),"property"); + + return impl->parent; +} + + +/* Everything below this line is machine generated. Do not edit. */ + +/* METHOD */ + +icalproperty* icalproperty_new_method(icalproperty_method v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); + + + icalproperty_set_method((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_method(icalproperty_method v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); + + + icalproperty_set_method((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_method(icalproperty* prop, icalproperty_method v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_method(v); + + icalproperty_set_value(prop,value); + +} + +icalproperty_method icalproperty_get_method(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_method(value); +} + +/* LAST-MODIFIED */ + +icalproperty* icalproperty_new_lastmodified(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); + + + icalproperty_set_lastmodified((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); + + + icalproperty_set_lastmodified((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetime(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_lastmodified(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetime(value); +} + +/* UID */ + +icalproperty* icalproperty_new_uid(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_uid((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_uid(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_uid((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_uid(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_uid(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* PRODID */ + +icalproperty* icalproperty_new_prodid(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_prodid((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_prodid(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_prodid((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_prodid(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_prodid(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* STATUS */ + +icalproperty* icalproperty_new_status(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_status((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_status(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_status((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_status(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_status(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* DESCRIPTION */ + +icalproperty* icalproperty_new_description(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_description((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_description(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_description((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_description(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_description(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* DURATION */ + +icalproperty* icalproperty_new_duration(struct icaldurationtype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); + + + icalproperty_set_duration((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); + + + icalproperty_set_duration((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_duration(v); + + icalproperty_set_value(prop,value); + +} + +struct icaldurationtype icalproperty_get_duration(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_duration(value); +} + +/* CATEGORIES */ + +icalproperty* icalproperty_new_categories(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_categories((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_categories(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_categories((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_categories(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_categories(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* VERSION */ + +icalproperty* icalproperty_new_version(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_version((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_version(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_version((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_version(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_version(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* TZOFFSETFROM */ + +icalproperty* icalproperty_new_tzoffsetfrom(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); + + + icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); + + + icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_utcoffset(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_tzoffsetfrom(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_utcoffset(value); +} + +/* RRULE */ + +icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); + + + icalproperty_set_rrule((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); + + + icalproperty_set_rrule((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_recur(v); + + icalproperty_set_value(prop,value); + +} + +struct icalrecurrencetype icalproperty_get_rrule(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_recur(value); +} + +/* ATTENDEE */ + +icalproperty* icalproperty_new_attendee(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_attendee((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_attendee(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_attendee((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_attendee(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_caladdress(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_attendee(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_caladdress(value); +} + +/* CONTACT */ + +icalproperty* icalproperty_new_contact(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_contact((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_contact(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_contact((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_contact(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_contact(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* RELATED-TO */ + +icalproperty* icalproperty_new_relatedto(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_relatedto((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_relatedto(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_relatedto((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_relatedto(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_relatedto(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* ORGANIZER */ + +icalproperty* icalproperty_new_organizer(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_organizer((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_organizer(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_organizer((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_organizer(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_caladdress(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_organizer(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_caladdress(value); +} + +/* COMMENT */ + +icalproperty* icalproperty_new_comment(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_comment((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_comment(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_comment((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_comment(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_comment(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* TRIGGER */ + +icalproperty* icalproperty_new_trigger(union icaltriggertype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); + + + icalproperty_set_trigger((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_trigger(union icaltriggertype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); + + + icalproperty_set_trigger((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_trigger(icalproperty* prop, union icaltriggertype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_trigger(v); + + icalproperty_set_value(prop,value); + +} + +union icaltriggertype icalproperty_get_trigger(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_trigger(value); +} + +/* X-LIC-ERROR */ + +icalproperty* icalproperty_new_xlicerror(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_xlicerror((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_xlicerror(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_xlicerror((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_xlicerror(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_xlicerror(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* CLASS */ + +icalproperty* icalproperty_new_class(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_class((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_class(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_class((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_class(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_class(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* TZOFFSETTO */ + +icalproperty* icalproperty_new_tzoffsetto(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); + + + icalproperty_set_tzoffsetto((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_tzoffsetto(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); + + + icalproperty_set_tzoffsetto((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_tzoffsetto(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_utcoffset(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_tzoffsetto(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_utcoffset(value); +} + +/* TRANSP */ + +icalproperty* icalproperty_new_transp(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_transp((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_transp(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_transp((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_transp(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_transp(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* SEQUENCE */ + +icalproperty* icalproperty_new_sequence(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); + + + icalproperty_set_sequence((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_sequence(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); + + + icalproperty_set_sequence((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_sequence(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_integer(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_sequence(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_integer(value); +} + +/* LOCATION */ + +icalproperty* icalproperty_new_location(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_location((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_location(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_location((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_location(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_location(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* REQUEST-STATUS */ + +icalproperty* icalproperty_new_requeststatus(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_requeststatus((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_requeststatus(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_requeststatus((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_requeststatus(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_string(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_requeststatus(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_string(value); +} + +/* EXDATE */ + +icalproperty* icalproperty_new_exdate(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); + + + icalproperty_set_exdate((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); + + + icalproperty_set_exdate((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimedate(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_exdate(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimedate(value); +} + +/* TZID */ + +icalproperty* icalproperty_new_tzid(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzid((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_tzid(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzid((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_tzid(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_tzid(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* RESOURCES */ + +icalproperty* icalproperty_new_resources(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_resources((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_resources(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_resources((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_resources(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_resources(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* TZURL */ + +icalproperty* icalproperty_new_tzurl(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzurl((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_tzurl(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzurl((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_tzurl(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_uri(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_tzurl(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_uri(value); +} + +/* REPEAT */ + +icalproperty* icalproperty_new_repeat(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); + + + icalproperty_set_repeat((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_repeat(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); + + + icalproperty_set_repeat((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_repeat(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_integer(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_repeat(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_integer(value); +} + +/* PRIORITY */ + +icalproperty* icalproperty_new_priority(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); + + + icalproperty_set_priority((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_priority(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); + + + icalproperty_set_priority((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_priority(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_integer(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_priority(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_integer(value); +} + +/* FREEBUSY */ + +icalproperty* icalproperty_new_freebusy(struct icalperiodtype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); + + + icalproperty_set_freebusy((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); + + + icalproperty_set_freebusy((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_period(v); + + icalproperty_set_value(prop,value); + +} + +struct icalperiodtype icalproperty_get_freebusy(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_period(value); +} + +/* DTSTART */ + +icalproperty* icalproperty_new_dtstart(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); + + + icalproperty_set_dtstart((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); + + + icalproperty_set_dtstart((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimedate(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_dtstart(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimedate(value); +} + +/* RECURRENCE-ID */ + +icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); + + + icalproperty_set_recurrenceid((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); + + + icalproperty_set_recurrenceid((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimedate(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_recurrenceid(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimedate(value); +} + +/* SUMMARY */ + +icalproperty* icalproperty_new_summary(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_summary((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_summary(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_summary((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_summary(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_summary(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* DTEND */ + +icalproperty* icalproperty_new_dtend(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); + + + icalproperty_set_dtend((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); + + + icalproperty_set_dtend((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimedate(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_dtend(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimedate(value); +} + +/* TZNAME */ + +icalproperty* icalproperty_new_tzname(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzname((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_tzname(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_tzname((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_tzname(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_tzname(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* RDATE */ + +icalproperty* icalproperty_new_rdate(struct icalperiodtype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); + + + icalproperty_set_rdate((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_rdate(struct icalperiodtype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); + + + icalproperty_set_rdate((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_rdate(icalproperty* prop, struct icalperiodtype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimeperiod(v); + + icalproperty_set_value(prop,value); + +} + +struct icalperiodtype icalproperty_get_rdate(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimeperiod(value); +} + +/* URL */ + +icalproperty* icalproperty_new_url(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_url((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_url(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_url((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_url(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_uri(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_url(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_uri(value); +} + +/* ATTACH */ + +icalproperty* icalproperty_new_attach(struct icalattachtype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); + + + icalproperty_set_attach((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_attach(struct icalattachtype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); + + + icalproperty_set_attach((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_attach(icalproperty* prop, struct icalattachtype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_attach(v); + + icalproperty_set_value(prop,value); + +} + +struct icalattachtype icalproperty_get_attach(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_attach(value); +} + +/* X-LIC-CLUSTERCOUNT */ + +icalproperty* icalproperty_new_xlicclustercount(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); + + + icalproperty_set_xlicclustercount((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_xlicclustercount(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); + + + icalproperty_set_xlicclustercount((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_xlicclustercount(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_integer(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_xlicclustercount(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_integer(value); +} + +/* EXRULE */ + +icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); + + + icalproperty_set_exrule((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); + + + icalproperty_set_exrule((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_recur(v); + + icalproperty_set_value(prop,value); + +} + +struct icalrecurrencetype icalproperty_get_exrule(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_recur(value); +} + +/* QUERY */ + +icalproperty* icalproperty_new_query(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_query((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_query(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_query((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_query(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_query(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_query(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_query(value); +} + +/* PERCENT-COMPLETE */ + +icalproperty* icalproperty_new_percentcomplete(int v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); + + + icalproperty_set_percentcomplete((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_percentcomplete(int v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); + + + icalproperty_set_percentcomplete((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_percentcomplete(icalproperty* prop, int v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_integer(v); + + icalproperty_set_value(prop,value); + +} + +int icalproperty_get_percentcomplete(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_integer(value); +} + +/* CALSCALE */ + +icalproperty* icalproperty_new_calscale(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_calscale((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_calscale(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_calscale((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_calscale(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_calscale(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} + +/* CREATED */ + +icalproperty* icalproperty_new_created(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); + + + icalproperty_set_created((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); + + + icalproperty_set_created((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_created(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetime(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_created(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetime(value); +} + +/* GEO */ + +icalproperty* icalproperty_new_geo(struct icalgeotype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); + + + icalproperty_set_geo((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); + + + icalproperty_set_geo((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_geo(v); + + icalproperty_set_value(prop,value); + +} + +struct icalgeotype icalproperty_get_geo(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_geo(value); +} + +/* COMPLETED */ + +icalproperty* icalproperty_new_completed(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); + + + icalproperty_set_completed((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); + + + icalproperty_set_completed((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetime(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_completed(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetime(value); +} + +/* DTSTAMP */ + +icalproperty* icalproperty_new_dtstamp(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); + + + icalproperty_set_dtstamp((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); + + + icalproperty_set_dtstamp((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetime(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_dtstamp(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetime(value); +} + +/* DUE */ + +icalproperty* icalproperty_new_due(struct icaltimetype v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); + + + icalproperty_set_due((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); + + + icalproperty_set_due((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_due(icalproperty* prop, struct icaltimetype v) +{ + icalvalue *value; + + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_datetimedate(v); + + icalproperty_set_value(prop,value); + +} + +struct icaltimetype icalproperty_get_due(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_datetimedate(value); +} + +/* ACTION */ + +icalproperty* icalproperty_new_action(char* v) +{ + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_action((icalproperty*)impl,v); + + return (icalproperty*)impl; +} + +icalproperty* icalproperty_vanew_action(char* v, ...) +{ + va_list args; + struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); + icalerror_check_arg_rz( (v!=0),"v"); + + + icalproperty_set_action((icalproperty*)impl,v); + + va_start(args,v); + icalproperty_add_parameters(impl, args); + va_end(args); + + return (icalproperty*)impl; +} + +void icalproperty_set_action(icalproperty* prop, char* v) +{ + icalvalue *value; + + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_arg_rv( (prop!=0),"prop"); + + value = icalvalue_new_text(v); + + icalproperty_set_value(prop,value); + +} + +char* icalproperty_get_action(icalproperty* prop) +{ + icalvalue *value; + icalerror_check_arg( (prop!=0),"prop"); + + value = icalproperty_get_value(prop); + + return icalvalue_get_text(value); +} diff --git a/libical/src/libical/icalproperty.h b/libical/src/libical/icalproperty.h new file mode 100644 index 0000000000..2cd28fe179 --- /dev/null +++ b/libical/src/libical/icalproperty.h @@ -0,0 +1,368 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalderivedproperties.{c,h} + CREATOR: eric 09 May 1999 + + $Id$ + + (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. + + + ======================================================================*/ + + +#ifndef ICALPROPERTY_H +#define ICALPROPERTY_H + +#include <time.h> + +typedef void icalproperty; + +icalproperty* icalproperty_new(icalproperty_kind kind); + +icalproperty* icalproperty_new_clone(icalproperty * prop); + +icalproperty* icalproperty_new_from_string(char* str); + +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_parameter(icalproperty* prop,icalparameter* parameter); + +void icalproperty_remove_parameter(icalproperty* prop, + icalparameter_kind kind); + +int icalproperty_count_parameters(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); +icalvalue* icalproperty_get_value(icalproperty* prop); + +/* Deal with X properties */ + +void icalproperty_set_x_name(icalproperty* prop, char* name); +char* icalproperty_get_x_name(icalproperty* prop); + + +/* Everything below this line is machine generated. Do not edit. */ + +/* METHOD */ +icalproperty* icalproperty_new_method(icalproperty_method v); +icalproperty* icalproperty_vanew_method(icalproperty_method v, ...); +void icalproperty_set_method(icalproperty* prop, icalproperty_method v); +icalproperty_method icalproperty_get_method(icalproperty* prop); + +/* LAST-MODIFIED */ +icalproperty* icalproperty_new_lastmodified(struct icaltimetype v); +icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...); +void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_lastmodified(icalproperty* prop); + +/* UID */ +icalproperty* icalproperty_new_uid(char* v); +icalproperty* icalproperty_vanew_uid(char* v, ...); +void icalproperty_set_uid(icalproperty* prop, char* v); +char* icalproperty_get_uid(icalproperty* prop); + +/* PRODID */ +icalproperty* icalproperty_new_prodid(char* v); +icalproperty* icalproperty_vanew_prodid(char* v, ...); +void icalproperty_set_prodid(icalproperty* prop, char* v); +char* icalproperty_get_prodid(icalproperty* prop); + +/* STATUS */ +icalproperty* icalproperty_new_status(char* v); +icalproperty* icalproperty_vanew_status(char* v, ...); +void icalproperty_set_status(icalproperty* prop, char* v); +char* icalproperty_get_status(icalproperty* prop); + +/* DESCRIPTION */ +icalproperty* icalproperty_new_description(char* v); +icalproperty* icalproperty_vanew_description(char* v, ...); +void icalproperty_set_description(icalproperty* prop, char* v); +char* icalproperty_get_description(icalproperty* prop); + +/* DURATION */ +icalproperty* icalproperty_new_duration(struct icaldurationtype v); +icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...); +void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v); +struct icaldurationtype icalproperty_get_duration(icalproperty* prop); + +/* CATEGORIES */ +icalproperty* icalproperty_new_categories(char* v); +icalproperty* icalproperty_vanew_categories(char* v, ...); +void icalproperty_set_categories(icalproperty* prop, char* v); +char* icalproperty_get_categories(icalproperty* prop); + +/* VERSION */ +icalproperty* icalproperty_new_version(char* v); +icalproperty* icalproperty_vanew_version(char* v, ...); +void icalproperty_set_version(icalproperty* prop, char* v); +char* icalproperty_get_version(icalproperty* prop); + +/* TZOFFSETFROM */ +icalproperty* icalproperty_new_tzoffsetfrom(int v); +icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...); +void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v); +int icalproperty_get_tzoffsetfrom(icalproperty* prop); + +/* RRULE */ +icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v); +icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...); +void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v); +struct icalrecurrencetype icalproperty_get_rrule(icalproperty* prop); + +/* ATTENDEE */ +icalproperty* icalproperty_new_attendee(char* v); +icalproperty* icalproperty_vanew_attendee(char* v, ...); +void icalproperty_set_attendee(icalproperty* prop, char* v); +char* icalproperty_get_attendee(icalproperty* prop); + +/* CONTACT */ +icalproperty* icalproperty_new_contact(char* v); +icalproperty* icalproperty_vanew_contact(char* v, ...); +void icalproperty_set_contact(icalproperty* prop, char* v); +char* icalproperty_get_contact(icalproperty* prop); + +/* RELATED-TO */ +icalproperty* icalproperty_new_relatedto(char* v); +icalproperty* icalproperty_vanew_relatedto(char* v, ...); +void icalproperty_set_relatedto(icalproperty* prop, char* v); +char* icalproperty_get_relatedto(icalproperty* prop); + +/* ORGANIZER */ +icalproperty* icalproperty_new_organizer(char* v); +icalproperty* icalproperty_vanew_organizer(char* v, ...); +void icalproperty_set_organizer(icalproperty* prop, char* v); +char* icalproperty_get_organizer(icalproperty* prop); + +/* COMMENT */ +icalproperty* icalproperty_new_comment(char* v); +icalproperty* icalproperty_vanew_comment(char* v, ...); +void icalproperty_set_comment(icalproperty* prop, char* v); +char* icalproperty_get_comment(icalproperty* prop); + +/* TRIGGER */ +icalproperty* icalproperty_new_trigger(union icaltriggertype v); +icalproperty* icalproperty_vanew_trigger(union icaltriggertype v, ...); +void icalproperty_set_trigger(icalproperty* prop, union icaltriggertype v); +union icaltriggertype icalproperty_get_trigger(icalproperty* prop); + +/* X-LIC-ERROR */ +icalproperty* icalproperty_new_xlicerror(char* v); +icalproperty* icalproperty_vanew_xlicerror(char* v, ...); +void icalproperty_set_xlicerror(icalproperty* prop, char* v); +char* icalproperty_get_xlicerror(icalproperty* prop); + +/* CLASS */ +icalproperty* icalproperty_new_class(char* v); +icalproperty* icalproperty_vanew_class(char* v, ...); +void icalproperty_set_class(icalproperty* prop, char* v); +char* icalproperty_get_class(icalproperty* prop); + +/* TZOFFSETTO */ +icalproperty* icalproperty_new_tzoffsetto(int v); +icalproperty* icalproperty_vanew_tzoffsetto(int v, ...); +void icalproperty_set_tzoffsetto(icalproperty* prop, int v); +int icalproperty_get_tzoffsetto(icalproperty* prop); + +/* TRANSP */ +icalproperty* icalproperty_new_transp(char* v); +icalproperty* icalproperty_vanew_transp(char* v, ...); +void icalproperty_set_transp(icalproperty* prop, char* v); +char* icalproperty_get_transp(icalproperty* prop); + +/* SEQUENCE */ +icalproperty* icalproperty_new_sequence(int v); +icalproperty* icalproperty_vanew_sequence(int v, ...); +void icalproperty_set_sequence(icalproperty* prop, int v); +int icalproperty_get_sequence(icalproperty* prop); + +/* LOCATION */ +icalproperty* icalproperty_new_location(char* v); +icalproperty* icalproperty_vanew_location(char* v, ...); +void icalproperty_set_location(icalproperty* prop, char* v); +char* icalproperty_get_location(icalproperty* prop); + +/* REQUEST-STATUS */ +icalproperty* icalproperty_new_requeststatus(char* v); +icalproperty* icalproperty_vanew_requeststatus(char* v, ...); +void icalproperty_set_requeststatus(icalproperty* prop, char* v); +char* icalproperty_get_requeststatus(icalproperty* prop); + +/* EXDATE */ +icalproperty* icalproperty_new_exdate(struct icaltimetype v); +icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...); +void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_exdate(icalproperty* prop); + +/* TZID */ +icalproperty* icalproperty_new_tzid(char* v); +icalproperty* icalproperty_vanew_tzid(char* v, ...); +void icalproperty_set_tzid(icalproperty* prop, char* v); +char* icalproperty_get_tzid(icalproperty* prop); + +/* RESOURCES */ +icalproperty* icalproperty_new_resources(char* v); +icalproperty* icalproperty_vanew_resources(char* v, ...); +void icalproperty_set_resources(icalproperty* prop, char* v); +char* icalproperty_get_resources(icalproperty* prop); + +/* TZURL */ +icalproperty* icalproperty_new_tzurl(char* v); +icalproperty* icalproperty_vanew_tzurl(char* v, ...); +void icalproperty_set_tzurl(icalproperty* prop, char* v); +char* icalproperty_get_tzurl(icalproperty* prop); + +/* REPEAT */ +icalproperty* icalproperty_new_repeat(int v); +icalproperty* icalproperty_vanew_repeat(int v, ...); +void icalproperty_set_repeat(icalproperty* prop, int v); +int icalproperty_get_repeat(icalproperty* prop); + +/* PRIORITY */ +icalproperty* icalproperty_new_priority(int v); +icalproperty* icalproperty_vanew_priority(int v, ...); +void icalproperty_set_priority(icalproperty* prop, int v); +int icalproperty_get_priority(icalproperty* prop); + +/* FREEBUSY */ +icalproperty* icalproperty_new_freebusy(struct icalperiodtype v); +icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...); +void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v); +struct icalperiodtype icalproperty_get_freebusy(icalproperty* prop); + +/* DTSTART */ +icalproperty* icalproperty_new_dtstart(struct icaltimetype v); +icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...); +void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_dtstart(icalproperty* prop); + +/* RECURRENCE-ID */ +icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v); +icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...); +void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_recurrenceid(icalproperty* prop); + +/* SUMMARY */ +icalproperty* icalproperty_new_summary(char* v); +icalproperty* icalproperty_vanew_summary(char* v, ...); +void icalproperty_set_summary(icalproperty* prop, char* v); +char* icalproperty_get_summary(icalproperty* prop); + +/* DTEND */ +icalproperty* icalproperty_new_dtend(struct icaltimetype v); +icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...); +void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_dtend(icalproperty* prop); + +/* TZNAME */ +icalproperty* icalproperty_new_tzname(char* v); +icalproperty* icalproperty_vanew_tzname(char* v, ...); +void icalproperty_set_tzname(icalproperty* prop, char* v); +char* icalproperty_get_tzname(icalproperty* prop); + +/* RDATE */ +icalproperty* icalproperty_new_rdate(struct icalperiodtype v); +icalproperty* icalproperty_vanew_rdate(struct icalperiodtype v, ...); +void icalproperty_set_rdate(icalproperty* prop, struct icalperiodtype v); +struct icalperiodtype icalproperty_get_rdate(icalproperty* prop); + +/* URL */ +icalproperty* icalproperty_new_url(char* v); +icalproperty* icalproperty_vanew_url(char* v, ...); +void icalproperty_set_url(icalproperty* prop, char* v); +char* icalproperty_get_url(icalproperty* prop); + +/* ATTACH */ +icalproperty* icalproperty_new_attach(struct icalattachtype v); +icalproperty* icalproperty_vanew_attach(struct icalattachtype v, ...); +void icalproperty_set_attach(icalproperty* prop, struct icalattachtype v); +struct icalattachtype icalproperty_get_attach(icalproperty* prop); + +/* X-LIC-CLUSTERCOUNT */ +icalproperty* icalproperty_new_xlicclustercount(int v); +icalproperty* icalproperty_vanew_xlicclustercount(int v, ...); +void icalproperty_set_xlicclustercount(icalproperty* prop, int v); +int icalproperty_get_xlicclustercount(icalproperty* prop); + +/* EXRULE */ +icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v); +icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...); +void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v); +struct icalrecurrencetype icalproperty_get_exrule(icalproperty* prop); + +/* QUERY */ +icalproperty* icalproperty_new_query(char* v); +icalproperty* icalproperty_vanew_query(char* v, ...); +void icalproperty_set_query(icalproperty* prop, char* v); +char* icalproperty_get_query(icalproperty* prop); + +/* PERCENT-COMPLETE */ +icalproperty* icalproperty_new_percentcomplete(int v); +icalproperty* icalproperty_vanew_percentcomplete(int v, ...); +void icalproperty_set_percentcomplete(icalproperty* prop, int v); +int icalproperty_get_percentcomplete(icalproperty* prop); + +/* CALSCALE */ +icalproperty* icalproperty_new_calscale(char* v); +icalproperty* icalproperty_vanew_calscale(char* v, ...); +void icalproperty_set_calscale(icalproperty* prop, char* v); +char* icalproperty_get_calscale(icalproperty* prop); + +/* CREATED */ +icalproperty* icalproperty_new_created(struct icaltimetype v); +icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...); +void icalproperty_set_created(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_created(icalproperty* prop); + +/* GEO */ +icalproperty* icalproperty_new_geo(struct icalgeotype v); +icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...); +void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v); +struct icalgeotype icalproperty_get_geo(icalproperty* prop); + +/* COMPLETED */ +icalproperty* icalproperty_new_completed(struct icaltimetype v); +icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...); +void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_completed(icalproperty* prop); + +/* DTSTAMP */ +icalproperty* icalproperty_new_dtstamp(struct icaltimetype v); +icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...); +void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_dtstamp(icalproperty* prop); + +/* DUE */ +icalproperty* icalproperty_new_due(struct icaltimetype v); +icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...); +void icalproperty_set_due(icalproperty* prop, struct icaltimetype v); +struct icaltimetype icalproperty_get_due(icalproperty* prop); + +/* ACTION */ +icalproperty* icalproperty_new_action(char* v); +icalproperty* icalproperty_vanew_action(char* v, ...); +void icalproperty_set_action(icalproperty* prop, char* v); +char* icalproperty_get_action(icalproperty* prop); +#endif ICALPROPERTY_H diff --git a/libical/src/libical/icalrestriction.c b/libical/src/libical/icalrestriction.c new file mode 100644 index 0000000000..d5ffb784ef --- /dev/null +++ b/libical/src/libical/icalrestriction.c @@ -0,0 +1,1590 @@ +/* -*- Mode: C -*- */ +/* ====================================================================== + File: icalrestriction.c + + (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. + + + ======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "icalenums.h" +#include "icalrestriction.h" + +#define TMP_BUF_SIZE 1024 + +/* Define the structs for the restrictions. these data are filled out +in machine generated code below */ + +typedef int (*restriction_func)(icalcomponent* comp); + +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_component_record icalrestriction_component_records[]; +icalrestriction_property_record icalrestriction_property_records[]; + +/* The 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 more",/*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){ + + if ( restr < ICAL_RESTRICTION_NONE || restr > ICAL_RESTRICTION_UNKNOWN + || count < 0){ + return -1; + } + + if (count > 2) { + count = 2; + } + + return compare_map[restr][count]; + +} + +int icalrestriction_check_component(icalproperty_method method, + icalcomponent* comp) +{ + icalproperty_kind kind; + icalcomponent_kind comp_kind; + icalrestriction_kind restr; + 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); + + restr = icalrestriction_get_property_restriction(method, + comp_kind, + kind); + + + if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE ) { + /* HACK. Treat this as a 0/1 restriction */ + restr = ICAL_RESTRICTION_ZEROORONE; + compare = icalrestriction_compare(restr,count); + } else if (restr == ICAL_RESTRICTION_ONEMUTUAL ) { + /* HACK. Treat this 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 property %s. 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)); + } + + + 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_kind +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].restriction; + } + } + + return ICAL_RESTRICTION_UNKNOWN; +} + +icalrestriction_kind +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].restriction; + } + } + + return ICAL_RESTRICTION_UNKNOWN; +} + +/* Everything below this line is machine generated. Do not edit. */ +icalrestriction_property_record icalrestriction_property_records[] = { + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE} +}; +icalrestriction_component_record icalrestriction_component_records[] = { + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO}, + {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE} +}; diff --git a/libical/src/libical/icalrestriction.h b/libical/src/libical/icalrestriction.h new file mode 100644 index 0000000000..ca4beeea7b --- /dev/null +++ b/libical/src/libical/icalrestriction.h @@ -0,0 +1,72 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalrestriction.h + CREATOR: eric 24 April 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalrestriction.h + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + +======================================================================*/ + +#include "ical.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); + +icalrestriction_kind +icalrestriction_get_property_restriction(icalproperty_method method, + icalcomponent_kind component, + icalproperty_kind property); + +icalrestriction_kind +icalrestriction_get_component_restriction(icalproperty_method method, + icalcomponent_kind component, + icalcomponent_kind subcomponent); + +int +icalrestriction_is_parameter_allowed(icalproperty_kind property, + icalparameter_kind parameter); + +int icalrestriction_check(icalcomponent* comp); + + +#endif /* !ICALRESTRICTION_H */ + + + diff --git a/libical/src/libical/icaltypes.c b/libical/src/libical/icaltypes.c new file mode 100644 index 0000000000..25e0e12b48 --- /dev/null +++ b/libical/src/libical/icaltypes.c @@ -0,0 +1,305 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icaltypes.c + CREATOR: eric 16 May 1999 + + $Id$ + $Locker$ + + + (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. + + The original author is Eric Busboom + 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 */ +#include <errno.h> /* for errno */ +#include <string.h> /* for strdup */ +#include <assert.h> +#include <limits.h> /* for SHRT_MAX */ + +#define TEMP_MAX 1024 + +void* +icalattachtype_get_data (struct icalattachtype* type); + +struct icalattachtype* +icalattachtype_new() +{ + struct icalattachtype* v; + + if ( ( v = (struct icalattachtype*) + malloc(sizeof(struct icalattachtype))) == 0) { + errno = ENOMEM; + return 0; + } + + v->refcount = 1; + + v->binary = 0; + v->owns_binary = 0; + + v->base64 = 0; + v->owns_base64 = 0; + + v->url = 0; + + return v; +} + + +void +icalattachtype_free(struct icalattachtype* v) +{ + icalerror_check_arg( (v!=0),"v"); + + v->refcount--; + + if (v->refcount <= 0){ + + if (v->base64 != 0 && v->owns_base64 != 0){ + free(v->base64); + } + + if (v->binary != 0 && v->owns_binary != 0){ + free(v->binary); + } + + if (v->url != 0){ + free(v->url); + } + + free(v); + } +} + +void icalattachtype_add_reference(struct icalattachtype* v) +{ + icalerror_check_arg( (v!=0),"v"); + v->refcount++; +} + +void icalattachtype_set_url(struct icalattachtype* v, char* url) +{ + icalerror_check_arg( (v!=0),"v"); + + if (v->url != 0){ + free (v->url); + } + + v->url = strdup(url); + + /* HACK This routine should do something if strdup returns NULL */ + +} + +char* icalattachtype_get_url(struct icalattachtype* v) +{ + icalerror_check_arg( (v!=0),"v"); + return v->url; +} + +void icalattachtype_set_base64(struct icalattachtype* v, char* base64, + int owns) +{ + icalerror_check_arg( (v!=0),"v"); + + v->base64 = base64; + v->owns_base64 = !(owns != 0 ); + +} + +char* icalattachtype_get_base64(struct icalattachtype* v) +{ + icalerror_check_arg( (v!=0),"v"); + return v->base64; +} + +void icalattachtype_set_binary(struct icalattachtype* v, char* binary, + int owns) +{ + icalerror_check_arg( (v!=0),"v"); + + v->binary = binary; + v->owns_binary = !(owns != 0 ); + +} + +void* icalattachtype_get_binary(struct icalattachtype* v) +{ + icalerror_check_arg( (v!=0),"v"); + return v->binary; +} + + + +time_t +icalperiodtype_duration (struct icalperiodtype period); + + +time_t +icalperiodtype_end (struct icalperiodtype period); + +struct icaltimetype +icaltimetype_from_timet(time_t v, int date) +{ + struct icaltimetype tt; + struct tm t; + time_t tm = time(&v); + +/* HACK Does not properly consider timezone */ + t = *(gmtime(&tm)); + + tt.second = t.tm_sec; + tt.minute = t.tm_min; + tt.hour = t.tm_hour; + tt.day = t.tm_mday; + tt.month = t.tm_mon + 1; + tt.year = t.tm_year+ 1900; + + tt.is_utc = 1; + tt.is_date = date; + + return tt; +} + +/* From Russel Steinthal */ +time_t icaldurationtype_as_timet(struct icaldurationtype dur) +{ + return (time_t) (dur.seconds + + (60 * dur.minutes) + + (60 * 60 * dur.hours) + + (60 * 60 * 24 * dur.days) + + (60 * 60 * 24 * 7 * dur.weeks)); +} + + +struct icaldurationtype icaldurationtype_from_timet(time_t t) +{ + struct icaldurationtype dur; + time_t used = 0; + + dur.weeks = (t - used) / (60 * 60 * 24 * 7); + 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; +} + + +void icalrecurrencetype_clear(struct icalrecurrencetype *recur) +{ + memset(recur,ICAL_RECURRENCE_ARRAY_MAX_BYTE, + sizeof(struct icalrecurrencetype)); + + recur->week_start = ICAL_NO_WEEKDAY; + recur->freq = ICAL_NO_RECURRENCE; + recur->interval = 0; + recur->until.year = 0; + recur->count = 0; +} + + +struct icalreqstattype icalreqstattype_from_string(char* str) +{ + char *p1,*p2; + size_t len; + struct icalreqstattype stat; + int major, minor; + + icalerror_check_arg((str != 0),"str"); + + stat.code = ICAL_UNKNOWN_STATUS; + stat.debug = 0; + + stat.desc = 0; + + /* Get the status numbers */ + + sscanf(str, "%d.%d",&major, &minor); + + if (major <= 0 || minor < 0){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return stat; + } + + stat.code = icalenum_num_to_reqstat(major, minor); + + if (stat.code == ICAL_UNKNOWN_STATUS){ + icalerror_set_errno(ICAL_BADARG_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; + +} + +char* icalreqstattype_as_string(struct icalreqstattype stat) +{ + char format[20]; + 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/libical/src/libical/icaltypes.h b/libical/src/libical/icaltypes.h new file mode 100644 index 0000000000..77a67fae80 --- /dev/null +++ b/libical/src/libical/icaltypes.h @@ -0,0 +1,182 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icaltypes.h + CREATOR: eric 20 March 1999 + + + (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. + + The original author is Eric Busboom + The original code is icaltypes.h + +======================================================================*/ + +#ifndef ICALTYPES_H +#define ICALTYPES_H + +#include <time.h> +#include "icalenums.h" /* for recurrence enums */ + +/* This type type should probably be an opaque type... */ +struct icalattachtype +{ + void* binary; + int owns_binary; + + char* base64; + int owns_base64; + + char* url; + + int refcount; + +}; + +/* converts base64 to binary, fetches url and stores as binary, or + just returns data */ + +struct icalattachtype* icalattachtype_new(); +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); + +struct icalgeotype +{ + float lat; + float lon; +}; + +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. */ +}; + +struct icaltimetype icaltimetype_from_timet(time_t v, int is_date); + + +/* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of + the values and fields in struct icalrecurrencetype */ + + +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 SHRT_MAX + * unless the the list is full. */ + + short by_second[61]; + short by_minute[61]; + short by_hour[25]; + short by_day[8]; + short by_month_day[32]; + short by_year_day[367]; + short by_week_no[54]; + short by_month[13]; + short by_set_pos[367]; +}; + + +void icalrecurrencetype_clear(struct icalrecurrencetype *r); + +struct icaldurationtype +{ + unsigned int days; + unsigned int weeks; + unsigned int hours; + unsigned int minutes; + unsigned int seconds; +}; + +struct icaldurationtype icaldurationtype_from_timet(time_t t); +time_t icaldurationtype_as_timet(struct icaldurationtype duration); + +/* Return the next occurance of 'r' after the time specified by 'after' */ +struct icaltimetype icalrecurrencetype_next_occurance( + struct icalrecurrencetype *r, + struct icaltimetype *after); + + +struct icalperiodtype +{ + struct icaltimetype start; /* Must be absolute */ + struct icaltimetype end; /* Must be absolute */ + struct icaldurationtype duration; +}; + +time_t icalperiodtype_duration(struct icalperiodtype period); +time_t icalperiodtype_end(struct icalperiodtype period); + +union icaltriggertype +{ + struct icaltimetype time; + struct icaldurationtype duration; +}; + + +/* 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; + char* desc; + char* debug; +}; + +struct icalreqstattype icalreqstattype_from_string(char* str); +char* icalreqstattype_as_string(struct icalreqstattype); + +#endif /* !ICALTYPES_H */ diff --git a/libical/src/libical/icalvalue.c b/libical/src/libical/icalvalue.c new file mode 100644 index 0000000000..ec332a0f04 --- /dev/null +++ b/libical/src/libical/icalvalue.c @@ -0,0 +1,2039 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.c + CREATOR: eric 02 May 1999 + + $Id$ + + + (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. + + The original author is Eric Busboom + The original code is icalvalue.c + + Contributions from: + Graham Davison (g.m.davison@computer.org) + + +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "ical.h" +#include "icalerror.h" +#include "icalmemory.h" +#include "icalparser.h" +#include "icalenums.h" + +#include <stdlib.h> /* for malloc */ +#include <stdio.h> /* for sprintf */ +#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 */ + +#if _MAC_OS_ +#include "strdup.h" +#endif + +#define TMP_BUF_SIZE 1024 + +void print_datetime_to_string(char* str, struct icaltimetype *data); +void print_date_to_string(char* str, struct icaltimetype *data); +void print_time_to_string(char* str, struct icaltimetype *data); +void print_recur_to_string(char* str, struct icaltimetype *data); + +struct icalvalue_impl { + icalvalue_kind kind; + char id[5]; + int size; + icalproperty* parent; + + union data { + struct icalattachtype v_attach; + /* void *v_binary; */ /* use v_attach */ + 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 icalrecurrencetype was once a value in this + union, but it contributes 2000 bytes to every*/ + + struct icalrecurrencetype *v_recur; + union icaltriggertype v_trigger; + icalproperty_method v_method; + + } data; +}; + +struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind){ + + struct icalvalue_impl* v; + + 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; + 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(icalvalue* value){ + + struct icalvalue_impl* new; + struct icalvalue_impl* old = (struct icalvalue_impl*)value; + + 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){ + + /* The contents of the attach value may or may not be owned by the + * library. */ + case ICAL_ATTACH_VALUE: + case ICAL_BINARY_VALUE: + { + /* HACK ugh. I don't feel like impleenting this */ + } + + 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=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; + } + + 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; +} + +icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind,char* str,icalproperty** error) +{ + + icalvalue *value = 0; + + icalerror_check_arg_rz(str!=0,"str"); + + if (error != 0){ + *error = 0; + } + + switch (kind){ + + case ICAL_ATTACH_VALUE: + { + /* HACK */ + value = 0; + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + sprintf(temp,"ATTACH Values are not implemented"); + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + icalerror_warn("Parsing ATTACH properties is unimplmeneted"); + break; + } + + case ICAL_BINARY_VALUE: + { + /* HACK */ + value = 0; + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + sprintf(temp,"BINARY Values are not implemented"); + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + icalerror_warn("Parsing BINARY values is unimplmeneted"); + break; + } + + case ICAL_BOOLEAN_VALUE: + { + /* HACK */ + value = 0; + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + sprintf(temp,"BOOLEAN Values are not implemented"); + *error = icalproperty_vanew_xlicerror( + temp, + icalparameter_new_xlicerrortype( + ICAL_XLICERRORTYPE_VALUEPARSEERROR), + 0); + } + + icalerror_warn("Parsing BOOLEAN values is unimplmeneted"); + break; + } + + case ICAL_INTEGER_VALUE: + { + value = icalvalue_new_integer(atoi(str)); + break; + } + + case ICAL_FLOAT_VALUE: + { + value = icalvalue_new_float(atof(str)); + break; + } + + case ICAL_UTCOFFSET_VALUE: + { + value = icalparser_parse_value(kind,str,(icalcomponent*)0); + break; + } + + case ICAL_TEXT_VALUE: + { + value = icalvalue_new_text(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_METHOD_VALUE: + { + icalproperty_method method = icalenum_string_to_method(str); + value = icalvalue_new_method(method); + break; + + } + case ICAL_GEO_VALUE: + { + value = 0; + /* HACK */ + + if (error != 0){ + char temp[TMP_BUF_SIZE]; + sprintf(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: + case ICAL_DATE_VALUE: + case ICAL_DATETIME_VALUE: + case ICAL_DATETIMEDATE_VALUE: + case ICAL_DATETIMEPERIOD_VALUE: + case ICAL_TIME_VALUE: + case ICAL_DURATION_VALUE: + case ICAL_PERIOD_VALUE: + case ICAL_TRIGGER_VALUE: + { + value = icalparser_parse_value(kind,str,error); + 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,char* str) +{ + return icalvalue_new_from_string_with_error(kind,str,(icalproperty*)0); +} + + + +void +icalvalue_free (icalvalue* value) +{ + struct icalvalue_impl* v = (struct icalvalue_impl*)value; + + icalerror_check_arg_rv((value != 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 + + + switch (v->kind){ + case ICAL_BINARY_VALUE: + case ICAL_ATTACH_VALUE: { + /* HACK ugh. This will be tough to implement */ + } + case ICAL_TEXT_VALUE: + case ICAL_CALADDRESS_VALUE: + case ICAL_URI_VALUE: + { + if (v->data.v_string != 0) { + free(v->data.v_string); + v->data.v_string = 0; + } + break; + } + case ICAL_RECUR_VALUE: + { + if(v->data.v_recur != 0){ + free(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 (icalvalue* value) +{ + /*struct icalvalue_impl* v = (struct icalvalue_impl*)value;*/ + + if(value == 0){ + return 0; + } + + return 1; +} + +char* icalvalue_binary_as_ical_string(icalvalue* value) { + + char* data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_binary(value); + + str = (char*)icalmemory_tmp_buffer(60); + sprintf(str,"icalvalue_binary_as_ical_string is not implemented yet"); + + return str; +} + + +char* icalvalue_int_as_ical_string(icalvalue* value) { + + int data; + char* str = (char*)icalmemory_tmp_buffer(2); + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_integer(value); + + sprintf(str,"%d",data); + + return str; +} + +char* icalvalue_utcoffset_as_ical_string(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)); + + sprintf(str,"%c%02d%02d%02d",sign,abs(h),abs(m),abs(s)); + + return str; +} + +char* icalvalue_string_as_ical_string(icalvalue* value) { + + char* data; + char* str = 0; + icalerror_check_arg_rz( (value!=0),"value"); + data = ((struct icalvalue_impl*)value)->data.v_string; + + str = (char*)icalmemory_tmp_buffer(strlen(data)+1); + + strcpy(str,data); + + return str; +} + + +char* icalvalue_recur_as_ical_string(icalvalue* value) +{ + char* str; + char *str_p; + size_t buf_sz = 200; + char temp[20]; + int i,j; + struct icalvalue_impl *impl = (struct icalvalue_impl*)value; + struct icalrecurrencetype *recur = impl->data.v_recur; + + struct { char* str;size_t offset; short 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}, + }; + + + + icalerror_check_arg_rz((value != 0),"value"); + + 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, + icalenum_recurrence_to_string(recur->freq)); + + if(recur->until.year != 0){ + + temp[0] = 0; + 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){ + sprintf(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 != 0){ + sprintf(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); + short 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 */ + icalmemory_append_string(&str,&str_p,&buf_sz, + icalenum_weekday_to_string(array[i])); + } else { + sprintf(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,','); + } + } + } + } + + return str; +} + +char* icalvalue_text_as_ical_string(icalvalue* value) { + + char *str; + char *str_p; + char *rtrn; + char *p; + size_t buf_sz; + int line_length; + + line_length = 0; + + buf_sz = strlen(((struct icalvalue_impl*)value)->data.v_string)+1; + + str_p = str = (char*)icalmemory_new_buffer(buf_sz); + + if (str_p == 0){ + return 0; + } + + for(p=((struct icalvalue_impl*)value)->data.v_string; *p!=0; p++){ + + switch(*p){ + case '\n': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\n"); + line_length+=3; + break; + } + + case '\t': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\t"); + line_length+=3; + break; + } + case '\r': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\r"); + line_length+=3; + break; + } + case '\b': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\b"); + line_length+=3; + break; + } + case '\f': { + icalmemory_append_string(&str,&str_p,&buf_sz,"\\f"); + line_length+=3; + break; + } + + case ';': + case ',':{ + icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); + icalmemory_append_char(&str,&str_p,&buf_sz,*p); + line_length+=3; + break; + } + + case '"':{ + icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); + icalmemory_append_char(&str,&str_p,&buf_sz,*p); + line_length+=3; + break; + } + + default: { + icalmemory_append_char(&str,&str_p,&buf_sz,*p); + line_length++; + } + } + + if (line_length > 65 && *p == ' '){ + icalmemory_append_string(&str,&str_p,&buf_sz,"\n "); + line_length=0; + } + + + if (line_length > 75){ + icalmemory_append_string(&str,&str_p,&buf_sz,"\n "); + line_length=0; + } + + } + + /* 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; +} + + +char* icalvalue_attach_as_ical_string(icalvalue* value) { + + struct icalattachtype a; + char * str; + + icalerror_check_arg_rz( (value!=0),"value"); + + a = icalvalue_get_attach(value); + + if (a.binary != 0) { + return icalvalue_binary_as_ical_string(value); + } else if (a.base64 != 0) { + str = (char*)icalmemory_tmp_buffer(strlen(a.base64)+1); + strcpy(str,a.base64); + return str; + } else if (a.url != 0){ + return icalvalue_string_as_ical_string(value); + } else { + icalerrno = ICAL_MALFORMEDDATA_ERROR; + return 0; + } +} + +void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size, + char* sep, unsigned int value) { + + char temp[TMP_BUF_SIZE]; + + sprintf(temp,"%d",value); + + icalmemory_append_string(buf, buf_ptr, buf_size, temp); + icalmemory_append_string(buf, buf_ptr, buf_size, sep); + +} + +char* icalvalue_duration_as_ical_string(icalvalue* value) { + + struct icaldurationtype data; + char *buf, *output_line; + size_t buf_size = 256; + char* buf_ptr = 0; + + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_duration(value); + + buf = (char*)icalmemory_new_buffer(buf_size); + buf_ptr = buf; + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "P"); + + + if (data.weeks != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "W", data.weeks); + } + + if (data.days != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "D", data.days); + } + + if (data.hours != 0 || data.minutes != 0 || data.seconds != 0) { + + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "T"); + + if (data.hours != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "H", data.hours); + } + if (data.minutes != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "M", data.minutes); + } + if (data.seconds != 0 ) { + append_duration_segment(&buf, &buf_ptr, &buf_size, "S", data.seconds); + } + + } + + output_line = icalmemory_tmp_copy(buf); + icalmemory_free_buffer(buf); + + return output_line; + + +} + +void print_time_to_string(char* str, struct icaltimetype *data) +{ + char temp[20]; + + if (data->is_utc == 1){ + sprintf(temp,"%02d%02d%02dZ",data->hour,data->minute,data->second); + } else { + sprintf(temp,"%02d%02d%02d",data->hour,data->minute,data->second); + } + + strcat(str,temp); +} + + +char* icalvalue_time_as_ical_string(icalvalue* value) { + + struct icaltimetype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_time(value); + + str = (char*)icalmemory_tmp_buffer(8); + + str[0] = 0; + print_time_to_string(str,&data); + + return str; +} + +void print_date_to_string(char* str, struct icaltimetype *data) +{ + char temp[20]; + + sprintf(temp,"%04d%02d%02d",data->year,data->month,data->day); + + strcat(str,temp); +} + +char* icalvalue_date_as_ical_string(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, struct icaltimetype *data) +{ + print_date_to_string(str,data); + strcat(str,"T"); + print_time_to_string(str,data); + +} + +char* icalvalue_datetime_as_ical_string(icalvalue* value) { + + struct icaltimetype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_date(value); + + str = (char*)icalmemory_tmp_buffer(20); + + str[0] = 0; + + print_datetime_to_string(str,&data); + + return str; + +} + + +char* icalvalue_datetimedate_as_ical_string(icalvalue* value) { + + struct icaltimetype data; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_datetime(value); + + if (data.is_date == 1){ + return icalvalue_date_as_ical_string(value); + } else { + return icalvalue_datetime_as_ical_string(value); + } +} + + +char* icalvalue_float_as_ical_string(icalvalue* value) { + + float data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_float(value); + + str = (char*)icalmemory_tmp_buffer(15); + + sprintf(str,"%f",data); + + return str; +} + +char* icalvalue_geo_as_ical_string(icalvalue* value) { + + struct icalgeotype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + + data = icalvalue_get_geo(value); + + str = (char*)icalmemory_tmp_buffer(25); + + sprintf(str,"%f;%f",data.lat,data.lon); + + return str; +} + +char* icalvalue_datetimeperiod_as_ical_string(icalvalue* value) { + + struct icalperiodtype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_datetimeperiod(value); + + str = (char*)icalmemory_tmp_buffer(60); + + if( data.end.second == -1){ + /* This is a DATE-TIME value, since there is no end value */ + icalvalue *v= icalvalue_new_datetime(data.start); + + strcpy(str,icalvalue_datetime_as_ical_string(v)); + + free(v); + + } else { + icalvalue *v1 = icalvalue_new_datetime(data.start); + icalvalue *v2 = icalvalue_new_datetime(data.end); + + sprintf(str,"%s/%s", + icalvalue_datetime_as_ical_string(v1), + icalvalue_datetime_as_ical_string(v2) + ); + + free(v1); + free(v2); + + } + + return str; +} + +char* icalvalue_period_as_ical_string(icalvalue* value) { + + struct icalperiodtype data; + char* str; + icalvalue *s,*e; + + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_period(value); + + str = (char*)icalmemory_tmp_buffer(60); + + s = icalvalue_new_datetime(data.start); + + if (data.end.second != -1){ + /* use the end date */ + e = icalvalue_new_datetime(data.end); + + sprintf(str,"%s/%s", + icalvalue_datetime_as_ical_string(s), + icalvalue_datetime_as_ical_string(e) + ); + + + } else { + /* use the duration */ + e = icalvalue_new_duration(data.duration); + + sprintf(str,"%s/%s", + icalvalue_datetime_as_ical_string(s), + icalvalue_duration_as_ical_string(e) + ); + + } + + icalvalue_free(e); + icalvalue_free(s); + return str; +} + +char* icalvalue_trigger_as_ical_string(icalvalue* value) { + + union icaltriggertype data; + char* str; + icalerror_check_arg_rz( (value!=0),"value"); + data = icalvalue_get_trigger(value); + + str = (char*)icalmemory_tmp_buffer(60); + sprintf(str,"icalvalue_trigger_as_ical_string is not implemented yet"); + + return str; +} + +char* +icalvalue_as_ical_string (icalvalue* value) +{ + struct icalvalue_impl* v = (struct icalvalue_impl*)value; + + v=v; + + if(value == 0){ + return 0; + } + + switch (v->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_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_DATETIMEDATE_VALUE: + return icalvalue_datetimedate_as_ical_string(value); + case ICAL_DURATION_VALUE: + return icalvalue_duration_as_ical_string(value); + case ICAL_TIME_VALUE: + return icalvalue_time_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_METHOD_VALUE: + return icalenum_method_to_string(v->data.v_method); + + case ICAL_NO_VALUE: + default: + { + return 0; + } + } +} + + +icalvalue_kind +icalvalue_isa (icalvalue* value) +{ + struct icalvalue_impl* v = (struct icalvalue_impl*)value; + + if(value == 0){ + return ICAL_NO_VALUE; + } + + return v->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; + } +} + + +icalparameter_xliccomparetype +icalvalue_compare(icalvalue* a, icalvalue *b) +{ + struct icalvalue_impl *impla = (struct icalvalue_impl *)a; + struct icalvalue_impl *implb = (struct icalvalue_impl *)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_isa(a) != icalvalue_isa(b)){ + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + switch (icalvalue_isa(a)){ + + case ICAL_ATTACH_VALUE: + case ICAL_BINARY_VALUE: + + 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 (impla->data.v_float > implb->data.v_float){ + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (impla->data.v_float < implb->data.v_float){ + return ICAL_XLICCOMPARETYPE_LESS; + } else { + return ICAL_XLICCOMPARETYPE_EQUAL; + } + } + + case ICAL_INTEGER_VALUE: + case ICAL_UTCOFFSET_VALUE: + { + if (impla->data.v_int > implb->data.v_int){ + return ICAL_XLICCOMPARETYPE_GREATER; + } else if (impla->data.v_int < implb->data.v_int){ + 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_DATETIMEDATE_VALUE: + case ICAL_DURATION_VALUE: /* HACK. Not correct for DURATION */ + case ICAL_TIME_VALUE: + case ICAL_DATETIMEPERIOD_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 0; + } + + + } + + case ICAL_METHOD_VALUE: + { + if (icalvalue_get_method(a) == icalvalue_get_method(b)){ + return ICAL_XLICCOMPARETYPE_EQUAL; + } else { + return ICAL_XLICCOMPARETYPE_NOTEQUAL; + } + + } + case ICAL_PERIOD_VALUE: + case ICAL_GEO_VALUE: + case ICAL_RECUR_VALUE: + case ICAL_NO_VALUE: + default: + { + icalerror_warn("Comparison not implemented for value type"); + return ICAL_XLICCOMPARETYPE_REGEX+1; /* HACK */ + } + } + +} + +void icalvalue_set_parent(icalvalue* value, + icalproperty* property) +{ + struct icalvalue_impl* v = (struct icalvalue_impl*)value; + + v->parent = property; + +} + +icalproperty* icalvalue_get_parent(icalvalue* value) +{ + struct icalvalue_impl* v = (struct icalvalue_impl*)value; + + + return v->parent; +} + + + +/* Recur is a special case, so it is not auto generated. Well, + actually, it is auto-generated, but you will have to manually + remove the auto-generated version after each generation. */ +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* value, struct icalrecurrencetype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_RECUR_VALUE); + + impl = (struct icalvalue_impl*)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_ALLOCATION_ERROR); + return; + } else { + memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype)); + } + +} + +struct icalrecurrencetype +icalvalue_get_recur(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_RECUR_VALUE); + + return *(((struct icalvalue_impl*)value)->data.v_recur); +} + + + + +/* The remaining interfaces are 'new', 'set' and 'get' for each of the value + types */ + + +/* Everything below this line is machine generated. Do not edit. */ + +icalvalue* +icalvalue_new_attach (struct icalattachtype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_ATTACH_VALUE); + + + icalvalue_set_attach((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_attach(icalvalue* value, struct icalattachtype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_ATTACH_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_attach = v; +} + +struct icalattachtype +icalvalue_get_attach(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_ATTACH_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_attach; +} + + +icalvalue* +icalvalue_new_binary (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BINARY_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_binary((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_binary(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_BINARY_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_binary(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_BINARY_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + + +icalvalue* +icalvalue_new_boolean (int v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BOOLEAN_VALUE); + + + icalvalue_set_boolean((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_boolean(icalvalue* value, int v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_int = v; +} + +int +icalvalue_get_boolean(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_int; +} + + +icalvalue* +icalvalue_new_caladdress (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_CALADDRESS_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_caladdress((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_caladdress(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_caladdress(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + + +icalvalue* +icalvalue_new_date (struct icaltimetype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATE_VALUE); + + + icalvalue_set_date((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_date(icalvalue* value, struct icaltimetype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_DATE_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_time = v; +} + +struct icaltimetype +icalvalue_get_date(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_DATE_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_time; +} + + +icalvalue* +icalvalue_new_datetime (struct icaltimetype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIME_VALUE); + + + icalvalue_set_datetime((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_datetime(icalvalue* value, struct icaltimetype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_DATETIME_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_time = v; +} + +struct icaltimetype +icalvalue_get_datetime(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_DATETIME_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_time; +} + + +icalvalue* +icalvalue_new_datetimedate (struct icaltimetype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEDATE_VALUE); + + + icalvalue_set_datetimedate((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_datetimedate(icalvalue* value, struct icaltimetype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_DATETIMEDATE_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_time = v; +} + +struct icaltimetype +icalvalue_get_datetimedate(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_DATETIMEDATE_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_time; +} + + +icalvalue* +icalvalue_new_datetimeperiod (struct icalperiodtype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE); + + + icalvalue_set_datetimeperiod((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_datetimeperiod(icalvalue* value, struct icalperiodtype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_period = v; +} + +struct icalperiodtype +icalvalue_get_datetimeperiod(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_period; +} + + +icalvalue* +icalvalue_new_duration (struct icaldurationtype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DURATION_VALUE); + + + icalvalue_set_duration((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_duration(icalvalue* value, struct icaldurationtype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_DURATION_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_duration = v; +} + +struct icaldurationtype +icalvalue_get_duration(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_DURATION_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_duration; +} + + +icalvalue* +icalvalue_new_float (float v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_FLOAT_VALUE); + + + icalvalue_set_float((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_float(icalvalue* value, float v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_FLOAT_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_float = v; +} + +float +icalvalue_get_float(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_FLOAT_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_float; +} + + +icalvalue* +icalvalue_new_geo (struct icalgeotype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_GEO_VALUE); + + + icalvalue_set_geo((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_geo(icalvalue* value, struct icalgeotype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_GEO_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_geo = v; +} + +struct icalgeotype +icalvalue_get_geo(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_GEO_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_geo; +} + + +icalvalue* +icalvalue_new_integer (int v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_INTEGER_VALUE); + + + icalvalue_set_integer((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_integer(icalvalue* value, int v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_INTEGER_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_int = v; +} + +int +icalvalue_get_integer(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_INTEGER_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_int; +} + + +icalvalue* +icalvalue_new_method (icalproperty_method v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_METHOD_VALUE); + + + icalvalue_set_method((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_method(icalvalue* value, icalproperty_method v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_METHOD_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_method = v; +} + +icalproperty_method +icalvalue_get_method(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_METHOD_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_method; +} + + +icalvalue* +icalvalue_new_period (struct icalperiodtype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_PERIOD_VALUE); + + + icalvalue_set_period((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_period(icalvalue* value, struct icalperiodtype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_PERIOD_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_period = v; +} + +struct icalperiodtype +icalvalue_get_period(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_PERIOD_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_period; +} + + +icalvalue* +icalvalue_new_string (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_STRING_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_string((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_string(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_STRING_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_string(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_STRING_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + + +icalvalue* +icalvalue_new_text (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TEXT_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_text((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_text(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_TEXT_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_text(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_TEXT_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + + +icalvalue* +icalvalue_new_time (struct icaltimetype v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TIME_VALUE); + + + icalvalue_set_time((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_time(icalvalue* value, struct icaltimetype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_TIME_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_time = v; +} + +struct icaltimetype +icalvalue_get_time(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_TIME_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_time; +} + + +icalvalue* +icalvalue_new_trigger (union 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, union icaltriggertype v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_TRIGGER_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_trigger = v; +} + +union icaltriggertype +icalvalue_get_trigger(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_TRIGGER_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_trigger; +} + + +icalvalue* +icalvalue_new_uri (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_URI_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_uri((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_uri(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_URI_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_uri(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_URI_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + + +icalvalue* +icalvalue_new_utcoffset (int v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_UTCOFFSET_VALUE); + + + icalvalue_set_utcoffset((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_utcoffset(icalvalue* value, int v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + + icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_int = v; +} + +int +icalvalue_get_utcoffset(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_int; +} + + +icalvalue* +icalvalue_new_query (char* v) +{ + struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_QUERY_VALUE); + + icalerror_check_arg_rz( (v!=0),"v"); + + icalvalue_set_query((icalvalue*)impl,v); + + return (icalvalue*)impl; +} + +void +icalvalue_set_query(icalvalue* value, char* v) +{ + struct icalvalue_impl* impl; + + icalerror_check_arg_rv( (value!=0),"value"); + icalerror_check_arg_rv( (v!=0),"v"); + + icalerror_check_value_type(value, ICAL_QUERY_VALUE); + + impl = (struct icalvalue_impl*)value; + impl->data.v_string = strdup(v); + + if (impl->data.v_string == 0){ + errno = ENOMEM; + } + +} + +char* +icalvalue_get_query(icalvalue* value) +{ + icalerror_check_arg( (value!=0),"value"); + icalerror_check_value_type(value, ICAL_QUERY_VALUE); + + return ((struct icalvalue_impl*)value)->data.v_string; +} + diff --git a/libical/src/libical/icalvalue.h b/libical/src/libical/icalvalue.h new file mode 100644 index 0000000000..ec7457d6aa --- /dev/null +++ b/libical/src/libical/icalvalue.h @@ -0,0 +1,169 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvalue.h + CREATOR: eric 20 March 1999 + + + $Id$ + $Locker$ + + + + (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. + + The original author is Eric Busboom + The original code is icalvalue.h + + ======================================================================*/ + +#ifndef ICALVALUE_H +#define ICALVALUE_H + +#include <time.h> +#include "icalenums.h" +#include "icaltypes.h" + +typedef void icalvalue; + +icalvalue* icalvalue_new(icalvalue_kind kind); + +icalvalue* icalvalue_new_clone(icalvalue* value); + +icalvalue* icalvalue_new_from_string(icalvalue_kind kind, char* str); + +void icalvalue_free(icalvalue* value); + +int icalvalue_is_valid(icalvalue* value); + +char* icalvalue_as_ical_string(icalvalue* value); + +icalvalue_kind icalvalue_isa(icalvalue* value); + +int icalvalue_isa_value(void*); + +icalparameter_xliccomparetype +icalvalue_compare(icalvalue* a, icalvalue *b); + +/* Everything below this line is machine generated. Do not edit. */ +/* ATTACH # Non-std */ +icalvalue* icalvalue_new_attach(struct icalattachtype v); +struct icalattachtype icalvalue_get_attach(icalvalue* value); +void icalvalue_set_attach(icalvalue* value, struct icalattachtype v); + +/* BINARY */ +icalvalue* icalvalue_new_binary(char* v); +char* icalvalue_get_binary(icalvalue* value); +void icalvalue_set_binary(icalvalue* value, char* v); + +/* BOOLEAN */ +icalvalue* icalvalue_new_boolean(int v); +int icalvalue_get_boolean(icalvalue* value); +void icalvalue_set_boolean(icalvalue* value, int v); + +/* CAL-ADDRESS */ +icalvalue* icalvalue_new_caladdress(char* v); +char* icalvalue_get_caladdress(icalvalue* value); +void icalvalue_set_caladdress(icalvalue* value, char* v); + +/* DATE */ +icalvalue* icalvalue_new_date(struct icaltimetype v); +struct icaltimetype icalvalue_get_date(icalvalue* value); +void icalvalue_set_date(icalvalue* value, struct icaltimetype v); + +/* DATE-TIME */ +icalvalue* icalvalue_new_datetime(struct icaltimetype v); +struct icaltimetype icalvalue_get_datetime(icalvalue* value); +void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); + +/* DATE-TIME-DATE # Non-std */ +icalvalue* icalvalue_new_datetimedate(struct icaltimetype v); +struct icaltimetype icalvalue_get_datetimedate(icalvalue* value); +void icalvalue_set_datetimedate(icalvalue* value, struct icaltimetype v); + +/* DATE-TIME-PERIOD # Non-std */ +icalvalue* icalvalue_new_datetimeperiod(struct icalperiodtype v); +struct icalperiodtype icalvalue_get_datetimeperiod(icalvalue* value); +void icalvalue_set_datetimeperiod(icalvalue* value, struct icalperiodtype v); + +/* DURATION */ +icalvalue* icalvalue_new_duration(struct icaldurationtype v); +struct icaldurationtype icalvalue_get_duration(icalvalue* value); +void icalvalue_set_duration(icalvalue* value, struct icaldurationtype v); + +/* FLOAT */ +icalvalue* icalvalue_new_float(float v); +float icalvalue_get_float(icalvalue* value); +void icalvalue_set_float(icalvalue* value, float v); + +/* GEO # Non-std */ +icalvalue* icalvalue_new_geo(struct icalgeotype v); +struct icalgeotype icalvalue_get_geo(icalvalue* value); +void icalvalue_set_geo(icalvalue* value, struct icalgeotype v); + +/* INTEGER */ +icalvalue* icalvalue_new_integer(int v); +int icalvalue_get_integer(icalvalue* value); +void icalvalue_set_integer(icalvalue* value, int v); + +/* METHOD # Non-std */ +icalvalue* icalvalue_new_method(icalproperty_method v); +icalproperty_method icalvalue_get_method(icalvalue* value); +void icalvalue_set_method(icalvalue* value, icalproperty_method v); + +/* PERIOD */ +icalvalue* icalvalue_new_period(struct icalperiodtype v); +struct icalperiodtype icalvalue_get_period(icalvalue* value); +void icalvalue_set_period(icalvalue* value, struct icalperiodtype v); + +/* RECUR */ +icalvalue* icalvalue_new_recur(struct icalrecurrencetype v); +struct icalrecurrencetype icalvalue_get_recur(icalvalue* value); +void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); + +/* STRING # Non-std */ +icalvalue* icalvalue_new_string(char* v); +char* icalvalue_get_string(icalvalue* value); +void icalvalue_set_string(icalvalue* value, char* v); + +/* TEXT */ +icalvalue* icalvalue_new_text(char* v); +char* icalvalue_get_text(icalvalue* value); +void icalvalue_set_text(icalvalue* value, char* v); + +/* TIME */ +icalvalue* icalvalue_new_time(struct icaltimetype v); +struct icaltimetype icalvalue_get_time(icalvalue* value); +void icalvalue_set_time(icalvalue* value, struct icaltimetype v); + +/* TRIGGER # Non-std */ +icalvalue* icalvalue_new_trigger(union icaltriggertype v); +union icaltriggertype icalvalue_get_trigger(icalvalue* value); +void icalvalue_set_trigger(icalvalue* value, union icaltriggertype v); + +/* URI */ +icalvalue* icalvalue_new_uri(char* v); +char* icalvalue_get_uri(icalvalue* value); +void icalvalue_set_uri(icalvalue* value, char* v); + +/* UTC-OFFSET */ +icalvalue* icalvalue_new_utcoffset(int v); +int icalvalue_get_utcoffset(icalvalue* value); +void icalvalue_set_utcoffset(icalvalue* value, int v); + +/* QUERY */ +icalvalue* icalvalue_new_query(char* v); +char* icalvalue_get_query(icalvalue* value); +void icalvalue_set_query(icalvalue* value, char* v); + +#endif ICALVALUE_H diff --git a/libical/src/libical/icalvcal.h b/libical/src/libical/icalvcal.h new file mode 100644 index 0000000000..3a1098e6c2 --- /dev/null +++ b/libical/src/libical/icalvcal.h @@ -0,0 +1,39 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalvcal.h + CREATOR: eric 13 January 2000 + + + $Id$ + $Locker$ + + (C) COPYRIGHT 2000 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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALVCAL_H +#define ICALVCAL_H + +VCalObject* icalvcal_new_vcal_from_ical(icalcomponent* component); +icalcomponent* icalvcal_new_ical_from_vcal(VCalObject* vcal); + + +#endif /* !ICALVCAL_H */ + + + diff --git a/libical/src/libical/icalversion.h.in b/libical/src/libical/icalversion.h.in new file mode 100644 index 0000000000..aaeeed6666 --- /dev/null +++ b/libical/src/libical/icalversion.h.in @@ -0,0 +1,3 @@ + +#define ICAL_PACKAGE "@PACKAGE@" +#define ICAL_VERSION "@VERSION@" diff --git a/libical/src/libical/icalyacc.y b/libical/src/libical/icalyacc.y new file mode 100644 index 0000000000..cffcec96d6 --- /dev/null +++ b/libical/src/libical/icalyacc.y @@ -0,0 +1,480 @@ +%{ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalitip.y + CREATOR: eric 10 June 1999 + + DESCRIPTION: + + $Id: icalyacc.y,v 1.3 2000/05/15 06:18:18 ericb Exp $ + $Locker: $ + + (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. + + The original author is Eric Busboom + The original code is icalitip.y + + + + ================================b======================================*/ + +#include <stdlib.h> +#include <string.h> /* for strdup() */ +#include <limits.h> /* for SHRT_MAX*/ +#include "icalparser.h" +#include "ical.h" +#include "pvl.h" +#define YYERROR_VERBOSE +#define YYDEBUG 1 + + +icalvalue *icalparser_yy_value; /* Current Value */ + +/* Globals for UTCOFFSET values */ +int utc; +int utc_b; +int utcsign; + +/* Globals for DURATION values */ +struct icaldurationtype duration; + +/* Globals for RECUR values */ +struct icalrecurrencetype recur; +short skiplist[367]; +short skippos; + +void copy_list(short* array, size_t size); +void clear_recur(); +void add_prop(icalproperty_kind); +void icalparser_fill_date(struct tm* t, char* dstr); +void icalparser_fill_time(struct tm* t, char* tstr); +void set_value_type(icalvalue_kind kind); +void set_parser_value_state(); +struct icaltimetype fill_datetime(char* d, char* t); +void ical_yy_error(char *s); /* Don't know why I need this.... */ +/*int yylex(void); /* Or this. */ + + + +/* Set the state of the lexer so it will interpret values ( iCAL + VALUEs, that is, ) correctly. */ + +%} + +%union { + float v_float; + int v_int; + char* v_string; + + /* Renaming hack */ +#define yymaxdepth ical_yy_maxdepth +#define yyparse ical_yy_parse +#define yylex ical_yy_lex +#define yyerror ical_yy_error +#define yylval ical_yy_lval +#define yychar ical_yy_char +#define yydebug ical_yy_debug +#define yypact ical_yy_pact +#define yyr1 ical_yy_r1 +#define yyr2 ical_yy_r2 +#define yydef ical_yy_def +#define yychk ical_yy_chk +#define yypgo ical_yy_pgo +#define yyact ical_yy_act +#define yyexca ical_yy_exca +#define yyerrflag ical_yy_errflag +#define yynerrs ical_yy_nerrs +#define yyps ical_yy_ps +#define yypv ical_yy_pv +#define yys ical_yy_s +#define yy_yys ical_yy_yys +#define yystate ical_yy_state +#define yytmp ical_yy_tmp +#define yyv ical_yy_v +#define yy_yyv ical_yy_yyv +#define yyval ical_yy_val +#define yylloc ical_yy_lloc +#define yyreds ical_yy_reds +#define yytoks ical_yy_toks +#define yylhs ical_yy_yylhs +#define yylen ical_yy_yylen +#define yydefred ical_yy_yydefred +#define yydgoto ical_yy_yydgoto +#define yydefred ical_yy_yydefred +#define yydgoto ical_yy_yydgoto +#define yysindex ical_yy_yysindex +#define yyrindex ical_yy_yyrindex +#define yygindex ical_yy_yygindex +#define yytable ical_yy_yytable +#define yycheck ical_yy_yycheck +#define yyname ical_yy_yyname +#define yyrule ical_yy_yyrule + + + +} + +%token <v_string> DIGITS +%token <v_int> INTNUMBER +%token <v_float> FLOATNUMBER +%token <v_string> STRING +%token EOL EQUALS CHARACTER COLON COMMA SEMICOLON TIMESEPERATOR + +%token TRUE FALSE + +%token FREQ BYDAY BYHOUR BYMINUTE BYMONTH BYMONTHDAY BYSECOND BYSETPOS BYWEEKNO +%token BYYEARDAY DAILY MINUTELY MONTHLY SECONDLY WEEKLY HOURLY YEARLY +%token INTERVAL COUNT UNTIL WKST MO SA SU TU WE TH FR + +%token BIT8 ACCEPTED ADD AUDIO BASE64 BINARY BOOLEAN BUSY BUSYTENTATIVE +%token BUSYUNAVAILABLE CALADDRESS CANCEL CANCELLED CHAIR CHILD COMPLETED +%token CONFIDENTIAL CONFIRMED COUNTER DATE DATETIME DECLINECOUNTER DECLINED +%token DELEGATED DISPLAY DRAFT DURATION EMAIL END FINAL FLOAT FREE GREGORIAN +%token GROUP INDIVIDUAL INPROCESS INTEGER NEEDSACTION NONPARTICIPANT +%token OPAQUE OPTPARTICIPANT PARENT PERIOD PRIVATE PROCEDURE PUBLIC PUBLISH +%token RECUR REFRESH REPLY REQPARTICIPANT REQUEST RESOURCE ROOM SIBLING +%token START TENTATIVE TEXT THISANDFUTURE THISANDPRIOR TIME TRANSPAENT +%token UNKNOWN UTCOFFSET XNAME + +%token ALTREP CN CUTYPE DAYLIGHT DIR ENCODING EVENT FBTYPE FMTTYPE LANGUAGE +%token MEMBER PARTSTAT RANGE RELATED RELTYPE ROLE RSVP SENTBY STANDARD URI + +%token TIME_CHAR UTC_CHAR + + +%% + +value: + binary_value + | boolean_value + | date_value + | datetime_value + | duration_value + | period_value + | recur_value + | utcoffset_value + | error { + icalparser_yy_value = 0; + icalparser_clear_flex_input(); + yyclearin; + } + +binary_value: "unimplemented2" + +boolean_value: + TRUE + { icalparser_yy_value = icalvalue_new_boolean(1); } + | FALSE + { icalparser_yy_value = icalvalue_new_boolean(0); } + +date_value: DIGITS + { + struct icaltimetype stm; + + stm = fill_datetime($1,0); + + stm.hour = -1; + stm.minute = -1; + stm.second = -1; + stm.is_utc = 0; + stm.is_date = 1; + + icalparser_yy_value = icalvalue_new_date(stm); + } + +utc_char: + /*empty*/ {utc = 0;} + | UTC_CHAR {utc = 1;} + +/* This is used in the period_value, where there may be two utc characters per rule. */ +utc_char_b: + /*empty*/ {utc_b = 0;} + | UTC_CHAR {utc_b = 1;} + +datetime_value: + DIGITS TIME_CHAR DIGITS utc_char + { + struct icaltimetype stm; + stm = fill_datetime($1, $3); + stm.is_utc = utc; + stm.is_date = 0; + + icalparser_yy_value = + icalvalue_new_datetime(stm); + } + + +/* Duration */ + + +dur_date: dur_day + | dur_day dur_time + +dur_week: DIGITS 'W' + { + duration.weeks = atoi($1); + } + +dur_time: TIME_CHAR dur_hour + { + } + | TIME_CHAR dur_minute + { + } + | TIME_CHAR dur_second + { + } + +dur_hour: DIGITS 'H' + { + duration.hours = atoi($1); + } + | DIGITS 'H' dur_minute + { + duration.hours = atoi($1); + } + +dur_minute: DIGITS 'M' + { + duration.minutes = atoi($1); + } + | DIGITS 'M' dur_second + { + duration.minutes = atoi($1); + } + +dur_second: DIGITS 'S' + { + duration.seconds = atoi($1); + } + +dur_day: DIGITS 'D' + { + duration.days = atoi($1); + } + +dur_prefix: /* empty */ + { + } + | '+' + { + } + | '-' + { + } + +duration_value: dur_prefix 'P' dur_date + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + | dur_prefix 'P' dur_time + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + | dur_prefix 'P' dur_week + { + icalparser_yy_value = icalvalue_new_duration(duration); + memset(&duration,0, sizeof(duration)); + } + + +/* Period */ + +period_value: DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b + { + struct icalperiodtype p; + + p.start = fill_datetime($1,$3); + p.start.is_utc = utc; + p.start.is_date = 0; + + + p.end = fill_datetime($6,$8); + p.end.is_utc = utc_b; + p.end.is_date = 0; + + p.duration.days = -1; + p.duration.weeks = -1; + p.duration.hours = -1; + p.duration.minutes = -1; + p.duration.seconds = -1; + + icalparser_yy_value = icalvalue_new_period(p); + } + | DIGITS TIME_CHAR DIGITS utc_char '/' duration_value + { + struct icalperiodtype p; + + p.start = fill_datetime($1,$3); + p.start.is_utc = utc; + p.start.is_date = 0; + + p.end.year = -1; + p.end.month = -1; + p.end.day = -1; + p.end.hour = -1; + p.end.minute = -1; + p.end.second = -1; + + /* The duration_value rule setes the global 'duration' + variable, but it also creates a new value in + icalparser_yy_value. So, free that, then copy + 'duration' into the icalperiodtype struct. */ + + p.duration = icalvalue_get_duration(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); + icalparser_yy_value = 0; + + icalparser_yy_value = icalvalue_new_period(p); + + } + + + +/* Recur */ + +recur_start: + FREQ EQUALS SECONDLY {clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;} + | FREQ EQUALS MINUTELY {clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;} + | FREQ EQUALS HOURLY {clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;} + | FREQ EQUALS DAILY {clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;} + | FREQ EQUALS WEEKLY {clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;} + | FREQ EQUALS MONTHLY {clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;} + | FREQ EQUALS YEARLY {clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;} + ; + + +weekday: + SU { skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;} + | MO { skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;} + | TU { skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;} + | WE { skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;} + | TH { skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;} + | FR { skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;} + | SA { skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;} + ; + + +weekday_list: + weekday + | DIGITS weekday { } /* HACK Incorectly handles int in BYDAY */ + | weekday_list COMMA weekday + + +recur_list: + DIGITS { skiplist[skippos] = atoi($1); skippos++;} + | recur_list COMMA DIGITS { skiplist[skippos] = atoi($3); if (skippos<367) skippos++;} + ; + +recur_skip: + INTERVAL EQUALS DIGITS {recur.interval = atoi($3);} + | WKST EQUALS SU {recur.week_start = ICAL_SUNDAY_WEEKDAY;} + | WKST EQUALS MO {recur.week_start = ICAL_MONDAY_WEEKDAY;} + | WKST EQUALS TU {recur.week_start = ICAL_TUESDAY_WEEKDAY;} + | WKST EQUALS WE {recur.week_start = ICAL_WEDNESDAY_WEEKDAY;} + | WKST EQUALS TH {recur.week_start = ICAL_THURSDAY_WEEKDAY;} + | WKST EQUALS FR {recur.week_start = ICAL_FRIDAY_WEEKDAY;} + | WKST EQUALS SA {recur.week_start = ICAL_SATURDAY_WEEKDAY;} + | BYSECOND EQUALS recur_list{copy_list(recur.by_second,60);} + | BYMINUTE EQUALS recur_list{copy_list(recur.by_minute,60);} + | BYHOUR EQUALS recur_list{copy_list(recur.by_hour,24);} + | BYDAY EQUALS weekday_list{copy_list(recur.by_day,7);} + | BYMONTH EQUALS recur_list{copy_list(recur.by_month,12);} + | BYMONTHDAY EQUALS recur_list{copy_list(recur.by_month_day,31);} + | BYYEARDAY EQUALS recur_list{copy_list(recur.by_year_day,366);} + | BYWEEKNO EQUALS recur_list{copy_list(recur.by_week_no,53);} + | BYSETPOS EQUALS recur_list{copy_list(recur.by_set_pos,366);} + | UNTIL EQUALS datetime_value + { recur.until = icalvalue_get_datetime(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} + | UNTIL EQUALS date_value + { recur.until = icalvalue_get_date(icalparser_yy_value); + icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} + | COUNT EQUALS DIGITS + { recur.count = atoi($3); } + ; + +recur_skip_list: + /* empty */ + | recur_skip_list SEMICOLON recur_skip + +recur_value: + recur_start recur_skip_list + { icalparser_yy_value = icalvalue_new_recur(recur); } + + + +/* UTC Offset */ + +plusminus: '+' { utcsign = 1; } + | '-' { utcsign = -1; } + +utcoffset_value: + plusminus INTNUMBER INTNUMBER + { + icalparser_yy_value = icalvalue_new_utcoffset( utcsign * ($2*3600) + ($3*60) ); + } + + | plusminus INTNUMBER INTNUMBER INTNUMBER + { + icalparser_yy_value = icalvalue_new_utcoffset(utcsign * ($2*3600) + ($3*60) +($4)); + } + + + +%% + + +void clear_recur() +{ + memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; + + icalrecurrencetype_clear(&recur); +} + +void copy_list(short* array, size_t size) +{ + memcpy(array, skiplist, size*sizeof(short)); + memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); + skippos = 0; +} + +struct icaltimetype fill_datetime(char* datestr, char* timestr) +{ + struct icaltimetype stm; + + memset(&stm,0,sizeof(stm)); + + if (datestr != 0){ + sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), + &(stm.day)); + } + + if (timestr != 0){ + sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), + &(stm.second)); + } + + return stm; + +} + +void yyerror(char* s) +{ + /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ +} + diff --git a/libical/src/libical/locking.c b/libical/src/libical/locking.c new file mode 100644 index 0000000000..0376bc2bec --- /dev/null +++ b/libical/src/libical/locking.c @@ -0,0 +1,143 @@ + +/* + I Stole this from: + http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html + + CIS 307: An example using Read/Write File Locks + [fcntl.h], [fcntl.c], [fcntlmain.c] + +In Stevens "Advanced Programming in the Unix Environment" we see ways to use +the Unix service fcntl to lock portions of a file for reading and writing in +the manner stated in the Reader and Writer problem [any number of readers at +a time, but writers must operate alone]. Here we have three files that adapt +and use the code from Stevens: + +*fcntl.h: Specification of the locking functions. +*fcntl.c: Implementation of the locking functions. +*fcntlmain.c: Driver that does a simple test of the locking functions. + +WARNING: A file lock request which is blocked can be interrupted by a +signal. In this case the lock operation returns EINTR. Thus we may think we +got a lock when we really don't. A solution is to block signals when +locking. Another solution is to test the value returned by the lock +operation and relock if the value is EINTR. Another solution, which we adopt +here, is to do nothing about it. + +/* fcntl.c -- Defines mutexes in terms of read/write locks on files. + * (code is mostly from Stevens: Advanced Programming in the + * Unix environment. See from page 367 on. + * filerwlock, filerwlockCreate, filerwlockDelete, + * filerwreadlock, filerwlongreadlock, filerwlongunlock, + * filerwlockUnlock + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> + +int lock_reg(int, int, int, off_t, int, off_t); + +#define read_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len) + +#define readw_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len) + +#define write_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len) + +#define writew_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len) + +#define un_lock(fd, offset, whence, len) \ + lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len) + +pid_t lock_test(int, int , off_t , int , off_t ); + +#define is_readlock(fd, offset, whence, len) \ + lock_test(fd, F_RDLCK, offset, whence, len) + +#define is_writelock(fd, offset, whence, len) \ + lock_test(fd, F_WRLCK, offset, whence, len) + +int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) +{ + struct flock lock; + lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */ + lock.l_start = offset; /* byte offset relative to l_whence */ + lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = len; /* #bytes (0 means to EOF) */ + return (fcntl(fd, cmd, &lock)); +} + +pid_t lock_test(int fd, int type, off_t offset, int whence, off_t len) +{ + struct flock lock; + lock.l_type = type; /* F_RDLCK or F_WRLCK */ + lock.l_start = offset; /* byte offset relative to l_whence */ + lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = len; /* #bytes (0 means to EOF) */ + if (fcntl(fd,F_GETLK,&lock) < 0){ + perror("fcntl"); exit(1);} + if (lock.l_type == F_UNLCK) + return (0); /* false, region is not locked by another process */ + return (lock.l_pid); /* true, return pid of lock owner */ +} + +typedef struct { + int fd; + int n;} filerwlock; + +/* Create N read/write locks and returns the id of this cluster of locks. */ +filerwlock * filerwlockCreate(char *filename, int n) { + filerwlock *fl = (filerwlock *)malloc(sizeof(filerwlock)); + if (((fl->fd) = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IWUSR)) < 0) { + perror("open"); + exit(1);} + fl->n = n; + return fl; + } + +/* Delete the cluster of read/write locks associated with fl. */ +int filerwlockDelete(filerwlock *fl) { + if (close(fl->fd) < 0) { + perror("close"); + exit(1);} + return free(fl); + } + +/* Given the read/write lock cluster fl, lock its ith element */ +int filerwreadlock(filerwlock *fl, int i) { + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + readw_lock(fl->fd, i, SEEK_SET, 1); + } + +int filerwwritelock(filerwlock *fl, int i) { + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + writew_lock(fl->fd, i, SEEK_SET, 1); + } + +/* Given the lock cluster fl, unlock its ith element */ +int filerwunlock(filerwlock *fl, int i){ + + if ((i < 0) | (i >= fl->n)) { + printf("filerwlockUnlock needs i in range 0 .. %d\n", (fl->n)-1); + exit(0);} + un_lock(fl->fd, i, SEEK_SET, 1); + } + +/* Given the lock cluster fl, it read locks all its elements */ +int filerwlongreadlock(filerwlock *fl) { + readw_lock(fl->fd, 0, SEEK_SET, fl->n); +} + +/* Given the lock cluster fl, it unlocks all its elements */ +int filerwlongunlock(filerwlock *fl) { + un_lock(fl->fd, 0, SEEK_SET, fl->n); +} + diff --git a/libical/src/libical/pvl.c b/libical/src/libical/pvl.c new file mode 100644 index 0000000000..d5225a541e --- /dev/null +++ b/libical/src/libical/pvl.c @@ -0,0 +1,768 @@ +/*====================================================================== + FILE: pvl.c + CREATOR: eric November, 1995 + + + (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. +======================================================================*/ + +#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; + + +/*---------------------------------------------------------------------- + Function: pvl_list pvl_newlist() + + Purpose: + + Creates a new list, clears the pointers and assigns a magic number + + Returns: + + 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); +} + +/*---------------------------------------------------------------------- + Function: pvl_new_element(void *d, struct pvl_elem_t *next,struct pvl_elem_t *prior) + + Purpose: + 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. + + Parameters: + + d The data item to be stored in the list + next Pointer value to assign to the member "next" + prior Pointer value to assign to the member "prior" + + Returns: + + 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; +} + +/*---------------------------------------------------------------------- + Function: pvl_unshift(pvl_list l,void *d) + + Purpose: + + Add a new element to the from of the list + + Parameters: + + l The list to add the item to + d Pointer to the item to add + + Returns: + *----------------------------------------------------------------------*/ + +void +pvl_unshift(pvl_list l,void *d) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + 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++; +} + +/*---------------------------------------------------------------------- + Function: pvl_shift(pvl_list l) + + Purpose: + + Remove an element from the front of the list + + Parameters: + + l The list to operate on + + Returns: + *----------------------------------------------------------------------*/ + +void* +pvl_shift(pvl_list l) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + + if (L->head == 0) + { + return 0; + } + + return pvl_remove(l,(void*)L->head); + +} + +/*---------------------------------------------------------------------- + Function: void pvl_push(pvl_list l,void *d) + + Purpose: + + Add a new item to the tail of the list + + Paramters: + + l The list to operate on + d Pointer to the item to add + + Returns: + *----------------------------------------------------------------------*/ + +void +pvl_push(pvl_list l,void *d) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + 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++; + +} + +/*---------------------------------------------------------------------- + Function: void* pvl_pop(pvl_list l) + + Purpose: + + Remove an element from the tail of the list + + Paramters: + + l The list to operate on + + Returns: + *----------------------------------------------------------------------*/ + +void* +pvl_pop(pvl_list l) +{ + + struct pvl_list_t *L = (struct pvl_list_t *)l; + + if ( L->tail == 0) + { + return 0; + } + + return pvl_remove(l,(void*) L->tail);; + +} + + +/*---------------------------------------------------------------------- + Function: void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d) + + Purpose: + + Add a new item to a list that is ordered by a comparison function. + This routine assumes that the list is properly ordered. + + l The list to operate on + f Pointer to a comparison function + d Pointer to data to pass to the comparison function + + Returns: + + void + + *----------------------------------------------------------------------*/ + +void +pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + + 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 */ + + assert(0); + +} + +/*---------------------------------------------------------------------- + Function: void pvl_insert_after(pvl_list l,pvl_elem p,void *d) + + Purpose: + + Add a new item after the referenced element. + + Parameters: + + l The list to operate on + p The list element to add the item after + d Pointer to the item to add. + + Returns: + + void + + *----------------------------------------------------------------------*/ + +void +pvl_insert_after(pvl_list l,pvl_elem p,void *d) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + struct pvl_elem_t *P = (struct pvl_elem_t *)p; + 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; + } +} + +/*---------------------------------------------------------------------- + Function: void pvl_insert_before(pvl_list l,pvl_elem p,void *d) + + Purpose: + + Add an item after a referenced item + + Parameters: + + l The list to operate on + p The list element to add the item before + d Pointer to the data to be added. + + Returns: + *----------------------------------------------------------------------*/ + +void +pvl_insert_before(pvl_list l,pvl_elem p,void *d) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + struct pvl_elem_t *P = (struct pvl_elem_t *)p; + 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; + } +} + +/*---------------------------------------------------------------------- + Function: void pvl_remove(pvl_list l,pvl_elem e) + + Purpose: + + Remove the referenced item from the list + + This routine will free the element, but not the data item that the + element contains. + + Parameters: + + l The list to operate on + e The element to remove. + + Returns: + *----------------------------------------------------------------------*/ + +void* +pvl_remove(pvl_list l,pvl_elem e) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + struct pvl_elem_t *E = (struct pvl_elem_t *)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; + + free(E); + + return data; + +} + +/*---------------------------------------------------------------------- + Function: pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v) + + Purpose: + + 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. + + Parameters: + + l The list to operate on + f Pointer to the find function + v Pointer to constant data to pass into the function + + Returns: + + 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; + +} +/*---------------------------------------------------------------------- + Function: void* pvl_find_next(pvl_list l,pvl_findf f,void* v) + + Purpose: + + Like pvl_find(), but continues the search where the last find() or + find_next() left off + + Parameters: + + l The list to operate on + f Pointer to the find function + v Pointer to constant data to pass into the function + + Returns: + + 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; + +} + +/*---------------------------------------------------------------------- + Function: void pvl_clear(pvl_list l) + + Purpose: + + Remove the all the elements in the list. The does not free the data items + the elements hold. + + + Returns: + *----------------------------------------------------------------------*/ + +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; + } +} + +/*---------------------------------------------------------------------- + Function: int pvl_count(pvl_list l) + + Purpose: + + Returns the number of items in the list. + + Returns: + *----------------------------------------------------------------------*/ + +int +pvl_count(pvl_list l) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + + return L->count; +} + + +/*---------------------------------------------------------------------- + Function: pvl_elem pvl_next(pvl_elem e) + + Purpose: + Returns a pointer to the given element + + Returns: + *----------------------------------------------------------------------*/ + +pvl_elem +pvl_next(pvl_elem e) +{ + struct pvl_elem_t *E = (struct pvl_elem_t *)e; + + if (E == 0){ + return 0; + } + + return (pvl_elem)E->next; +} + +/*---------------------------------------------------------------------- + Function: pvl_elem pvl_prior(pvl_elem e) + + Purpose: + + Returns a pointer to the element previous to the element given. + + Returns: + *----------------------------------------------------------------------*/ + +pvl_elem +pvl_prior(pvl_elem e) +{ + struct pvl_elem_t *E = (struct pvl_elem_t *)e; + + return (pvl_elem)E->prior; +} + +/*---------------------------------------------------------------------- + Function: pvl_elem pvl_head(pvl_list l ) + + Purpose: + + Returns a pointer to the first item in the list. + + Returns: + *----------------------------------------------------------------------*/ +pvl_elem +pvl_head(pvl_list l ) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + + return (pvl_elem)L->head; +} + +/*---------------------------------------------------------------------- + Function: pvl_elem pvl_tail(pvl_list l) + + Purpose: + + Returns a pointer to the last item in the list. + + Returns: + *----------------------------------------------------------------------*/ +pvl_elem +pvl_tail(pvl_list l) +{ + struct pvl_list_t *L = (struct pvl_list_t *)l; + return (pvl_elem)L->tail; +} + +/*---------------------------------------------------------------------- + Function: + + + Purpose: + + + Returns: + *----------------------------------------------------------------------*/ + +#ifndef PVL_USE_MACROS +void* +pvl_data(pvl_elem e) +{ + struct pvl_elem_t *E = (struct pvl_elem_t *)e; + + if ( e == 0){ + return 0; + } + + return E->d; +} +#endif + +/*---------------------------------------------------------------------- + Function: void pvl_apply(pvl_list l,pvl_applyf f, void *v) + + Purpose: + + Call a function for every item in the list. + + Paramters: + + l The list to operate on + f Pointer to the function to call + v Data to pass to the function on every iteration + + Returns: + + void + *----------------------------------------------------------------------*/ + +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/libical/src/libical/pvl.h b/libical/src/libical/pvl.h new file mode 100644 index 0000000000..8113f7495a --- /dev/null +++ b/libical/src/libical/pvl.h @@ -0,0 +1,104 @@ +/*====================================================================== + FILE: pvl.h + CREATOR: eric November, 1995 + + + (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. + +======================================================================*/ + +/* + struct pvl_elem_t + + This type is private. Always use pvl_elem instead + + */ + +#ifndef __PVL_H__ +#define __PVL_H__ + +typedef void* pvl_list; +typedef void* pvl_elem; + +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 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 */ +typedef void (*pvl_applyf)(void* a, void* b); /*a is list elem, b is other data*/ +void pvl_apply(pvl_list l,pvl_applyf f, void *v); + + +#endif /* __PVL_H__ */ + + + + + diff --git a/libical/src/libical/testlocks.c b/libical/src/libical/testlocks.c new file mode 100644 index 0000000000..d3e9e55cec --- /dev/null +++ b/libical/src/libical/testlocks.c @@ -0,0 +1,70 @@ +/* This is just a driver to test the filerwlock objects defined in fcntl.c */ +/* MAXCHILD processes are forked. They take turns in using LOCKSSIZE locks.*/ +/* I compiled the program as follows */ +/* cc fcntlmain.c fcntl.c -o fcntlmain */ +/* and then run the image fcntlmain. */ +/* Notice that after the program has run I find the file "mylock" in my */ +/* directory. Not very desirable. Perhaps there is a way to avoid that? */ + +#include <stdio.h> +#include <sys/types.h> +#include "fcntl.h" + +#define LOCKFILE "mylock" +#define LOCKSSIZE 5 +#define MAXCHILD 4 + +void child (int self); + +pid_t cldrn[4]; +filerwlock *fl; + +int +main(void){ + int i; + + fl = filerwlockCreate(LOCKFILE, LOCKSSIZE); + + for (i=0;i < MAXCHILD; i++) { + if ((cldrn[i]=fork()) < 0) { + perror("fork"); + exit(1);} + if (cldrn[i]==0) + child(i); + } + for (i=0; i < MAXCHILD; i++) + wait(); + + filerwlockDelete(fl); + exit(0); +} + +void child (int self) { + int i, j; + char s[256]; + for (j=0; j<8; j++) { + + if (self == 0) { + filerwwritelock(fl,1); + } else if (self == (MAXCHILD-1)) { + filerwlongreadlock(fl); + } else { + filerwreadlock(fl,1); + } + + printf("Child %d starts to sleep on lock %d\n", self, 1); + + sleep(3); + + printf("Child %d ends sleep on lock %d\n", self, 1); + + if (self == (MAXCHILD-1)) { + filerwlongunlock(fl); + } else { + filerwunlock(fl,1); + } + + sleep(1); + } + exit(0); +} diff --git a/libical/src/libicalss/.cvsignore b/libical/src/libicalss/.cvsignore new file mode 100644 index 0000000000..732c1577b6 --- /dev/null +++ b/libical/src/libicalss/.cvsignore @@ -0,0 +1,6 @@ +Makefile +.deps +Makefile.in +*.lo +*.la +.libs
\ No newline at end of file diff --git a/libical/src/libicalss/Makefile.am b/libical/src/libicalss/Makefile.am new file mode 100644 index 0000000000..ea37380688 --- /dev/null +++ b/libical/src/libicalss/Makefile.am @@ -0,0 +1,23 @@ + + +#noinst_LTLIBRARIES = libicalss.la +lib_LTLIBRARIES = libicalss.la + +libicalss_la_SOURCES =\ + icalcalendar.c \ + icalcalendar.h \ + icalcluster.c \ + icalcluster.h \ + icalstore.c \ + icalstore.h + +include_HEADERS =\ + icalcalendar.h \ + icalcluster.h \ + icalstore.h + + +INCLUDES = \ + -I $(srcdir)/../libical/ \ + -I ../libical + diff --git a/libical/src/libicalss/icalcalendar.c b/libical/src/libicalss/icalcalendar.c new file mode 100644 index 0000000000..0f2231b1d7 --- /dev/null +++ b/libical/src/libicalss/icalcalendar.c @@ -0,0 +1,268 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalcalendar.c + CREATOR: eric 23 December 1999 + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "icalcalendar.h" +#include "icalcluster.h" +#include <limits.h> +#include <sys/stat.h> /* For mkdir, stat */ +#include <sys/types.h> /* For mkdir */ +#include <fcntl.h> /* For mkdir */ +#include <unistd.h> /* For mkdir, stat */ +#include <stdlib.h> /* for malloc */ +#include <string.h> /* for strcat */ +#include <errno.h> + +#define BOOKED_DIR "booked" +#define INCOMING_FILE "incoming.ics" +#define PROP_FILE "properties.ics" +#define FBLIST_FILE "freebusy.ics" + +struct icalcalendar_impl +{ + char* dir; + icalcomponent* freebusy; + icalcomponent* properties; + icalstore* booked; + icalstore* incoming; +}; + +struct icalcalendar_impl* icalcalendar_new_impl() +{ + struct icalcalendar_impl* impl; + + if ( ( impl = (struct icalcalendar_impl*) + malloc(sizeof(struct icalcalendar_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + return impl; +} + + +icalerrorenum icalcalendar_create(struct icalcalendar_impl* impl) +{ + char path[PATH_MAX]; + struct stat sbuf; + int r; + + icalerror_check_arg_re((impl != 0),"impl",ICAL_BADARG_ERROR); + + path[0] = '\0'; + strcpy(path,impl->dir); + strcat(path,"/"); + strcat(path,BOOKED_DIR); + + r = stat(path,&sbuf); + + if( r != 0 && errno == ENOENT){ + + if(mkdir(path,0777)!=0){ + icalerror_set_errno(ICAL_FILE_ERROR); + return ICAL_FILE_ERROR; + } + } + + return ICAL_NO_ERROR; +} + +icalcalendar* icalcalendar_new(char* dir) +{ + struct icalcalendar_impl* impl; + + icalerror_check_arg_rz((dir != 0),"dir"); + + impl = icalcalendar_new_impl(); + + if (impl == 0){ + return 0; + } + + impl->dir = (char*)strdup(dir); + impl->freebusy = 0; + impl->properties = 0; + impl->booked = 0; + impl->incoming = 0; + + if (icalcalendar_create(impl) != ICAL_NO_ERROR){ + free(impl); + return 0; + } + + return impl; +} + +void icalcalendar_free(icalcalendar* calendar) +{ + + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + + if (impl->dir !=0){ + free(impl->dir); + } + + if (impl->freebusy !=0){ + icalcluster_free(impl->freebusy); + } + + if (impl->properties !=0){ + icalcluster_free(impl->properties); + } + + if (impl->booked !=0){ + icalstore_free(impl->booked); + } + + if (impl->incoming !=0){ + icalstore_free(impl->incoming); + } + + impl->dir = 0; + impl->freebusy = 0; + impl->properties = 0; + impl->booked = 0; + impl->incoming = 0; + + + free(impl); +} + + +int icalcalendar_lock(icalcalendar* calendar) +{ + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + return 0; +} + +int icalcalendar_unlock(icalcalendar* calendar) +{ + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + return 0; +} + +int icalcalendar_islocked(icalcalendar* calendar) +{ + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + return 0; +} + +int icalcalendar_ownlock(icalcalendar* calendar) +{ + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + return 0; +} + +icalstore* icalcalendar_get_booked(icalcalendar* calendar) +{ + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + char dir[PATH_MAX]; + + icalerror_check_arg_rz((impl != 0),"impl"); + + dir[0] = '\0'; + strcpy(dir,impl->dir); + strcat(dir,"/"); + strcat(dir,BOOKED_DIR); + + if (impl->booked == 0){ + icalerror_clear_errno(); + impl->booked = icalstore_new(dir); + assert(icalerrno == ICAL_NO_ERROR); + } + + return impl->booked; + +} + +icalcluster* icalcalendar_get_incoming(icalcalendar* calendar) +{ + char path[PATH_MAX]; + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + + path[0] = '\0'; + strcpy(path,impl->dir); + strcat(path,"/"); + strcat(path,INCOMING_FILE); + + if (impl->properties == 0){ + impl->properties = icalcluster_new(path); + } + + return impl->properties; +} + +icalcluster* icalcalendar_get_properties(icalcalendar* calendar) +{ + char path[PATH_MAX]; + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + + path[0] = '\0'; + strcpy(path,impl->dir); + strcat(path,"/"); + strcat(path,PROP_FILE); + + if (impl->properties == 0){ + impl->properties = icalcluster_new(path); + } + + return impl->properties; +} + +icalcluster* icalcalendar_get_freebusy(icalcalendar* calendar) +{ + char path[PATH_MAX]; + struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; + icalerror_check_arg_rz((impl != 0),"impl"); + + path[0] = '\0'; + strcpy(path,impl->dir); + strcat(path,"/"); + strcat(path,FBLIST_FILE); + + + if (impl->freebusy == 0){ + impl->freebusy = icalcluster_new(path); + } + + return impl->freebusy; +} + + + + diff --git a/libical/src/libicalss/icalcalendar.h b/libical/src/libicalss/icalcalendar.h new file mode 100644 index 0000000000..90e7b33c22 --- /dev/null +++ b/libical/src/libicalss/icalcalendar.h @@ -0,0 +1,68 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcalendar.h + CREATOR: eric 23 December 1999 + + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALCALENDAR_H +#define ICALCALENDAR_H + +#include "ical.h" +#include "icalstore.h" +#include "icalcluster.h" + +/* icalcalendar + * Routines for storing calendar data in a file system. The calendar + * has two icalstores, one for incoming components and one for booked + * components. It also has interfaces to access the free/busy list + * and a list of calendar properties */ + +typedef void icalcalendar; + +icalcalendar* icalcalendar_new(char* dir); + +void icalcalendar_free(icalcalendar* calendar); + +int icalcalendar_lock(icalcalendar* calendar); + +int icalcalendar_unlock(icalcalendar* calendar); + +int icalcalendar_islocked(icalcalendar* calendar); + +int icalcalendar_ownlock(icalcalendar* calendar); + +icalstore* icalcalendar_get_booked(icalcalendar* calendar); + +icalcluster* icalcalendar_get_incoming(icalcalendar* calendar); + +icalcluster* icalcalendar_get_properties(icalcalendar* calendar); + +icalcluster* icalcalendar_get_freebusy(icalcalendar* calendar); + + +#endif /* !ICALCALENDAR_H */ + + + diff --git a/libical/src/libicalss/icalcluster.c b/libical/src/libicalss/icalcluster.c new file mode 100644 index 0000000000..36bdccc743 --- /dev/null +++ b/libical/src/libicalss/icalcluster.c @@ -0,0 +1,423 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalcluster.c + CREATOR: eric 23 December 1999 + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "icalcluster.h" +#include <errno.h> +#include <limits.h> /* For PATH_MAX */ +#include <sys/stat.h> /* for stat */ +#include <unistd.h> /* for stat, getpid */ +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> /* for fcntl */ +#include <unistd.h> /* for fcntl */ + +icalerrorenum icalcluster_create_cluster(char *path); + +struct icalcluster_impl { + char *path; + icalcomponent* cluster; + int changed; + FILE* stream; +}; + +icalcluster* icalcluster_new_impl() +{ + struct icalcluster_impl* comp; + + if ( ( comp = (struct icalcluster_impl*) + malloc(sizeof(struct icalcluster_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + errno = ENOMEM; + return 0; + } + + return comp; +} + +char* read_from_file(char *s, size_t size, void *d) +{ + char *c = fgets(s,size, (FILE*)d); + return c; +} + +icalcluster* icalcluster_new(char* path) +{ + struct icalcluster_impl *impl = icalcluster_new_impl(); + struct stat sbuf; + int createclusterfile = 0; + icalerrorenum error = ICAL_NO_ERROR; + icalparser *parser; + struct icaltimetype tt; + off_t cluster_file_size; + + memset(&tt,0,sizeof(struct icaltimetype)); + + icalerror_clear_errno(); + icalerror_check_arg_rz( (path!=0), "path"); + + if (impl == 0){ + return 0; + } + + /*impl->path = strdup(path); icalcluster_load does this */ + impl->changed = 0; + + impl->cluster = 0; + + impl->path = 0; + impl->stream = 0; + + /* Check if the path already exists and if it is a regular file*/ + if (stat(path,&sbuf) != 0){ + + /* A file by the given name does not exist, or there was + another error */ + cluster_file_size = 0; + if (errno == ENOENT) { + /* It was because the file does not exist */ + createclusterfile = 1; + } else { + /* It was because of another error */ + icalerror_set_errno(ICAL_FILE_ERROR); + return 0; + } + } else { + /* A file by the given name exists, but is it a regular file */ + + if (!S_ISREG(sbuf.st_mode)){ + /* Nope, not a directory */ + icalerror_set_errno(ICAL_FILE_ERROR); + return 0; + } else { + /* Lets assume that it is a file of the right type */ + cluster_file_size = sbuf.st_size; + createclusterfile = 0; + } + } + + /* if cluster does not already exist, create it */ + + if (createclusterfile == 1) { + error = icalcluster_create_cluster(path); + + if (error != ICAL_NO_ERROR){ + icalerror_set_errno(error); + return 0; + } + } + + impl->path = (char*)strdup(path); + + errno = 0; + impl->stream = fopen(impl->path,"r"); + + if (impl->stream ==0 || errno != 0){ + impl->cluster = 0; + icalerror_set_errno(ICAL_FILE_ERROR); /* Redundant, actually */ + return 0; + } + + icalcluster_lock(impl); + + if(cluster_file_size > 0){ + parser = icalparser_new(); + icalparser_set_gen_data(parser,impl->stream); + impl->cluster = icalparser_parse(parser,read_from_file); + icalparser_free(parser); + + if (icalcomponent_isa(impl->cluster) != ICAL_XROOT_COMPONENT){ + /* The parser got a single component, so it did not put it in + an XROOT. */ + icalcomponent *cl = impl->cluster; + impl->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); + icalcomponent_add_component(impl->cluster,cl); + } + + } else { + + impl->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); + } + + if (impl->cluster == 0){ + icalerror_set_errno(ICAL_PARSE_ERROR); + return 0; + } + + if (error != ICAL_NO_ERROR){ + return 0; + } + + return impl; +} + +void icalcluster_free(icalcluster* cluster) +{ + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rv((cluster!=0),"cluster"); + + if (impl->cluster != 0){ + icalcluster_commit(cluster); + icalcomponent_free(impl->cluster); + impl->cluster=0; + } + + if(impl->path != 0){ + free(impl->path); + impl->path = 0; + } + + if(impl->stream != 0){ + icalcluster_unlock(impl); + fclose(impl->stream); + impl->stream = 0; + } + + free(impl); +} + +char* icalcluster_path(icalcluster* cluster) +{ + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + icalerror_check_arg_rz((cluster!=0),"cluster"); + + return impl->path; +} + + +int icalcluster_lock(icalcluster *cluster) +{ + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + struct flock lock; + int fd; + + icalerror_check_arg_rz((impl->stream!=0),"impl->stream"); + + fd = fileno(impl->stream); + + lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ + lock.l_start = 0; /* byte offset relative to l_whence */ + lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = 0; /* #bytes (0 means to EOF) */ + + return (fcntl(fd, F_SETLKW, &lock)); +} + +int icalcluster_unlock(icalcluster *cluster) +{ + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + int fd; + struct flock lock; + icalerror_check_arg_rz((impl->stream!=0),"impl->stream"); + + fd = fileno(impl->stream); + + lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ + lock.l_start = 0; /* byte offset relative to l_whence */ + lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ + lock.l_len = 0; /* #bytes (0 means to EOF) */ + + return (fcntl(fd, F_UNLCK, &lock)); + +} + +icalerrorenum icalcluster_create_cluster(char *path) +{ + + FILE* f; + int r; + icalcomponent *c; + + icalerror_clear_errno(); + + f = fopen(path,"w"); + + if (f == 0){ + icalerror_set_errno(ICAL_FILE_ERROR); + return ICAL_FILE_ERROR; + } + + + /* This used to write data to the file... */ + + + fclose(f); + + return ICAL_NO_ERROR; +} + +icalerrorenum icalcluster_commit(icalcluster* cluster) +{ + FILE *f; + char tmp[PATH_MAX]; /* HACK Buffer overflow potential */ + char *str; + icalparser *parser; + icalcomponent *c; + + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); + + if (impl->changed == 0 ){ + return ICAL_NO_ERROR; + } + +#ifdef ICAL_SAFESAVES + snprintf(tmp,PATH_MAX,"%s-tmp",impl->path); +#else + strcpy(tmp,impl->path); +#endif + + if ( (f = fopen(tmp,"w")) < 0 ){ + icalerror_set_errno(ICAL_FILE_ERROR); + return ICAL_FILE_ERROR; + } + + for(c = icalcomponent_get_first_component(impl->cluster,ICAL_ANY_COMPONENT); + c != 0; + c = icalcomponent_get_next_component(impl->cluster,ICAL_ANY_COMPONENT)){ + + str = icalcomponent_as_ical_string(c); + + if ( fwrite(str,sizeof(char),strlen(str),f) < strlen(str)){ + fclose(f); + return ICAL_FILE_ERROR; + } + } + + fclose(f); + impl->changed = 0; + +#ifdef ICAL_SAFESAVES + rename(tmp,impl->path); /* HACK, should check for error here */ +#endif + + return ICAL_NO_ERROR; + +} + +void icalcluster_mark(icalcluster* cluster){ + + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rv((impl!=0),"cluster"); + + impl->changed = 1; + +} + +icalcomponent* icalcluster_get_component(icalcluster* cluster){ + struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); + + return impl->cluster; +} + + +/* manipulate the components in the cluster */ + +icalerrorenum icalcluster_add_component(icalcluster *cluster, + icalcomponent* child) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rv((cluster!=0),"cluster"); + icalerror_check_arg_rv((child!=0),"child"); + + icalcomponent_add_component(impl->cluster,child); + + icalcluster_mark(cluster); + + return ICAL_NO_ERROR; + +} + +icalerrorenum icalcluster_remove_component(icalcluster *cluster, + icalcomponent* child) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rv((cluster!=0),"cluster"); + icalerror_check_arg_rv((child!=0),"child"); + + icalcomponent_remove_component(impl->cluster,child); + + icalcluster_mark(cluster); + + return ICAL_NO_ERROR; +} + +int icalcluster_count_components(icalcluster *cluster, + icalcomponent_kind kind) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + if(cluster == 0){ + icalerror_set_errno(ICAL_BADARG_ERROR); + return -1; + } + + return icalcomponent_count_components(impl->cluster,kind); +} + +/* Iterate through components */ +icalcomponent* icalcluster_get_current_component (icalcluster* cluster) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rz((cluster!=0),"cluster"); + + return icalcomponent_get_current_component(impl->cluster); +} + +icalcomponent* icalcluster_get_first_component(icalcluster* cluster, + icalcomponent_kind kind) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rz((cluster!=0),"cluster"); + + return icalcomponent_get_first_component(impl->cluster,kind); +} + +icalcomponent* icalcluster_get_next_component(icalcluster* cluster, + icalcomponent_kind kind) +{ + struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; + + icalerror_check_arg_rz((cluster!=0),"cluster"); + + return icalcomponent_get_next_component(impl->cluster,kind); +} + diff --git a/libical/src/libicalss/icalcluster.h b/libical/src/libicalss/icalcluster.h new file mode 100644 index 0000000000..39fe542027 --- /dev/null +++ b/libical/src/libicalss/icalcluster.h @@ -0,0 +1,73 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcluster.h + CREATOR: eric 23 December 1999 + + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALCLUSTER_H +#define ICALCLUSTER_H + +#include "ical.h" + +typedef void icalcluster; + + +icalcluster* icalcluster_new(char* path); +void icalcluster_free(icalcluster* cluster); + +char* icalcluster_path(icalcluster* cluster); + +/* Return a reference to the internal component. */ +icalcomponent* icalcluster_get_component(icalcluster* cluster); + +/* Mark the cluster as changed, so it will be written to disk when it + is freed*/ +void icalcluster_mark(icalcluster* cluster); + +/* Write the cluster data back to disk */ +icalerrorenum icalcluster_commit(icalcluster* cluster); + +/* manipulate the components in the cluster */ +icalerrorenum icalcluster_add_component(icalcomponent* parent, + icalcomponent* child); + +icalerrorenum icalcluster_remove_component(icalcomponent* parent, + icalcomponent* child); + +int icalcluster_count_components(icalcomponent* component, + icalcomponent_kind kind); + +/* Iterate through components */ +icalcomponent* icalcluster_get_current_component (icalcomponent* component); + +icalcomponent* icalcluster_get_first_component(icalcomponent* component, + icalcomponent_kind kind); +icalcomponent* icalcluster_get_next_component(icalcomponent* component, + icalcomponent_kind kind); + +#endif /* !ICALCLUSTER_H */ + + + diff --git a/libical/src/libicalss/icalcomponent.h b/libical/src/libicalss/icalcomponent.h new file mode 100644 index 0000000000..9e0e9f5a9f --- /dev/null +++ b/libical/src/libicalss/icalcomponent.h @@ -0,0 +1,115 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalcomponent.h + CREATOR: eric 20 March 1999 + + + (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. + + The original author is Eric Busboom + The original code is icalcomponent.h + +======================================================================*/ + +#ifndef ICALCOMPONENT_H +#define ICALCOMPONENT_H + +#include "icalproperty.h" +#include "icalvalue.h" +#include "icalenums.h" /* defines icalcomponent_kind */ + +typedef void icalcomponent; + +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(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); + +/* Return a null-terminated array of icalproperties*/ + +icalproperty** icalcomponent_get_properties(icalcomponent* component, + icalproperty_kind kind); + + +/* + * Working with components + */ + + +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); + +/* 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); + +/* Return a null-terminated array of icalproperties*/ +icalproperty** icalcomponent_get_component(icalcomponent* component, + icalproperty_kind kind); + +/* Working with embedded error properties */ + +int icalcomponent_count_errors(icalcomponent* component); +void icalcomponent_strip_errors(icalcomponent* component); + + +/* Internal operations. You don't see these... */ +icalcomponent* icalcomponent_get_parent(icalcomponent* component); +void icalcomponent_set_parent(icalcomponent* component, + icalcomponent* parent); + +#endif /* !ICALCOMPONENT_H */ + + + diff --git a/libical/src/libicalss/icalstore.c b/libical/src/libicalss/icalstore.c new file mode 100644 index 0000000000..382464e476 --- /dev/null +++ b/libical/src/libicalss/icalstore.c @@ -0,0 +1,858 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icalstore.c + CREATOR: eric 28 November 1999 + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + + +/* + + icalstore manages a database of ical components and offers + interfaces for reading, writting and searching for components. + + icalstore groups components in to clusters based on their DTSTART + time -- all components that start in the same month are grouped + together in a single file. All files in a sotre are kept in a single + directory. ( If a component does not have DTSTART, the store uses + DTSTAMP or CREATE ) + + The primary interfaces are icalstore_first and icalstore_next. These + routine iterate through all of the components in the store, subject + to the current gauge. A gauge is an icalcomponent that is tested + against other componets for a match. If a gauge has been set with + icalstore_select, icalstore_first and icalstore_next will only + return componentes that match the gauge. + + The Store generated UIDs for all objects that are stored if they do + not already have a UID. The UID is the name of the cluster (month & + year as MMYYYY) plus a unique serial number. The serial number is + stored as a property of the cluster. + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include "ical.h" +#include "icalstore.h" +#include "pvl.h" +#include "icalerror.h" +#include "icalparser.h" +#include "icalcluster.h" + +#include <limits.h> +#include <dirent.h> /* for opendir() */ +#include <errno.h> +#include <sys/types.h> /* for opendir() */ +#include <sys/stat.h> /* for stat */ +#include <unistd.h> /* for stat, getpid */ +#include <time.h> /* for clock() */ +#include <stdlib.h> /* for rand(), srand() */ +#include <sys/utsname.h> /* for uname */ +#include <string.h> /* for strdup */ + + +struct icalstore_impl +{ + char* dir; + icalcomponent* gauge; + icalcluster* cluster; + int first_component; + pvl_list directory; + pvl_elem directory_iterator; +}; + +struct icalstore_impl* icalstore_new_impl() +{ + struct icalstore_impl* comp; + + if ( ( comp = (struct icalstore_impl*) + malloc(sizeof(struct icalstore_impl))) == 0) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + return comp; +} + +void icalstore_lock(char* dir) +{ +} + + +void icalstore_unlock(char* dir) +{ +} + +/* Load the contents of the store directory into the store's internal directory list*/ +icalerrorenum icalstore_read_directory(struct icalstore_impl* impl) +{ + struct dirent *de; + DIR* dp; + char *str; + + dp = opendir(impl->dir); + + if ( dp == 0) { + icalerror_set_errno(ICAL_FILE_ERROR); + return ICAL_FILE_ERROR; + } + + /* clear contents of directory list */ + while((str = pvl_pop(impl->directory))){ + free(str); + } + + /* load all of the cluster names in the directory list */ + for(de = readdir(dp); + de != 0; + de = readdir(dp)){ + + /* Remove known directory names '.' and '..'*/ + if (strcmp(de->d_name,".") == 0 || + strcmp(de->d_name,"..") == 0 ){ + continue; + } + + pvl_push(impl->directory, (void*)strdup(de->d_name)); + } + + closedir(dp); + + return ICAL_NO_ERROR; +} + +icalstore* icalstore_new(char* dir) +{ + struct icalstore_impl *impl = icalstore_new_impl(); + struct stat sbuf; + + if (impl == 0){ + return 0; + } + + icalerror_check_arg_rz( (dir!=0), "dir"); + + if (stat(dir,&sbuf) != 0){ + icalerror_set_errno(ICAL_FILE_ERROR); + return 0; + } + + /* dir is not the name of a direectory*/ + if (!S_ISDIR(sbuf.st_mode)){ + icalerror_set_errno(ICAL_USAGE_ERROR); + return 0; + } + + icalstore_lock(dir); + + impl = icalstore_new_impl(); + + if (impl ==0){ + icalerror_set_errno(ICAL_ALLOCATION_ERROR); + return 0; + } + + impl->directory = pvl_newlist(); + impl->directory_iterator = 0; + impl->dir = (char*)strdup(dir); + impl->gauge = 0; + impl->first_component = 0; + impl->cluster = 0; + + icalstore_read_directory(impl); + + return (icalstore*) impl; +} + +void icalstore_free(icalstore* s) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)s; + char* str; + + icalstore_unlock(impl->dir); + + if(impl->dir !=0){ + free(impl->dir); + } + + if(impl->gauge !=0){ + icalcomponent_free(impl->gauge); + } + + if(impl->cluster !=0){ + icalcluster_free(impl->cluster); + } + + while(impl->directory !=0 && (str=pvl_pop(impl->directory)) != 0){ + free(str); + } + + if(impl->directory != 0){ + pvl_free(impl->directory); + } + + impl->directory = 0; + impl->directory_iterator = 0; + impl->dir = 0; + impl->gauge = 0; + impl->first_component = 0; + + free(impl); + +} + +/* icalstore_next_uid_number updates a serial number in the Store + directory in a file called SEQUENCE */ + +int icalstore_next_uid_number(icalstore* store) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)store; + char sequence = 0; + char temp[128]; + char filename[PATH_MAX]; + char *r; + FILE *f; + struct stat sbuf; + + icalerror_check_arg_rz( (store!=0), "store"); + + sprintf(filename,"%s/%s",impl->dir,"SEQUENCE"); + + /* Create the file if it does not exist.*/ + if (stat(filename,&sbuf) == -1 || !S_ISREG(sbuf.st_mode)){ + + f = fopen(filename,"w"); + if (f != 0){ + fprintf(f,"0"); + fclose(f); + } else { + icalerror_warn("Can't create SEQUENCE file in icalstore_next_uid_number"); + return 0; + } + + } + + if ( (f = fopen(filename,"r+")) != 0){ + + rewind(f); + r = fgets(temp,128,f); + + if (r == 0){ + sequence = 1; + } else { + sequence = atoi(temp)+1; + } + + rewind(f); + + fprintf(f,"%d",sequence); + + fclose(f); + + return sequence; + + } else { + icalerror_warn("Can't create SEQUENCE file in icalstore_next_uid_number"); + return 0; + } + +} + +icalerrorenum icalstore_next_cluster(icalstore* store) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)store; + char path[PATH_MAX]; + + if (impl->directory_iterator == 0){ + icalerror_set_errno(ICAL_INTERNAL_ERROR); + return ICAL_INTERNAL_ERROR; + } + impl->directory_iterator = pvl_next(impl->directory_iterator); + + if (impl->directory_iterator == 0){ + /* There are no more clusters */ + impl->cluster = 0; + return ICAL_NO_ERROR; + } + + sprintf(path,"%s/%s",impl->dir,(char*)pvl_data(impl->directory_iterator)); + + icalcluster_free(impl->cluster); + + impl->cluster = icalcluster_new(path); + + return icalerrno; +} + +void icalstore_add_uid(icalstore* store, icalstore* comp) +{ + char uidstring[PATH_MAX]; + icalproperty *uid; + struct utsname unamebuf; + + icalerror_check_arg_rv( (store!=0), "store"); + icalerror_check_arg_rv( (comp!=0), "comp"); + + uid = icalcomponent_get_first_property(comp,ICAL_UID_PROPERTY); + + if (uid == 0) { + + uname(&unamebuf); + + sprintf(uidstring,"%d-%s",(int)getpid(),unamebuf.nodename); + + uid = icalproperty_new_uid(uidstring); + icalcomponent_add_property(comp,uid); + } else { + + strcpy(uidstring,icalproperty_get_uid(uid)); + } +} + + +/* This assumes that the top level component is a VCALENDAR, and there + is an inner component of type VEVENT, VTODO or VJOURNAL. The inner + component must have a DTSTART property */ + +icalerrorenum icalstore_add_component(icalstore* store, icalstore* comp) +{ + struct icalstore_impl *impl; + char clustername[PATH_MAX]; + icalproperty *dt, *count; + icalvalue *v; + struct icaltimetype tm; + icalerrorenum error = ICAL_NO_ERROR; + icalcomponent *inner; + + impl = (struct icalstore_impl*)store; + icalerror_check_arg_rz( (store!=0), "store"); + icalerror_check_arg_rz( (comp!=0), "comp"); + + errno = 0; + + icalstore_add_uid(store,comp); + + /* Determine which cluster this object belongs in. This is a HACK */ + + for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); + inner != 0; + inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ + + dt = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); + + if (dt != 0){ + break; + } + } + + if (dt == 0){ + icalerror_warn("The component does not have a DTSTART property, so it cannot be added to the store"); + icalerror_set_errno(ICAL_BADARG_ERROR); + return ICAL_BADARG_ERROR; + } + + v = icalproperty_get_value(dt); + + tm = icalvalue_get_datetime(v); + + snprintf(clustername,PATH_MAX,"%s/%04d%02d",impl->dir,tm.year,tm.month); + + /* Load the cluster and insert the object */ + + if(impl->cluster != 0 && + strcmp(clustername,icalcluster_path(impl->cluster)) != 0 ){ + icalcluster_free(impl->cluster); + impl->cluster = 0; + } + + if (impl->cluster == 0){ + impl->cluster = icalcluster_new(clustername); + + if (impl->cluster == 0){ + error = icalerrno; + } + } + + if (error != ICAL_NO_ERROR){ + icalerror_set_errno(error); + return error; + } + + /* Add the component to the cluster */ + + icalcluster_add_component(impl->cluster,comp); + + + /* Increment the clusters count value */ + count = icalcomponent_get_first_property( + icalcluster_get_component(impl->cluster), + ICAL_XLICCLUSTERCOUNT_PROPERTY); + + if (count == 0){ + icalerror_set_errno(ICAL_INTERNAL_ERROR); + return ICAL_INTERNAL_ERROR; + } + + icalproperty_set_xlicclustercount(count, + icalproperty_get_xlicclustercount(count)+1); + + + icalcluster_mark(impl->cluster); + + return ICAL_NO_ERROR; +} + +/* Remove a component in the current cluster */ +icalerrorenum icalstore_remove_component(icalstore* store, icalstore* comp) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)store; + icalproperty *count; + + icalerror_check_arg_re((store!=0),"store",ICAL_BADARG_ERROR); + icalerror_check_arg_re((comp!=0),"comp",ICAL_BADARG_ERROR); + icalerror_check_arg_re((impl->cluster!=0),"Cluster pointer",ICAL_USAGE_ERROR); + +/* HACK The following code should be used to ensure that the component + the caller is trying to remove is actually in the cluster, but it + resets the internal iterators, which immediately ends any loops over + the cluster the caller may have in progress + + for(c = icalcluster_get_first_component( + impl->cluster, + ICAL_ANY_COMPONENT); + c != 0; + c = icalcluster_get_next_component( + impl->cluster, + ICAL_ANY_COMPONENT)){ + + if (c == comp){ + found = 1; + } + + } + + if (found != 1){ + icalerror_warn("icalstore_remove_component: component is not part of current cluster"); + icalerror_set_errno(ICAL_USAGE_ERROR); + return ICAL_USAGE_ERROR; + } + +*/ + + icalcluster_remove_component(impl->cluster, + comp); + + icalcluster_mark(impl->cluster); + + /* Decrement the clusters count value */ + count = icalcomponent_get_first_property( + icalcluster_get_component(impl->cluster), + ICAL_XLICCLUSTERCOUNT_PROPERTY); + + if (count == 0){ + icalerror_set_errno(ICAL_INTERNAL_ERROR); + return ICAL_INTERNAL_ERROR; + } + + icalproperty_set_xlicclustercount(count, + icalproperty_get_xlicclustercount(count)-1); + + return ICAL_NO_ERROR; +} + +/* Convert a VQUERY component into a gauge */ +icalcomponent* icalstore_make_gauge(icalcomponent* query); + +/* icalstore_test compares a component against a gauge, and returns + true if the component passes the test + + The gauge is a VCALENDAR component that specifies how to test the + target components. The guage holds a collection of VEVENT, VTODO or + VJOURNAL sub-components. Each of the sub-components has a + collection of properties that are compared to corresponding + properties in the target component, according to the + X-LIC-COMPARETYPE parameters to the gauge's properties. + + When a gauge has several sub-components, the results of testing the + target against each of them is ORed together - the target + component will pass if it matches any of the sub-components in the + gauge. However, the results of matching the proeprties in a + sub-component are ANDed -- the target must match every property in + a gauge sub-component to match the sub-component. + + Here is an example: + + BEGIN:XROOT + BEGIN:VCOMPONENT + BEGIN:VEVENT + DTSTART;X-LIC-COMPARETYPE=LESS:19981025T020000 + ORGANIZER;X-LIC-COMPARETYPE=EQUAL:mrbig@host.com + END:VEVENT + BEGIN:VEVENT + LOCATION;X-LIC-COMPARETYPE=EQUAL:McNary's Pub + END:VEVENT + END:VCALENDAR + END:XROOT + + This gauge has two sub-components; one which will match a VEVENT + based on start time, and organizer, and another that matches based + on LOCATION. A target component will pass the test if it matched + either of the sub-components. + + */ + + +int icalstore_test_recurse(icalcomponent* comp, icalcomponent* gauge) +{ + int pass = 1,localpass = 0; + icalproperty *p; + icalcomponent *child,*subgauge; + icalcomponent_kind gaugekind, compkind; + + icalerror_check_arg_rz( (comp!=0), "comp"); + icalerror_check_arg_rz( (gauge!=0), "gauge"); + + gaugekind = icalcomponent_isa(gauge); + compkind = icalcomponent_isa(comp); + + if( ! (gaugekind == compkind || gaugekind == ICAL_ANY_COMPONENT) ){ + return 0; + } + + /* Test properties. For each property in the gauge, search through + the component for a similar property. If one is found, compare + the two properties value with the comparison specified in the + gauge with the X-LIC-COMPARETYPE parameter */ + + for(p = icalcomponent_get_first_property(gauge,ICAL_ANY_PROPERTY); + p != 0; + p = icalcomponent_get_next_property(gauge,ICAL_ANY_PROPERTY)){ + + icalproperty* targetprop; + icalparameter* compareparam; + icalparameter_xliccomparetype compare; + int rel; /* The relationship between the gauge and target values.*/ + + /* Extract the comparison type from the gauge. If there is no + comparison type, assume that it is "EQUAL" */ + + compareparam = icalproperty_get_first_parameter( + p, + ICAL_XLICCOMPARETYPE_PARAMETER); + + if (compareparam!=0){ + compare = icalparameter_get_xliccomparetype(compareparam); + } else { + compare = ICAL_XLICCOMPARETYPE_EQUAL; + } + + /* Find a property in the component that has the same type + as the gauge property. HACK -- multiples of a single + property type in the gauge will match only the first + instance in the component */ + + targetprop = icalcomponent_get_first_property(comp, + icalproperty_isa(p)); + + if(targetprop != 0){ + + /* Compare the values of the gauge property and the target + property */ + + rel = icalvalue_compare(icalproperty_get_value(p), + icalproperty_get_value(targetprop)); + + /* Now see if the comparison is equavalent to the comparison + specified in the gauge */ + + if (rel == compare){ + localpass++; + } else if (compare == ICAL_XLICCOMPARETYPE_LESSEQUAL && + ( rel == ICAL_XLICCOMPARETYPE_LESS || + rel == ICAL_XLICCOMPARETYPE_EQUAL)) { + localpass++; + } else if (compare == ICAL_XLICCOMPARETYPE_GREATEREQUAL && + ( rel == ICAL_XLICCOMPARETYPE_GREATER || + rel == ICAL_XLICCOMPARETYPE_EQUAL)) { + localpass++; + } else if (compare == ICAL_XLICCOMPARETYPE_NOTEQUAL && + ( rel == ICAL_XLICCOMPARETYPE_GREATER || + rel == ICAL_XLICCOMPARETYPE_LESS)) { + localpass++; + } else { + localpass = 0; + } + + pass = pass && (localpass>0); + } + } + + /* Test subcomponents. Look for a child component that has a + counterpart in the gauge. If one is found, recursively call + icalstore_test */ + + for(subgauge = icalcomponent_get_first_component(gauge,ICAL_ANY_COMPONENT); + subgauge != 0; + subgauge = icalcomponent_get_next_component(gauge,ICAL_ANY_COMPONENT)){ + + gaugekind = icalcomponent_isa(subgauge); + + if (gaugekind == ICAL_ANY_COMPONENT){ + child = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); + } else { + child = icalcomponent_get_first_component(comp,gaugekind); + } + + if(child !=0){ + localpass = icalstore_test_recurse(child,subgauge); + pass = pass && localpass; + } else { + pass = 0; + } + } + + return pass; +} + +/* guagecontainer is an XROOT component that holds several gauges. The + results of comparing against these gauges are ORed together in this + routine */ +int icalstore_test(icalcomponent* comp, icalcomponent* gaugecontainer) +{ + int pass = 0; + icalcomponent *gauge; + + icalerror_check_arg_rz( (comp!=0), "comp"); + icalerror_check_arg_rz( (gauge!=0), "gauge"); + + for(gauge = icalcomponent_get_first_component(gaugecontainer,ICAL_ANY_COMPONENT); + gauge != 0; + gauge = icalcomponent_get_next_component(gaugecontainer,ICAL_ANY_COMPONENT)){ + + pass += icalstore_test_recurse(comp, gauge); + } + + return pass>0; + +} + +icalcomponent* icalstore_query(icalstore* store, icalstore* query); + + +icalcomponent* icalstore_fetch(icalstore* store, char* uid) +{ + icalcomponent *gauge; + icalcomponent *old_gauge; + icalcomponent *c; + struct icalstore_impl *impl = (struct icalstore_impl*)store; + + icalerror_check_arg_rz( (store!=0), "store"); + icalerror_check_arg_rz( (uid!=0), "uid"); + + gauge = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_uid( + uid, + icalparameter_new_xliccomparetype( + ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + 0); + + old_gauge = impl->gauge; + impl->gauge = gauge; + + c= icalstore_get_first_component(store); + + impl->gauge = old_gauge; + + icalcomponent_free(gauge); + + return c; +} + + +int icalstore_has_uid(icalstore* store, char* uid) +{ + icalcomponent *c; + + icalerror_check_arg_rz( (store!=0), "store"); + icalerror_check_arg_rz( (uid!=0), "uid"); + + /* HACK. This is a temporary implementation. _has_uid should use a + database, and _fetch should use _has_uid, not the other way + around */ + c = icalstore_fetch(store,uid); + + return c!=0; + +} + + +icalerrorenum icalstore_select(icalstore* store, icalcomponent* gauge) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)store; + + icalerror_check_arg_re( (store!=0), "store",ICAL_BADARG_ERROR); + icalerror_check_arg_re( (gauge!=0), "gauge",ICAL_BADARG_ERROR); + + if (!icalcomponent_is_valid(gauge)){ + return ICAL_BADARG_ERROR; + } + + impl->gauge = gauge; + + return ICAL_NO_ERROR; +} + + + +icalcomponent* icalstore_get_first_component(icalstore* store) +{ + struct icalstore_impl *impl = (struct icalstore_impl*)store; + icalerrorenum error; + char path[PATH_MAX]; + + error = icalstore_read_directory(impl); + + if (error != ICAL_NO_ERROR){ + icalerror_set_errno(error); + return 0; + } + + impl->directory_iterator = pvl_head(impl->directory); + + if (impl->directory_iterator == 0){ + icalerror_set_errno(error); + return 0; + } + + sprintf(path,"%s/%s",impl->dir,(char*)pvl_data(impl->directory_iterator)); + + /* If the next cluster we need is different than the current cluster, + delete the current one and get a new one */ + + if(impl->cluster != 0 && strcmp(path,icalcluster_path(impl->cluster)) != 0 ){ + icalcluster_free(impl->cluster); + impl->cluster = 0; + } + + if (impl->cluster == 0){ + impl->cluster = icalcluster_new(path); + + if (impl->cluster == 0){ + error = icalerrno; + } + } + + if (error != ICAL_NO_ERROR){ + icalerror_set_errno(error); + return 0; + } + + impl->first_component = 1; + + return icalstore_get_next_component(store); +} + +icalcomponent* icalstore_get_next_component(icalstore* store) +{ + struct icalstore_impl *impl; + icalcomponent *c; + icalerrorenum error; + + icalerror_check_arg_rz( (store!=0), "store"); + + impl = (struct icalstore_impl*)store; + + if(impl->cluster == 0){ + + icalerror_warn("icalstore_get_next_component called with a NULL cluster (Caller must call icalstore_get_first_component first"); + icalerror_set_errno(ICAL_USAGE_ERROR); + return 0; + + } + + /* Set the component iterator for the following for loop */ + if (impl->first_component == 1){ + icalcluster_get_first_component( + impl->cluster, + ICAL_ANY_COMPONENT); + impl->first_component = 0; + } else { + icalcluster_get_next_component( + impl->cluster, + ICAL_ANY_COMPONENT); + } + + + while(1){ + /* Iterate through all of the objects in the cluster*/ + for( c = icalcluster_get_current_component( + impl->cluster); + c != 0; + c = icalcluster_get_next_component( + impl->cluster, + ICAL_ANY_COMPONENT)){ + + /* If there is a gauge defined and the component does not + pass the gauge, skip the rest of the loop */ + if (impl->gauge != 0 && icalstore_test(c,impl->gauge) == 0){ + continue; + } + + /* Either there is no gauge, or the component passed the + gauge, so return it*/ + + return c; + } + + /* Fell through the loop, so the component we want is not + in this cluster. Load a new cluster and try again.*/ + + error = icalstore_next_cluster(store); + + if(impl->cluster == 0 || error != ICAL_NO_ERROR){ + /* No more clusters */ + return 0; + } else { + c = icalcluster_get_first_component( + impl->cluster, + ICAL_ANY_COMPONENT); + } + } +} + + + + + + + diff --git a/libical/src/libicalss/icalstore.h b/libical/src/libicalss/icalstore.h new file mode 100644 index 0000000000..13e0a182b5 --- /dev/null +++ b/libical/src/libicalss/icalstore.h @@ -0,0 +1,78 @@ +/* -*- Mode: C -*- */ +/*====================================================================== + FILE: icalstore.h + CREATOR: eric 28 November 1999 + + + $Id$ + $Locker$ + + (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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + +======================================================================*/ + +#ifndef ICALSTORE_H +#define ICALSTORE_H + +#include "ical.h" +#include "icalerror.h" +typedef void icalstore; + +/* icalstore Routines for storing, fetching, and searching for ical + * objects in a database */ + +icalstore* icalstore_new(char* dir); + +void icalstore_free(icalstore* store); + +/* Add a new component to the store */ +icalerrorenum icalstore_add_component(icalstore* store, icalstore* comp); + +/* Remove a component from the store */ +icalerrorenum icalstore_remove_component(icalstore* store, icalstore* comp); + +/* Restrict the component returned by icalstore_first, _next to those + that pass the gauge */ +icalerrorenum icalstore_select(icalstore* store, icalcomponent* gauge); + +/* Return true if a component passes the gauge */ +int icalstore_test(icalcomponent* comp, icalcomponent* gauge); + +/* Clear the restrictions set by icalstore_select */ +void icalstore_clear(icalstore* store); + +/* Get a single component by uid */ +icalcomponent* icalstore_fetch(icalstore* store, char* uid); + +/* Return true of the store has an object with the given UID */ +int icalstore_has_uid(icalstore* store, char* uid); + +/* Return the first component in the store, or first that passes the gauge.*/ +icalcomponent* icalstore_get_first_component(icalstore* store); + +/* Return the next component in the store, or next that passes the gauge.*/ +icalcomponent* icalstore_get_next_component(icalstore* store); + + +int icalstore_next_uid_number(icalstore* store); + + +#endif /* !ICALSTORE_H */ + + + diff --git a/libical/src/pvl/Makefile b/libical/src/pvl/Makefile new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/libical/src/pvl/Makefile diff --git a/libical/src/test/.cvsignore b/libical/src/test/.cvsignore new file mode 100644 index 0000000000..6b1e8fab06 --- /dev/null +++ b/libical/src/test/.cvsignore @@ -0,0 +1,11 @@ +Makefile +usecases +copycluster +regression +icalparser +findobj +.deps +.libs +parser +storage +Makefile.in diff --git a/libical/src/test/Makefile.am b/libical/src/test/Makefile.am new file mode 100644 index 0000000000..50810f4b95 --- /dev/null +++ b/libical/src/test/Makefile.am @@ -0,0 +1,12 @@ + +noinst_PROGRAMS = usecases copycluster regression parser findobj storage + +LDADD = ../libical/libical.la ../libicalss/libicalss.la +INCLUDES = -I$(srcdir) -I$(srcdir)/../libical -I$(srcdir)/../libicalss -I../libical + +findobj_SOURCES = findobj.c +usecases_SOURCES = usecases.c +copycluster_SOURCES = copycluster.c +regression_SOURCES = regression.c +parser_SOURCES = icaltestparser.c +storage_SOURCES = storage.c
\ No newline at end of file diff --git a/libical/src/test/alice/booked/199706 b/libical/src/test/alice/booked/199706 new file mode 100644 index 0000000000..8ad5c7d8b1 --- /dev/null +++ b/libical/src/test/alice/booked/199706 @@ -0,0 +1,317 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :13 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +COMMENT + :DUKES forfeit the game +SEQUENCE + :2 +UID + :0981234-1234234-23@example.com +DTSTAMP + :19970613T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ATTENDEE + ;PARTSTAT=ACCEPTED + :Mailto:B@example.com +ORGANIZER + :MAILTO:A@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970612T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +COMMENT + :Sorry +COMMENT + : I cannot change this meeting time +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +DTSTAMP + :19970614T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970611T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=ACCEPTED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970614T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +ATTENDEE + ;PARTSTAT=DECLINED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +COMMENT + :Sorry +COMMENT + : I will be out of town at that time. +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970614T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :A@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'Mailto' +ATTENDEE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +COMMENT + :Mr. B cannot attend. It's raining. Lets cancel. +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +STATUS + :CANCELLED +DTSTAMP + :19970613T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :mailto:B@example.com +COMMENT + :You're off the hook for this meeting +UID + :calsrv.example.com-873970198738777@example.com +DTSTAMP + :19970613T193000Z +SEQUENCE + :1 +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=MONTHLY\;BYMONTHDAY=1\;UNTIL=19980901T210000Z' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970601T210000Z +DTEND + :19970601T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970526T083000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=MONTHLY\;BYMONTHDAY=1' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970601T210000Z +DTEND + :19970601T220000Z +DTSTAMP + :19970602T094000Z +LOCATION + :Conference Call +STATUS + :CONFIRMED +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR + :Parse error in property name: 'FOO' +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +REQUEST-STATUS + :2.8\;Repeating event ignored. Scheduled as a single event\;RRULE +REQUEST-STATUS + :3.0\;Invalid Property Name\;FOO +UID + :guid-1@host1.com +SEQUENCE + :0 +DTSTAMP + :19970603T094000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +UID + : guid-1-12345@host1.com +DTSTAMP + :19970603T094000 +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +UID + :acme-12345@host1.com +DTSTAMP + :19970603T094000 +LAST-MODIFIED + :20000209T060028Z +END:VEVENT +END:VCALENDAR diff --git a/libical/src/test/alice/booked/199707 b/libical/src/test/alice/booked/199707 new file mode 100644 index 0000000000..c52d27aa91 --- /dev/null +++ b/libical/src/test/alice/booked/199707 @@ -0,0 +1,701 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :19 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTART + :19970701T200000Z +DTSTAMP + :19970611T190000Z +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID + :0981234-1234234-23@example.com +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTAMP + :19970612T190000Z +DTSTART + :19970701T210000Z +DTEND + :19970701T230000Z +SEQUENCE + :1 +UID + :0981234-1234234-23@example.com +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +ATTACH + :http://www.dukes.com/ +CATEGORIES + :SPORTS EVENT +CATEGORIES + :ENTERTAINMENT +CLASS + :PRIVATE +DESCRIPTION + :MIDWAY STADIUM\nBig time game. MUST see.\nExpected duration:2 hours\n +DTEND + ;TZID=America-Chicago + :19970701T180000 +DTSTART + ;TZID=America-Chicago + :19970702T160000 +DTSTAMP + :19970614T190000Z +STATUS + :CONFIRMED +LOCATION + :http://www.midwaystadium.com/ +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter value: 'VALUE=America-Chicago' +PRIORITY + :2 +RESOURCES + :SCOREBOARD +SEQUENCE + :3 +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID + :0981234-1234234-23@example.com +RELATED-TO + :0981234-1234234-14@example.com +LAST-MODIFIED + :20000209T060027Z +BEGIN:VALARM +TRIGGER + :PT2H +ACTION + :DISPLAY +DESCRIPTION + :You should be leaving for the game now. +END:VALARM +BEGIN:VALARM +TRIGGER + :PT30M +ACTION + :AUDIO +END:VALARM +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTAMP + :19970614T190000Z +UID + :0981234-1234234-23@example.com +DTSTART + ;VALUE=DATE + :19970714 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;INTERVAL=1' +SUMMARY + : Bastille Day +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + ;CN=BIG A + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + ;CN=B + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=C + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=Hal + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=FALSE + :conf_Big@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=ROOM' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T200000Z +SUMMARY + :Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=Hal + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + ;CUTYPE=ROOM + :Mailto:Conf@example.com +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTART + :19970701T180000Z +DTEND + :19970701T190000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +DTSTAMP + :19970613T190000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTART + :19970701T190000Z +DTEND + :19970701T200000Z +SUMMARY + :Discuss the Merits of the election results +LOCATION + :Green Conference Room +UID + :calsrv.example.com-873970198738777a@example.com +SEQUENCE + :0 +DTSTAMP + :19970611T190000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTART + :19970701T160000Z +DTEND + :19970701T190000Z +DTSTAMP + :19970612T190000Z +SUMMARY + :Discuss the Merits of the election results +LOCATION + :Green Conference Room +COMMENT + :This time works much better and I think the big conference room is + too big +UID + :calsrv.example.com-873970198738777a@example.com +SEQUENCE + :0 +DTSTAMP + :19970611T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970613T190000Z +DTSTART + :19970701T160000Z +DTEND + :19970701T190000Z +SUMMARY + :Discuss the Merits of the election results - changed to meet B's schedule +LOCATION + :Green Conference Room +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +DTSTART + :19970701T180000Z +DTEND + :19970701T200000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +DTSTAMP + :19970611T190000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DECLINED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +SUMMARY + :Phone Conference +DTSTART + :19970701T180000Z +DTEND + :19970701T200000Z +DTSTAMP + :19970614T200000Z +COMMENT + :DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOURINVITATION +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :CR_Big@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=ROOM' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T203000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :2 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:B@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'STATUS=ACCEPTED' +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T203000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY' +SUMMARY + :Phone Conference +UID + :123456@example.com +SEQUENCE + :1 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :A@example.COM +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :B@example.fr +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :c@example.jp +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970613T190030Z +DTSTART + ;TZID=America-SanJose + :19970701T140000 +DTEND + ;TZID=America-SanJose + :19970701T150000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY\;INTERVAL=20\;WKST=SU\;BYDAY=TU' +RDATE + ;TZID=America-SanJose + :19970910T140000 +EXDATE + ;TZID=America-SanJose + :19970909T140000 +EXDATE + ;TZID=America-SanJose + :19971028T140000 +SUMMARY + :Weekly Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1com +RECURRENCE-ID + :19970701T210000Z +SEQUENCE + :1 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970703T210000Z +DTEND + :19970703T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970626T093000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1.com +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +RECURRENCE-ID + :19970801T210000Z +SEQUENCE + :2 +STATUS + :CANCELLED +DTSTAMP + :19970721T093000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1.com +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DTSTAMP + :19970721T103000Z +STATUS + :CANCELLED +SEQUENCE + :3 +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :4 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970715T210000Z +DTEND + :19970715T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970629T093000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :guid-1@host1.com +RECURRENCE-ID + :19970715T210000Z +SEQUENCE + :4 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;RSVP=TRUE + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970715T220000Z +DTEND + :19970715T230000Z +LOCATION + :Conference Call +COMMENT + :May we bump this by an hour? I have a conflict +DTSTAMP + :19970629T094000Z +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +END:VCALENDAR diff --git a/libical/src/test/alice/booked/199708 b/libical/src/test/alice/booked/199708 new file mode 100644 index 0000000000..2db95cabcf --- /dev/null +++ b/libical/src/test/alice/booked/199708 @@ -0,0 +1,45 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :1 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VEVENT +UID + :acme-12345@host1.com +SEQUENCE + :3 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY' +RDATE + ;VALUE=PERIOD + :19970819T210000Z/19970081T220000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +DESCRIPTION + :IETF-C&S Conference Call +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970801T210000Z +DTEND + :19970801T220000Z +RECURRENCE-ID + :19970809T210000Z +DTSTAMP + :19970726T083000 +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060028Z +END:VEVENT +END:VCALENDAR diff --git a/libical/src/test/alice/booked/199709 b/libical/src/test/alice/booked/199709 new file mode 100644 index 0000000000..30a4471bde --- /dev/null +++ b/libical/src/test/alice/booked/199709 @@ -0,0 +1,58 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :1 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VEVENT +UID + :guid-1@host1.com +RECURRENCE-ID + :19970901T210000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'THISANDFUTURE' +SEQUENCE + :3 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Discussion +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970901T210000Z +DTEND + :19970901T220000Z +LOCATION + :Building 32 +LOCATION + : Microsoft +LOCATION + : Seattle +LOCATION + : WA +DTSTAMP + :19970526T083000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +END:VCALENDAR diff --git a/libical/src/test/alice/booked/199803 b/libical/src/test/alice/booked/199803 new file mode 100644 index 0000000000..4b673d7ccc --- /dev/null +++ b/libical/src/test/alice/booked/199803 @@ -0,0 +1,241 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :7 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TU\;FREQ=WEEKLY' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +LOCATION + :The White Room +DTSTAMP + :19980301T093000Z +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :7 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TH\;FREQ=WEEKLY' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +DTSTAMP + :19980303T193000Z +LOCATION + :The Usual conference room +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :7 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TU' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +DTSTAMP + :19980303T193000Z +LOCATION + :The White Room +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :0 +RDATE + :19980304T180000Z +RDATE + :19980311T180000Z +RDATE + :19980318T180000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980304T180000Z +DTEND + :19980304T200000Z +DTSTAMP + :19980303T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :1 +RECURRENCE-ID + :19980311T180000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980311T160000Z +DTEND + :19980311T180000Z +DTSTAMP + :19980306T193000Z +LOCATION + :The Small conference room +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :2 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980315T180000Z +DTEND + :19980315T200000Z +DTSTAMP + :19980307T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :2 +RDATE + :19980304T180000Z +RDATE + :19980311T160000Z +RDATE + :19980315T180000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR + :Got a data line\, but could not find a property name or component + begin tag: 'Error! Bookmark not defined.' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980304T180000Z +DTEND + :19980304T200000Z +DTSTAMP + :19980303T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +LAST-MODIFIED + :20000209T060027Z +END:VEVENT +END:VCALENDAR diff --git a/libical/src/test/alice/incoming.ics b/libical/src/test/alice/incoming.ics new file mode 100644 index 0000000000..c25b6b11c3 --- /dev/null +++ b/libical/src/test/alice/incoming.ics @@ -0,0 +1,2164 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +METHOD + :PUBLISH +PRODID + :-//ACME/DesktopCalendar//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTART + :19970701T200000Z +DTSTAMP + :19970611T190000Z +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID + :0981234-1234234-23@example.com +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :PUBLISH +VERSION + :2.0 +PRODID + :-//ACME/DesktopCalendar//EN +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTAMP + :19970612T190000Z +DTSTART + :19970701T210000Z +DTEND + :19970701T230000Z +SEQUENCE + :1 +UID + :0981234-1234234-23@example.com +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :CANCEL +VERSION + :2.0 +PRODID + :-//ACME/DesktopCalendar//EN +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +COMMENT + :DUKES forfeit the game +SEQUENCE + :2 +UID + :0981234-1234234-23@example.com +DTSTAMP + :19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :PUBLISH +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR + :Parse error in property name: 'SCALE' +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTIMEZONE +TZID + :America-Chicago +TZURL + :http://zones.stds_r_us.net/tz/America-Chicago +BEGIN:STANDARD +DTSTART + :19671029T020000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10' +TZOFFSETFROM + :-050000 +TZOFFSETTO + :-060000 +TZNAME + :CST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART + :19870405T020000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4' +TZOFFSETFROM + :-060000 +TZOFFSETTO + :-050000 +TZNAME + :CDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +ATTACH + :http://www.dukes.com/ +CATEGORIES + :SPORTS EVENT +CATEGORIES + :ENTERTAINMENT +CLASS + :PRIVATE +DESCRIPTION + :MIDWAY STADIUM\nBig time game. MUST see.\nExpected duration:2 hours\n +DTEND + ;TZID=America-Chicago + :19970701T180000 +DTSTART + ;TZID=America-Chicago + :19970702T160000 +DTSTAMP + :19970614T190000Z +STATUS + :CONFIRMED +LOCATION + :http://www.midwaystadium.com/ +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter value: 'VALUE=America-Chicago' +PRIORITY + :2 +RESOURCES + :SCOREBOARD +SEQUENCE + :3 +SUMMARY + :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID + :0981234-1234234-23@example.com +RELATED-TO + :0981234-1234234-14@example.com +BEGIN:VALARM +TRIGGER + :PT2H +ACTION + :DISPLAY +DESCRIPTION + :You should be leaving for the game now. +END:VALARM +BEGIN:VALARM +TRIGGER + :PT30M +ACTION + :AUDIO +END:VALARM +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :PUBLISH +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :mailto:a@example.com +DTSTAMP + :19970614T190000Z +UID + :0981234-1234234-23@example.com +DTSTART + ;VALUE=DATE + :19970714 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;INTERVAL=1' +SUMMARY + : Bastille Day +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + ;CN=BIG A + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + ;CN=B + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=C + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=Hal + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=FALSE + :conf_Big@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=ROOM' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T200000Z +SUMMARY + :Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ATTENDEE + ;PARTSTAT=ACCEPTED + :Mailto:B@example.com +ORGANIZER + :MAILTO:A@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970612T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + ;CN=Hal + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + ;CUTYPE=ROOM + :Mailto:Conf@example.com +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTART + :19970701T180000Z +DTEND + :19970701T190000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +DTSTAMP + :19970613T190000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTART + :19970701T190000Z +DTEND + :19970701T200000Z +SUMMARY + :Discuss the Merits of the election results +LOCATION + :Green Conference Room +UID + :calsrv.example.com-873970198738777a@example.com +SEQUENCE + :0 +DTSTAMP + :19970611T190000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :COUNTER +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTART + :19970701T160000Z +DTEND + :19970701T190000Z +DTSTAMP + :19970612T190000Z +SUMMARY + :Discuss the Merits of the election results +LOCATION + :Green Conference Room +COMMENT + :This time works much better and I think the big conference room is + too big +UID + :calsrv.example.com-873970198738777a@example.com +SEQUENCE + :0 +DTSTAMP + :19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970613T190000Z +DTSTART + :19970701T160000Z +DTEND + :19970701T190000Z +SUMMARY + :Discuss the Merits of the election results - changed to meet B's schedule +LOCATION + :Green Conference Room +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :DECLINECOUNTER +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +COMMENT + :Sorry +COMMENT + : I cannot change this meeting time +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +DTSTAMP + :19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +DTSTART + :19970701T180000Z +DTEND + :19970701T200000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +DTSTAMP + :19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=ACCEPTED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DELEGATED + ;DELEGATED-TO="Mailto:E@example.com" + :Mailto:C@example.com +ATTENDEE + ;PARTSTAT=DECLINED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +COMMENT + :Sorry +COMMENT + : I will be out of town at that time. +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +REQUEST-STATUS + :2.0\;Success +DTSTAMP + :19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :MAILTO:A@Example.com +ATTENDEE + ;PARTSTAT=DECLINED + ;DELEGATED-FROM="Mailto:C@example.com" + :Mailto:E@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +SUMMARY + :Phone Conference +DTSTART + :19970701T180000Z +DTEND + :19970701T200000Z +DTSTAMP + :19970614T200000Z +COMMENT + :DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOURINVITATION +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :CANCEL +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :A@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'Mailto' +ATTENDEE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +COMMENT + :Mr. B cannot attend. It's raining. Lets cancel. +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :1 +STATUS + :CANCELLED +DTSTAMP + :19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :CANCEL +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :mailto:B@example.com +COMMENT + :You're off the hook for this meeting +UID + :calsrv.example.com-873970198738777@example.com +DTSTAMP + :19970613T193000Z +SEQUENCE + :1 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :CR_Big@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=ROOM' +ATTENDEE + ;ROLE=NON-PARTICIPANT + ;RSVP=FALSE + :Mailto:E@example.com +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T203000Z +SUMMARY + :Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :2 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:B@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'STATUS=ACCEPTED' +ATTENDEE + :Mailto:C@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970611T190000Z +DTSTART + :19970701T200000Z +DTEND + :19970701T203000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY' +SUMMARY + :Phone Conference +UID + :123456@example.com +SEQUENCE + :1 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +VERSION + :2.0 +METHOD + :PUBLISH +X-LIC-SENDER + :eric@busboom.org +BEGIN:VFREEBUSY +DTSTAMP + :19980101T124100Z +ORGANIZER + :MAILTO:A@Example.com +DTSTART + :19980101T124200Z +DTEND + :19980107T124200Z +FREEBUSY + :19980101T180000Z/19980101T190000Z +FREEBUSY + :19980103T020000Z/19980103T050000Z +FREEBUSY + :19980107T020000Z/19980107T050000Z +FREEBUSY + :19980113T000000Z/19980113T010000Z +FREEBUSY + :19980115T190000Z/19980115T200000Z +FREEBUSY + :19980115T220000Z/19980115T230000Z +FREEBUSY + :19980116T013000Z/19980116T043000Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VFREEBUSY +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +DTSTAMP + :19970613T190000Z +DTSTART + :19970701T080000Z +DTEND + :19970701T200000 +UID + :calsrv.example.com-873970198738777@example.com +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VFREEBUSY +ORGANIZER + :MAILTO:A@example.com +ATTENDEE + :Mailto:B@example.com +DTSTART + :19970701T080000Z +DTEND + :19970701T200000Z +UID + :calsrv.example.com-873970198738777@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as PERIOD value in FREEBUSY property. Removing entire + property: '19970701T090000Z/PT1H' +DTSTAMP + :19970613T190030Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTIMEZONE +TZID + :America-SanJose +TZURL + :http://zones.stds_r_us.net/tz/America-SanJose +BEGIN:STANDARD +DTSTART + :19671029T020000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10' +TZOFFSETFROM + :-070000 +TZOFFSETTO + :-080000 +TZNAME + :PST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART + :19870405T020000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4' +TZOFFSETFROM + :-080000 +TZOFFSETTO + :-070000 +TZNAME + :PDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :A@example.COM +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :B@example.fr +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :c@example.jp +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTAMP + :19970613T190030Z +DTSTART + ;TZID=America-SanJose + :19970701T140000 +DTEND + ;TZID=America-SanJose + :19970701T150000 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY\;INTERVAL=20\;WKST=SU\;BYDAY=TU' +RDATE + ;TZID=America-SanJose + :19970910T140000 +EXDATE + ;TZID=America-SanJose + :19970909T140000 +EXDATE + ;TZID=America-SanJose + :19971028T140000 +SUMMARY + :Weekly Phone Conference +UID + :calsrv.example.com-873970198738777@example.com +SEQUENCE + :0 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=MONTHLY\;BYMONTHDAY=1\;UNTIL=19980901T210000Z' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970601T210000Z +DTEND + :19970601T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970526T083000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1com +RECURRENCE-ID + :19970701T210000Z +SEQUENCE + :1 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970703T210000Z +DTEND + :19970703T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970626T093000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :CANCEL +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +RECURRENCE-ID + :19970801T210000Z +SEQUENCE + :2 +STATUS + :CANCELLED +DTSTAMP + :19970721T093000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :CANCEL +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +DTSTAMP + :19970721T103000Z +STATUS + :CANCELLED +SEQUENCE + :3 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +RECURRENCE-ID + :19970901T210000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'THISANDFUTURE' +SEQUENCE + :3 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Discussion +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970901T210000Z +DTEND + :19970901T220000Z +LOCATION + :Building 32 +LOCATION + : Microsoft +LOCATION + : Seattle +LOCATION + : WA +DTSTAMP + :19970526T083000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :ADD +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :4 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970715T210000Z +DTEND + :19970715T220000Z +LOCATION + :Conference Call +DTSTAMP + :19970629T093000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TU\;FREQ=WEEKLY' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +LOCATION + :The White Room +DTSTAMP + :19980301T093000Z +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :ADD +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :7 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TH\;FREQ=WEEKLY' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +DTSTAMP + :19980303T193000Z +LOCATION + :The Usual conference room +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :7 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'WKST=SU\;BYDAY=TU' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980303T210000Z +DTEND + :19980303T220000Z +DTSTAMP + :19980303T193000Z +LOCATION + :The White Room +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :0 +RDATE + :19980304T180000Z +RDATE + :19980311T180000Z +RDATE + :19980318T180000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980304T180000Z +DTEND + :19980304T200000Z +DTSTAMP + :19980303T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :1 +RECURRENCE-ID + :19980311T180000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980311T160000Z +DTEND + :19980311T180000Z +DTSTAMP + :19980306T193000Z +LOCATION + :The Small conference room +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :ADD +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :2 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980315T180000Z +DTEND + :19980315T200000Z +DTSTAMP + :19980307T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :123456789@host1.com +SEQUENCE + :2 +RDATE + :19980304T180000Z +RDATE + :19980311T160000Z +RDATE + :19980315T180000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR + :Got a data line\, but could not find a property name or component + begin tag: 'Error! Bookmark not defined.' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +SUMMARY + :Review Accounts +DTSTART + :19980304T180000Z +DTEND + :19980304T200000Z +DTSTAMP + :19980303T193000Z +LOCATION + :Conference Room A +STATUS + :CONFIRMED +END:VEVENT +BEGIN:VEVENT +X-LIC-ERROR + ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR + :Got a data line\, but could not find a property name or component + begin tag: 'Error! Bookmark not defined.' +SEQUENCE + :2 +RECURRENCE-ID + :19980311T160000Z +X-LIC-ERROR + ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR + :Got a data line\, but could not find a property name or component + begin tag: 'Error! Bookmark not defined.' +ATTENDEE + :ROLE=CHAIR;Error! Bookmark not defined. +ATTENDEE + :Error! Bookmark not defined. +SUMMARY + :Review Accounts +DTSTART + :19980311T160000Z +DTEND + :19980304T180000Z +DTSTAMP + :19980306T193000Z +LOCATION + :The Small conference room +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :COUNTER +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +RECURRENCE-ID + :19970715T210000Z +SEQUENCE + :4 +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;RSVP=TRUE + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970715T220000Z +DTEND + :19970715T230000Z +LOCATION + :Conference Call +COMMENT + :May we bump this by an hour? I have a conflict +DTSTAMP + :19970629T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :guid-1@host1.com +SEQUENCE + :0 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=MONTHLY\;BYMONTHDAY=1' +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DESCRIPTION + :IETF-C&S Conference Call +CLASS + :PUBLIC +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970601T210000Z +DTEND + :19970601T220000Z +DTSTAMP + :19970602T094000Z +LOCATION + :Conference Call +STATUS + :CONFIRMED +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR + :Parse error in property name: 'FOO' +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//RDU Software//NONSGML HandCal//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +REQUEST-STATUS + :2.8\;Repeating event ignored. Scheduled as a single event\;RRULE +REQUEST-STATUS + :3.0\;Invalid Property Name\;FOO +UID + :guid-1@host1.com +SEQUENCE + :0 +DTSTAMP + :19970603T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:C@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +DTSTART + :19970701T170000Z +DUE + :19970722T170000Z +PRIORITY + :1 +SUMMARY + :Create the requirements document +UID + :calsrv.example.com-873970198738777-00@example.com +SEQUENCE + :0 +DTSTAMP + :19970717T200000Z +STATUS + :Needs Action +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;PARTSTAT=ACCEPTED + :Mailto:B@example.com +UID + :calsrv.example.com-873970198738777-00@example.com +COMMENT + :I'll send you my input by e-mail +SEQUENCE + :0 +DTSTAMP + :19970717T203000Z +REQUEST-STATUS + :2.0\;Success +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +UID + :calsrv.example.com-873970198738777-00@example.com +SUMMARY + :Create the requirements document +PRIORITY + :1 +SEQUENCE + :0 +STATUS + :IN-PROCESS +DTSTART + :19970701T170000Z +DTSTAMP + :19970717T230000Z +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :MAILTO:A@example.com +ATTENDEE + ;PARTSTAT=IN-PROCESS + :Mailto:B@example.com +PERCENT-COMPLETE + :75 +UID + :calsrv.example.com-873970198738777-00@example.com +DTSTAMP + :19970717T233000Z +SEQUENCE + :0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :MAILTO:A@example.com +ATTENDEE + ;PARTSTAT=COMPLETED + :Mailto:D@example.com +UID + :calsrv.example.com-873970198738777-00@example.com +DTSTAMP + :19970717T233000Z +SEQUENCE + :0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + ;PARTSTAT=ACCEPTED + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;PARTSTAT=IN-PROCESS + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +DTSTART + :19970701T170000Z +DUE + :19970722T170000Z +PRIORITY + :1 +SUMMARY + :Create the requirements document +UID + :calsrv.example.com-873970198738777-00@example.com +SEQUENCE + :1 +DTSTAMP + :19970718T100000Z +STATUS + :IN-PROGRESS +PERCENT-COMPLETE + :40 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REQUEST +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + :Mailto:A@example.com +ATTENDEE + ;RSVP=TRUE + :Mailto:B@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +ATTENDEE + ;RSVP=TRUE + :Mailto:D@example.com +X-LIC-ERROR + ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR + :Can't parse parameter name: 'TYPE=INDIVIDUAL' +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=MONTHLY\;COUNT=10\;BYDAY=1FR' +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as DATE-TIME value in DTSTART property. Removing entire + property: '19980101T100000-0700' +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as DATE-TIME value in DUE property. Removing entire property: + '19980103T100000-0700' +SUMMARY + :Send Status Reports to Area Managers +UID + :calsrv.example.com-873970198738777-00@example.com +SEQUENCE + :0 +DTSTAMP + :19970717T200000Z +STATUS + :NEEDS ACTION +PRIORITY + :1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//ACME/DesktopCalendar//EN +METHOD + :REPLY +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VTODO +ATTENDEE + ;PARTSTAT=IN-PROCESS + :Mailto:B@example.com +PERCENT-COMPLETE + :75 +UID + :calsrv.example.com-873970198738777-00@example.com +DTSTAMP + :19970717T233000Z +RECURRENCE-ID + :19980101T170000Z +SEQUENCE + :1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :PUBLISH +PRODID + :-//ACME/DesktopCalendar//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VJOURNAL +DTSTART + :19971002T200000Z +ORGANIZER + :MAILTO:A@Example.com +SUMMARY + :Phone conference minutes +DESCRIPTION + :The editors meeting was held on October 1 +DESCRIPTION + : 1997. Details are in the attached document. +UID + :0981234-1234234-2410@example.com +RELATED-TO + :0981234-1234234-2402-35@example.com +ATTACH + :ftp://ftp.example.com/pub/ed/minutes100197.txt +END:VJOURNAL +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//RDU Software//NONSGML HandCal//EN +METHOD + :REFRESH +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +ATTENDEE + :Mailto:C@example.com +ATTENDEE + :Mailto:D@example.com +UID + : guid-1-12345@host1.com +DTSTAMP + :19970603T094000 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD + :REQUEST +PRODID + :-//RDU Software//NONSGML HandCal//EN +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +UID + :acme-12345@host1.com +SEQUENCE + :3 +X-LIC-ERROR + ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR + :Can't parse as RECUR value in RRULE property. Removing entire property: + 'FREQ=WEEKLY' +RDATE + ;VALUE=PERIOD + :19970819T210000Z/19970081T220000Z +ORGANIZER + :Mailto:A@example.com +ATTENDEE + ;ROLE=CHAIR + ;PARTSTAT=ACCEPTED + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +DESCRIPTION + :IETF-C&S Conference Call +SUMMARY + :IETF Calendaring Working Group Meeting +DTSTART + :19970801T210000Z +DTEND + :19970801T220000Z +RECURRENCE-ID + :19970809T210000Z +DTSTAMP + :19970726T083000 +STATUS + :CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID + :-//RDU Software//NONSGML HandCal//EN +METHOD + :REFRESH +VERSION + :2.0 +X-LIC-SENDER + :eric@busboom.org +BEGIN:VEVENT +ORGANIZER + :Mailto:A@example.com +ATTENDEE + :Mailto:B@example.com +UID + :acme-12345@host1.com +DTSTAMP + :19970603T094000 +END:VEVENT +END:VCALENDAR +END:VCALENDAR diff --git a/libical/src/test/copycluster.c b/libical/src/test/copycluster.c new file mode 100644 index 0000000000..b059130c13 --- /dev/null +++ b/libical/src/test/copycluster.c @@ -0,0 +1,113 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: copycluster.c + CREATOR: eric 15 January 2000 + + $Id$ + $Locker$ + + (C) COPYRIGHT 2000 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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + +#include <stdio.h> /* for printf */ +#include "ical.h" +#include "icalcluster.h" +#include <errno.h> +#include <string.h> /* For strerror */ +#include "icalrestriction.h" + +/* This program copies a file that holds iCal components to an other file. */ + + +void usage(char* arg0) { + printf("usage: %s cluster-file1 cluster-file2\n",arg0); +} + +int main(int c, char *argv[]){ + + icalcluster *clusterin, *clusterout; + icalcomponent *itr; + int count=0; + int tostdout = 0; + + if(c < 2 || c > 3){ + usage(argv[0]); + exit(1); + } + + if (c == 2){ + tostdout = 1; + } + + clusterin = icalcluster_new(argv[1]); + + if (clusterin == 0){ + printf("Could not open input cluster \"%s\"",argv[1]); + + exit(1); + } + + if (!tostdout){ + clusterout = icalcluster_new(argv[2]); + if (clusterout == 0){ + printf("Could not open output cluster \"%s\"\n",argv[2]); + exit(1); + } + } + + + for (itr = icalcluster_get_first_component(clusterin, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(clusterin, + ICAL_ANY_COMPONENT)){ + + icalrestriction_check(itr); + + if (itr != 0){ + + if(tostdout){ + + printf("--------------\n%s\n",icalcomponent_as_ical_string(itr)); + } else { + + icalcluster_add_component(clusterout, + icalcomponent_new_clone(itr)); + } + + count++; + + } else { + printf("Got NULL component"); + } + } + + + printf("Transfered %d components\n",count); + + icalcluster_free(clusterin); + + if (!tostdout){ + icalcluster_mark(clusterout); + icalcluster_free(clusterout); + } + + return 0; +} + diff --git a/libical/src/test/findobj.c b/libical/src/test/findobj.c new file mode 100644 index 0000000000..e7ec59169a --- /dev/null +++ b/libical/src/test/findobj.c @@ -0,0 +1,71 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: findobj.c + CREATOR: eric 11 February 2000 + + $Id$ + $Locker$ + + (C) COPYRIGHT 2000 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. + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom + + + ======================================================================*/ + +#include <stdio.h> /* for printf */ +#include "ical.h" +#include "icalcalendar.h" +#include <errno.h> +#include <string.h> /* For strerror */ +#include "icalrestriction.h" + +/* This program finds an object stored in a calendar */ + +void usage(char* arg0) { + printf("usage: %s calendar-dir uid\n",arg0); +} + +int main(int c, char *argv[]){ + + icalcalendar *cal; + icalstore *booked; + icalcomponent *itr; + + if(c < 2 || c > 3){ + usage(argv[0]); + exit(1); + } + + cal = icalcalendar_new(argv[1]); + + if(cal == 0){ + fprintf(stderr,"%s: error in opening calendar \"%s\": %s. errno is \"%s\"\n", + argv[0],argv[1],icalerror_strerror(icalerrno), + strerror(errno)); + } + + booked = icalcalendar_get_booked(cal); + + itr = icalstore_fetch(booked,argv[2]); + + + if(itr != 0){ + printf("%s",icalcomponent_as_ical_string(itr)); + } + + return 0; +} + diff --git a/libical/src/test/icaltestparser.c b/libical/src/test/icaltestparser.c new file mode 100644 index 0000000000..3f07fcd044 --- /dev/null +++ b/libical/src/test/icaltestparser.c @@ -0,0 +1,123 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: icaltestparser.c + CREATOR: eric 20 June 1999 + + $Id$ + $Locker$ + + 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. + + The original author is Eric Busboom + The original code is icaltestparser.c + + + (C) COPYRIGHT 1999 The Software Studio. + http://www.softwarestudio.org + + ======================================================================*/ + +#include <stdio.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include "ical.h" + +#include <stdlib.h> + +char str[] = "BEGIN:VCALENDAR\ +PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ +VERSION:2.0\ +BEGIN:VTIMEZONE\ +TZID:US-Eastern\ +BEGIN:STANDARD\ +DTSTART:19990404T020000\ +RDATE:19990u404xT020000\ +TZOFFSETFROM:-0500\ +TZOFFSETTO:-0400\ +END:STANDARD\ +BEGIN:DAYLIGHT\ +DTSTART:19990404T020000\ +RDATE:19990404T020000\ +TZOFFSETFROM:-0500\ +TZOFFSETTO:-0400\ +TZNAME:EDT\ +Dkjhgri:derhvnv;\ +BEGIN:dfkjh\ +END:dfdfkjh\ +END:DAYLIGHT\ +END:VTIMEZONE\ +BEGIN:VEVENT\ +GEO:Bongo\ +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\ +"; + +extern int yydebug; + +/* Have the parser fetch data from stdin */ + +char* read_stream(char *s, size_t size, void *d) +{ + char *c = fgets(s,size, (FILE*)d); + + return c; + +} + + + +int main(int argc, char* argv[]) +{ + + int lineno = 0; + char* line; + FILE* stream; + icalcomponent *c; + icalparser *parser = icalparser_new(); + + stream = fopen(argv[1],"r"); + + assert(stream != 0); + + icalparser_set_gen_data(parser,stream); + + do{ + + line = icalparser_get_line(parser,read_stream); + + c = icalparser_add_line(parser,line); + + if (c != 0){ + icalcomponent_convert_errors(c); + printf("%s",icalcomponent_as_ical_string(c)); + icalparser_claim(parser); + printf("\n---------------\n"); + icalcomponent_free(c); + } + + } while ( line != 0); + + +} diff --git a/libical/src/test/regression.c b/libical/src/test/regression.c new file mode 100644 index 0000000000..7b1606d432 --- /dev/null +++ b/libical/src/test/regression.c @@ -0,0 +1,1334 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: usecases.c + CREATOR: eric 03 April 1999 + + DESCRIPTION: + + $Id$ + $Locker$ + + (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. + + The original author is Eric Busboom + The original code is usecases.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() */ +#include "icalmemory.h" +#include "icalstore.h" +#include "icalcluster.h" +#include "icalerror.h" +#include "icalrestriction.h" +#include "icalcalendar.h" + +/* This example creates and minipulates the ical object that appears + * in rfc 2445, page 137 */ + +char str[] = "BEGIN:VCALENDAR\ +PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ +VERSION:2.0\ +BEGIN:VTIMEZONE\ +TZID:US-Eastern\ +BEGIN:STANDARD\ +DTSTART:19981025T020000\ +RDATE:19981025T020000\ +TZOFFSETFROM:-0400\ +TZOFFSETTO:-0500\ +TZNAME:EST\ +END:STANDARD\ +BEGIN:DAYLIGHT\ +DTSTART:19990404T020000\ +RDATE:19990404T020000\ +TZOFFSETFROM:-0500\ +TZOFFSETTO:-0400\ +TZNAME:EDT\ +END:DAYLIGHT\ +END:VTIMEZONE\ +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\ +BEGIN:BOOGA\ +DTSTAMP:19980309T231000Z\ +X-LIC-FOO:Booga\ +DTSTOMP:19980309T231000Z\ +UID:guid-1.host1.com\ +END:BOOGA\ +END:VCALENDAR"; + + +icalcomponent* create_simple_component() +{ + + icalcomponent* calendar; + struct icalperiodtype rtime; + + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_from_timet( time(0),0); + + rtime.end.hour++; + + + + /* Create calendar and add properties */ + calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); + + + icalcomponent_add_property( + calendar, + icalproperty_new_version("2.0") + ); + + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + return calendar; + +} + +/* Create a new component */ +icalcomponent* create_new_component() +{ + + icalcomponent* calendar; + icalcomponent* timezone; + icalcomponent* tzc; + icalcomponent* event; + struct icaltimetype atime = icaltimetype_from_timet( time(0),0); + struct icalperiodtype rtime; + icalproperty* property; + + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_from_timet( time(0),0); + + rtime.end.hour++; + + + + /* Create calendar and add properties */ + calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); + + + icalcomponent_add_property( + calendar, + icalproperty_new_version("2.0") + ); + + icalcomponent_add_property( + calendar, + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") + ); + + /* Create a timezone object and add it to the calendar */ + + timezone = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); + + icalcomponent_add_property( + timezone, + icalproperty_new_tzid("US_Eastern") + ); + + /* Add a sub-component of the timezone */ + tzc = icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); + + icalcomponent_add_property( + tzc, + icalproperty_new_dtstart(atime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_rdate(rtime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetfrom(-4.0) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetto(-5.0) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzname("EST") + ); + + icalcomponent_add_component(timezone,tzc); + + icalcomponent_add_component(calendar,timezone); + + /* Add a second subcomponent */ + tzc = icalcomponent_new(ICAL_XSTANDARD_COMPONENT); + + icalcomponent_add_property( + tzc, + icalproperty_new_dtstart(atime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_rdate(rtime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetfrom(-4.0) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetto(-5.0) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzname("EST") + ); + + icalcomponent_add_component(timezone,tzc); + + /* Add an event */ + + event = icalcomponent_new(ICAL_VEVENT_COMPONENT); + + icalcomponent_add_property( + event, + icalproperty_new_dtstamp(atime) + ); + + icalcomponent_add_property( + event, + icalproperty_new_uid("guid-1.host1.com") + ); + + /* add a property that has parameters */ + property = icalproperty_new_organizer("mrbig@host.com"); + + icalproperty_add_parameter( + property, + icalparameter_new_role(ICAL_ROLE_CHAIR) + ); + + icalcomponent_add_property(event,property); + + /* add another property that has parameters */ + property = icalproperty_new_attendee("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("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); + + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + icalcomponent_free(calendar); + + return 0; +} + + +/* Create a new component, using the va_args list */ + +icalcomponent* create_new_component_with_va_args() +{ + + icalcomponent* calendar; + struct icaltimetype atime = icaltimetype_from_timet( time(0),0); + struct icalperiodtype rtime; + + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_from_timet( time(0),0); + + rtime.end.hour++; + + calendar = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), + icalcomponent_vanew( + ICAL_VTIMEZONE_COMPONENT, + icalproperty_new_tzid("US_Eastern"), + icalcomponent_vanew( + ICAL_XDAYLIGHT_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-4.0), + icalproperty_new_tzoffsetto(-5.0), + icalproperty_new_tzname("EST"), + 0 + ), + icalcomponent_vanew( + ICAL_XSTANDARD_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-5.0), + icalproperty_new_tzoffsetto(-4.0), + icalproperty_new_tzname("EST"), + 0 + ), + 0 + ), + 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_description("Project XYZ Review Meeting"), + icalproperty_new_categories("MEETING"), + icalproperty_new_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 + ); + + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + + icalcomponent_free(calendar); + + return 0; +} + + +/* Return a list of all attendees who are required. */ + +char** get_required_attendees(icalproperty* event) +{ + icalproperty* p; + icalparameter* parameter; + + char **attendees; + int max = 10; + int c = 0; + + attendees = malloc(max * (sizeof (char *))); + + 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_ROLE_PARAMETER); + + if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) + { + attendees[c++] = strdup(icalproperty_get_attendee(p)); + + if (c >= max) { + max *= 2; + attendees = realloc(attendees, max * (sizeof (char *))); + } + + } + } + + return attendees; +} + +/* If an attendee has a PARTSTAT of NEEDSACTION or has no PARTSTAT + parameter, change it to TENTATIVE. */ + +void update_attendees(icalproperty* 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) { + + icalproperty_add_parameter( + p, + icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) + ); + + } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { + + icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER); + + icalparameter_free(parameter); + + icalproperty_add_parameter( + p, + icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) + ); + } + + } +} + + +void test_values() +{ + icalvalue *v; + icalvalue *copy; + + v = icalvalue_new_caladdress("cap://value/1"); + printf("caladdress 1: %s\n",icalvalue_get_caladdress(v)); + icalvalue_set_caladdress(v,"cap://value/2"); + printf("caladdress 2: %s\n",icalvalue_get_caladdress(v)); + printf("String: %s\n",icalvalue_as_ical_string(v)); + + copy = icalvalue_new_clone(v); + printf("Clone: %s\n",icalvalue_as_ical_string(v)); + icalvalue_free(v); + icalvalue_free(copy); + + + v = icalvalue_new_boolean(1); + printf("caladdress 1: %d\n",icalvalue_get_boolean(v)); + icalvalue_set_boolean(v,2); + printf("caladdress 2: %d\n",icalvalue_get_boolean(v)); + printf("String: %s\n",icalvalue_as_ical_string(v)); + + copy = icalvalue_new_clone(v); + printf("Clone: %s\n",icalvalue_as_ical_string(v)); + icalvalue_free(v); + icalvalue_free(copy); + + + v = icalvalue_new_date(icaltimetype_from_timet( time(0),0)); + printf("date 1: %s\n",icalvalue_as_ical_string(v)); + icalvalue_set_date(v,icaltimetype_from_timet( time(0)+3600,0)); + printf("date 2: %s\n",icalvalue_as_ical_string(v)); + + copy = icalvalue_new_clone(v); + printf("Clone: %s\n",icalvalue_as_ical_string(v)); + icalvalue_free(v); + icalvalue_free(copy); + + + v = icalvalue_new(-1); + + printf("Invalid type: %p\n",v); + + if (v!=0) icalvalue_free(v); + + + /* v = icalvalue_new_caladdress(0); + + printf("Bad string: %p\n",v); + + if (v!=0) icalvalue_free(v); */ + +} + +void test_properties() +{ + icalproperty *prop; + icalparameter *param; + + icalproperty *clone; + + 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); + + 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)); + } + + printf("Prop value: %s\n",icalproperty_get_comment(prop)); + + + printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop)); + + clone = icalproperty_new_clone(prop); + + printf("Clone:\n %s\n",icalproperty_as_ical_string(prop)); + + icalproperty_free(clone); + icalproperty_free(prop); + + prop = icalproperty_new(-1); + + printf("Invalid type: %p\n",prop); + + if (prop!=0) icalproperty_free(prop); + + /* + prop = icalproperty_new_method(0); + + printf("Bad string: %p\n",prop); + + + if (prop!=0) icalproperty_free(prop); + */ +} + +void test_parameters() +{ + icalparameter *p; + + p = icalparameter_new_cn("A Common Name"); + + printf("Common Name: %s\n",icalparameter_get_cn(p)); + + printf("As String: %s\n",icalparameter_as_ical_string(p)); + + icalparameter_free(p); +} + + +void test_components() +{ + + icalcomponent* c; + icalcomponent* child; + + c = icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), + icalproperty_vanew_comment( + "A Comment", + icalparameter_new_cn("A Common Name 1"), + 0), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_description("This is an event"), + 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), + icalproperty_vanew_xlicerror( + "This is only a test", + icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), + 0), + + 0 + ), + 0 + ); + + printf("Original Component:\n%s\n\n",icalcomponent_as_ical_string(c)); + + child = icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT); + + printf("Child Component:\n%s\n\n",icalcomponent_as_ical_string(child)); + + icalcomponent_free(c); + +} + +void test_memory() +{ + size_t bufsize = 256; + char *p; + + char S1[] = "1) When in the Course of human events, "; + char S2[] = "2) it becomes necessary for one people to dissolve the political bands which have connected them with another, "; + char S3[] = "3) and to assume among the powers of the earth, "; + char S4[] = "4) the separate and equal station to which the Laws of Nature and of Nature's God entitle them, "; + char S5[] = "5) a decent respect to the opinions of mankind requires that they "; + char S6[] = "6) should declare the causes which impel them to the separation. "; + char S7[] = "7) We hold these truths to be self-evident, "; + char S8[] = "8) that all men are created equal, "; + +/* char S9[] = "9) that they are endowed by their Creator with certain unalienable Rights, "; + char S10[] = "10) that among these are Life, Liberty, and the pursuit of Happiness. "; + char S11[] = "11) That to secure these rights, Governments are instituted among Men, "; + char S12[] = "12) deriving their just powers from the consent of the governed. "; +*/ + + + char *f, *b1, *b2, *b3, *b4, *b5, *b6, *b7, *b8; + + #define BUFSIZE 1024 + + + f = icalmemory_new_buffer(bufsize); + p = f; + b1 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b1, S1); + icalmemory_append_string(&f, &p, &bufsize, b1); + + b2 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b2, S2); + icalmemory_append_string(&f, &p, &bufsize, b2); + + b3 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b3, S3); + icalmemory_append_string(&f, &p, &bufsize, b3); + + b4 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b4, S4); + icalmemory_append_string(&f, &p, &bufsize, b4); + + b5 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b5, S5); + icalmemory_append_string(&f, &p, &bufsize, b5); + + b6 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b6, S6); + icalmemory_append_string(&f, &p, &bufsize, b6); + + b7 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b7, S7); + icalmemory_append_string(&f, &p, &bufsize, b7); + + b8 = icalmemory_tmp_buffer(BUFSIZE); + strcpy(b8, S8); + icalmemory_append_string(&f, &p, &bufsize, b8); + + + printf("1: %p %s \n",b1,b1); + printf("2: %p %s\n",b2,b2); + printf("3: %p %s\n",b3,b3); + printf("4: %p %s\n",b4,b4); + printf("5: %p %s\n",b5,b5); + printf("6: %p %s\n",b6,b6); + printf("7: %p %s\n",b7,b7); + printf("8: %p %s\n",b8,b8); + + + printf("Final: %s\n", f); + + printf("Final buffer size: %d\n",bufsize); + + free(f); + + bufsize = 4; + f = icalmemory_new_buffer(bufsize); + p = f; + + icalmemory_append_char(&f, &p, &bufsize, 'a'); + icalmemory_append_char(&f, &p, &bufsize, 'b'); + icalmemory_append_char(&f, &p, &bufsize, 'c'); + icalmemory_append_char(&f, &p, &bufsize, 'd'); + icalmemory_append_char(&f, &p, &bufsize, 'e'); + icalmemory_append_char(&f, &p, &bufsize, 'f'); + icalmemory_append_char(&f, &p, &bufsize, 'g'); + icalmemory_append_char(&f, &p, &bufsize, 'h'); + icalmemory_append_char(&f, &p, &bufsize, 'i'); + icalmemory_append_char(&f, &p, &bufsize, 'j'); + icalmemory_append_char(&f, &p, &bufsize, 'a'); + icalmemory_append_char(&f, &p, &bufsize, 'b'); + icalmemory_append_char(&f, &p, &bufsize, 'c'); + icalmemory_append_char(&f, &p, &bufsize, 'd'); + icalmemory_append_char(&f, &p, &bufsize, 'e'); + icalmemory_append_char(&f, &p, &bufsize, 'f'); + icalmemory_append_char(&f, &p, &bufsize, 'g'); + icalmemory_append_char(&f, &p, &bufsize, 'h'); + icalmemory_append_char(&f, &p, &bufsize, 'i'); + icalmemory_append_char(&f, &p, &bufsize, 'j'); + + printf("Char-by-Char buffer: %s\n", f); + +} + + +int test_store() +{ + + icalcomponent *c, *gauge; + icalerrorenum error; + icalcomponent *next, *itr; + icalcluster* cluster; + struct icalperiodtype rtime; + icalstore *s = icalstore_new("store"); + int i; + + rtime.start = icaltimetype_from_timet( time(0),0); + + cluster = icalcluster_new("clusterin.vcd"); + + if (cluster == 0){ + printf("Failed to create cluster: %s\n",icalerror_strerror(icalerrno)); + return 0; + } + +#define NUMCOMP 4 + + /* Duplicate every component in the cluster NUMCOMP times */ + + icalerror_clear_errno(); + + for (i = 1; i<NUMCOMP+1; i++){ + + /*rtime.start.month = i%12;*/ + rtime.start.month = i; + rtime.end = rtime.start; + rtime.end.hour++; + + for (itr = icalcluster_get_first_component(cluster, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(cluster, + ICAL_ANY_COMPONENT)){ + icalcomponent *clone; + icalproperty *p; + + + if(icalcomponent_isa(itr) != ICAL_VEVENT_COMPONENT){ + continue; + } + + assert(itr != 0); + + /* Change the dtstart and dtend times in the component + pointed to by Itr*/ + + clone = icalcomponent_new_clone(itr); + assert(icalerrno == ICAL_NO_ERROR); + assert(clone !=0); + + /* DTSTART*/ + p = icalcomponent_get_first_property(clone,ICAL_DTSTART_PROPERTY); + assert(icalerrno == ICAL_NO_ERROR); + + if (p == 0){ + p = icalproperty_new_dtstart(rtime.start); + icalcomponent_add_property(clone,p); + } else { + icalproperty_set_dtstart(p,rtime.start); + } + assert(icalerrno == ICAL_NO_ERROR); + + /* DTEND*/ + p = icalcomponent_get_first_property(clone,ICAL_DTEND_PROPERTY); + assert(icalerrno == ICAL_NO_ERROR); + + if (p == 0){ + p = icalproperty_new_dtstart(rtime.end); + icalcomponent_add_property(clone,p); + } else { + icalproperty_set_dtstart(p,rtime.end); + } + assert(icalerrno == ICAL_NO_ERROR); + + printf("\n----------\n%s\n---------\n",icalcomponent_as_ical_string(clone)); + + error = icalstore_add_component(s,clone); + + assert(icalerrno == ICAL_NO_ERROR); + + } + + } + + gauge = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_summary( + "Submit Income Taxes", + icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_summary( + "Bastille Day Party", + icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + 0); + +#if 0 + + + icalstore_select(s,gauge); + + for(c = icalstore_first(s); c != 0; c = icalstore_next(s)){ + + printf("Got one! (%d)\n", count++); + + if (c != 0){ + printf("%s", icalcomponent_as_ical_string(c));; + if (icalstore_store(s2,c) == 0){ + printf("Failed to write!\n"); + } + icalcomponent_free(c); + } else { + printf("Failed to get component\n"); + } + } + + + icalstore_free(s2); +#endif + + + for(c = icalstore_get_first_component(s); + c != 0; + c = next){ + + next = icalstore_get_next_component(s); + + if (c != 0){ + /*icalstore_remove_component(s,c);*/ + printf("%s", icalcomponent_as_ical_string(c));; + } else { + printf("Failed to get component\n"); + } + + + } + + icalstore_free(s); + return 0; +} + +int test_compare() +{ + icalvalue *v1, *v2; + icalcomponent *c, *gauge; + + v1 = icalvalue_new_caladdress("cap://value/1"); + v2 = icalvalue_new_clone(v1); + + printf("%d\n",icalvalue_compare(v1,v2)); + + v1 = icalvalue_new_caladdress("A"); + v2 = icalvalue_new_caladdress("B"); + + printf("%d\n",icalvalue_compare(v1,v2)); + + v1 = icalvalue_new_caladdress("B"); + v2 = icalvalue_new_caladdress("A"); + + printf("%d\n",icalvalue_compare(v1,v2)); + + v1 = icalvalue_new_integer(5); + v2 = icalvalue_new_integer(5); + + printf("%d\n",icalvalue_compare(v1,v2)); + + v1 = icalvalue_new_integer(5); + v2 = icalvalue_new_integer(10); + + printf("%d\n",icalvalue_compare(v1,v2)); + + v1 = icalvalue_new_integer(10); + v2 = icalvalue_new_integer(5); + + printf("%d\n",icalvalue_compare(v1,v2)); + + + gauge = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_comment( + "Comment", + icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + 0); + + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_comment( + "Comment", + 0), + 0); + + printf("%s",icalcomponent_as_ical_string(gauge)); + + printf("%d\n",icalstore_test(c,gauge)); + + return 0; +} + +void test_restriction() +{ + icalcomponent *comp; + struct icaltimetype atime = icaltimetype_from_timet( time(0),0); + int valid; + + struct icalperiodtype rtime; + + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_from_timet( time(0),0); + + rtime.end.hour++; + + + /* Property restrictions */ + assert(icalrestriction_get_property_restriction( + ICAL_METHOD_PUBLISH, + ICAL_VEVENT_COMPONENT, + ICAL_SEQUENCE_PROPERTY) == 5); /* ZEROORONE -> 5 */ + + assert(icalrestriction_get_property_restriction( + ICAL_METHOD_PUBLISH, + ICAL_VEVENT_COMPONENT, + ICAL_ATTACH_PROPERTY)==3); /* ZEROPLUS -> 3 */ + + assert(icalrestriction_get_property_restriction( + ICAL_METHOD_DECLINECOUNTER, + ICAL_VEVENT_COMPONENT, + ICAL_SEQUENCE_PROPERTY)==1); /* ZERO -> 1 */ + + /* Component restrictions */ + assert(icalrestriction_get_component_restriction( + ICAL_METHOD_PUBLISH, + ICAL_VJOURNAL_COMPONENT, + ICAL_X_COMPONENT) == 3); /* ZEROPLUS */ + + assert(icalrestriction_get_component_restriction( + ICAL_METHOD_CANCEL, + ICAL_VJOURNAL_COMPONENT, + ICAL_VEVENT_COMPONENT) == 1); /* ZERO */ + + comp = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), + icalproperty_new_method(ICAL_METHOD_REQUEST), + icalcomponent_vanew( + ICAL_VTIMEZONE_COMPONENT, + icalproperty_new_tzid("US_Eastern"), + icalcomponent_vanew( + ICAL_XDAYLIGHT_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-4.0), + icalproperty_new_tzoffsetto(-5.0), + icalproperty_new_tzname("EST"), + 0 + ), + icalcomponent_vanew( + ICAL_XSTANDARD_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-5.0), + icalproperty_new_tzoffsetto(-4.0), + icalproperty_new_tzname("EST"), + 0 + ), + 0 + ), + 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_description("Project XYZ Review Meeting"), + icalproperty_new_categories("MEETING"), + icalproperty_new_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 + ); + + valid = icalrestriction_check(comp); + + printf("#### %d ####\n%s\n",valid, icalcomponent_as_ical_string(comp)); + +} + +void test_calendar() +{ + icalcomponent *comp; + icalcluster *c; + icalstore *s; + icalcalendar* calendar = icalcalendar_new("calendar"); + icalerrorenum error; + struct icaltimetype atime = icaltimetype_from_timet( time(0),0); + + comp = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_description("This is an event"), + icalproperty_new_dtstart(atime), + 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), + icalproperty_vanew_xlicerror( + "This is only a test", + icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), + 0), + + 0); + + + s = icalcalendar_get_booked(calendar); + + error = icalstore_add_component(s,comp); + + assert(error == ICAL_NO_ERROR); + + c = icalcalendar_get_properties(calendar); + + error = icalcluster_add_component(c,icalcomponent_new_clone(comp)); + + assert(error == ICAL_NO_ERROR); + + icalcalendar_free(calendar); + +} + +void test_recur() +{ + icalvalue *v; + + v = icalvalue_new_from_string(ICAL_RECUR_VALUE, + "FREQ=DAILY;COUNT=5;BYDAY=MO,TU,WE,TH,FR"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + v = icalvalue_new_from_string(ICAL_RECUR_VALUE, + "FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + v = icalvalue_new_from_string(ICAL_RECUR_VALUE, + "FREQ=YEARLY;UNTIL=123456T123456;INTERVAL=2;BYMONTH=1;BYDAY=SU;BYHOUR=8,9;BYMINUTE=30"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + v = icalvalue_new_from_string(ICAL_RECUR_VALUE, + "FREQ=MONTHLY;BYDAY=-1MO,TU,WE,TH,FR"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + v = icalvalue_new_from_string(ICAL_RECUR_VALUE, + "FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU"); + + printf("%s\n",icalvalue_as_ical_string(v)); + +} + +void test_duration() +{ + + icalvalue *v; + + v = icalvalue_new_from_string(ICAL_DURATION_VALUE, + "PT8H30M"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + icalvalue_free(v); + v = icalvalue_new_from_string(ICAL_PERIOD_VALUE, + "19971015T050000Z/PT8H30M"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + icalvalue_free(v); + v = icalvalue_new_from_string(ICAL_PERIOD_VALUE, + "19971015T050000Z/19971015T060000Z"); + + printf("%s\n",icalvalue_as_ical_string(v)); + icalvalue_free(v); + + +} + + +void test_strings(){ + + icalvalue *v; + + v = icalvalue_new_text("foo;bar;bats"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + icalvalue_free(v); + + v = icalvalue_new_text("foo\\;b\nar\\;ba\tts"); + + printf("%s\n",icalvalue_as_ical_string(v)); + + icalvalue_free(v); + + +} + +void test_requeststat() +{ + icalrequeststatus s; + struct icalreqstattype st, st2; + char temp[1024]; + + s = icalenum_num_to_reqstat(2,1); + + assert(s == ICAL_2_1_FALLBACK_STATUS); + + assert(icalenum_reqstat_major(s) == 2); + assert(icalenum_reqstat_minor(s) == 1); + + printf("2.1: %s\n",icalenum_reqstat_desc(s)); + + st.code = s; + st.debug = "booga"; + st.desc = 0; + + printf("%s\n",icalreqstattype_as_string(st)); + + st.desc = " A non-standard description"; + + printf("%s\n",icalreqstattype_as_string(st)); + + + st.desc = 0; + + sprintf(temp,"%s\n",icalreqstattype_as_string(st)); + + + st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); + + printf("%d -- %d -- %s -- %s\n",icalenum_reqstat_major(st2.code), + icalenum_reqstat_minor(st2.code), + icalenum_reqstat_desc(st2.code), + st2.debug); + + st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); + printf("%s\n",icalreqstattype_as_string(st2)); + + st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;"); + printf("%s\n",icalreqstattype_as_string(st2)); + + st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values."); + printf("%s\n",icalreqstattype_as_string(st2)); + + st2 = icalreqstattype_from_string("2.1;"); + printf("%s\n",icalreqstattype_as_string(st2)); + + st2 = icalreqstattype_from_string("2.1"); + printf("%s\n",icalreqstattype_as_string(st2)); + + st2 = icalreqstattype_from_string("16.4"); + assert(st2.code == ICAL_UNKNOWN_STATUS); + + st2 = icalreqstattype_from_string("1."); + assert(st2.code == ICAL_UNKNOWN_STATUS); + +} + + +int main(int argc, char *argv[]) +{ + + + printf("\n------------Test Restriction---------------\n"); + test_restriction(); + + exit(0); + + printf("\n------------Test request status-------\n"); + test_requeststat(); + + + printf("\n------------Test strings---------------\n"); + test_strings(); + + printf("\n------------Test recur---------------\n"); + test_recur(); + + printf("\n------------Test duration---------------\n"); + test_duration(); + + printf("\n------------Test Compare---------------\n"); + test_compare(); + + printf("\n------------Test Memory---------------\n"); + test_memory(); + + printf("\n------------Test Values---------------\n"); + test_values(); + + printf("\n------------Test Parameters-----------\n"); + test_parameters(); + + printf("\n------------Test Properties-----------\n"); + test_properties(); + + printf("\n------------Test Components ----------\n"); + test_components(); + + printf("\n------------Create Components --------\n"); + create_new_component(); + + printf("\n----- Create Components with vaargs ---\n"); + create_new_component_with_va_args(); + + + + + return 0; +} + + + diff --git a/libical/src/test/storage.c b/libical/src/test/storage.c new file mode 100644 index 0000000000..f6d0dd69e5 --- /dev/null +++ b/libical/src/test/storage.c @@ -0,0 +1,460 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: usecases.c + CREATOR: eric 03 April 1999 + + DESCRIPTION: + + $Id$ + $Locker$ + + (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. + + The original author is Eric Busboom + The original code is usecases.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() */ +#include "icalmemory.h" +#include "icalstore.h" +#include "icalcluster.h" +#include "icalerror.h" +#include "icalrestriction.h" +#include "icalcalendar.h" + +/* This example creates and minipulates the ical object that appears + * in rfc 2445, page 137 */ + +char str[] = "BEGIN:VCALENDAR\n\ +PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ +VERSION:2.0\n\ +BEGIN:VTIMEZONE\n\ +TZID:US-Eastern\n\ +BEGIN:STANDARD\n\ +DTSTART:19981025T020000\n\ +RDATE:19981025T020000\n\ +TZOFFSETFROM:-0400\n\ +TZOFFSETTO:-0500\n\ +TZNAME:EST\n\ +END:STANDARD\n\ +BEGIN:DAYLIGHT\n\ +DTSTART:19990404T020000\n\ +RDATE:19990404T020000\n\ +TZOFFSETFROM:-0500\n\ +TZOFFSETTO:-0400\n\ +TZNAME:EDT\n\ +END:DAYLIGHT\n\ +END:VTIMEZONE\n\ +BEGIN:VEVENT\n\ +DTSTAMP:19980309T231000Z\n\ +UID:guid-1.host1.com\n\ +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ +DESCRIPTION:Project XYZ Review Meeting\n\ +CATEGORIES:MEETING\n\ +CLASS:PUBLIC\n\ +CREATED:19980309T130000Z\n\ +SUMMARY:XYZ Project Review\n\ +DTSTART;TZID=US-Eastern:19980312T083000\n\ +DTEND;TZID=US-Eastern:19980312T093000\n\ +LOCATION:1CP Conference Room 4350\n\ +END:VEVENT\n\ +BEGIN:BOOGA\n\ +DTSTAMP:19980309T231000Z\n\ +X-LIC-FOO:Booga\n\ +DTSTOMP:19980309T231000Z\n\ +UID:guid-1.host1.com\n\ +END:BOOGA\n\ +END:VCALENDAR"; + +char str2[] = "BEGIN:VCALENDAR\n\ +PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ +VERSION:2.0\n\ +BEGIN:VEVENT\n\ +DTSTAMP:19980309T231000Z\n\ +UID:guid-1.host1.com\n\ +ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ +ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ +DESCRIPTION:Project XYZ Review Meeting\n\ +CATEGORIES:MEETING\n\ +CLASS:PUBLIC\n\ +CREATED:19980309T130000Z\n\ +SUMMARY:XYZ Project Review\n\ +DTSTART;TZID=US-Eastern:19980312T083000\n\ +DTEND;TZID=US-Eastern:19980312T093000\n\ +LOCATION:1CP Conference Room 4350\n\ +END:VEVENT\n\ +END:VCALENDAR\n\ +"; + + +void test_cluster() +{ + icalcluster *cin, *cout; + int month = 0; + int count=0; + struct icaltimetype start, end; + icalcomponent *c,*clone, *itr; + + start = icaltimetype_from_timet( time(0),0); + end = start; + end.hour++; + + cout = icalcluster_new("clusterout.ics"); + assert(cout != 0); + + c = icalparser_parse_string(str2); + assert(c != 0); + + for(month = 1; month < 2; month++){ + icalcomponent *event; + icalproperty *dtstart, *dtend; + + cout = icalcluster_new("clusterout.ics"); + assert(cout != 0); + + start.month = month; + end.month = month; + + clone = icalcomponent_new_clone(c); + assert(clone !=0); + event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT); + assert(event != 0); + + dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); + assert(dtstart!=0); + icalproperty_set_dtstart(dtstart,start); + + dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); + assert(dtend!=0); + icalproperty_set_dtend(dtend,end); + + icalcluster_add_component(cout,clone); + icalcluster_commit(cout); + + icalcluster_free(cout); + + } + + + /* Print them out */ + + + cout = icalcluster_new("clusterout.ics"); + assert(cout != 0); + + for (itr = icalcluster_get_first_component(cout, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(cout, + ICAL_ANY_COMPONENT)){ + + icalcomponent *event; + icalproperty *dtstart, *dtend; + + count++; + + event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); + + dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); + dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); + + printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), + icalproperty_as_ical_string(dtend)); + + } + + /* Remove all of them */ + + icalcluster_free(cout); + + cout = icalcluster_new("clusterout.ics"); + assert(cout != 0); + + for (itr = icalcluster_get_first_component(cout, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(cout, + ICAL_ANY_COMPONENT)){ + + + icalcluster_remove_component(cout, itr); + } + + icalcluster_free(cout); + + + /* Print them out again */ + + cout = icalcluster_new("clusterout.ics"); + assert(cout != 0); + count =0; + + for (itr = icalcluster_get_first_component(cout, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(cout, + ICAL_ANY_COMPONENT)){ + + icalcomponent *event; + icalproperty *dtstart, *dtend; + + count++; + + event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); + + dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); + dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); + + printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), + icalproperty_as_ical_string(dtend)); + + } + + icalcluster_free(cout); + + +} + + + +int test_store() +{ + + icalcomponent *c, *gauge; + icalerrorenum error; + icalcomponent *next, *itr; + icalcluster* cluster; + struct icalperiodtype rtime; + icalstore *s = icalstore_new("store"); + int i; + + assert(s != 0); + + rtime.start = icaltimetype_from_timet( time(0),0); + + cluster = icalcluster_new("clusterout.ics"); + + assert(cluster != 0); + +#define NUMCOMP 4 + + /* Duplicate every component in the cluster NUMCOMP times */ + + icalerror_clear_errno(); + + for (i = 1; i<NUMCOMP+1; i++){ + + /*rtime.start.month = i%12;*/ + rtime.start.month = i; + rtime.end = rtime.start; + rtime.end.hour++; + + for (itr = icalcluster_get_first_component(cluster, + ICAL_ANY_COMPONENT); + itr != 0; + itr = icalcluster_get_next_component(cluster, + ICAL_ANY_COMPONENT)){ + icalcomponent *clone, *inner; + icalproperty *p; + + inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); + if (inner == 0){ + continue; + } + + /* Change the dtstart and dtend times in the component + pointed to by Itr*/ + + clone = icalcomponent_new_clone(itr); + inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); + + assert(icalerrno == ICAL_NO_ERROR); + assert(inner !=0); + + /* DTSTART*/ + p = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); + assert(icalerrno == ICAL_NO_ERROR); + + if (p == 0){ + p = icalproperty_new_dtstart(rtime.start); + icalcomponent_add_property(inner,p); + } else { + icalproperty_set_dtstart(p,rtime.start); + } + assert(icalerrno == ICAL_NO_ERROR); + + /* DTEND*/ + p = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY); + assert(icalerrno == ICAL_NO_ERROR); + + if (p == 0){ + p = icalproperty_new_dtstart(rtime.end); + icalcomponent_add_property(inner,p); + } else { + icalproperty_set_dtstart(p,rtime.end); + } + assert(icalerrno == ICAL_NO_ERROR); + + printf("\n----------\n%s\n---------\n",icalcomponent_as_ical_string(inner)); + + error = icalstore_add_component(s,inner); + + assert(icalerrno == ICAL_NO_ERROR); + + } + + } + + gauge = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_summary( + "Submit Income Taxes", + icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_summary( + "Bastille Day Party", + icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL), + 0), + 0), + 0); + +#if 0 + + + icalstore_select(s,gauge); + + for(c = icalstore_first(s); c != 0; c = icalstore_next(s)){ + + printf("Got one! (%d)\n", count++); + + if (c != 0){ + printf("%s", icalcomponent_as_ical_string(c));; + if (icalstore_store(s2,c) == 0){ + printf("Failed to write!\n"); + } + icalcomponent_free(c); + } else { + printf("Failed to get component\n"); + } + } + + + icalstore_free(s2); +#endif + + + for(c = icalstore_get_first_component(s); + c != 0; + c = next){ + + next = icalstore_get_next_component(s); + + if (c != 0){ + /*icalstore_remove_component(s,c);*/ + printf("%s", icalcomponent_as_ical_string(c));; + } else { + printf("Failed to get component\n"); + } + + + } + + icalstore_free(s); + return 0; +} + +void test_calendar() +{ + icalcomponent *comp; + icalcluster *c; + icalstore *s; + icalcalendar* calendar = icalcalendar_new("calendar"); + icalerrorenum error; + struct icaltimetype atime = icaltimetype_from_timet( time(0),0); + + comp = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_description("This is an event"), + icalproperty_new_dtstart(atime), + 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), + icalproperty_vanew_xlicerror( + "This is only a test", + icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), + 0), + + 0); + + + s = icalcalendar_get_booked(calendar); + + error = icalstore_add_component(s,comp); + + assert(error == ICAL_NO_ERROR); + + c = icalcalendar_get_properties(calendar); + + error = icalcluster_add_component(c,icalcomponent_new_clone(comp)); + + assert(error == ICAL_NO_ERROR); + + icalcalendar_free(calendar); + +} + + +int main(int argc, char *argv[]) +{ + + + printf("\n------------Test Cluster---------------\n"); + test_cluster(); + +#if 0 + + printf("\n------------Test Store---------------\n"); + test_store(); + + + + printf("\n------------Test Calendar---------------\n"); + test_calendar(); + +#endif + + return 0; +} + + + diff --git a/libical/src/test/test-component.icd b/libical/src/test/test-component.icd new file mode 100644 index 0000000000..3fe2995a83 --- /dev/null +++ b/libical/src/test/test-component.icd @@ -0,0 +1,23 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single + event;RRULE +REQUEST-STATUS:3.0;Invalid Property Name;FOO +UID:guid-1@host1.com +SEQUENCE:0 +DTSTAMP:19970603T094000Z +END:VEVENT +END:VCALENDAR +END:VCALENDAR diff --git a/libical/src/test/usecases.c b/libical/src/test/usecases.c new file mode 100644 index 0000000000..05c295197f --- /dev/null +++ b/libical/src/test/usecases.c @@ -0,0 +1,553 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: usecases.c + CREATOR: eric 03 April 1999 + + DESCRIPTION: + + $Id$ + $Locker$ + + (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. + + The original author is Eric Busboom + The original code is usecases.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() */ +#include "icalmemory.h" + +/* + + Here is the example iCal object that the examples routines in this + file will use: + + BEGIN:VCALENDAR + PRODID:-//RDU Software//NONSGML HandCal//EN + VERSION:2.0 + BEGIN:VTIMEZONE + 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 + CREATED:19980309T130000Z + SUMMARY:XYZ Project Review + DTSTART;TZID=US-Eastern:19980312T083000 + DTEND;TZID=US-Eastern:19980312T093000 + END:VEVENT + END:VCALENDAR + +*/ + +char str[] = "BEGIN:VCALENDAR\ +PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ +VERSION:2.0\ +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\ +CREATED:19980309T130000Z\ +SUMMARY:XYZ Project Review\ +DTSTART;TZID=US-Eastern:19980312T083000\ +DTEND;TZID=US-Eastern:19980312T093000\ +END:VEVENT\ +END:VCALENDAR"; + +/* 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 = icaltimetype_from_timet( time(0),0); + struct icalperiodtype rtime; + icalproperty* property; + + /* Define a time type that will use as data later. */ + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_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(strdup("2.0")) + ); + + /* Note the use of strdup() in the previous and next call. All + properties constructors for properties with value types of + TEXT will take control of the string you pass into them. Since + the string '2.0' is a static string, we need to duplicate it in + new memory before giving it to the property */ + + /* 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(strdup("-//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(strdup("guid-1.host1.com")) + ); + + /* add a property that has parameters */ + property = icalproperty_new_organizer(strdup("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(strdup("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(strdup("Project XYZ Review Meeting")) + ); + + icalcomponent_add_property( + event, + icalproperty_new_categories(strdup("MEETING")) + ); + + icalcomponent_add_property( + event, + icalproperty_new_class(strdup("PUBLIC")) + ); + + icalcomponent_add_property( + event, + icalproperty_new_created(atime) + ); + + icalcomponent_add_property( + event, + icalproperty_new_summary(strdup("XYZ Project Review")) + ); + + property = icalproperty_new_dtstart(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid(strdup("US-Eastern")) + ); + + icalcomponent_add_property(event,property); + + + property = icalproperty_new_dtend(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid(strdup("US-Eastern")) + ); + + icalcomponent_add_property(event,property); + + icalcomponent_add_property( + event, + icalproperty_new_location(strdup("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 = icaltimetype_from_timet( time(0),0); + struct icalperiodtype rtime; + + rtime.start = icaltimetype_from_timet( time(0),0); + rtime.end = icaltimetype_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(strdup("2.0")), + icalproperty_new_prodid(strdup("-//RDU Software//NONSGML HandCal//EN")), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstamp(atime), + icalproperty_new_uid(strdup("guid-1.host1.com")), + icalproperty_vanew_organizer( + strdup("mrbig@host.com"), + icalparameter_new_role(ICAL_ROLE_CHAIR), + 0 + ), + icalproperty_vanew_attendee( + strdup("employee-A@host.com"), + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), + icalparameter_new_rsvp(1), + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), + 0 + ), + icalproperty_new_description(strdup("Project XYZ Review Meeting")), + icalproperty_new_categories(strdup("MEETING")), + icalproperty_new_class(strdup("PUBLIC")), + icalproperty_new_created(atime), + icalproperty_new_summary(strdup("XYZ Project Review")), + icalproperty_vanew_dtstart( + atime, + icalparameter_new_tzid(strdup("US-Eastern")), + 0 + ), + icalproperty_vanew_dtend( + atime, + icalparameter_new_tzid(strdup("US-Eastern")), + 0 + ), + icalproperty_new_location(strdup("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; +} + + +/* Now, lets try to 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; the top level component we + created in the above two routines is a VCALENDAR */ + +char *attendees[10]; +#define MAX_ATTENDEES 10; + +char** get_required_attendees(icalcomponent* event) +{ + icalproperty* p; + icalparameter* parameter; + int c=0; + + assert(event != 0); + assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); + + /* This loop iterates over all of the ATTENDEE properties in the + event */ + + /* Yes, the iteration routines save their state in the event + struct, so the are not thread safe unless you lock the whole + event. */ + + 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 wont bother to iterate over them. */ + + 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) + { + attendees[c++] = strdup(icalproperty_get_attendee(p)); + } + } + + return attendees; +} + +/* 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( + strdup("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_PROPERTY); + param != 0; + param = icalproperty_get_next_parameter(prop,ICAL_ANY_PROPERTY)) { + + 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); + +} + + + +/* Here are some ways to work with values. */ +void test_values() +{ + icalvalue *v; + icalvalue *copy; + + v = icalvalue_new_caladdress(strdup("cap://value/1")); + printf("caladdress 1: %s\n",icalvalue_get_caladdress(v)); + + icalvalue_set_caladdress(v,strdup("cap://value/2")); + printf("caladdress 2: %s\n",icalvalue_get_caladdress(v)); + printf("String: %s\n",icalvalue_as_ical_string(v)); + + copy = icalvalue_new_clone(v); + printf("Clone: %s\n",icalvalue_as_ical_string(v)); + icalvalue_free(v); + icalvalue_free(copy); + + +} + +void test_parameters() +{ + icalparameter *p; + + p = icalparameter_new_cn("A Common Name"); + + printf("Common Name: %s\n",icalparameter_get_cn(p)); + + printf("As String: %s\n",icalparameter_as_ical_string(p)); +} + + +int main(int argc, char *argv[]) +{ + icalcomponent *c1; + icalcomponent *c2; + icalcomponent *vevent; + char **attendees; + + c1 = create_new_component(); + c2 = create_new_component_with_va_args(); + + /* Extract the VEVENT component from the component */ + + vevent = icalcomponent_get_first_component(c1,ICAL_VEVENT_COMPONENT); + + attendees = get_required_attendees(vevent); + + printf("Attendees: %s\n",attendees[0]); + + /* Now print out the component as a string. Remember that the + library retains control of the memory returned by + icalcomponent_as_ical_string. Do not sotre references to it or + try to free it. It is stored on an internal ring buffer,and the + library will eventuall reclaim it. */ + + printf("%s\n",icalcomponent_as_ical_string(c1)); + + return 0; + +} + + + diff --git a/libical/test-data/.cvsignore b/libical/test-data/.cvsignore new file mode 100644 index 0000000000..b840c21800 --- /dev/null +++ b/libical/test-data/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile
\ No newline at end of file diff --git a/libical/test-data/0 b/libical/test-data/0 new file mode 100644 index 0000000000..e30493fcc0 --- /dev/null +++ b/libical/test-data/0 @@ -0,0 +1,21 @@ +BEGIN:VCALENDAR
+PRODID:-//GNOME//NONSGML GnomeCalendar//EN
+VERSION:0.0.1
+BEGIN:VEVENT
+UID:20000216T083142-31506-500-2714-0@twitch
+SEQUENCE:0
+DTSTART:19970714T170000
+DTEND:19970715T035959
+DCREATED:19691231T160000
+LAST-MODIFIED:20000216T083142
+SUMMARY:Bastille Day Party
+STATUS:NEEDS ACTION
+CLASS:PUBLIC
+PRIORITY:0
+TRANSP:0
+X-PILOTID:0
+X-PILOTSTAT:1
+END:VEVENT
+
+END:VCALENDAR
+
diff --git a/libical/test-data/1 b/libical/test-data/1 new file mode 100644 index 0000000000..213b37d916 --- /dev/null +++ b/libical/test-data/1 @@ -0,0 +1,36 @@ +BEGIN:VCALENDAR +PRODID:"-//RDU Software//NONSGML HandCal//EN" +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:US-Eastern +BEGIN:STANDARD +DTSTART:19981025T020000 +RDATE:19981025T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19990404T020000 +RDATE:19990404T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +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 + diff --git a/libical/test-data/1.1 b/libical/test-data/1.1 new file mode 100644 index 0000000000..a7c92c33bd --- /dev/null +++ b/libical/test-data/1.1 @@ -0,0 +1,13 @@ +BEGIN:VCALENDAR +DURATION:P15DT5H0M20S +DURATION:P7W +URL;CN=John Smith:http://example.com/urivalue.html +X-SKI-TITLE;RSVP=TRUE: This is an extension property +SUMMARY:"No Property" +SUMMARY;RSVP=TRUE;RSVP=FALSE:Calendaring Interoperability Planning Meeting +SUMMARY;ALTREP=This is an xname:altrep +SUMMARY;CUTYPE=DESCRIPTION is a keyword:Xname parameter +DTEND:19990605 +DTSTART:19990605T103012 +CATEGORIES;RSVP=TRUE;RSVP=FALSE:one,two +END:VCALENDAR diff --git a/libical/test-data/2 b/libical/test-data/2 new file mode 100644 index 0000000000..50ba609ab3 --- /dev/null +++ b/libical/test-data/2 @@ -0,0 +1,22 @@ +BEGIN:VCALENDAR +METHOD:xyz +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML + My Product//EN +BEGIN:VEVENT +DTSTAMP:19970324T1200Z +SEQUENCE:0 +UID:uid3@host1.com +ORGANIZER:MAILTO:jdoe@host1.com +ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com +DTSTART:19970324T123000Z +DTEND:19970324T210000Z +CATEGORIES:MEETING,PROJECT +CLASS:PUBLIC +SUMMARY:Calendaring Interoperability Planning Meeting +DESCRIPTION:Discuss how we can test c&s interoperability\n + using iCalendar and other IETF standards. +LOCATION:LDB Lobby +ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/conf/bkgrnd.ps +END:VEVENT +END:VCALENDAR diff --git a/libical/test-data/2445.ics b/libical/test-data/2445.ics new file mode 100644 index 0000000000..1168324d88 --- /dev/null +++ b/libical/test-data/2445.ics @@ -0,0 +1,329 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +END:VEVENT +END:VCALENDAR + +BEGIN:VEVENT +UID:19970901T130000Z-123401@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970903T163000Z +DTEND:19970903T190000Z +SUMMARY:Annual Employee Review +CLASS:PRIVATE +CATEGORIES:BUSINESS,HUMAN RESOURCES +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123402@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970401T163000Z +DTEND:19970402T010000Z +SUMMARY:Laurel is in sensitivity awareness class. +CLASS:PUBLIC +CATEGORIES:BUSINESS,HUMAN RESOURCES +TRANSP:TRANSPARENT +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123403@host.com +DTSTAMP:19970901T1300Z +DTSTART:19971102 +SUMMARY:Our Blissful Anniversary +CLASS:CONFIDENTIAL +CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION +RRULE:FREQ=YEARLY +END:VEVENT + +BEGIN:VTODO +UID:19970901T130000Z-123404@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970415T133000Z +DUE:19970416T045959Z +SUMMARY:1996 Income Tax Preparation +CLASS:CONFIDENTIAL +CATEGORIES:FAMILY,FINANCE +PRIORITY:1 +STATUS:NEEDS-ACTION +END:VTODO +BEGIN:VJOURNAL +UID:19970901T130000Z-123405@host.com +DTSTAMP:19970901T1300Z +DTSTART;VALUE=DATE:19970317 +SUMMARY:Staff meeting minutes +DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa + and Bob. Aurora project plans were reviewed. There is currently + no budget reserves for this project. Lisa will escalate to + management. Next meeting on Tuesday.\n + 2. Telephone Conference: ABC Corp. sales representative called + to discuss new printer. Promised to get us a demo by Friday.\n + 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. + Is looking into a loaner car. 654-2323 (tel). +END:VJOURNAL +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTART:19971015T050000Z +DTEND:19971016T050000Z +DTSTAMP:19970901T083000Z +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTAMP:19970901T100000Z +FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, + 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M +URL:http://host2.com/pub/busy/jpublic-01.ifb +COMMENT:This iCalendar file contains busy time information for + the next three months. +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19971026T020000 +RDATE:19971026T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19971026T020000 +RDATE:19970406T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +BEGIN:DAYLIGHT +DTSTART:19990424T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19970317T133000Z +REPEAT:4 +DURATION:PT15M +ACTION:AUDIO +ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud +END:VALARM +BEGIN:VALARM +TRIGGER:-PT30M +REPEAT:2 +DURATION:PT15M +ACTION:DISPLAY +DESCRIPTION:Breakfast meeting with executive\n + team at 8:30 AM EST. +END:VALARM +BEGIN:VALARM +TRIGGER:-P2D +ACTION:EMAIL +ATTENDEE:MAILTO:john_doe@host.com +SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** +DESCRIPTION:A draft agenda needs to be sent out to the attendees + to the weekly managers meeting (MGR-LIST). Attached is a + pointer the document template for the agenda file. +ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen + da.doc +END:VALARM +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19980101T050000Z +REPEAT:23 +DURATION:PT1H +ACTION:PROCEDURE +ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- + procs/felizano.exe +END:VALARM +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:US-Eastern +BEGIN:STANDARD +DTSTART:19981025T020000 +RDATE:19981025T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19990404T020000 +RDATE:19990404T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +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 +BEGIN:VCALENDAR +METHOD:xyz +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VEVENT +DTSTAMP:19970324T1200Z +SEQUENCE:0 +UID:uid3@host1.com +ORGANIZER:MAILTO:jdoe@host1.com +ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com +DTSTART:19970324T123000Z +DTEND:19970324T210000Z +CATEGORIES:MEETING,PROJECT +CLASS:PUBLIC +SUMMARY:Calendaring Interoperability Planning Meeting +DESCRIPTION:Discuss how we can test c&s interoperability\n + using iCalendar and other IETF standards. +LOCATION:LDB Lobby +ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ + conf/bkgrnd.ps +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VTODO +DTSTAMP:19980130T134500Z +SEQUENCE:2 +UID:uid4@host1.com +ORGANIZER:MAILTO:unclesam@us.gov +ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com +DUE:19980415T235959 +STATUS:NEEDS-ACTION +SUMMARY:Submit Income Taxes +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;VALUE=DATE-TIME:19980403T120000Z +ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- + files/ssbanner.aud +REPEAT:4 +DURATION:PT1H +END:VALARM +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VJOURNAL +DTSTAMP:19970324T120000Z +UID:uid5@host1.com +ORGANIZER:MAILTO:jsmith@host.com +STATUS:DRAFT +CLASS:PUBLIC +CATEGORIES:Project Report, XYZ, Weekly Meeting +DESCRIPTION:Project xyz Review Meeting Minutes\n + Agenda\n1. Review of project version 1.0 requirements.\n2. + Definition of project processes.\n3. Review of project schedule.\n + Participants: John Smith, Jane Doe, Jim Dandy\n-It was + decided that the requirements need to be signed off by + product marketing.\n-Project processes were accepted.\n + -Project schedule needs to account for scheduled holidays + and employee vacation time. Check with HR for specific + dates.\n-New schedule will be distributed by Friday.\n- + Next weeks meeting is cancelled. No meeting until 3/23. +END:VJOURNAL +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//RDU Software//NONSGML HandCal//EN +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +END:VCALENDAR +END:VCALENDAR
\ No newline at end of file diff --git a/libical/test-data/2445.vcd b/libical/test-data/2445.vcd new file mode 100644 index 0000000000..1168324d88 --- /dev/null +++ b/libical/test-data/2445.vcd @@ -0,0 +1,329 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +END:VEVENT +END:VCALENDAR + +BEGIN:VEVENT +UID:19970901T130000Z-123401@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970903T163000Z +DTEND:19970903T190000Z +SUMMARY:Annual Employee Review +CLASS:PRIVATE +CATEGORIES:BUSINESS,HUMAN RESOURCES +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123402@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970401T163000Z +DTEND:19970402T010000Z +SUMMARY:Laurel is in sensitivity awareness class. +CLASS:PUBLIC +CATEGORIES:BUSINESS,HUMAN RESOURCES +TRANSP:TRANSPARENT +END:VEVENT + +BEGIN:VEVENT +UID:19970901T130000Z-123403@host.com +DTSTAMP:19970901T1300Z +DTSTART:19971102 +SUMMARY:Our Blissful Anniversary +CLASS:CONFIDENTIAL +CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION +RRULE:FREQ=YEARLY +END:VEVENT + +BEGIN:VTODO +UID:19970901T130000Z-123404@host.com +DTSTAMP:19970901T1300Z +DTSTART:19970415T133000Z +DUE:19970416T045959Z +SUMMARY:1996 Income Tax Preparation +CLASS:CONFIDENTIAL +CATEGORIES:FAMILY,FINANCE +PRIORITY:1 +STATUS:NEEDS-ACTION +END:VTODO +BEGIN:VJOURNAL +UID:19970901T130000Z-123405@host.com +DTSTAMP:19970901T1300Z +DTSTART;VALUE=DATE:19970317 +SUMMARY:Staff meeting minutes +DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa + and Bob. Aurora project plans were reviewed. There is currently + no budget reserves for this project. Lisa will escalate to + management. Next meeting on Tuesday.\n + 2. Telephone Conference: ABC Corp. sales representative called + to discuss new printer. Promised to get us a demo by Friday.\n + 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. + Is looking into a loaner car. 654-2323 (tel). +END:VJOURNAL +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTART:19971015T050000Z +DTEND:19971016T050000Z +DTSTAMP:19970901T083000Z +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jane_doe@host1.com +ATTENDEE:MAILTO:john_public@host2.com +DTSTAMP:19970901T100000Z +FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, + 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M +URL:http://host2.com/pub/busy/jpublic-01.ifb +COMMENT:This iCalendar file contains busy time information for + the next three months. +END:VFREEBUSY +BEGIN:VFREEBUSY +ORGANIZER:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19971026T020000 +RDATE:19971026T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19971026T020000 +RDATE:19970406T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:US--Fictitious-Eastern +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +BEGIN:DAYLIGHT +DTSTART:19990424T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19970317T133000Z +REPEAT:4 +DURATION:PT15M +ACTION:AUDIO +ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud +END:VALARM +BEGIN:VALARM +TRIGGER:-PT30M +REPEAT:2 +DURATION:PT15M +ACTION:DISPLAY +DESCRIPTION:Breakfast meeting with executive\n + team at 8:30 AM EST. +END:VALARM +BEGIN:VALARM +TRIGGER:-P2D +ACTION:EMAIL +ATTENDEE:MAILTO:john_doe@host.com +SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** +DESCRIPTION:A draft agenda needs to be sent out to the attendees + to the weekly managers meeting (MGR-LIST). Attached is a + pointer the document template for the agenda file. +ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen + da.doc +END:VALARM +BEGIN:VALARM +TRIGGER;VALUE=DATE-TIME:19980101T050000Z +REPEAT:23 +DURATION:PT1H +ACTION:PROCEDURE +ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- + procs/felizano.exe +END:VALARM +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:US-Eastern +BEGIN:STANDARD +DTSTART:19981025T020000 +RDATE:19981025T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19990404T020000 +RDATE:19990404T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +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 +BEGIN:VCALENDAR +METHOD:xyz +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VEVENT +DTSTAMP:19970324T1200Z +SEQUENCE:0 +UID:uid3@host1.com +ORGANIZER:MAILTO:jdoe@host1.com +ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com +DTSTART:19970324T123000Z +DTEND:19970324T210000Z +CATEGORIES:MEETING,PROJECT +CLASS:PUBLIC +SUMMARY:Calendaring Interoperability Planning Meeting +DESCRIPTION:Discuss how we can test c&s interoperability\n + using iCalendar and other IETF standards. +LOCATION:LDB Lobby +ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ + conf/bkgrnd.ps +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VTODO +DTSTAMP:19980130T134500Z +SEQUENCE:2 +UID:uid4@host1.com +ORGANIZER:MAILTO:unclesam@us.gov +ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com +DUE:19980415T235959 +STATUS:NEEDS-ACTION +SUMMARY:Submit Income Taxes +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;VALUE=DATE-TIME:19980403T120000Z +ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- + files/ssbanner.aud +REPEAT:4 +DURATION:PT1H +END:VALARM +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VJOURNAL +DTSTAMP:19970324T120000Z +UID:uid5@host1.com +ORGANIZER:MAILTO:jsmith@host.com +STATUS:DRAFT +CLASS:PUBLIC +CATEGORIES:Project Report, XYZ, Weekly Meeting +DESCRIPTION:Project xyz Review Meeting Minutes\n + Agenda\n1. Review of project version 1.0 requirements.\n2. + Definition of project processes.\n3. Review of project schedule.\n + Participants: John Smith, Jane Doe, Jim Dandy\n-It was + decided that the requirements need to be signed off by + product marketing.\n-Project processes were accepted.\n + -Project schedule needs to account for scheduled holidays + and employee vacation time. Check with HR for specific + dates.\n-New schedule will be distributed by Friday.\n- + Next weeks meeting is cancelled. No meeting until 3/23. +END:VJOURNAL +END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//RDU Software//NONSGML HandCal//EN +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711Z +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000Z/19980318T040000Z +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +END:VCALENDAR +END:VCALENDAR
\ No newline at end of file diff --git a/libical/test-data/2446.ics b/libical/test-data/2446.ics new file mode 100644 index 0000000000..679f6c7920 --- /dev/null +++ b/libical/test-data/2446.ics @@ -0,0 +1,1007 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +METHOD:PUBLISH +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTART:19970701T200000Z +DTSTAMP:19970611T190000Z +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID:0981234-1234234-23@example.com +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:PUBLISH +VERSION:2.0 +PRODID:-//ACME/DesktopCalendar//EN +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTAMP:19970612T190000Z +DTSTART:19970701T210000Z +DTEND:19970701T230000Z +SEQUENCE:1 +UID:0981234-1234234-23@example.com +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +VERSION:2.0 +PRODID:-//ACME/DesktopCalendar//EN +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +COMMENT:DUKES forfeit the game +SEQUENCE:2 +UID:0981234-1234234-23@example.com +DTSTAMP:19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:PUBLISH +SCALE:GREGORIAN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:America-Chicago +TZURL:http://zones.stds_r_us.net/tz/America-Chicago +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +ATTACH:http://www.dukes.com/ +CATEGORIES:SPORTS EVENT,ENTERTAINMENT +CLASS:PRIVATE +DESCRIPTION:MIDWAY STADIUM\n + Big time game. MUST see.\n + Expected duration:2 hours\n +DTEND;TZID=America-Chicago:19970701T180000 +DTSTART;TZID=America-Chicago:19970702T160000 +DTSTAMP:19970614T190000Z +STATUS:CONFIRMED +LOCATION;VALUE=URI:http://www.midwaystadium.com/ +PRIORITY:2 +RESOURCES:SCOREBOARD +SEQUENCE:3 +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID:0981234-1234234-23@example.com +RELATED-TO:0981234-1234234-14@example.com +BEGIN:VALARM +TRIGGER:-PT2H +ACTION:DISPLAY +DESCRIPTION:You should be leaving for the game now. +END:VALARM +BEGIN:VALARM +TRIGGER:-PT30M +ACTION:AUDIO +END:VALARM +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:PUBLISH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTAMP:19970614T190000Z +UID:0981234-1234234-23@example.com +DTSTART;VALUE=DATE:19970714 +RRULE:FREQ=YEARLY;INTERVAL=1 +SUMMARY: Bastille Day +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com +ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T2000000Z +SUMMARY:Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com +ORGANIZER:MAILTO:A@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970612T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE; + CUTYPE=ROOM:Mailto:Conf@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com +DTSTART:19970701T180000Z +DTEND:19970701T190000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +DTSTAMP:19970613T190000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTART:19970701T190000Z +DTEND:19970701T200000Z +SUMMARY:Discuss the Merits of the election results +LOCATION:Green Conference Room +UID:calsrv.example.com-873970198738777a@example.com +SEQUENCE:0 +DTSTAMP:19970611T190000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:COUNTER +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTART:19970701T160000Z +DTEND:19970701T190000Z +DTSTAMP:19970612T190000Z +SUMMARY:Discuss the Merits of the election results +LOCATION:Green Conference Room +COMMENT:This time works much better and I think the big conference + room is too big +UID:calsrv.example.com-873970198738777a@example.com +SEQUENCE:0 +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTAMP:19970613T190000Z +DTSTART:19970701T160000Z +DTEND:19970701T190000Z +SUMMARY:Discuss the Merits of the election results - changed to + meet B's schedule +LOCATION:Green Conference Room +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:DECLINECOUNTER +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +COMMENT:Sorry, I cannot change this meeting time +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- + TO="Mailto:E@example.com":Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- + TO="Mailto:E@example.com":Mailto:C@example.com +ATTENDEE;RSVP=TRUE; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +DTSTART:19970701T180000Z +DTEND:19970701T200000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED- + FROM="Mailto:C@example.com":Mailto:E@example.com +ATTENDEE;PARTSTAT=DELEGATED; + DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DELEGATED; + DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com +ATTENDEE;PARTSTAT=DECLINED; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +COMMENT:Sorry, I will be out of town at that time. +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DECLINED; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +SUMMARY:Phone Conference +DTSTART:19970701T180000Z +DTEND:19970701T200000Z +DTSTAMP:19970614T200000Z +COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR + INVITATION +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:CANCEL +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +COMMENT:Mr. B cannot attend. It's raining. Lets cancel. +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +STATUS:CANCELLED +DTSTAMP:19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:CANCEL +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:mailto:B@example.com +COMMENT:You're off the hook for this meeting +UID:calsrv.example.com-873970198738777@example.com +DTSTAMP:19970613T193000Z +SEQUENCE:1 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +ATTENDEE;CUTYPE=ROOM:CR_Big@example.com +ATTENDEE;ROLE=NON-PARTICIPANT; + RSVP=FALSE:Mailto:E@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T203000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:2 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:B@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:B@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T203000Z +RRULE:FREQ=WEEKLY +SUMMARY:Phone Conference +UID:123456@example.com +SEQUENCE:1 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +METHOD:PUBLISH +BEGIN:VFREEBUSY +DTSTAMP:19980101T124100Z +ORGANIZER:MAILTO:A@Example.com +DTSTART:19980101T124200Z +DTEND:19980107T124200Z +FREEBUSY:19980101T180000Z/19980101T190000Z +FREEBUSY:19980103T020000Z/19980103T050000Z +FREEBUSY:19980107T020000Z/19980107T050000Z +FREEBUSY:19980113T000000Z/19980113T010000Z +FREEBUSY:19980115T190000Z/19980115T200000Z +FREEBUSY:19980115T220000Z/19980115T230000Z +FREEBUSY:19980116T013000Z/19980116T043000Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VFREEBUSY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +DTSTAMP:19970613T190000Z +DTSTART:19970701T080000Z +DTEND:19970701T200000 +UID:calsrv.example.com-873970198738777@example.com +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:A@example.com +ATTENDEE:Mailto:B@example.com +DTSTART:19970701T080000Z +DTEND:19970701T200000Z +UID:calsrv.example.com-873970198738777@example.com +FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M +DTSTAMP:19970613T190030Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:America-SanJose +TZURL:http://zones.stds_r_us.net/tz/America-SanJose +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:A@example.COM +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:B@example.fr +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp +DTSTAMP:19970613T190030Z +DTSTART;TZID=America-SanJose:19970701T140000 +DTEND;TZID=America-SanJose:19970701T150000 +RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU +RDATE;TZID=America-SanJose:19970910T140000 +EXDATE;TZID=America-SanJose:19970909T140000 +EXDATE;TZID=America-SanJose:19971028T140000 +SUMMARY:Weekly Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +SEQUENCE:0 +RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970601T210000Z +DTEND:19970601T220000Z +LOCATION:Conference Call +DTSTAMP:19970526T083000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1com +RECURRENCE-ID:19970701T210000Z +SEQUENCE:1 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970703T210000Z +DTEND:19970703T220000Z +LOCATION:Conference Call +DTSTAMP:19970626T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +RECURRENCE-ID:19970801T210000Z +SEQUENCE:2 +STATUS:CANCELLED +DTSTAMP:19970721T093000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DTSTAMP:19970721T103000Z +STATUS:CANCELLED +SEQUENCE:3 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z +SEQUENCE:3 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Discussion +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970901T210000Z +DTEND:19970901T220000Z +LOCATION:Building 32, Microsoft, Seattle, WA +DTSTAMP:19970526T083000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:4 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970715T210000Z +DTEND:19970715T220000Z +LOCATION:Conference Call +DTSTAMP:19970629T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:0 +RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +LOCATION:The White Room +DTSTAMP:19980301T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:7 +RRULE:WKST=SU;BYDAY=TH;FREQ=WEEKLY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +DTSTAMP:19980303T193000Z +LOCATION:The Usual conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:7 +RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +DTSTAMP:19980303T193000Z +LOCATION:The White Room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:0 +RDATE:19980304T180000Z +RDATE:19980311T180000Z +RDATE:19980318T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980304T180000Z +DTEND:19980304T200000Z +DTSTAMP:19980303T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:1 +RECURRENCE-ID:19980311T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980311T160000Z +DTEND:19980311T180000Z +DTSTAMP:19980306T193000Z +LOCATION:The Small conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:2 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980315T180000Z +DTEND:19980315T200000Z +DTSTAMP:19980307T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:2 +RDATE:19980304T180000Z +RDATE:19980311T160000Z +RDATE:19980315T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980304T180000Z +DTEND:19980304T200000Z +DTSTAMP:19980303T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SEQUENCE:2 +RECURRENCE-ID:19980311T160000Z +ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980311T160000Z +DTEND:19980304T180000Z +DTSTAMP:19980306T193000Z +LOCATION:The Small conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:COUNTER +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +RECURRENCE-ID:19970715T210000Z +SEQUENCE:4 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970715T220000Z +DTEND:19970715T230000Z +LOCATION:Conference Call +COMMENT:May we bump this by an hour? I have a conflict +DTSTAMP:19970629T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +SEQUENCE:0 +RRULE:FREQ=MONTHLY;BYMONTHDAY=1 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970601T210000Z +DTEND:19970601T220000Z +DTSTAMP:19970602T094000Z +LOCATION:Conference Call +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single + event;RRULE +REQUEST-STATUS:3.0;Invalid Property Name;FOO +UID:guid-1@host1.com +SEQUENCE:0 +DTSTAMP:19970603T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DTSTART:19970701T170000Z +DUE:19970722T170000Z +PRIORITY:1 +SUMMARY:Create the requirements document +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:0 +DTSTAMP:19970717T200000Z +STATUS:Needs Action +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com +UID:calsrv.example.com-873970198738777-00@example.com +COMMENT:I'll send you my input by e-mail +SEQUENCE:0 +DTSTAMP:19970717T203000Z +REQUEST-STATUS:2.0;Success +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +UID:calsrv.example.com-873970198738777-00@example.com +SUMMARY:Create the requirements document +PRIORITY:1 +SEQUENCE:0 +STATUS:IN-PROCESS +DTSTART:19970701T170000Z +DTSTAMP:19970717T230000Z +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:MAILTO:A@example.com +ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com +PERCENT-COMPLETE:75 +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +SEQUENCE:0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:MAILTO:A@example.com +ATTENDEE;PARTSTAT=COMPLETED:Mailto:D@example.com +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +SEQUENCE:0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;PARTSTAT=IN-PROCESS;CUTYPE=INDIVIDUAL:Mailto:D@example.com +DTSTART:19970701T170000Z +DUE:19970722T170000Z +PRIORITY:1 +SUMMARY:Create the requirements document +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:1 +DTSTAMP:19970718T100000Z +STATUS:IN-PROGRESS +PERCENT-COMPLETE:40 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR +DTSTART:19980101T100000 +DUE:19980103T100000 +SUMMARY:Send Status Reports to Area Managers +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:0 +DTSTAMP:19970717T200000Z +STATUS:NEEDS ACTION +PRIORITY:1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com +PERCENT-COMPLETE:75 +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +RECURRENCE-ID:19980101T170000Z +SEQUENCE:1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:PUBLISH +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +BEGIN:VJOURNAL +DTSTART:19971002T200000Z +ORGANIZER:MAILTO:A@Example.com +SUMMARY:Phone conference minutes +DESCRIPTION:The editors meeting was held on October 1, 1997. + Details are in the attached document. +UID:0981234-1234234-2410@example.com +RELATED-TO:0981234-1234234-2402-35@example.com +ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt +END:VJOURNAL +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REFRESH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +UID: guid-1-12345@host1.com +DTSTAMP:19970603T094000 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:acme-12345@host1.com +SEQUENCE:3 +RRULE:FREQ=WEEKLY +RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +DESCRIPTION:IETF-C&S Conference Call +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970801T210000Z +DTEND:19970801T220000Z +RECURRENCE-ID:19970809T210000Z +DTSTAMP:19970726T083000 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REFRESH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +UID:acme-12345@host1.com +DTSTAMP:19970603T094000 +END:VEVENT +END:VCALENDAR +END:VCALENDAR
\ No newline at end of file diff --git a/libical/test-data/2446.vcd b/libical/test-data/2446.vcd new file mode 100644 index 0000000000..679f6c7920 --- /dev/null +++ b/libical/test-data/2446.vcd @@ -0,0 +1,1007 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +METHOD:PUBLISH +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTART:19970701T200000Z +DTSTAMP:19970611T190000Z +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID:0981234-1234234-23@example.com +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:PUBLISH +VERSION:2.0 +PRODID:-//ACME/DesktopCalendar//EN +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTAMP:19970612T190000Z +DTSTART:19970701T210000Z +DTEND:19970701T230000Z +SEQUENCE:1 +UID:0981234-1234234-23@example.com +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +VERSION:2.0 +PRODID:-//ACME/DesktopCalendar//EN +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +COMMENT:DUKES forfeit the game +SEQUENCE:2 +UID:0981234-1234234-23@example.com +DTSTAMP:19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:PUBLISH +SCALE:GREGORIAN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:America-Chicago +TZURL:http://zones.stds_r_us.net/tz/America-Chicago +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +TZNAME:CST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +TZNAME:CDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +ATTACH:http://www.dukes.com/ +CATEGORIES:SPORTS EVENT,ENTERTAINMENT +CLASS:PRIVATE +DESCRIPTION:MIDWAY STADIUM\n + Big time game. MUST see.\n + Expected duration:2 hours\n +DTEND;TZID=America-Chicago:19970701T180000 +DTSTART;TZID=America-Chicago:19970702T160000 +DTSTAMP:19970614T190000Z +STATUS:CONFIRMED +LOCATION;VALUE=URI:http://www.midwaystadium.com/ +PRIORITY:2 +RESOURCES:SCOREBOARD +SEQUENCE:3 +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +UID:0981234-1234234-23@example.com +RELATED-TO:0981234-1234234-14@example.com +BEGIN:VALARM +TRIGGER:-PT2H +ACTION:DISPLAY +DESCRIPTION:You should be leaving for the game now. +END:VALARM +BEGIN:VALARM +TRIGGER:-PT30M +ACTION:AUDIO +END:VALARM +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:PUBLISH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTAMP:19970614T190000Z +UID:0981234-1234234-23@example.com +DTSTART;VALUE=DATE:19970714 +RRULE:FREQ=YEARLY;INTERVAL=1 +SUMMARY: Bastille Day +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com +ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T2000000Z +SUMMARY:Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com +ORGANIZER:MAILTO:A@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970612T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE; + CUTYPE=ROOM:Mailto:Conf@example.com +ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com +DTSTART:19970701T180000Z +DTEND:19970701T190000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +DTSTAMP:19970613T190000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTART:19970701T190000Z +DTEND:19970701T200000Z +SUMMARY:Discuss the Merits of the election results +LOCATION:Green Conference Room +UID:calsrv.example.com-873970198738777a@example.com +SEQUENCE:0 +DTSTAMP:19970611T190000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:COUNTER +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTART:19970701T160000Z +DTEND:19970701T190000Z +DTSTAMP:19970612T190000Z +SUMMARY:Discuss the Merits of the election results +LOCATION:Green Conference Room +COMMENT:This time works much better and I think the big conference + room is too big +UID:calsrv.example.com-873970198738777a@example.com +SEQUENCE:0 +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +DTSTAMP:19970613T190000Z +DTSTART:19970701T160000Z +DTEND:19970701T190000Z +SUMMARY:Discuss the Merits of the election results - changed to + meet B's schedule +LOCATION:Green Conference Room +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:DECLINECOUNTER +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +COMMENT:Sorry, I cannot change this meeting time +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- + TO="Mailto:E@example.com":Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- + TO="Mailto:E@example.com":Mailto:C@example.com +ATTENDEE;RSVP=TRUE; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +DTSTART:19970701T180000Z +DTEND:19970701T200000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +DTSTAMP:19970611T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED- + FROM="Mailto:C@example.com":Mailto:E@example.com +ATTENDEE;PARTSTAT=DELEGATED; + DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DELEGATED; + DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com +ATTENDEE;PARTSTAT=DECLINED; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +COMMENT:Sorry, I will be out of town at that time. +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +REQUEST-STATUS:2.0;Success +DTSTAMP:19970614T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:MAILTO:A@Example.com +ATTENDEE;PARTSTAT=DECLINED; + DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +SUMMARY:Phone Conference +DTSTART:19970701T180000Z +DTEND:19970701T200000Z +DTSTAMP:19970614T200000Z +COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR + INVITATION +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:CANCEL +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +COMMENT:Mr. B cannot attend. It's raining. Lets cancel. +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:1 +STATUS:CANCELLED +DTSTAMP:19970613T190000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:CANCEL +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:mailto:B@example.com +COMMENT:You're off the hook for this meeting +UID:calsrv.example.com-873970198738777@example.com +DTSTAMP:19970613T193000Z +SEQUENCE:1 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +ATTENDEE;CUTYPE=ROOM:CR_Big@example.com +ATTENDEE;ROLE=NON-PARTICIPANT; + RSVP=FALSE:Mailto:E@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T203000Z +SUMMARY:Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:2 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:B@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:B@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com +ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +DTSTAMP:19970611T190000Z +DTSTART:19970701T200000Z +DTEND:19970701T203000Z +RRULE:FREQ=WEEKLY +SUMMARY:Phone Conference +UID:123456@example.com +SEQUENCE:1 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +METHOD:PUBLISH +BEGIN:VFREEBUSY +DTSTAMP:19980101T124100Z +ORGANIZER:MAILTO:A@Example.com +DTSTART:19980101T124200Z +DTEND:19980107T124200Z +FREEBUSY:19980101T180000Z/19980101T190000Z +FREEBUSY:19980103T020000Z/19980103T050000Z +FREEBUSY:19980107T020000Z/19980107T050000Z +FREEBUSY:19980113T000000Z/19980113T010000Z +FREEBUSY:19980115T190000Z/19980115T200000Z +FREEBUSY:19980115T220000Z/19980115T230000Z +FREEBUSY:19980116T013000Z/19980116T043000Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VFREEBUSY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +DTSTAMP:19970613T190000Z +DTSTART:19970701T080000Z +DTEND:19970701T200000 +UID:calsrv.example.com-873970198738777@example.com +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:A@example.com +ATTENDEE:Mailto:B@example.com +DTSTART:19970701T080000Z +DTEND:19970701T200000Z +UID:calsrv.example.com-873970198738777@example.com +FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M +DTSTAMP:19970613T190030Z +END:VFREEBUSY +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:America-SanJose +TZURL:http://zones.stds_r_us.net/tz/America-SanJose +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:A@example.COM +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:B@example.fr +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp +DTSTAMP:19970613T190030Z +DTSTART;TZID=America-SanJose:19970701T140000 +DTEND;TZID=America-SanJose:19970701T150000 +RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU +RDATE;TZID=America-SanJose:19970910T140000 +EXDATE;TZID=America-SanJose:19970909T140000 +EXDATE;TZID=America-SanJose:19971028T140000 +SUMMARY:Weekly Phone Conference +UID:calsrv.example.com-873970198738777@example.com +SEQUENCE:0 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +SEQUENCE:0 +RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970601T210000Z +DTEND:19970601T220000Z +LOCATION:Conference Call +DTSTAMP:19970526T083000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1com +RECURRENCE-ID:19970701T210000Z +SEQUENCE:1 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970703T210000Z +DTEND:19970703T220000Z +LOCATION:Conference Call +DTSTAMP:19970626T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +RECURRENCE-ID:19970801T210000Z +SEQUENCE:2 +STATUS:CANCELLED +DTSTAMP:19970721T093000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:CANCEL +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +DTSTAMP:19970721T103000Z +STATUS:CANCELLED +SEQUENCE:3 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z +SEQUENCE:3 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Discussion +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970901T210000Z +DTEND:19970901T220000Z +LOCATION:Building 32, Microsoft, Seattle, WA +DTSTAMP:19970526T083000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:4 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970715T210000Z +DTEND:19970715T220000Z +LOCATION:Conference Call +DTSTAMP:19970629T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:0 +RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +LOCATION:The White Room +DTSTAMP:19980301T093000Z +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:7 +RRULE:WKST=SU;BYDAY=TH;FREQ=WEEKLY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +DTSTAMP:19980303T193000Z +LOCATION:The Usual conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:7 +RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980303T210000Z +DTEND:19980303T220000Z +DTSTAMP:19980303T193000Z +LOCATION:The White Room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:0 +RDATE:19980304T180000Z +RDATE:19980311T180000Z +RDATE:19980318T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980304T180000Z +DTEND:19980304T200000Z +DTSTAMP:19980303T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:1 +RECURRENCE-ID:19980311T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980311T160000Z +DTEND:19980311T180000Z +DTSTAMP:19980306T193000Z +LOCATION:The Small conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:ADD +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:2 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980315T180000Z +DTEND:19980315T200000Z +DTSTAMP:19980307T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:123456789@host1.com +SEQUENCE:2 +RDATE:19980304T180000Z +RDATE:19980311T160000Z +RDATE:19980315T180000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980304T180000Z +DTEND:19980304T200000Z +DTSTAMP:19980303T193000Z +LOCATION:Conference Room A +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SEQUENCE:2 +RECURRENCE-ID:19980311T160000Z +ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +SUMMARY:Review Accounts +DTSTART:19980311T160000Z +DTEND:19980304T180000Z +DTSTAMP:19980306T193000Z +LOCATION:The Small conference room +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:COUNTER +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +RECURRENCE-ID:19970715T210000Z +SEQUENCE:4 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970715T220000Z +DTEND:19970715T230000Z +LOCATION:Conference Call +COMMENT:May we bump this by an hour? I have a conflict +DTSTAMP:19970629T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:guid-1@host1.com +SEQUENCE:0 +RRULE:FREQ=MONTHLY;BYMONTHDAY=1 +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DESCRIPTION:IETF-C&S Conference Call +CLASS:PUBLIC +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970601T210000Z +DTEND:19970601T220000Z +DTSTAMP:19970602T094000Z +LOCATION:Conference Call +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single + event;RRULE +REQUEST-STATUS:3.0;Invalid Property Name;FOO +UID:guid-1@host1.com +SEQUENCE:0 +DTSTAMP:19970603T094000Z +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE:Mailto:B@example.com +ATTENDEE;RSVP=TRUE:Mailto:C@example.com +ATTENDEE;RSVP=TRUE:Mailto:D@example.com +DTSTART:19970701T170000Z +DUE:19970722T170000Z +PRIORITY:1 +SUMMARY:Create the requirements document +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:0 +DTSTAMP:19970717T200000Z +STATUS:Needs Action +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com +UID:calsrv.example.com-873970198738777-00@example.com +COMMENT:I'll send you my input by e-mail +SEQUENCE:0 +DTSTAMP:19970717T203000Z +REQUEST-STATUS:2.0;Success +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +UID:calsrv.example.com-873970198738777-00@example.com +SUMMARY:Create the requirements document +PRIORITY:1 +SEQUENCE:0 +STATUS:IN-PROCESS +DTSTART:19970701T170000Z +DTSTAMP:19970717T230000Z +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:MAILTO:A@example.com +ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com +PERCENT-COMPLETE:75 +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +SEQUENCE:0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:MAILTO:A@example.com +ATTENDEE;PARTSTAT=COMPLETED:Mailto:D@example.com +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +SEQUENCE:0 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;PARTSTAT=IN-PROCESS;CUTYPE=INDIVIDUAL:Mailto:D@example.com +DTSTART:19970701T170000Z +DUE:19970722T170000Z +PRIORITY:1 +SUMMARY:Create the requirements document +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:1 +DTSTAMP:19970718T100000Z +STATUS:IN-PROGRESS +PERCENT-COMPLETE:40 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REQUEST +VERSION:2.0 +BEGIN:VTODO +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR:Mailto:A@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com +ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com +RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR +DTSTART:19980101T100000 +DUE:19980103T100000 +SUMMARY:Send Status Reports to Area Managers +UID:calsrv.example.com-873970198738777-00@example.com +SEQUENCE:0 +DTSTAMP:19970717T200000Z +STATUS:NEEDS ACTION +PRIORITY:1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//ACME/DesktopCalendar//EN +METHOD:REPLY +VERSION:2.0 +BEGIN:VTODO +ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com +PERCENT-COMPLETE:75 +UID:calsrv.example.com-873970198738777-00@example.com +DTSTAMP:19970717T233000Z +RECURRENCE-ID:19980101T170000Z +SEQUENCE:1 +END:VTODO +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:PUBLISH +PRODID:-//ACME/DesktopCalendar//EN +VERSION:2.0 +BEGIN:VJOURNAL +DTSTART:19971002T200000Z +ORGANIZER:MAILTO:A@Example.com +SUMMARY:Phone conference minutes +DESCRIPTION:The editors meeting was held on October 1, 1997. + Details are in the attached document. +UID:0981234-1234234-2410@example.com +RELATED-TO:0981234-1234234-2402-35@example.com +ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt +END:VJOURNAL +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REFRESH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +ATTENDEE:Mailto:C@example.com +ATTENDEE:Mailto:D@example.com +UID: guid-1-12345@host1.com +DTSTAMP:19970603T094000 +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +METHOD:REQUEST +PRODID:-//RDU Software//NONSGML HandCal//EN +VERSION:2.0 +BEGIN:VEVENT +UID:acme-12345@host1.com +SEQUENCE:3 +RRULE:FREQ=WEEKLY +RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z +ORGANIZER:Mailto:A@example.com +ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +DESCRIPTION:IETF-C&S Conference Call +SUMMARY:IETF Calendaring Working Group Meeting +DTSTART:19970801T210000Z +DTEND:19970801T220000Z +RECURRENCE-ID:19970809T210000Z +DTSTAMP:19970726T083000 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR +BEGIN:VCALENDAR +PRODID:-//RDU Software//NONSGML HandCal//EN +METHOD:REFRESH +VERSION:2.0 +BEGIN:VEVENT +ORGANIZER:Mailto:A@example.com +ATTENDEE:Mailto:B@example.com +UID:acme-12345@host1.com +DTSTAMP:19970603T094000 +END:VEVENT +END:VCALENDAR +END:VCALENDAR
\ No newline at end of file diff --git a/libical/test-data/3 b/libical/test-data/3 new file mode 100644 index 0000000000..008373ebfa --- /dev/null +++ b/libical/test-data/3 @@ -0,0 +1,21 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VTODO +DTSTAMP:19980130T134500Z +SEQUENCE:2 +UID:uid4@host1.com +ORGANIZER:MAILTO:unclesam@us.gov +ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com +DUE:19980415T235959 +STATUS:NEEDS-ACTION +SUMMARY:Submit Income Taxes +BEGIN:VALARM +ACTION:AUDIO +TRIGGER;VALUE=DATE-TIME:19980403T120000 +ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud +REPEAT:4 +DURATION:PT1H +END:VALARM +END:VTODO +END:VCALENDAR diff --git a/libical/test-data/4 b/libical/test-data/4 new file mode 100644 index 0000000000..59c3d6917b --- /dev/null +++ b/libical/test-data/4 @@ -0,0 +1,23 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ABC Corporation//NONSGML My Product//EN +BEGIN:VJOURNAL +DTSTAMP:19970324T120000Z +UID:uid5@host1.com +ORGANIZER:MAILTO:jsmith@host.com +STATUS:DRAFT +CLASS:PUBLIC +CATEGORIES:Project Report, XYZ: Weekly Meeting +DESCRIPTION:Project xyz Review Meeting Minutes\n + Agenda\n1. Review of project version 1.0 requirements.\n2. + Definition + of project processes.\n3. Review of project schedule.\n + Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was + decided that the requirements need to be signed off by + product marketing.\n-Project processes were accepted.\n + -Project schedule needs to account for scheduled holidays + and employee vacation time. Check with HR for specific + dates.\n-New schedule will be distributed by Friday.\n- + Next weeks meeting is cancelled. No meeting until 3/23. +END:VJOURNAL +END:VCALENDAR diff --git a/libical/test-data/5 b/libical/test-data/5 new file mode 100644 index 0000000000..ba1fd09f7f --- /dev/null +++ b/libical/test-data/5 @@ -0,0 +1,16 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//RDU Software//NONSGML HandCal//EN +BEGIN:VFREEBUSY +ORGANIZER:MAILTO:jsmith@host.com +DTSTART:19980313T141711Z +DTEND:19980410T141711 +FREEBUSY:19980314T233000Z/19980315T003000Z +FREEBUSY:19980316T153000Z/19980316T163000Z +FREEBUSY:19980318T030000/19980318T040000,19980318T030000/19980318T040000 +URL:http://www.host.com/calendar/busytime/jsmith.ifb +END:VFREEBUSY +END:VCALENDAR + + + diff --git a/libical/test-data/6 b/libical/test-data/6 new file mode 100644 index 0000000000..e0214b5021 --- /dev/null +++ b/libical/test-data/6 @@ -0,0 +1,21 @@ +BEGIN:VCALENDAR
+PRODID:-//GNOME//NONSGML GnomeCalendar//EN
+VERSION:0.0.1
+BEGIN:VEVENT
+UID:0981234-1234234-23@example.com
+SEQUENCE:0
+DTSTART:19970701T200000
+DTEND:19691231T160000
+DCREATED:19691231T160000
+LAST-MODIFIED:20000216T083225
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+STATUS:NEEDS ACTION
+CLASS:PUBLIC
+PRIORITY:0
+TRANSP:0
+X-PILOTID:0
+X-PILOTSTAT:1
+END:VEVENT
+
+END:VCALENDAR
+
diff --git a/libical/test-data/7 b/libical/test-data/7 new file mode 100644 index 0000000000..0a255fc514 --- /dev/null +++ b/libical/test-data/7 @@ -0,0 +1,14 @@ +BEGIN:VCALENDAR +METHOD:PUBLISH +VERSION:2.0 +PRODID:-//ACME/DesktopCalendar//EN +BEGIN:VEVENT +ORGANIZER:mailto:a@example.com +DTSTAMP:19970612T190000Z +DTSTART:19970701T210000Z +DTEND:19970701T230000Z +SEQUENCE:1 +UID:0981234-1234234-23@example.com +SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES +END:VEVENT +END:VCALENDAR diff --git a/libical/test-data/Makefile.am b/libical/test-data/Makefile.am new file mode 100644 index 0000000000..bf2079606c --- /dev/null +++ b/libical/test-data/Makefile.am @@ -0,0 +1,13 @@ +EXTRA_DIST = \ +0 \ +1 \ +1.1 \ +2 \ +2445.ics \ +2446.ics \ +3 \ +4 \ +5 \ +6 \ +7 \ +smallcluster.ics
\ No newline at end of file diff --git a/libical/test-data/smallcluster.ics b/libical/test-data/smallcluster.ics new file mode 100644 index 0000000000..c4e2dbae50 --- /dev/null +++ b/libical/test-data/smallcluster.ics @@ -0,0 +1,18 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +RRULE:FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2,-3,4,-5,6,-7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54;BYSECOND=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26 +END:VEVENT +END:VCALENDAR +END:VCALENDAR diff --git a/libical/test-data/smallcluster.vcd b/libical/test-data/smallcluster.vcd new file mode 100644 index 0000000000..c4e2dbae50 --- /dev/null +++ b/libical/test-data/smallcluster.vcd @@ -0,0 +1,18 @@ +BEGIN:VCALENDAR +X-LIC-CLUSTERCOUNT + :0 +DTSTART + :00000000T000000 +DTEND + :00000000T000000 +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +DTSTART:19970714T170000Z +DTEND:19970715T035959Z +SUMMARY:Bastille Day Party +RRULE:FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2,-3,4,-5,6,-7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54;BYSECOND=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26 +END:VEVENT +END:VCALENDAR +END:VCALENDAR |