CString CStringUtils::WordWrap(const CString& longstring, int limit /* = 80 */, bool bCompactPaths /* = true */) { CString retString; if (longstring.GetLength() < limit) return longstring; // no wrapping needed. CString temp = longstring; while (temp.GetLength() > limit) { int pos=0; int oldpos=0; while ((pos>=0)&&(temp.Find(' ', pos)<limit)&&(temp.Find(' ', pos)>0)) { oldpos = pos; pos = temp.Find(' ', pos+1); } if (oldpos==0) oldpos = temp.Find(' '); if (pos<0) { retString += temp; temp.Empty(); } else { CString longline = oldpos >= 0 ? temp.Left(oldpos+1) : temp; if ((bCompactPaths)&&(longline.GetLength() < MAX_PATH)) { if (((!PathIsFileSpec(longline))&&longline.Find(':')<3)||(PathIsURL(longline))) { TCHAR buf[MAX_PATH]; PathCompactPathEx(buf, longline, limit+1, 0); longline = buf; } } retString += longline; if (oldpos >= 0) temp = temp.Mid(oldpos+1); else temp.Empty(); } retString += _T("\n"); pos = oldpos; } retString += temp; retString.Trim(); return retString; }
CString CStringUtils::WordWrap(const CString& longstring, int limit, bool bCompactPaths, bool bForceWrap, int tabSize) { int nLength = longstring.GetLength(); CString retString; if (limit < 0) limit = 0; int nLineStart = 0; int nLineEnd = 0; int tabOffset = 0; for (int i = 0; i < nLength; ++i) { if (i-nLineStart+tabOffset >= limit) { if (nLineEnd == nLineStart) { if (bForceWrap) nLineEnd = i; else { while ((i < nLength) && (longstring[i] != ' ') && (longstring[i] != '\t')) ++i; nLineEnd = i; } } if (bCompactPaths) { CString longline = longstring.Mid(nLineStart, nLineEnd-nLineStart).Left(MAX_PATH-1); if ((bCompactPaths)&&(longline.GetLength() < MAX_PATH)) { if (((!PathIsFileSpec(longline))&&longline.Find(':')<3)||(PathIsURL(longline))) { TCHAR buf[MAX_PATH] = {0}; PathCompactPathEx(buf, longline, limit+1, 0); longline = buf; } } retString += longline; } else retString += longstring.Mid(nLineStart, nLineEnd-nLineStart); retString += L"\n"; tabOffset = 0; nLineStart = nLineEnd; } if (longstring[i] == ' ') nLineEnd = i; if (longstring[i] == '\t') { tabOffset += (tabSize - i % tabSize); nLineEnd = i; } } if (bCompactPaths) { CString longline = longstring.Mid(nLineStart).Left(MAX_PATH-1); if ((bCompactPaths)&&(longline.GetLength() < MAX_PATH)) { if (((!PathIsFileSpec(longline))&&longline.Find(':')<3)||(PathIsURL(longline))) { TCHAR buf[MAX_PATH] = {0}; PathCompactPathEx(buf, longline, limit+1, 0); longline = buf; } } retString += longline; } else retString += longstring.Mid(nLineStart); return retString; }