An HTML to HTML converter.
Used to convert HTML into HTML.
Inheritance: MimeKit.Text.TextConverter
        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);
        }
示例#2
0
		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);
		}
示例#3
0
		public void TestSimpleHtmlToHtml ()
		{
			string expected = File.ReadAllText ("../../TestData/html/xamarin3.xhtml");
			string text = File.ReadAllText ("../../TestData/html/xamarin3.html");
			var converter = new HtmlToHtml { HtmlTagCallback = ReplaceUrlsWithFileNames };
			var result = converter.Convert (text);

			Assert.AreEqual (expected, result);
		}
示例#4
0
		protected override void VisitTextPart (TextPart entity)
		{
			string text;

			if (entity.IsHtml) {
				var converter = new HtmlToHtml {
					HtmlTagCallback = HtmlTagCallback
				};

				text = converter.Convert (entity.Text);
			} else if (entity.IsFlowed) {
				var converter = new FlowedToText ();

				text = converter.Convert (entity.Text);
				text = QuoteText (text);
			} else {
				// quote the original message text
				text = QuoteText (entity.Text);
			}

			var part = new TextPart (entity.ContentType.MediaSubtype.ToLowerInvariant ()) {
				Text = text
			};

			Push (part);
		}
示例#5
0
		void RenderMultipartRelated (MultipartRelated related)
		{
			var root = related.Root;
			var multipart = root as Multipart;
			var text = root as TextPart;

			if (multipart != null) {
				// Note: the root document can sometimes be a multipart/alternative.
				// A multipart/alternative is just a collection of alternate views.
				// The last part is the format that most closely matches what the
				// user saw in his or her email client's WYSIWYG editor.
				for (int i = multipart.Count; i > 0; i--) {
					var body = multipart[i - 1] as TextPart;

					if (body == null)
						continue;

					// our preferred mime-type is text/html
					if (body.ContentType.Matches ("text", "html")) {
						text = body;
						break;
					}

					if (text == null)
						text = body;
				}
			}

			// check if we have a text/html document
			if (text != null) {
				if (text.ContentType.Matches ("text", "html")) {
					// replace image src urls that refer to related MIME parts with "data:" urls
					// Note: we could also save the related MIME part content to disk and use
					// file:// urls instead.
					var ctx = new MultipartRelatedImageContext (related);
					var converter = new HtmlToHtml () { HtmlTagCallback = ctx.HtmlTagCallback };
					var html = converter.Convert (text.Text);

					webBrowser.DocumentText = html;
				} else {
					RenderText (text);
				}
			} else if (root != null) {
				// we don't know what we have, so render it as an entity
				Render (root);
			}
		}
示例#6
0
		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);
		}