|
@@ -1,5 +1,6 @@
|
|
using System;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
|
+using System.Drawing;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text.RegularExpressions;
|
|
using System.Xml.Linq;
|
|
using System.Xml.Linq;
|
|
using MinorShift.Emuera.Content;
|
|
using MinorShift.Emuera.Content;
|
|
@@ -11,16 +12,14 @@ namespace NTERA.Interop
|
|
{
|
|
{
|
|
public static IEnumerable<IRenderItem> ParseHtml(string html)
|
|
public static IEnumerable<IRenderItem> ParseHtml(string html)
|
|
{
|
|
{
|
|
- var parent = new XElement("parent");
|
|
|
|
-
|
|
|
|
//fix broken HTML from shitty emuera format
|
|
//fix broken HTML from shitty emuera format
|
|
string fixedHtml = Regex.Replace(html, @"<img([^\/]*?)>", "<img$1 />");
|
|
string fixedHtml = Regex.Replace(html, @"<img([^\/]*?)>", "<img$1 />");
|
|
fixedHtml = fixedHtml.Replace("<br>", "<br/>");
|
|
fixedHtml = fixedHtml.Replace("<br>", "<br/>");
|
|
fixedHtml = fixedHtml.Replace("<nobr>", "<nobr/>");
|
|
fixedHtml = fixedHtml.Replace("<nobr>", "<nobr/>");
|
|
|
|
|
|
- parent.Add(XElement.Parse(fixedHtml));
|
|
|
|
|
|
+ var element = XElement.Parse($"<parent>{fixedHtml}</parent>");
|
|
|
|
|
|
- return ParseHtml_Internal(parent, HtmlStyle.Default);
|
|
|
|
|
|
+ return ParseHtml_Internal(element, HtmlStyle.Default);
|
|
}
|
|
}
|
|
|
|
|
|
private static IEnumerable<IRenderItem> ParseHtml_Internal(XElement xmlNode, HtmlStyle style)
|
|
private static IEnumerable<IRenderItem> ParseHtml_Internal(XElement xmlNode, HtmlStyle style)
|
|
@@ -56,12 +55,42 @@ namespace NTERA.Interop
|
|
renderItems.Add(new TextRenderItem(""));
|
|
renderItems.Add(new TextRenderItem(""));
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case "nobr":
|
|
|
|
+ //renderItems.Add(new TextRenderItem(""));
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case "font":
|
|
|
|
+ string color = node.Attribute("color")?.Value;
|
|
|
|
+
|
|
|
|
+ if (color != null)
|
|
|
|
+ {
|
|
|
|
+ if (color.StartsWith("#"))
|
|
|
|
+ {
|
|
|
|
+ string colorHex = color.Substring(1).PadLeft(8, 'F');
|
|
|
|
+
|
|
|
|
+ localStyle.ForeColor = Color.FromArgb(Convert.ToInt32(colorHex, 16));
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ localStyle.ForeColor = Color.FromName(color);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ renderItems.AddRange(ParseHtml_Internal(node, localStyle));
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case "nonbutton":
|
|
|
|
+ //renderItems.Add(new TextRenderItem(node.Value, color: localStyle.ForeColor, alignment: localStyle.Alignment));
|
|
|
|
+ renderItems.AddRange(ParseHtml_Internal(node, localStyle));
|
|
|
|
+ break;
|
|
|
|
+
|
|
default:
|
|
default:
|
|
- renderItems.Add(new TextRenderItem(node.ToString(), alignment: localStyle.Alignment));
|
|
|
|
|
|
+ renderItems.Add(new TextRenderItem(node.ToString(), color: localStyle.ForeColor, alignment: localStyle.Alignment));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (!xmlNode.HasElements && !string.IsNullOrWhiteSpace(xmlNode.Value))
|
|
|
|
+ renderItems.Add(new TextRenderItem(xmlNode.Value, color: localStyle.ForeColor, alignment: localStyle.Alignment));
|
|
|
|
+
|
|
return renderItems;
|
|
return renderItems;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -71,6 +100,8 @@ namespace NTERA.Interop
|
|
|
|
|
|
public DisplayLineAlignment Alignment = DisplayLineAlignment.LEFT;
|
|
public DisplayLineAlignment Alignment = DisplayLineAlignment.LEFT;
|
|
|
|
|
|
|
|
+ public Color ForeColor = Color.White;
|
|
|
|
+
|
|
public HtmlStyle()
|
|
public HtmlStyle()
|
|
{
|
|
{
|
|
|
|
|