X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcommon%2Ftext.cpp;h=df64411c7b6f59ab23a1b6ece14d0737df441f37;hb=9adb728229860fdd959e6373a880a902e8212e77;hp=08a732cfb8ec2de38698f6368982fe48ace32a7b;hpb=edbae90db6fd9237515844afadb98f41a025ab1f;p=xestiacalendar%2F.git diff --git a/source/common/text.cpp b/source/common/text.cpp index 08a732c..df64411 100644 --- a/source/common/text.cpp +++ b/source/common/text.cpp @@ -14,21 +14,175 @@ multimap ProcessTextVectors(vector *TextProperties, int TextSeekCount = 0; int TextPropertySize = 0; int PropertySeekCount = 0; + string PropertyName = ""; + int PropertyNameSize = 0; + char BufferChar = 0; for (vector::iterator iter = TextProperties->begin(); iter != TextProperties->end(); iter++){ - - if (*iter == Property){ + + TextPropertySize = iter->size(); + + if (TextPropertySize == 0){ + + // Text property size is 0. Go to the next + // pair. + + continue; + + } + + // Get the property data up to the first semi-colon. + + while (TextSeekCount < TextPropertySize){ + + BufferChar = (*iter)[TextSeekCount]; + + if (BufferChar == ';'){ + break; + } + + PropertyName += BufferChar; + + TextSeekCount++; + + } + + if (*iter == Property || PropertyName == Property){ ProcessResult.insert(make_pair((*TextProperties)[PropertySeekCount], (*TextValues)[PropertySeekCount])); + // Check to continue if one is found. + + if (SearchMultiple == false){ + + // Found one, don't search for anymore. + + break; + + } + } PropertySeekCount++; + TextPropertySize = 0; + TextSeekCount = 0; + PropertyName.clear(); } return ProcessResult; +} + +map SplitValues(string InputData){ + + map FinalSplitValues; + map SplitPoints; + map SplitLength; + size_t intPropertyLen = InputData.size(); + int intSplitsFound = 0; + int intSplitSize = 0; + int intSplitSeek = 0; + int intPrevSplitFound = 0; + + // Get the split points. + + for (int i = 0; i <= intPropertyLen; i++){ + + intSplitSize++; + + InputData.substr(intPrevSplitFound, intSplitSize); + + if (InputData.substr(i, 1) == ";" && + InputData.substr((i - 1), 1) != "\\"){ + + if (intSplitsFound > 0){ + + // Split the value into two. + + PropertyNameValue NVData = SplitNameValue(InputData.substr(intPrevSplitFound, (intSplitSize - 1))); + + if (FinalSplitValues.find(NVData.Name) != FinalSplitValues.end()){ + FinalSplitValues.insert(make_pair(NVData.Name, NVData.Value)); + } else { + FinalSplitValues[NVData.Name] = NVData.Value; + } + + } + + intPrevSplitFound = i + 1; + intSplitSize = 0; + intSplitsFound++; + + } + + } + + if (intSplitsFound > 0){ + + PropertyNameValue NVData = SplitNameValue(InputData.substr(intPrevSplitFound, (intSplitSize - 1))); + + if (FinalSplitValues.find(NVData.Name) != FinalSplitValues.end()){ + FinalSplitValues.insert(make_pair(NVData.Name, NVData.Value)); + } else { + FinalSplitValues[NVData.Name] = NVData.Value; + } + + } + + return FinalSplitValues; + +} + +PropertyNameValue SplitNameValue(string InputData){ + + PropertyNameValue FinalNameValue; + int InputDataLength = InputData.size(); + int SeekCount = 0; + bool QuoteMode = false; + bool DataFound = false; + + while (SeekCount < InputDataLength){ + + if (InputData[SeekCount] == '='){ + + FinalNameValue.Name = InputData.substr(0, SeekCount); + + try{ + FinalNameValue.Value = InputData.substr((SeekCount + 1)); + } + + catch (const out_of_range &oor){ + // Do nothing. Have an empty final value. + } + + DataFound = true; + break; + } + + SeekCount++; + + } + + if (DataFound == false){ + + FinalNameValue.Name = InputData; + + } + + // Check if the value has quotes at the start and end. + // Remove them if this is the case. + + if (FinalNameValue.Value.front() == '\"' && + FinalNameValue.Value.back() == '\"'){ + + FinalNameValue.Value.erase(0, 1); + FinalNameValue.Value.erase((FinalNameValue.Value.size() - 1), 1); + + } + + return FinalNameValue; + } \ No newline at end of file