NS_IMETHODIMP nsHTMLContentSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { NS_ENSURE_ARG(aText); if (mNeedLineBreaker) { mNeedLineBreaker = PR_FALSE; nsCOMPtr<nsIDOMDocument> domDoc; aText->GetOwnerDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDocument> document = do_QueryInterface(domDoc); } nsAutoString data; nsresult rv; rv = AppendTextData((nsIDOMNode*)aText, aStartOffset, aEndOffset, data, PR_TRUE, PR_FALSE); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; if (mPreLevel > 0) { AppendToStringConvertLF(data, aStr); } else if (mFlags & nsIDocumentEncoder::OutputRaw) { PRInt32 lastNewlineOffset = data.RFindChar('\n'); AppendToString(data, aStr); if (lastNewlineOffset != kNotFound) mColPos = data.Length() - lastNewlineOffset; } else if (!mDoFormat) { PRInt32 lastNewlineOffset = kNotFound; PRBool hasLongLines = HasLongLines(data, lastNewlineOffset); if (hasLongLines) { // We have long lines, rewrap AppendToStringWrapped(data, aStr, PR_FALSE); if (lastNewlineOffset != kNotFound) mColPos = data.Length() - lastNewlineOffset; } else { AppendToStringConvertLF(data, aStr); } } else { AppendToStringWrapped(data, aStr, PR_FALSE); } return NS_OK; }
NS_IMETHODIMP nsXHTMLContentSerializer::AppendText(nsIContent* aText, int32_t aStartOffset, int32_t aEndOffset, nsAString& aStr) { NS_ENSURE_ARG(aText); nsAutoString data; nsresult rv; rv = AppendTextData(aText, aStartOffset, aEndOffset, data, true); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; if (mDoRaw || PreLevel() > 0) { NS_ENSURE_TRUE(AppendToStringConvertLF(data, aStr), NS_ERROR_OUT_OF_MEMORY); } else if (mDoFormat) { NS_ENSURE_TRUE(AppendToStringFormatedWrapped(data, aStr), NS_ERROR_OUT_OF_MEMORY); } else if (mDoWrap) { NS_ENSURE_TRUE(AppendToStringWrapped(data, aStr), NS_ERROR_OUT_OF_MEMORY); } else { int32_t lastNewlineOffset = kNotFound; if (HasLongLines(data, lastNewlineOffset)) { // We have long lines, rewrap mDoWrap = true; bool result = AppendToStringWrapped(data, aStr); mDoWrap = false; NS_ENSURE_TRUE(result, NS_ERROR_OUT_OF_MEMORY); } else { NS_ENSURE_TRUE(AppendToStringConvertLF(data, aStr), NS_ERROR_OUT_OF_MEMORY); } } return NS_OK; }
NS_IMETHODIMP nsXHTMLContentSerializer::AppendText(nsIContent* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { NS_ENSURE_ARG(aText); nsAutoString data; nsresult rv; rv = AppendTextData(aText, aStartOffset, aEndOffset, data, true); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; if (mPreLevel > 0 || mDoRaw) { AppendToStringConvertLF(data, aStr); } else if (mDoFormat) { AppendToStringFormatedWrapped(data, aStr); } else if (mDoWrap) { AppendToStringWrapped(data, aStr); } else { PRInt32 lastNewlineOffset = kNotFound; if (HasLongLines(data, lastNewlineOffset)) { // We have long lines, rewrap mDoWrap = true; AppendToStringWrapped(data, aStr); mDoWrap = false; } else { AppendToStringConvertLF(data, aStr); } } return NS_OK; }
NS_IMETHODIMP nsHTMLContentSerializer::AppendText(nsIDOMText* aText, PRInt32 aStartOffset, PRInt32 aEndOffset, nsAString& aStr) { NS_ENSURE_ARG(aText); if (mNeedLineBreaker) { mNeedLineBreaker = PR_FALSE; nsCOMPtr<nsIDOMDocument> domDoc; aText->GetOwnerDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDocument> document = do_QueryInterface(domDoc); if (document) { mLineBreaker = document->GetLineBreaker(); } if (!mLineBreaker) { nsresult rv; nsCOMPtr<nsILineBreakerFactory> lf(do_GetService(kLWBrkCID, &rv)); if (NS_SUCCEEDED(rv)) { rv = lf->GetBreaker(EmptyString(), getter_AddRefs(mLineBreaker)); // Ignore result value. // If we are unable to obtain a line breaker, // we will use our simple fallback logic. } } } nsAutoString data; nsresult rv; rv = AppendTextData((nsIDOMNode*)aText, aStartOffset, aEndOffset, data, PR_TRUE, PR_FALSE); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; if (mPreLevel > 0) { AppendToStringConvertLF(data, aStr); } else if (mFlags & nsIDocumentEncoder::OutputRaw) { PRInt32 lastNewlineOffset = data.RFindChar('\n'); AppendToString(data, aStr); if (lastNewlineOffset != kNotFound) mColPos = data.Length() - lastNewlineOffset; } else if (!mDoFormat) { PRInt32 lastNewlineOffset = kNotFound; PRBool hasLongLines = HasLongLines(data, lastNewlineOffset); if (hasLongLines) { // We have long lines, rewrap AppendToStringWrapped(data, aStr, PR_FALSE); if (lastNewlineOffset != kNotFound) mColPos = data.Length() - lastNewlineOffset; } else { AppendToStringConvertLF(data, aStr); } } else { AppendToStringWrapped(data, aStr, PR_FALSE); } return NS_OK; }