diff --git a/src/MessageStudio/Formats/BinaryText/Msbt.cs b/src/MessageStudio/Formats/BinaryText/Msbt.cs index ff9b84d..7d9a542 100644 --- a/src/MessageStudio/Formats/BinaryText/Msbt.cs +++ b/src/MessageStudio/Formats/BinaryText/Msbt.cs @@ -2,16 +2,9 @@ using MessageStudio.Formats.BinaryText.Writers; using MessageStudio.IO; using System.Runtime.CompilerServices; -using System.Text; namespace MessageStudio.Formats.BinaryText; -public enum Encoding : byte -{ - UTF8 = 0, - Unicode = 1, -} - public class Msbt : Dictionary { internal const ulong MSBT_MAGIC = 0x6E4264745367734D; @@ -63,7 +56,7 @@ public static Msbt FromYaml(in ReadOnlySpan src) throw new NotImplementedException(); } - public void ToBinary(in Stream stream, Encoding encoding = Encoding.Unicode, Endian endianness = Endian.Little) + public void ToBinary(in Stream stream, TextEncoding encoding = TextEncoding.Unicode, Endian endianness = Endian.Little) { InternalWriter writer = new(stream, endianness); ushort sectionCount = 0; diff --git a/src/MessageStudio/Formats/BinaryText/Readers/AttributeSectionReader.cs b/src/MessageStudio/Formats/BinaryText/Readers/AttributeSectionReader.cs index 917cb9b..a9e9770 100644 --- a/src/MessageStudio/Formats/BinaryText/Readers/AttributeSectionReader.cs +++ b/src/MessageStudio/Formats/BinaryText/Readers/AttributeSectionReader.cs @@ -10,7 +10,7 @@ public readonly ref struct AttributeSectionReader { private readonly Span _buffer; private readonly Span _offsets; - private readonly Encoding _encoding; + private readonly TextEncoding _encoding; private readonly int _attributeSize; private readonly int _count; @@ -31,7 +31,7 @@ public readonly AttributeMarshal this[int index] { } } - public AttributeSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, Encoding encoding) + public AttributeSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, TextEncoding encoding) { _encoding = encoding; @@ -50,7 +50,7 @@ public AttributeSectionReader(ref SpanReader reader, ref MsbtSectionHeader heade _offsets = reader.ReadSpan(_count); if (reader.IsNotSystemByteOrder()) { - if (encoding == Encoding.Unicode) { + if (encoding == TextEncoding.Unicode) { int eos = sectionOffset + header.SectionSize; while (reader.Position < eos) { reader.Reverse(); @@ -61,10 +61,10 @@ public AttributeSectionReader(ref SpanReader reader, ref MsbtSectionHeader heade _buffer = reader.Read(header.SectionSize, sectionOffset); } - public readonly ref struct AttributeMarshal(Span buffer, Encoding encoding) + public readonly ref struct AttributeMarshal(Span buffer, TextEncoding encoding) { public readonly Span Buffer = buffer; - public readonly Encoding Encoding = encoding; + public readonly TextEncoding Encoding = encoding; [MethodImpl(MethodImplOptions.AggressiveInlining)] public ReadOnlySpan GetUnicode() @@ -78,7 +78,7 @@ public ReadOnlySpan GetUnicode() return null; } - if (Encoding == Encoding.UTF8) { + if (Encoding == TextEncoding.UTF8) { fixed (byte* ptr = Buffer) { return Utf8StringMarshaller.ConvertToManaged(ptr); }; diff --git a/src/MessageStudio/Formats/BinaryText/Readers/TextSectionReader.cs b/src/MessageStudio/Formats/BinaryText/Readers/TextSectionReader.cs index 8c0eef2..f69953a 100644 --- a/src/MessageStudio/Formats/BinaryText/Readers/TextSectionReader.cs +++ b/src/MessageStudio/Formats/BinaryText/Readers/TextSectionReader.cs @@ -11,7 +11,7 @@ public readonly ref struct TextSectionReader { private readonly Span _buffer; private readonly Span _offsets; - private readonly Encoding _encoding; + private readonly TextEncoding _encoding; private readonly int _count; public readonly TextMarshal this[int index] { @@ -27,7 +27,7 @@ public readonly TextMarshal this[int index] { } } - public TextSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, Encoding encoding) + public TextSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, TextEncoding encoding) { _encoding = encoding; @@ -36,7 +36,7 @@ public TextSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, En _offsets = reader.ReadSpan(_count); if (reader.IsNotSystemByteOrder()) { - if (encoding == Encoding.Unicode) { + if (encoding == TextEncoding.Unicode) { int eos = sectionOffset + header.SectionSize; while (reader.Position < eos) { reader.Reverse(); @@ -47,10 +47,10 @@ public TextSectionReader(ref SpanReader reader, ref MsbtSectionHeader header, En _buffer = reader.Read(header.SectionSize, sectionOffset); } - public readonly ref struct TextMarshal(Span buffer, Encoding encoding) + public readonly ref struct TextMarshal(Span buffer, TextEncoding encoding) { public readonly Span Buffer = buffer; - public readonly Encoding Encoding = encoding; + public readonly TextEncoding Encoding = encoding; [MethodImpl(MethodImplOptions.AggressiveInlining)] public ReadOnlySpan GetUnicode() @@ -61,7 +61,7 @@ public ReadOnlySpan GetUnicode() public readonly string? GetManaged() { StringBuilder sb = new(); - if (Encoding == Encoding.UTF8) { + if (Encoding == TextEncoding.UTF8) { WriteUtf8(sb); } else { diff --git a/src/MessageStudio/Formats/BinaryText/Structures/MsbtHeader.cs b/src/MessageStudio/Formats/BinaryText/Structures/MsbtHeader.cs index 49d72b9..433f47c 100644 --- a/src/MessageStudio/Formats/BinaryText/Structures/MsbtHeader.cs +++ b/src/MessageStudio/Formats/BinaryText/Structures/MsbtHeader.cs @@ -14,7 +14,7 @@ public readonly struct MsbtHeader public readonly Endian ByteOrderMark; [FieldOffset(0x0C)] - public readonly Encoding Encoding; + public readonly TextEncoding Encoding; [FieldOffset(0x0D)] public readonly byte Version; @@ -26,7 +26,7 @@ public readonly struct MsbtHeader public readonly uint FileSize; public MsbtHeader() { } - public MsbtHeader(ulong magic, Endian byteOrderMark, Encoding encoding, byte version, ushort sectionCount, uint fileSize) + public MsbtHeader(ulong magic, Endian byteOrderMark, TextEncoding encoding, byte version, ushort sectionCount, uint fileSize) { Magic = magic; ByteOrderMark = byteOrderMark; diff --git a/src/MessageStudio/Formats/BinaryText/Writers/AttributeSectionWriter.cs b/src/MessageStudio/Formats/BinaryText/Writers/AttributeSectionWriter.cs index ef6ed1e..5a757c6 100644 --- a/src/MessageStudio/Formats/BinaryText/Writers/AttributeSectionWriter.cs +++ b/src/MessageStudio/Formats/BinaryText/Writers/AttributeSectionWriter.cs @@ -4,14 +4,14 @@ namespace MessageStudio.Formats.BinaryText.Writers; internal static class AttributeSectionWriter { - public static void Write(in InternalWriter writer, Encoding encoding, string?[] attributes) + public static void Write(in InternalWriter writer, TextEncoding encoding, string?[] attributes) { writer.Write(attributes.Length); writer.Write(sizeof(uint)); int firstOffset = attributes.Length * sizeof(uint) + sizeof(uint) + sizeof(uint); - if (encoding is Encoding.UTF8) { + if (encoding is TextEncoding.UTF8) { WriteUtf8(writer, attributes, firstOffset); } else { diff --git a/src/MessageStudio/Formats/BinaryText/Writers/TextSectionWriter.cs b/src/MessageStudio/Formats/BinaryText/Writers/TextSectionWriter.cs index 750721c..f22a8e1 100644 --- a/src/MessageStudio/Formats/BinaryText/Writers/TextSectionWriter.cs +++ b/src/MessageStudio/Formats/BinaryText/Writers/TextSectionWriter.cs @@ -6,7 +6,7 @@ namespace MessageStudio.Formats.BinaryText.Writers; internal static class TextSectionWriter { - public static void Write(in InternalWriter writer, Encoding encoding, string?[] entries) + public static void Write(in InternalWriter writer, TextEncoding encoding, string?[] entries) { long sectionOffset = writer.Position; @@ -15,7 +15,7 @@ public static void Write(in InternalWriter writer, Encoding encoding, string?[] int firstOffset = entries.Length * sizeof(uint) + sizeof(uint); long sectionEndPosition; - if (encoding == Encoding.UTF8) { + if (encoding == TextEncoding.UTF8) { sectionEndPosition = WriteUtf8(writer, entries, firstOffset, sectionOffset); } else { @@ -66,10 +66,10 @@ private static void WriteUtf16Entry(InternalWriter writer, ReadOnlySpan te if (value == '<' && (endTagIndex = text[i..].IndexOf('>')) > -1) { ReadOnlySpan tagStr = text[i..((i += endTagIndex) + 1)]; if (tagStr.Length > 1 && tagStr[1] == '[') { - writer.WriteEndTag(tagStr, Encoding.Unicode); + writer.WriteEndTag(tagStr, TextEncoding.Unicode); } else { - writer.WriteTag(tagStr, Encoding.Unicode); + writer.WriteTag(tagStr, TextEncoding.Unicode); } } else { diff --git a/src/MessageStudio/IO/Primitives.cs b/src/MessageStudio/IO/Primitives.cs new file mode 100644 index 0000000..36ac7d5 --- /dev/null +++ b/src/MessageStudio/IO/Primitives.cs @@ -0,0 +1,13 @@ +namespace MessageStudio.IO; + +public enum TextEncoding : byte +{ + UTF8 = 0, + Unicode = 1, +} + +public enum Endian : ushort +{ + Big = 0xFEFF, + Little = 0xFFFE, +} \ No newline at end of file diff --git a/src/MessageStudio/IO/SpanReader.cs b/src/MessageStudio/IO/SpanReader.cs index eef74c7..2a75dd2 100644 --- a/src/MessageStudio/IO/SpanReader.cs +++ b/src/MessageStudio/IO/SpanReader.cs @@ -4,12 +4,6 @@ namespace MessageStudio.IO; -public enum Endian : ushort -{ - Big = 0xFEFF, - Little = 0xFFFE, -} - public ref struct SpanReader(Span buffer, Endian endianness = Endian.Big) { private readonly Span _buffer = buffer;