+ if (dataReceived.begin() != dataReceived.end()){
+
+ try {
+ newTZData.dateTimeStartTokens = dataReceived.begin()->first.substr(8);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newTZData.dateTimeStartData = dataReceived.begin()->second;
+ dateTimeStartFound = true;
+
+ }
+
+ // Process the data from TZOFFSETFROM.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], false, "TZOFFSETFROM");
+
+ if (dataReceived.begin() != dataReceived.end()){
+
+ try {
+ newTZData.timeZoneOffsetFromTokens = dataReceived.begin()->first.substr(13);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newTZData.timeZoneOffsetFromData = dataReceived.begin()->second;
+ timeZoneOffsetFromFound = true;
+
+ }
+
+ // Process the data from TZOFFSETTO.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], false, "TZOFFSETTO");
+
+ if (dataReceived.begin() != dataReceived.end()){
+
+ try {
+ newTZData.timeZoneOffsetToTokens = dataReceived.begin()->first.substr(11);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newTZData.timeZoneOffsetToData = dataReceived.begin()->second;
+ timeZoneOffsetToFound = true;
+
+ }
+
+ // Process the data from RRULE.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], false, "RRULE");
+
+ if (dataReceived.begin() != dataReceived.end()){
+
+ try {
+ newTZData.recurranceRuleDataTokens = dataReceived.begin()->first.substr(6);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newTZData.recurranceRuleData = dataReceived.begin()->second;
+
+ }
+
+ // Process the data from COMMENT.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], true, "COMMENT");
+
+ objectSeekCount = 0;
+
+ for(multimap<string,string>::iterator propiter = dataReceived.begin();
+ propiter != dataReceived.end();
+ ++propiter){
+
+ newTZData.commentListTokens.push_back("");
+ newTZData.commentListAltRep.push_back("");
+ newTZData.commentListLanguage.push_back("");
+ newTZData.commentList.push_back("");
+
+ bool TokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&propiter->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator propdataiter = propertyData.begin();
+ propdataiter != propertyData.end(); propdataiter++){
+
+ if (propdataiter->first == "ALTREP"){
+
+ newTZData.commentListAltRep[objectSeekCount] = propdataiter->second;
+
+ } else if (propdataiter->first == "LANGUAGE"){
+
+ newTZData.commentListLanguage[objectSeekCount] = propdataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += propdataiter->first;
+ propertyTokens += "=";
+ propertyTokens += propdataiter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newTZData.commentListTokens[objectSeekCount] = propertyTokens;
+ }
+
+ newTZData.commentList[objectSeekCount] = propiter->second;
+
+ objectSeekCount++;
+
+ }
+
+ // Process the data from RDATE.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], true, "RDATE");
+
+ objectSeekCount = 0;
+
+ for(multimap<string,string>::iterator propiter = dataReceived.begin();
+ propiter != dataReceived.end();
+ ++propiter){
+
+ newTZData.recurranceDateDataTokens.push_back("");
+ newTZData.recurranceDateDataValue.push_back("");
+ newTZData.recurranceDateDataTimeZoneParam.push_back("");
+ newTZData.recurranceDateData.push_back("");
+
+ bool TokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&propiter->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator dataiter = propertyData.begin();
+ dataiter != propertyData.end(); dataiter++){
+
+ if (dataiter->first == "VALUE"){
+
+ newTZData.recurranceDateDataValue[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "TZID"){
+
+ newTZData.recurranceDateDataTimeZoneParam[objectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += dataiter->first;
+ propertyTokens += "=";
+ propertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newTZData.recurranceDateDataTokens[objectSeekCount] = propertyTokens;
+ }
+
+ newTZData.recurranceDateData[objectSeekCount] = propiter->second;
+
+ objectSeekCount++;
+
+ }
+
+ // Process the data from TZNAME.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], true, "TZNAME");
+
+ objectSeekCount = 0;
+
+ for(multimap<string,string>::iterator propiter = dataReceived.begin();
+ propiter != dataReceived.end();
+ ++propiter){
+
+ newTZData.timeZoneNameTokens.push_back("");
+ newTZData.timeZoneNameLanguage.push_back("");
+ newTZData.timeZoneNameData.push_back("");
+
+ bool TokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&propiter->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator dataiter = propertyData.begin();
+ dataiter != propertyData.end(); dataiter++){
+
+ if (dataiter->first == "LANGUAGE"){
+
+ newTZData.timeZoneNameLanguage[objectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += dataiter->first;
+ propertyTokens += "=";
+ propertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newTZData.timeZoneNameTokens[objectSeekCount] = propertyTokens;
+ }
+
+ newTZData.timeZoneNameData[objectSeekCount] = propiter->second;
+
+ objectSeekCount++;
+
+ }
+
+ objectSeekCount = 0;
+
+ // Process data from X-*
+
+ for(vector<string>::iterator propiter = timezoneDaylightName[seekCount].begin();
+ propiter != timezoneDaylightName[seekCount].end(); ++propiter){
+
+ if (propiter->substr(0,2) == "X-" &&
+ propiter->size() > 2){
+
+ newTZData.xTokensData.push_back(timezoneDaylightData[seekCount][objectSeekCount]);
+ newTZData.xTokensDataTokens.push_back(timezoneDaylightName[seekCount][objectSeekCount]);
+
+ }
+
+ objectSeekCount++;
+
+ }
+
+ // Check if the required values were given and
+ // insert newTZData into the vector list of
+ // daylight timezones.
+
+ if (dateTimeStartFound == true &&
+ timeZoneOffsetToFound == true &&
+ timeZoneOffsetFromFound == true){
+
+ timezoneDaylightCollection.push_back(newTZData);
+
+ }
+
+ seekCount++;
+
+ }
+
+}
+
+void CalendarTimezoneObject::ProcessStandardDaylight(){
+
+ int seekCount = 0;
+
+ bool TZMode = false; // False = STANDARD, True = DAYLIGHT.
+ bool validBegin = false;
+ vector<string> timezoneObjectName;
+ vector<string> timezoneObjectData;
+
+ for (vector<string>::iterator iter = objectName.begin();
+ iter != objectName.end(); iter++){
+
+ // Check if the current name is BEGIN and
+ // data is either STANDARD or DAYLIGHT.
+
+ if (objectName[seekCount] == "BEGIN" &&
+ (objectData[seekCount] == "STANDARD" ||
+ objectData[seekCount] == "DAYLIGHT")){
+
+ if (validBegin == false){
+ validBegin = true;
+ } else {
+
+ }
+
+ if (objectData[seekCount] == "STANDARD"){
+ TZMode = false;
+ } else if (objectData[seekCount] == "DAYLIGHT") {
+ TZMode = true;
+ }
+
+ seekCount++;
+ continue;
+
+ }
+
+ // Check if current name is END and
+ // data is either STANDARD or DAYLIGHT.
+
+ if (objectName[seekCount] == "END" &&
+ (objectData[seekCount] == "STANDARD" ||
+ objectData[seekCount] == "DAYLIGHT") &&
+ validBegin == true){
+
+ if (TZMode == false && timezoneObjectName.size() > 0){
+ timezoneStandardName.push_back(timezoneObjectName);
+ timezoneStandardData.push_back(timezoneObjectData);
+ } else {
+ timezoneDaylightName.push_back(timezoneObjectName);
+ timezoneDaylightData.push_back(timezoneObjectData);
+ }
+
+ timezoneObjectName.clear();
+ timezoneObjectData.clear();
+
+ validBegin = false;
+
+ }
+
+ if (validBegin == true){
+
+ timezoneObjectName.push_back(objectName[seekCount]);
+ timezoneObjectData.push_back(objectData[seekCount]);
+
+ }
+
+ seekCount++;
+
+ }
+