Browse Source

Fix #2014: BAML rendering issue

pull/2030/head
Siegfried Pammer 5 years ago
parent
commit
c6a1d5d67b
  1. 5
      ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs
  2. 22
      ILSpy.BamlDecompiler/Xaml/XamlUtils.cs

5
ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs

@ -27,6 +27,8 @@ using ICSharpCode.Decompiler.IL.Transforms; @@ -27,6 +27,8 @@ using ICSharpCode.Decompiler.IL.Transforms;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.Decompiler.Util;
using ILSpy.BamlDecompiler.Xaml;
namespace ILSpy.BamlDecompiler.Rewrite
{
internal class ConnectionIdRewritePass : IRewritePass
@ -128,7 +130,7 @@ namespace ILSpy.BamlDecompiler.Rewrite @@ -128,7 +130,7 @@ namespace ILSpy.BamlDecompiler.Rewrite
var events = new List<EventRegistration>();
switch (inst) {
case Block b:
case Block _:
foreach (var node in ((Block)inst).Instructions) {
FindEvents(node, events);
}
@ -197,6 +199,7 @@ namespace ILSpy.BamlDecompiler.Rewrite @@ -197,6 +199,7 @@ namespace ILSpy.BamlDecompiler.Rewrite
if (ldftn.OpCode != OpCode.LdFtn && ldftn.OpCode != OpCode.LdVirtFtn)
return false;
handlerName = ((IInstructionWithMethodOperand)ldftn).Method.Name;
handlerName = XamlUtils.EscapeName(handlerName);
return true;
}

22
ILSpy.BamlDecompiler/Xaml/XamlUtils.cs

@ -73,5 +73,27 @@ namespace ILSpy.BamlDecompiler.Xaml { @@ -73,5 +73,27 @@ namespace ILSpy.BamlDecompiler.Xaml {
// (11700684 * 0.000001) != (11700684 / 1000000.0) => 11.700683999999999 != 11.700684
return reader.ReadInt32() / 1000000.0;
}
/// <summary>
/// Escape characters that cannot be used in XML.
/// </summary>
public static StringBuilder EscapeName(StringBuilder sb, string name)
{
foreach (char ch in name) {
if (char.IsWhiteSpace(ch) || char.IsControl(ch) || char.IsSurrogate(ch))
sb.AppendFormat("\\u{0:x4}", (int)ch);
else
sb.Append(ch);
}
return sb;
}
/// <summary>
/// Escape characters that cannot be displayed in the UI.
/// </summary>
public static string EscapeName(string name)
{
return EscapeName(new StringBuilder(name.Length), name).ToString();
}
}
}
Loading…
Cancel
Save