X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2Fcalendarobject%2FCalendarObject.cpp;h=e094bc2b4c70f628496080ae9c6b3a1efd5796a1;hb=d0844fc8eb071d88c2673b29920bfc24ee4f030f;hp=e63d9d8b532efd60a6b518d0537778912c262e41;hpb=22e1d3554bc2a3d46126ed60c4a4454e1b0f7f65;p=xestiacalendar%2F.git diff --git a/source/objects/calendarobject/CalendarObject.cpp b/source/objects/calendarobject/CalendarObject.cpp index e63d9d8..e094bc2 100644 --- a/source/objects/calendarobject/CalendarObject.cpp +++ b/source/objects/calendarobject/CalendarObject.cpp @@ -52,6 +52,7 @@ CalendarObjectLoadResult CalendarObject::LoadString(std::string *LoadStringData) bool NewLine = false; bool SkipMode = false; bool ColonFound = false; + bool QuoteMode = false; char BufferChar = 0; int StringDataSize = LoadStringData->size(); int SeekCount = 0; @@ -73,6 +74,22 @@ CalendarObjectLoadResult CalendarObject::LoadString(std::string *LoadStringData) NewLine = false; + } else if ((*LoadStringData)[SeekCount] == '\"'){ + + if (QuoteMode == false){ + QuoteMode = true; + } else { + QuoteMode = false; + } + + BufferChar = (*LoadStringData)[SeekCount]; + + if (ColonFound == false){ + PropertyName += BufferChar; + } else { + PropertyValue += BufferChar; + } + } else if (NewLine == true){ // Character is on a new line but not a space or @@ -100,12 +117,19 @@ CalendarObjectLoadResult CalendarObject::LoadString(std::string *LoadStringData) NewLine = true; - } else if ((*LoadStringData)[SeekCount] == ':'){ + } else if ((*LoadStringData)[SeekCount] == ':' && + QuoteMode == false){ // Character is the colon. Set the colon // found boolen to true. - ColonFound = true; + BufferChar = (*LoadStringData)[SeekCount]; + + if (ColonFound == true){ + PropertyValue += BufferChar; + } else { + ColonFound = true; + } } else { @@ -144,6 +168,20 @@ CalendarObjectLoadResult CalendarObject::LoadString(std::string *LoadStringData) CalendarObjectValidResult BaseDataResult = ValidBaseObject(); CalendarObjectValidResult EventDataResult = ValidObject(); + if (BaseDataResult != CALENDAROBJECTVALID_OK || + EventDataResult != CALENDAROBJECTVALID_OK){ + + StringProcResult = CALENDAROBJECTLOAD_INVALIDFORMAT; + + } else { + + StringProcResult = CALENDAROBJECTLOAD_OK; + + } + + ProcessBaseData(); + ProcessData(); + return StringProcResult; } @@ -171,7 +209,15 @@ CalendarObjectValidResult CalendarObject::ValidBaseObject(){ } } - + + if (ObjectName[SeekCount] == "END" && + ObjectData[SeekCount] == "VCALENDAR" && + ValidBegin == false){ + + return CALENDAROBJECTVALID_INVALIDFORMAT; + + } + SeekCount++; } @@ -234,4 +280,48 @@ CalendarObjectValidResult CalendarObject::ValidBaseObject(){ } +} + +void CalendarObject::ProcessBaseData(){ + + // Process the base object data. + + multimap DataReceived; + + // Get the method (METHOD). + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "METHOD"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + MethodTokens = DataReceived.begin()->first.substr(7); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + MethodData = DataReceived.begin()->second; + + } + + // Get the calendar scale (CALSCALE). + + DataReceived = ProcessTextVectors(&ObjectName, &ObjectData, false, "CALSCALE"); + + if (DataReceived.begin() != DataReceived.end()){ + + try { + CalendarScaleTokens = DataReceived.begin()->first.substr(9); + } + + catch(const out_of_range &oor){ + // Do nothing as there is no data. + } + + CalendarScaleData = DataReceived.begin()->second; + + } + } \ No newline at end of file