From 51e2e928cf812be32bfea4fd43ad785e40383ed0 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Wed, 27 Oct 2021 14:31:04 -0500 Subject: [PATCH] [Decompiler] Added post-processing step; Host elements that only reference another element use `me` namespace --- UIX/Microsoft/Iris/Markup/Interpreter.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/UIX/Microsoft/Iris/Markup/Interpreter.cs b/UIX/Microsoft/Iris/Markup/Interpreter.cs index 4025e5a..cd9d833 100644 --- a/UIX/Microsoft/Iris/Markup/Interpreter.cs +++ b/UIX/Microsoft/Iris/Markup/Interpreter.cs @@ -1560,6 +1560,7 @@ namespace Microsoft.Iris.Markup xmlStack.Pop(); } + CleanUpXmlDoc(); InterpreterContext.DecompileResults.Add(XmlDoc); return result; } @@ -1621,5 +1622,26 @@ namespace Microsoft.Iris.Markup return objXml; } } + + private static void CleanUpXmlDoc() + { + XmlNamespaceManager nsManager = new XmlNamespaceManager(XmlDoc.NameTable); + var hosts = XmlDoc.DocumentElement.SelectNodes("*//Host", nsManager); + foreach (XmlNode node in hosts) + { + if (!(node is XmlElement host)) + continue; + + if (host.Attributes.Count == 1 && host.HasAttribute("Name")) + { + string uiElemName = host.GetAttribute("Name"); + nsManager.AddNamespace("me", "Me"); + XmlDoc.DocumentElement.SetAttribute("xmlns:me", "Me"); + + XmlElement uiElem = XmlDoc.CreateElement("me", uiElemName, "Me"); + host.ParentNode.ReplaceChild(uiElem, host); + } + } + } } }