// static void nsTextEditRules::HandleNewLines(nsString &aString, int32_t aNewlineHandling) { if (aNewlineHandling < 0) { int32_t caretStyle; nsPlaintextEditor::GetDefaultEditorPrefs(aNewlineHandling, caretStyle); } switch(aNewlineHandling) { case nsIPlaintextEditor::eNewlinesReplaceWithSpaces: // Strip trailing newlines first so we don't wind up with trailing spaces aString.Trim(CRLF, false, true); aString.ReplaceChar(CRLF, ' '); break; case nsIPlaintextEditor::eNewlinesStrip: aString.StripChars(CRLF); break; case nsIPlaintextEditor::eNewlinesPasteToFirst: default: { int32_t firstCRLF = aString.FindCharInSet(CRLF); // we get first *non-empty* line. int32_t offset = 0; while (firstCRLF == offset) { offset++; firstCRLF = aString.FindCharInSet(CRLF, offset); } if (firstCRLF > 0) aString.Truncate(firstCRLF); if (offset > 0) aString.Cut(0, offset); } break; case nsIPlaintextEditor::eNewlinesReplaceWithCommas: aString.Trim(CRLF, true, true); aString.ReplaceChar(CRLF, ','); break; case nsIPlaintextEditor::eNewlinesStripSurroundingWhitespace: { nsString result; uint32_t offset = 0; while (offset < aString.Length()) { int32_t nextCRLF = aString.FindCharInSet(CRLF, offset); if (nextCRLF < 0) { result.Append(nsDependentSubstring(aString, offset)); break; } uint32_t wsBegin = nextCRLF; // look backwards for the first non-whitespace char while (wsBegin > offset && NS_IS_SPACE(aString[wsBegin - 1])) --wsBegin; result.Append(nsDependentSubstring(aString, offset, wsBegin - offset)); offset = nextCRLF + 1; while (offset < aString.Length() && NS_IS_SPACE(aString[offset])) ++offset; } aString = result; } break; case nsIPlaintextEditor::eNewlinesPasteIntact: // even if we're pasting newlines, don't paste leading/trailing ones aString.Trim(CRLF, true, true); break; } }
// static void nsTextEditRules::HandleNewLines(nsString &aString, PRInt32 aNewlineHandling) { if (aNewlineHandling < 0) { PRInt32 caretStyle; nsPlaintextEditor::GetDefaultEditorPrefs(aNewlineHandling, caretStyle); } switch(aNewlineHandling) { case nsIPlaintextEditor::eNewlinesReplaceWithSpaces: // Strip trailing newlines first so we don't wind up with trailing spaces aString.Trim(CRLF, false, true); aString.ReplaceChar(CRLF, ' '); break; case nsIPlaintextEditor::eNewlinesStrip: aString.StripChars(CRLF); break; case nsIPlaintextEditor::eNewlinesPasteToFirst: default: { PRInt32 firstCRLF = aString.FindCharInSet(CRLF); // we get first *non-empty* line. PRInt32 offset = 0; while (firstCRLF == offset) { offset++; firstCRLF = aString.FindCharInSet(CRLF, offset); } if (firstCRLF > 0) aString.Truncate(firstCRLF); if (offset > 0) aString.Cut(0, offset); } break; case nsIPlaintextEditor::eNewlinesReplaceWithCommas: aString.Trim(CRLF, true, true); aString.ReplaceChar(CRLF, ','); break; case nsIPlaintextEditor::eNewlinesStripSurroundingWhitespace: { // find each newline, and strip all the whitespace before // and after it PRInt32 firstCRLF = aString.FindCharInSet(CRLF); while (firstCRLF >= 0) { PRUint32 wsBegin = firstCRLF, wsEnd = firstCRLF + 1; // look backwards for the first non-whitespace char while (wsBegin > 0 && NS_IS_SPACE(aString[wsBegin - 1])) --wsBegin; while (wsEnd < aString.Length() && NS_IS_SPACE(aString[wsEnd])) ++wsEnd; // now cut this range out of the string aString.Cut(wsBegin, wsEnd - wsBegin); // look for another CR or LF firstCRLF = aString.FindCharInSet(CRLF); } } break; case nsIPlaintextEditor::eNewlinesPasteIntact: // even if we're pasting newlines, don't paste leading/trailing ones aString.Trim(CRLF, true, true); break; } }
inline bool isOnlySafeChars(const nsString& in, const nsString& blacklist) { return (blacklist.IsEmpty() || in.FindCharInSet(blacklist) == kNotFound); }