nsresult nsMimeXmlEmitter::WriteXMLTag(const char *tagName, const char *value) { if ( (!value) || (!*value) ) return NS_OK; char *upCaseTag = NULL; char *newValue = MsgEscapeHTML(value); if (!newValue) return NS_OK; nsCString newTagName(tagName); newTagName.StripWhitespace(); ToUpperCase(newTagName); upCaseTag = ToNewCString(newTagName); UtilityWrite("<header field=\""); UtilityWrite(upCaseTag); UtilityWrite("\">"); // Here is where we are going to try to L10N the tagName so we will always // get a field name next to an emitted header value. Note: Default will always // be the name of the header itself. // UtilityWrite("<headerdisplayname>"); char *l10nTagName = LocalizeHeaderName(upCaseTag, tagName); if ( (!l10nTagName) || (!*l10nTagName) ) UtilityWrite(tagName); else { UtilityWrite(l10nTagName); } PR_FREEIF(l10nTagName); UtilityWrite(": "); UtilityWrite("</headerdisplayname>"); // Now write out the actual value itself and move on! // UtilityWrite(newValue); UtilityWrite("</header>"); NS_Free(upCaseTag); PR_FREEIF(newValue); return NS_OK; }
nsresult nsMimeBaseEmitter::WriteHeaderFieldHTML(const char *field, const char *value) { char *newValue = nullptr; char *i18nValue = nullptr; if ( (!field) || (!value) ) return NS_OK; // // This is a check to see what the pref is for header display. If // We should only output stuff that corresponds with that setting. // if (!EmitThisHeaderForPrefSetting(mHeaderDisplayType, field)) return NS_OK; // // If we encounter the 'Date' header we try to convert it's value // into localized format. // if ( strcmp(field, "Date") == 0 ) i18nValue = GetLocalizedDateString(value); else i18nValue = strdup(value); if ( (mUnicodeConverter) && (mFormat != nsMimeOutput::nsMimeMessageSaveAs) ) { nsCString tValue; // we're going to need a converter to convert nsresult rv = mUnicodeConverter->DecodeMimeHeaderToUTF8( nsDependentCString(i18nValue), nullptr, false, true, tValue); if (NS_SUCCEEDED(rv) && !tValue.IsEmpty()) newValue = MsgEscapeHTML(tValue.get()); else newValue = MsgEscapeHTML(i18nValue); } else { newValue = MsgEscapeHTML(i18nValue); } free(i18nValue); if (!newValue) return NS_OK; mHTMLHeaders.Append("<tr>"); mHTMLHeaders.Append("<td>"); if (mFormat == nsMimeOutput::nsMimeMessageSaveAs) mHTMLHeaders.Append("<b>"); else mHTMLHeaders.Append("<div class=\"headerdisplayname\" style=\"display:inline;\">"); // Here is where we are going to try to L10N the tagName so we will always // get a field name next to an emitted header value. Note: Default will always // be the name of the header itself. // nsCString newTagName(field); newTagName.StripWhitespace(); ToUpperCase(newTagName); char *l10nTagName = LocalizeHeaderName(newTagName.get(), field); if ( (!l10nTagName) || (!*l10nTagName) ) mHTMLHeaders.Append(field); else { mHTMLHeaders.Append(l10nTagName); PR_FREEIF(l10nTagName); } mHTMLHeaders.Append(": "); if (mFormat == nsMimeOutput::nsMimeMessageSaveAs) mHTMLHeaders.Append("</b>"); else mHTMLHeaders.Append("</div>"); // Now write out the actual value itself and move on! // mHTMLHeaders.Append(newValue); mHTMLHeaders.Append("</td>"); mHTMLHeaders.Append("</tr>"); PR_FREEIF(newValue); return NS_OK; }