pax_global_header00006660000000000000000000000064126403265250014517gustar00rootroot0000000000000052 comment=6c4af23b0a95fd105f38e879908cbc80390f3716 libical-2.0.0/000077500000000000000000000000001264032652500131155ustar00rootroot00000000000000libical-2.0.0/.dir-locals.el000066400000000000000000000001741264032652500155500ustar00rootroot00000000000000;; -*- emacs-lisp -*- ((c-mode . ((c-basic-offset . 4) (indent-tabs-mode . nil) (tab-width . 4)))) libical-2.0.0/.gitignore000066400000000000000000000000301264032652500150760ustar00rootroot00000000000000*.kdev4 *~ *.rej *.orig libical-2.0.0/.krazy000066400000000000000000000012551264032652500142610ustar00rootroot00000000000000CHECKSETS foss,c++ EXCLUDE dpointer EXTRA crud,camelcase EXTRA style #Skip foo_export.h SKIP libical_.*_export\.h #Skip examples SKIP /examples/ #For now skip java SKIP /java/ #For now skip python SKIP /python/ #For now skip perl SKIP /Net-ICal-Libical/ #Skip ancient Apple files SKIP /src/libicalvcal/port\.h SKIP /src/libicalvcal/vcaltmp\. SKIP /src/libicalvcal/vcc\. SKIP /src/libicalvcal/vobject\. #Skip contributed files SKIP /src/libical/astime\.h SKIP /src/libical/caldate\.c SKIP /cmake/modules/GObjectIntrospectionMacros\.cmake|/cmake/modules/FindGObjectIntrospection\.cmake SKIP /doc/Doxyfile\.cmake SKIP /iOS\.cmake #Skip zoneinfo SKIP /zoneinfo/ STYLE_LINEMAX 100 libical-2.0.0/.travis.yml000066400000000000000000000013461264032652500152320ustar00rootroot00000000000000env: global: - secure: "NlWO/NTPlOU6cowOMuPOvjAprXVwIjmpHHf9CoMR71E2c/eBFFKIHj10kXuyFwz2KihHAIExmo9OlGtGniNWobvIrVrabO3dsOSb6UGbPAQkzQiyQLKsDNQAZx3nMuWEKBtMsVRee6rd7/2uGTY4WB5Ot3VhrUYcN1FoRgQQ9gk=" os: - linux - osx before_install: ./scripts/setup-travis.sh language: c compiler: - gcc - clang script: mkdir build && cd build && cmake -DWITH_BDB=true -DCMAKE_BUILD_TYPE=Release .. && make && make test addons: coverity_scan: project: name: libical/libical description: "Libical is an Open Source implementation of the iCalendar protocols and protocol data units." notification_email: allen.winter@kdab.com build_command_prepend: cd build && cmake .. build_command: make branch_pattern: coverity_scan libical-2.0.0/AUTHORS000066400000000000000000000001401264032652500141600ustar00rootroot00000000000000 There are now far too many contributors to libical to list here. Thanks to everyone involved! libical-2.0.0/CMakeLists.txt000066400000000000000000000312031264032652500156540ustar00rootroot00000000000000# This is the top-level CMakeLists.txt file for the libical project. # # Pass the following variables to cmake to control the build: # (See doc/UsingLibical.txt for more information) # # -DWITH_CXX_BINDINGS=[true|false] # Build the C++ bindings. # Default=true # # -DWITH_BDB=[true|false] [MAY BE BUGGY. DO NOT USE FOR PRODUCTION] # Build with the optional Berkeley DB storage. # Requires the Berkeley DB development toolkit pre-installed. # Default=false # # -DICAL_ERRORS_ARE_FATAL=[true|false] # Set to make icalerror_* calls abort instead of internally signaling an error # Default=false # Notes: # Change the behavior at runtime using the icalerror_set_errors_are_fatal() function. # Query the behavior at runtime using the icalerror_get_errors_are_fatal() function. # # -DNO_WARN_DEPRECATED=[true|false] # Set if you DO NOT WANT to see deprecated messages. # Default=true # # -DICAL_ALLOW_EMPTY_PROPERTIES=[true|false] # Set to prevent empty properties from being replaced with X-LIC-ERROR properties. # Default=false # # -DUSE_BUILTIN_TZDATA=[true|false] # Set to build using our own timezone data. # Default=false (use the system timezone data on non-Windows systems) # ALWAYS true on Windows systems # # -DSTATIC_ONLY=[true|false] # Set to build static libraries only. # Default=false (build shared and static libs) # # -DSHARED_ONLY=[true|false] # Set to build shared (dynamic) libraries only. # Default=false (build shared and static libs) # Takes precedence over STATIC_ONLY # # -DGOBJECT_INTROSPECTION=[true|false] # Set to build GObject introspection "typelib" files # Requires GObject Introspection development package v0.6.7 or higher # Default=false (do not generate the introspection files) # # -DUSE_32BIT_TIME_T=[true|false] # Set to build using a 32bit time_t (ignored unless building with MSVC on Windows) # Default=false (use the default size of time_t) # # -DUSE_INTEROPERABLE_VTIMEZONES=[true|false] # Set to use inter-operable rather than exact vtimezones. # Default=false (build exact vtimezones) # Notes: # Change the behavior at runtime using the icaltzutil_set_exact_vtimezones_support() function. # Query the behavior at runtime using the icaltzutil_get_exact_vtimezones_support() function. # cmake_minimum_required(VERSION 2.8.9) #first line, to shutup a cygwin warning project(libical C CXX) cmake_policy(SET CMP0003 NEW) cmake_policy(SET CMP0005 OLD) if(POLICY CMP0042) cmake_policy(SET CMP0042 NEW) endif() if(POLICY CMP0054) cmake_policy(SET CMP0054 NEW) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) enable_testing() if(WINCE) find_package(Wcecompat REQUIRED) include_directories(${WCECOMPAT_INCLUDE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${WCECOMPAT_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${WCECOMPAT_LIBRARIES}) endif() set(LIBICAL_LIB_MAJOR_VERSION "2") set(LIBICAL_LIB_MINOR_VERSION "0") set(LIBICAL_LIB_PATCH_VERSION "0") set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) set(PROJECT_VERSION "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}") set(PROJECT_URL "http://libical.github.io/libical/") # compile in Berkeley DB support option(WITH_BDB "Build in Berkeley DB Support. Requires pre-installed Berkeley DB development toolkit") if(WITH_BDB) find_package(BDB) if(BDB_FOUND) add_definitions(-DWITH_BDB) else() message(FATAL_ERROR "Cannot build the Berkeley DB storage support as requested. Unable to the locate the pre-installed Berkeley DB development toolkit.") endif() endif() # library build types set(LIBRARY_TYPE SHARED) option(STATIC_ONLY "Build static libraries only.") if(STATIC_ONLY) set(LIBRARY_TYPE STATIC) endif() option(SHARED_ONLY "Build shared (dynamic) libraries only. Takes precedence over STATIC_ONLY") if(SHARED_ONLY) set(STATIC_ONLY False) set(LIBRARY_TYPE SHARED) endif() # must have Perl to create the derived stuff find_package(Perl REQUIRED) # Ensure finding 64bit libs when using 64-bit compilers if(CMAKE_CL_64) set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS True) endif() # libicu is highly recommended for RSCALE support # libicu can be found at http://www.icu-project.org # RSCALE info at http://tools.ietf.org/html/rfc7529 find_package(ICU) if(ICU_FOUND) set(HAVE_LIBICU 1) if(ICU_MAJOR_VERSION VERSION_GREATER 50) set(HAVE_ICU_DANGI TRUE) else() set(HAVE_ICU_DANGI FALSE) endif() endif() if(ICU_I18N_FOUND) set(HAVE_LIBICU_I18N 1) endif() # MSVC specific definitions if(WIN32) if(MSVC) add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DYY_NO_UNISTD_H) option(USE_32BIT_TIME_T "Build using a 32bit time_t (ignored unless building with MSVC on Windows).") if(USE_32BIT_TIME_T) add_definitions(-D_USE_32BIT_TIME_T) endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4290") endif() add_definitions(-DBIG_ENDIAN=0 -DLITTLE_ENDIAN=1 -DBYTE_ORDER=BIG_ENDIAN) endif() # Use GNUInstallDirs include(GNUInstallDirs) set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Library directory name" FORCE) set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Include directory name" FORCE) set(SHARE_INSTALL_DIR ${CMAKE_INSTALL_DATAROOTDIR} CACHE STRING "Share directory name") # set the output paths set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) if(WIN32) set(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}) set(LIB_INSTALL_DIR lib) set(BIN_INSTALL_DIR bin) else() set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) endif() if(APPLE) set(CMAKE_INSTALL_NAME_DIR ${LIB_DESTINATION}) endif() option(ICAL_ERRORS_ARE_FATAL "icalerror_* calls will abort instead of internally signaling an error.") if(ICAL_ERRORS_ARE_FATAL) set(ICAL_ERRORS_ARE_FATAL 1) else() set(ICAL_ERRORS_ARE_FATAL 0) endif() option(ICAL_ALLOW_EMPTY_PROPERTIES "Prevent empty properties from being replaced with X-LIC-ERROR properties.") if(ICAL_ALLOW_EMPTY_PROPERTIES) set(ICAL_ALLOW_EMPTY_PROPERTIES 1) else() set(ICAL_ALLOW_EMPTY_PROPERTIES 0) endif() option(NO_WARN_DEPRECATED "DO NOT print deprecated messages." True) if(NO_WARN_DEPRECATED) set(NO_WARN_DEPRECATED 1) else() set(NO_WARN_DEPRECATED 0) endif() option(USE_BUILTIN_TZDATA "build using our own timezone data, else use the system timezone data on non-Windows systems. ALWAYS true on Windows.") if(USE_BUILTIN_TZDATA) set(USE_BUILTIN_TZDATA 1) else() set(USE_BUILTIN_TZDATA 0) endif() if(WIN32 OR WINCE) #Always use builtin tzdata on Windows systems. if(NOT USE_BUILTIN_TZDATA) message(STATUS "Currently unable to use system tzdata on Windows. Falling back to builtin tzdata") set(USE_BUILTIN_TZDATA 1) endif() endif() option(USE_INTEROPERABLE_VTIMEZONES "use interoperable rather than exact vtimezones." False) if(USE_INTEROPERABLE_VTIMEZONES) set(USE_INTEROPERABLE_VTIMEZONES 1) else() set(USE_INTEROPERABLE_VTIMEZONES 0) endif() include(ConfigureChecks.cmake) add_definitions(-DHAVE_CONFIG_H) configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION ${BIN_INSTALL_DIR} LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR} ) set(MIN_GOBJECT_INTROSPECTION "0.6.7") option(GOBJECT_INTROSPECTION "Build GObject introspection \"typelib\" files. Requires GObject Introspection development package ${MIN_GOBJECT_INTROSPECTION} or higher.") if(GOBJECT_INTROSPECTION) find_package(GObjectIntrospection ${MIN_GOBJECT_INTROSPECTION}) if(INTROSPECTION_FOUND) set(HAVE_INTROSPECTION TRUE) else() message(FATAL_ERROR "You requested to build with GObject Introspection but the necessary development package is missing or too low a version (version ${MIN_GOBJECT_INTROSPECTION} or higher is required)") endif() endif() # # Compiler settings # if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") include(CheckCCompilerFlag) check_c_compiler_flag(-Wunused-but-set-variable HAVE_GCC_UNUSED_BUT_SET) check_c_compiler_flag(-Wlogical-op HAVE_GCC_LOGICAL_OP) check_c_compiler_flag(-Wsizeof-pointer-memaccess HAVE_GCC_POINTER_MEMACCESS) check_c_compiler_flag(-Wformat-security HAVE_GCC_FORMAT_SECURITY) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wno-deprecated -Wall -Wextra -Winit-self -Wmissing-include-dirs -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Werror=return-type") if(HAVE_GCC_UNUSED_BUT_SET) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-but-set-variable") endif() if(HAVE_GCC_LOGICAL_OP) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wlogical-op") endif() if(HAVE_GCC_POINTER_MEMACCESS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wsizeof-pointer-memaccess") endif() if(HAVE_GCC_FORMAT_SECURITY) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat -Wformat-security") endif() if(CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME STREQUAL GNU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=500 -D_DEFAULT_SOURCE -D_GNU_SOURCE") endif() endif() if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") endif() if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-Wunused-but-set-variable HAVE_GXX_UNUSED_BUT_SET) check_cxx_compiler_flag(-Wlogical-op HAVE_GXX_LOGICAL_OP) check_cxx_compiler_flag(-Wsizeof-pointer-memaccess HAVE_GXX_POINTER_MEMACCESS) check_cxx_compiler_flag(-Wreorder HAVE_GXX_REORDER) check_cxx_compiler_flag(-Wformat-security HAVE_GXX_FORMAT_SECURITY) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wmissing-include-dirs -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Werror=return-type") if(HAVE_GXX_UNUSED_BUT_SET) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-but-set-variable") endif() if(HAVE_GXX_LOGICAL_OP) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op") endif() if(HAVE_GXX_POINTER_MEMACCESS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsizeof-pointer-memaccess") endif() if(HAVE_GXX_REORDER) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wreorder") endif() if(HAVE_GXX_FORMAT_SECURITY) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security") endif() if(CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME STREQUAL GNU) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_XOPEN_SOURCE=500 -D_DEFAULT_SOURCE -D_GNU_SOURCE") endif() endif() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") endif() option(WITH_CXX_BINDINGS "Build the C++ bindings." True) if(WITH_CXX_BINDINGS) add_definitions(-DWITH_CXX_BINDINGS) endif() #some test programs need to know if we are using 32-bit time if(SIZEOF_TIME_T EQUAL 4) set(USE_32BIT_TIME_T TRUE) endif() if(WIN32 AND MSVC) if(SIZEOF_SIZE_T LESS SIZEOF_TIME_T) unset(SIZEOF_SIZE_T CACHE) unset(SIZEOF_TIME_T CACHE) message(FATAL_ERROR "You are using a Microsoft Visual 32-bit compiler with 64-bit time." "Run cmake again with the \"-DUSE_32BIT_TIME_T=true\" command line option." ) endif() endif() ################# build subdirs ######################## add_subdirectory(design-data) add_subdirectory(doc) add_subdirectory(scripts) add_subdirectory(test-data) add_subdirectory(src) add_subdirectory(examples) if(USE_BUILTIN_TZDATA) # use our zoneinfo if cmake is passed -DUSE_BUILTIN_TZDATA add_subdirectory(zoneinfo) endif() ########### create and install pkg-config file ######### set(VERSION "${PROJECT_VERSION}") set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\${prefix}") set(libdir "\${exec_prefix}/lib") set(includedir "\${prefix}/include") set(PTHREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libical.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libical.pc @ONLY ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libical.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) ########### Create and install the CMake Config files ########## include(CMakePackageConfigHelpers) configure_package_config_file( LibIcalConfig.cmake.in ${libical_BINARY_DIR}/LibIcalConfig.cmake INSTALL_DESTINATION ${LIB_INSTALL_DIR}/cmake/LibIcal PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR ) # Create a version file write_basic_package_version_file( ${libical_BINARY_DIR}/LibIcalConfigVersion.cmake VERSION ${LIBICAL_LIB_VERSION_STRING} COMPATIBILITY SameMajorVersion ) install( FILES ${libical_BINARY_DIR}/LibIcalConfigVersion.cmake ${libical_BINARY_DIR}/LibIcalConfig.cmake DESTINATION ${LIB_INSTALL_DIR}/cmake/LibIcal ) install( EXPORT icalTargets DESTINATION ${LIB_INSTALL_DIR}/cmake/LibIcal FILE LibIcalTargets.cmake ) libical-2.0.0/COPYING000066400000000000000000000012321264032652500141460ustar00rootroot00000000000000libical is distributed under two licenses. You may choose the terms of either: * The Mozilla Public License (MPL) v1.0 or * The GNU Library General Public License (LGPL) v2.1 ---------------------------------------------------------------------- Software distributed under these licenses 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 libical. The Initial Developer of the Original Code is Eric Busboom All Rights Reserved. Contributor(s): See individual source files. libical-2.0.0/ConfigureChecks.cmake000066400000000000000000000073161264032652500171700ustar00rootroot00000000000000include(CheckIncludeFiles) check_include_files(byteswap.h HAVE_BYTESWAP_H) check_include_files(dirent.h HAVE_DIRENT_H) check_include_files(endian.h HAVE_ENDIAN_H) check_include_files(inttypes.h HAVE_INTTYPES_H) check_include_files(pthread.h HAVE_PTHREAD_H) check_include_files(sys/endian.h HAVE_SYS_ENDIAN_H) check_include_files(sys/param.h HAVE_SYS_PARAM_H) check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) check_include_files(fcntl.h HAVE_FCNTL_H) check_include_files(unistd.h HAVE_UNISTD_H) check_include_files(wctype.h HAVE_WCTYPE_H) include(CheckFunctionExists) if(WIN32 AND MSVC) check_function_exists(_access HAVE__ACCESS) #Windows check_function_exists(_getpid HAVE__GETPID) #Windows check_function_exists(_mkdir HAVE__MKDIR) #Windows check_function_exists(_open HAVE__OPEN) #Windows check_function_exists(_snprintf HAVE__SNPRINTF) #Windows check_function_exists(_stat HAVE__STAT) #Windows , check_function_exists(_strdup HAVE__STRDUP) #Windows check_function_exists(_stricmp HAVE__STRICMP) #Windows check_function_exists(_strnicmp HAVE__STRNICMP) #Windows check_function_exists(_read HAVE__READ) #Windows check_function_exists(_write HAVE__WRITE) #Windows else() check_function_exists(access HAVE_ACCESS) #Unix check_function_exists(fork HAVE_FORK) #Unix check_function_exists(getopt HAVE_GETOPT) #Unix check_function_exists(getpid HAVE_GETPID) #Unix check_function_exists(getpwent HAVE_GETPWENT) #Unix , check_function_exists(gmtime_r HAVE_GMTIME_R) #Unix check_function_exists(localtime_r HAVE_LOCALTIME_R) #Unix check_function_exists(mkdir HAVE_MKDIR) #Unix , check_function_exists(open HAVE_OPEN) #Unix ,, check_function_exists(nanosleep HAVE_NANOSLEEP) #Unix check_function_exists(signal HAVE_SIGNAL) #Unix check_function_exists(snprintf HAVE_SNPRINTF) #Unix check_function_exists(stat HAVE_STAT) #Unix ,, check_function_exists(strdup HAVE_STRDUP) #Unix check_function_exists(strcasecmp HAVE_STRCASECMP) #Unix check_function_exists(strncasecmp HAVE_STRNCASECMP) #Unix check_function_exists(read HAVE_READ) #Unix check_function_exists(unlink HAVE_UNLINK) #Unix check_function_exists(usleep HAVE_USLEEP) #Unix check_function_exists(waitpid HAVE_WAITPID) #Unix , check_function_exists(write HAVE_WRITE) #Unix if(NOT MINGW) check_function_exists(alarm HAVE_ALARM) #Unix endif() endif() check_function_exists(backtrace HAVE_BACKTRACE) check_function_exists(iswspace HAVE_ISWSPACE) #Linux check_function_exists(setenv HAVE_SETENV) check_function_exists(unsetenv HAVE_UNSETENV) set(_SAVE_RQL ${CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES kernel32.lib) check_function_exists(GetNumberFormat HAVE_GETNUMBERFORMAT) #Windows set(CMAKE_REQUIRED_LIBRARIES ${_SAVE_RQL}) include(CheckTypeSize) check_type_size(intptr_t SIZEOF_INTPTR_T) check_type_size(pid_t SIZEOF_PID_T) check_type_size(size_t SIZEOF_SIZE_T) check_type_size(ssize_t SIZEOF_SSIZE_T) check_type_size(time_t SIZEOF_TIME_T) check_type_size(wint_t SIZEOF_WINT_T) include(FindThreads) check_library_exists(pthread pthread_attr_get_np "" HAVE_PTHREAD_ATTR_GET_NP) check_library_exists(pthread pthread_getattr_np "" HAVE_PTHREAD_GETATTR_NP) check_library_exists(pthread pthread_create "" HAVE_PTHREAD_CREATE) check_include_files("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H) libical-2.0.0/Install.txt000066400000000000000000000110111264032652500152560ustar00rootroot00000000000000Libical v1.0 and above uses the CMake buildsystem. The autoconf build system has been removed and is no longer supported. Please see the comments at the top of CMakeLists.txt for the available configuration options you can pass to cmake. The installation directory defaults to /usr/local on UNIX and c:/Program Files on Windows. You can change this by passing -DCMAKE_INSTALL_PREFIX=/install/path to cmake. To build a debug version pass -DCMAKE_BUILD_TYPE=Debug to cmake. To build libical you will need: - CMake version 2.8.9 or higher - Perl - libicu (not required but strongly recommended) - a C compiler (let us know if the build fails with your C compiler) Building on Unix with gcc or clang: % mkdir build % cd build % cmake .. % make % make install Building on Windows with MicroSoft Visual Studio: % mkdir build % cd build % cmake -G "NMake Makefiles" .. % nmake % nmake install NOTE: Some MSVC 32bit compilers (like MSVC2005) use a 64bit version of time_t. In these cases you must pass -DUSE_32BIT_TIME_T=true to cmake to make sure the 32bit version of time_t is used instead. Building on Windows with mingw: % mkdir build % cd build % cmake -G "MinGW Makefiles" .. % mingw32-make % mingw32-make install Building on Windows under Cygwin: % mkdir build % cd build % cmake .. % make % make install Building on MSYS with mingw: % mkdir build % cd build % cmake -G "MSYS Makefiles" .. % nmake % nmake install To run the test suite, from inside the build directory run 'make test' (or 'nmake test' or 'mingw32-make test') To run the test suite in verbose mode, pass ARGS="-V" to the make command For example: nmake test ARGS="-V" By default, the buildsystem creates shared(dynamic) and static versions of the libraries, but that behavior can be modified at CMake time: - To build the static libraries only, pass -DSTATIC_ONLY=True to CMake. - To build the shared libraries only, pass -DSHARED_ONLY=True to CMake. == Building with Different Compilers == For example, say you want to use Clang to build on Linux. Then you can set the C and C++ compilers at CMake time, like so: % CC=clang CXX=clang++ cmake .. == Optional Dependencies == * libicu "International Components for Unicode" development libraries. Highly recommended for RSCALE support. libicu can be found at http://www.icu-project.org If CMake doesn't locate your libicu installation try setting the ICU_BASE environment variable to the top folder where its installed and run cmake again. * Berkeley DB storage. If want to use (try) the Berkeley Database storage you can pass the -DWITH_BDB=True option to CMake. You'll need to have the Berkeley DB toolkit development package installed beforehand. This is very old code that disappeared in the 1.x series but has been resurrected it in the 2.x series. ** This code path has not been fully tested. ** Don't be surprised if there are bugs. ** Do NOT use for production code. * GObject Introspection. To generate GObject introspection "typelib" files pass the -DGOBJECT_INTROSPECTION=True option to CMake. You'll need to have the GObject Introspection development package v0.6.7 or higher installed beforehand. == Language Bindings == This C library can be built with bindings for these other languages: * C++. By default the buildsystem will create and install the C++ bindings API. Turn this off by passing -DWITH_CXX_BINDINGS=False option to CMake. * There are Java, Perl, PHP and Python bindings but they are old and haven't been tested in a very long time. Volunteers wanted. == Tweaking the Library Behavior == Use these CMake options to adjust the library behavior as follows: * ICAL_ERRORS_ARE_FATALL=[true|false] Set to make icalerror_* calls abort instead of internally signaling an error. Default=false * NO_WARN_DEPRECATED=[true|false] Set if you DO NOT WANT to see deprecated messages. Default=true * ICAL_ALLOW_EMPTY_PROPERTIES=[true|false] Set to prevent empty properties from being replaced with X-LIC-ERROR properties. Default=false * USE_BUILTIN_TZDATA=[true|false] Set to build using our own (instead of the system's) timezone data. Default=false (use the system timezone data on non-Windows systems) ALWAYS true on Windows systems * USE_INTEROPERABLE_VTIMEZONES=[true|false] Set to use inter-operable rather than exact VTIMEZONEs. Default=false (build exact VTIMEZONEs) Notes: Change the behavior at runtime using the icaltzutil_set_exact_vtimezones_support() function. Query the behavior at runtime using the icaltzutil_get_exact_vtimezones_support() function. libical-2.0.0/LICENSE000066400000000000000000000012621264032652500141230ustar00rootroot00000000000000libical is distributed under two licenses. You may choose the terms of either: * The Mozilla Public License (MPL) v1.0 or * The GNU Library General Public License (LGPL) v2.1 ---------------------------------------------------------------------- Software distributed under these licenses 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. Libical is distributed under both the LGPL and the MPL. The MPL notice, reproduced below, covers the use of either of the licenses. ---------------------------------------------------------------------- libical-2.0.0/LibIcalConfig.cmake.in000066400000000000000000000005751264032652500171600ustar00rootroot00000000000000@PACKAGE_INIT@ set_and_check(LibIcal_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set_and_check(LibIcal_LIBRARIES_DIR "@PACKAGE_LIB_INSTALL_DIR@") include("${CMAKE_CURRENT_LIST_DIR}/LibIcalTargets.cmake") set(LibIcal_LIBRARIES ical icalss icalvcal) # Temporary, will be removed once issue#87 is fixed set(LibIcal_STATIC_LIBRARIES ical-static icalss-static icalvcal-static) libical-2.0.0/ReadMe.md000077700000000000000000000000001264032652500164652ReadMe.txtustar00rootroot00000000000000libical-2.0.0/ReadMe.txt000066400000000000000000000045241264032652500150200ustar00rootroot00000000000000# Libical [![Build Status](https://travis-ci.org/libical/libical.svg?branch=master)](https://travis-ci.org/libical/libical) [![Coverity Scan Build Status](https://scan.coverity.com/projects/2367/badge.svg)](https://scan.coverity.com/projects/2367) Introduction ============ Libical -- an implementation of iCalendar protocols and data formats Most of the code in here was written by Eric Busboom with help from dozens of contributors. It is currently maintained by Art Cancro and Wilfried Goesgens. Libical is an Open Source implementation of the iCalendar protocols and protocol data units. The iCalendar specification describes how calendar clients can communicate with calendar servers so users can store their calendar data and arrange meetings with other users. Libical implements RFC5545, RFC5546, RFC7529; the iCalendar extensions in RFC6638; and some of RFC6047. License ======== The code and datafiles in this distribution are licensed under the Mozilla Public License (MPL) v1.0. See http://www.mozilla.org/MPL/1.0 for a copy of the license. Alternately, you may use libical under the terms of the GNU Library General Public License (LGPL) v2.1. See http://www.gnu.org/licenses/lgpl-2.1.txt for a copy of the license. 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. Acknowledgments =============== Portions of this distribution are (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. See src/libicalvcal/README.TXT for details. Get Involved ============ Subscribe to our mailing lists: For developer discussions http://lists.infradead.org/mailman/listinfo/libical-devel For general discussions about libical and related projects http://lists.infradead.org/mailman/listinfo/libical-interest Report bugs to our issue tracker at https://github.com/libical/libical/issues Building the library ==================== See the top-level Install.txt file. Using the Library ================= There is rudimentary, unfinished documentation in the /doc directory, and annotated examples in /examples and the test code in src/test. libical-2.0.0/ReleaseNotes.txt000066400000000000000000000040761264032652500162560ustar00rootroot00000000000000Release Highlights ================== Version 2.0.0: -------------- * WARNING: Version 2 IS NOT Binary Compatible with Older Versions * Version 2 is Source Compatible with Older Versions * Lots of source code scrubbing * [New] RSCALE support (requires libicu from http://www.icu-project.org) * [New] CalDAV attachment support (draft-daboo-caldav-attachments) * [New] Resurrect the Berkeley DB storage support * [Bug] issue83: Incorrect recurrence generation for weekly pattern * Handle RRULEs better * Handle threading better Version 1.0.1: -------------- * [Bug] issue74: Do not escape double quote character * [Bug] issue80,issue92: fix crashes using icaltimezone_load_builtin_timezone() recursively * [Bug] Fix icalcomponent_foreach_recurrence() and large durations between recurrences (e.g. FREQ=YEARLY) * [Bug] Properly handle UTCOFFSETs of the form +/-00mmss * [Bug] Properly skip bogus dates (e.g. 2/30, 4/31) in RRULE:FREQ=MONTHLY * [Bug] Properly handle RRULE:FREQ=MONTHLY;BYDAY;BYMONTHDAY when DTSTART isn't on BYDAY * [Bug] Fix RRULE:FREQ=YEARLY;BYDAY;BYWEEKNO - MUST use ISO weeks * [Bug] Properly skip bogus dates (e.g. 2/29) in RRULE:FREQ=YEARLY[;BYMONTH][;BYMONTHDAY] * [New] Update tzdata to version 2014g * [New] Support added for schedule params: agent, status, force-send * [New] Added a UID to the VFREEBUSY component * [New] Allow dates > 2038 if sizeof(time_t) > 4 * [New] Add properties from draft-ietf-tzdist-service * [New] Add support for RRULE:FREQ=YEARLY;BYDAY;BYYEARDAY and fixed RRULE:FREQ=YEARLY;BYYEARDAY with negative days * [Build] Autotools build system is removed * [Build] CMake version 2.8.9 (or higher) is required (was CMake version 2.4.0) * [Build] Add new -DSHARED_ONLY and -DSTATIC_ONLY CMake options * [Build] Remove -DSTATIC_LIBRARY CMake option * [Build] MSYS2 builds (fixed instructions) * [Build/Doc] Now can build api documentation with make docs * [Quality] More regression tests added, in particular for recurrence * [Quality] Almost all compile warnings silenced * [Quality] A bunch of Coverity Scan warnings silenced libical-2.0.0/TEST000066400000000000000000000001171264032652500136160ustar00rootroot00000000000000 Parser Tests ------------ Use iCAL keywords as first words of unquoted stringslibical-2.0.0/THANKS000066400000000000000000000045361264032652500140400ustar00rootroot00000000000000Thanks to: Allan Clark for testing libical against UnixWare. Graham Davison for MacOS support and miscelaneous code bits Seth Alves for the first cut at the Makefile.am files and various utility functions. Russ Steinthal for several utility functions and comments. Ola Lundqvist for the vCal test data file. Colin DuPlantis for new functions in icalparser.c Holger Schmidt for all of icalcstp.c, The CSTP protocol implementation, and modifications to icalcstp.h Gisle Hannemyr The decode*() functions in sspm.c are based on the decode() routine in the mimelite program, Copyright (c) 1994 Gisle Hannemyr. The Evolution team at Helixcode ( Federico Mena Quintero , JP Rosevear , Ettore Perazzoli , Christopher James Lahey , Peter Williams ) for miscelaneous patches and adjustments to the build system. Cornelius Schumacher for many insightful suggestions and a few patches. Mark D. Anderson for discussions and ideas. Martin Neimeier for correcting bugs in icalrecur.c Tom Leitner For several bug fixes in compiling on Tru64 UNIX. Patrick Lewis for several bug reports and substantial ( co-authorship) contributions to the Python bindings Larry W. Virden for several bug reports in compiling on Solaris. Bryan Bartone for code changes based on porting libical to Windows. Hubert V for checking and analyzing the output of the recurrence rule system. Jonathan Yue for icalproperty_get_name() Jeff Mace for finding bugs in gauges. John Gray for routing memory leaks, porting to WIN32, and taking over leadership of the project. Andrea Campi for miscellaneous updates and beginning of Doxygen documentation. Paul Lindner for several contributions, including C++ binding, reentrant parser, thread safe memory allocator, and a lot of documentation. Mark Tearle for keeping the Python bindings up to date. libical-2.0.0/TODO000066400000000000000000000023071264032652500136070ustar00rootroot00000000000000 TODOs for libical ----------------- fix Coverity Scan issues libical treats properties with multiple values incorrecty -- it always seperates multiple values into multiple properties. This is not acceptable for CATEGORIES and RESOURCES. Some TEXT valued properties, like METHOD, have a limited set of valid values. The code should check that the values of these properites are valid. ( Although METHOD now uses enums, and is not really TEXT valued ) Finish implementing values ATTACH/BINARY content_type language Check for buffer overflow on external input. Error Handling Dates and times: the parser will accept many illegal date time values RECUR values ignore integers in BYDAY clauses, ie 'FREQ=MONTHLY;BYDAY=-1SU' Restrictions code does not catch lack of DTEND or DURATION For some value types, if there illegal characters in the value ( like 4.56 in an integer value), the parser will output the characters to stdout. Check all uses of strcpy and sprinf for buffer overflows Make the mime parsing code in sspm grow the list of parts as needed, rather than having a hard limit. in sspm.c, and unrecognized content-transfer-encoding values must force a content type of application/octet-stream. libical-2.0.0/cmake/000077500000000000000000000000001264032652500141755ustar00rootroot00000000000000libical-2.0.0/cmake/modules/000077500000000000000000000000001264032652500156455ustar00rootroot00000000000000libical-2.0.0/cmake/modules/FindBDB.cmake000066400000000000000000000022721264032652500200420ustar00rootroot00000000000000# Finds the Berkeley DB Library # # BDB_FOUND - True if Berkeley DB found. # BDB_INCLUDE_DIR - Directory to include to get Berkeley DB headers # BDB_LIBRARY - Library to link against for the Berkeley DB # if(BDB_INCLUDE_DIR AND BDB_LIBRARY) # Already in cache, be silent set(BDB_FIND_QUIETLY TRUE) endif() # Look for the header file. find_path( BDB_INCLUDE_DIR NAMES db.h HINTS /usr/local/opt/db/include DOC "Include directory for the Berkeley DB library" ) mark_as_advanced(BDB_INCLUDE_DIR) # Look for the library. find_library( BDB_LIBRARY NAMES db HINTS /usr/local/opt/db4/lib DOC "Libraries to link against for the Berkeley DB" ) mark_as_advanced(BDB_LIBRARY) # Copy the results to the output variables. if(BDB_INCLUDE_DIR AND BDB_LIBRARY) set(BDB_FOUND 1) else() set(BDB_FOUND 0) endif() if(BDB_FOUND) if(NOT BDB_FIND_QUIETLY) message(STATUS "Found Berkeley DB header files in ${BDB_INCLUDE_DIR}") message(STATUS "Found Berkeley libraries: ${BDB_LIBRARY}") endif() else() if(BDB_FIND_REQUIRED) message(FATAL_ERROR "Could not find Berkeley DB") else() message(STATUS "Optional package Berkeley DB was not found") endif() endif() libical-2.0.0/cmake/modules/FindGObjectIntrospection.cmake000066400000000000000000000037651264032652500235610ustar00rootroot00000000000000# - try to find gobject-introspection # # Once done this will define # # INTROSPECTION_FOUND - system has gobject-introspection # INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner # INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler # INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate # INTROSPECTION_GIRDIR # INTROSPECTION_TYPELIBDIR # INTROSPECTION_CFLAGS # INTROSPECTION_LIBS # # Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 OUTPUT_VARIABLE _result RESULT_VARIABLE _null ) if (_null) else() string(REGEX REPLACE "[\r\n]" " " _result "${_result}") string(REGEX REPLACE " +$" "" _result "${_result}") separate_arguments(_result) set(${_outvar} ${_result} CACHE INTERNAL "") endif() endmacro(_GIR_GET_PKGCONFIG_VAR) find_package(PkgConfig) if(PKG_CONFIG_FOUND) if(PACKAGE_FIND_VERSION_COUNT GREATER 0) set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}") endif() pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp}) if(_pc_gir_FOUND) set(INTROSPECTION_FOUND TRUE) _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner") _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler") _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate") _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir") _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir") set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") endif() endif() mark_as_advanced( INTROSPECTION_SCANNER INTROSPECTION_COMPILER INTROSPECTION_GENERATE INTROSPECTION_GIRDIR INTROSPECTION_TYPELIBDIR INTROSPECTION_CFLAGS INTROSPECTION_LIBS ) libical-2.0.0/cmake/modules/FindICU.cmake000066400000000000000000000063711264032652500200770ustar00rootroot00000000000000# Finds the International Components for Unicode (ICU) Library # # ICU_FOUND - True if ICU found. # ICU_I18N_FOUND - True if ICU's internationalization library found. # ICU_INCLUDE_DIR - Directory to include to get ICU headers # Note: always include ICU headers as, e.g., # unicode/utypes.h # ICU_LIBRARY - Library to link against for the common ICU # ICU_I18N_LIBRARY - Library to link against for ICU internationaliation # (note: in addition to ICU_LIBRARY) # ICU_VERSION - ICU version MAJOR.MINOR # ICU_MAJOR_VERSION - ICU major version # ICO_MINOR_VERSION - ICU minor version # if(WIN32) file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _program_FILES_DIR) endif() if(ICU_INCLUDE_DIR AND ICU_LIBRARY) # Already in cache, be silent set(ICU_FIND_QUIETLY TRUE) endif() #set the root from the ICU_BASE environment file(TO_NATIVE_PATH "$ENV{ICU_BASE}" icu_root) #override the root from ICU_BASE defined to cmake if(DEFINED ICU_BASE) file(TO_NATIVE_PATH "${ICU_BASE}" icu_root) endif() # Look for the header file. find_path( ICU_INCLUDE_DIR NAMES unicode/utypes.h HINTS ${icu_root}/include ${_program_FILES_DIR}/icu/include /usr/local/opt/icu4c/include DOC "Include directory for the ICU library" ) mark_as_advanced(ICU_INCLUDE_DIR) # Look for the library. find_library( ICU_LIBRARY NAMES icuuc cygicuuc cygicuuc32 HINTS ${icu_root}/lib/ ${_program_FILES_DIR}/icu/lib/ /usr/local/opt/icu4c/lib/ DOC "Libraries to link against for the common parts of ICU" ) mark_as_advanced(ICU_LIBRARY) # Copy the results to the output variables. if(ICU_INCLUDE_DIR AND ICU_LIBRARY) set(ICU_FOUND 1) set(ICU_LIBRARIES ${ICU_LIBRARY}) set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR}) set(ICU_VERSION 0) set(ICU_MAJOR_VERSION 0) set(ICU_MINOR_VERSION 0) file(READ "${ICU_INCLUDE_DIR}/unicode/uvernum.h" _ICU_VERSION_CONENTS) string(REGEX REPLACE ".*#define U_ICU_VERSION_MAJOR_NUM ([0-9]+).*" "\\1" ICU_MAJOR_VERSION "${_ICU_VERSION_CONENTS}") string(REGEX REPLACE ".*#define U_ICU_VERSION_MINOR_NUM ([0-9]+).*" "\\1" ICU_MINOR_VERSION "${_ICU_VERSION_CONENTS}") set(ICU_VERSION "${ICU_MAJOR_VERSION}.${ICU_MINOR_VERSION}") # Look for the ICU internationalization libraries find_library( ICU_I18N_LIBRARY NAMES icuin icui18n cygicuin cygicuin32 HINTS ${icu_root}/lib/ ${_program_FILES_DIR}/icu/lib/ /usr/local/opt/icu4c/lib/ DOC "Libraries to link against for ICU internationalization" ) mark_as_advanced(ICU_I18N_LIBRARY) if(ICU_I18N_LIBRARY) set(ICU_I18N_FOUND 1) set(ICU_LIBRARIES "${ICU_LIBRARIES} ${ICU_I18N_LIBRARY}") else() set(ICU_I18N_FOUND 0) endif() else() set(ICU_FOUND 0) set(ICU_I18N_FOUND 0) set(ICU_INCLUDE_DIRS) set(ICU_LIBRARIES) set(ICU_VERSION) set(ICU_MAJOR_VERSION) set(ICU_MINOR_VERSION) endif() if(ICU_FOUND) if(NOT ICU_FIND_QUIETLY) message(STATUS "Found ICU version ${ICU_VERSION}") message(STATUS "Found ICU header files in ${ICU_INCLUDE_DIRS}") message(STATUS "Found ICU libraries: ${ICU_LIBRARIES}") endif() else() if(ICU_FIND_REQUIRED) message(FATAL_ERROR "Could not find ICU") else() message(STATUS "Optional package ICU was not found") endif() endif() libical-2.0.0/cmake/modules/FindWcecompat.cmake000066400000000000000000000020711264032652500213720ustar00rootroot00000000000000# Try to find Wcecompat functionality # Once done this will define # # WCECOMPAT_FOUND - system has Wcecompat # WCECOMPAT_INCLUDE_DIR - Wcecompat include directory # WCECOMPAT_LIBRARIES - Libraries needed to use Wcecompat # # Copyright (c) 2010, Andreas Holzammer, # # Redistribution and use is allowed according to the terms of the BSD license. if(WCECOMPAT_INCLUDE_DIR AND WCECOMPAT_LIB_FOUND) set(Wcecompat_FIND_QUIETLY TRUE) endif() find_path(WCECOMPAT_INCLUDE_DIR errno.h PATH_SUFFIXES wcecompat) set(WCECOMPAT_LIB_FOUND FALSE) if(WCECOMPAT_INCLUDE_DIR) find_library(WCECOMPAT_LIBRARIES NAMES wcecompat wcecompatex) if(WCECOMPAT_LIBRARIES) set(WCECOMPAT_LIB_FOUND TRUE) endif() endif() # I have no idea what this is about, but it seems to be used quite often, so I add this here set(WCECOMPAT_CONST const) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Wcecompat DEFAULT_MSG WCECOMPAT_LIBRARIES WCECOMPAT_LIB_FOUND) mark_as_advanced(WCECOMPAT_INCLUDE_DIR WCECOMPAT_LIBRARIES WCECOMPAT_CONST WCECOMPAT_LIB_FOUND) libical-2.0.0/cmake/modules/GObjectIntrospectionMacros.cmake000066400000000000000000000066661264032652500241300ustar00rootroot00000000000000# Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(_gir_list_prefix _outvar _listvar _prefix) set(${_outvar}) foreach(_item IN LISTS ${_listvar}) list(APPEND ${_outvar} ${_prefix}${_item}) endforeach() endmacro(_gir_list_prefix) macro(gir_add_introspections introspections_girs) set(_gir_girs) set(_gir_typelibs) foreach(gir IN LISTS ${introspections_girs}) set(_gir_name "${gir}") ## Transform the gir filename to something which can reference through a variable ## without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir string(REPLACE "-" "_" _gir_name "${_gir_name}") string(REPLACE "." "_" _gir_name "${_gir_name}") # Namespace and Version is either fetched from the gir filename # or the _NAMESPACE/_VERSION variable combo set(_gir_namespace "${${_gir_name}_NAMESPACE}") if (_gir_namespace STREQUAL "") string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}") endif () set(_gir_version "${${_gir_name}_VERSION}") if (_gir_version STREQUAL "") string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}") endif () # _PROGRAM is an optional variable which needs it's own --program argument set(_gir_program "${${_gir_name}_PROGRAM}") if (NOT _gir_program STREQUAL "") set(_gir_program "--program=${_gir_program}") endif () # Variables which provides a list of things _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=") _gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=") _gir_list_prefix(_gir_includes ${_gir_name}_INCLUDES "--include=") # Reuse the LIBTOOL variable from by automake if it's set set(_gir_libtool "--no-libtool") add_custom_command( COMMAND ${INTROSPECTION_SCANNER} ${INTROSPECTION_SCANNER_ARGS} --namespace=${_gir_namespace} --nsversion=${_gir_version} ${_gir_libtool} ${_gir_program} ${_gir_libraries} ${_gir_packages} ${_gir_includes} ${${_gir_name}_SCANNERFLAGS} ${${_gir_name}_CFLAGS} ${${_gir_name}_FILES} --output ${CMAKE_CURRENT_BINARY_DIR}/${gir} --accept-unprefixed DEPENDS ${${_gir_name}_FILES} ${${_gir_name}_LIBS} OUTPUT ${gir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM ) list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION ${SHARE_INSTALL_DIR}/gir-1.0) string(REPLACE ".gir" ".typelib" _typelib "${gir}") add_custom_command( COMMAND ${INTROSPECTION_COMPILER} ${INTROSPECTION_COMPILER_ARGS} --includedir=. ${CMAKE_CURRENT_BINARY_DIR}/${gir} -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir} OUTPUT ${_typelib} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION lib/girepository-1.0) endforeach() add_custom_target(gir-girs ALL DEPENDS ${_gir_girs}) add_custom_target(gir-typelibs ALL DEPENDS ${_gir_typelibs}) endmacro(gir_add_introspections) libical-2.0.0/cmake/run_test.cmake000066400000000000000000000022441264032652500170440ustar00rootroot00000000000000#------------------------------------------------- # some argument checking: # test_cmd is the command to run with all its arguments if(NOT test_cmd) message(FATAL_ERROR "Variable test_cmd not defined") endif() # output_blessed contains the name of the "blessed" output file if(NOT output_blessed) message(FATAL_ERROR "Variable output_blessed not defined") endif() # output_test contains the name of the output file the test_cmd will produce if(NOT output_test) message(FATAL_ERROR "Variable output_test not defined") endif() # convert the space-separated string to a list separate_arguments(test_args) execute_process( COMMAND ${test_cmd} ${test_args} RESULT_VARIABLE test_not_successful ERROR_VARIABLE err ) if(test_not_successful) message(SEND_ERROR "Unable to run test '${test_cmd}': ${err} : shell output: ${test_not_successful}!") endif() execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files ${output_blessed} ${output_test} RESULT_VARIABLE test_not_successful ERROR_VARIABLE err ) if(test_not_successful) message(SEND_ERROR "Output does not match for ${output_blessed} and ${output_test}: ${err} : shell output: ${test_not_successful}!") endif() libical-2.0.0/config.h.cmake000066400000000000000000000327011264032652500156150ustar00rootroot00000000000000/* config.h. Generated by cmake from config.h.cmake */ /* Define if you have the ICU library. */ #cmakedefine HAVE_LIBICU 1 /* Define if you have the ICU internationalization library. */ #cmakedefine HAVE_LIBICU_I18N 1 /* Define to 1 if you have the `backtrace' function. */ #cmakedefine HAVE_BACKTRACE 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_BYTESWAP_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_ENDIAN_H 1 /* Define to 1 if you have the `GetNumberFormat' function. */ #cmakedefine HAVE_GETNUMBERFORMAT 1 /* Define to 1 if you have the `gmtime_r' function. */ #cmakedefine HAVE_GMTIME_R 1 /* Define to 1 if you have the `localtime_r' function. */ #cmakedefine HAVE_LOCALTIME_R 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_INTTYPES_H 1 /* Define to 1 if you have type 'intptr_t' defined. */ #cmakedefine HAVE_INTPTR_T 1 /* Define to 1 if you have the `iswspace' function. */ #cmakedefine HAVE_ISWSPACE 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_DIRENT_H 1 /* Define if we have pthread. */ #cmakedefine HAVE_PTHREAD_ATTR_GET_NP 1 #cmakedefine HAVE_PTHREAD_GETATTR_NP 1 #cmakedefine HAVE_PTHREAD_CREATE 1 #cmakedefine HAVE_PTHREAD_NP_H 1 #if defined(HAVE_PTHREAD_ATTR_GET_NP) || defined(HAVE_PTHREAD_GETATTR_NP) || defined(HAVE_PTHREAD_CREATE) || defined(HAVE_PTHREAD_NP_H) #define HAVE_PTHREAD 1 #endif /* Define to 1 if you have the header file. */ #cmakedefine HAVE_PTHREAD_H 1 /* Define to 1 if you have the `nanosleep' function. */ #cmakedefine HAVE_NANOSLEEP 1 /* Define to 1 if you have the `usleep' function. */ #cmakedefine HAVE_USLEEP 1 /* Define to 1 if you have the `snprintf' function. */ #cmakedefine HAVE_SNPRINTF 1 /* Define to 1 if you have the `_snprintf' function. */ #cmakedefine HAVE__SNPRINTF 1 /* Define to 1 if you have the `stat' function. */ #cmakedefine HAVE_STAT 1 /* Define to 1 if you have the `_stat' function. */ #cmakedefine HAVE__STAT 1 /* Define to 1 if you have the `strcasecmp' function. */ #cmakedefine HAVE_STRCASECMP 1 /* Define to 1 if you have the `strncasecmp' function. */ #cmakedefine HAVE_STRNCASECMP 1 /* Define to 1 if you have the `_stricmp' function. */ #cmakedefine HAVE__STRICMP 1 /* Define to 1 if you have the `_strnicmp' function. */ #cmakedefine HAVE__STRNICMP 1 /* Define to 1 if you have the `strdup' function. */ #cmakedefine HAVE_STRDUP 1 /* Define to 1 if you have the `_strdup' function. */ #cmakedefine HAVE__STRDUP 1 /* Define to 1 if you have the `access' function. */ #cmakedefine HAVE_ACCESS 1 /* Define to 1 if you have the `_access' function. */ #cmakedefine HAVE__ACCESS 1 /* Define to 1 if you have the `getopt' function. */ #cmakedefine HAVE_GETOPT 1 /* Define to 1 if you have the `getpid' function. */ #cmakedefine HAVE_GETPID 1 /* Define to 1 if you have the `_getpid' function. */ #cmakedefine HAVE__GETPID 1 /* Define to 1 if you have the `mkdir' function. */ #cmakedefine HAVE_MKDIR 1 /* Define to 1 if you have the `_mkdir' function. */ #cmakedefine HAVE__MKDIR 1 /* Define to 1 if you have the `open' function. */ #cmakedefine HAVE_OPEN 1 /* Define to 1 if you have the `_open' function. */ #cmakedefine HAVE__OPEN 1 /* Define to 1 if you have the `read' function. */ #cmakedefine HAVE_READ 1 /* Define to 1 if you have the `_read' function. */ #cmakedefine HAVE__READ 1 /* Define to 1 if you have the `write' function. */ #cmakedefine HAVE_WRITE 1 /* Define to 1 if you have the `_write' function. */ #cmakedefine HAVE__WRITE 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_ENDIAN_H 1 /* Define to 1 if you have the `setenv' function. */ #cmakedefine HAVE_SETENV 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_UNISTD_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_FCNTL_H 1 /* Define to 1 if you have the `unsetenv' function. */ #cmakedefine HAVE_UNSETENV 1 /* Define to 1 if you have the `alarm' function. */ #cmakedefine HAVE_ALARM 1 /* Define to 1 if you have the `signal' function. */ #cmakedefine HAVE_SIGNAL 1 /* Define to 1 if you have the `waitpid' function. */ #cmakedefine HAVE_WAITPID 1 /* Define to 1 if you have the `fork' function. */ #cmakedefine HAVE_FORK 1 /* Define to 1 if you have the `getpwent' function. */ #cmakedefine HAVE_GETPWENT 1 /* Define to 1 if you have the `unlink' function. */ #cmakedefine HAVE_UNLINK 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_WCTYPE_H 1 /* Define to make icalerror_* calls abort instead of internally signalling an error */ #define ICAL_ERRORS_ARE_FATAL ${ICAL_ERRORS_ARE_FATAL} /* Define to prevent empty properties from being replaced with X-LIC-ERROR properties */ #define ICAL_ALLOW_EMPTY_PROPERTIES ${ICAL_ALLOW_EMPTY_PROPERTIES} /* Define to 1 if you DO NOT WANT to see deprecated messages */ #define NO_WARN_DEPRECATED ${NO_WARN_DEPRECATED} /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "${PROJECT_URL}" /* Define to the full name of this package. */ #define PACKAGE_NAME "${CMAKE_PROJECT_NAME}" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "${CMAKE_PROJECT_NAME} ${PROJECT_VERSION}" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "${CMAKE_PROJECT_NAME}" /* Define to the version of this package. */ #define PACKAGE_VERSION "${PROJECT_VERSION}" /* whether we should bring our own TZ-Data */ #cmakedefine USE_BUILTIN_TZDATA /* whether we should use operable vtimezones */ #cmakedefine USE_INTEROPERABLE_VTIMEZONES /* Define to empty if `const' does not conform to ANSI C. */ #cmakedefine const /* Typedef intptr_t if needed */ #cmakedefine HAVE_SIZEOF_INTPTR_T 1 #if !defined(HAVE_SIZEOF_INTPTR_T) typedef unsigned int inptr_t; #endif /* Typedef size_t if needed */ #cmakedefine HAVE_SIZEOF_SIZE_T #if !defined(HAVE_SIZEOF_SIZE_T) typedef unsigned long size_t; #endif /* Typedef ssize_t if needed */ #cmakedefine HAVE_SIZEOF_SSIZE_T #if !defined(HAVE_SIZEOF_SSIZE_T) typedef long ssize_t; #endif /* Typedef pid_t if needed */ #cmakedefine HAVE_SIZEOF_PID_T 1 #if !defined(HAVE_SIZEOF_PID_T) typedef int pid_t; #endif /* Typedef wint_t if needed */ #cmakedefine HAVE_SIZEOF_WINT_T 1 #if !defined(HAVE_SIZEOF_WINT_T) #if defined(HAVE_WCTYPE_H) #include #else typedef unsigned int wint_t; #endif #endif #cmakedefine SIZEOF_TIME_T ${SIZEOF_TIME_T} /* whether we have ICU DANGI calendar */ #cmakedefine HAVE_ICU_DANGI /* getpwent - function to get password file entry */ #if defined(HAVE_GETPWENT) #include #include #endif /* strcasecmp or stricmp: String compare, case independent */ #if defined(HAVE__STRICMP) #define strcasecmp _stricmp #include #else #if !defined(HAVE_STRCASECMP) #error "No case independent string compare function available" #else #include #endif #endif /* strncasecmp or strnicmp: String compare, case independent, size limited */ #if defined(HAVE__STRICMP) #define strncasecmp _strnicmp #include #else #if !defined(HAVE_STRNCASECMP) #error "No case independent string compare size limited function available" #else #include #endif #endif /* snprintf: size limited sprintf */ #if defined(HAVE__SNPRINTF) #define snprintf _snprintf #else #if !defined(HAVE_SNPRINTF) #error "No size limited sprintf available" #endif #endif #include /* sleep: function to sleep for a specified time */ #if defined(_WIN32) #include #if defined(sleep) #undef sleep #endif #define sleep(n) (Sleep((n)*1000)) #else #include #endif /* nanosleep: function for high resolution sleeping */ #if defined(HAVE_NANOSLEEP) #include #endif /* usleep: deprecated, but useful if nanosleep is unavailable */ #if defined(HAVE_USLEEP) #include #endif #if !defined(HAVE_NANOSLEEP) && !defined(HAVE_USLEEP) #if !defined(_WIN32) #error "No function for high resolution timing available" #endif #endif /* stat: function to get status info on a file */ #if defined(HAVE__STAT) #define stat _stat #else #if !defined(HAVE_STAT) #error "No function to get status info one a file available" #endif #endif #include #include /* strdup: function to duplicate a string */ #if defined(HAVE__STRDUP) #define strdup _strdup #else #if !defined(HAVE_STRDUP) #error "No duplicate a string function available" #endif #endif #include /* iswspace: whitespace wide character function */ #if !defined(HAVE_ISWSPACE) #include #define iswspace isspace #else #if defined(HAVE_WCTYPE_H) #include #else #include #endif #endif /* access - system function to check user file permissions */ #if defined(HAVE__ACCESS) #include #define access _access #else #if !defined(HAVE_ACCESS) #error "No check user file access function available" #else #if defined(HAVE_UNISTD_H) #include #endif #endif #endif /* getopt - function to parse command-line options */ #if defined(HAVE_GETOPT) #if defined(HAVE_UNISTD_H) #include #endif #else #if !defined(_WIN32) #error "No parse command-line function available" #endif #endif /* getpid - system function to get process identification */ #if defined(HAVE__GETPID) #include #define getpid _getpid #else #if !defined(HAVE_GETPID) #error "No get process identification function available" #else #if defined(HAVE_UNISTD_H) #include #endif #endif #endif /* mkdir - system function to create a directory */ #if defined(HAVE__MKDIR) #include #define mkdir(path, mode) _mkdir(path) #else #if !defined(HAVE_MKDIR) #error "No create directory system function available" #else #include #include #if defined(__MINGW32__) || defined(__MINGW64__) #define mkdir(path, mode) mkdir(path) #endif #endif #endif /* open - system function to open a file */ #if defined(HAVE__OPEN) #include #define open _open #else #if !defined(HAVE_OPEN) #error "No open file system function available" #endif #endif #if defined(HAVE_FCNTL_H) #include #endif /* read - system function to read from a file descriptor */ #if defined(HAVE__READ) #include #define read _read #else #if !defined(HAVE_READ) #error "No read from file descriptor system function available" #else #if defined(HAVE_UNISTD_H) #include #endif #endif #endif /* write - system function to write to a file descriptor */ #if defined(HAVE__WRITE) #include #define write _write #else #if !defined(HAVE_WRITE) #error "No write to file descriptor system function available" #else #if defined(HAVE_UNISTD_H) #include #endif #endif #endif #if defined(_MSC_VER) typedef int IO_SIZE_T; typedef unsigned int IO_SSIZE_T; #else typedef size_t IO_SIZE_T; typedef ssize_t IO_SSIZE_T; #endif #if defined(_MSC_VER) #if !defined(F_OK) /* file exists */ #define F_OK 0 #endif #if !defined(W_OK) /* file has write permission */ #define W_OK 2 #endif #if !defined(R_OK) /* file has read permission */ #define R_OK 4 #endif #if !defined(X_OK) /* file has execute permission */ #define X_OK 6 #endif #endif #if defined(_MSC_VER) #define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask)) #define S_ISDIR(mode) _S_ISTYPE((mode), _S_IFDIR) #define S_ISREG(mode) _S_ISTYPE((mode), _S_IFREG) #endif /* fork - system function to create a child process */ #if defined(HAVE_FORK) #if defined(HAVE_UNISTD_H) #include #endif #endif /* alarm - function to set and alarm for delivering a signal */ #if defined(HAVE_ALARM) #if defined(HAVE_UNISTD_H) #include #endif #endif /* signal - signal handling function */ #if defined(HAVE_SIGNAL) #include #endif /* waitpid - system function waiting on a process */ #if defined(HAVE_WAITPID) #include #include #endif /* unlink - system function to delete a file */ #if defined(HAVE_UNLINK) #if defined(HAVE_UNISTD_H) #include #endif #endif /* gmtime_r - thread safe gmtime() really only needed on Unix */ #if !defined(HAVE_GMTIME_R) #if !defined(_WIN32) #error "No thread-safe gmtime function available" #endif /*on Windows there might be a macro called gmtime_r in pthread.h. don't use it.*/ #if defined(gmtime_r) #undef gmtime_r #endif /* FYI: The gmtime() in Microsoft's C library is MT-safe */ #define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0) #endif #include /* localtime_r - thread safe localtime() really only needed on Unix */ #if !defined(HAVE_LOCALTIME_R) #if !defined(_WIN32) #error "No thread-safe localtime function available" #endif /*on Windows there might be a macro called localtime_r in pthread.h. don't use it.*/ #if defined(localtime_r) #undef localtime_r #endif /* FYI: The localtime() in Microsoft's C library is MT-safe */ #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif #include /* define MAXPATHLEN */ #if defined(_WIN32) #include //for MAX_PATH #define MAXPATHLEN MAX_PATH #else #if defined(HAVE_SYS_PARAM_H) #include #endif #endif #if !defined(MAXPATHLEN) #define MAXPATHLEN 1024 #endif /* MIN macro */ #if !defined(MIN) #define MIN(a,b) (((a)<(b))?(a):(b)) #endif /* Unused argument macro */ #if !defined(_unused) #if defined(__LCLINT__) || defined(S_SPLINT_S) #define _unused(x) /*@unused@*/ x #else #define _unused(x) (void)x #endif #endif libical-2.0.0/debian/000077500000000000000000000000001264032652500143375ustar00rootroot00000000000000libical-2.0.0/debian/changelog000066400000000000000000000022261264032652500162130ustar00rootroot00000000000000libical (0.43-6) stable; urgency=high * new upstream release -- Wilfried Goesgens Sat, 13 Sep 2008 10:00:00 +0001 libical (0.31-4) stable; urgency=high * new release fixing a crash -- Wilfried Goesgens Mon, 17 Mar 2008 20:00:00 +0001 libical (0.30-1) unstable; urgency=low [ Wilfried Goesgens ] * remove CDBS * merge into upstream libical * merge in several patches roaming arround -- Wilfried Goesgens Wed, 30 Nov 2007 12:19:06 +0100 libical (0.26.6-1) unstable; urgency=low [ Fathi Boudra ] * Initial Debian release (Closes: #404862) * Remove dirs and README.Debian * Add soname patch * compat: bumped to 5 * control: * convert package to cdbs * add myself as uploader * bump Standards-Version to 3.7.2 * rewrite descriptions * copyright: complete rewrite [ Wilfried Goesgens ] * Update to aurore ical. -- Fathi Boudra Wed, 27 Dec 2006 12:19:06 +0100 libical (0.24-1) unstable; urgency=low * Initial release -- Wilfried Goesgens Fri, 22 Jul 2005 13:09:43 +0200 libical-2.0.0/debian/compat000066400000000000000000000000021264032652500155350ustar00rootroot000000000000005 libical-2.0.0/debian/control000066400000000000000000000047051264032652500157500ustar00rootroot00000000000000Source: libical Section: libs Priority: optional Maintainer: Wilfried Goesgens Uploaders: Fathi Boudra Build-Depends: debhelper (>= 5.0.42), autotools-dev, tzdata, swig, python-all-dev (>= 2.4.4), python-support (>= 0.5.6), python (>= 2.4.4) XS-Python-Version: all Standards-Version: 3.7.2 Homepage: http://freeassociation.sourceforge.net Package: libical-dev Section: libdevel Architecture: any Depends: ${misc:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation in C (development) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the libical development files. Package: libical0 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, tzdata Description: iCalendar library implementation in C (runtime) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the files necessary for running applications that use the libical library. Package: libical0-dbg Section: libs Priority: extra Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation in C (runtime) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the files necessary for running and debugging applications that use the libical library. Package: python-libical Section: python Architecture: any Depends: ${shlibs:Depends}, ${python:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation python language bindings libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the python language bindings. libical-2.0.0/debian/copyright000066400000000000000000000625261264032652500163050ustar00rootroot00000000000000This package was debianized by Fathi Boudra on Wed, 27 Dec 2006 12:19:06 +0100. It was downloaded from http://www.aurore.net/projects/libical/ This is a modified version of the original libical project from softwarestudio and the original author is Eric Busboom . Upstream Authors: John Gray Andrea Campi Omar Kilani Copyright for generated icalderivedproperties: (C) 1999 Eric Busboom Copyright for generated restrictionrecords and parameterrestrictions: (C) 1999 Graham Davison Copyright for sspm based on code from the mimelite distribution: (C) 1994 Gisle Hannemyr (C) 2000 Eric Busboom Copyright for snprintf: (C) 1997 Theo de Raadt Copyright for astime and caldate: (C) 1986-2000 Hiram Clawson Copyright for icalattach: (C) 2002 Andrea Campi Copyright for icaltimezone: (C) 2001 Damon Chaplin Copyright for icalarray: (C) 2001 Ximian Inc. astime and caldate license: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither name of The Museum of Hiram nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. snprintf license: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. sspm license: Permission is granted to hack, make and distribute copies of this program as long as this copyright notice is not removed. libical 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. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ MPL 1.0 license: MOZILLA PUBLIC LICENSE Version 1.0 ---------------- 1. Definitions. 1.1. ``Contributor'' means each entity that creates or contributes to the creation of Modifications. 1.2. ``Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. ``Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. ``Executable'' means Covered Code in any form other than Source Code. 1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. ``Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. ``License'' means this document. 1.9. ``Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.11. ``Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. ``You'' means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations. 2.2. Contributor Grant. Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and (b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled ``LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation (``Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the United States of America: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Santa Clara County, California, under the auspices of JAMS/EndDispute; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis. EXHIBIT A. ``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 ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________.'' LGPL license: This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL'. The Debian packaging is (C) 2006, Fathi Boudra and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. libical-2.0.0/debian/docs000066400000000000000000000000211264032652500152030ustar00rootroot00000000000000NEWS README TODO libical-2.0.0/debian/libical-dev.install000066400000000000000000000002431264032652500201010ustar00rootroot00000000000000usr/include usr/lib/libical.a usr/lib/libical.so usr/lib/libicalss.a usr/lib/libicalss.so usr/lib/libicalvcal.a usr/lib/libicalvcal.so usr/lib/pkgconfig/libical.pclibical-2.0.0/debian/libical0.install000066400000000000000000000000221264032652500174000ustar00rootroot00000000000000usr/lib/lib*.so.* libical-2.0.0/debian/python-libical.install000066400000000000000000000000231264032652500206400ustar00rootroot00000000000000usr/lib/pymodules/*libical-2.0.0/debian/rules000066400000000000000000000116761264032652500154270ustar00rootroot00000000000000#!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CFLAGS = -Wall -g EXTRA_ARGS= PROFILE_ARGS= # To enable debugging: export DEB_BUILD_OPTIONS="debug profiling threadoff" ifneq (,$(findstring profiling,$(DEB_BUILD_OPTIONS))) PROFILE_ARGS= --with-gprof endif ifneq (,$(findstring backtrace,$(DEB_BUILD_OPTIONS))) EXTRA_ARGS=--with-backtrace BTCFLAGS=-rdynamic endif ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 -ggdb -D_GNU_SOURCE -MD -MP -Wl,--as-needed -Wall -ansi else CFLAGS += -O2 endif # shared library versions, option 1 version=2.0.5 major=2 # option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so #version=`ls src/.libs/lib*.so.* | \ # awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` #major=`ls src/.libs/lib*.so.* | \ # awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` PYVERS=$(shell pyversions -vr) build: build-c $(PYVERS:%=build-python%/build-stamp) install: build install-c $(PYVERS:%=install-python%) clean: clean-c $(PYVERS:%=clean-python%) ### Python libraries build rules ### build-python%/configure-stamp: dh_testdir mkdir build-python$* cd build-python$* && \ PYTHON=/usr/bin/python$* CFLAGS="$(BTCFLAGS) $(CFLAGS)" ../configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --srcdir=.. \ --prefix=/usr \ --includedir="/usr/include" \ --mandir="/usr/share/man" \ --sysconfdir=/etc \ --localstatedir=/var \ $(EXTRA_ARGS) $(PROFILE_ARGS) \ --libexecdir="/usr/lib/libical" \ --enable-python touch $@ build-python%/build-stamp: build-c build-python%/configure-stamp dh_testdir # Trick into using already built build-c libs so we don't end up # building the same ical lib more than once. find "build-python$*/src" -maxdepth 1 -mindepth 1 | grep -v python$$ | xargs -r -t rm -rf find "build-c/src" -maxdepth 1 -mindepth 1 | grep -v python$$ | xargs -r -t -I{} ln -s "../../{}" "build-python$*/src" $(MAKE) -C build-python$*/src/python pyexecdir=/usr/lib/pymodules/python$* touch $@ install-python%: build-python%/build-stamp dh_testdir dh_testroot # dh_clean -k dh_installdirs # install with hack to move installed python libs to pymodule dir $(MAKE) -C build-python$*/src/python install pyexecdir=/usr/lib/pymodules/python$* DESTDIR=$(CURDIR)/debian/tmp && \ mv -i $(CURDIR)/debian/tmp/usr/lib/python$*/*/* $(CURDIR)/debian/tmp/usr/lib/pymodules/python$*/ clean-python%: # mkdir -p build-python$* && cd build-python$* dh_testdir # dh_testroot rm -rf build-python$* dh_prep ### C libraries build rules ### build-c/configure-stamp: configure #config.status: configure dh_testdir ifneq "$(wildcard /usr/share/misc/config.sub)" "" cp -f /usr/share/misc/config.sub config.sub endif ifneq "$(wildcard /usr/share/misc/config.guess)" "" cp -f /usr/share/misc/config.guess config.guess endif mkdir build-c cd build-c && \ CFLAGS="$(BTCFLAGS) $(CFLAGS)" ../configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ --includedir="/usr/include" \ --mandir="/usr/share/man" \ --sysconfdir=/etc \ --localstatedir=/var \ $(EXTRA_ARGS) $(PROFILE_ARGS) \ --libexecdir="/usr/lib/libical" touch $@ build-c: build-c/build-stamp build-c/build-stamp: build-c/configure-stamp dh_testdir # $(MAKE) clean $(MAKE) -C build-c touch $@ clean-c: dh_testdir dh_testroot rm -rf build-c dh_prep install-c: build-c dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) -C build-c DESTDIR=$(CURDIR)/debian/tmp install # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs dh_installexamples dh_install -s --sourcedir=debian/tmp # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip dh_compress dh_fixperms # dh_perl dh_pysupport # dh_makeshlibs dh_installdeb # dh_shlibdeps # We need to exclude dependency resolving for the python extension # module because if libical0 is installed but libical-dev is not # we get build errors. The lib in /usr/lib will be found first # but no .la will exist to get the dependency info from. Is there # a way to tell dh_shlibdeps to find the lib first in debian/tmp? dh_shlibdeps -XLibicalWrap # dh_shlibdeps -l$(CURDIR)/debian/tmp/usr/lib -- -v dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install libical-2.0.0/design-data/000077500000000000000000000000001264032652500152755ustar00rootroot00000000000000libical-2.0.0/design-data/CMakeLists.txt000066400000000000000000000000541264032652500200340ustar00rootroot00000000000000 ########### install files ############### libical-2.0.0/design-data/components.txt000066400000000000000000000004031264032652500202200ustar00rootroot00000000000000ANY VAGENDA VALARM VAVAILABILITY VCALENDAR VCAR VCOMMAND VEVENT VFREEBUSY VJOURNAL VQUERY VPOLL VSCHEDULE VTIMEZONE VTODO VVOTER X XAUDIOALARM XAVAILABLE XDAYLIGHTSAVINGSTIME XDISPLAYALARM XEMAILALARM XLICINVALID XMIMEPART XPROCEDUREALARM XSTANDARDTIME XVOTE libical-2.0.0/design-data/parameters.csv000066400000000000000000000071731264032652500201650ustar00rootroot00000000000000"#Name ","C icalparameter_kind Enum","C Type","Enumeration Values" "ALTREP","2","const char*", "CHARSET","3","const char*", "CN","4","const char*", "CUTYPE","5","icalparameter_cutype","X=20100;INDIVIDUAL;GROUP;RESOURCE;ROOM;UNKNOWN;NONE=20199" "DELEGATED-FROM","6","const char*", "DELEGATED-TO","7","const char*", "DIR","8","const char*", "ENCODING","10","icalparameter_encoding","X=20300;8BIT;BASE64;NONE=20399" "FBTYPE","11","icalparameter_fbtype","X=20400;FREE;BUSY;BUSY-UNAVAILABLE;BUSY-TENTATIVE;NONE=20499" "FMTTYPE","12","const char*", "LANGUAGE","14","const char*", "MEMBER","18","const char*", "#PARTSTAT:FAILED from draft-apthorp-ical-tasks",,, "PARTSTAT","20","icalparameter_partstat","X=20600;NEEDS-ACTION;ACCEPTED;DECLINED;TENTATIVE;DELEGATED;COMPLETED;INPROCESS;FAILED;NONE=20699" "RANGE","21","icalparameter_range","X=20700;THISANDPRIOR;THISANDFUTURE;NONE=20799" "RELATED","22","icalparameter_related","X=20800;START;END;NONE=20899" "RELTYPE","23","icalparameter_reltype","X=20900;PARENT;CHILD;SIBLING;POLL;NONE=20999" "ROLE","24","icalparameter_role","X=21100;CHAIR;REQ-PARTICIPANT;OPT-PARTICIPANT;NON-PARTICIPANT;NONE=21199" "RSVP","25","icalparameter_rsvp","X=21200;TRUE;FALSE;NONE=21299" "SENT-BY","26","const char*", "TZID","27","const char*", "VALUE","28","icalparameter_value","X=21600;BINARY;BOOLEAN;DATE;DURATION;FLOAT;INTEGER;PERIOD;RECUR;TEXT;URI;ERROR;DATE-TIME;UTC-OFFSET;CAL-ADDRESS;NONE=21699" "X","29","const char*", "X-LIC-ERRORTYPE","31","icalparameter_xlicerrortype","X=21800;COMPONENT-PARSE-ERROR;PROPERTY-PARSE-ERROR;PARAMETER-NAME-PARSE-ERROR;PARAMETER-VALUE-PARSE-ERROR;VALUE-PARSE-ERROR;INVALID-ITIP;UNKNOWN-VCAL-PROP-ERROR;MIME-PARSE-ERROR;VCAL-PROP-PARSE-ERROR;NONE=21899" "X-LIC-COMPARETYPE","30","icalparameter_xliccomparetype","X=21700;EQUAL;NOTEQUAL;LESS;GREATER;LESSEQUAL;GREATEREQUAL;REGEX;ISNULL;ISNOTNULL;NONE=21799" "#Parameters from Scheduling Extensions to CalDAV (RFC 6638)" "SCHEDULE-AGENT","34","icalparameter_scheduleagent","X=21300;SERVER;CLIENT;NONE=21399" "SCHEDULE-FORCE-SEND","35","icalparameter_scheduleforcesend","X=21400;REQUEST;REPLY;NONE=21499" "SCHEDULE-STATUS","36","const char*", "#CAP Parameters","Draft 8", "#this parameter should really be called ACTION, but this conflicts with the ACTION property" "ACTIONPARAM","1","icalparameter_action","X=20000;ASK;ABORT;NONE=20099" "ID","13","const char*", "ENABLE","9","icalparameter_enable","X=20200;TRUE;FALSE;NONE=20299" "LATENCY","15","const char*", "LOCAL","16","icalparameter_local","X=20500;TRUE;FALSE;NONE=20599" "LOCALIZE","17","const char*", "OPTIONS","19","const char*", "NO","32",, "#In practice any unknown paramater that is not an xparam is treated as an ianaparam" "IANA","33","const char*", "ANY","0",, "#VPOLL Parameters","draft-york-vpoll","PUBLIC-COMMENT and RESPONSE are deprecated" "PUBLIC-COMMENT","37","const char*", "RESPONSE","38","int", "REQUIRED","43","icalparameter_required","X=21000;TRUE;FALSE;NONE=21099" "STAY-INFORMED","39","icalparameter_stayinformed","X=21500;TRUE;FALSE;NONE=21599" "#CalDAV Managed Attachment Parameters","draft-daboo-caldav-attachments" "MANAGED-ID","40","const char*", "SIZE","41","const char*", "FILENAME","42","const char*", "#Task Extension Parameters","draft-apthorp-ical-tasks" "REASON","43","const char*", "MODIFIED","44","const char*", "SUBSTATE","45","icalparameter_substate",X=21900;OK;ERROR;SUSPENDED;NONE=21999", "#NOTE for updaters. Preserve the icalparameter_kind Enum values to aid forward compatibility" "# New Enum values for an existing icalparameter_kind should be inserted before the corresponding NONE value" "# New icalparamter_kind types should start their Enum value after the highest NONE value (currently 21999)" libical-2.0.0/design-data/params-in-prop.txt000066400000000000000000000044331264032652500207070ustar00rootroot00000000000000ACKNOWLEDGED X ACTION VALUE X ATTACH FMTTYPE ENCODING VALUE MANAGED-ID SIZE FILENAME X ATTENDEE CN CUTYPE DELEGATED-FROM DELEGATED-TO DIR LANGUAGE MEMBER MODIFIED PARTSTAT REASON ROLE RSVP SENT-BY SCHEDULE-AGENT SCHEDULE-FORCE-SEND SCHEDULE-STATUS SUBSTATE X CALSCALE X CATEGORIES LANGUAGE X CLASS X CMD ACTIONPARAM ID LATENCY LOCALIZE OPTIONS X COMMENT ALTREP LANGUAGE MODIFIED REASON 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 SCHEDULE-AGENT SCHEDULE-FORCE-SEND SCHEDULE-STATUS 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 LOCAL X STATUS MODIFIED REASON SUBSTATE X SUMMARY ALTREP LANGUAGE X TRANSP X TRIGGER ENABLE 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 EXPAND X BUSYTYPE X ACCEPT-RESPONSE X POLL-COMPLETION X POLL-ITEM-ID X POLL-MODE X POLL-PROPERTIES X POLL-WINNER X REPLY-URL REQUIRED X RESPONSE X VOTER CN CUTYPE DELEGATED-FROM DELEGATED-TO DIR LANGUAGE MEMBER ROLE RSVP SCHEDULE-AGENT SCHEDULE-FORCE-SEND SCHEDULE-STATUS SENT-BY STAY-INFORMED X libical-2.0.0/design-data/properties.csv000066400000000000000000000114141264032652500202070ustar00rootroot00000000000000,, "#Property Name","C icalproperty_kind Enum","libical Value type","iCalendar default value" "#iCalendar Properties","RFC 5545 Sections 3.7 and 3.8", "CALSCALE","8","TEXT","TEXT" "METHOD","48","METHOD","METHOD" "PRODID","57","TEXT","TEXT" "VERSION","89","TEXT","TEXT" "ATTACH","4","ATTACH","URI" "CATEGORIES","12","TEXT","TEXT" "CLASS","13","CLASS","CLASS" "COMMENT","15","TEXT","TEXT" "DESCRIPTION","29","TEXT","TEXT" "GEO","39","GEO","GEO" "LOCATION","43","TEXT","TEXT" "PERCENT-COMPLETE","54","INTEGER","INTEGER" "PRIORITY","56","INTEGER","INTEGER" "RESOURCES","71","TEXT","TEXT" "STATUS","76","STATUS","STATUS" "SUMMARY","78","TEXT","TEXT" "COMPLETED","16","DATE-TIME","DATE-TIME" "DTEND","30","DATE-TIME","DATE-TIME" "DUE","33","DATE-TIME","DATE-TIME" "DTSTART","32","DATE-TIME","DATE-TIME" "DURATION","34","DURATION","DURATION" "FREEBUSY","38","PERIOD","PERIOD" "TRANSP","80","TRANSP","TRANSP" "TZID","82","TEXT","TEXT" "TZNAME","83","TEXT","TEXT" "TZOFFSETFROM","84","UTC-OFFSET","UTC-OFFSET" "TZOFFSETTO","85","UTC-OFFSET","UTC-OFFSET" "TZURL","86","URI","URI" "ATTENDEE","5","CAL-ADDRESS","CAL-ADDRESS" "CONTACT","18","TEXT","TEXT" "ORGANIZER","52","CAL-ADDRESS","CAL-ADDRESS" "RECURRENCE-ID","66","DATE-TIME","DATE-TIME" "RELATED-TO","67","TEXT","TEXT" "URL","88","URI","URI" "UID","87","TEXT","TEXT" "EXDATE","35","DATE-TIME","DATE-TIME" "RDATE","62","DATE-TIME-PERIOD","DATE-TIME" "RRULE","73","RECUR","RECUR" "ACTION","2","ACTION","ACTION" "REPEAT","69","INTEGER","INTEGER" "TRIGGER","81","TRIGGER","DURATION" "CREATED","19","DATE-TIME","DATE-TIME" "DTSTAMP","31","DATE-TIME","DATE-TIME" "LAST-MODIFIED","42","DATE-TIME","DATE-TIME" "SEQUENCE","75","INTEGER","INTEGER" "REQUEST-STATUS","70","REQUEST-STATUS","REQUEST-STATUS" "X","90","X","X" "#Deprecated RFC 2445 Properties","See RFC 5545 Section A.3", "EXRULE","37","RECUR","RECUR" "#CAP Properties","RFC 4324 Section 2.1.2", ,"FIXME","Should be BOOLEAN" "ALLOW-CONFLICT","3","TEXT","TEXT" "CAP-VERSION","9","TEXT","TEXT" "CAR-LEVEL","10","CAR-LEVEL","CAR-LEVEL" "COMPONENTS","17","TEXT","TEXT" "CSID","20","URI","URI" "CALID","6","TEXT","TEXT" "CALMASTER","7","TEXT","TEXT" "CARID","11","TEXT","TEXT" "CMD","14","CMD","CMD" "DECREED","23","TEXT","TEXT" "DEFAULT-CHARSET","24","TEXT","TEXT" "DEFAULT-LOCALE","25","TEXT","TEXT" "DEFAULT-TZID","26","TEXT","TEXT" "DEFAULT-VCARS","27","TEXT","TEXT" ,"FIXME","Should be UPN-FILTER" "DENY","28","TEXT","TEXT" ,"FIXME","Should be BOOLEAN" "EXPAND","36","INTEGER","INTEGER" ,"FIXME","Should be UPN-FILTER" "GRANT","40","TEXT","TEXT" "ITIP-VERSION","41","TEXT","TEXT" "MAXDATE","45","DATE-TIME","DATE-TIME" "MAX-COMPONENT-SIZE","44","INTEGER","INTEGER" "MINDATE","49","DATE-TIME","DATE-TIME" "MULTIPART","50","TEXT","TEXT" "NAME","51","TEXT","TEXT" "OWNER","53","TEXT","TEXT" "PERMISSION","55","TEXT","TEXT" "QUERY","58","QUERY","QUERY" "QUERYID","60","TEXT","TEXT" "QUERY-LEVEL","59","QUERY-LEVEL","QUERY-LEVEL" "RECUR-ACCEPTED","63","TEXT","TEXT" "RECUR-EXPAND","64","TEXT","TEXT" "RECUR-LIMIT","65","TEXT","TEXT" "RESTRICTION","72","QUERY","QUERY" "SCOPE","74","TEXT","TEXT" "STORES-EXPANDED","77","TEXT","TEXT" "TARGET","79","CAL-ADDRESS","CAL-ADDRESS" "#Miscellaneous Properties","Origin Unknown", "MAXRESULTS","46","INTEGER","INTEGER" "MAXRESULTSSIZE","47","INTEGER","INTEGER" "QUERYNAME","61","TEXT","TEXT" "RELCALID","68","TEXT","TEXT" "DATE-MAX","21","DATE-TIME","DATE-TIME" "DATE-MIN","22","DATE-TIME","DATE-TIME" "#libical Internal Properties",, "X-LIC-ERROR","93","TEXT","TEXT" "X-LIC-CLUSTERCOUNT","92","STRING","STRING" "X-LIC-MIMECONTENTTYPE","96","STRING","STRING" "X-LIC-MIMECHARSET","94","STRING","STRING" "X-LIC-MIMEENCODING","97","STRING","STRING" "X-LIC-MIMEOPTINFO","99","STRING","STRING" "X-LIC-MIMECID","95","STRING","STRING" "X-LIC-MIMEFILENAME","98","STRING","STRING" "X-LIC-CLASS","91","X-LIC-CLASS","X-LIC-CLASS" "ANY","0","NO","NO" "NO","100","NO","NO" "#VALARM Extension Properties","draft-daboo-valarm-extensions Section 13.1", "ACKNOWLEDGED","1","DATE-TIME","DATE-TIME" "#VAVAILABILITY Properties","draft-daboo-calendar-availability", "BUSYTYPE","101","BUSYTYPE","BUSYTYPE" "#VPOLL Properties","draft-york-vpoll", "ACCEPT-RESPONSE","102","TEXT,"TEXT" "POLL-COMPLETION","110","POLLCOMPLETION,"POLLCOMPLETION" "POLL-ITEM-ID","103","INTEGER,"INTEGER" "POLL-MODE","104","POLLMODE,"POLLMODE" "POLL-PROPERTIES","105","TEXT,"TEXT" "POLL-WINNER","106","INTEGER,"INTEGER" "REPLY-URL","111","URI,"URI" "RESPONSE","112","INTEGER,"INTEGER" "VOTER","107","CAL-ADDRESS,"CAL-ADDRESS" "#TZdist Properties","draft-ietf-tzdist-service", "TZID-ALIAS-OF","108","TEXT","TEXT" "TZUNTIL","109","DATE-TIME","DATE-TIME" "#Task Extension Properties","draft-apthorp-ical-tasks", "ESTIMATED-DURATION","113","DURATION","DURATION" "TASK-MODE","114","TASKMODE","TASKMODE" "#NOTE for updaters. Preserve the icalproperty_kind Enum values to aid forward compatibility" libical-2.0.0/design-data/restrictions.csv000066400000000000000000002020441264032652500205440ustar00rootroot00000000000000# Method, Target component, Property, Sub-component, Restriction PUBLISH,VEVENT,NONE,NONE,ONEPLUS PUBLISH,VEVENT,DTSTAMP,NONE,ONE PUBLISH,VEVENT,DTSTART,NONE,ONE PUBLISH,VEVENT,ORGANIZER,NONE,ONE PUBLISH,VEVENT,SUMMARY,NONE,ONE PUBLISH,VEVENT,UID,NONE,ONE PUBLISH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring PUBLISH,VEVENT,SEQUENCE,NONE,ZEROORONE PUBLISH,VEVENT,ATTACH,NONE,ZEROPLUS PUBLISH,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard PUBLISH,VEVENT,CLASS,NONE,ZEROORONE PUBLISH,VEVENT,COMMENT,NONE,ZEROORONE PUBLISH,VEVENT,CONTACT,NONE,ZEROPLUS PUBLISH,VEVENT,CREATED,NONE,ZEROORONE PUBLISH,VEVENT,DESCRIPTION,NONE,ZEROORONE PUBLISH,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration PUBLISH,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend PUBLISH,VEVENT,EXDATE,NONE,ZEROPLUS PUBLISH,VEVENT,EXRULE,NONE,ZEROPLUS PUBLISH,VEVENT,GEO,NONE,ZEROORONE PUBLISH,VEVENT,LASTMODIFIED,NONE,ZEROORONE PUBLISH,VEVENT,LOCATION,NONE,ZEROORONE PUBLISH,VEVENT,PRIORITY,NONE,ZEROORONE PUBLISH,VEVENT,RDATE,NONE,ZEROPLUS PUBLISH,VEVENT,RELATEDTO,NONE,ZEROPLUS PUBLISH,VEVENT,RESOURCES,NONE,ZEROORONE PUBLISH,VEVENT,RRULE,NONE,ZEROPLUS PUBLISH,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel PUBLISH,VEVENT,TRANSP,NONE,ZEROORONE PUBLISH,VEVENT,URL,NONE,ZEROORONE PUBLISH,VEVENT,X,NONE,ZEROPLUS PUBLISH,VEVENT,ATTENDEE,NONE,ZERO PUBLISH,VEVENT,REQUESTSTATUS,NONE,ZERO PUBLISH,VEVENT,NONE,VALARM,ZEROPLUS PUBLISH,VEVENT,NONE,VFREEBUSY,ZERO PUBLISH,VEVENT,NONE,VJOURNAL,ZERO PUBLISH,VEVENT,NONE,VTODO,ZERO PUBLISH,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref PUBLISH,VEVENT,NONE,X,ZEROPLUS PUBLISH,VEVENT,RELCALID,NONE,ZEROORONE REQUEST,VEVENT,NONE,NONE,ONEPLUS REQUEST,VEVENT,ATTENDEE,NONE,ONEPLUS REQUEST,VEVENT,DTSTAMP,NONE,ONE REQUEST,VEVENT,DTSTART,NONE,ONE REQUEST,VEVENT,ORGANIZER,NONE,ONE REQUEST,VEVENT,SEQUENCE,NONE,ZEROORONE REQUEST,VEVENT,SUMMARY,NONE,ONE REQUEST,VEVENT,UID,NONE,ONE REQUEST,VEVENT,ATTACH,NONE,ZEROPLUS REQUEST,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard REQUEST,VEVENT,CLASS,NONE,ZEROORONE REQUEST,VEVENT,COMMENT,NONE,ZEROORONE REQUEST,VEVENT,CONTACT,NONE,ZEROPLUS REQUEST,VEVENT,CREATED,NONE,ZEROORONE REQUEST,VEVENT,DESCRIPTION,NONE,ZEROORONE REQUEST,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration REQUEST,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend REQUEST,VEVENT,EXDATE,NONE,ZEROPLUS REQUEST,VEVENT,EXRULE,NONE,ZEROPLUS REQUEST,VEVENT,GEO,NONE,ZEROORONE REQUEST,VEVENT,LASTMODIFIED,NONE,ZEROORONE REQUEST,VEVENT,LOCATION,NONE,ZEROORONE REQUEST,VEVENT,PRIORITY,NONE,ZEROORONE REQUEST,VEVENT,RDATE,NONE,ZEROPLUS REQUEST,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REQUEST,VEVENT,RELATEDTO,NONE,ZEROPLUS REQUEST,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS REQUEST,VEVENT,RESOURCES,NONE,ZEROORONE REQUEST,VEVENT,RRULE,NONE,ZEROPLUS REQUEST,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf REQUEST,VEVENT,TRANSP,NONE,ZEROORONE REQUEST,VEVENT,URL,NONE,ZEROORONE REQUEST,VEVENT,X,NONE,ZEROPLUS REQUEST,VEVENT,NONE,VALARM,ZEROPLUS REQUEST,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref REQUEST,VEVENT,NONE,X,ZEROPLUS REQUEST,VEVENT,NONE,VFREEBUSY,ZERO REQUEST,VEVENT,NONE,VJOURNAL,ZERO REQUEST,VEVENT,NONE,VTODO,ZERO REQUEST,VEVENT,RELCALID,NONE,ZEROORONE REPLY,VEVENT,NONE,NONE,ONEPLUS REPLY,VEVENT,ATTENDEE,NONE,ONE REPLY,VEVENT,DTSTAMP,NONE,ONE REPLY,VEVENT,ORGANIZER,NONE,ONE REPLY,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REPLY,VEVENT,UID,NONE,ONE REPLY,VEVENT,SEQUENCE,NONE,ZEROORONE REPLY,VEVENT,ATTACH,NONE,ZEROPLUS REPLY,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard REPLY,VEVENT,CLASS,NONE,ZEROORONE REPLY,VEVENT,COMMENT,NONE,ZEROORONE REPLY,VEVENT,CONTACT,NONE,ZEROPLUS REPLY,VEVENT,CREATED,NONE,ZEROORONE REPLY,VEVENT,DESCRIPTION,NONE,ZEROORONE REPLY,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration REPLY,VEVENT,DTSTART,NONE,ZEROORONE REPLY,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend REPLY,VEVENT,EXDATE,NONE,ZEROPLUS REPLY,VEVENT,EXRULE,NONE,ZEROPLUS REPLY,VEVENT,GEO,NONE,ZEROORONE REPLY,VEVENT,LASTMODIFIED,NONE,ZEROORONE REPLY,VEVENT,LOCATION,NONE,ZEROORONE REPLY,VEVENT,PRIORITY,NONE,ZEROORONE REPLY,VEVENT,RDATE,NONE,ZEROPLUS REPLY,VEVENT,RELATEDTO,NONE,ZEROPLUS REPLY,VEVENT,RESOURCES,NONE,ZEROORONE REPLY,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS REPLY,VEVENT,RRULE,NONE,ZEROPLUS REPLY,VEVENT,STATUS,NONE,ZEROORONE REPLY,VEVENT,SUMMARY,NONE,ZEROORONE REPLY,VEVENT,TRANSP,NONE,ZEROORONE REPLY,VEVENT,URL,NONE,ZEROORONE REPLY,VEVENT,X,NONE,ZEROPLUS REPLY,VEVENT,NONE,VTIMEZONE,ZEROORONE,must_if_tz_ref REPLY,VEVENT,NONE,X,ZEROPLUS REPLY,VEVENT,NONE,VALARM,ZERO REPLY,VEVENT,NONE,VFREEBUSY,ZERO REPLY,VEVENT,NONE,VJOURNAL,ZERO REPLY,VEVENT,NONE,VTODO,ZERO REPLY,VEVENT,RELCALID,NONE,ZEROORONE ADD,VEVENT,NONE,NONE,ONE ADD,VEVENT,DTSTAMP,NONE,ONE ADD,VEVENT,DTSTART,NONE,ONE ADD,VEVENT,ORGANIZER,NONE,ONE ADD,VEVENT,SEQUENCE,NONE,ONE ADD,VEVENT,SUMMARY,NONE,ONE ADD,VEVENT,UID,NONE,ONE ADD,VEVENT,ATTACH,NONE,ZEROPLUS ADD,VEVENT,ATTENDEE,NONE,ZEROPLUS ADD,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard ADD,VEVENT,CLASS,NONE,ZEROORONE ADD,VEVENT,COMMENT,NONE,ZEROORONE ADD,VEVENT,CONTACT,NONE,ZEROPLUS ADD,VEVENT,CREATED,NONE,ZEROORONE ADD,VEVENT,DESCRIPTION,NONE,ZEROORONE ADD,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration ADD,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend ADD,VEVENT,EXDATE,NONE,ZEROPLUS ADD,VEVENT,EXRULE,NONE,ZEROPLUS ADD,VEVENT,GEO,NONE,ZEROORONE ADD,VEVENT,LASTMODIFIED,NONE,ZEROORONE ADD,VEVENT,LOCATION,NONE,ZEROORONE ADD,VEVENT,PRIORITY,NONE,ZEROORONE ADD,VEVENT,RDATE,NONE,ZEROPLUS ADD,VEVENT,RELATEDTO,NONE,ZEROPLUS ADD,VEVENT,RESOURCES,NONE,ZEROORONE ADD,VEVENT,RRULE,NONE,ZEROPLUS ADD,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf ADD,VEVENT,TRANSP,NONE,ZEROORONE ADD,VEVENT,URL,NONE,ZEROORONE ADD,VEVENT,X,NONE,ZEROPLUS ADD,VEVENT,RECURRENCEID,NONE,ZERO,must_be_recurring ADD,VEVENT,REQUESTSTATUS,NONE,ZERO ADD,VEVENT,NONE,VALARM,ZEROPLUS ADD,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref ADD,VEVENT,NONE,X,ZEROPLUS ADD,VEVENT,NONE,VFREEBUSY,ZERO ADD,VEVENT,NONE,VTODO,ZERO ADD,VEVENT,NONE,VJOURNAL,ZERO ADD,VEVENT,RELCALID,NONE,ZEROORONE CANCEL,VEVENT,NONE,NONE,ONEPLUS CANCEL,VEVENT,ATTENDEE,NONE,ZEROPLUS CANCEL,VEVENT,DTSTAMP,NONE,ONE CANCEL,VEVENT,ORGANIZER,NONE,ONE CANCEL,VEVENT,SEQUENCE,NONE,ONE CANCEL,VEVENT,UID,NONE,ONE CANCEL,VEVENT,COMMENT,NONE,ZEROORONE CANCEL,VEVENT,ATTACH,NONE,ZEROPLUS CANCEL,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard CANCEL,VEVENT,CLASS,NONE,ZEROORONE CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS CANCEL,VEVENT,CREATED,NONE,ZEROORONE CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE ,no_duration CANCEL,VEVENT,DTSTART,NONE,ZEROORONE CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS CANCEL,VEVENT,EXRULE,NONE,ZEROPLUS CANCEL,VEVENT,GEO,NONE,ZEROORONE CANCEL,VEVENT,LASTMODIFIED,NONE,ZEROORONE CANCEL,VEVENT,LOCATION,NONE,ZEROORONE CANCEL,VEVENT,PRIORITY,NONE,ZEROORONE CANCEL,VEVENT,RDATE,NONE,ZEROPLUS CANCEL,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE CANCEL,VEVENT,RRULE,NONE,ZEROPLUS CANCEL,VEVENT,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee CANCEL,VEVENT,SUMMARY,NONE,ZEROORONE CANCEL,VEVENT,TRANSP,NONE,ZEROORONE CANCEL,VEVENT,URL,NONE,ZEROORONE CANCEL,VEVENT,X,NONE,ZEROPLUS CANCEL,VEVENT,REQUESTSTATUS,NONE,ZERO CANCEL,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref CANCEL,VEVENT,NONE,X,ZEROPLUS CANCEL,VEVENT,NONE,VTODO,ZERO CANCEL,VEVENT,NONE,VJOURNAL,ZERO CANCEL,VEVENT,NONE,VFREEBUSY,ZERO CANCEL,VEVENT,NONE,VALARM,ZERO CANCEL,VEVENT,RELCALID,NONE,ZEROORONE REFRESH,VEVENT,NONE,NONE,ONE REFRESH,VEVENT,ATTENDEE,NONE,ONE REFRESH,VEVENT,DTSTAMP,NONE,ONE REFRESH,VEVENT,ORGANIZER,NONE,ONE REFRESH,VEVENT,UID,NONE,ONE REFRESH,VEVENT,COMMENT,NONE,ZEROORONE REFRESH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REFRESH,VEVENT,X,NONE,ZEROPLUS REFRESH,VEVENT,ATTACH,NONE,ZERO REFRESH,VEVENT,CATEGORIES,NONE,ZERO REFRESH,VEVENT,CLASS,NONE,ZERO REFRESH,VEVENT,CONTACT,NONE,ZERO REFRESH,VEVENT,CREATED,NONE,ZERO REFRESH,VEVENT,DESCRIPTION,NONE,ZERO REFRESH,VEVENT,DTEND,NONE,ZERO REFRESH,VEVENT,DTSTART,NONE,ZERO REFRESH,VEVENT,DURATION,NONE,ZERO REFRESH,VEVENT,EXDATE,NONE,ZERO REFRESH,VEVENT,EXRULE,NONE,ZERO REFRESH,VEVENT,GEO,NONE,ZERO REFRESH,VEVENT,LASTMODIFIED,NONE,ZERO REFRESH,VEVENT,LOCATION,NONE,ZERO REFRESH,VEVENT,PRIORITY,NONE,ZERO REFRESH,VEVENT,RDATE,NONE,ZERO REFRESH,VEVENT,RELATEDTO,NONE,ZERO REFRESH,VEVENT,REQUESTSTATUS,NONE,ZERO REFRESH,VEVENT,RESOURCES,NONE,ZERO REFRESH,VEVENT,RRULE,NONE,ZERO REFRESH,VEVENT,SEQUENCE,NONE,ZERO REFRESH,VEVENT,STATUS,NONE,ZERO REFRESH,VEVENT,SUMMARY,NONE,ZERO REFRESH,VEVENT,TRANSP,NONE,ZERO REFRESH,VEVENT,URL,NONE,ZERO REFRESH,VEVENT,NONE,X,ZEROPLUS REFRESH,VEVENT,NONE,VTODO,ZERO REFRESH,VEVENT,NONE,VJOURNAL,ZERO REFRESH,VEVENT,NONE,VFREEBUSY,ZERO REFRESH,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref REFRESH,VEVENT,NONE,VALARM,ZERO REFRESH,VEVENT,RELCALID,NONE,ZEROORONE COUNTER,VEVENT,NONE,NONE,ONE COUNTER,VEVENT,DTSTAMP,NONE,ONE COUNTER,VEVENT,DTSTART,NONE,ONE COUNTER,VEVENT,ORGANIZER,NONE,ONE COUNTER,VEVENT,SEQUENCE,NONE,ONE COUNTER,VEVENT,SUMMARY,NONE,ONE COUNTER,VEVENT,UID,NONE,ONE COUNTER,VEVENT,ATTACH,NONE,ZEROPLUS COUNTER,VEVENT,ATTENDEE,NONE,ZEROPLUS COUNTER,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard COUNTER,VEVENT,CLASS,NONE,ZEROORONE COUNTER,VEVENT,COMMENT,NONE,ZEROORONE COUNTER,VEVENT,CONTACT,NONE,ZEROPLUS COUNTER,VEVENT,CREATED,NONE,ZEROORONE COUNTER,VEVENT,DESCRIPTION,NONE,ZEROORONE COUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration COUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend COUNTER,VEVENT,EXDATE,NONE,ZEROPLUS COUNTER,VEVENT,EXRULE,NONE,ZEROPLUS COUNTER,VEVENT,GEO,NONE,ZEROORONE COUNTER,VEVENT,LASTMODIFIED,NONE,ZEROORONE COUNTER,VEVENT,LOCATION,NONE,ZEROORONE COUNTER,VEVENT,PRIORITY,NONE,ZEROORONE COUNTER,VEVENT,RDATE,NONE,ZEROPLUS COUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring COUNTER,VEVENT,RELATEDTO,NONE,ZEROPLUS COUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS COUNTER,VEVENT,RESOURCES,NONE,ZEROORONE COUNTER,VEVENT,RRULE,NONE,ZEROPLUS COUNTER,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel COUNTER,VEVENT,TRANSP,NONE,ZEROORONE COUNTER,VEVENT,URL,NONE,ZEROORONE COUNTER,VEVENT,X,NONE,ZEROPLUS COUNTER,VEVENT,NONE,VALARM,ZEROPLUS COUNTER,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref COUNTER,VEVENT,NONE,X,ZEROPLUS COUNTER,VEVENT,NONE,VTODO,ZERO COUNTER,VEVENT,NONE,VJOURNAL,ZERO COUNTER,VEVENT,NONE,VFREEBUSY,ZERO COUNTER,VEVENT,RELCALID,NONE,ZEROORONE DECLINECOUNTER,VEVENT,NONE,NONE,ONE DECLINECOUNTER,VEVENT,DTSTAMP,NONE,ONE DECLINECOUNTER,VEVENT,ORGANIZER,NONE,ONE DECLINECOUNTER,VEVENT,UID,NONE,ONE DECLINECOUNTER,VEVENT,COMMENT,NONE,ZEROORONE DECLINECOUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring DECLINECOUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS DECLINECOUNTER,VEVENT,SEQUENCE,NONE,ZERO DECLINECOUNTER,VEVENT,X,NONE,ZEROPLUS DECLINECOUNTER,VEVENT,ATTACH,NONE,ZERO DECLINECOUNTER,VEVENT,ATTENDEE,NONE,ZERO DECLINECOUNTER,VEVENT,CATEGORIES,NONE,ZERO DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO DECLINECOUNTER,VEVENT,GEO,NONE,ZERO DECLINECOUNTER,VEVENT,LASTMODIFIED,NONE,ZERO DECLINECOUNTER,VEVENT,LOCATION,NONE,ZERO DECLINECOUNTER,VEVENT,PRIORITY,NONE,ZERO DECLINECOUNTER,VEVENT,RDATE,NONE,ZERO DECLINECOUNTER,VEVENT,RELATEDTO,NONE,ZERO DECLINECOUNTER,VEVENT,RESOURCES,NONE,ZERO DECLINECOUNTER,VEVENT,RRULE,NONE,ZERO DECLINECOUNTER,VEVENT,STATUS,NONE,ZERO DECLINECOUNTER,VEVENT,SUMMARY,NONE,ZERO DECLINECOUNTER,VEVENT,TRANSP,NONE,ZERO DECLINECOUNTER,VEVENT,URL,NONE,ZERO DECLINECOUNTER,VEVENT,NONE,X,ZEROPLUS DECLINECOUNTER,VEVENT,NONE,VTODO,ZERO DECLINECOUNTER,VEVENT,NONE,VJOURNAL,ZERO DECLINECOUNTER,VEVENT,NONE,VFREEBUSY,ZERO DECLINECOUNTER,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO DECLINECOUNTER,VEVENT,RELCALID,NONE,ZEROORONE PUBLISH,VFREEBUSY,NONE,NONE,ONEPLUS PUBLISH,VFREEBUSY,DTSTAMP,NONE,ONE PUBLISH,VFREEBUSY,DTSTART,NONE,ONE PUBLISH,VFREEBUSY,DTEND,NONE,ONE PUBLISH,VFREEBUSY,FREEBUSY,NONE,ZEROPLUS PUBLISH,VFREEBUSY,ORGANIZER,NONE,ONE PUBLISH,VFREEBUSY,COMMENT,NONE,ZEROPLUS PUBLISH,VFREEBUSY,CONTACT,NONE,ZEROORONE 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,ONE PUBLISH,VFREEBUSY,NONE,X,ZEROPLUS PUBLISH,VFREEBUSY,NONE,VEVENT,ZERO PUBLISH,VFREEBUSY,NONE,VTODO,ZERO PUBLISH,VFREEBUSY,NONE,VJOURNAL,ZERO PUBLISH,VFREEBUSY,NONE,VTIMEZONE,ZERO,must_if_tz_ref PUBLISH,VFREEBUSY,NONE,VALARM,ZERO REQUEST,VFREEBUSY,NONE,NONE,ONE REQUEST,VFREEBUSY,ATTENDEE,NONE,ONEPLUS REQUEST,VFREEBUSY,DTEND,NONE,ONE REQUEST,VFREEBUSY,DTSTAMP,NONE,ONE REQUEST,VFREEBUSY,DTSTART,NONE,ONE REQUEST,VFREEBUSY,ORGANIZER,NONE,ONE REQUEST,VFREEBUSY,UID,NONE,ONE REQUEST,VFREEBUSY,COMMENT,NONE,ZEROPLUS REQUEST,VFREEBUSY,CONTACT,NONE,ZEROORONE 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,ZEROPLUS REPLY,VFREEBUSY,ORGANIZER,NONE,ONE REPLY,VFREEBUSY,UID,NONE,ONE REPLY,VFREEBUSY,COMMENT,NONE,ZEROPLUS REPLY,VFREEBUSY,CONTACT,NONE,ZEROORONE REPLY,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS REPLY,VFREEBUSY,URL,NONE,ZEROORONE REPLY,VFREEBUSY,X,NONE,ZEROPLUS REPLY,VFREEBUSY,DURATION,NONE,ZERO REPLY,VFREEBUSY,SEQUENCE,NONE,ZERO REPLY,VFREEBUSY,NONE,X,ZEROPLUS REPLY,VFREEBUSY,NONE,VALARM,ZERO REPLY,VFREEBUSY,NONE,VEVENT,ZERO REPLY,VFREEBUSY,NONE,VTODO,ZERO REPLY,VFREEBUSY,NONE,VJOURNAL,ZERO REPLY,VFREEBUSY,NONE,VTIMEZONE,ZERO PUBLISH,VTODO,NONE,NONE,ONEPLUS PUBLISH,VTODO,DTSTAMP,NONE,ONE PUBLISH,VTODO,DTSTART,NONE,ONE PUBLISH,VTODO,ORGANIZER,NONE,ONE PUBLISH,VTODO,PRIORITY,NONE,ONE PUBLISH,VTODO,SEQUENCE,NONE,ZEROORONE PUBLISH,VTODO,SUMMARY,NONE,ONE PUBLISH,VTODO,UID,NONE,ONE PUBLISH,VTODO,ATTACH,NONE,ZEROPLUS PUBLISH,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard PUBLISH,VTODO,CLASS,NONE,ZEROORONE PUBLISH,VTODO,COMMENT,NONE,ZEROORONE PUBLISH,VTODO,CONTACT,NONE,ZEROPLUS PUBLISH,VTODO,CREATED,NONE,ZEROORONE PUBLISH,VTODO,DESCRIPTION,NONE,ZEROORONE PUBLISH,VTODO,DUE,NONE,ZEROORONE PUBLISH,VTODO,DURATION,NONE,ZEROORONE PUBLISH,VTODO,EXDATE,NONE,ZEROPLUS PUBLISH,VTODO,EXRULE,NONE,ZEROPLUS PUBLISH,VTODO,GEO,NONE,ZEROORONE PUBLISH,VTODO,LASTMODIFIED,NONE,ZEROORONE PUBLISH,VTODO,LOCATION,NONE,ZEROORONE PUBLISH,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE PUBLISH,VTODO,RDATE,NONE,ZEROPLUS PUBLISH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring PUBLISH,VTODO,RELATEDTO,NONE,ZEROPLUS PUBLISH,VTODO,RESOURCES,NONE,ZEROORONE PUBLISH,VTODO,RRULE,NONE,ZEROPLUS PUBLISH,VTODO,STATUS,NONE,ZEROORONE PUBLISH,VTODO,URL,NONE,ZEROORONE PUBLISH,VTODO,X,NONE,ZEROPLUS PUBLISH,VTODO,ATTENDEE,NONE,ZERO PUBLISH,VTODO,REQUESTSTATUS,NONE,ZERO PUBLISH,VTODO,NONE,VTIMEZONE,ZEROPLUS PUBLISH,VTODO,NONE,VALARM,ZEROPLUS PUBLISH,VTODO,NONE,X,ZEROPLUS PUBLISH,VTODO,NONE,VFREEBUSY,ZERO PUBLISH,VTODO,NONE,VEVENT,ZERO PUBLISH,VTODO,NONE,VJOURNAL,ZERO PUBLISH,VTODO,RELCALID,NONE,ZEROORONE REQUEST,VTODO,NONE,NONE,ONEPLUS REQUEST,VTODO,ATTENDEE,NONE,ONEPLUS REQUEST,VTODO,DTSTAMP,NONE,ONE REQUEST,VTODO,DTSTART,NONE,ONE REQUEST,VTODO,ORGANIZER,NONE,ONE REQUEST,VTODO,PRIORITY,NONE,ONE REQUEST,VTODO,SEQUENCE,NONE,ZEROORONE REQUEST,VTODO,SUMMARY,NONE,ONE REQUEST,VTODO,UID,NONE,ONE REQUEST,VTODO,ATTACH,NONE,ZEROPLUS REQUEST,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard REQUEST,VTODO,CLASS,NONE,ZEROORONE REQUEST,VTODO,COMMENT,NONE,ZEROORONE REQUEST,VTODO,CONTACT,NONE,ZEROPLUS REQUEST,VTODO,CREATED,NONE,ZEROORONE REQUEST,VTODO,DESCRIPTION,NONE,ZEROORONE REQUEST,VTODO,DUE,NONE,ZEROORONE REQUEST,VTODO,DURATION,NONE,ZEROORONE REQUEST,VTODO,EXDATE,NONE,ZEROPLUS REQUEST,VTODO,EXRULE,NONE,ZEROPLUS REQUEST,VTODO,GEO,NONE,ZEROORONE REQUEST,VTODO,LASTMODIFIED,NONE,ZEROORONE REQUEST,VTODO,LOCATION,NONE,ZEROORONE REQUEST,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE REQUEST,VTODO,RDATE,NONE,ZEROPLUS REQUEST,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS REQUEST,VTODO,RESOURCES,NONE,ZEROORONE REQUEST,VTODO,RRULE,NONE,ZEROPLUS REQUEST,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process REQUEST,VTODO,URL,NONE,ZEROORONE REQUEST,VTODO,X,NONE,ZEROPLUS REQUEST,VTODO,REQUESTSTATUS,NONE,ZERO REQUEST,VTODO,NONE,VALARM,ZEROPLUS REQUEST,VTODO,NONE,VTIMEZONE,ZEROPLUS REQUEST,VTODO,NONE,X,ZEROPLUS REQUEST,VTODO,NONE,VEVENT,ZERO REQUEST,VTODO,NONE,VFREEBUSY,ZERO REQUEST,VTODO,NONE,VJOURNAL,ZERO REQUEST,VTODO,RELCALID,NONE,ZEROORONE REPLY,VTODO,NONE,NONE,ONEPLUS REPLY,VTODO,ATTENDEE,NONE,ONEPLUS REPLY,VTODO,DTSTAMP,NONE,ONE REPLY,VTODO,ORGANIZER,NONE,ONE REPLY,VTODO,REQUESTSTATUS,NONE,ONEPLUS REPLY,VTODO,UID,NONE,ONE REPLY,VTODO,ATTACH,NONE,ZEROPLUS REPLY,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard REPLY,VTODO,CLASS,NONE,ZEROORONE REPLY,VTODO,COMMENT,NONE,ZEROORONE REPLY,VTODO,CONTACT,NONE,ZEROPLUS REPLY,VTODO,CREATED,NONE,ZEROORONE REPLY,VTODO,DESCRIPTION,NONE,ZEROORONE REPLY,VTODO,DTSTART,NONE,ZEROORONE REPLY,VTODO,DUE,NONE,ZEROORONE REPLY,VTODO,DURATION,NONE,ZEROORONE REPLY,VTODO,EXDATE,NONE,ZEROPLUS REPLY,VTODO,EXRULE,NONE,ZEROPLUS REPLY,VTODO,GEO,NONE,ZEROORONE REPLY,VTODO,LASTMODIFIED,NONE,ZEROORONE REPLY,VTODO,LOCATION,NONE,ZEROORONE REPLY,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE REPLY,VTODO,PRIORITY,NONE,ZEROORONE REPLY,VTODO,RDATE,NONE,ZEROPLUS REPLY,VTODO,RELATEDTO,NONE,ZEROPLUS REPLY,VTODO,RESOURCES,NONE,ZEROORONE REPLY,VTODO,RRULE,NONE,ZEROPLUS REPLY,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REPLY,VTODO,SEQUENCE,NONE,ZEROORONE REPLY,VTODO,STATUS,NONE,ZEROORONE REPLY,VTODO,SUMMARY,NONE,ZEROORONE REPLY,VTODO,URL,NONE,ZEROORONE REPLY,VTODO,X,NONE,ZEROPLUS REPLY,VTODO,NONE,VTIMEZONE,ZEROORONE REPLY,VTODO,NONE,X,ZEROPLUS REPLY,VTODO,NONE,VALARM,ZERO REPLY,VTODO,NONE,VEVENT,ZERO REPLY,VTODO,NONE,VFREEBUSY,ZERO REPLY,VTODO,RELCALID,NONE,ZEROORONE ADD,VTODO,NONE,NONE,ONE ADD,VTODO,DTSTAMP,NONE,ONE ADD,VTODO,ORGANIZER,NONE,ONE ADD,VTODO,PRIORITY,NONE,ONE ADD,VTODO,SEQUENCE,NONE,ONE ADD,VTODO,SUMMARY,NONE,ONE ADD,VTODO,UID,NONE,ONE ADD,VTODO,ATTACH,NONE,ZEROPLUS ADD,VTODO,ATTENDEE,NONE,ZEROPLUS ADD,VTODO,CATEGORIES,NONE,ZEROPLUS ADD,VTODO,CLASS,NONE,ZEROORONE ADD,VTODO,COMMENT,NONE,ZEROORONE ADD,VTODO,CONTACT,NONE,ZEROPLUS ADD,VTODO,CREATED,NONE,ZEROORONE ADD,VTODO,DESCRIPTION,NONE,ZEROORONE ADD,VTODO,DTSTART,NONE,ZEROORONE ADD,VTODO,DUE,NONE,ZEROORONE ADD,VTODO,DURATION,NONE,ZEROORONE ADD,VTODO,EXDATE,NONE,ZEROPLUS ADD,VTODO,EXRULE,NONE,ZEROPLUS ADD,VTODO,GEO,NONE,ZEROORONE ADD,VTODO,LASTMODIFIED,NONE,ZEROORONE ADD,VTODO,LOCATION,NONE,ZEROORONE ADD,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE ADD,VTODO,RDATE,NONE,ZEROPLUS ADD,VTODO,RELATEDTO,NONE,ZEROPLUS ADD,VTODO,RESOURCES,NONE,ZEROORONE ADD,VTODO,RRULE,NONE,ZEROPLUS ADD,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process ADD,VTODO,URL,NONE,ZEROORONE ADD,VTODO,X,NONE,ZEROPLUS ADD,VTODO,RECURRENCEID,NONE,ZERO,must_be_recurring ADD,VTODO,REQUESTSTATUS,NONE,ZERO ADD,VTODO,NONE,VALARM,ZEROPLUS ADD,VTODO,NONE,VTIMEZONE,ZEROPLUS ADD,VTODO,NONE,X,ZEROPLUS ADD,VTODO,NONE,VEVENT,ZERO ADD,VTODO,NONE,VJOURNAL,ZERO ADD,VTODO,NONE,VFREEBUSY,ZERO ADD,VTODO,RELCALID,NONE,ZEROORONE CANCEL,VTODO,NONE,NONE,ONE CANCEL,VTODO,ATTENDEE,NONE,ZEROPLUS CANCEL,VTODO,UID,NONE,ONE CANCEL,VTODO,DTSTAMP,NONE,ONE CANCEL,VTODO,ORGANIZER,NONE,ONE CANCEL,VTODO,SEQUENCE,NONE,ONE CANCEL,VTODO,ATTACH,NONE,ZEROPLUS CANCEL,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard CANCEL,VTODO,CLASS,NONE,ZEROORONE CANCEL,VTODO,COMMENT,NONE,ZEROORONE CANCEL,VTODO,CONTACT,NONE,ZEROPLUS CANCEL,VTODO,CREATED,NONE,ZEROORONE CANCEL,VTODO,DESCRIPTION,NONE,ZEROORONE CANCEL,VTODO,DTSTART,NONE,ZEROORONE CANCEL,VTODO,DUE,NONE,ZEROORONE CANCEL,VTODO,DURATION,NONE,ZEROORONE CANCEL,VTODO,EXDATE,NONE,ZEROPLUS CANCEL,VTODO,EXRULE,NONE,ZEROPLUS CANCEL,VTODO,GEO,NONE,ZEROORONE CANCEL,VTODO,LASTMODIFIED,NONE,ZEROORONE CANCEL,VTODO,LOCATION,NONE,ZEROORONE CANCEL,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE CANCEL,VTODO,RDATE,NONE,ZEROPLUS CANCEL,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring CANCEL,VTODO,RELATEDTO,NONE,ZEROPLUS CANCEL,VTODO,RESOURCES,NONE,ZEROORONE CANCEL,VTODO,RRULE,NONE,ZEROPLUS CANCEL,VTODO,PRIORITY,NONE,ZEROORONE CANCEL,VTODO,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee CANCEL,VTODO,URL,NONE,ZEROORONE CANCEL,VTODO,X,NONE,ZEROPLUS CANCEL,VTODO,REQUESTSTATUS,NONE,ZERO CANCEL,VTODO,NONE,VTIMEZONE,ZEROORONE CANCEL,VTODO,NONE,X,ZEROPLUS CANCEL,VTODO,NONE,VALARM,ZERO CANCEL,VTODO,NONE,VEVENT,ZERO CANCEL,VTODO,NONE,VFREEBUSY,ZERO CANCEL,VTODO,RELCALID,NONE,ZEROORONE REFRESH,VTODO,NONE,NONE,ONE REFRESH,VTODO,ATTENDEE,NONE,ONE REFRESH,VTODO,DTSTAMP,NONE,ONE REFRESH,VTODO,UID,NONE,ONE REFRESH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REFRESH,VTODO,X,NONE,ZEROPLUS REFRESH,VTODO,ATTACH,NONE,ZERO REFRESH,VTODO,CATEGORIES,NONE,ZERO REFRESH,VTODO,CLASS,NONE,ZERO REFRESH,VTODO,COMMENT,NONE,ZERO REFRESH,VTODO,CONTACT,NONE,ZERO REFRESH,VTODO,CREATED,NONE,ZERO REFRESH,VTODO,DESCRIPTION,NONE,ZERO REFRESH,VTODO,DTSTART,NONE,ZERO REFRESH,VTODO,DUE,NONE,ZERO REFRESH,VTODO,DURATION,NONE,ZERO REFRESH,VTODO,EXDATE,NONE,ZERO REFRESH,VTODO,EXRULE,NONE,ZERO REFRESH,VTODO,GEO,NONE,ZERO REFRESH,VTODO,LASTMODIFIED,NONE,ZERO REFRESH,VTODO,LOCATION,NONE,ZERO REFRESH,VTODO,ORGANIZER,NONE,ZERO REFRESH,VTODO,PERCENTCOMPLETE,NONE,ZERO REFRESH,VTODO,PRIORITY,NONE,ZERO REFRESH,VTODO,RDATE,NONE,ZERO REFRESH,VTODO,RELATEDTO,NONE,ZERO REFRESH,VTODO,REQUESTSTATUS,NONE,ZERO REFRESH,VTODO,RESOURCES,NONE,ZERO REFRESH,VTODO,RRULE,NONE,ZERO REFRESH,VTODO,SEQUENCE,NONE,ZERO REFRESH,VTODO,STATUS,NONE,ZERO REFRESH,VTODO,URL,NONE,ZERO REFRESH,VTODO,NONE,X,ZEROPLUS REFRESH,VTODO,NONE,VALARM,ZERO REFRESH,VTODO,NONE,VEVENT,ZERO REFRESH,VTODO,NONE,VFREEBUSY,ZERO REFRESH,VTODO,NONE,VTIMEZONE,ZERO REFRESH,VTODO,RELCALID,NONE,ZEROORONE COUNTER,VTODO,NONE,NONE,ONE COUNTER,VTODO,ATTENDEE,NONE,ONEPLUS COUNTER,VTODO,DTSTAMP,NONE,ONE COUNTER,VTODO,ORGANIZER,NONE,ONE COUNTER,VTODO,PRIORITY,NONE,ONE COUNTER,VTODO,SUMMARY,NONE,ONE COUNTER,VTODO,UID,NONE,ONE COUNTER,VTODO,ATTACH,NONE,ZEROPLUS COUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard COUNTER,VTODO,CLASS,NONE,ZEROORONE COUNTER,VTODO,COMMENT,NONE,ZEROORONE COUNTER,VTODO,CONTACT,NONE,ZEROPLUS COUNTER,VTODO,CREATED,NONE,ZEROORONE COUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE COUNTER,VTODO,DTSTART,NONE,ZEROORONE COUNTER,VTODO,DUE,NONE,ZEROORONE COUNTER,VTODO,DURATION,NONE,ZEROORONE COUNTER,VTODO,EXDATE,NONE,ZEROPLUS COUNTER,VTODO,EXRULE,NONE,ZEROPLUS COUNTER,VTODO,GEO,NONE,ZEROORONE COUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE COUNTER,VTODO,LOCATION,NONE,ZEROORONE COUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE COUNTER,VTODO,RDATE,NONE,ZEROPLUS COUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring COUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS COUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS COUNTER,VTODO,RESOURCES,NONE,ZEROORONE COUNTER,VTODO,RRULE,NONE,ZEROORONE COUNTER,VTODO,SEQUENCE,NONE,ZEROORONE COUNTER,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process COUNTER,VTODO,URL,NONE,ZEROORONE COUNTER,VTODO,X,NONE,ZEROPLUS COUNTER,VTODO,NONE,VALARM,ZEROPLUS COUNTER,VTODO,NONE,VTIMEZONE,ZEROORONE COUNTER,VTODO,NONE,X,ZEROPLUS COUNTER,VTODO,NONE,VEVENT,ZERO COUNTER,VTODO,NONE,VFREEBUSY,ZERO COUNTER,VTODO,RELCALID,NONE,ZEROORONE DECLINECOUNTER,VTODO,NONE,NONE,ONE DECLINECOUNTER,VTODO,ATTENDEE,NONE,ONEPLUS DECLINECOUNTER,VTODO,DTSTAMP,NONE,ONE DECLINECOUNTER,VTODO,ORGANIZER,NONE,ONE DECLINECOUNTER,VTODO,SEQUENCE,NONE,ONE DECLINECOUNTER,VTODO,UID,NONE,ONE DECLINECOUNTER,VTODO,ATTACH,NONE,ZEROPLUS DECLINECOUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard DECLINECOUNTER,VTODO,CLASS,NONE,ZEROORONE DECLINECOUNTER,VTODO,COMMENT,NONE,ZEROORONE DECLINECOUNTER,VTODO,CONTACT,NONE,ZEROPLUS DECLINECOUNTER,VTODO,CREATED,NONE,ZEROORONE DECLINECOUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE DECLINECOUNTER,VTODO,DTSTART,NONE,ZEROORONE DECLINECOUNTER,VTODO,DUE,NONE,ZEROORONE DECLINECOUNTER,VTODO,DURATION,NONE,ZEROORONE DECLINECOUNTER,VTODO,EXDATE,NONE,ZEROPLUS DECLINECOUNTER,VTODO,EXRULE,NONE,ZEROPLUS DECLINECOUNTER,VTODO,GEO,NONE,ZEROORONE DECLINECOUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE DECLINECOUNTER,VTODO,LOCATION,NONE,ZEROORONE DECLINECOUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE DECLINECOUNTER,VTODO,PRIORITY,NONE,ZEROORONE DECLINECOUNTER,VTODO,RDATE,NONE,ZEROPLUS DECLINECOUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring DECLINECOUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS DECLINECOUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS DECLINECOUNTER,VTODO,RESOURCES,NONE,ZEROORONE DECLINECOUNTER,VTODO,RRULE,NONE,ZEROPLUS DECLINECOUNTER,VTODO,STATUS,NONE,ZEROORONE DECLINECOUNTER,VTODO,URL,NONE,ZEROORONE DECLINECOUNTER,VTODO,X,NONE,ZEROPLUS DECLINECOUNTER,VTODO,NONE,VTIMEZONE,ZEROPLUS DECLINECOUNTER,VTODO,NONE,X,ZEROPLUS DECLINECOUNTER,VTODO,NONE,VALARM,ZERO DECLINECOUNTER,VTODO,NONE,VEVENT,ZERO DECLINECOUNTER,VTODO,NONE,VFREEBUSY,ZERO DECLINECOUNTER,VTODO,RELCALID,NONE,ZEROORONE PUBLISH,VJOURNAL,NONE,NONE,ONEPLUS PUBLISH,VJOURNAL,DESCRIPTION,NONE,ONE PUBLISH,VJOURNAL,DTSTAMP,NONE,ONE PUBLISH,VJOURNAL,DTSTART,NONE,ONE PUBLISH,VJOURNAL,ORGANIZER,NONE,ONE PUBLISH,VJOURNAL,UID,NONE,ONE PUBLISH,VJOURNAL,ATTACH,NONE,ZEROPLUS PUBLISH,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard PUBLISH,VJOURNAL,CLASS,NONE,ZEROORONE PUBLISH,VJOURNAL,COMMENT,NONE,ZEROORONE PUBLISH,VJOURNAL,CONTACT,NONE,ZEROPLUS PUBLISH,VJOURNAL,CREATED,NONE,ZEROORONE PUBLISH,VJOURNAL,EXDATE,NONE,ZEROPLUS PUBLISH,VJOURNAL,EXRULE,NONE,ZEROPLUS PUBLISH,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE PUBLISH,VJOURNAL,RDATE,NONE,ZEROPLUS PUBLISH,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE,may_be_draft_final_canceled PUBLISH,VJOURNAL,SUMMARY,NONE,ZEROORONE PUBLISH,VJOURNAL,URL,NONE,ZEROORONE PUBLISH,VJOURNAL,X,NONE,ZEROPLUS PUBLISH,VJOURNAL,ATTENDEE,NONE,ZERO PUBLISH,VJOURNAL,NONE,VALARM,ZEROPLUS PUBLISH,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS PUBLISH,VJOURNAL,NONE,X,ZEROPLUS PUBLISH,VJOURNAL,NONE,VEVENT,ZERO PUBLISH,VJOURNAL,NONE,VFREEBUSY,ZERO PUBLISH,VJOURNAL,NONE,VTODO,ZERO ADD,VJOURNAL,NONE,NONE,ONE ADD,VJOURNAL,DESCRIPTION,NONE,ONE ADD,VJOURNAL,DTSTAMP,NONE,ONE ADD,VJOURNAL,DTSTART,NONE,ONE ADD,VJOURNAL,ORGANIZER,NONE,ONE ADD,VJOURNAL,SEQUENCE,NONE,ONE ADD,VJOURNAL,UID,NONE,ONE ADD,VJOURNAL,ATTACH,NONE,ZEROPLUS ADD,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard ADD,VJOURNAL,CLASS,NONE,ZEROORONE ADD,VJOURNAL,COMMENT,NONE,ZEROORONE ADD,VJOURNAL,CONTACT,NONE,ZEROPLUS ADD,VJOURNAL,CREATED,NONE,ZEROORONE ADD,VJOURNAL,EXDATE,NONE,ZEROPLUS ADD,VJOURNAL,EXRULE,NONE,ZEROPLUS ADD,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE ADD,VJOURNAL,RDATE,NONE,ZEROPLUS ADD,VJOURNAL,RELATEDTO,NONE,ZEROPLUS ADD,VJOURNAL,RRULE,NONE,ZEROPLUS ADD,VJOURNAL,STATUS,NONE,ZEROORONE ADD,VJOURNAL,SUMMARY,NONE,ZEROORONE ADD,VJOURNAL,URL,NONE,ZEROORONE ADD,VJOURNAL,X,NONE,ZEROPLUS ADD,VJOURNAL,ATTENDEE,NONE,ZERO ADD,VJOURNAL,RECURRENCEID,NONE,ZERO ADD,VJOURNAL,NONE,VALARM,ZEROPLUS ADD,VJOURNAL,NONE,VTIMEZONE,ZEROORONE ADD,VJOURNAL,NONE,X,ZEROPLUS ADD,VJOURNAL,NONE,VEVENT,ZERO ADD,VJOURNAL,NONE,VFREEBUSY,ZERO ADD,VJOURNAL,NONE,VTODO,ZERO CANCEL,VJOURNAL,NONE,NONE,ONEPLUS CANCEL,VJOURNAL,DTSTAMP,NONE,ONE CANCEL,VJOURNAL,ORGANIZER,NONE,ONE CANCEL,VJOURNAL,SEQUENCE,NONE,ONE CANCEL,VJOURNAL,UID,NONE,ONE CANCEL,VJOURNAL,ATTACH,NONE,ZEROPLUS CANCEL,VJOURNAL,ATTENDEE,NONE,ZEROPLUS CANCEL,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard CANCEL,VJOURNAL,CLASS,NONE,ZEROORONE CANCEL,VJOURNAL,COMMENT,NONE,ZEROORONE CANCEL,VJOURNAL,CONTACT,NONE,ZEROPLUS CANCEL,VJOURNAL,CREATED,NONE,ZEROORONE CANCEL,VJOURNAL,DESCRIPTION,NONE,ZEROORONE CANCEL,VJOURNAL,DTSTART,NONE,ZEROORONE CANCEL,VJOURNAL,EXDATE,NONE,ZEROPLUS CANCEL,VJOURNAL,EXRULE,NONE,ZEROPLUS CANCEL,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE CANCEL,VJOURNAL,RDATE,NONE,ZEROPLUS CANCEL,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present CANCEL,VJOURNAL,SUMMARY,NONE,ZEROORONE CANCEL,VJOURNAL,URL,NONE,ZEROORONE CANCEL,VJOURNAL,X,NONE,ZEROPLUS CANCEL,VJOURNAL,REQUESTSTATUS,NONE,ZERO CANCEL,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS CANCEL,VJOURNAL,NONE,X,ZEROPLUS CANCEL,VJOURNAL,NONE,VALARM,ZERO CANCEL,VJOURNAL,NONE,VEVENT,ZERO CANCEL,VJOURNAL,NONE,VFREEBUSY,ZERO CANCEL,VJOURNAL,NONE,VTODO,ZERO PUBLISH,VAGENDA,NONE,NONE,ONEPLUS PUBLISH,VAGENDA,CALMASTER,NONE,ONE PUBLISH,VAGENDA,OWNER,NONE,ZEROORONE PUBLISH,VAGENDA,RELCALID,NONE,ZEROORONE PUBLISH,VAGENDA,TZID,NONE,ONE REQUEST,VAGENDA,NONE,NONE,ONEPLUS REQUEST,VAGENDA,CALMASTER,NONE,ONE REQUEST,VAGENDA,OWNER,NONE,ZEROORONE REQUEST,VAGENDA,RELCALID,NONE,ZEROORONE REQUEST,VAGENDA,TZID,NONE,ONE REPLY,VAGENDA,NONE,NONE,ONEPLUS REPLY,VAGENDA,CALMASTER,NONE,ONE REPLY,VAGENDA,OWNER,NONE,ZEROORONE REPLY,VAGENDA,RELCALID,NONE,ZEROORONE REPLY,VAGENDA,TZID,NONE,ONE ADD,VAGENDA,NONE,NONE,ONEPLUS ADD,VAGENDA,CALMASTER,NONE,ONE ADD,VAGENDA,OWNER,NONE,ZEROORONE ADD,VAGENDA,RELCALID,NONE,ZEROORONE ADD,VAGENDA,TZID,NONE,ONE CANCEL,VAGENDA,NONE,NONE,ONEPLUS CANCEL,VAGENDA,CALMASTER,NONE,ONE CANCEL,VAGENDA,OWNER,NONE,ZEROORONE CANCEL,VAGENDA,RELCALID,NONE,ZEROORONE CANCEL,VAGENDA,TZID,NONE,ONE REFRESH,VAGENDA,NONE,NONE,ONEPLUS REFRESH,VAGENDA,CALMASTER,NONE,ONE REFRESH,VAGENDA,OWNER,NONE,ZEROORONE REFRESH,VAGENDA,RELCALID,NONE,ZEROORONE REFRESH,VAGENDA,TZID,NONE,ONE COUNTER,VAGENDA,NONE,NONE,ONEPLUS COUNTER,VAGENDA,CALMASTER,NONE,ONE COUNTER,VAGENDA,OWNER,NONE,ZEROORONE COUNTER,VAGENDA,RELCALID,NONE,ZEROORONE COUNTER,VAGENDA,TZID,NONE,ONE DECLINECOUNTER,VAGENDA,NONE,NONE,ONEPLUS DECLINECOUNTER,VAGENDA,CALMASTER,NONE,ONE DECLINECOUNTER,VAGENDA,OWNER,NONE,ZEROORONE DECLINECOUNTER,VAGENDA,RELCALID,NONE,ZEROORONE DECLINECOUNTER,VAGENDA,TZID,NONE,ONE NONE,VAGENDA,ALLOWCONFLICT,NONE,ONE NONE,VAGENDA,CALMASTER,NONE,ONE NONE,VAGENDA,OWNER,NONE,ZEROORONE NONE,VAGENDA,RELCALID,NONE,ZEROORONE NONE,VAGENDA,TZID,NONE,ONE NONE,VAGENDA,DEFAULTCHARSET,NONE,ONE NONE,VAGENDA,DEFAULTLOCALE,NONE,ONE NONE,VAGENDA,DEFAULTTZID,NONE,ONE NONE,VCALENDAR,ACTION,NONE,ZERO NONE,VCALENDAR,ATTACH,NONE,ZERO NONE,VCALENDAR,ATTENDEE,NONE,ZERO NONE,VCALENDAR,RELCALID,NONE,ZEROORONE NONE,VCALENDAR,CALSCALE,NONE,ZEROORONE NONE,VCALENDAR,CATEGORIES,NONE,ZERO NONE,VCALENDAR,CLASS,NONE,ZERO NONE,VCALENDAR,COMMENT,NONE,ZERO NONE,VCALENDAR,COMPLETED,NONE,ZERO NONE,VCALENDAR,CONTACT,NONE,ZERO NONE,VCALENDAR,CREATED,NONE,ZERO NONE,VCALENDAR,DESCRIPTION,NONE,ZERO NONE,VCALENDAR,DTEND,NONE,ZERO NONE,VCALENDAR,DTSTAMP,NONE,ZERO NONE,VCALENDAR,DTSTART,NONE,ZERO NONE,VCALENDAR,DUE,NONE,ZERO NONE,VCALENDAR,DURATION,NONE,ZERO NONE,VCALENDAR,EXDATE,NONE,ZERO NONE,VCALENDAR,EXRULE,NONE,ZERO NONE,VCALENDAR,FREEBUSY,NONE,ZERO NONE,VCALENDAR,GEO,NONE,ZERO NONE,VCALENDAR,LASTMODIFIED,NONE,ZERO NONE,VCALENDAR,LOCATION,NONE,ZERO NONE,VCALENDAR,METHOD,NONE,ZEROORONE NONE,VCALENDAR,ORGANIZER,NONE,ZERO NONE,VCALENDAR,PERCENTCOMPLETE,NONE,ZERO NONE,VCALENDAR,PRIORITY,NONE,ZERO NONE,VCALENDAR,PRODID,NONE,ONE NONE,VCALENDAR,RDATE,NONE,ZERO NONE,VCALENDAR,RECURRENCEID,NONE,ZERO NONE,VCALENDAR,RELATEDTO,NONE,ZERO NONE,VCALENDAR,REPEAT,NONE,ZERO NONE,VCALENDAR,REQUESTSTATUS,NONE,ZERO NONE,VCALENDAR,RESOURCES,NONE,ZERO NONE,VCALENDAR,RRULE,NONE,ZERO NONE,VCALENDAR,SEQUENCE,NONE,ZERO NONE,VCALENDAR,STATUS,NONE,ZERO NONE,VCALENDAR,SUMMARY,NONE,ZERO NONE,VCALENDAR,TRANSP,NONE,ZERO NONE,VCALENDAR,TRIGGER,NONE,ZERO NONE,VCALENDAR,TZID,NONE,ZERO NONE,VCALENDAR,TZNAME,NONE,ZERO NONE,VCALENDAR,TZOFFSETFROM,NONE,ZERO NONE,VCALENDAR,TZOFFSETTO,NONE,ZERO NONE,VCALENDAR,TZURL,NONE,ZERO NONE,VCALENDAR,UID,NONE,ZERO NONE,VCALENDAR,URL,NONE,ZERO NONE,VCALENDAR,VERSION,NONE,ONE NONE,VCALENDAR,X,NONE,ZEROPLUS NONE,VEVENT,ACTION,NONE,ZERO NONE,VEVENT,ATTACH,NONE,ZEROPLUS NONE,VEVENT,ATTENDEE,NONE,ZEROPLUS NONE,VEVENT,CALSCALE,NONE,ZERO NONE,VEVENT,CATEGORIES,NONE,ZEROPLUS NONE,VEVENT,CLASS,NONE,ZEROORONE NONE,VEVENT,COMMENT,NONE,ZEROPLUS NONE,VEVENT,COMPLETED,NONE,ZERO NONE,VEVENT,CONTACT,NONE,ZEROPLUS NONE,VEVENT,CREATED,NONE,ZEROORONE NONE,VEVENT,DESCRIPTION,NONE,ZEROORONE NONE,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration NONE,VEVENT,DTSTAMP,NONE,ZEROORONE NONE,VEVENT,DTSTART,NONE,ZEROORONE NONE,VEVENT,DUE,NONE,ZERO NONE,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend NONE,VEVENT,EXDATE,NONE,ZEROPLUS NONE,VEVENT,EXRULE,NONE,ZEROPLUS NONE,VEVENT,FREEBUSY,NONE,ZERO NONE,VEVENT,GEO,NONE,ZEROORONE NONE,VEVENT,LASTMODIFIED,NONE,ZEROORONE NONE,VEVENT,LOCATION,NONE,ZEROORONE NONE,VEVENT,METHOD,NONE,ZERO NONE,VEVENT,ORGANIZER,NONE,ZEROORONE NONE,VEVENT,PERCENTCOMPLETE,NONE,ZERO NONE,VEVENT,PRIORITY,NONE,ZEROORONE NONE,VEVENT,PRODID,NONE,ZERO NONE,VEVENT,RDATE,NONE,ZEROPLUS NONE,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring NONE,VEVENT,RELATEDTO,NONE,ZEROPLUS NONE,VEVENT,REPEAT,NONE,ZERO NONE,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS NONE,VEVENT,RESOURCES,NONE,ZEROPLUS NONE,VEVENT,RRULE,NONE,ZEROPLUS NONE,VEVENT,SEQUENCE,NONE,ZEROORONE NONE,VEVENT,STATUS,NONE,ZEROORONE NONE,VEVENT,SUMMARY,NONE,ZEROORONE NONE,VEVENT,TRANSP,NONE,ZEROORONE NONE,VEVENT,TRIGGER,NONE,ZERO NONE,VEVENT,TZID,NONE,ZERO NONE,VEVENT,TZNAME,NONE,ZERO NONE,VEVENT,TZOFFSETFROM,NONE,ZERO NONE,VEVENT,TZOFFSETTO,NONE,ZERO NONE,VEVENT,TZURL,NONE,ZERO NONE,VEVENT,UID,NONE,ZEROORONE NONE,VEVENT,URL,NONE,ZEROORONE NONE,VEVENT,VERSION,NONE,ZERO NONE,VEVENT,X,NONE,ZEROPLUS NONE,VEVENT,RELCALID,NONE,ZEROORONE NONE,VTODO,ACTION,NONE,ZERO NONE,VTODO,ATTACH,NONE,ZEROPLUS NONE,VTODO,ATTENDEE,NONE,ZEROPLUS NONE,VTODO,CALSCALE,NONE,ZERO NONE,VTODO,CATEGORIES,NONE,ZEROPLUS NONE,VTODO,CLASS,NONE,ZEROORONE NONE,VTODO,COMMENT,NONE,ZEROPLUS NONE,VTODO,COMPLETED,NONE,ZEROORONE NONE,VTODO,CONTACT,NONE,ZEROPLUS NONE,VTODO,CREATED,NONE,ZEROORONE NONE,VTODO,DESCRIPTION,NONE,ZEROORONE NONE,VTODO,DTEND,NONE,ZERO NONE,VTODO,DTSTAMP,NONE,ZEROORONE NONE,VTODO,DTSTART,NONE,ZEROORONE NONE,VTODO,DUE,NONE,ONEEXCLUSIVE NONE,VTODO,DURATION,NONE,ONEEXCLUSIVE NONE,VTODO,EXDATE,NONE,ZEROPLUS NONE,VTODO,EXRULE,NONE,ZEROPLUS NONE,VTODO,FREEBUSY,NONE,ZERO NONE,VTODO,GEO,NONE,ZEROORONE NONE,VTODO,LASTMODIFIED,NONE,ZEROORONE NONE,VTODO,LOCATION,NONE,ZEROORONE NONE,VTODO,METHOD,NONE,ZERO NONE,VTODO,ORGANIZER,NONE,ZEROORONE NONE,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE NONE,VTODO,PRIORITY,NONE,ZEROORONE NONE,VTODO,PRODID,NONE,ZERO NONE,VTODO,RDATE,NONE,ZEROPLUS NONE,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring NONE,VTODO,RELATEDTO,NONE,ZEROPLUS NONE,VTODO,REPEAT,NONE,ZERO NONE,VTODO,REQUESTSTATUS,NONE,ZEROPLUS NONE,VTODO,RESOURCES,NONE,ZEROPLUS NONE,VTODO,RRULE,NONE,ZEROPLUS NONE,VTODO,SEQUENCE,NONE,ZEROORONE NONE,VTODO,STATUS,NONE,ZEROORONE NONE,VTODO,SUMMARY,NONE,ZEROORONE NONE,VTODO,TRANSP,NONE,ZERO NONE,VTODO,TRIGGER,NONE,ZERO NONE,VTODO,TZID,NONE,ZERO NONE,VTODO,TZNAME,NONE,ZERO NONE,VTODO,TZOFFSETFROM,NONE,ZERO NONE,VTODO,TZOFFSETTO,NONE,ZERO NONE,VTODO,TZURL,NONE,ZERO NONE,VTODO,UID,NONE,ZEROORONE NONE,VTODO,URL,NONE,ZEROORONE NONE,VTODO,VERSION,NONE,ZERO NONE,VTODO,X,NONE,ZEROPLUS NONE,VTODO,RELCALID,NONE,ZEROORONE NONE,VJOURNAL,ACTION,NONE,ZERO NONE,VJOURNAL,ATTACH,NONE,ZEROPLUS NONE,VJOURNAL,ATTENDEE,NONE,ZEROPLUS NONE,VJOURNAL,CALSCALE,NONE,ZERO NONE,VJOURNAL,CATEGORIES,NONE,ZEROPLUS NONE,VJOURNAL,CLASS,NONE,ZEROORONE NONE,VJOURNAL,COMMENT,NONE,ZEROPLUS NONE,VJOURNAL,COMPLETED,NONE,ZERO NONE,VJOURNAL,CONTACT,NONE,ZEROPLUS NONE,VJOURNAL,CREATED,NONE,ZEROORONE NONE,VJOURNAL,DESCRIPTION,NONE,ZEROORONE NONE,VJOURNAL,DTEND,NONE,ZERO NONE,VJOURNAL,DTSTAMP,NONE,ZEROORONE NONE,VJOURNAL,DTSTART,NONE,ZEROORONE NONE,VJOURNAL,DUE,NONE,ONEEXCLUSIVE NONE,VJOURNAL,DURATION,NONE,ONEEXCLUSIVE NONE,VJOURNAL,EXDATE,NONE,ZEROPLUS NONE,VJOURNAL,EXRULE,NONE,ZEROPLUS NONE,VJOURNAL,FREEBUSY,NONE,ZERO NONE,VJOURNAL,GEO,NONE,ZERO NONE,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE NONE,VJOURNAL,LOCATION,NONE,ZERO NONE,VJOURNAL,METHOD,NONE,ZERO NONE,VJOURNAL,ORGANIZER,NONE,ZEROORONE NONE,VJOURNAL,PERCENTCOMPLETE,NONE,ZERO NONE,VJOURNAL,PRIORITY,NONE,ZERO NONE,VJOURNAL,PRODID,NONE,ZERO NONE,VJOURNAL,RDATE,NONE,ZEROPLUS NONE,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring NONE,VJOURNAL,RELATEDTO,NONE,ZEROPLUS NONE,VJOURNAL,REPEAT,NONE,ZERO NONE,VJOURNAL,REQUESTSTATUS,NONE,ZEROPLUS NONE,VJOURNAL,RESOURCES,NONE,ZERO NONE,VJOURNAL,RRULE,NONE,ZEROPLUS NONE,VJOURNAL,SEQUENCE,NONE,ZEROORONE NONE,VJOURNAL,STATUS,NONE,ZEROORONE NONE,VJOURNAL,SUMMARY,NONE,ZEROORONE NONE,VJOURNAL,TRANSP,NONE,ZERO NONE,VJOURNAL,TRIGGER,NONE,ZERO NONE,VJOURNAL,TZID,NONE,ZERO NONE,VJOURNAL,TZNAME,NONE,ZERO NONE,VJOURNAL,TZOFFSETFROM,NONE,ZERO NONE,VJOURNAL,TZOFFSETTO,NONE,ZERO NONE,VJOURNAL,TZURL,NONE,ZERO NONE,VJOURNAL,UID,NONE,ZEROORONE NONE,VJOURNAL,URL,NONE,ZEROORONE NONE,VJOURNAL,VERSION,NONE,ZERO NONE,VJOURNAL,X,NONE,ZEROPLUS NONE,VFREEBUSY,ACTION,NONE,ZERO NONE,VFREEBUSY,ATTACH,NONE,ZERO NONE,VFREEBUSY,ATTENDEE,NONE,ZEROPLUS NONE,VFREEBUSY,CALSCALE,NONE,ZERO NONE,VFREEBUSY,CATEGORIES,NONE,ZERO NONE,VFREEBUSY,CLASS,NONE,ZERO NONE,VFREEBUSY,COMMENT,NONE,ZEROPLUS NONE,VFREEBUSY,COMPLETED,NONE,ZERO NONE,VFREEBUSY,CONTACT,NONE,ZEROORONE NONE,VFREEBUSY,CREATED,NONE,ZERO NONE,VFREEBUSY,DESCRIPTION,NONE,ZERO NONE,VFREEBUSY,DTEND,NONE,ZEROORONE NONE,VFREEBUSY,DTSTAMP,NONE,ONE NONE,VFREEBUSY,DTSTART,NONE,ZEROORONE NONE,VFREEBUSY,DUE,NONE,ZERO NONE,VFREEBUSY,DURATION,NONE,ZERO 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,ONE 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,TZIDALIASOF,NONE,ZEROPLUS NONE,VTIMEZONE,TZNAME,NONE,ZERO NONE,VTIMEZONE,TZOFFSETFROM,NONE,ZERO NONE,VTIMEZONE,TZOFFSETTO,NONE,ZERO NONE,VTIMEZONE,TZUNTIL,NONE,ZEROORONE NONE,VTIMEZONE,TZURL,NONE,ZEROPLUS NONE,VTIMEZONE,UID,NONE,ZERO NONE,VTIMEZONE,URL,NONE,ZERO NONE,VTIMEZONE,VERSION,NONE,ZERO NONE,VTIMEZONE,X,NONE,ZEROORONE NONE,VTIMEZONE,NONE,XSTANDARD,ZEROPLUS NONE,VTIMEZONE,NONE,XDAYLIGHT,ZEROPLUS NONE,XSTANDARD,ACTION,NONE,ZERO NONE,XSTANDARD,ATTACH,NONE,ZERO NONE,XSTANDARD,ATTENDEE,NONE,ZERO NONE,XSTANDARD,CALSCALE,NONE,ZERO NONE,XSTANDARD,CATEGORIES,NONE,ZERO NONE,XSTANDARD,CLASS,NONE,ZERO NONE,XSTANDARD,COMMENT,NONE,ZEROPLUS NONE,XSTANDARD,COMPLETED,NONE,ZERO NONE,XSTANDARD,CONTACT,NONE,ZERO NONE,XSTANDARD,CREATED,NONE,ZERO NONE,XSTANDARD,DESCRIPTION,NONE,ZERO NONE,XSTANDARD,DTEND,NONE,ZERO NONE,XSTANDARD,DTSTAMP,NONE,ZERO NONE,XSTANDARD,DTSTART,NONE,ONE NONE,XSTANDARD,DUE,NONE,ZERO NONE,XSTANDARD,DURATION,NONE,ZERO NONE,XSTANDARD,EXDATE,NONE,ZERO NONE,XSTANDARD,EXRULE,NONE,ZERO NONE,XSTANDARD,FREEBUSY,NONE,ZERO NONE,XSTANDARD,GEO,NONE,ZERO NONE,XSTANDARD,LASTMODIFIED,NONE,ZERO NONE,XSTANDARD,LOCATION,NONE,ZERO NONE,XSTANDARD,METHOD,NONE,ZERO NONE,XSTANDARD,ORGANIZER,NONE,ZERO NONE,XSTANDARD,PERCENTCOMPLETE,NONE,ZERO NONE,XSTANDARD,PRIORITY,NONE,ZERO NONE,XSTANDARD,PRODID,NONE,ZERO NONE,XSTANDARD,RDATE,NONE,ZEROPLUS NONE,XSTANDARD,RECURRENCEID,NONE,ZERO NONE,XSTANDARD,RELATEDTO,NONE,ZERO NONE,XSTANDARD,REPEAT,NONE,ZERO NONE,XSTANDARD,REQUESTSTATUS,NONE,ZERO NONE,XSTANDARD,RESOURCES,NONE,ZERO NONE,XSTANDARD,RRULE,NONE,ZEROPLUS NONE,XSTANDARD,SEQUENCE,NONE,ZERO NONE,XSTANDARD,STATUS,NONE,ZERO NONE,XSTANDARD,SUMMARY,NONE,ZERO NONE,XSTANDARD,TRANSP,NONE,ZERO NONE,XSTANDARD,TRIGGER,NONE,ZERO NONE,XSTANDARD,TZID,NONE,ZERO NONE,XSTANDARD,TZNAME,NONE,ZEROPLUS NONE,XSTANDARD,TZOFFSETFROM,NONE,ONE NONE,XSTANDARD,TZOFFSETTO,NONE,ONE NONE,XSTANDARD,TZURL,NONE,ZERO NONE,XSTANDARD,UID,NONE,ZERO NONE,XSTANDARD,URL,NONE,ZERO NONE,XSTANDARD,VERSION,NONE,ZERO NONE,XSTANDARD,X,NONE,ZEROPLUS NONE,XDAYLIGHT,ACTION,NONE,ZERO NONE,XDAYLIGHT,ATTACH,NONE,ZERO NONE,XDAYLIGHT,ATTENDEE,NONE,ZERO NONE,XDAYLIGHT,CALSCALE,NONE,ZERO NONE,XDAYLIGHT,CATEGORIES,NONE,ZERO NONE,XDAYLIGHT,CLASS,NONE,ZERO NONE,XDAYLIGHT,COMMENT,NONE,ZEROPLUS NONE,XDAYLIGHT,COMPLETED,NONE,ZERO NONE,XDAYLIGHT,CONTACT,NONE,ZERO NONE,XDAYLIGHT,CREATED,NONE,ZERO NONE,XDAYLIGHT,DESCRIPTION,NONE,ZERO NONE,XDAYLIGHT,DTEND,NONE,ZERO NONE,XDAYLIGHT,DTSTAMP,NONE,ZERO NONE,XDAYLIGHT,DTSTART,NONE,ONE NONE,XDAYLIGHT,DUE,NONE,ZERO NONE,XDAYLIGHT,DURATION,NONE,ZERO NONE,XDAYLIGHT,EXDATE,NONE,ZERO NONE,XDAYLIGHT,EXRULE,NONE,ZERO NONE,XDAYLIGHT,FREEBUSY,NONE,ZERO NONE,XDAYLIGHT,GEO,NONE,ZERO NONE,XDAYLIGHT,LASTMODIFIED,NONE,ZERO NONE,XDAYLIGHT,LOCATION,NONE,ZERO NONE,XDAYLIGHT,METHOD,NONE,ZERO NONE,XDAYLIGHT,ORGANIZER,NONE,ZERO NONE,XDAYLIGHT,PERCENTCOMPLETE,NONE,ZERO NONE,XDAYLIGHT,PRIORITY,NONE,ZERO NONE,XDAYLIGHT,PRODID,NONE,ZERO NONE,XDAYLIGHT,RDATE,NONE,ZEROPLUS NONE,XDAYLIGHT,RECURRENCEID,NONE,ZERO NONE,XDAYLIGHT,RELATEDTO,NONE,ZERO NONE,XDAYLIGHT,REPEAT,NONE,ZERO NONE,XDAYLIGHT,REQUESTSTATUS,NONE,ZERO NONE,XDAYLIGHT,RESOURCES,NONE,ZERO NONE,XDAYLIGHT,RRULE,NONE,ZEROPLUS NONE,XDAYLIGHT,SEQUENCE,NONE,ZERO NONE,XDAYLIGHT,STATUS,NONE,ZERO NONE,XDAYLIGHT,SUMMARY,NONE,ZERO NONE,XDAYLIGHT,TRANSP,NONE,ZERO NONE,XDAYLIGHT,TRIGGER,NONE,ZERO NONE,XDAYLIGHT,TZID,NONE,ZERO NONE,XDAYLIGHT,TZNAME,NONE,ZEROPLUS NONE,XDAYLIGHT,TZOFFSETFROM,NONE,ONE NONE,XDAYLIGHT,TZOFFSETTO,NONE,ONE NONE,XDAYLIGHT,TZURL,NONE,ZERO NONE,XDAYLIGHT,UID,NONE,ZERO NONE,XDAYLIGHT,URL,NONE,ZERO NONE,XDAYLIGHT,VERSION,NONE,ZERO NONE,XDAYLIGHT,X,NONE,ZEROPLUS NONE,XAUDIOALARM,ACTION,NONE,ONE NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO NONE,XAUDIOALARM,CALSCALE,NONE,ZERO NONE,XAUDIOALARM,CATEGORIES,NONE,ZERO NONE,XAUDIOALARM,CLASS,NONE,ZERO NONE,XAUDIOALARM,COMMENT,NONE,ZERO NONE,XAUDIOALARM,COMPLETED,NONE,ZERO NONE,XAUDIOALARM,CONTACT,NONE,ZERO NONE,XAUDIOALARM,CREATED,NONE,ZERO NONE,XAUDIOALARM,DESCRIPTION,NONE,ZERO NONE,XAUDIOALARM,DTEND,NONE,ZERO NONE,XAUDIOALARM,DTSTAMP,NONE,ZERO NONE,XAUDIOALARM,DTSTART,NONE,ZERO NONE,XAUDIOALARM,DUE,NONE,ZERO NONE,XAUDIOALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration NONE,XAUDIOALARM,EXDATE,NONE,ZERO NONE,XAUDIOALARM,EXRULE,NONE,ZERO NONE,XAUDIOALARM,FREEBUSY,NONE,ZERO NONE,XAUDIOALARM,GEO,NONE,ZERO NONE,XAUDIOALARM,LASTMODIFIED,NONE,ZERO NONE,XAUDIOALARM,LOCATION,NONE,ZERO NONE,XAUDIOALARM,METHOD,NONE,ZERO NONE,XAUDIOALARM,ORGANIZER,NONE,ZERO NONE,XAUDIOALARM,PERCENTCOMPLETE,NONE,ZERO NONE,XAUDIOALARM,PRIORITY,NONE,ZERO NONE,XAUDIOALARM,PRODID,NONE,ZERO NONE,XAUDIOALARM,RDATE,NONE,ZERO NONE,XAUDIOALARM,RECURRENCEID,NONE,ZERO NONE,XAUDIOALARM,RELATEDTO,NONE,ZERO NONE,XAUDIOALARM,REQUESTSTATUS,NONE,ZERO NONE,XAUDIOALARM,RESOURCES,NONE,ZERO NONE,XAUDIOALARM,RRULE,NONE,ZERO NONE,XAUDIOALARM,SEQUENCE,NONE,ZERO NONE,XAUDIOALARM,STATUS,NONE,ZERO NONE,XAUDIOALARM,SUMMARY,NONE,ZERO NONE,XAUDIOALARM,TRANSP,NONE,ZERO NONE,XAUDIOALARM,TRIGGER,NONE,ONE NONE,XAUDIOALARM,TZID,NONE,ZERO NONE,XAUDIOALARM,TZNAME,NONE,ZERO NONE,XAUDIOALARM,TZOFFSETFROM,NONE,ZERO NONE,XAUDIOALARM,TZOFFSETTO,NONE,ZERO NONE,XAUDIOALARM,TZURL,NONE,ZERO NONE,XAUDIOALARM,UID,NONE,ZERO NONE,XAUDIOALARM,URL,NONE,ZERO NONE,XAUDIOALARM,VERSION,NONE,ZERO NONE,XAUDIOALARM,X,NONE,ZEROPLUS NONE,XDISPLAYALARM,ACTION,NONE,ONE NONE,XDISPLAYALARM,ATTACH,NONE,ZERO NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO NONE,XDISPLAYALARM,CALSCALE,NONE,ZERO NONE,XDISPLAYALARM,CATEGORIES,NONE,ZERO NONE,XDISPLAYALARM,CLASS,NONE,ZERO NONE,XDISPLAYALARM,COMMENT,NONE,ZERO NONE,XDISPLAYALARM,COMPLETED,NONE,ZERO NONE,XDISPLAYALARM,CONTACT,NONE,ZERO NONE,XDISPLAYALARM,CREATED,NONE,ZERO NONE,XDISPLAYALARM,DESCRIPTION,NONE,ONE NONE,XDISPLAYALARM,DTEND,NONE,ZERO NONE,XDISPLAYALARM,DTSTAMP,NONE,ZERO NONE,XDISPLAYALARM,DTSTART,NONE,ZERO NONE,XDISPLAYALARM,DUE,NONE,ZERO NONE,XDISPLAYALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration NONE,XDISPLAYALARM,EXDATE,NONE,ZERO NONE,XDISPLAYALARM,EXRULE,NONE,ZERO NONE,XDISPLAYALARM,FREEBUSY,NONE,ZERO NONE,XDISPLAYALARM,GEO,NONE,ZERO NONE,XDISPLAYALARM,LASTMODIFIED,NONE,ZERO NONE,XDISPLAYALARM,LOCATION,NONE,ZERO NONE,XDISPLAYALARM,METHOD,NONE,ZERO NONE,XDISPLAYALARM,ORGANIZER,NONE,ZERO NONE,XDISPLAYALARM,PERCENTCOMPLETE,NONE,ZERO NONE,XDISPLAYALARM,PRIORITY,NONE,ZERO NONE,XDISPLAYALARM,PRODID,NONE,ZERO NONE,XDISPLAYALARM,RDATE,NONE,ZERO NONE,XDISPLAYALARM,RECURRENCEID,NONE,ZERO NONE,XDISPLAYALARM,RELATEDTO,NONE,ZERO NONE,XDISPLAYALARM,REQUESTSTATUS,NONE,ZERO NONE,XDISPLAYALARM,RESOURCES,NONE,ZERO NONE,XDISPLAYALARM,RRULE,NONE,ZERO NONE,XDISPLAYALARM,SEQUENCE,NONE,ZERO NONE,XDISPLAYALARM,STATUS,NONE,ZERO NONE,XDISPLAYALARM,SUMMARY,NONE,ZERO NONE,XDISPLAYALARM,TRANSP,NONE,ZERO NONE,XDISPLAYALARM,TRIGGER,NONE,ONE NONE,XDISPLAYALARM,TZID,NONE,ZERO NONE,XDISPLAYALARM,TZNAME,NONE,ZERO NONE,XDISPLAYALARM,TZOFFSETFROM,NONE,ZERO NONE,XDISPLAYALARM,TZOFFSETTO,NONE,ZERO NONE,XDISPLAYALARM,TZURL,NONE,ZERO NONE,XDISPLAYALARM,UID,NONE,ZERO NONE,XDISPLAYALARM,URL,NONE,ZERO NONE,XDISPLAYALARM,VERSION,NONE,ZERO NONE,XDISPLAYALARM,X,NONE,ZEROPLUS NONE,XEMAILALARM,ACTION,NONE,ONE,must_be_email NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS NONE,XEMAILALARM,CALSCALE,NONE,ZERO NONE,XEMAILALARM,CATEGORIES,NONE,ZERO NONE,XEMAILALARM,CLASS,NONE,ZERO NONE,XEMAILALARM,COMMENT,NONE,ZERO NONE,XEMAILALARM,COMPLETED,NONE,ZERO NONE,XEMAILALARM,CONTACT,NONE,ZERO NONE,XEMAILALARM,CREATED,NONE,ZERO NONE,XEMAILALARM,DESCRIPTION,NONE,ONE NONE,XEMAILALARM,DTEND,NONE,ZERO NONE,XEMAILALARM,DTSTAMP,NONE,ZERO NONE,XEMAILALARM,DTSTART,NONE,ZERO NONE,XEMAILALARM,DUE,NONE,ZERO NONE,XEMAILALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration NONE,XEMAILALARM,EXDATE,NONE,ZERO NONE,XEMAILALARM,EXRULE,NONE,ZERO NONE,XEMAILALARM,FREEBUSY,NONE,ZERO NONE,XEMAILALARM,GEO,NONE,ZERO NONE,XEMAILALARM,LASTMODIFIED,NONE,ZERO NONE,XEMAILALARM,LOCATION,NONE,ZERO NONE,XEMAILALARM,METHOD,NONE,ZERO NONE,XEMAILALARM,ORGANIZER,NONE,ZERO NONE,XEMAILALARM,PERCENTCOMPLETE,NONE,ZERO NONE,XEMAILALARM,PRIORITY,NONE,ZERO NONE,XEMAILALARM,PRODID,NONE,ZERO NONE,XEMAILALARM,RDATE,NONE,ZERO NONE,XEMAILALARM,RECURRENCEID,NONE,ZERO NONE,XEMAILALARM,RELATEDTO,NONE,ZERO NONE,XEMAILALARM,REQUESTSTATUS,NONE,ZERO NONE,XEMAILALARM,RESOURCES,NONE,ZERO NONE,XEMAILALARM,RRULE,NONE,ZERO NONE,XEMAILALARM,SEQUENCE,NONE,ZERO NONE,XEMAILALARM,STATUS,NONE,ZERO NONE,XEMAILALARM,SUMMARY,NONE,ONE NONE,XEMAILALARM,TRANSP,NONE,ZERO NONE,XEMAILALARM,TRIGGER,NONE,ONE NONE,XEMAILALARM,TZID,NONE,ZERO NONE,XEMAILALARM,TZNAME,NONE,ZERO NONE,XEMAILALARM,TZOFFSETFROM,NONE,ZERO NONE,XEMAILALARM,TZOFFSETTO,NONE,ZERO NONE,XEMAILALARM,TZURL,NONE,ZERO NONE,XEMAILALARM,UID,NONE,ZERO NONE,XEMAILALARM,URL,NONE,ZERO NONE,XEMAILALARM,VERSION,NONE,ZERO NONE,XEMAILALARM,X,NONE,ZEROPLUS NONE,XPROCEDUREALARM,ACTION,NONE,ONE NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO NONE,XPROCEDUREALARM,CALSCALE,NONE,ZERO NONE,XPROCEDUREALARM,CATEGORIES,NONE,ZERO NONE,XPROCEDUREALARM,CLASS,NONE,ZERO NONE,XPROCEDUREALARM,COMMENT,NONE,ZERO NONE,XPROCEDUREALARM,COMPLETED,NONE,ZERO NONE,XPROCEDUREALARM,CONTACT,NONE,ZERO NONE,XPROCEDUREALARM,CREATED,NONE,ZERO NONE,XPROCEDUREALARM,DESCRIPTION,NONE,ZEROORONE NONE,XPROCEDUREALARM,DTEND,NONE,ZERO NONE,XPROCEDUREALARM,DTSTAMP,NONE,ZERO NONE,XPROCEDUREALARM,DTSTART,NONE,ZERO NONE,XPROCEDUREALARM,DUE,NONE,ZERO NONE,XPROCEDUREALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration NONE,XPROCEDUREALARM,EXDATE,NONE,ZERO NONE,XPROCEDUREALARM,EXRULE,NONE,ZERO NONE,XPROCEDUREALARM,FREEBUSY,NONE,ZERO NONE,XPROCEDUREALARM,GEO,NONE,ZERO NONE,XPROCEDUREALARM,LASTMODIFIED,NONE,ZERO NONE,XPROCEDUREALARM,LOCATION,NONE,ZERO NONE,XPROCEDUREALARM,METHOD,NONE,ZERO NONE,XPROCEDUREALARM,ORGANIZER,NONE,ZERO NONE,XPROCEDUREALARM,PERCENTCOMPLETE,NONE,ZERO NONE,XPROCEDUREALARM,PRIORITY,NONE,ZERO NONE,XPROCEDUREALARM,PRODID,NONE,ZERO NONE,XPROCEDUREALARM,RDATE,NONE,ZERO NONE,XPROCEDUREALARM,RECURRENCEID,NONE,ZERO NONE,XPROCEDUREALARM,RELATEDTO,NONE,ZERO NONE,XPROCEDUREALARM,REQUESTSTATUS,NONE,ZERO NONE,XPROCEDUREALARM,RESOURCES,NONE,ZERO NONE,XPROCEDUREALARM,RRULE,NONE,ZERO NONE,XPROCEDUREALARM,SEQUENCE,NONE,ZERO NONE,XPROCEDUREALARM,STATUS,NONE,ZERO NONE,XPROCEDUREALARM,SUMMARY,NONE,ZERO NONE,XPROCEDUREALARM,TRANSP,NONE,ZERO NONE,XPROCEDUREALARM,TRIGGER,NONE,ONE NONE,XPROCEDUREALARM,TZID,NONE,ZERO NONE,XPROCEDUREALARM,TZNAME,NONE,ZERO NONE,XPROCEDUREALARM,TZOFFSETFROM,NONE,ZERO NONE,XPROCEDUREALARM,TZOFFSETTO,NONE,ZERO NONE,XPROCEDUREALARM,TZURL,NONE,ZERO NONE,XPROCEDUREALARM,UID,NONE,ZERO NONE,XPROCEDUREALARM,URL,NONE,ZERO NONE,XPROCEDUREALARM,VERSION,NONE,ZERO NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS NONE,VQUERY,QUERY,NONE,ZEROORONE NONE,VQUERY,QUERYNAME,NONE,ONE NONE,VQUERY,EXPAND,NONE,ONE NONE,VAVAILABILITY,ACTION,NONE,ZERO NONE,VAVAILABILITY,ATTACH,NONE,ZERO NONE,VAVAILABILITY,ATTENDEE,NONE,ZERO NONE,VAVAILABILITY,BUSYTYPE,NONE,ZEROORONE NONE,VAVAILABILITY,CALSCALE,NONE,ZERO NONE,VAVAILABILITY,CATEGORIES,NONE,ZEROPLUS NONE,VAVAILABILITY,CLASS,NONE,ZEROORONE NONE,VAVAILABILITY,COMMENT,NONE,ZEROPLUS NONE,VAVAILABILITY,COMPLETED,NONE,ZERO NONE,VAVAILABILITY,CONTACT,NONE,ZEROPLUS NONE,VAVAILABILITY,CREATED,NONE,ZEROORONE NONE,VAVAILABILITY,DESCRIPTION,NONE,ZEROORONE NONE,VAVAILABILITY,DTEND,NONE,ONEEXCLUSIVE,no_duration NONE,VAVAILABILITY,DTSTAMP,NONE,ONE NONE,VAVAILABILITY,DTSTART,NONE,ZEROORONE NONE,VAVAILABILITY,DUE,NONE,ZERO NONE,VAVAILABILITY,DURATION,NONE,ONEEXCLUSIVE,no_dtend NONE,VAVAILABILITY,EXDATE,NONE,ZERO NONE,VAVAILABILITY,EXRULE,NONE,ZERO NONE,VAVAILABILITY,FREEBUSY,NONE,ZERO NONE,VAVAILABILITY,GEO,NONE,ZERO NONE,VAVAILABILITY,LASTMODIFIED,NONE,ZEROORONE NONE,VAVAILABILITY,LOCATION,NONE,ZERO NONE,VAVAILABILITY,METHOD,NONE,ZERO NONE,VAVAILABILITY,ORGANIZER,NONE,ZEROORONE NONE,VAVAILABILITY,PERCENTCOMPLETE,NONE,ZERO NONE,VAVAILABILITY,PRIORITY,NONE,ZEROORONE NONE,VAVAILABILITY,PRODID,NONE,ZERO NONE,VAVAILABILITY,RDATE,NONE,ZERO NONE,VAVAILABILITY,RECURRENCEID,NONE,ZERO NONE,VAVAILABILITY,RELATEDTO,NONE,ZERO NONE,VAVAILABILITY,REPEAT,NONE,ZERO NONE,VAVAILABILITY,REQUESTSTATUS,NONE,ZERO NONE,VAVAILABILITY,RESOURCES,NONE,ZERO NONE,VAVAILABILITY,RRULE,NONE,ZERO NONE,VAVAILABILITY,SEQUENCE,NONE,ZEROORONE NONE,VAVAILABILITY,STATUS,NONE,ZERO NONE,VAVAILABILITY,SUMMARY,NONE,ZEROORONE NONE,VAVAILABILITY,TRANSP,NONE,ZERO NONE,VAVAILABILITY,TRIGGER,NONE,ZERO NONE,VAVAILABILITY,TZID,NONE,ZERO NONE,VAVAILABILITY,TZNAME,NONE,ZERO NONE,VAVAILABILITY,TZOFFSETFROM,NONE,ZERO NONE,VAVAILABILITY,TZOFFSETTO,NONE,ZERO NONE,VAVAILABILITY,TZURL,NONE,ZERO NONE,VAVAILABILITY,UID,NONE,ONE NONE,VAVAILABILITY,URL,NONE,ZEROORONE NONE,VAVAILABILITY,VERSION,NONE,ZERO NONE,VAVAILABILITY,X,NONE,ZEROPLUS NONE,VAVAILABILITY,NONE,XAVAILABLE,ZEROPLUS NONE,XAVAILABLE,ACTION,NONE,ZERO NONE,XAVAILABLE,ATTACH,NONE,ZERO NONE,XAVAILABLE,ATTENDEE,NONE,ZERO NONE,XAVAILABLE,CALSCALE,NONE,ZERO NONE,XAVAILABLE,CATEGORIES,NONE,ZEROPLUS NONE,XAVAILABLE,CLASS,NONE,ZERO NONE,XAVAILABLE,COMMENT,NONE,ZEROPLUS NONE,XAVAILABLE,COMPLETED,NONE,ZERO NONE,XAVAILABLE,CONTACT,NONE,ZEROPLUS NONE,XAVAILABLE,CREATED,NONE,ZEROORONE NONE,XAVAILABLE,DESCRIPTION,NONE,ZEROORONE NONE,XAVAILABLE,DTEND,NONE,ONEEXCLUSIVE,no_duration NONE,XAVAILABLE,DTSTAMP,NONE,ONE NONE,XAVAILABLE,DTSTART,NONE,ONE NONE,XAVAILABLE,DUE,NONE,ZERO NONE,XAVAILABLE,DURATION,NONE,ONEEXCLUSIVE,no_dtend NONE,XAVAILABLE,EXDATE,NONE,ZEROPLUS NONE,XAVAILABLE,EXRULE,NONE,ZERO NONE,XAVAILABLE,FREEBUSY,NONE,ZERO NONE,XAVAILABLE,GEO,NONE,ZERO NONE,XAVAILABLE,LASTMODIFIED,NONE,ZEROORONE NONE,XAVAILABLE,LOCATION,NONE,ZERO NONE,XAVAILABLE,METHOD,NONE,ZERO NONE,XAVAILABLE,ORGANIZER,NONE,ZERO NONE,XAVAILABLE,PERCENTCOMPLETE,NONE,ZERO NONE,XAVAILABLE,PRIORITY,NONE,ZERO NONE,XAVAILABLE,PRODID,NONE,ZERO NONE,XAVAILABLE,RDATE,NONE,ZEROPLUS NONE,XAVAILABLE,RECURRENCEID,NONE,ZEROORONE,must_be_recurring NONE,XAVAILABLE,RELATEDTO,NONE,ZERO NONE,XAVAILABLE,REPEAT,NONE,ZERO NONE,XAVAILABLE,REQUESTSTATUS,NONE,ZERO NONE,XAVAILABLE,RESOURCES,NONE,ZERO NONE,XAVAILABLE,RRULE,NONE,ZEROORONE NONE,XAVAILABLE,SEQUENCE,NONE,ZERO NONE,XAVAILABLE,STATUS,NONE,ZERO NONE,XAVAILABLE,SUMMARY,NONE,ZEROORONE NONE,XAVAILABLE,TRANSP,NONE,ZERO NONE,XAVAILABLE,TRIGGER,NONE,ZERO NONE,XAVAILABLE,TZID,NONE,ZERO NONE,XAVAILABLE,TZNAME,NONE,ZERO NONE,XAVAILABLE,TZOFFSETFROM,NONE,ZERO NONE,XAVAILABLE,TZOFFSETTO,NONE,ZERO NONE,XAVAILABLE,TZURL,NONE,ZERO NONE,XAVAILABLE,UID,NONE,ONE NONE,XAVAILABLE,URL,NONE,ZERO NONE,XAVAILABLE,VERSION,NONE,ZERO NONE,XAVAILABLE,X,NONE,ZEROPLUS PUBLISH,VPOLL,NONE,NONE,ONEPLUS PUBLISH,VPOLL,DTSTAMP,NONE,ONE PUBLISH,VPOLL,DTSTART,NONE,ZEROORONE PUBLISH,VPOLL,ORGANIZER,NONE,ONE PUBLISH,VPOLL,SUMMARY,NONE,ONE PUBLISH,VPOLL,UID,NONE,ONE PUBLISH,VPOLL,SEQUENCE,NONE,ZEROORONE PUBLISH,VPOLL,ACCEPTRESPONSE,NONE,ZEROORONE PUBLISH,VPOLL,ATTACH,NONE,ZEROPLUS PUBLISH,VPOLL,CATEGORIES,NONE,ZEROPLUS #Non-standard PUBLISH,VPOLL,CLASS,NONE,ZEROORONE PUBLISH,VPOLL,COMMENT,NONE,ZEROPLUS PUBLISH,VPOLL,COMPLETED,NONE,ZEROORONE PUBLISH,VPOLL,CONTACT,NONE,ZEROORONE PUBLISH,VPOLL,CREATED,NONE,ZEROORONE PUBLISH,VPOLL,DESCRIPTION,NONE,ZEROORONE PUBLISH,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration PUBLISH,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend PUBLISH,VPOLL,LASTMODIFIED,NONE,ZEROORONE PUBLISH,VPOLL,POLLCOMPLETION,NONE,ZEROORONE PUBLISH,VPOLL,POLLITEMID,NONE,ZERO PUBLISH,VPOLL,POLLMODE,NONE,ZEROORONE PUBLISH,VPOLL,POLLPROPERTIES,NONE,ZEROORONE PUBLISH,VPOLL,PRIORITY,NONE,ZEROORONE PUBLISH,VPOLL,RELATEDTO,NONE,ZEROPLUS PUBLISH,VPOLL,RESOURCES,NONE,ZEROPLUS PUBLISH,VPOLL,STATUS,NONE,ZEROORONE PUBLISH,VPOLL,URL,NONE,ZEROORONE PUBLISH,VPOLL,X,NONE,ZEROPLUS PUBLISH,VPOLL,REQUESTSTATUS,NONE,ZERO PUBLISH,VPOLL,NONE,VVOTER,ZEROPLUS PUBLISH,VPOLL,NONE,VALARM,ZEROPLUS PUBLISH,VPOLL,NONE,VEVENT,ZEROPLUS PUBLISH,VPOLL,NONE,VFREEBUSY,ZERO PUBLISH,VPOLL,NONE,VAVAILABILITY,ZERO PUBLISH,VPOLL,NONE,VJOURNAL,ZEROPLUS PUBLISH,VPOLL,NONE,VTODO,ZEROPLUS PUBLISH,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref PUBLISH,VPOLL,NONE,X,ZEROPLUS REQUEST,VPOLL,NONE,NONE,ONE REQUEST,VPOLL,DTSTAMP,NONE,ONE REQUEST,VPOLL,DTSTART,NONE,ZEROORONE REQUEST,VPOLL,ORGANIZER,NONE,ONE REQUEST,VPOLL,SEQUENCE,NONE,ZEROORONE REQUEST,VPOLL,SUMMARY,NONE,ONE REQUEST,VPOLL,UID,NONE,ONE REQUEST,VPOLL,ACCEPTRESPONSE,NONE,ZEROORONE REQUEST,VPOLL,ATTACH,NONE,ZEROPLUS REQUEST,VPOLL,CATEGORIES,NONE,ZEROPLUS #Non-standard REQUEST,VPOLL,CLASS,NONE,ZEROORONE REQUEST,VPOLL,COMMENT,NONE,ZEROPLUS REQUEST,VPOLL,COMPLETED,NONE,ZEROORONE REQUEST,VPOLL,CONTACT,NONE,ZEROPLUS REQUEST,VPOLL,CREATED,NONE,ZEROORONE REQUEST,VPOLL,DESCRIPTION,NONE,ZEROORONE REQUEST,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration REQUEST,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend REQUEST,VPOLL,GEO,NONE,ZEROORONE REQUEST,VPOLL,LASTMODIFIED,NONE,ZEROORONE REQUEST,VPOLL,LOCATION,NONE,ZEROORONE REQUEST,VPOLL,POLLCOMPLETION,NONE,ZEROORONE REQUEST,VPOLL,POLLITEMID,NONE,ZERO REQUEST,VPOLL,POLLMODE,NONE,ZEROORONE REQUEST,VPOLL,POLLPROPERTIES,NONE,ZEROORONE REQUEST,VPOLL,PRIORITY,NONE,ZEROORONE REQUEST,VPOLL,RELATEDTO,NONE,ZEROPLUS REQUEST,VPOLL,REQUESTSTATUS,NONE,ZERO REQUEST,VPOLL,RESOURCES,NONE,ZEROPLUS REQUEST,VPOLL,STATUS,NONE,ZEROORONE REQUEST,VPOLL,TRANSP,NONE,ZEROORONE REQUEST,VPOLL,URL,NONE,ZEROORONE REQUEST,VPOLL,X,NONE,ZEROPLUS REQUEST,VPOLL,NONE,VVOTER,ONEPLUS REQUEST,VPOLL,NONE,VALARM,ZEROPLUS REQUEST,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref REQUEST,VPOLL,NONE,X,ZEROPLUS REQUEST,VPOLL,NONE,VEVENT,ZEROPLUS REQUEST,VPOLL,NONE,VFREEBUSY,ZERO REQUEST,VPOLL,NONE,VAVAILABILITY,ZERO REQUEST,VPOLL,NONE,VJOURNAL,ZEROPLUS REQUEST,VPOLL,NONE,VTODO,ZEROPLUS REPLY,VPOLL,NONE,NONE,ONEPLUS REPLY,VPOLL,DTSTAMP,NONE,ONE REPLY,VPOLL,ORGANIZER,NONE,ONE REPLY,VPOLL,UID,NONE,ONE REPLY,VPOLL,SEQUENCE,NONE,ZEROORONE REPLY,VPOLL,ACCEPTRESPONSE,NONE,ZEROORONE REPLY,VPOLL,ATTACH,NONE,ZEROPLUS REPLY,VPOLL,CATEGORIES,NONE,ZEROPLUS #Non-standard REPLY,VPOLL,CLASS,NONE,ZEROORONE REPLY,VPOLL,COMMENT,NONE,ZEROPLUS REPLY,VPOLL,COMPLETED,NONE,ZEROORONE REPLY,VPOLL,CONTACT,NONE,ZEROPLUS REPLY,VPOLL,CREATED,NONE,ZEROORONE REPLY,VPOLL,DESCRIPTION,NONE,ZEROORONE REPLY,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration REPLY,VPOLL,DTSTART,NONE,ZEROORONE REPLY,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend REPLY,VPOLL,GEO,NONE,ZEROORONE REPLY,VPOLL,LASTMODIFIED,NONE,ZEROORONE REPLY,VPOLL,LOCATION,NONE,ZEROORONE REPLY,VPOLL,POLLCOMPLETION,NONE,ZERO REPLY,VPOLL,POLLITEMID,NONE,ONEPLUS REPLY,VPOLL,POLLMODE,NONE,ZERO REPLY,VPOLL,POLLPROPERTIES,NONE,ZERO REPLY,VPOLL,PRIORITY,NONE,ZEROORONE REPLY,VPOLL,RELATEDTO,NONE,ZEROPLUS REPLY,VPOLL,RESOURCES,NONE,ZEROPLUS REPLY,VPOLL,REQUESTSTATUS,NONE,ZEROPLUS REPLY,VPOLL,STATUS,NONE,ZEROORONE REPLY,VPOLL,SUMMARY,NONE,ZEROORONE REPLY,VPOLL,TRANSP,NONE,ZEROORONE REPLY,VPOLL,URL,NONE,ZEROORONE REPLY,VPOLL,X,NONE,ZEROPLUS REPLY,VPOLL,NONE,VVOTER,ONE REPLY,VPOLL,NONE,VALARM,ZERO REPLY,VPOLL,NONE,VTIMEZONE,ZEROORONE,must_if_tz_ref REPLY,VPOLL,NONE,X,ZEROPLUS REPLY,VPOLL,NONE,VEVENT,ZERO REPLY,VPOLL,NONE,VFREEBUSY,ZERO REPLY,VPOLL,NONE,VAVAILABILITY,ZERO REPLY,VPOLL,NONE,VJOURNAL,ZERO REPLY,VPOLL,NONE,VTODO,ZERO CANCEL,VPOLL,NONE,NONE,ONEPLUS CANCEL,VPOLL,UID,NONE,ONE CANCEL,VPOLL,DTSTAMP,NONE,ONE CANCEL,VPOLL,ORGANIZER,NONE,ONE CANCEL,VPOLL,SEQUENCE,NONE,ONE CANCEL,VPOLL,ATTACH,NONE,ZEROPLUS CANCEL,VPOLL,ACCEPTRESPONSE,NONE,ZEROORONE CANCEL,VPOLL,COMMENT,NONE,ZEROPLUS CANCEL,VPOLL,COMPLETED,NONE,ZEROORONE CANCEL,VPOLL,CATEGORIES,NONE,ZEROPLUS #Non-standard CANCEL,VPOLL,CLASS,NONE,ZEROORONE CANCEL,VPOLL,CONTACT,NONE,ZEROPLUS CANCEL,VPOLL,CREATED,NONE,ZEROORONE CANCEL,VPOLL,DESCRIPTION,NONE,ZEROORONE CANCEL,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration CANCEL,VPOLL,DTSTART,NONE,ZEROORONE CANCEL,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend CANCEL,VPOLL,GEO,NONE,ZEROORONE CANCEL,VPOLL,LASTMODIFIED,NONE,ZEROORONE CANCEL,VPOLL,LOCATION,NONE,ZEROORONE CANCEL,VPOLL,POLLCOMPLETION,NONE,ZERO CANCEL,VPOLL,POLLITEMID,NONE,ZERO CANCEL,VPOLL,POLLMODE,NONE,ZERO CANCEL,VPOLL,POLLPROPERTIES,NONE,ZERO CANCEL,VPOLL,PRIORITY,NONE,ZEROORONE CANCEL,VPOLL,RELATEDTO,NONE,ZEROPLUS CANCEL,VPOLL,RESOURCES,NONE,ZEROPLUS CANCEL,VPOLL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present CANCEL,VPOLL,SUMMARY,NONE,ONE CANCEL,VPOLL,TRANSP,NONE,ZEROORONE CANCEL,VPOLL,URL,NONE,ZEROORONE CANCEL,VPOLL,X,NONE,ZEROPLUS CANCEL,VPOLL,REQUESTSTATUS,NONE,ZERO CANCEL,VPOLL,NONE,VVOTER,ZEROPLUS CANCEL,VPOLL,NONE,VALARM,ZERO CANCEL,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref CANCEL,VPOLL,NONE,X,ZEROPLUS CANCEL,VPOLL,NONE,VEVENT,ZERO CANCEL,VPOLL,NONE,VFREEBUSY,ZERO CANCEL,VPOLL,NONE,VAVAILABILITY,ZERO CANCEL,VPOLL,NONE,VJOURNAL,ZERO CANCEL,VPOLL,NONE,VTODO,ZERO REFRESH,VPOLL,NONE,NONE,ONE REFRESH,VPOLL,DTSTAMP,NONE,ONE REFRESH,VPOLL,ORGANIZER,NONE,ONE REFRESH,VPOLL,UID,NONE,ONE REFRESH,VPOLL,COMMENT,NONE,ZEROPLUS REFRESH,VPOLL,COMPLETED,NONE,ZERO REFRESH,VPOLL,X,NONE,ZEROPLUS REFRESH,VPOLL,ACCEPTRESPONSE,NONE,ZERO REFRESH,VPOLL,ATTACH,NONE,ZERO REFRESH,VPOLL,CATEGORIES,NONE,ZERO #Non-standard REFRESH,VPOLL,CLASS,NONE,ZERO REFRESH,VPOLL,CONTACT,NONE,ZERO REFRESH,VPOLL,CREATED,NONE,ZERO REFRESH,VPOLL,DESCRIPTION,NONE,ZERO REFRESH,VPOLL,DTEND,NONE,ZERO REFRESH,VPOLL,DTSTART,NONE,ZERO REFRESH,VPOLL,DURATION,NONE,ZERO REFRESH,VPOLL,GEO,NONE,ZERO REFRESH,VPOLL,LASTMODIFIED,NONE,ZERO REFRESH,VPOLL,LOCATION,NONE,ZERO REFRESH,VPOLL,POLLCOMPLETION,NONE,ZERO REFRESH,VPOLL,POLLITEMID,NONE,ZERO REFRESH,VPOLL,POLLMODE,NONE,ZERO REFRESH,VPOLL,POLLPROPERTIES,NONE,ZERO REFRESH,VPOLL,PRIORITY,NONE,ZERO REFRESH,VPOLL,RELATEDTO,NONE,ZERO REFRESH,VPOLL,REQUESTSTATUS,NONE,ZERO REFRESH,VPOLL,RESOURCES,NONE,ZERO REFRESH,VPOLL,SEQUENCE,NONE,ZERO REFRESH,VPOLL,STATUS,NONE,ZERO REFRESH,VPOLL,SUMMARY,NONE,ZERO REFRESH,VPOLL,URL,NONE,ZERO REFRESH,VPOLL,NONE,VVOTER,ONE REFRESH,VPOLL,NONE,VALARM,ZERO REFRESH,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref REFRESH,VPOLL,NONE,X,ZEROPLUS REFRESH,VPOLL,NONE,VTODO,ZERO REFRESH,VPOLL,NONE,VJOURNAL,ZERO REFRESH,VPOLL,NONE,VEVENT,ZERO REFRESH,VPOLL,NONE,VFREEBUSY,ZERO REFRESH,VPOLL,NONE,VAVAILABILITY,ZERO POLLSTATUS,VPOLL,NONE,NONE,ONEPLUS POLLSTATUS,VPOLL,COMPLETED,NONE,ZEROORONE POLLSTATUS,VPOLL,DTSTAMP,NONE,ONE POLLSTATUS,VPOLL,DTSTART,NONE,ZEROORONE POLLSTATUS,VPOLL,ORGANIZER,NONE,ONE POLLSTATUS,VPOLL,SUMMARY,NONE,ONE POLLSTATUS,VPOLL,UID,NONE,ONE POLLSTATUS,VPOLL,SEQUENCE,NONE,ZEROORONE POLLSTATUS,VPOLL,ACCEPTRESPONSE,NONE,ZERO POLLSTATUS,VPOLL,ATTACH,NONE,ZERO POLLSTATUS,VPOLL,CATEGORIES,NONE,ZERO POLLSTATUS,VPOLL,CLASS,NONE,ZERO POLLSTATUS,VPOLL,COMMENT,NONE,ZEROPLUS POLLSTATUS,VPOLL,CONTACT,NONE,ZERO POLLSTATUS,VPOLL,CREATED,NONE,ZEROORONE POLLSTATUS,VPOLL,DESCRIPTION,NONE,ZEROORONE POLLSTATUS,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration POLLSTATUS,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend POLLSTATUS,VPOLL,LASTMODIFIED,NONE,ZEROORONE POLLSTATUS,VPOLL,POLLCOMPLETION,NONE,ZERO POLLSTATUS,VPOLL,POLLITEMID,NONE,ZERO POLLSTATUS,VPOLL,POLLMODE,NONE,ZEROORONE POLLSTATUS,VPOLL,POLLPROPERTIES,NONE,ZERO POLLSTATUS,VPOLL,PRIORITY,NONE,ZEROORONE POLLSTATUS,VPOLL,RELATEDTO,NONE,ZEROPLUS POLLSTATUS,VPOLL,RESOURCES,NONE,ZEROPLUS POLLSTATUS,VPOLL,STATUS,NONE,ZEROORONE POLLSTATUS,VPOLL,URL,NONE,ZEROORONE POLLSTATUS,VPOLL,X,NONE,ZEROPLUS POLLSTATUS,VPOLL,REQUESTSTATUS,NONE,ZERO POLLSTATUS,VPOLL,NONE,VVOTER,ONEPLUS POLLSTATUS,VPOLL,NONE,VALARM,ZEROPLUS POLLSTATUS,VPOLL,NONE,VEVENT,ZEROPLUS POLLSTATUS,VPOLL,NONE,VFREEBUSY,ZERO POLLSTATUS,VPOLL,NONE,VAVAILABILITY,ZERO POLLSTATUS,VPOLL,NONE,VJOURNAL,ZEROPLUS POLLSTATUS,VPOLL,NONE,VTODO,ZEROPLUS POLLSTATUS,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref POLLSTATUS,VPOLL,NONE,X,ZEROPLUS NONE,VPOLL,DTSTAMP,NONE,ONE NONE,VPOLL,UID,NONE,ONE NONE,VPOLL,ORGANIZER,NONE,ONE NONE,VPOLL,ACCEPTRESPONSE,NONE,ZEROORONE NONE,VPOLL,CLASS,NONE,ZEROORONE NONE,VPOLL,CREATED,NONE,ZEROORONE NONE,VPOLL,COMPLETED,NONE,ZEROORONE NONE,VPOLL,DESCRIPTION,NONE,ZEROORONE NONE,VPOLL,DTSTART,NONE,ZEROORONE NONE,VPOLL,LASTMODIFIED,NONE,ZEROORONE NONE,VPOLL,POLLCOMPLETION,NONE,ZEROORONE NONE,VPOLL,POLLMODE,NONE,ZEROORONE NONE,VPOLL,POLLPROPERTIES,NONE,ZEROORONE NONE,VPOLL,PRIORITY,NONE,ZEROORONE NONE,VPOLL,SEQUENCE,NONE,ZEROORONE NONE,VPOLL,STATUS,NONE,ZEROORONE NONE,VPOLL,SUMMARY,NONE,ZEROORONE NONE,VPOLL,URL,NONE,ZEROORONE NONE,VPOLL,DTEND,NONE,ONEEXCLUSIVE,no_duration NONE,VPOLL,DURATION,NONE,ONEEXCLUSIVE,no_dtend NONE,VPOLL,ATTACH,NONE,ZEROPLUS NONE,VPOLL,CATEGORIES,NONE,ZEROPLUS #Non-standard NONE,VPOLL,COMMENT,NONE,ZEROPLUS NONE,VPOLL,CONTACT,NONE,ZEROPLUS NONE,VPOLL,REQUESTSTATUS,NONE,ZEROPLUS NONE,VPOLL,RELATEDTO,NONE,ZEROPLUS NONE,VPOLL,RESOURCES,NONE,ZEROPLUS NONE,VPOLL,X,NONE,ZEROPLUS NONE,VPOLL,POLLWINNER,NONE,ZEROORONE NONE,VPOLL,NONE,VALARM,ZEROPLUS NONE,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref NONE,VPOLL,NONE,X,ZEROPLUS NONE,VPOLL,NONE,VEVENT,ZEROPLUS, NONE,VPOLL,NONE,VFREEBUSY,ZEROPLUS NONE,VPOLL,NONE,VAVAILABILITY,ZEROPLUS NONE,VPOLL,NONE,VJOURNAL,ZEROPLUS NONE,VPOLL,NONE,VTODO,ZEROPLUS NONE,VPOLL,NONE,VVOTER,ZEROPLUS NONE,VVOTER,DTSTAMP,NONE,ONE NONE,VVOTER,VOTER,NONE,ONE NONE,VVOTER,CREATED,NONE,ZEROORONE NONE,VVOTER,DESCRIPTION,NONE,ZEROORONE NONE,VVOTER,LASTMODIFIED,NONE,ZEROORONE NONE,VVOTER,SEQUENCE,NONE,ZEROORONE NONE,VVOTER,STATUS,NONE,ZEROORONE NONE,VVOTER,SUMMARY,NONE,ZEROORONE NONE,VVOTER,URL,NONE,ZEROORONE NONE,VVOTER,ATTACH,NONE,ZEROPLUS NONE,VVOTER,CATEGORIES,NONE,ZEROPLUS NONE,VVOTER,COMMENT,NONE,ZEROPLUS NONE,VVOTER,CONTACT,NONE,ZEROPLUS NONE,VVOTER,REQUESTSTATUS,NONE,ZEROPLUS NONE,VVOTER,RELATEDTO,NONE,ZEROPLUS NONE,VVOTER,RESOURCES,NONE,ZEROPLUS NONE,VVOTER,X,NONE,ZEROPLUS NONE,VVOTER,NONE,VALARM,ZERO NONE,VVOTER,NONE,VTIMEZONE,ZERO NONE,VVOTER,NONE,VEVENT,ZERO NONE,VVOTER,NONE,VFREEBUSY,ZERO NONE,VVOTER,NONE,VAVAILABILITY,ZERO NONE,VVOTER,NONE,VJOURNAL,ZERO NONE,VVOTER,NONE,VTODO,ZERO NONE,VVOTER,NONE,XVOTE,ZEROPLUS NONE,VVOTER,NONE,X,ZEROPLUS NONE,XVOTE,POLLITEMID,NONE,ZEROORONE NONE,XVOTE,RESPONSE,NONE,ZEROORONE NONE,XVOTE,COMMENT,NONE,ZEROPLUS NONE,XVOTE,X,NONE,ZEROPLUS NONE,XVOTE,NONE,VALARM,ZEROP NONE,XVOTE,NONE,VTIMEZONE,ZERO NONE,XVOTE,NONE,VEVENT,ZERO NONE,XVOTE,NONE,VFREEBUSY,ZERO NONE,XVOTE,NONE,VAVAILABILITY,ZERO NONE,XVOTE,NONE,VJOURNAL,ZERO NONE,XVOTE,NONE,VTODO,ZERO NONE,XVOTE,NONE,VVOTER,ZERO NONE,XVOTE,NONE,X,ZEROPLUS libical-2.0.0/design-data/status.txt000066400000000000000000000071331264032652500173650ustar00rootroot000000000000002.0 STATOK Operation was successfully performed. 2.0.1 STARTSENDATA Start ICAL input; end with . 2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with . 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. libical-2.0.0/design-data/value-types.csv000066400000000000000000000101521264032652500202670ustar00rootroot00000000000000"#Name","C icalvalue_kind Enum","C type& gen flag","Python","Component Values","Enum Values" "BINARY","5011","(a)const char*","file","unitary", "BOOLEAN","5021","(a)int","integer","unitary", "CAL-ADDRESS","5023","(a)const char*","string","unitary", "DATE","5002","(a)struct icaltimetype","Time","unitary", "DATE-TIME","5028","(m)struct icaltimetype","Time","unitary", "DURATION","5020","(a)struct icaldurationtype","Duration","unitary", "FLOAT","5013","(a)float","float","unitary", "INTEGER","5017","(a)int","integer","unitary", "PERIOD","5014","(a)struct icalperiodtype","Period","unitary", "RECUR","5026","(m)struct icalrecurrencetype","RecurrenceSet","unitary", "TEXT","5008","(a)const char*","string","unitary", "URI","5018","(a)const char*","string","unitary", "UTC-OFFSET","5029","(a)int","integer","unitary", "QUERY","5001","(a)const char*","string","unitary", "#Non-standard multi-valued types",,,, "ATTACH","5003","(m)icalattach *","none","URI;BINARY", "DATE-TIME-PERIOD","5015","(m)struct icaldatetimeperiodtype","none","DATE-TIME;PERIOD", "TRIGGER","5024","(m)struct icaltriggertype","string","DURATION;DATE-TIME", "#Non-standard property enumeration types",,,, "#METHOD:POLLSTATUS from draft-york-vpoll",,,, "METHOD","5030","(a)enum icalproperty_method","string","unitary","X=10500;PUBLISH;REQUEST;REPLY;ADD;CANCEL;REFRESH;COUNTER;DECLINECOUNTER;CREATE;READ;RESPONSE;MOVE;MODIFY;GENERATEUID;DELETE;POLLSTATUS;NONE=10599" "X-LIC-CLASS","5025","(a)enum icalproperty_xlicclass","string","unitary","X=11100;PUBLISH-NEW;PUBLISH-UPDATE;PUBLISH-FREEBUSY;REQUEST-NEW;REQUEST-UPDATE;REQUEST-RESCHEDULE;REQUEST-DELEGATE;REQUEST-NEW-ORGANIZER;REQUEST-FORWARD;REQUEST-STATUS;REQUEST-FREEBUSY;REPLY-ACCEPT;REPLY-DECLINE;REPLY-DELEGATE;REPLY-CRASHER-ACCEPT;REPLY-CRASHER-DECLINE;ADD-INSTANCE;CANCEL-EVENT;CANCEL-INSTANCE;CANCEL-ALL;REFRESH;COUNTER;DECLINECOUNTER;MALFORMED;OBSOLETE;MISSEQUENCED;UNKNOWN;NONE=11199" "ACTION","5027","(a)enum icalproperty_action","string","unitary","X=10000;AUDIO;DISPLAY;EMAIL;PROCEDURE;NONE=10099" "STATUS","5005","(a)enum icalproperty_status","string","unitary","X=10900;TENTATIVE;CONFIRMED;COMPLETED;NEEDS-ACTION;CANCELLED;IN-PROCESS;DRAFT;FINAL;SUBMITTED;PENDING;FAILED;NONE=10999" "TRANSP","5006","(a)enum icalproperty_transp","string","unitary","X=11000;OPAQUE;OPAQUE-NOCONFLICT;TRANSPARENT;TRANSPARENT-NOCONFLICT;NONE=11099" "CLASS","5019","(m)enum icalproperty_class","string","unitary","X=10300;PUBLIC;PRIVATE;CONFIDENTIAL;NONE=10399" "#Other non-standard",,,, "REQUEST-STATUS","5009","(a)struct icalreqstattype","string","unitary" "GEO","5004","(m)struct icalgeotype","tuple","unitary", "STRING","5007","(a)const char*","string","unitary", "X","5022","(m)const char*","string","unitary", "#CAP enumeration types",,,, "CMD","5010","(a)enum icalproperty_cmd","string","unitary","X=10400;ABORT;CONTINUE;CREATE;DELETE;GENERATE-UID;GET-CAPABILITY;IDENTIFY;MODIFY;MOVE;REPLY;SEARCH;SET-LOCALE;NONE=10499" "QUERY-LEVEL","5012","(a)enum icalproperty_querylevel","string","unitary","X=10800;CAL-QL-1;CAL-QL-NONE;NONE=10899" "CAR-LEVEL","5016","(a)enum icalproperty_carlevel","string","unitary","X=10200;CAR-NONE;CAR-MIN;CAR-FULL-1;NONE=10299" "ANY","5000",,,, "NO","5031",,,, "#VAVAILABILITY types","draft-daboo-calendar-availability",,, "BUSYTYPE","5032","(a)enum icalproperty_busytype","string","unitary","X=10100;BUSY;BUSY-UNAVAILABLE;BUSY-TENTATIVE;NONE=10199" "#VPOLL types","draft-york-vpoll",,, "POLLMODE","5033","(a)enum icalproperty_pollmode","string","unitary","X=10700;BASIC;NONE=10799" "POLLCOMPLETION","5034","(a)enum icalproperty_pollcompletion","string","unitary","X=10600;SERVER;SERVER-SUBMIT;SERVER-CHOICE;CLIENT;NONE=10699" "#Task Extension types","draft-apthorp-ical-tasks",,, "TASKMODE","5035","(a)enum icalproperty_taskmode","string","unitary","X=11200;AUTOMATIC-COMPLETION;AUTOMATIC-FAILURE;AUTOMATIC-STATUS;NONE=11299" "#NOTE for updaters. Preserve the icalvalue_kind Enum values and property Enum values to aid forward compatibility" "# New Enum values for an existing icalvalue_kind should be inserted before the corresponding NONE value" "# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11299)" libical-2.0.0/doc/000077500000000000000000000000001264032652500136625ustar00rootroot00000000000000libical-2.0.0/doc/AddingOrModifyingComponents.txt000066400000000000000000000012731264032652500220310ustar00rootroot00000000000000 How to add or change Components, Properties, Values or Parameters Adding or modifying values --------------------------- You may have to modify these files or data structures file design-data/value-c-types.txt file design-data/prop-to-val.txt table parameter_map[] in icalenums.c enum icalvalue_kind in icalenum.h table value_map[] in icalenums.c enum icalparameter_value in icalenum.h table propval_map[] in icalenums.c function icalvalue_as_ical_string() in icalvalue.c function icalvalue_new_from_string_with_error() in icalvalue.c When you are done, if you changed any files in the design-data directory, regnerate derived datatypes in src/libical with "make derived" or "make icalvalue" libical-2.0.0/doc/CMakeLists.txt000066400000000000000000000023341264032652500164240ustar00rootroot00000000000000# # API docs # macro(_join_list _var _sep) set(${_var} "") foreach(_element ${ARGN}) set(${_var} "${${_var}}${_sep}${_element}") endforeach() endmacro() find_package(Doxygen) if(DOXYGEN_FOUND) file(GLOB _dox_deps *.dox *.html) file(GLOB _all_hdrs ${CMAKE_SOURCE_DIR}/src/libical/*.h ${CMAKE_SOURCE_DIR}/src/libical/*.c ${CMAKE_BINARY_DIR}/src/libical/*.h ${CMAKE_SOURCE_DIR}/src/libicalss/*.h ${CMAKE_SOURCE_DIR}/src/libicalss/*.c ${CMAKE_BINARY_DIR}/src/libicalss/*.h ${CMAKE_SOURCE_DIR}/src/libicalvcal/*.h ${CMAKE_SOURCE_DIR}/src/libicalvcal/*.c ${CMAKE_BINARY_DIR}/src/libicalvcal/*.h ) list(APPEND _all_hdrs ${_dox_deps}) _join_list(DOXYGEN_INPUT " " ${_all_hdrs}) #apidox generation using doxygen configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/apidocs/html/index.html COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile DEPENDS ${_all_hdrs} ${_dox_deps} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(docs DEPENDS ${CMAKE_BINARY_DIR}/apidocs/html/index.html ) endif() libical-2.0.0/doc/Doxyfile.cmake000066400000000000000000000160621264032652500164540ustar00rootroot00000000000000#--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = Libical PROJECT_NUMBER = @PROJECT_VERSION@ OUTPUT_DIRECTORY = apidocs #CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The \$name class" \ "The \$name widget" \ "The \$name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO BUILTIN_STL_SUPPORT = NO DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = YES HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = YES CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_MEMBERS_CTORS_1ST = YES SORT_BRIEF_DOCS = YES SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = NO GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST = YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = YES WARN_FORMAT = "\$file:\$line: \$text" WARN_LOGFILE = doxygen.log #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @DOXYGEN_INPUT@ FILE_PATTERNS = *.cpp \ *.c \ *.cc \ *.cxx \ *.h \ *.hh \ *.hxx \ *.hpp \ *.dox RECURSIVE = YES EXCLUDE = @CMAKE_SOURCE_DIR@/src/java \ @CMAKE_SOURCE_DIR@/src/php \ @CMAKE_SOURCE_DIR@/src/python EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */.svn/* \ */.git/* \ */cmake/* \ *.moc.* \ moc* \ *.all_cpp.* \ *unload.* \ */test/* \ */tests/* \ *_p.cpp \ *_export.h EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = @CMAKE_SOURCE_DIR@/docs INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # do NOT generate any formats other than html #--------------------------------------------------------------------------- SOURCE_BROWSER = NO GENERATE_HTML = YES GENERATE_LATEX = NO GENERATE_RTF = NO GENERATE_XML = NO GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO DISABLE_INDEX = NO #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = Q_DECL_IMPORT="" EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES CLASS_GRAPH = YES COLLABORATION_GRAPH = NO GROUP_GRAPHS = NO UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = NO INCLUDED_BY_GRAPH = NO CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = YES SERVER_BASED_SEARCH = NO libical-2.0.0/doc/Mainpage.dox000066400000000000000000000024721264032652500161240ustar00rootroot00000000000000/*! @mainpage Libical - an implementation of iCalendar protocols and data formats @section about About Libical is an Open Source implementation of the iCalendar protocols and protocol data units. The iCalendar specification describes how calendar clients can communicate with calendar servers so users can store their calendar data and arrange meetings with other users. Libical implements RFC2445, RFC2446 and some of RFC2447. @section license License The code and datafiles in this distribution are licensed under the Mozilla Public License (MPL) v1.0. See http://www.mozilla.org/MPL/1.0 for a copy of the license. Alternately, you may use libical under the terms of the GNU Library General Public License (LGPL) v2.1. See http://www.gnu.org/licenses/lgpl-2.1.txt for a copy of the license. 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. @section acknowledgements Acknowledgments Portions of this distribution are (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. See src/libicalvcal/README.TXT for details. */ libical-2.0.0/doc/UsingLibical.txt000066400000000000000000001272451264032652500170030ustar00rootroot00000000000000 Using Libical Eric Busboom (eric@softwarestudio.org) January 2001 1 Introduction Libical is an Open Source implementation of the iCalendar protocols and protocol data units. The iCalendar specification describes how calendar clients can communicate with calendar servers so users can store their calendar data and arrange meetings with other users. Libical implements RFC5545, RFC5546, RFC7529; the iCalendar extensions in RFC6638; and some of RFC6047. This documentation assumes that you are familiar with the iCalendar standards RFC5545 and RFC5546. these specifications are online on the CALSCH webpage at: http://www.imc.org/ietf-calendar/ 1.1 The libical project This code is under active development. If you would like to contribute to the project, visit http://libical.github.io/libical/ 1.2 License The code and datafiles in this distribution are licensed under the Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the license. Alternately, you may use libical under the terms of the GNU Library General Public License. See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. This dual license ensures that the library can be incorporated into both proprietary code and GPL'd programs, and will benefit from improvements made by programmers in both realms. I will only accept changes into my version of the library if they are similarly dual-licensed. 1.3 Example Code A lot of the documentation for this library is in the form of example code. These examples are in the "examples" directory of the distribution. Also look in "src/test" for additional annotated examples. 2 Building the Library Libical uses autoconf to generate makefiles. It should built with no adjustments on Linux, FreeBSD and Solaris under gcc. Some version have been successfully been build on MacOS, Solaris, UnixWare, And Tru64 UNIX without gcc, but you may run into problems with a particular later version. For a more complete guide to building the library, see the README file in the distribution. 3 Structure The iCalendar data model is based on four types of objects: components, properties, values and parameters. Properties are the fundamental unit of information in iCalendar, and they work a bit like a hash entry, with a constant key and a variable value. Properties may also have modifiers, called parameters. In the iCal content line ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com The property name is "ORGANIZER," the value of the property is "mrbig@host.com" and the "ROLE" parameter specifies that Mr Big is the chair of the meetings associated with this property. Components are groups of properties that represent the core objects of a calendar system, such as events or timezones. Components are delimited by "BEGIN" and "END" tags. When a component is sent across a network, if it is un-encrypted, it will look something like: BEGIN:VCALENDAR METHOD:REQUEST PRODID: -//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT DTSTAMP:19980309T231000Z UID:guid-1.host1.com ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: MAILTO:employee-A@host.com DESCRIPTION:Project XYZ Review Meeting CATEGORIES:MEETING CLASS:PUBLIC CREATED:19980309T130000Z SUMMARY:XYZ Project Review DTSTART;TZID=US-Eastern:19980312T083000 DTEND;TZID=US-Eastern:19980312T093000 LOCATION:1CP Conference Room 4350 END:VEVENT END:VCALENDAR Note that components can be nested; this example has both a VCALENDAR and a VEVENT component, one nested inside the other. 3.1 Core iCal classes Libical is an object-based, data-oriented library. Nearly all of the routines in the library are associated with an opaque data types and perform some operation on that data type. Although the library does not actually have classes, we will use those terms since the behavior of these associations of data and routines is very similar to a class. 3.1.1 Properties Properties are represented with the icalproperty class and its many "derived" classes with on "derived" class per property type in RFC5545. Again, there is no actual inheritance relations, but there are clusters of routines that make this term useful. A property is a container for a single value and a set of parameters. 3.1.2 Components In libical, components are represented with the icalcomponent class. Icalcomponent is a container for a set of other components and properties. 3.1.3 Values Values are represented in a similar way to properties; a base class and many "derived " classes. A value is essentially a abstract handle on a single fundamental type, a structure or a union. 3.1.4 Parameters Parameters are represented in a similar way to properties, except that they contain only one value 3.2 Other elements of libical In addition to the core iCal classes, libical has many other types, structures, classes that aid in creating and using iCal components. 3.2.1 Enumerations and types Libical is strongly typed, so every component, property, parameter, and value type has an enumeration, and some have an associated structure or union. 3.2.2 The parser The libical parser offers a variety of ways to convert RFC5545 text into a libical internal component structure. the parser can parse blocks of text as a string, or it can parse line-by-line. 3.2.3 Error objects Libical has a substantial error reporting system for both programming errors and component usage errors. 3.2.4 Memory Management Since many of libicals interfaces return strings, the library has its own memory management system to elimiate the need to free every string returned from the library. 3.2.5 Storage classes The library also offers several classes to store components to flies, memory or databases. 4 Differences From RFCs Libical has been designed to follow the standards as closely as possible, so that the key objects in the standards are also key objects in the library. However, there are a few areas where the specifications are (arguably) irregular, and following them exactly would result in an unfriendly interface. These deviations make libical easier to use by maintaining a self-similar interface. 4.1 Pseudo Components Libical defines components for groups of properties that look and act like components, but are not defined as components in the specification. XDAYLIGHT and XSTANDARD are notable examples. These pseudo components group properties within the VTIMEZONE components. For instanace, the timezone properties associated with daylight savings time starts with "BEGIN:DAYLIGHT" and ends with "END:DAYLIGHT, just like other components, but is not defined as a component in RFC5545 (see RFC5545, section 3.6.5) In Libical,this grouping is represented by the XDAYLIGHT component. Standard iCAL components all start with the letter "V," while pseudo components start with"X." There are also pseudo components that are conceptually derived classes of VALARM. RFC5546 defines what properties may be included in each component, and for VALARM, the set of properties it may have depends on the value of the ACTION property. For instance, if a VALARM component has an ACTION property with the value of "AUDIO," the component must also have an "ATTACH" property. However, if the ACTION value is "DISPLAY," the component must have a DESCRIPTION property. To handle these various, complex restrictions, libical has pseudo components for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREALARM. 4.2 Combined Values Many values can take more than one type. TRIGGER, for instance, can have a value type of with DURATION or of DATE-TIME. These multiple types make it difficult to create routines to return the value associated with a property. It is natural to have interfaces that would return the value of a property, but it is cumbersome for a single routine to return multiple types. So, in libical, properties that can have multiple types are given a single type that is the union of their RFC5545 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, RFC5545 allows some multi-valued properties (like FREEBUSY) to exist as both a multi-values property and as multiple single value properties, while others (like CATEGORIES) can only exist as single multi-valued properties. This makes the internal representation for CATEGORIES illegal. However when you convert a component to a string, the library will collect all of the CATEGORIES properties into one. 5 Using libical 5.1 Creating Components There are three ways to create components in Libical: creating individual objects and assembling them, building entire objects in massive vaargs calls, and parsing a text file containing iCalendar data. 5.1.1 Constructor Interfaces Using constructor interfaces, you create each of the objects separately and then assemble them in to components: icalcomponent *event; icalproperty *prop; icalparameter *param; struct icaltimetype atime; event = icalcomponent_new(ICAL_VEVENT_COMPONENT); prop = icalproperty_new_dtstamp(atime) ; icalcomponent_add_property(event, prop); prop = icalproperty_new_uid(''guid-1.host1.com''); icalcomponent_add_property(event,prop); prop=icalproperty_new_organizer(''mrbig@host.com''); param = icalparameter_new_role(ICAL_ROLE_CHAIR) icalproperty_add_parameter(prop, param); icalcomponent_add_property(event,prop); Notice that libical uses a semi-object-oriented style of interface. Most things you work with are objects, that are instantiated with a constructor that has "new" in the name. Also note that, other than the object reference, most structure data is passed in to libical routines by value. Libical has some complex but very regular memory handling rules. These are detailed in section [sec:memory]. If any of the constructors fail, they will return 0. If you try to insert 0 into a property or component, or use a zero-valued object reference, libical will either silently ignore the error or will abort with an error message. This behavior is controlled by a compile time flag (ICAL_ERRORS_ARE_FATAL), and will abort by default. 5.1.2 vaargs Constructors There is another way to create complex components, which is arguably more elegant, if you are not horrified by varargs. The varargs constructor interface allows you to create intricate components in a single block of code. Here is the previous examples in the vaargs style. calendar = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version(''2.0''), icalproperty_new_prodid( ''-//RDU Software//NONSGML HandCal//EN''), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstamp(atime), icalproperty_new_uid(''guid-1.host1.com''), icalproperty_vanew_organizer( ''mrbig@host.com''), icalparameter_new_role(ICAL_ROLE_CHAIR), 0 ), icalproperty_vanew_attendee( ''employee-A@host.com'', icalparameter_new_role( ICAL_ROLE_REQPARTICIPANT), icalparameter_new_rsvp(1), icalparameter_new_cutype(ICAL_CUTYPE_GROUP), 0 ), icalproperty_new_location( "1CP Conference Room 4350"), 0 ), 0 ); This form is similar to the constructor form , except that the constructors have "vanew" instead of "new" in the name. The arguments are similar too, except that the component constructor can have a list of properties, and the property constructor can have a list of parameters. Be sure to terminate every list with a '0', or your code will crash, if you are lucky. 5.1.3 Parsing Text Files The final way to create components will probably be the most common; you can create components from RFC5545 compliant text. If you have the string in memory, use icalcomponent* icalparser_parse_string(char* str); If the string contains only one component, the parser will return the component in libical form. If the string contains multiple components, the multiple components will be returned as the children of an ICAL_XROOT_COMPONENT component. Parsing a whole string may seem wasteful if you want to pull a large component off of the network or from a file; you may prefer to parse the component line by line. This is possible too by using: icalparser* icalparser_new(); void icalparser_free(icalparser* parser); icalparser_get_line(parser,read_stream); icalparser_add_line(parser,line); icalparser_set_gen_data(parser,stream) These routines will construct a parser object to which you can add lines of input and retrieve any components that the parser creates from the input. These routines work by specifing an adaptor routine to get string data from a source. For an example: char* read_stream(char *s, size_t size, void *d) { char *c = fgets(s,size, (FILE*)d); return c; } main() { char* line; icalcomponent *c; icalparser *parser = icalparser_new(); FILE* stream = fopen(argv[1],"r"); icalparser_set_gen_data(parser,stream); do{ line = icalparser_get_line(parser,read_stream); c = icalparser_add_line(parser,line); if (c != 0){ printf("%s",icalcomponent_as_ical_string(c)); icalparser_claim(parser); printf("\n---------------\n"); icalcomponent_free(c); } } while ( line != 0); } The parser object parameterizes the routine used to get input lines with icalparser_set_gen_data() and icalparser_get_line(). In this example, the routine read_stream() will fetch the next line from a stream, with the stream passed in as the void* parameter d. The parser calls read_stream() from icalparser_get_line(), but it also needs to know what stream to use. This is set by the call to icalparser_set_gen_data(). By using a different routine for read_stream or passing in different data with icalparser_set_gen_data, you can connect to any data source. Using the same mechanism, other implementations could read from memory buffers, sockets or other interfaces. Since the example code is a very common way to use the parser, there is a convenience routine; icalcomponent* icalparser_parse(icalparser *parser, char* (*line_gen_func)(char *s, size_t size, void* d)) To use this routine, you still must construct the parser object and pass in a reference to a line reading routine. If the parser can create a single component from the input, it will return a pointer to the newly constructed component. If the parser can construct multiple components from the input, it will return a reference to an XROOT component ( of type ICAL_XROOT_COMPONENT.) This XROOT component will hold all of the components constructed from the input as children. 5.2 Accessing Components Given a reference to a component, you probably will want to access the properties, parameters and values inside. Libical interfaces let you find sub-component, add and remove sub-components, and do the same three operations on properties. 5.2.1 Finding Components To find a sub-component of a component, use: icalcomponent* icalcomponent_get_first_component( icalcomponent* component, icalcomponent_kind kind); This routine will return a reference to the first component of the type 'kind.' The key kind values, listed in icalenums.h are: ICAL_ANY_COMPONENT ICAL_VEVENT_COMPONENT ICAL_VTODO_COMPONENT ICAL_VJOURNAL_COMPONENT ICAL_VCALENDAR_COMPONENT ICAL_VFREEBUSY_COMPONENT ICAL_VALARM_COMPONENT These are only the most common components; there are many more listed in icalenums.h. As you might guess, if there is more than one subcomponent of the type you have chosen, this routine will return only the first. to get at the others, you need to iterate through the component. 5.2.2 Iterating Through Components Iteration requires a second routine to get the next subcomponent after the first: icalcomponent* icalcomponent_get_next_component( icalcomponent* component, icalcomponent_kind kind); With the 'first' and 'next' routines, you can create a for loop to iterate through all of a components subcomponents for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) { do_something(c); } This code bit wil iterate through all of the subcomponents in 'comp' but you can select a specific type of component by changing ICAL_ANY_COMPONENT to another component type. 5.2.3 Using Component Iterators The iteration model in the previous section requires the component to keep the state of the iteration. So, you could not use this model to perform a sorting operations, since you'd need two iterators and there is only space for one. If you ever call icalcomponent_get_first_component() when an iteration is in progress, the pointer will be reset to the beginning. To solve this problem, there are also external iterators for components. The routines associated with these external iterators are: icalcompiter icalcomponent_begin_component(icalcomponent* component, icalcomponent_kind kind); icalcompiter icalcomponent_end_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcompiter_next(icalcompiter* i); icalcomponent* icalcompiter_prior(icalcompiter* i); icalcomponent* icalcompiter_deref(icalcompiter* i); The _begin_() and _end_() routines return a new iterator that points to the beginning and ending of the list of subcomponent for the given component, and the kind argument works like the kind argument for internal iterators. After creating an iterators, use _next_() and _prior_() to step forward and backward through the list and get the component that the iterator points to, and use _deref() to return the component that the iterator points to without moving the iterator. All routines will return 0 when they move to point off the end of the list. Here is an example of a loop using these routines: for( i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i) ) { icalcomponent *this = icalcompiter_deref(&i); } 5.2.4 Removing Components Removing an element from a list while iterating through the list with the internal iterators can cause problems, since you will probably be removing the element that the internal iterator points to. The _remove() routine will keep the iterator valid by moving it to the next component, but in a normal loop, this will result in two advances per iteration, and you will remove only every other component. To avoid the problem, you will need to step the iterator ahead of the element you are going to remove, like this: for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); c != 0; c = next { next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); icalcomponent_remove_component(parent_comp,c); } Another way to remove components is to rely on the side effect of icalcomponent_remove_component: if component iterator in the parent component is pointing to the child that will be removed, it will move the iterator to the component after the child. The following code will exploit this behavior: icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT); while((c=icalcomponent_get_current_component(c)) != 0 ){ if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){ icalcomponent_remove_component(parent_comp,inner); } else { icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT); } } 5.2.5 Working with properties and parameters Finding, iterating and removing properties works the same as it does for components, using the property-specific or parameter-specific interfaces: icalproperty* icalcomponent_get_first_property( icalcomponent* component, icalproperty_kind kind); icalproperty* icalcomponent_get_next_property( icalcomponent* component, icalproperty_kind kind); void icalcomponent_add_property( icalcomponent* component, icalproperty* property); void icalcomponent_remove_property( icalcomponent* component, icalproperty* property); For parameters: icalparameter* icalproperty_get_first_parameter( icalproperty* prop, icalparameter_kind kind); icalparameter* icalproperty_get_next_parameter( icalproperty* prop, icalparameter_kind kind); void icalproperty_add_parameter( icalproperty* prop, icalparameter* parameter); void icalproperty_remove_parameter( icalproperty* prop, icalparameter_kind kind); Note that since there should be only one parameter of each type in a property, you will rarely need to use icalparameter_get_nect_paameter. 5.2.6 Working with values Values are typically part of a property, although they can exist on their own. You can manipulate them either as part of the property or independently. The most common way to work with values to is to manipulate them from they properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. For each property, there are a _get_ and a _set_ routine that access the internal value. For instanace, for the UID property, the routines are: void icalproperty_set_uid(icalproperty* prop, const char* v) const char* icalproperty_get_uid(icalproperty* prop) For multi-valued properties, like ATTACH, the value type is usually a struct or union that holds both possible types. If you want to work with the underlying value object, you can get and set it with: icalvalue* icalproperty_get_value (icalproperty* prop) void icalproperty_set_value(icalproperty* prop, icalvalue* value); Icalproperty_get_value() will return a reference that you can manipulate with other icalvalue routines. Most of the time, you will have to know what the type of the value is. For instance, if you know that the value is a DATETIME type, you can manipulate it with: struct icaltimetype icalvalue_get_datetime(icalvalue* value); void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); When working with an extension property or value (and X-PROPERTY or a property that has the parameter VALUE=x-name ) the value type is always a string. To get and set the value, use: void icalproperty_set_x(icalproperty* prop, char* v); char* icalproperty_get_x(icalproperty* prop); All X properties have the type of ICAL_X_PROPERTY, so you will need these routines to get and set the name of the property: char* icalproperty_get_x_name(icalproperty* prop) void icalproperty_set_x_name(icalproperty* prop, char* name); 5.2.7 Checking Component Validity RFC 5546 defines rules for what properties must exist in a component to be used for transferring scheduling data. Most of these rules relate to the existence of properties relative to the METHOD property, which declares what operation a remote receiver should use to process a component. For instance, if the METHOD is REQUEST and the component is a VEVENT, the sender is probably asking the receiver to join in a meeting. In this case, RFC5546 says that the component must specify a start time (DTSTART) and list the receiver as an attendee (ATTENDEE). Libical can check these restrictions with the routine: int icalrestriction_check(icalcomponent* comp); This routine returns 0 if the component does not pass RFC5546 restrictions, or if the component is malformed. The component you pass in must be a VCALENDAR, with one or more children, like the examples in RFC5546. When this routine runs, it will insert new properties into the component to indicate any errors it finds. See section 6.5.3, X-LIC-ERROR for more information about these error properties. 5.2.8 Converting Components to Text To create an RFC5545 compliant text representation of an object, use one of the *_as_ical_string() routines: char* icalcomponent_as_ical_string (icalcomponent* component) char* icalproperty_as_ical_string (icalproperty* property) char* icalparameter_as_ical_string (icalparameter* parameter) char* icalvalue_as_ical_string (icalvalue* value) In most cases, you will only use icalcomponent_as_ical_string (), since it will cascade and convert all of the parameters, properties and values that are attached to the root component. Remember that the string returned by these routines is owned by the library, and will eventually be re-written. You should copy it if you want to preserve it. 5.3 Time 5.3.1 Time structure LIbical defines it's own time structure for storing all dates and times. It would have been nice to re-use the C library's struct tm, but that structure does not differentiate between dates and times, and between local time and UTC. The libical structure is: struct icaltimetype { int year; int month; int day; int hour; int minute; int second; int is_utc; /* 1-> time is in UTC timezone */ int is_date; /* 1 -> interpret this as date. */ }; The year, month, day, hour, minute and second fields hold the broken-out time values. The is_utc field distinguishes between times in UTC and a local time zone. The is_date field indicates if the time should be interpreted only as a date. If it is a date, the hour, minute and second fields are assumed to be zero, regardless of their actual vaules. 5.3.2 Creating time structures There are several ways to create a new icaltimetype structure: struct icaltimetype icaltime_from_string(const char* str); struct icaltimetype icaltime_from_timet(time_t v, int is_date); struct icaltimetype icaltime_from_int(int v, int is_date, int is_utc); Icaltime_from_string takes any RFC5545 compliant time string: struct icaltimetype tt = icaltime_from_string("19970101T103000"); Icaltime_from_timet takes a timet value, representing seconds past the POSIX epoch, and a flag to indicate if the time is a date. Dates have an identical structure to a time, but the time portion ( hours, minuts and seconds ) is always 00:00:00. Dates act differently in sorting an comparision, and they have a different string representation in RFC5545. The icaltime_from_int is like icaltime_from_timet, but with an arbitrary epoch. This routine was a mistake and is deprecated. 5.3.3 Time manipulating routines The null time value is used to indicate that the data in the structure is not a valid time. struct icaltimetype icaltime_null_time(void); int icaltime_is_null_time(struct icaltimetype t); It is sensible for the broken-out time fields to contain values that are not permitted in an ISO compliant time string. For instance, the seconds field can hold values greater than 59, and the hours field can hold values larger than 24. The excessive values will be rolled over into the next larger field when the structure is normalized. struct icaltimetype icaltime_normalize(struct icaltimetype t); Normalizing allows you to do arithmetic operations on time values. struct icaltimetype tt = icaltime_from_string("19970101T103000"); tt.days +=3 tt.second += 70; tt = icaltime_normalize(tt); There are several routines to get the day of the week or month, etc, from a time structure. short icaltime_day_of_year(struct icaltimetype t); struct icaltimetype icaltime_from_day_of_year(short doy, short year); short icaltime_day_of_week(struct icaltimetype t); short icaltime_start_doy_of_week(struct icaltimetype t); short icaltime_week_number(short day_of_month, short month, short year); struct icaltimetype icaltime_from_week_number(short week_number, short year); short icaltime_days_in_month(short month,short year); Two routines convert time structures to and from the number of seconds since the POSIX epoch. The is_date field indicates whether or not the hour, minute and second fields should be used in the conversion. struct icaltimetype icaltime_from_timet(time_t v, int is_date); time_t icaltime_as_timet(struct icaltimetype); The compare routine works exactly like strcmp, but on time structures. int icaltime_compare(struct icaltimetype a,struct icaltimetype b); The following routines convert between UTC and a named timezone. The tzid field must be a timezone name from the Olsen database, such as "America/Los_Angeles." The utc_offset routine returns the offset of the named time zone from UTC, in seconds. The tt parameter in the following routines indicates the date on which the conversion should be made. The tt parameter is necessary because timezones have many different rules for when daylight savings time is used, and these rules can change over time. So, for a single timezone one year may have daylight savings time on March 15, but for other years March 15 may be standard time, and some years may have standard time all year. int icaltime_utc_offset(struct icaltimetype tt, char* tzid); int icaltime_local_utc_offset(); struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid); struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid); struct icaltimetype icaltime_as_local(struct icaltimetype tt); 5.4 Storing Objects The libical distribution includes a separate library, libicalss, that allows you to store iCal component data to disk in a variety of ways. The file storage routines are organized in an inheritance heirarchy that is rooted in icalset, with the derived class icalfileset and icaldirset. Icalfileset stores components to a file, while icaldirset stores components to multiple files, one per month based on DTSTAMP. Other storages classess, for storage to a heap or a mysql database for example, could be added in the future. All of the icalset derived classes have the same interface: icaldirset* icaldirset_new(const char* path); void icaldirset_free(icaldirset* store); const char* icaldirset_path(icaldirset* store); void icaldirset_mark(icaldirset* store); icalerrorenum icaldirset_commit(icaldirset* store); icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent* comp); icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent* comp); int icaldirset_count_components(icaldirset* store, icalcomponent_kind kind); icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge); void icaldirset_clear(icaldirset* store); icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid); int icaldirset_has_uid(icaldirset* store, const char* uid); icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent *c); icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc, icalcomponent *newc); icalcomponent* icaldirset_get_current_component(icaldirset* store); icalcomponent* icaldirset_get_first_component(icaldirset* store); icalcomponent* icaldirset_get_next_component(icaldirset* store); 5.4.1 Creating a new set You can create a new set from either the base class or the direved class. From the base class use one of: icalset* icalset_new_file(const char* path); icalset* icalset_new_dir(const char* path); icalset* icalset_new_heap(void); icalset* icalset_new_mysql(const char* path); You can also create a new set based on the derived class, For instance, with icalfileset: icalfileset* icalfileset_new(const char* path); icalfileset* icalfileset_new_open(const char* path, int flags, int mode); icalset_new_file is identical to icalfileset_new. Both routines will open an existing file for readinga and writing, or create a new file if it does not exist. Icalfilset_new_open takes the same arguments as the open() system routine and behaves in the same way. The icalset and icalfilset objects are somewhat interchangable -- you can use an icalfileset* as an argument to any of the icalset routines. The following examples will all use icalfileset routines; using the other icalset derived classess will be similar. 5.4.2 Adding, Finding and Removing Components To add components to a set, use: icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent* child); The fileset keeps an inmemory copy of the components, and this set must be written back to the file ocassionally. There are two routines to manage this: void icalfileset_mark(icalfileset* cluster); icalerrorenum icalfileset_commit(icalfileset* cluster); icalfileset_mark indicates that the in-memory components have changed. Calling the _add_component routine will call _mark automatically, but you may need to call it yourself if you have made a change to an existing component. The _commit routine writes the data base to disk, but only if it is marked. The _commit routine is called automatically when the icalfileset is freed. To iterate through the components in a set, use: icalcomponent* icalfileset_get_first_component(icalfileset* cluster); icalcomponent* icalfileset_get_next_component(icalfileset* cluster); icalcomponent* icalfileset_get_current_component (icalfileset* cluster); These routines work like the corresponding routines from icalcomponent, except that their output is filtered through a gauge. A gauge is a test for the properties within a components; only components that pass the test are returned. A gauge can be constructed from a MINSQL string with: icalgauge* icalgauge_new_from_sql(char* sql); Then, you can add the gauge to the set with : icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge); Here is an example that puts all of these routines together: void test_fileset() { icalfileset *fs; icalcomponent *c; int i; char *path = "test_fileset.ics"; icalgauge *g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND DTSTART <= '20000106T120000Z'"); fs = icalfileset_new(path); for (i = 0; i!= 10; i++){ c = make_component(i); /* Make a new component where DTSTART has month of i */ icalfileset_add_component(fs,c); } icalfileset_commit(fs); /* Write to disk */ icalfileset_select(fs,g); /* Set the gauge to filter components */ for (c = icalfileset_get_first_component(fs); c != 0; c = icalfileset_get_next_component(fs)){ struct icaltimetype t = icalcomponent_get_dtstart(c); printf("%s\n",icaltime_as_ctime(t)); } icalfileset_free(fs); } 5.4.3 Other routines There are several other routines in the icalset interface, but they not fully implemented yet. 5.5 Memory Management Libical relies heavily on dynamic allocation for both the core objects and for the strings used to hold values. Some of this memory the library caller owns and must free, and some of the memory is managed by the library. Here is a summary of the memory rules. 1) If the function name has "new" in it, the caller gets control of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone() ) 2) If you got the memory from a routine with new in it, you must call the corresponding *_free routine to free the memory. ( Use icalcomponent_free() to free objects created with icalcomponent_new()) 3) If the function name has "add" in it, the caller is transferring control of the memory to the routine. ( icalproperty_add_parameter() ) 4) If the function name has "remove" in it, the caller passes in a pointer to an object and after the call returns, the caller owns the object. So, before you call icalcomponent_remove_property(comp,foo), you do not own "foo" and after the call returns, you do. 5) If the routine returns a string and its name does NOT end in "_r", libical owns the memory and will put it on a ring buffer to reclaim later. For example, icalcomponent_as_ical_string(). You'd better strdup() it if you want to keep it, and you don't have to delete it. 6) If the routine returns a string and its name *does* end in "_r", the caller gets control of the memory and is responsible for freeing it. For example, icalcomponent_as_ical_string_r() does the same thing as icalcomponent_as_ical_string(), except you now have control of the string buffer it returns. 5.6 Error Handling Libical has several error handling mechanisms for the various types of programming, semantic and syntactic errors you may encounter. 5.6.1 Return values Many library routines signal errors through their return values. All routines that return a pointer, such as icalcomponent_new(), will return 0 ( zero ) on a fatal error. Some routines will return a value of enum icalerrorenum. 5.6.2 icalerrno Most routines will set the global error value icalerrno on errors. This variable is an enumeration; permissible values can be found in libical/icalerror.h. If the routine returns an enum icalerrorenum, then the return value will be the same as icalerrno. You can use icalerror_strerror() to get a string that describes the error. The enumerations are: * ICAL_BADARG_ERROR -- One of the argument to a routine was bad. Typically for a null pointer. * ICAL_NEWFAILED_ERROR -- A new() or malloc() failed * ICAL_MALFORMEDDATA_ERROR -- An input string was not in the correct format * ICAL_PARSE_ERROR -- The parser failed to parse an incomming component * ICAL_INTERNAL_ERROR -- Largely equivalent to an assert * ICAL_FILE_ERROR -- A file operation failed. Check errno for more detail. * ICAL_ALLOCATION_ERROR -- ? * ICAL_USAGE_ERROR -- ? * ICAL_NO_ERROR -- No error * ICAL_MULTIPLEINCLUSION_ERROR -- ? * ICAL_TIMEDOUT_ERROR -- For CSTP and acquiring locks * ICAL_UNKNOWN_ERROR -- ? 5.6.3 X-LIC-ERROR and X-LIC-INVALID-COMPONENT The library handles semantic and syntactic errors in components by inserting errors properties into the components. If the parser cannot parse incoming text ( a syntactic error ) or if the icalrestriction_check() routine indicates that the component does not meet the requirements of RFC5546 ( a semantic error) the library will insert properties of the type X-LIC-ERROR to describe the error. Here is an example of the error property: X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions for property DTSTART. Expected 1 instances of the property and got 0 This error resulted from a call to icalrestriction_check(), which discovered that the component does not have a DTSTART property, as required by RFC5545. There are a few routines to manipulate error properties: [ The following data is supposed to be in a table. It looks OK in LyX, but does not format propertly in output. ] +-------------------------------------+---------------------------------------------------------+ | Routine | Purpose | +-------------------------------------+---------------------------------------------------------+ | void icalrestriction_check() | Check a component against RFC5546 and insert | +-------------------------------------+---------------------------------------------------------+ | | error properties to indicate non compliance | +-------------------------------------+---------------------------------------------------------+ | int icalcomponent_count_errors() | Return the number of error properties | +-------------------------------------+---------------------------------------------------------+ | | in a component | +-------------------------------------+---------------------------------------------------------+ | void icalcomponent_strip_errors() | Remove all error properties in as | +-------------------------------------+---------------------------------------------------------+ | | component | +-------------------------------------+---------------------------------------------------------+ | void icalcomponent_convert_errors() | Convert some error properties into | +-------------------------------------+---------------------------------------------------------+ | | REQUESTS-STATUS proprties to indicate the inability to | +-------------------------------------+---------------------------------------------------------+ | | process the component as an iTIP request. | +-------------------------------------+---------------------------------------------------------+ The types of errors are listed in icalerror.h. They are: ICAL_XLICERRORTYPE_COMPONENTPARSEERROR ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR ICAL_XLICERRORTYPE_PROPERTYPARSEERROR ICAL_XLICERRORTYPE_VALUEPARSEERROR ICAL_XLICERRORTYPE_UNKVCALPROP ICAL_XLICERRORTYPE_INVALIDITIP The libical parser will generate the error that end in PARSEERROR when it encounters garbage in the input steam. ICAL_XLICERRORTYPE_INVALIDITIP is inserted by icalrestriction_check(), and ICAL_XLICERRORTYPE_UNKVCALPROP is generated by icalvcal_convert() when it encounters a vCal property that it cannot convert or does not know about. Icalcomponent_convert_errors() converts some of the error properties in a component into REQUEST-STATUS properties that indicate a failure. As of libical version0.18, this routine only convert *PARSEERROR errors and it always generates a 3.x ( failure ) code. This makes it more of a good idea than a really useful bit of code. 5.6.4 ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal If icalerror_get_errors_are_fatal() returns 1, then any error condition will cause the program to abort. The abort occurs in icalerror_set_errno(), and is done with an assert(0) if NDEBUG is undefined, and with icalerror_crash_here if NDEBUG is defined. Initially, icalerror_get_errors_are_fatal() is 1 when ICAL_ERRORS_ARE_FATAL is defined, and 0 otherwise. Since ICAL_ERRORS_ARE_FATAL is defined by default, icalerror_get_errors_are_fatal() is also set to 1 by default. You can change the compiled-in ICAL_ERRORS_ARE_FATAL behavior at runtime by calling icalerror_set_errors_are_fatal(0) (i.e, errors are not fatal) or icalerror_set_errors_are_fatal(1) (i.e, errors are fatal). 5.7 Naming Standard Structures that you access with the "struct" keyword, such as "struct icaltimetype" are things that you are allowed to see inside and poke at. Structures that you access though a typedef, such as "icalcomponent" are things where all of the data is hidden. Component names that start with "V" are part of RFC 5545 or another iCal standard. Component names that start with "X" are also part of the spec, but they are not actually components in the spec. However, they look and act like components, so they are components in libical. Names that start with "XLIC" or "X-LIC" are not part of any iCal spec. They are used internally by libical. Enums that identify a component, property, value or parameter end with "_COMPONENT," "_PROPERTY," "_VALUE," or "_PARAMETER"s Enums that identify a parameter value have the name of the parameter as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. The enums for the parts of a recurarance rule and request statuses are irregular. 6 Hacks and Bugs There are a lot of hacks in the library -- bits of code that I am not proud of and should probably be changed. These are marked with the comment string "HACK." 7 Library Reference 7.1 Manipulating struct icaltimetype 7.1.1 Struct icaltimetype struct icaltimetype { int year; int month; int day; int hour; int minute; int second; int is_utc; int is_date; const char* zone; }; libical-2.0.0/examples/000077500000000000000000000000001264032652500147335ustar00rootroot00000000000000libical-2.0.0/examples/CMakeLists.txt000066400000000000000000000023731264032652500175000ustar00rootroot00000000000000include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_BINARY_DIR}/src/libical ${CMAKE_SOURCE_DIR}/src/libicalss ) ########### doesnothing target ############### set(doesnothing_SRCS access_components.c access_properties_and_parameters.c errors.c main.c parse_text.c ) add_executable(doesnothing ${doesnothing_SRCS}) add_dependencies(doesnothing ical icalss icalvcal) if(NOT STATIC_ONLY) target_link_libraries(doesnothing ical icalss icalvcal) else() if(NOT WIN32) target_link_libraries(doesnothing ${CMAKE_BINARY_DIR}/lib/libical.a ${CMAKE_BINARY_DIR}/lib/libicalss.a ${CMAKE_BINARY_DIR}/lib/libicalvcal.a ) else() target_link_libraries(doesnothing ${CMAKE_BINARY_DIR}/bin/libical-static.lib ${CMAKE_BINARY_DIR}/bin/libicalss-static.lib ${CMAKE_BINARY_DIR}/bin/libicalvcal-static.lib ) endif() target_link_libraries(doesnothing ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) target_link_libraries(doesnothing ${ICU_LIBRARY}) endif() if(ICU_I18N_FOUND) target_link_libraries(doesnothing ${ICU_I18N_LIBRARY}) endif() if(WITH_BDB) target_link_libraries(doesnothing ${BDB_LIBRARY}) endif() endif() libical-2.0.0/examples/access-usecases.txt000066400000000000000000000025341264032652500205520ustar00rootroot00000000000000 Usecases --------- 1) iMIP based CUA uses a local, file-based store 2) CAP based CUA uses one or more remote CAP servers 3) CAP based CUA uses a local cache that synchronizes with one or more CAP servers. 4) CUA imports and exports from a file Scenarios. --------- 1 Open a connection to a store. 2 Create a new calendar for which user Bob can read and user Alice can read an write. 3 Create several new calendars 4 Delete a calendar 5 Change the calid of a calendar 6 Delete all calendars belonging to user bob 7 Get three new UIDs from the store 8 Store a new VEVENT in the store. 9 Find all components for which the LOCATION is "West Conference Room" and change them to "East Conference Room" 10 Find the component with UID X and add a GEO property to it. 11 Delete all VEVENTS which have a METHOD that is not CREATED 12 Retrieve all VEVENTS which have a METHOD that is not CREATED 13 Retrieve the capabilities of the store 14 Retrieve/Modify/Add/Delete properties of a store 15 Retrieve/Modify/Add/Delete VCARs of a store 16 Retrieve/Modify/Add/Delete VTIMEZONEs of a store 17 Retrieve/Modify/Add/Delete properties of a calendar 18 Retrieve/Modify/Add/Delete VCARs of a calendar 19 Retrieve/Modify/Add/Delete VTIMEZONEs of a calendar 20 Translate a CALID into one or more UPNs 21 Expand a group UPN into all of the members of the grouplibical-2.0.0/examples/access_components.c000066400000000000000000000217311264032652500206110ustar00rootroot00000000000000/* Access_component.c */ #include void do_something(icalcomponent *c); /* Creating iCal Components There are two ways to create new component in libical. You can build the component from primitive parts, or you can create it from a string. There are two variations of the API for building the component from primitive parts. In the first variation, you add each parameter and value to a property, and then add each property to a component. This results in a long series of function calls. This style is show in create_new_component() The second variation uses vargs lists to nest many primitive part constructors, resulting in a compact, neatly formated way to create components. This style is shown in create_new_component_with_va_args() */ icalcomponent* create_new_component() { /* variable definitions */ icalcomponent* calendar; icalcomponent* event; struct icaltimetype atime = icaltime_from_timet( time(0),0); struct icalperiodtype rtime; icalproperty* property; /* Define a time type that will use as data later. */ rtime.start = icaltime_from_timet( time(0),0); rtime.end = icaltime_from_timet( time(0),0); rtime.end.hour++; /* Create calendar and add properties */ calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); /* Nearly every libical function call has the same general form. The first part of the name defines the 'class' for the function, and the first argument will be a pointer to a struct of that class. So, icalcomponent_ functions will all take icalcomponent* as their first argument. */ /* The next call creates a new proeprty and immediately adds it to the 'calendar' component. */ icalcomponent_add_property( calendar, icalproperty_new_version("2.0") ); /* Here is the short version of the memory rules: If the routine name has "new" in it: Caller owns the returned memory. If you pass in a string, the routine takes the memory. If the routine name has "add" in it: The routine takes control of the component, property, parameter or value memory. If the routine returns a string ( "get" and "as_ical_string" ) The library owns the returned memory. There are more rules, so refer to the documentation for more details. */ icalcomponent_add_property( calendar, icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") ); /* Add an event */ event = icalcomponent_new(ICAL_VEVENT_COMPONENT); icalcomponent_add_property( event, icalproperty_new_dtstamp(atime) ); /* In the previous call, atime is a struct, and it is passed in by value. This is how all compound types of values are handled. */ icalcomponent_add_property( event, icalproperty_new_uid("guid-1.host1.com") ); /* add a property that has parameters */ property = icalproperty_new_organizer("mailto:mrbig@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_CHAIR) ); icalcomponent_add_property(event,property); /* In this style of component creation, you need to use an extra call to add parameters to properties, but the form of this operation is the same as adding a property to a component */ /* add another property that has parameters */ property = icalproperty_new_attendee("mailto:employee-A@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) ); icalproperty_add_parameter( property, icalparameter_new_rsvp(1) ); icalproperty_add_parameter( property, icalparameter_new_cutype(ICAL_CUTYPE_GROUP) ); icalcomponent_add_property(event,property); /* more properties */ icalcomponent_add_property( event, icalproperty_new_description("Project XYZ Review Meeting") ); icalcomponent_add_property( event, icalproperty_new_categories("MEETING") ); icalcomponent_add_property( event, icalproperty_new_class(ICAL_CLASS_PUBLIC) ); icalcomponent_add_property( event, icalproperty_new_created(atime) ); icalcomponent_add_property( event, icalproperty_new_summary("XYZ Project Review") ); property = icalproperty_new_dtstart(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("US-Eastern") ); icalcomponent_add_property(event,property); property = icalproperty_new_dtend(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("US-Eastern") ); icalcomponent_add_property(event,property); icalcomponent_add_property( event, icalproperty_new_location("1CP Conference Room 4350") ); icalcomponent_add_component(calendar,event); return calendar; } /* Now, create the same component as in the previous routine, but use the constructor style. */ icalcomponent* create_new_component_with_va_args() { /* This is a similar set up to the last routine */ icalcomponent* calendar; struct icaltimetype atime = icaltime_from_timet( time(0),0); struct icalperiodtype rtime; rtime.start = icaltime_from_timet( time(0),0); rtime.end = icaltime_from_timet( time(0),0); rtime.end.hour++; /* Some of these routines are the same as those in the previous routine, but we've also added several 'vanew' routines. These 'vanew' routines take a list of properties, parameters or values and add each of them to the parent property or component. */ calendar = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstamp(atime), icalproperty_new_uid("guid-1.host1.com"), icalproperty_vanew_organizer( "mailto:mrbig@host.com", icalparameter_new_role(ICAL_ROLE_CHAIR), 0 ), icalproperty_vanew_attendee( "mailto:employee-A@host.com", icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), icalparameter_new_rsvp(1), icalparameter_new_cutype(ICAL_CUTYPE_GROUP), 0 ), icalproperty_new_description("Project XYZ Review Meeting"), icalproperty_new_categories("MEETING"), icalproperty_new_class(ICAL_CLASS_PUBLIC), icalproperty_new_created(atime), icalproperty_new_summary("XYZ Project Review"), icalproperty_vanew_dtstart( atime, icalparameter_new_tzid("US-Eastern"), 0 ), icalproperty_vanew_dtend( atime, icalparameter_new_tzid("US-Eastern"), 0 ), icalproperty_new_location("1CP Conference Room 4350"), 0 ), 0 ); /* Note that properties with no parameters can use the regular 'new' constructor, while those with parameters use the 'vanew' constructor. And, be sure that the last argument in the 'vanew' call is a zero. Without, your program will probably crash. */ return calendar; } void find_sub_components(icalcomponent* comp) { icalcomponent *c; /* The second parameter to icalcomponent_get_first_component indicates the type of component to search for. This will iterate through all sub-components */ for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ do_something(c); } /* This will iterate only though VEVENT sub-components */ for(c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT)){ do_something(c); } } /* Ical components only have one internal iterator, so removing the object that the iterator points to can cause problems. Here is the right way to remove components */ void remove_vevent_sub_components(icalcomponent* comp){ icalcomponent *c, *next; for( c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); c != 0; c = next) { next = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT); icalcomponent_remove_component(comp,c); do_something(c); } } libical-2.0.0/examples/access_properties_and_parameters.c000066400000000000000000000110061264032652500236570ustar00rootroot00000000000000/* access_properties_and_parameters.c */ #include #include /* Get a particular parameter out of a component. This routine will return a list of strings of all attendees who are required. Note that this routine assumes that the component that we pass in is a VEVENT. */ void get_required_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; assert(event != 0); assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); /* This loop iterates over all of the ATTENDEE properties in the event */ /* The iteration routines save their state in the event struct, so the are not thread safe unless you lock the whole component. */ for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { /* Get the first ROLE parameter in the property. There should only be one, so we won't bother to iterate over them. But, you can iterate over parameters just like with properties */ parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); /* If the parameter indicates the participant is required, get the attendees name and stick a copy of it into the output array */ if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) { /* Remember, the caller does not own this string, so you should strdup it if you want to change it. */ const char *attendee = icalproperty_get_attendee(p); printf("%s",attendee); } } } /* 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; char *str; icalproperty *clone; /* Create a new property */ prop = icalproperty_vanew_comment( "Another Comment", icalparameter_new_cn("A Common Name 1"), icalparameter_new_cn("A Common Name 2"), icalparameter_new_cn("A Common Name 3"), icalparameter_new_cn("A Common Name 4"), 0); /* Iterate through all of the parameters in the property */ for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); param != 0; param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { printf("Prop parameter: %s\n",icalparameter_get_cn(param)); } /* Get a string representation of the property's value */ printf("Prop value: %s\n",icalproperty_get_comment(prop)); /* Spit out the property in its RFC 5545 representation */ str = icalproperty_as_ical_string_r(prop); printf("As iCAL string:\n %s\n", str); free(str); /* 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); str = icalvalue_as_ical_string_r(value); printf("Value: %s", str); free(str); /* Free the original and the clone */ icalproperty_free(clone); icalproperty_free(prop); } libical-2.0.0/examples/changenames.pl000066400000000000000000000001561264032652500175430ustar00rootroot00000000000000s/icalcluster/icalfileset/g; s/ICALCLUSTER/ICALFILESET/g; s/icalstore/icaldirset/g; s/ICALSTORE/ICALDIRSET/g; libical-2.0.0/examples/errors.c000066400000000000000000000033431264032652500164160ustar00rootroot00000000000000/* errors.c */ #include void program_errors() { /*Most routines will set icalerrno on errors. This is an enumeration defined in icalerror.h */ icalerror_clear_errno(); (void)icalcomponent_new(ICAL_VEVENT_COMPONENT); if (icalerrno != ICAL_NO_ERROR){ fprintf(stderr,"Horrible libical error: %s\n", icalerror_strerror(icalerrno)); } } void component_errors(icalcomponent *comp) { int errors; icalproperty *p; /* presume that we just got this component from the parser */ errors = icalcomponent_count_errors(comp); printf("This component has %d parsing errors\n", errors); /* Print out all of the parsing errors. This is not strictly correct, because it does not descend into any sub-components, as icalcomponent_count_errors() does. */ for(p = icalcomponent_get_first_property(comp,ICAL_XLICERROR_PROPERTY); p != 0; p = icalcomponent_get_next_property(comp,ICAL_XLICERROR_PROPERTY)) { printf("-- The error is %s:\n",icalproperty_get_xlicerror(p)); } /* Check the component for iTIP compilance, and add more X-LIC-ERROR properties if it is non-compilant. */ icalrestriction_check(comp); /* Count the new errors. */ if(errors != icalcomponent_count_errors(comp)){ printf(" -- The component also has iTIP restriction errors \n"); } /* Since there are iTIP restriction errors, it may be impossible to process this component as an iTIP request. In this case, the X-LIC-ERROR proeprties should be expressed as REQUEST-STATUS properties in the reply. This following routine makes this conversion */ icalcomponent_convert_errors(comp); } libical-2.0.0/examples/main.c000066400000000000000000000003131264032652500160200ustar00rootroot00000000000000/* This is just to make the code in the example directory link properly. */ #include int main() { return 1; } void do_something(icalcomponent* comp) { (void)comp;/*unused*/ } libical-2.0.0/examples/parse_text.c000066400000000000000000000030171264032652500172560ustar00rootroot00000000000000/* parse_text.c */ #include #include /* The icalparser_get_line routine will create a single *content* line out of one or more input lines. The content line is all of the properties and values for a single property, and it can span several input lines. So, icalparser_get_line will need to be able to get more data on its own. Read_string is a routine that does this. You can write your own version of read stream to get data from other types of files, sockets, etc. */ char* read_stream(char *s, size_t size, void *d) { return fgets(s, (int)size, (FILE*)d); } void parse_text(char* argv[]) { char* line; FILE* stream; icalcomponent *c; /* Create a new parser object */ icalparser *parser = icalparser_new(); stream = fopen(argv[1],"r"); assert(stream != 0); /* Tell the parser what input routie it should use. */ icalparser_set_gen_data(parser,stream); do{ /* Get a single content line by making one or more calls to read_stream()*/ line = icalparser_get_line(parser,read_stream); /* Now, add that line into the parser object. If that line completes a component, c will be non-zero */ c = icalparser_add_line(parser,line); if (c != 0){ char *temp = icalcomponent_as_ical_string_r(c); printf("%s", temp); free(temp); printf("\n---------------\n"); icalcomponent_free(c); } } while ( line != 0); icalparser_free(parser); } libical-2.0.0/iOS.cmake000066400000000000000000000141761264032652500146220ustar00rootroot00000000000000# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake # files which are included with CMake 2.8.4 # It has been altered for iOS development # Options: # # IOS_PLATFORM = OS (default) or SIMULATOR # This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders # OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. # SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. # # CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder # By default this location is automatcially chosen based on the IOS_PLATFORM value above. # If set manually, it will override the default location and force the user of a particular Developer Platform # # CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder # By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. # In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. # If set manually, this will force the use of a specific SDK version # Standard settings set (CMAKE_SYSTEM_NAME Darwin) set (CMAKE_SYSTEM_VERSION 1 ) set (UNIX True) set (APPLE True) set (IOS True) # Force the compilers to gcc for iOS include (CMakeForceCompiler) CMAKE_FORCE_C_COMPILER (gcc gcc) CMAKE_FORCE_CXX_COMPILER (g++ g++) # Skip the platform compiler checks for cross compiling set (CMAKE_CXX_COMPILER_WORKS TRUE) set (CMAKE_C_COMPILER_WORKS TRUE) # All iOS/Darwin specific settings - some may be redundant set (CMAKE_SHARED_LIBRARY_PREFIX "lib") set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") set (CMAKE_SHARED_MODULE_PREFIX "lib") set (CMAKE_SHARED_MODULE_SUFFIX ".so") set (CMAKE_MODULE_EXISTS 1) set (CMAKE_DL_LIBS "") set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") # Hidden visibilty is required for cxx on iOS set (CMAKE_C_FLAGS "") set (CMAKE_CXX_FLAGS "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden") set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") # hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree # (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache # and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) # hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) # Setup iOS platform if (NOT DEFINED IOS_PLATFORM) set (IOS_PLATFORM "OS") endif (NOT DEFINED IOS_PLATFORM) set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") # Check the platform selection and setup for developer root if (${IOS_PLATFORM} STREQUAL "OS") set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") else (${IOS_PLATFORM} STREQUAL "OS") message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR") endif (${IOS_PLATFORM} STREQUAL "OS") # Setup iOS developer location if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) set (CMAKE_IOS_DEVELOPER_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") # Find and use the most recent iOS sdk if (NOT DEFINED CMAKE_IOS_SDK_ROOT) file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") if (_CMAKE_IOS_SDKS) list (SORT _CMAKE_IOS_SDKS) list (REVERSE _CMAKE_IOS_SDKS) list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) else (_CMAKE_IOS_SDKS) message (FATAL_ERROR "No iOS SDK's found in default seach path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") endif (_CMAKE_IOS_SDKS) message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") # Set the sysroot default to the most recent SDK set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") # set the architecture for iOS - using ARCHS_STANDARD_32_BIT sets armv6,armv7 and appears to be XCode's standard. # The other value that works is ARCHS_UNIVERSAL_IPHONE_OS but that sets armv7 only set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS") # Set the find root to the iOS developer roots and to user defined paths set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root") # default to searching for frameworks first set (CMAKE_FIND_FRAMEWORK FIRST) # set up the default search directories for frameworks set (CMAKE_SYSTEM_FRAMEWORK_PATH ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks ) # only search the iOS sdks, not the remainder of the host filesystem set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libical-2.0.0/libical.pc.in000066400000000000000000000005161264032652500154470ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ threadslib=@PTHREAD_LIBS@ iculib=@ICU_LIBRARIES@ @ICU_I18N_LIBRARIES@ Name: libical Description: An implementation of basic iCAL protocols Version: @VERSION@ Libs: -L${libdir} -lical -licalss -licalvcal ${threadslib} ${iculib} Cflags: -I${includedir} libical-2.0.0/scripts/000077500000000000000000000000001264032652500146045ustar00rootroot00000000000000libical-2.0.0/scripts/CMakeLists.txt000066400000000000000000000000541264032652500173430ustar00rootroot00000000000000 ########### install files ############### libical-2.0.0/scripts/mkderivedcomponents.pl000077500000000000000000000071701264032652500212310ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################################ # (C) COPYRIGHT 2000, Eric Busboom # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ 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 () { 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 () { 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 < /* for va_arg functions */ EOM } if ($opt_p and !$opt_i) { print < # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ require "readvaluesfile.pl"; use Getopt::Std; getopts('chspi:'); %no_xname = (RELATED => 1, RANGE => 1, RSVP => 1, XLICERRORTYPE => 1, XLICCOMPARETYPE => 1); %params = read_parameters_file($ARGV[0]); # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN, $opt_i) || die "Can't open input file $opt_i"; while () { if (//) { $autogenMsg = "of section of machine generated code (mkderivedparameters.pl). Do not edit."; if ($opt_p) { $startComment = "#"; $endComment = ""; } else { $startComment = "/*"; $endComment = " */"; } print $startComment. " START " . $autogenMsg . $endComment . "\n\n"; insert_code(); print $startComment. " END " . $autogenMsg . $endComment . "\n\n"; } else { print; } } } sub insert_code { # Write parameter enumerations and datatypes if ($opt_h) { my $enumConst = $params{'ANY'}->{"kindEnum"}; print "typedef enum icalparameter_kind {\n ICAL_ANY_PARAMETER = " . $enumConst . ",\n"; $enumVal = 1; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $uc = join("", map {uc($_);} split(/-/, $param)); $enumConst = $params{$param}->{"kindEnum"}; print " ICAL_${uc}_PARAMETER = " . $enumConst . ", \n"; } $enumConst = $params{'NO'}->{"kindEnum"}; print " ICAL_NO_PARAMETER = " . $enumConst . "\n} icalparameter_kind;\n\n"; # Now create enumerations for parameter values $lastidx = $idx = 20000; print "#define ICALPARAMETER_FIRST_ENUM $idx\n\n"; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{"C"}; my $ucv = join("", map {uc(lc($_));} split(/-/, $param)); my @enums = @{$params{$param}->{'enums'}}; if (@enums) { print "typedef enum $type {\n"; my $first = 1; foreach $e (@enums) { if (!$first) { print ",\n"; } else { $first = 0; } $e =~ /([a-zA-Z0-9\-]+)=?([0-9]+)?/; $e = $1; if ($2) { $idx = $2; } else { $idx++; } if ($idx > $lastidx) { $lastidx = $idx; } my $uce = join("", map {uc(lc($_));} split(/-/, $e)); print " ICAL_${ucv}_${uce} = $idx"; } $c_type =~ s/enum //; print "\n} $type;\n\n"; } } $lastidx++; print "#define ICALPARAMETER_LAST_ENUM $lastidx\n\n"; } if ($opt_c) { # Create the icalparameter_value to icalvalue_kind conversion table my $count = 0; my $out; foreach $enum (@{$params{'VALUE'}->{'enums'}}) { $enum =~ /([a-zA-Z0-9\-]+)=?([0-9]+)?/; $enum = $1; next if $enum eq 'X' or $enum eq 'NONE'; next if $enum eq 'NO' or $enum eq 'ERROR'; $uc = join("", map {uc(lc($_));} split(/-/, $enum)); $out .= " {ICAL_VALUE_${uc},ICAL_${uc}_VALUE},\n"; $count++; } $count += 2; print "static const struct icalparameter_value_kind_map value_kind_map[$count] = {\n"; print $out; print " {ICAL_VALUE_X,ICAL_X_VALUE},\n"; print " {ICAL_VALUE_NONE,ICAL_NO_VALUE}\n};\n\n"; #Create the parameter Name map $out = ""; $count = 0; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $lc = join("", map {lc($_);} split(/-/, $param)); my $uc = join("", map {uc(lc($_));} split(/-/, $param)); $count++; $out .= " {ICAL_${uc}_PARAMETER,\"$param\"},\n"; } $count += 1; print "static const struct icalparameter_kind_map parameter_map[$count] = { \n"; print $out; print " { ICAL_NO_PARAMETER, \"\"}\n};\n\n"; # Create the parameter value map $out = ""; $count = 0; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{"C"}; my $uc = join("", map {uc(lc($_));} split(/-/, $param)); my @enums = @{$params{$param}->{'enums'}}; if (@enums) { foreach $e (@enums) { $e =~ /([a-zA-Z0-9\-]+)=?([0-9]+)?/; $e = $1; next if $e eq 'X' or $e eq 'NONE'; my $uce = join("", map {uc(lc($_));} split(/-/, $e)); $count++; $out .= " {ICAL_${uc}_PARAMETER,ICAL_${uc}_${uce},\"$e\"},\n"; } } } $count += 3; print "static const struct icalparameter_map icalparameter_map[] = {\n"; print "{ICAL_ANY_PARAMETER,0,\"\"},\n"; print $out; print " {ICAL_NO_PARAMETER,0,\"\"}};\n\n"; } foreach $param (sort keys %params) { next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{'C'}; my $ucf = join("", map {ucfirst(lc($_));} split(/-/, $param)); my $lc = lc($ucf); my $uc = uc($lc); my $charorenum; my $set_code; my $pointer_check; my $pointer_check_v; my $xrange; if ($type =~ /char/) { $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return param->string;"; $set_code = "((struct icalparameter_impl*)param)->string = icalmemory_strdup(v);"; $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; $pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");"; } elsif ($type =~ /int/) { $charorenum = " icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn param->data;"; $set_code = "((struct icalparameter_impl*)param)->data = v;"; } else { $xrange = " if (param->string != 0){\n return ICAL_${uc}_X;\n }\n" if !exists $no_xname{$uc}; $charorenum = "icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn ($type)(param->data);"; $pointer_check = "icalerror_check_arg_rz(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rz(v < ICAL_${uc}_NONE,\"v\");"; $pointer_check_v = "icalerror_check_arg_rv(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rv(v < ICAL_${uc}_NONE,\"v\");"; $set_code = "((struct icalparameter_impl*)param)->data = (int)v;"; } if ($opt_c) { print <string != NULL) free ((void*)param->string); $set_code } EOM } elsif ($opt_h) { print <[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 < # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ require "readvaluesfile.pl"; use Getopt::Std; getopts('chspmi:'); # ARG 0 is properties.csv %propmap = read_properties_file($ARGV[0]); # ARG 1 is value-types.txt %valuemap = read_values_file($ARGV[1]); $include_vanew = 1; # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN, $opt_i) || die "Can't open input file $opt_i"; while () { if (//) { insert_code(); } else { print; } } } sub fudge_data { my $prop = shift; my $value = $propmap{$prop}->{'lic_value'}; if (!$value) { die "Can't find value for property \"$prop\"\n"; } my $ucf = join("", map {ucfirst(lc($_));} split(/-/, $prop)); my $lc = lc($ucf); my $uc = uc($lc); my $ucfvalue = join("", map {ucfirst(lc($_));} split(/-/, $value)); my $lcvalue = lc($ucfvalue); my $ucvalue = uc($lcvalue); my $type = $valuemap{$value}->{C}->[1]; return ($uc, $lc, $lcvalue, $ucvalue, $type); } sub insert_code { # Create the property map data if ($opt_c) { my @props = sort {$propmap{$a}->{"kindEnum"} <=> $propmap{$b}->{"kindEnum"}} keys %propmap; my $count = scalar(@props); print "static const struct icalproperty_map property_map[$count] = {\n"; foreach $prop (@props) { next if !$prop; next if $prop eq 'NO'; my ($uc, $lc, $lcvalue, $ucvalue, $type) = fudge_data($prop); print "{ICAL_${uc}_PROPERTY,\"$prop\",ICAL_${ucvalue}_VALUE},\n"; } $prop = "NO"; my ($uc, $lc, $lcvalue, $ucvalue, $type) = fudge_data($prop); print "{ICAL_${uc}_PROPERTY,\"\",ICAL_NO_VALUE}};\n\n"; $count = 1; $bigcount = 0; my %lines; foreach $value (sort keys %valuemap) { next if !$value; next if $value eq 'NO' or $prop eq 'ANY'; my $ucv = join("", map {uc(lc($_));} split(/-/, $value)); my @enums = @{$valuemap{$value}->{'enums'}}; if (@enums) { my ($c_autogen, $c_type) = @{$valuemap{$value}->{'C'}}; foreach $e (@enums) { $e =~ /([a-zA-Z0-9\-]+)=?([0-9]+)?/; $e = $1; if ($2) { $idx = $2; } else { $idx++; } my $uce = join("", map {uc(lc($_));} split(/-/, $e)); if ($e ne "X" and $e ne "NONE") { $str = $e; } else { $str = ""; } if ($e eq "NONE") { $bigcount += 100; } # Create empty "future" properties so the hash math works. if ($e eq "NONE") { my ($tbd) = 1; $saveidx++; for (; $saveidx < $idx ; $saveidx++, $tbd++) { $lines{$saveidx} = " {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_NONE,\"\" }, /*$saveidx*/\n"; } } # Place each property into a hash based on the index specified in value-types.csv # The lines are printed so they're in the same order as the indices $lines{$idx} = " {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_${uce},\"$str\" }, /*$idx*/\n"; $saveidx = $idx; $count++; } } } $bigcount++; print "static const struct icalproperty_enum_map enum_map[$bigcount] = {\n"; foreach $line (sort keys %lines) { print $lines{$line}; } print " {ICAL_NO_PROPERTY,0,\"\"}\n};\n\n"; } if ($opt_h) { # Create the property enumerations list my $enumConst = $propmap{'ANY'}->{"kindEnum"}; print "typedef enum icalproperty_kind {\n ICAL_ANY_PROPERTY = " . $enumConst . ",\n"; foreach $prop (sort keys %propmap) { next if !$prop; next if $prop eq 'NO' or $prop eq 'ANY'; my ($uc, $lc, $lcvalue, $ucvalue, $type) = fudge_data($prop); $enumConst = $propmap{$prop}->{"kindEnum"}; print " ICAL_${uc}_PROPERTY = " . $enumConst . ", \n"; } $enumConst = $propmap{'NO'}->{"kindEnum"}; print " ICAL_NO_PROPERTY = " . $enumConst . "\n} icalproperty_kind;\n\n"; } foreach $prop (sort keys %propmap) { next if !$prop; next if $prop eq 'NO' or $prop eq 'ANY'; my ($uc, $lc, $lcvalue, $ucvalue, $type) = fudge_data($prop); my $pointer_check; if ($type =~ /\*/) { $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; } elsif ($type eq "void") { $pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; } my $set_pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; if ($opt_c) { # Generate C source if ($include_vanew) { print < # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ use lib '.'; require 'readvaluesfile.pl'; use Getopt::Std; getopts('chi:'); #Options # c -> generate c code file # h-> generate header file # Open with value-types.txt my %h = read_values_file($ARGV[0]); # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN, $opt_i) || die "Can't open input file $opt_i"; while () { if (//) { insert_code(); } else { print; } } } sub insert_code { # Map type names to the value in the icalvalue_impl data union */ %union_map = ( BOOLEAN => 'int', CALADDRESS => 'string', DATE => 'time', DATETIME => 'time', DATETIMEDATE => 'time', DATETIMEPERIOD => 'period', DURATION => 'duration', INTEGER => 'int', TEXT => 'string', URI => 'string', UTCOFFSET => 'int', QUERY => 'string', BINARY => 'string', X => 'string' ); if ($opt_h) { # First print out the value enumerations $idx = $h{'ANY'}->{"kindEnum"}; print "typedef enum icalvalue_kind {\n"; print " ICAL_ANY_VALUE=$idx,\n"; foreach $value (sort keys %h) { next if !$value; next if $value eq 'NO' or $value eq 'ANY'; my $ucv = join("", map {uc(lc($_));} split(/-/, $value)); $idx = $h{$value}->{"kindEnum"}; print " ICAL_${ucv}_VALUE=$idx,\n"; } $idx = $h{'NO'}->{"kindEnum"}; print " ICAL_NO_VALUE=$idx\n} icalvalue_kind ;\n\n"; # Now create enumerations for property values $lastidx = $idx = 10000; print "#define ICALPROPERTY_FIRST_ENUM $idx\n\n"; foreach $value (sort keys %h) { next if !$value; next if $value eq 'NO' or $value eq 'ANY'; my $ucv = join("", map {uc(lc($_));} split(/-/, $value)); my @enums = @{$h{$value}->{'enums'}}; if (@enums) { my ($c_autogen, $c_type) = @{$h{$value}->{'C'}}; print "typedef $c_type {\n"; my $first = 1; foreach $e (@enums) { if (!$first) { print ",\n"; } else { $first = 0; } $e =~ /([a-zA-Z0-9\-]+)=?([0-9]+)?/; $e = $1; if ($2) { $idx = $2; } else { $idx++; } if ($idx > $lastidx) { $lastidx = $idx; } my $uce = join("", map {uc(lc($_));} split(/-/, $e)); print " ICAL_${ucv}_${uce} = $idx"; } $c_type =~ s/enum //; print "\n} $c_type;\n\n"; } } $lastidx++; print "#define ICALPROPERTY_LAST_ENUM $lastidx\n\n"; } if ($opt_c) { # print out the value to string map my $count = scalar(keys %h) + 1; print "static const struct icalvalue_kind_map value_map[$count]={\n"; foreach $value (keys %h) { next if $value eq 'NO' or $value eq 'ANY'; my $ucv = join("", map {uc(lc($_));} split(/-/, $value)); print " {ICAL_${ucv}_VALUE,\"$value\"},\n"; } print " {ICAL_NO_VALUE,\"\"}\n};"; } foreach $value (sort keys %h) { next if $value eq 'ANY'; my $autogen = $h{$value}->{C}->[0]; my $type = $h{$value}->{C}->[1]; my $ucf = join("", map {ucfirst(lc($_));} split(/-/, $value)); my $lc = lc($ucf); my $uc = uc($lc); my $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; my $pointer_check_rv = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; my $assign; if ($type =~ /char/) { $assign = "icalmemory_strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n"; } else { $assign = "v;"; } my $union_data; if (@{$h{$value}->{'enums'}}) { $union_data = 'enum'; } elsif (exists $union_map{$uc}) { $union_data = $union_map{$uc}; } else { $union_data = $lc; } if ($opt_c && $autogen) { print "\n\n\ icalvalue* icalvalue_new_${lc} ($type v){\ struct icalvalue_impl* impl;\ $pointer_check\ impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\ icalvalue_set_${lc}((icalvalue*)impl,v);\ return (icalvalue*)impl;\ }\ void icalvalue_set_${lc}(icalvalue* value, $type v) {\ struct icalvalue_impl* impl; \ icalerror_check_arg_rv( (value!=0),\"value\");\ $pointer_check_rv\ icalerror_check_value_type(value, ICAL_${uc}_VALUE);\ impl = (struct icalvalue_impl*)value;\n"; if ($union_data eq 'string') { print " if(impl->data.v_${union_data}!=0) {free((void*)impl->data.v_${union_data});}\n"; } print "\n\ impl->data.v_$union_data = $assign \n\ icalvalue_reset_kind(impl);\n}\n"; print "$type\ icalvalue_get_${lc} (const icalvalue* value) {\n\n"; if ($union_data eq 'string') { print " icalerror_check_arg_rz ((value!=0),\"value\");\n"; } else { print " icalerror_check_arg ((value!=0),\"value\");\n"; } print " icalerror_check_value_type (value, ICAL_${uc}_VALUE);\ return ((struct icalvalue_impl*)value)->data.v_${union_data};\n}\n"; } elsif ($opt_h && $autogen) { print "\n /* $value */ \ LIBICAL_ICAL_EXPORT icalvalue* icalvalue_new_${lc}($type v); \ LIBICAL_ICAL_EXPORT $type icalvalue_get_${lc}(const icalvalue* value); \ LIBICAL_ICAL_EXPORT void icalvalue_set_${lc}(icalvalue* value, ${type} v);\n\n"; } } if ($opt_h) { print "#endif /*ICALVALUE_H*/\n"; } } libical-2.0.0/scripts/mkinclude.sh000066400000000000000000000016751264032652500171240ustar00rootroot00000000000000#!/bin/sh # # Given a list of headers, combine them into one, excluding certain lines # OUTFILE="/dev/stdout" COMBINEDHEADERS="" EXCLUDES="" while [ $# -gt 0 ] do case $1 in -o) OUTFILE=$2; shift;; -e) EXCLUDES="$EXCLUDES $2"; shift;; *) COMBINEDHEADERS="$COMBINEDHEADERS $1"; esac shift done echo '#ifdef __cplusplus' > $OUTFILE echo 'extern "C" {' >> $OUTFILE echo '#endif' >> $OUTFILE echo '/*' >> $OUTFILE echo " \$Id\$" >> $OUTFILE echo '*/' >> $OUTFILE cat $COMBINEDHEADERS >> file.temp1 for exclude in $EXCLUDES do cp file.temp1 file.temp2 egrep -v "$exclude" file.temp2 > file.temp1 done cat file.temp1 >> $OUTFILE rm -f file.temp1 rm -f file.temp2 echo '#ifdef __cplusplus' >> $OUTFILE echo '};' >> $OUTFILE echo '#endif' >> $OUTFILE libical-2.0.0/scripts/mkneticali.pl000077500000000000000000000037671264032652500173010ustar00rootroot00000000000000#!/usr/local/bin/perl $pr = 1; $ignore = 0; print < /* for size_t */ #include %} EOM foreach $f (@ARGV) { @f = split(/\//, $f); $fn = pop(@f); $fn =~ /pvl/ && next; $fn =~ /sspm/ && next; $fn =~ /cstp/ && next; $fn =~ /csdb/ && next; $fn =~ /vcal/ && next; $fn =~ /yacc/ && next; $fn =~ /lex/ && next; print "\n/**********************************************************************\n"; print "\t$fn\n"; print "**********************************************************************/\n\n"; open F, $f; while () { s/^#.*//; s/\/\*.*\*\///; /^\/\// && next; next if /^$/; if (/\/\*/) {$pr = 0;} /icalparser_parse\(/ and $ignore = 1; /vanew/ and $ignore = 1; /_stub/ and $ignore = 1; /_response/ and $ignore = 1; /line_gen_func/ and $ignore = 1; /extern/ and $ignore = 1; /sspm/ and $ignore = 1; /icalrecur/ and $ignore = 1; if ($pr == 1 && $ignore == 0) { print; } if (/\*\//) {$pr = 1;} if (/\;/) {$ignore = 0;} } } libical-2.0.0/scripts/mkparameterrestrictions.pl000077500000000000000000000032421264032652500221260ustar00rootroot00000000000000#!/usr/bin/perl # Version: 1.0 # Script last updated: 30May1999 GMD # Change log: # # usually open params-in-prop.txt open(F, "$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; print <) { 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 < # usually open restrictions.csv open(F, "$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; print <) { 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 < # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ 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 () { if (//) { insert_code(); } if (/Do not edit/) { last; } print; } close IN; } sub insert_code { # First build the property restriction table print "static const icalrestriction_property_record icalrestriction_property_records[] = {\n"; while () { chop; s/\#.*$//; my ($method, $targetcomp, $prop, $subcomp, $restr, $sub) = split(/,/, $_); next if !$method; if (!$sub) { $sub = "NULL"; } else { $sub = "icalrestriction_" . $sub; } if ($prop ne "NONE") { print( " \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub},\n" ); } } # Print the terminating line print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE,NULL}\n"; print "};\n"; } libical-2.0.0/scripts/readvaluesfile.pl000066400000000000000000000054511264032652500201410ustar00rootroot00000000000000################################################################################ # (C) COPYRIGHT 2000, Eric Busboom # http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.txt # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ ################################################################################ sub read_values_file { my $path = shift; my %h; open(F, $path) || die "Can't open values file $path"; while () { chop; s/#.*$//g; s/\"//g; s/\r//g; next if !$_; @column = split(/,/, $_); my $value_name = $column[0]; my $enumConst = $column[1]; my $c_type_str = $column[2]; my $c_autogen = ($c_type_str =~ /\(a\)/); my $c_type = $c_type_str; $c_type =~ s/\(.\)//; my $python_type = $column[3]; my $components = $column[4]; my $enum_values = $column[5]; my @components; if ($components ne "unitary") { @components = split(/;/, $components); } else { @components = (); } my @enums; if ($enum_values) { @enums = split(/;/, $enum_values); } else { @enums = (); } $h{$value_name} = { C => [$c_autogen, $c_type], kindEnum => $enumConst, perl => $perl_type, python => $python_type, components => [@components], enums => [@enums] }; } return %h; } sub read_properties_file { my $path = shift; my %h; open(F, $path) || die "Can't open properties file $path"; while () { chop; s/#.*$//g; s/\"//g; s/\r//g; next if !$_; @column = split(/,/, $_); my $property_name = $column[0]; my $enumConst = $column[1]; my $lic_value = $column[2]; my $default_value = $column[3]; $h{$property_name} = { lic_value => $lic_value, kindEnum => $enumConst, default_value => $default_value }; } return %h; } sub read_parameters_file { my $path = shift; my %h; open(F, $path) || die "Can't open parameters file $path"; while () { chop; s/#.*$//g; s/\"//g; s/\r//g; next if !$_; @column = split(/\,/, $_); my $parameter_name = $column[0]; my $enumConst = $column[1]; my $data_type = $column[2]; my $enum_string = $column[3]; my @enums; if ($enum_string) { @enums = split(/;/, $enum_string); } $h{$parameter_name} = { C => $data_type, kindEnum => $enumConst, enums => [@enums] }; } close(F); return %h; } 1; libical-2.0.0/scripts/setup-travis.sh000077500000000000000000000007741264032652500176210ustar00rootroot00000000000000#/bin/sh -f # things to do for travis-ci in the before_install section if ( test "`uname -s`" = "Darwin" ) then #cmake v2.8.12 is installed on the Mac workers now #brew update #brew install cmake brew install icu4c brew install db else #install a newer cmake since at this time Travis only has version 2.8.7 echo "yes" | sudo add-apt-repository ppa:kalakris/cmake sudo apt-get update -qq sudo apt-get install cmake sudo apt-get install libicu-dev sudo apt-get install libdb4.8-dev fi libical-2.0.0/src/000077500000000000000000000000001264032652500137045ustar00rootroot00000000000000libical-2.0.0/src/CMakeLists.txt000066400000000000000000000001531264032652500164430ustar00rootroot00000000000000add_subdirectory(libical) add_subdirectory(libicalss) add_subdirectory(libicalvcal) add_subdirectory(test) libical-2.0.0/src/Net-ICal-Libical/000077500000000000000000000000001264032652500165755ustar00rootroot00000000000000libical-2.0.0/src/Net-ICal-Libical/MANIFEST000066400000000000000000000004331264032652500177260ustar00rootroot00000000000000MANIFEST Makefile.PL lib/Net/ICal/Libical.pm netical.i netical_wrap.c netical_wrap.doc test-data/2446.mime test-data/error test-data/mail-examples test-data/no-error test-data/rfc2445.ics test-data/rfc2446.ics test-data/single-with-error test/example.pl test/libical.pl test/swig.pl libical-2.0.0/src/Net-ICal-Libical/Makefile.PL000066400000000000000000000015231264032652500205500ustar00rootroot00000000000000#!/usr/bin/perl # -*- Mode: perl -*- use ExtUtils::MakeMaker; WriteMakefile( 'MAKEFILE'=> 'Makefile', 'VERSION_FROM' => 'lib/Net/ICal/Libical.pm', 'NAME' => 'Net::ICal::Libical', 'INC' => '-I../libical -I ../libicalss', 'LIBS' => ['-L../libical/.libs -L../libicalss/.libs -lical -licalss -lm'], 'OBJECT' => 'netical_wrap.o', # Object files dist => { COMPRESS =>'gzip', SUFFIX =>'gz' }, ); sub MY::top_targets { my $self = shift; my $old = $self->MM::top_targets; return "all:: netical_wrap.o\n$old"; } sub MY::postamble { return <dict{TZID} sub timezone(self,v=None): # Represents the value and all parameters of an attendee package Net::ICal::Libical::Attendee(Property): @ISA = (Property); sub new{} # Methods for accessing enumerated parameters sub cn {} sub cutype {} sub dir {} sub delegated_from {} sub delegated_to {} sub language {} sub member {} sub partstat {} sub role {} sub rsvp {} sub sent_by {} package Net::ICal::Libical::Organizer; @ISA = (Property) # Methods for accessing enumerated parameters sub cn{} sub dir{} sub language {} sub sent_by {} package Net::ICal::Libical::Recurrence_Id; @ISA= (Property) package Net::ICal::Libical::Attach; @ISA= (Property) package Net::ICal::Libical::Event; @ISA= (Component) sub component_type {} #"Returns a copy of the object." sub clone {} #Sets or returns the value of the DTEND property. #Usage: #dtend(time_obj) # Set the value using a Time object #dtend('19970101T123000Z') # Set the value as an iCalendar string #dtend(982362522) # Set the value using seconds (time_t) #dtend() # Return a Time # #If the dtend value is being set and duration() has a value, the #duration property will be removed. sub dtend{} #Sets or returns the value of the duration property. #Usage: #duration(dur_obj) # Set the value using a Duration object #duration("P3DT12H") # Set value as an iCalendar string #duration(3600) # Set duration using seconds #duration() # Return a duration # #If the duration value is being set and dtend() has a value, the dtend #property will be removed. sub duration{} #Sets attendees or returns a list of Attendee objects. sub attendees {} #Sets or gets the value of the ORGANIZER property. #Usage: #organizer(orgObj) # Set value using an organizer object #organizer('MAILTO:jd@not.com') # Set value using a CAL-ADDRESS string #organizer() # Return a CAL-ADDRESS string sub organizer{} #"Sets or gets the SUMMARY value of the Event." sub summary{} #Sets or gets the UID of the Event. sub uid{} #Sets or gets the value for the RECURRENCE-ID property. #Usage: #Recurrence_id(recIdObj) # Set using a Recurrence_Id object #Recurrence_id("19700801T133000") # Set using an iCalendar string #Recurrence_id(8349873494) # Set using seconds from epoch #Recurrence_id() # Return a Time sub recurrence_id{} #Sets or gets the SEQUENCE value of the Event. #Usage: #sequence(1) # Set the value using an integer #sequence('2') # Set the value using a string containing an integer #sequence() # Return an integer sub sequence{} #Sets or returns the value of the LAST-MODIFIED property. #Usage: #lastmodified(time_obj) # Set the value using a Time object #lastmodified('19970101T123000Z')# Set using an iCalendar string #lastmodified(982362522) # Set using seconds #lastmodified() # Return a Time sub lastmodified{} #Sets or returns the value of the CREATED property. #Usage: #created(time_obj) # Set the value using a Time object #created('19970101T123000Z') # Set using an iCalendar string #created(982362522) # Set using seconds #created() # Return a Time sub created {} sub related_to{} sub comment{} "Sets or returns the value of the DESCRIPTION property." sub description {} #Sets categories or returns a list of Attendee objects. sub categories {} sub attach{} #Represents a set of event occurrences. This #package controls a component's RRULE, EXRULE, RDATE and EXDATE #properties and can produce from them a set of occurrences. package Net::ICal::Libical::RecurrenceSet: #Include a date or rule to the set. #Use date= or pass in a #Time instance to include a date. Included dates will add an #RDATE property or will remove an EXDATE property of the same #date. #Use rule= or pass in a string to include a rule. Included #rules with either add a RRULE property or remove an EXRULE #property. sub include{} #Exclude date or rule to the set. #Use date= or pass in a Time instance to exclude a #date. Excluded dates will add an EXDATE property or will remove #an RDATE property of the same date. #Use rule= or pass in a string to exclude a rule. Excluded #rules with either add an EXRULE property or remove an RRULE #property. sub exclude{} #Return 'count' occurrences as a tuple of Time instances. sub occurrences{} package Net::ICal::Libical::Store; sub new{} sub path{} sub mark{} sub commit{} sub addComponent{} sub removeComponent{} sub countComponents{} sub select{} sub clearSelect{} sub fetch{} sub fetchMatchK{} sub modify{} sub currentComponent{} sub firstComponent{} sub nextComponent{} package Net::ICal::Libical::FileStore; @ISA = (Store) sub new{} sub path{} sub mark{} sub commit{} sub addComponent{} sub removeComponent{} sub countComponents{} sub select{} sub clearSelect{} sub fetch{} sub fetchMatchK{} sub modify{} sub currentComponent{} sub firstComponent{} sub nextComponent{} 1; libical-2.0.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/000077500000000000000000000000001264032652500222405ustar00rootroot00000000000000libical-2.0.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm000066400000000000000000000073051264032652500245450ustar00rootroot00000000000000#!/usr/bin/perl # -*- Mode: perl -*- #====================================================================== # FILE: Component.pm # CREATOR: eric 1 Mar 01 # # DESCRIPTION: # # # $Id: Component.pm,v 1.4 2001-04-11 04:45:28 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2000, Eric Busboom, eric@softwarestudio.org # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. ( Either the Artistic License or the # GPL. ) # # #====================================================================== package Net::ICal::Libical::Component; use Net::ICal::Libical; use strict; sub new{ my $class = shift; my $ical_str = shift; # Ical data in string form my $self = {}; $self->{'comp_p'} = Net::ICal::Libical::icalparser_parse_string($ical_str); die "Can't parse string into component" if !$self->{'comp_p'}; bless $self, $class; } sub new_from_ref { my $class = shift; my $r = shift; my $self = {}; $self->{'comp_p'} = $r; bless $self, $class; } # Destroy must call icalcomponent_free() if icalcomponent_get_parent() # returns NULL sub DESTROY { my $self = shift; my $c = $self->{'comp_p'}; if($c && !Net::ICal::Libical::icalcomponent_get_parent($c)){ Net::ICal::Libical::icalcomponent_free($c); } } # Return an array of all properties of the given type sub properties{ my $self = shift; my $prop_name = shift; my @props; if(!$prop_name){ $prop_name = 'ANY'; } # To loop over properties # $comp_p = $self->{'comp_p'} # $p = icallangbind_get_first_property($comp_p,$prop_name) # $p = icallangbind_get_next_property($comp_p,$prop_name) my $c = $self->{'comp_p'}; my $p; for($p = Net::ICal::Libical::icallangbind_get_first_property($c,$prop_name); $p; $p = Net::ICal::Libical::icallangbind_get_next_property($c,$prop_name)){ my $d_string = Net::ICal::Libical::icallangbind_property_eval_string($p,"=>"); my %dict = %{eval($d_string)}; $dict{'ref'} = $p; # Now, look at $dict{'value_type'} or $dict{'name'} to construct a # derived class of Property. I'll do this later. my $prop; if($dict{'value_type'} eq 'DATE' or $dict{'value_type'} eq 'DATE-TIME'){ $prop = new Net::ICal::Libical::Time(\%dict); } elsif($dict{'value_type'} eq 'DURATION' ) { $prop = new Net::ICal::Libical::Duration(\%dict); } else { $prop = new Net::ICal::Libical::Property(\%dict); } push(@props,$prop); } return @props; } sub add_property { # if there is a 'ref' key in the prop's dict, then it is owned by # an icalcomponent, so dont add it again. But, you may check that # it is owned by this component with: # icalproperty_get_parent(p->{'ref'}') != $self->{'comp_p'} # If there is no 'ref' key, then create one with $p->{'ref'} = # icalproperty_new_from_string($p->as_ical_string) } sub remove_property { # If $p->{'ref'} is set, then remove the property with # icalcomponent_remove_property() } } # Return an array of all components of the given type sub components { my $self = shift; my $comp_name = shift; my @comps; if(!$comp_name){ $comp_name = 'ANY'; } my $c = $self->{'comp_p'}; my $p; for($p = Net::ICal::Libical::icallangbind_get_first_component($c,$comp_name); $p; $p = Net::ICal::Libical::icallangbind_get_next_component($c,$comp_name)){ push(@comps, Net::ICal::Libical::Component->new_from_ref($p)); } return @comps; } sub add_component {} sub remove_component {} sub as_ical_string { my $self = shift; return Net::ICal::Libical::icalcomponent_as_ical_string($self->{'comp_p'}) } 1; libical-2.0.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm000066400000000000000000000065111264032652500243660ustar00rootroot00000000000000#============================================================================= # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. (Either the Artistic License or # the GPL.) # #============================================================================= =head1 NAME Net::ICal::Duration -- represent a length of time =head1 SYNOPSIS use Net::ICal; $d = Net::ICal::Duration->new("P3DT6H15M10S"); $d = Net::ICal::Duration->new(3600); # 1 hour in seconds =head1 DESCRIPTION I Represents a length of time, such a 3 days, 30 seconds or 7 weeks. You would use this for representing an abstract block of time; "I want to have a 1-hour meeting sometime." If you want a calendar- and timezone-specific block of time, see Net::ICal::Period. =cut #============================================================================= package Net::ICal::Libical::Duration; use Net::ICal::Libical::Property; use strict; use Carp; @Net::ICal::Libical::Duration::ISA = qw ( Net::ICal::Libical::Property ); =head1 METHODS =head2 new Create a new I from: =over 4 =item * A string in RFC2445 duration format =item * An integer representing a number of seconds =cut sub new { my $package = shift; my $arg = shift; my $self; if (ref($arg) == 'HASH'){ # Construct from dictionary $self = Net::ICal::Libical::Property::new($package,$arg); my $val=Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'}); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_from_string($val); return $self; } elsif ($arg =~ /^[-+]?\d+$/){ # Seconds $self = Net::ICal::Libical::Property::new($package,'DURATION'); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_int($arg); } elsif ($arg) { # iCalendar string $self = Net::ICal::Libical::Property::new($package,'DURATION'); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_string($arg); } else { die; } $self->_update_value(); return $self; } sub _update_value { my $self = shift; die "Can't find internal icalduration reference" if !$self->{'dur'}; $self->value(Net::ICal::Libical::icaldurationtype_as_ical_string($self->{'dur'})); } =head2 clone() Return a new copy of the duration. =cut sub clone { die "Not Implemented"; } =head2 is_valid() Determine if this is a valid duration (given criteria TBD). =cut sub is_valid { die "Not Implemented;" } =head2 seconds() Set or Get the length of the duration as seconds. =cut sub seconds { my $self = shift; my $seconds = shift; if($seconds){ $self->{'dur'} = Net::ICal::Libical::icaldurationtype_from_int($seconds); $self->_update_value(); } return Net::ICal::Libical::icaldurationtype_as_int($self->{'dur'}); } =head2 add($duration) Return a new duration that is the sum of this and $duration. Does not modify this object. =cut sub add { my ($self, $duration) = @_; return new Duration($self->seconds() + $duration->seconds()); } =head2 subtract($duration) Return a new duration that is the difference between this and $duration. Does not modify this object. =cut sub subtract { my ($self, $duration) = @_; return new Duration($self->seconds() - $duration->seconds()); } 1; libical-2.0.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm000066400000000000000000000204101264032652500240150ustar00rootroot00000000000000#!/usr/bin/perl -w # -*- Mode: perl -*- #====================================================================== # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. ( Either the Artistic License or the # GPL. ) # # $Id: Period.pm,v 1.1 2001-03-02 19:50:31 ebusboom Exp $ # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # $Log #====================================================================== =pod =head1 NAME Net::ICal::Period -- represent a period of time =head1 SYNOPSIS use Net::ICal; $p = new Net::ICal::Period("19970101T120000","19970101T123000"); $p = new Net::ICal::Period("19970101T120000","PT3W2D40S"); $p = new Net::ICal::Period(time(),3600); $p = new Net::ICal::Period( new Net::ICal::Time("19970101T120000", "America/Los_Angeles"), new Net::ICal::Duration("2h")); =head1 DESCRIPTION Use this to make an object representing a block of time on a real schedule. You can either say, "This event starts at 12 and ends at 2" or "This event starts at 12 and lasts 2 hours." These two ways of specifying events can be treated differently in schedules. If you say, "The meeting is from 12 to 2, but I have to leave at 2," you are implying that the start date and end date are fixed. If you say, "I have a 2-hour drive to Chicago, and I need to leave at 4," you are saying that it will take 2 hours no matter when you leave, and that moving the start time will slide the end time correspondingly. =head1 BASIC METHODS =cut #========================================================================= package Net::ICal::Period; use strict; use Net::ICal::Time; use Net::ICal::Duration; use UNIVERSAL qw(isa); #------------------------------------------------------------------------- =pod =head2 new($time, $time|$duration) Creates a new period object given to parameters: The first must be a I