string RenderText(TextPart text) { string html; if (text.IsHtml) { return(text.Text); } else if (text.IsFlowed) { var converter = new FlowedToHtml(); string delsp; if (!text.ContentType.Parameters.TryGetValue("delsp", out delsp)) { delsp = "no"; } if (string.Compare(delsp, "yes", StringComparison.OrdinalIgnoreCase) == 0) { converter.DeleteSpace = true; } html = converter.Convert(text.Text); } else { html = new TextToHtml().Convert(text.Text); } return(html); }
protected override void VisitTextPart (TextPart entity) { TextConverter converter; if (body != null) { // since we've already found the body, treat this as an attachment attachments.Add (entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml (); string delsp; if (entity.ContentType.Parameters.TryGetValue ("delsp", out delsp)) flowed.DeleteSpace = delsp.ToLowerInvariant () == "yes"; converter = flowed; } else { converter = new TextToHtml (); } body = converter.Convert (entity.Text); }
public void TestSimpleFlowedToHtml() { string expected = "<p>This is some sample text that has been formatted " + "according to the format=flowed rules defined in rfc3676. " + "This text, once converted, should all be on a single line.</p>" + Environment.NewLine + "<br/>" + Environment.NewLine + "<br/>" + Environment.NewLine + "<br/>" + Environment.NewLine + "<br/>" + Environment.NewLine + "<p>And this line of text should be separate by 4 blank lines.</p>" + Environment.NewLine; string text = "This is some sample text that has been formatted " + Environment.NewLine + "according to the format=flowed rules defined in rfc3676. " + Environment.NewLine + "This text, once converted, should all be on a single line." + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine + "And this line of text should be separate by 4 blank lines." + Environment.NewLine; var converter = new FlowedToHtml { OutputHtmlFragment = true }; var result = converter.Convert(text); Assert.AreEqual(expected, result); }
public void TestBrokenQuotedFlowedToHtml() { // Note: this is the brokenly quoted sample from rfc3676 at the end of section 4.5 string expected = "<blockquote><p>Thou villainous ill-breeding spongy dizzy-eyed reeky elf-skinned pigeon-egg! </p>" + Environment.NewLine + "<blockquote><p>Thou artless swag-bellied milk-livered dismal-dreaming idle-headed scut!</p>" + Environment.NewLine + "<blockquote><p>Thou errant folly-fallen spleeny reeling-ripe unmuzzled ratsbane!</p>" + Environment.NewLine + "<blockquote><p>Henceforth, the coding style is to be strictly enforced, including the use of only upper case.</p>" + Environment.NewLine + "<blockquote><p>I've noticed a lack of adherence to the coding styles, of late.</p>" + Environment.NewLine + "<blockquote><p>Any complaints?</p>" + Environment.NewLine + "</blockquote></blockquote></blockquote></blockquote></blockquote></blockquote>"; string text = "> Thou villainous ill-breeding spongy dizzy-eyed " + Environment.NewLine + "> reeky elf-skinned pigeon-egg! " + Environment.NewLine + ">> Thou artless swag-bellied milk-livered " + Environment.NewLine + ">> dismal-dreaming idle-headed scut!" + Environment.NewLine + ">>> Thou errant folly-fallen spleeny reeling-ripe " + Environment.NewLine + ">>> unmuzzled ratsbane!" + Environment.NewLine + ">>>> Henceforth, the coding style is to be strictly " + Environment.NewLine + ">>>> enforced, including the use of only upper case." + Environment.NewLine + ">>>>> I've noticed a lack of adherence to the coding " + Environment.NewLine + ">>>>> styles, of late." + Environment.NewLine + ">>>>>> Any complaints?" + Environment.NewLine; var converter = new FlowedToHtml { OutputHtmlFragment = true }; var result = converter.Convert(text); Assert.AreEqual(expected, result); }
static void RenderText(TextPart text, WebBrowserEditabil pWebBrowser) { string html; if (text.IsHtml) { html = text.Text; } else if (text.IsFlowed) { var converter = new FlowedToHtml(); string delsp; if (!text.ContentType.Parameters.TryGetValue("delsp", out delsp)) { delsp = "no"; } if (string.Compare(delsp, "yes", StringComparison.OrdinalIgnoreCase) == 0) { converter.DeleteSpace = true; } html = converter.Convert(text.Text); } else { html = new TextToHtml().Convert(text.Text); } pWebBrowser.DocumentText = html; }
public void TestTextHeaderAndFooter() { string expected = "<html><body>On <date>, so-and-so said:<br/><blockquote><p>Thou villainous ill-breeding spongy dizzy-eyed reeky elf-skinned pigeon-egg!</p>" + Environment.NewLine + "<blockquote><p>Thou artless swag-bellied milk-livered dismal-dreaming idle-headed scut!</p>" + Environment.NewLine + "<blockquote><p>Thou errant folly-fallen spleeny reeling-ripe unmuzzled ratsbane!</p>" + Environment.NewLine + "<blockquote><p>Henceforth, the coding style is to be strictly enforced, including the use of only upper case.</p>" + Environment.NewLine + "<blockquote><p>I've noticed a lack of adherence to the coding styles, of late.</p>" + Environment.NewLine + "<blockquote><p>Any complaints?</p>" + Environment.NewLine + "</blockquote></blockquote></blockquote></blockquote></blockquote></blockquote>Tha-tha-tha-tha that's all, folks!<br/></body></html>"; string text = "> Thou villainous ill-breeding spongy dizzy-eyed " + Environment.NewLine + "> reeky elf-skinned pigeon-egg!" + Environment.NewLine + ">> Thou artless swag-bellied milk-livered " + Environment.NewLine + ">> dismal-dreaming idle-headed scut!" + Environment.NewLine + ">>> Thou errant folly-fallen spleeny reeling-ripe " + Environment.NewLine + ">>> unmuzzled ratsbane!" + Environment.NewLine + ">>>> Henceforth, the coding style is to be strictly " + Environment.NewLine + ">>>> enforced, including the use of only upper case." + Environment.NewLine + ">>>>> I've noticed a lack of adherence to the coding " + Environment.NewLine + ">>>>> styles, of late." + Environment.NewLine + ">>>>>> Any complaints?" + Environment.NewLine; var converter = new FlowedToHtml { Header = "On <date>, so-and-so said:" + Environment.NewLine, HeaderFormat = HeaderFooterFormat.Text, Footer = "Tha-tha-tha-tha that's all, folks!" + Environment.NewLine, FooterFormat = HeaderFooterFormat.Text, HtmlTagCallback = null }; var result = converter.Convert(text); Assert.AreEqual(expected, result); }
void RenderText(TextPart text) { string html; if (text.IsHtml) { // the text content is already in HTML format html = text.Text; } else if (text.IsFlowed) { var converter = new FlowedToHtml(); string delsp; // the delsp parameter specifies whether or not to delete spaces at the end of flowed lines if (!text.ContentType.Parameters.TryGetValue("delsp", out delsp)) { delsp = "no"; } if (string.Compare(delsp, "yes", StringComparison.OrdinalIgnoreCase) == 0) { converter.DeleteSpace = true; } html = converter.Convert(text.Text); } else { html = new TextToHtml().Convert(text.Text); } webView.LoadData(html, "text/html", "utf-8"); }
public void TestSimpleFlowedWithUrlsToHtml() { string expected = "<p>Check out <a href=\"http://www.xamarin.com\">http://www.xamarin.com</a> - it's amazing!</p>" + Environment.NewLine; string text = "Check out http://www.xamarin.com - it's amazing!" + Environment.NewLine; var converter = new FlowedToHtml(); var result = converter.Convert(text); Assert.AreEqual(expected, result); }
protected override void VisitTextPart(TextPart entity) { TextConverter converter; string header, footer; if (_body != null) { // since we've already found the body, treat this as an attachment _attachments.Add(entity); return; } GetHeaderFooter(out header, out footer); if (entity.IsHtml) { converter = new HtmlToHtml { Header = UIStrings.MarkOfTheWeb + Environment.NewLine, HeaderFormat = HeaderFooterFormat.Html, HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml { Header = UIStrings.MarkOfTheWeb + Environment.NewLine + header, HeaderFormat = HeaderFooterFormat.Html, Footer = footer, FooterFormat = HeaderFooterFormat.Html }; string delsp; if (entity.ContentType.Parameters.TryGetValue("delsp", out delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml { Header = UIStrings.MarkOfTheWeb + Environment.NewLine + header, HeaderFormat = HeaderFooterFormat.Html, Footer = footer, FooterFormat = HeaderFooterFormat.Html }; } string text = entity.Text; _body = converter.Convert(entity.Text); }
protected async override void VisitTextPart(TextPart entity) { TextConverter converter; if (renderedBody) { // since we've already found the body, treat this as an attachment attachments.Add(entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml(); if (entity.ContentType.Parameters.TryGetValue("delsp", out string delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml(); } var client = new MultipartRelatedWebViewClient(stack); var html = converter.Convert(entity.Text); // Add print header html = Regex.Replace(html, "<[Bb][Oo][Dd][Yy].*?>", "$0" + "<p id=\"emlReaderPrintHeader\" style=\"background: white; color: black;\"></p>"); await webView.EnsureCoreWebView2Async(); webView.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All); webView.CoreWebView2.WebResourceRequested += client.ShouldInterceptRequest; webView.NavigateToString(html); renderedBody = true; }
private void SetFlowedHtmlToBody(TextPart entity) { var beforeAfter = GetBeforeAfterFormatWrapper(UIStrings.HtmlToHtmlFormatWrapper); var convertor = new FlowedToHtml { Header = $"{UIStrings.MarkOfTheWeb}{Environment.NewLine}{beforeAfter.Before}", HeaderFormat = HeaderFooterFormat.Html, Footer = beforeAfter.After, FooterFormat = HeaderFooterFormat.Html }; if (entity.ContentType.Parameters.TryGetValue("delsp", out string delsp)) { convertor.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } _body = convertor.Convert(entity.Text); }
public void TestDefaultPropertyValues() { var converter = new FlowedToHtml(); Assert.IsFalse(converter.DeleteSpace, "DeleteSpace"); Assert.IsFalse(converter.DetectEncodingFromByteOrderMark, "DetectEncodingFromByteOrderMark"); Assert.IsNull(converter.Footer, "Footer"); Assert.AreEqual(HeaderFooterFormat.Text, converter.FooterFormat, "FooterFormat"); Assert.IsNull(converter.Header, "Header"); Assert.AreEqual(HeaderFooterFormat.Text, converter.HeaderFormat, "HeaderFormat"); Assert.IsNull(converter.HtmlTagCallback, "HtmlTagCallback"); Assert.AreEqual(Encoding.UTF8, converter.InputEncoding, "InputEncoding"); Assert.AreEqual(TextFormat.Flowed, converter.InputFormat, "InputFormat"); Assert.AreEqual(4096, converter.InputStreamBufferSize, "InputStreamBufferSize"); Assert.AreEqual(Encoding.UTF8, converter.OutputEncoding, "OutputEncoding"); Assert.AreEqual(TextFormat.Html, converter.OutputFormat, "OutputFormat"); Assert.IsFalse(converter.OutputHtmlFragment, "OutputHtmlFragment"); Assert.AreEqual(4096, converter.OutputStreamBufferSize, "OutputStreamBufferSize"); }
protected override void VisitTextPart(TextPart entity) { TextConverter converter; if (renderedBody) { // since we've already found the body, treat this as an attachment attachments.Add(entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml(); string delsp; if (entity.ContentType.Parameters.TryGetValue("delsp", out delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml(); } var client = new MultipartRelatedWebViewClient(stack); var html = converter.Convert(entity.Text); webView.SetWebViewClient(client); webView.LoadData(html, "text/html", "utf-8"); renderedBody = true; }
protected override void VisitTextPart(TextPart entity) { TextConverter converter; if (renderedBody) { // since we've already found the body, treat this as an attachment attachments.Add(entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml(); if (entity.ContentType.Parameters.TryGetValue("delsp", out string delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml(); } var html = converter.Convert(entity.Text); NSUrlCache.SharedCache = new MultipartRelatedUrlCache(stack); webView.LoadHtmlString(html, new NSUrl("index.html")); renderedBody = true; }
private static string ConvertToHtml(TextPart entity) { try { TextConverter converter; if (entity.IsHtml) { converter = new HtmlToHtml(); } else if (entity.IsFlowed) { var flowed = new FlowedToHtml(); string delsp; if (entity.ContentType.Parameters.TryGetValue("delsp", out delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml(); } var body = converter.Convert(entity.Text); return(body); } catch (Exception) { // skip } return(entity.Text ?? ""); }
public void TestArgumentExceptions() { var converter = new FlowedToHtml(); var reader = new StringReader(""); var writer = new StringWriter(); Assert.Throws <ArgumentNullException> (() => converter.InputEncoding = null); Assert.Throws <ArgumentNullException> (() => converter.OutputEncoding = null); Assert.Throws <ArgumentOutOfRangeException> (() => converter.InputStreamBufferSize = -1); Assert.Throws <ArgumentOutOfRangeException> (() => converter.OutputStreamBufferSize = -1); Assert.Throws <ArgumentNullException> (() => converter.Convert(null)); Assert.Throws <ArgumentNullException> (() => converter.Convert((Stream)null, Stream.Null)); Assert.Throws <ArgumentNullException> (() => converter.Convert(Stream.Null, (Stream)null)); Assert.Throws <ArgumentNullException> (() => converter.Convert((TextReader)null, Stream.Null)); Assert.Throws <ArgumentNullException> (() => converter.Convert(Stream.Null, (TextWriter)null)); Assert.Throws <ArgumentNullException> (() => converter.Convert((TextReader)null, writer)); Assert.Throws <ArgumentNullException> (() => converter.Convert(reader, (TextWriter)null)); Assert.Throws <ArgumentNullException> (() => converter.Convert(new StreamReader(Stream.Null), (Stream)null)); Assert.Throws <ArgumentNullException> (() => converter.Convert((Stream)null, new StreamWriter(Stream.Null))); Assert.Throws <ArgumentNullException> (() => converter.Convert(new StreamReader(Stream.Null), (TextWriter)null)); }
protected internal override void VisitTextPart(TextPart entity) { TextConverter converter; if (body != null) { base.VisitTextPart(entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml(); string delsp; if (entity.ContentType.Parameters.TryGetValue("delsp", out delsp)) { flowed.DeleteSpace = delsp.ToLowerInvariant() == "yes"; } converter = flowed; } else { converter = new TextToHtml(); } body = converter.Convert(entity.Text); base.VisitTextPart(entity); }