static int MimeInlineTextPlainFlowed_parse_begin (MimeObject *obj) { int status = ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_begin(obj); if (status < 0) return status; status = MimeObject_write(obj, "", 0, PR_TRUE); /* force out any separators... */ if(status<0) return status; PRBool quoting = ( obj->options && ( obj->options->format_out == nsMimeOutput::nsMimeMessageQuoting || obj->options->format_out == nsMimeOutput::nsMimeMessageBodyQuoting ) ); // The output will be inserted in the composer as quotation PRBool plainHTML = quoting || (obj->options && obj->options->format_out == nsMimeOutput::nsMimeMessageSaveAs); // Just good(tm) HTML. No reliance on CSS. // Setup the data structure that is connected to the actual document // Saved in a linked list in case this is called with several documents // at the same time. /* This memory is freed when parse_eof is called. So it better be! */ struct MimeInlineTextPlainFlowedExData *exdata = (MimeInlineTextPlainFlowedExData *)PR_MALLOC(sizeof(struct MimeInlineTextPlainFlowedExData)); if(!exdata) return MIME_OUT_OF_MEMORY; MimeInlineTextPlainFlowed *text = (MimeInlineTextPlainFlowed *) obj; // Link it up. exdata->next = MimeInlineTextPlainFlowedExDataList; MimeInlineTextPlainFlowedExDataList = exdata; // Initialize data exdata->ownerobj = obj; exdata->inflow = PR_FALSE; exdata->quotelevel = 0; exdata->isSig = PR_FALSE; // check for DelSp=yes (RFC 3676) char *content_type_row = (obj->headers ? MimeHeaders_get(obj->headers, HEADER_CONTENT_TYPE, PR_FALSE, PR_FALSE) : 0); char *content_type_delsp = (content_type_row ? MimeHeaders_get_parameter(content_type_row, "delsp", NULL,NULL) : 0); ((MimeInlineTextPlainFlowed *)obj)->delSp = content_type_delsp && !PL_strcasecmp(content_type_delsp, "yes"); PR_Free(content_type_delsp); PR_Free(content_type_row); // Get Prefs for viewing exdata->fixedwidthfont = PR_FALSE; // Quotes text->mQuotedSizeSetting = 0; // mail.quoted_size text->mQuotedStyleSetting = 0; // mail.quoted_style text->mCitationColor = nsnull; // mail.citation_color nsIPrefBranch *prefBranch = GetPrefBranch(obj->options); if (prefBranch) { prefBranch->GetIntPref("mail.quoted_size", &(text->mQuotedSizeSetting)); prefBranch->GetIntPref("mail.quoted_style", &(text->mQuotedStyleSetting)); prefBranch->GetCharPref("mail.citation_color", &(text->mCitationColor)); nsresult rv = prefBranch->GetBoolPref("mail.fixed_width_messages", &(exdata->fixedwidthfont)); NS_ASSERTION(NS_SUCCEEDED(rv), "failed to get pref"); // Check at least the success of one } // Get font // only used for viewing (!plainHTML) nsCAutoString fontstyle; nsCAutoString fontLang; // langgroup of the font // generic font-family name ( -moz-fixed for fixed font and NULL for // variable font ) is sufficient now that bug 105199 has been fixed. if (exdata->fixedwidthfont) fontstyle = "font-family: -moz-fixed"; if (nsMimeOutput::nsMimeMessageBodyDisplay == obj->options->format_out || nsMimeOutput::nsMimeMessagePrintOutput == obj->options->format_out) { PRInt32 fontSize; // default font size PRInt32 fontSizePercentage; // size percentage nsresult rv = GetMailNewsFont(obj, exdata->fixedwidthfont, &fontSize, &fontSizePercentage, fontLang); if (NS_SUCCEEDED(rv)) { if ( ! fontstyle.IsEmpty() ) { fontstyle += "; "; } fontstyle += "font-size: "; fontstyle.AppendInt(fontSize); fontstyle += "px;"; } } // Opening <div>. if (!quoting) /* 4.x' editor can't break <div>s (e.g. to interleave comments). We'll add the class to the <blockquote type=cite> later. */ { nsCAutoString openingDiv("<div class=\"moz-text-flowed\""); // We currently have to add formatting here. :-( if (!plainHTML && !fontstyle.IsEmpty()) { openingDiv += " style=\""; openingDiv += fontstyle; openingDiv += '"'; } if (!plainHTML && !fontLang.IsEmpty()) { openingDiv += " lang=\""; openingDiv += fontLang; openingDiv += '\"'; } openingDiv += ">"; status = MimeObject_write(obj, openingDiv.get(), openingDiv.Length(), PR_FALSE); if (status < 0) return status; } return 0; }
static int MimeInlineTextPlain_parse_begin (MimeObject *obj) { int status = 0; PRBool quoting = ( obj->options && ( obj->options->format_out == nsMimeOutput::nsMimeMessageQuoting || obj->options->format_out == nsMimeOutput::nsMimeMessageBodyQuoting ) ); // The output will be inserted in the composer as quotation PRBool plainHTML = quoting || (obj->options && (obj->options->format_out == nsMimeOutput::nsMimeMessageSaveAs)); // Just good(tm) HTML. No reliance on CSS. PRBool rawPlainText = obj->options && (obj->options->format_out == nsMimeOutput::nsMimeMessageFilterSniffer || obj->options->format_out == nsMimeOutput::nsMimeMessageAttach); status = ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_begin(obj); if (status < 0) return status; if (!obj->output_p) return 0; if (obj->options && obj->options->write_html_p && obj->options->output_fn) { MimeInlineTextPlain *text = (MimeInlineTextPlain *) obj; text->mCiteLevel = 0; // Get the prefs // Quoting text->mBlockquoting = PR_TRUE; // mail.quoteasblock // Viewing text->mQuotedSizeSetting = 0; // mail.quoted_size text->mQuotedStyleSetting = 0; // mail.quoted_style text->mCitationColor = nsnull; // mail.citation_color PRBool graphicalQuote = PR_TRUE; // mail.quoted_graphical nsIPrefBranch *prefBranch = GetPrefBranch(obj->options); if (prefBranch) { prefBranch->GetIntPref("mail.quoted_size", &(text->mQuotedSizeSetting)); prefBranch->GetIntPref("mail.quoted_style", &(text->mQuotedStyleSetting)); prefBranch->GetCharPref("mail.citation_color", &(text->mCitationColor)); prefBranch->GetBoolPref("mail.quoted_graphical", &graphicalQuote); prefBranch->GetBoolPref("mail.quoteasblock", &(text->mBlockquoting)); } if (!rawPlainText) { // Get font // only used for viewing (!plainHTML) nsCAutoString fontstyle; nsCAutoString fontLang; // langgroup of the font // generic font-family name ( -moz-fixed for fixed font and NULL for // variable font ) is sufficient now that bug 105199 has been fixed. if (!obj->options->variable_width_plaintext_p) fontstyle = "font-family: -moz-fixed"; if (nsMimeOutput::nsMimeMessageBodyDisplay == obj->options->format_out || nsMimeOutput::nsMimeMessagePrintOutput == obj->options->format_out) { PRInt32 fontSize; // default font size PRInt32 fontSizePercentage; // size percentage nsresult rv = GetMailNewsFont(obj, !obj->options->variable_width_plaintext_p, &fontSize, &fontSizePercentage, fontLang); if (NS_SUCCEEDED(rv)) { if ( ! fontstyle.IsEmpty() ) { fontstyle += "; "; } fontstyle += "font-size: "; fontstyle.AppendInt(fontSize); fontstyle += "px;"; } } // Opening <div>. We currently have to add formatting here. :-( nsCAutoString openingDiv; if (!quoting) /* 4.x' editor can't break <div>s (e.g. to interleave comments). We'll add the class to the <blockquote type=cite> later. */ { openingDiv = "<div class=\"moz-text-plain\""; if (!plainHTML) { if (obj->options->wrap_long_lines_p) openingDiv += " wrap=true"; else openingDiv += " wrap=false"; if (graphicalQuote) openingDiv += " graphical-quote=true"; else openingDiv += " graphical-quote=false"; if (!fontstyle.IsEmpty()) { openingDiv += " style=\""; openingDiv += fontstyle; openingDiv += '\"'; } if (!fontLang.IsEmpty()) { openingDiv += " lang=\""; openingDiv += fontLang; openingDiv += '\"'; } } openingDiv += "><pre wrap>"; } else openingDiv = "<pre wrap>"; status = MimeObject_write(obj, openingDiv.get(), openingDiv.Length(), PR_FALSE); if (status < 0) return status; /* text/plain objects always have separators before and after them. Note that this is not the case for text/enriched objects. */ status = MimeObject_write_separator(obj); if (status < 0) return status; } } return 0; }