Ejemplo n.º 1
0
		public DependencyObject[] Generate(HtmlNode node, IHtmlTextBlock textBlock)
		{
			var ctrl = GenerateSingle(node, textBlock);
			if (ctrl != null)
				return new [] { ctrl };
			return null; 
		}
Ejemplo n.º 2
0
		public HtmlNode Parse(string html)
		{
			if (html == null)
				html = "";

			html = html.Replace("\n", "");
			html = html.RemoveHtmlWhitespaces();
			html = html.ConvertUtf8Characters();
			html = html.ConvertHtmlCharacters();
			html = html.Replace("\r", "").Replace("\n", "").Replace("\t", "");
			html = html.Replace("<br>", "\n").Replace("<br />", "\n").Replace("<br/>", "\n");
			html = html.Replace("<BR>", "\n").Replace("<BR />", "\n").Replace("<BR/>", "\n");
			html = html.Trim('\n', '\r', ' ');
			html = "<p>" + html + "</p>";

			var matches = Regex.Matches(html, "<(.*?)>|</(.*?)>|<(.*?)/>|([^<>]*)");
			var tokens = matches.OfType<Group>().Select(m => m.Value).ToArray();

			var root = new HtmlNode("html", true);
			var stack = new Stack<HtmlNode>();
			stack.Push(root);

			foreach (var token in tokens)
			{
				if (token.StartsWith("</") && token.EndsWith(">")) // end tag
				{
					var value = token.Substring(2, token.Length - 3);
					var node = stack.Peek();
					if (node.Value == value)
						stack.Pop();
	//				else
//						throw new Exception("malformed html");
				}
				else if (token.StartsWith("<") && token.EndsWith("/>")) // full tag
				{
					var value = token.Substring(1, token.Length - 3);
					stack.Peek().AddChild(new HtmlNode(value, true));
				}
				else if (token.StartsWith("<") && token.EndsWith(">")) // start tag
				{
					var value = token.Substring(1, token.Length - 2);
					var node = new HtmlNode(value, true);
					stack.Peek().AddChild(node);
					stack.Push(node);
				}
				else if (!string.IsNullOrEmpty(token)) // text
					stack.Peek().AddChild(new HtmlNode(token, false));
			}

			return root;
		}
Ejemplo n.º 3
0
		public abstract DependencyObject GenerateSingle(HtmlNode node, IHtmlTextBlock textBlock);
Ejemplo n.º 4
0
		internal void AddChild(HtmlNode node)
		{
			Children.Add(node);
		}