mirror of
https://github.com/SabreTools/SabreTools.IO.git
synced 2026-07-08 17:57:02 +00:00
CMP and SV to distinct namespaces
This commit is contained in:
18
README.MD
18
README.MD
@@ -63,16 +63,6 @@ Extensions for `BinaryReader`, `byte[]`, and `Stream` to help with reading and w
|
||||
|
||||
This namespace also contains other various extensions that help with common functionality and safe access.
|
||||
|
||||
### `SabreTools.IO.Readers` and `SabreTools.IO.Writers`
|
||||
|
||||
Reading and writing support for the following file types:
|
||||
|
||||
- ClrMamePro-derived Metadata files
|
||||
- Standard and non-standard INI files
|
||||
- Separated-Value files (e.g. CSV, SSV, TSV)
|
||||
|
||||
For a generic INI implementation, see `SabreTools.IO.IniFile`.
|
||||
|
||||
### `SabreTools.Logging`
|
||||
|
||||
Logic for a logging system, including writing to console and textfile outputs. There are 4 possible log levels for logging statements to be invoked with. There is also a stopwatch implementation included for logging statements with automatic timespan tracking.
|
||||
@@ -133,6 +123,10 @@ Various encryption implementations that are used across multiple projects. Most
|
||||
| AES/CTR | Yes | Yes | Subset of functionality exposed from [The Bouncy Castle Cryptography Library For .NET](https://github.com/bcgit/bc-csharp) |
|
||||
| MoPaQ | No | Yes | Used to encrypt and decrypt MoPaQ tables for processing |
|
||||
|
||||
### `SabreTools.Text.ClrMamePro`
|
||||
|
||||
Reader and writer classes for ClrMamePro-derived Metadata files.
|
||||
|
||||
### `SabreTools.Text.Compare`
|
||||
|
||||
Classes focused on string comparison by natural sorting. For example, "5" would be sorted before "100".
|
||||
@@ -141,6 +135,10 @@ Classes focused on string comparison by natural sorting. For example, "5" would
|
||||
|
||||
Key-value pair INI file, implementing `Dictionary<string, string?>`. Includes reader and writer classes for easier access.
|
||||
|
||||
### `SabreTools.Text.SeparatedValue`
|
||||
|
||||
Reader and writer classes for separated-Value files (e.g. CSV, SSV, TSV).
|
||||
|
||||
## Releases
|
||||
|
||||
For the most recent stable build, download the latest release here: [Releases Page](https://github.com/SabreTools/SabreTools.IO/releases)
|
||||
|
||||
@@ -17,6 +17,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Text.Compare.Tes
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Text.INI.Test", "SabreTools.Text.INI.Test\SabreTools.Text.INI.Test.csproj", "{4054E2C0-AC30-44EA-916E-73DD9FB3F2D0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Text.ClrMamePro.Test", "SabreTools.Text.ClrMamePro.Test\SabreTools.Text.ClrMamePro.Test.csproj", "{5AC10438-6EFC-408F-86F9-8B969C91DF9D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Text.SeparatedValue.Test", "SabreTools.Text.SeparatedValue.Test\SabreTools.Text.SeparatedValue.Test.csproj", "{F6366D73-08CF-4169-A05D-DC69047703E0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -111,6 +115,30 @@ Global
|
||||
{4054E2C0-AC30-44EA-916E-73DD9FB3F2D0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4054E2C0-AC30-44EA-916E-73DD9FB3F2D0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4054E2C0-AC30-44EA-916E-73DD9FB3F2D0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5AC10438-6EFC-408F-86F9-8B969C91DF9D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F6366D73-08CF-4169-A05D-DC69047703E0}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace SabreTools.IO.Readers
|
||||
namespace SabreTools.Text.ClrMamePro
|
||||
{
|
||||
/// <summary>
|
||||
/// Different types of CMP rows being parsed
|
||||
@@ -4,9 +4,9 @@ using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SabreTools.IO.Readers
|
||||
namespace SabreTools.Text.ClrMamePro
|
||||
{
|
||||
public class ClrMameProReader : IDisposable
|
||||
public class Reader : IDisposable
|
||||
{
|
||||
#region Constants
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a file
|
||||
/// </summary>
|
||||
public ClrMameProReader(string filename)
|
||||
public Reader(string filename)
|
||||
{
|
||||
_reader = new StreamReader(filename);
|
||||
}
|
||||
@@ -101,7 +101,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a stream and encoding
|
||||
/// </summary>
|
||||
public ClrMameProReader(Stream stream, Encoding encoding)
|
||||
public Reader(Stream stream, Encoding encoding)
|
||||
{
|
||||
_reader = new StreamReader(stream, encoding);
|
||||
}
|
||||
@@ -109,7 +109,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a stream reader
|
||||
/// </summary>
|
||||
public ClrMameProReader(StreamReader streamReader)
|
||||
public Reader(StreamReader streamReader)
|
||||
{
|
||||
_reader = streamReader;
|
||||
}
|
||||
@@ -2,13 +2,13 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace SabreTools.IO.Writers
|
||||
namespace SabreTools.Text.ClrMamePro
|
||||
{
|
||||
/// <summary>
|
||||
/// ClrMamePro writer patterned heavily off of XmlTextWriter
|
||||
/// </summary>
|
||||
/// <see cref="https://referencesource.microsoft.com/#System.Xml/System/Xml/Core/XmlTextWriter.cs"/>
|
||||
public class ClrMameProWriter : IDisposable
|
||||
public class Writer : IDisposable
|
||||
{
|
||||
#region Private Enums and Structs
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Constructor for writing to a file
|
||||
/// </summary>
|
||||
public ClrMameProWriter(string filename)
|
||||
public Writer(string filename)
|
||||
{
|
||||
_writer = new StreamWriter(filename);
|
||||
Quotes = true;
|
||||
@@ -134,7 +134,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Constructor for writing to a stream
|
||||
/// </summary>
|
||||
public ClrMameProWriter(Stream stream, Encoding encoding)
|
||||
public Writer(Stream stream, Encoding encoding)
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
_writer = new StreamWriter(stream, encoding);
|
||||
@@ -152,7 +152,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Constructor for writing to a stream writer
|
||||
/// </summary>
|
||||
public ClrMameProWriter(StreamWriter streamWriter)
|
||||
public Writer(StreamWriter streamWriter)
|
||||
{
|
||||
_writer = streamWriter;
|
||||
Quotes = true;
|
||||
@@ -4,9 +4,9 @@ using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SabreTools.IO.Readers
|
||||
namespace SabreTools.Text.SeparatedValue
|
||||
{
|
||||
public class SeparatedValueReader : IDisposable
|
||||
public class Reader : IDisposable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a file
|
||||
/// </summary>
|
||||
public SeparatedValueReader(string filename)
|
||||
public Reader(string filename)
|
||||
{
|
||||
_reader = new StreamReader(filename);
|
||||
}
|
||||
@@ -84,7 +84,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a stream
|
||||
/// </summary>
|
||||
public SeparatedValueReader(Stream stream, Encoding encoding)
|
||||
public Reader(Stream stream, Encoding encoding)
|
||||
{
|
||||
_reader = new StreamReader(stream, encoding);
|
||||
}
|
||||
@@ -92,7 +92,7 @@ namespace SabreTools.IO.Readers
|
||||
/// <summary>
|
||||
/// Constructor for reading from a stream reader
|
||||
/// </summary>
|
||||
public SeparatedValueReader(StreamReader streamReader)
|
||||
public Reader(StreamReader streamReader)
|
||||
{
|
||||
_reader = streamReader;
|
||||
}
|
||||
@@ -3,9 +3,9 @@ using System.Data;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace SabreTools.IO.Writers
|
||||
namespace SabreTools.Text.SeparatedValue
|
||||
{
|
||||
public class SeparatedValueWriter : IDisposable
|
||||
public class Writer : IDisposable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Constructor for writing to a file
|
||||
/// </summary>
|
||||
public SeparatedValueWriter(string filename)
|
||||
public Writer(string filename)
|
||||
{
|
||||
_writer = new StreamWriter(filename);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Consturctor for writing to a stream
|
||||
/// </summary>
|
||||
public SeparatedValueWriter(Stream stream, Encoding encoding)
|
||||
public Writer(Stream stream, Encoding encoding)
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
_writer = new StreamWriter(stream, encoding);
|
||||
@@ -75,7 +75,7 @@ namespace SabreTools.IO.Writers
|
||||
/// <summary>
|
||||
/// Consturctor for writing to a stream writer
|
||||
/// </summary>
|
||||
public SeparatedValueWriter(StreamWriter streamWriter)
|
||||
public Writer(StreamWriter streamWriter)
|
||||
{
|
||||
_writer = streamWriter;
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.IO.Writers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.IO.Test.ReadersWriters
|
||||
namespace SabreTools.Text.ClrMamePro.Test
|
||||
{
|
||||
public class ClrMameProTests
|
||||
public class ReaderWriterTests
|
||||
{
|
||||
[Fact]
|
||||
public void EndToEndTest()
|
||||
@@ -15,7 +13,7 @@ namespace SabreTools.IO.Test.ReadersWriters
|
||||
|
||||
// Build and write the CMP file
|
||||
var stream = new MemoryStream();
|
||||
var writer = new ClrMameProWriter(stream, Encoding.UTF8);
|
||||
var writer = new Writer(stream, Encoding.UTF8);
|
||||
Assert.True(writer.Quotes);
|
||||
|
||||
writer.WriteStartElement("header");
|
||||
@@ -42,7 +40,7 @@ namespace SabreTools.IO.Test.ReadersWriters
|
||||
|
||||
// Parse the CMP file
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
var reader = new ClrMameProReader(stream, Encoding.UTF8);
|
||||
var reader = new Reader(stream, Encoding.UTF8);
|
||||
Assert.False(reader.DosCenter);
|
||||
Assert.True(reader.Quotes);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
|
||||
<IsPackable>false</IsPackable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarningsNotAsErrors>CS0618</WarningsNotAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" Version="8.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreTools.IO\SabreTools.IO.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,12 +1,10 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Readers;
|
||||
using SabreTools.IO.Writers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.IO.Test.ReadersWriters
|
||||
namespace SabreTools.Text.SeparatedValue.Test
|
||||
{
|
||||
public class SeparatedValueTests
|
||||
public class ReaderWriterTests
|
||||
{
|
||||
[Fact]
|
||||
public void EndToEndTest()
|
||||
@@ -15,7 +13,7 @@ namespace SabreTools.IO.Test.ReadersWriters
|
||||
|
||||
// Build and write the CSV
|
||||
var stream = new MemoryStream();
|
||||
var writer = new SeparatedValueWriter(stream, Encoding.UTF8);
|
||||
var writer = new Writer(stream, Encoding.UTF8);
|
||||
Assert.True(writer.Quotes);
|
||||
Assert.Equal(',', writer.Separator);
|
||||
Assert.True(writer.VerifyFieldCount);
|
||||
@@ -34,7 +32,7 @@ namespace SabreTools.IO.Test.ReadersWriters
|
||||
|
||||
// Parse the CSV
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
var reader = new SeparatedValueReader(stream, Encoding.UTF8);
|
||||
var reader = new Reader(stream, Encoding.UTF8);
|
||||
Assert.True(reader.Header);
|
||||
Assert.True(reader.Quotes);
|
||||
Assert.Equal(',', reader.Separator);
|
||||
@@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
|
||||
<IsPackable>false</IsPackable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarningsNotAsErrors>CS0618</WarningsNotAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" Version="8.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreTools.IO\SabreTools.IO.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user