void mozTXTToHTMLConv::UnescapeStr(const PRUnichar * aInString, PRInt32 aStartPos, PRInt32 aLength, nsString& aOutString) { const PRUnichar * subString = nsnull; for (PRUint32 i = aStartPos; PRInt32(i) - aStartPos < aLength;) { PRInt32 remainingChars = i - aStartPos; if (aInString[i] == '&') { subString = &aInString[i]; if (!nsCRT::strncmp(subString, NS_LITERAL_STRING("<").get(), MinInt(4, aLength - remainingChars))) { aOutString.Append(PRUnichar('<')); i += 4; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING(">").get(), MinInt(4, aLength - remainingChars))) { aOutString.Append(PRUnichar('>')); i += 4; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING("&").get(), MinInt(5, aLength - remainingChars))) { aOutString.Append(PRUnichar('&')); i += 5; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING(""").get(), MinInt(6, aLength - remainingChars))) { aOutString.Append(PRUnichar('"')); i += 6; } else { aOutString += aInString[i]; i++; } } else { aOutString += aInString[i]; i++; } } }
void mozTXTToHTMLConv::UnescapeStr(const char16_t * aInString, int32_t aStartPos, int32_t aLength, nsString& aOutString) { const char16_t * subString = nullptr; for (uint32_t i = aStartPos; int32_t(i) - aStartPos < aLength;) { int32_t remainingChars = i - aStartPos; if (aInString[i] == '&') { subString = &aInString[i]; if (!nsCRT::strncmp(subString, MOZ_UTF16("<"), MinInt(4, aLength - remainingChars))) { aOutString.Append(char16_t('<')); i += 4; } else if (!nsCRT::strncmp(subString, MOZ_UTF16(">"), MinInt(4, aLength - remainingChars))) { aOutString.Append(char16_t('>')); i += 4; } else if (!nsCRT::strncmp(subString, MOZ_UTF16("&"), MinInt(5, aLength - remainingChars))) { aOutString.Append(char16_t('&')); i += 5; } else if (!nsCRT::strncmp(subString, MOZ_UTF16("""), MinInt(6, aLength - remainingChars))) { aOutString.Append(char16_t('"')); i += 6; } else { aOutString += aInString[i]; i++; } } else { aOutString += aInString[i]; i++; } } }
PRInt32 mozTXTToHTMLConv::CiteLevelTXT(const PRUnichar *line, PRUint32& logLineStart) { PRInt32 result = 0; PRInt32 lineLength = nsCRT::strlen(line); bool moreCites = true; while (moreCites) { /* E.g. the following lines count as quote: > text //#ifdef QUOTE_RECOGNITION_AGGRESSIVE >text //#ifdef QUOTE_RECOGNITION_AGGRESSIVE > text ] text USER> text USER] text //#endif logLineStart is the position of "t" in this example */ PRUint32 i = logLineStart; #ifdef QUOTE_RECOGNITION_AGGRESSIVE for (; PRInt32(i) < lineLength && IsSpace(line[i]); i++) ; for (; PRInt32(i) < lineLength && nsCRT::IsAsciiAlpha(line[i]) && nsCRT::IsUpper(line[i]) ; i++) ; if (PRInt32(i) < lineLength && (line[i] == '>' || line[i] == ']')) #else if (PRInt32(i) < lineLength && line[i] == '>') #endif { i++; if (PRInt32(i) < lineLength && line[i] == ' ') i++; // sendmail/mbox // Placed here for performance increase const PRUnichar * indexString = &line[logLineStart]; // here, |logLineStart < lineLength| is always true PRUint32 minlength = MinInt(6,nsCRT::strlen(indexString)); if (Substring(indexString, indexString+minlength).Equals(Substring(NS_LITERAL_STRING(">From "), 0, minlength), nsCaseInsensitiveStringComparator())) //XXX RFC2646 moreCites = false; else { result++; logLineStart = i; } } else moreCites = false; } return result; }
int ValidNodeSpace(const int n, const int nMin, const int nMax) { return MinInt(nMax - 1, MaxInt(nMin, n)); }