X-Git-Url: http://Server1/repobrowser/?p=xestiaab%2F.git;a=blobdiff_plain;f=source%2Fcontacteditor%2FContactDataObject.cpp;h=49a5f2ce08f62a4d699ac82b869e739bb43d5663;hp=3d4d319fd2dece36ef51a8d02525bf562a253bfc;hb=d0aff1878b93bd25d923176e4e18829b7040da1c;hpb=cdd1530fcf2b19be9187604deb6aa78fba091366 diff --git a/source/contacteditor/ContactDataObject.cpp b/source/contacteditor/ContactDataObject.cpp index 3d4d319..49a5f2c 100644 --- a/source/contacteditor/ContactDataObject.cpp +++ b/source/contacteditor/ContactDataObject.cpp @@ -54,8 +54,129 @@ ContactLoadStatus ContactDataObject::LoadFile(wxString Filename){ } + wxStringTokenizer wSTContactFileLines(vCard4FormatCheck.WriteString(), wxT("\r\n")); + std::map ContactFileLines; + + int ContactLineSeek = 0; + + while (wSTContactFileLines.HasMoreTokens() == TRUE){ + + wxString ContactLine = wSTContactFileLines.GetNextToken(); + ContactFileLines.insert(std::make_pair(ContactLineSeek, ContactLine)); + ContactLineSeek++; + + } + + wxString wxSPropertyNextLine; + + bool ExtraLineSeek = TRUE; + bool QuoteMode = FALSE; + bool PropertyFind = TRUE; + int ContactLineLen = 0; + int QuoteBreakPoint = 0; + wxString ContactLine; + wxString PropertyLine; + wxString PropertySeg1; + wxString PropertySeg2; + wxString PropertyNextLine; + wxString Property; + + for (std::map::iterator iter = ContactFileLines.begin(); + iter != ContactFileLines.end(); ++iter){ + + ExtraLineSeek = TRUE; + QuoteMode = FALSE; + PropertyFind = TRUE; + ContactLineLen = 0; + QuoteBreakPoint = 0; + ContactLine.Clear(); + PropertyLine.Clear(); + PropertySeg1.Clear(); + PropertySeg2.Clear(); + Property.Clear(); + + ContactLine = iter->second; + + while (ExtraLineSeek == TRUE){ + + // Check if there is extra data on the next line + // (indicated by space or tab at the start) and add data. + + iter++; + + if (iter == ContactFileLines.end()){ + + iter--; + break; + + } + + PropertyNextLine = iter->second; + + if (PropertyNextLine.Mid(0, 1) == wxT(" ") || PropertyNextLine.Mid(0, 1) == wxT("\t")){ + + PropertyNextLine.Remove(0, 1); + ContactLine.Append(PropertyNextLine); + + } else { + + iter--; + ExtraLineSeek = FALSE; + + } + + } + + ContactLineLen = ContactLine.Len(); + + // Make sure we are not in quotation mode. + // Make sure colon does not have \ or \\ before it. + + for (int i = 0; i <= ContactLineLen; i++){ + + if ((ContactLine.Mid(i, 1) == wxT(";") || ContactLine.Mid(i, 1) == wxT(":")) && PropertyFind == TRUE){ + + PropertyFind = FALSE; + + } else if (PropertyFind == TRUE){ + + Property.Append(ContactLine.Mid(i, 1)); + + } + + if (ContactLine.Mid(i, 1) == wxT("\"")){ + + if (QuoteMode == TRUE){ + + QuoteMode = FALSE; + + } else { + + QuoteMode = TRUE; + + } + + } + + if (ContactLine.Mid(i, 1) == wxT(":") && ContactLine.Mid((i - 1), 1) != wxT("\\") && QuoteMode == FALSE){ + + QuoteBreakPoint = i; + break; + + } + + } + + // Split that line at the point into two variables (ignore the colon). + + PropertySeg1 = ContactLine.Mid(0, QuoteBreakPoint); + PropertySeg2 = ContactLine.Mid((QuoteBreakPoint + 1)); + + + + } - return CONTACTLOAD_UNITTESTFAIL; + return CONTACTLOAD_OK; } \ No newline at end of file