/* -*- Mode: C -*- */ /*====================================================================== FILE: icalderivedproperty.c CREATOR: eric 15 Feb 2001 $Id$ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalproperty.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalproperty.h" #include "icalcomponent.h" #include "pvl.h" #include "icalenums.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include /* For icalmemory_strdup, rindex */ #include #include #include #include /* for printf */ #include /* for va_list, va_start, etc. */ #define TMP_BUF_SIZE 1024 struct icalproperty_impl* icalproperty_new_impl (icalproperty_kind kind); void icalproperty_add_parameters (struct icalproperty_impl *prop, va_list args); /* This map associates the property kinds with the string representation of the property name and the kind of VALUE that the property uses as a default */ struct icalproperty_map { icalproperty_kind kind; const char *name; icalvalue_kind value; }; static struct icalproperty_map property_map[]; const char* icalproperty_kind_to_string(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (property_map[i].kind == kind) { return property_map[i].name; } } return 0; } icalproperty_kind icalproperty_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_PROPERTY; } for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (strcmp(property_map[i].name, string) == 0) { return property_map[i].kind; } } if(strncmp(string,"X-",2)==0){ return ICAL_X_PROPERTY; } return ICAL_NO_PROPERTY; } icalvalue_kind icalproperty_value_kind_to_kind(icalvalue_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].value == kind ) { return property_map[i].kind; } } return ICAL_NO_VALUE; } icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].kind == kind ) { return property_map[i].value; } } return ICAL_NO_VALUE; } /* This map associates the property enumerations with the king of property that they are used in and the string representation of the enumeration */ struct icalproperty_enum_map { icalproperty_kind prop; int prop_enum; const char* str; }; static struct icalproperty_enum_map enum_map[]; const char* icalproperty_enum_to_string(int e) { icalerror_check_arg_rz(e >= ICALPROPERTY_FIRST_ENUM,"e"); icalerror_check_arg_rz(e <= ICALPROPERTY_LAST_ENUM,"e"); return enum_map[e-ICALPROPERTY_FIRST_ENUM].str; } int icalproperty_string_to_enum(const char* str) { int i; icalerror_check_arg_rz(str!=0,"str") while(*str == ' '){ str++; } for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if ( strcmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; } } return 0; } int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e) { int i; for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum == e && enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == kind ){ return 1; } } return 0; } const char* icalproperty_method_to_string(icalproperty_method method) { icalerror_check_arg_rz(method >= ICAL_METHOD_X,"method"); icalerror_check_arg_rz(method <= ICAL_METHOD_NONE,"method"); return enum_map[method-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_method icalproperty_string_to_method(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_METHOD_NONE) while(*str == ' '){ str++; } for (i=ICAL_METHOD_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_METHOD_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcmp(enum_map[i].str, str) == 0) { return (icalproperty_method)enum_map[i].prop_enum; } } return ICAL_METHOD_NONE; } const char* icalenum_status_to_string(icalproperty_status status) { icalerror_check_arg_rz(status >= ICAL_STATUS_X,"status"); icalerror_check_arg_rz(status <= ICAL_STATUS_NONE,"status"); return enum_map[status-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_status icalenum_string_to_status(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_STATUS_NONE) while(*str == ' '){ str++; } for (i=ICAL_STATUS_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_STATUS_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcmp(enum_map[i].str, str) == 0) { return (icalproperty_method)enum_map[i].prop_enum; } } return ICAL_STATUS_NONE; } /* Everything below this line is machine generated. Do not edit. */