bool mozTXTToHTMLConv::CheckURLAndCreateHTML( const nsString& txtURL, const nsString& desc, const modetype mode, nsString& outputHTML) { // Create *uri from txtURL nsCOMPtr<nsIURI> uri; nsresult rv; // Lazily initialize mIOService if (!mIOService) { mIOService = do_GetIOService(); if (!mIOService) return false; } // See if the url should be linkified. NS_ConvertUTF16toUTF8 utf8URL(txtURL); if (!ShouldLinkify(utf8URL)) return false; // it would be faster if we could just check to see if there is a protocol // handler for the url and return instead of actually trying to create a url... rv = mIOService->NewURI(utf8URL, nsnull, nsnull, getter_AddRefs(uri)); // Real work if (NS_SUCCEEDED(rv) && uri) { outputHTML.AssignLiteral("<a class=\"moz-txt-link-"); switch(mode) { case RFC1738: outputHTML.AppendLiteral("rfc1738"); break; case RFC2396E: outputHTML.AppendLiteral("rfc2396E"); break; case freetext: outputHTML.AppendLiteral("freetext"); break; case abbreviated: outputHTML.AppendLiteral("abbreviated"); break; default: break; } nsAutoString escapedURL(txtURL); EscapeStr(escapedURL, true); outputHTML.AppendLiteral("\" href=\""); outputHTML += escapedURL; outputHTML.AppendLiteral("\">"); outputHTML += desc; outputHTML.AppendLiteral("</a>"); return true; } else return false; }
void mozTXTToHTMLConv::CalculateURLBoundaries(const PRUnichar * aInString, PRInt32 aInStringLength, const PRUint32 pos, const PRUint32 whathasbeendone, const modetype check, const PRUint32 start, const PRUint32 end, nsString& txtURL, nsString& desc, PRInt32& replaceBefore, PRInt32& replaceAfter) { PRUint32 descstart = start; switch(check) { case RFC1738: { descstart = start - 5; desc.Append(&aInString[descstart], end - descstart + 2); // include "<URL:" and ">" replaceAfter = end - pos + 1; } break; case RFC2396E: { descstart = start - 1; desc.Append(&aInString[descstart], end - descstart + 2); // include brackets replaceAfter = end - pos + 1; } break; case freetext: case abbreviated: { descstart = start; desc.Append(&aInString[descstart], end - start + 1); // don't include brackets replaceAfter = end - pos; } break; default: break; } //switch EscapeStr(desc, false); txtURL.Append(&aInString[start], end - start + 1); txtURL.StripWhitespace(); // FIX ME nsAutoString temp2; ScanTXT(&aInString[descstart], pos - descstart, ~kURLs /*prevents loop*/ & whathasbeendone, temp2); replaceBefore = temp2.Length(); return; }
inline std::string MakeAttrStr(const char* x, int flags = ESC_TRUE) { std::string str = ((flags & ESC_TRUE) ? EscapeStr(x) : x); return (attB + str + attE); }