+ // Get the Date Time Start value.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "DTSTART");
+
+ // Process the data from DTSTART.
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "VALUE"){
+
+ DateTimeStartDataValue = iter->second;
+
+ } else if (iter->first == "TZID"){
+
+ DateTimeStartDataTimeZoneID = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+ DateTimeStartDataTokens = PropertyTokens;
+ }
+
+ DateTimeStartData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from GEO.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "GEO");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ try {
+ GeographicTokens = DataReceived.begin()->first.substr(4);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ GeographicData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from LAST-MODIFIED.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "LAST-MODIFIED");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ try {
+ LastModifiedTokens = DataReceived.begin()->first.substr(14);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ LastModifiedData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from LOCATION.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "LOCATION");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "ALTREP"){
+
+ LocationDataAltRep = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ LocationDataLanguage = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+
+ LocationDataTokens = PropertyTokens;
+
+ }
+
+ LocationData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from ORGANIZER.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "ORGANIZER");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "CN"){
+
+ OrganiserDataCommonName = iter->second;
+
+ } else if (iter->first == "DIR"){
+
+ OrganiserDataDirectoryEntry = iter->second;
+
+ } else if (iter->first == "SENT-BY"){
+
+ OrganiserDataSentByParam = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ OrganiserDataLanguage = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+
+ OrganiserDataTokens = PropertyTokens;
+
+ }
+
+ OrganiserData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from PERCENT-COMPLETE.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "PERCENT-COMPLETE");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ try {
+ PercentCompleteTokens = DataReceived.begin()->first.substr(17);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ PercentCompleteData = DataReceived.begin()->second;
+
+ }
+
+ // Process the data from PRIORITY.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "PRIORITY");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ try {
+ PriorityTokens = DataReceived.begin()->first.substr(9);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ try {
+ PriorityData = stoi(DataReceived.begin()->second);
+ }
+
+ catch(const invalid_argument &oor){
+ PriorityTokens.clear();
+ }
+
+ }
+
+ // Process the data from RECURRENCE-ID.
+
+ DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "RECURRENCE-ID");
+
+ if (DataReceived.begin() != DataReceived.end()){
+
+ bool TokenData = false;
+ string PropertyTokens;
+
+ PropertyNameData = (string*)&DataReceived.begin()->first;
+
+ PropertyData = SplitValues(*PropertyNameData);
+
+ for(map<string,string>::iterator iter = PropertyData.begin();
+ iter != PropertyData.end(); iter++){
+
+ if (iter->first == "TZID"){
+
+ RecurranceIDDataTimeZoneParam = iter->second;
+
+ } else if (iter->first == "VALUE"){
+
+ RecurranceIDDataValue = iter->second;
+
+ } else if (iter->first == "RANGE"){
+
+ RecurranceIDDataRangeParam = iter->second;
+
+ } else {
+
+ if (TokenData == false){
+ TokenData = true;
+ } else {
+ PropertyTokens += ";";
+ }
+
+ PropertyTokens += iter->first;
+ PropertyTokens += "=";
+ PropertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (PropertyTokens.size() > 0){
+
+ RecurranceIDDataTokens = PropertyTokens;
+
+ }
+
+ RecurranceIDData = DataReceived.begin()->second;
+
+ }
+