+ timeZoneURLData = dataReceived.begin()->second;
+
+ }
+
+ // Process data from each STANDARD and DAYLIGHT.
+
+ ProcessStandardDaylight();
+
+ int seekCount = 0;
+
+ for (vector<vector<string>>::iterator tzsiter = timezoneStandardName.begin();
+ tzsiter != timezoneStandardName.end(); tzsiter++){
+
+ bool dateTimeStartFound = false;
+ bool timeZoneOffsetToFound = false;
+ bool timeZoneOffsetFromFound = false;
+
+ timezoneDataStruct newTZData;
+
+ // Process the data from DTSTART.
+
+ dataReceived = ProcessTextVectors(&timezoneStandardName[seekCount],
+ &timezoneStandardData[seekCount], false, "DTSTART");
+
+ 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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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(&timezoneStandardName[seekCount],
+ &timezoneStandardData[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 = timezoneStandardName[seekCount].begin();
+ propiter != timezoneStandardName[seekCount].end(); ++propiter){
+
+ if (propiter->substr(0,2) == "X-" &&
+ propiter->size() > 2){
+
+ newTZData.xTokensData.push_back(timezoneStandardData[seekCount][objectSeekCount]);
+ newTZData.xTokensDataTokens.push_back(timezoneStandardName[seekCount][objectSeekCount]);
+
+ }
+
+ objectSeekCount++;
+
+ }
+
+ // Check if the required values were given and
+ // insert newTZData into the vector list of
+ // standard timezones.
+
+ if (dateTimeStartFound == true &&
+ timeZoneOffsetToFound == true &&
+ timeZoneOffsetFromFound == true){
+
+ timezoneStandardCollection.push_back(newTZData);
+
+ }
+
+ seekCount++;
+
+ }
+
+ seekCount = 0;
+
+ for (vector<vector<string>>::iterator tzsiter = timezoneDaylightName.begin();
+ tzsiter != timezoneDaylightName.end(); tzsiter++){
+
+ bool dateTimeStartFound = false;
+ bool timeZoneOffsetToFound = false;
+ bool timeZoneOffsetFromFound = false;
+
+ TimezoneDataStruct newTZData;
+
+ // Process the data from DTSTART.
+
+ dataReceived = ProcessTextVectors(&timezoneDaylightName[seekCount],
+ &timezoneDaylightData[seekCount], false, "DTSTART");
+
+ 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++;