|
@@ -4,13 +4,15 @@ using System.Drawing;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text.RegularExpressions;
|
|
using System.Xml.Linq;
|
|
using System.Xml.Linq;
|
|
using NTERA.Console.RenderItem;
|
|
using NTERA.Console.RenderItem;
|
|
|
|
+using NTERA.Core;
|
|
using NTERA.Core.Interop;
|
|
using NTERA.Core.Interop;
|
|
|
|
+using NTERA.EmuEra.Game.EraEmu.Content;
|
|
|
|
|
|
namespace NTERA.Console
|
|
namespace NTERA.Console
|
|
{
|
|
{
|
|
public static class HtmlParser
|
|
public static class HtmlParser
|
|
{
|
|
{
|
|
- public static IEnumerable<IRenderItem> ParseHtml(string html)
|
|
|
|
|
|
+ public static IEnumerable<IRenderItem> ParseHtml(string html, Func<string, CroppedImage> assetFunc)
|
|
{
|
|
{
|
|
//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 />");
|
|
@@ -19,10 +21,10 @@ namespace NTERA.Console
|
|
|
|
|
|
var element = XElement.Parse($"<parent>{fixedHtml}</parent>");
|
|
var element = XElement.Parse($"<parent>{fixedHtml}</parent>");
|
|
|
|
|
|
- return ParseHtml_Internal(element, HtmlStyle.Default);
|
|
|
|
|
|
+ return ParseHtml_Internal(element, assetFunc, HtmlStyle.Default);
|
|
}
|
|
}
|
|
|
|
|
|
- private static IEnumerable<IRenderItem> ParseHtml_Internal(XElement xmlNode, HtmlStyle style)
|
|
|
|
|
|
+ private static IEnumerable<IRenderItem> ParseHtml_Internal(XElement xmlNode, Func<string, CroppedImage> assetFunc, HtmlStyle style)
|
|
{
|
|
{
|
|
List<IRenderItem> renderItems = new List<IRenderItem>();
|
|
List<IRenderItem> renderItems = new List<IRenderItem>();
|
|
HtmlStyle localStyle = (HtmlStyle)style.Clone();
|
|
HtmlStyle localStyle = (HtmlStyle)style.Clone();
|
|
@@ -37,7 +39,7 @@ namespace NTERA.Console
|
|
if (alignment != null)
|
|
if (alignment != null)
|
|
localStyle.Alignment = (DisplayLineAlignment)Enum.Parse(typeof(DisplayLineAlignment), alignment.ToUpper());
|
|
localStyle.Alignment = (DisplayLineAlignment)Enum.Parse(typeof(DisplayLineAlignment), alignment.ToUpper());
|
|
|
|
|
|
- renderItems.AddRange(ParseHtml_Internal(node, localStyle));
|
|
|
|
|
|
+ renderItems.AddRange(ParseHtml_Internal(node, assetFunc, localStyle));
|
|
break;
|
|
break;
|
|
|
|
|
|
case "img":
|
|
case "img":
|
|
@@ -46,9 +48,9 @@ namespace NTERA.Console
|
|
if (src == null)
|
|
if (src == null)
|
|
throw new InvalidOperationException("HTML 'img' tag in script is missing 'src' attribute");
|
|
throw new InvalidOperationException("HTML 'img' tag in script is missing 'src' attribute");
|
|
|
|
|
|
- var image = AppContents.GetContent<CroppedImage>(src);
|
|
|
|
|
|
+ var image = assetFunc(src);
|
|
|
|
|
|
- renderItems.Add(new ImageRenderItem(image.BaseImage.Bitmap, image.Rectangle, alignment: localStyle.Alignment));
|
|
|
|
|
|
+ renderItems.Add(new ImageRenderItem(image.Bitmap, image.Rectangle, alignment: localStyle.Alignment));
|
|
break;
|
|
break;
|
|
|
|
|
|
case "br":
|
|
case "br":
|
|
@@ -74,12 +76,12 @@ namespace NTERA.Console
|
|
localStyle.ForeColor = Color.FromName(color);
|
|
localStyle.ForeColor = Color.FromName(color);
|
|
}
|
|
}
|
|
|
|
|
|
- renderItems.AddRange(ParseHtml_Internal(node, localStyle));
|
|
|
|
|
|
+ renderItems.AddRange(ParseHtml_Internal(node, assetFunc, localStyle));
|
|
break;
|
|
break;
|
|
|
|
|
|
case "nonbutton":
|
|
case "nonbutton":
|
|
//renderItems.Add(new TextRenderItem(node.Value, color: localStyle.ForeColor, alignment: localStyle.Alignment));
|
|
//renderItems.Add(new TextRenderItem(node.Value, color: localStyle.ForeColor, alignment: localStyle.Alignment));
|
|
- renderItems.AddRange(ParseHtml_Internal(node, localStyle));
|
|
|
|
|
|
+ renderItems.AddRange(ParseHtml_Internal(node, assetFunc, localStyle));
|
|
break;
|
|
break;
|
|
|
|
|
|
default:
|
|
default:
|