Skip to content

Commit

Permalink
Improve tag resolver API
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchLeaders committed Jan 16, 2024
1 parent f842af6 commit 874aac0
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ public string GetName(ushort group, ushort type)
return (ushort.Parse(name[..split]), ushort.Parse(name[++split..]));
}

public bool WriteBinaryUtf8(RevrsWriter writer, ReadOnlySpan<char> name, in TagParams @params)
public bool WriteBinaryUtf8(RevrsWriter writer, ushort group, ushort type, in TagParams @params)
{
throw new NotImplementedException();
}

public bool WriteBinaryUtf16(RevrsWriter writer, ReadOnlySpan<char> name, in TagParams @params)
public bool WriteBinaryUtf16(RevrsWriter writer, ushort group, ushort type, in TagParams @params)
{
ReadOnlySpan<char> data = @params["Data"];
byte[] buffer = data.IsEmpty ? [] : Convert.FromHexString(data[2..]);
Expand All @@ -39,13 +39,15 @@ public bool WriteBinaryUtf16(RevrsWriter writer, ReadOnlySpan<char> name, in Tag
return true;
}

public void WriteText(StringBuilder sb, ReadOnlySpan<char> name, Span<byte> data)
public bool WriteText(StringBuilder sb, ushort group, ushort type, Span<byte> data)
{
if (!data.IsEmpty) {
sb.OpenParam("Data");
sb.Append("0x");
sb.Append(Convert.ToHexString(data));
sb.CloseParam();
}

return true;
}
}
10 changes: 5 additions & 5 deletions src/MessageStudio/Formats/BinaryText/Components/ITagResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public interface ITagResolver
/// </returns>
public (ushort, ushort)? GetGroupAndType(ReadOnlySpan<char> name);

/// <inheritdoc cref="WriteText(StringBuilder, ReadOnlySpan{char}, Span{byte})"/>
public bool WriteBinaryUtf16(RevrsWriter writer, ReadOnlySpan<char> name, in TagParams @params);
/// <inheritdoc cref="WriteText(StringBuilder, ushort, ushort, Span{byte})"/>
public bool WriteBinaryUtf16(RevrsWriter writer, ushort group, ushort type, in TagParams @params);

/// <inheritdoc cref="WriteText(StringBuilder, ReadOnlySpan{char}, Span{byte})"/>
public bool WriteBinaryUtf8(RevrsWriter writer, ReadOnlySpan<char> name, in TagParams @params);
/// <inheritdoc cref="WriteText(StringBuilder, ushort, ushort, Span{byte})"/>
public bool WriteBinaryUtf8(RevrsWriter writer, ushort group, ushort type, in TagParams @params);

/// <summary>
/// Returns <see langword="true"/> if the tag was recognized
Expand All @@ -36,5 +36,5 @@ public interface ITagResolver
/// <param name="writer"></param>
/// <param name="params"></param>
/// <returns></returns>
public void WriteText(StringBuilder sb, ReadOnlySpan<char> name, Span<byte> data);
public bool WriteText(StringBuilder sb, ushort group, ushort type, Span<byte> data);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ public class TagResolver

public static void Load(ITagResolver resolver)
{
TagResolverExtension.Register(resolver);
TagResolverExtensions.Register(resolver);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace MessageStudio.Formats.BinaryText.Extensions;

public static class TagResolverExtension
public static class TagResolverExtensions
{
public static ITagResolver Resolver { get; private set; } = new DefaultTagResolver();

Expand All @@ -25,12 +25,12 @@ internal static void WriteTag(this StringBuilder sb, ushort group, ushort type,

if (Resolver.GetName(group, type) is string name) {
sb.Append(name);
Resolver.WriteText(sb, name, data);
Resolver.WriteText(sb, group, type, data);
}
else {
name = DefaultTagResolver.Shared.GetName(group, type);
sb.Append(name);
DefaultTagResolver.Shared.WriteText(sb, name, data);
DefaultTagResolver.Shared.WriteText(sb, group, type, data);
}

sb.Append("/>");
Expand All @@ -48,16 +48,16 @@ internal static void WriteTag(this RevrsWriter writer, ReadOnlySpan<char> text,
writer.Write<byte>(0xE);
writer.Write((byte)group);
writer.Write((byte)type);
if (Resolver.WriteBinaryUtf8(writer, name, @params) == false) {
DefaultTagResolver.Shared.WriteBinaryUtf8(writer, name, @params);
if (Resolver.WriteBinaryUtf8(writer, group, type, @params) == false) {
DefaultTagResolver.Shared.WriteBinaryUtf8(writer, group, type, @params);
}
}
else {
writer.Write<ushort>(0xE);
writer.Write(group);
writer.Write(type);
if (Resolver.WriteBinaryUtf16(writer, name, @params) == false) {
DefaultTagResolver.Shared.WriteBinaryUtf16(writer, name, @params);
if (Resolver.WriteBinaryUtf16(writer, group, type, @params) == false) {
DefaultTagResolver.Shared.WriteBinaryUtf16(writer, group, type, @params);
}
}
}
Expand Down

0 comments on commit 874aac0

Please sign in to comment.