From f1b9ae2dd21afe7e8d65e679b769af646e602720 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 27 Jul 2021 12:00:21 -0700 Subject: [PATCH] Force no quotes on size and hashes for CMP (fixes #39) --- SabreTools.DatFiles/Formats/ClrMamePro.cs | 26 ++++++++-------- SabreTools.IO/Writers/ClrMameProWriter.cs | 38 +++++++++++------------ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.cs b/SabreTools.DatFiles/Formats/ClrMamePro.cs index 1c66153e..9db7a19b 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.cs @@ -612,8 +612,8 @@ namespace SabreTools.DatFiles.Formats var disk = datItem as Disk; cmpw.WriteStartElement("disk"); cmpw.WriteRequiredAttributeString("name", disk.Name); - cmpw.WriteOptionalAttributeString("md5", disk.MD5?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha1", disk.SHA1?.ToLowerInvariant()); + cmpw.WriteOptionalAttributeString("md5", disk.MD5?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha1", disk.SHA1?.ToLowerInvariant(), quoteOverride: false); cmpw.WriteOptionalAttributeString("flags", disk.ItemStatus.FromItemStatus(false)); cmpw.WriteEndElement(); break; @@ -622,9 +622,9 @@ namespace SabreTools.DatFiles.Formats var media = datItem as Media; cmpw.WriteStartElement("media"); cmpw.WriteRequiredAttributeString("name", media.Name); - cmpw.WriteOptionalAttributeString("md5", media.MD5?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha1", media.SHA1?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha256", media.SHA256?.ToLowerInvariant()); + cmpw.WriteOptionalAttributeString("md5", media.MD5?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha1", media.SHA1?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha256", media.SHA256?.ToLowerInvariant(), quoteOverride: false); cmpw.WriteOptionalAttributeString("spamsum", media.SpamSum?.ToLowerInvariant()); cmpw.WriteEndElement(); break; @@ -644,14 +644,14 @@ namespace SabreTools.DatFiles.Formats var rom = datItem as Rom; cmpw.WriteStartElement("rom"); cmpw.WriteRequiredAttributeString("name", rom.Name); - cmpw.WriteOptionalAttributeString("size", rom.Size?.ToString()); - cmpw.WriteOptionalAttributeString("crc", rom.CRC?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("md5", rom.MD5?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha1", rom.SHA1?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha256", rom.SHA256?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant()); - cmpw.WriteOptionalAttributeString("spamsum", rom.SpamSum?.ToLowerInvariant()); + cmpw.WriteOptionalAttributeString("size", rom.Size?.ToString(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("crc", rom.CRC?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("md5", rom.MD5?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha1", rom.SHA1?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha256", rom.SHA256?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant(), quoteOverride: false); + cmpw.WriteOptionalAttributeString("spamsum", rom.SpamSum?.ToLowerInvariant(), quoteOverride: false); cmpw.WriteOptionalAttributeString("date", rom.Date); cmpw.WriteOptionalAttributeString("flags", rom.ItemStatus.FromItemStatus(false)); cmpw.WriteEndElement(); diff --git a/SabreTools.IO/Writers/ClrMameProWriter.cs b/SabreTools.IO/Writers/ClrMameProWriter.cs index f3522f0e..14f0f909 100644 --- a/SabreTools.IO/Writers/ClrMameProWriter.cs +++ b/SabreTools.IO/Writers/ClrMameProWriter.cs @@ -200,18 +200,18 @@ namespace SabreTools.IO.Writers /// /// Write the start of an attribute node /// - public void WriteStartAttribute(string name) + public void WriteStartAttribute(string name, bool? quoteOverride = null) { try { // If we're writing quotes, don't write out quote characters internally - if (Quotes) + if ((quoteOverride == null && Quotes) || (quoteOverride == true)) name = name.Replace("\"", "''"); AutoComplete(Token.StartAttribute); sw.Write(name); sw.Write(" "); - if (Quotes) + if ((quoteOverride == null && Quotes) || (quoteOverride == true)) sw.Write("\""); } catch @@ -224,11 +224,11 @@ namespace SabreTools.IO.Writers /// /// Write the end of an attribute node /// - public void WriteEndAttribute() + public void WriteEndAttribute(bool? quoteOverride = null) { try { - AutoComplete(Token.EndAttribute); + AutoComplete(Token.EndAttribute, quoteOverride); } catch { @@ -240,28 +240,28 @@ namespace SabreTools.IO.Writers /// /// Write a complete attribute with content /// - public void WriteAttributeString(string name, string value) + public void WriteAttributeString(string name, string value, bool? quoteOverride = null) { - WriteStartAttribute(name); + WriteStartAttribute(name, quoteOverride); WriteString(value); - WriteEndAttribute(); + WriteEndAttribute(quoteOverride); } /// /// Ensure writing writing null values as empty strings /// - public void WriteRequiredAttributeString(string name, string value) + public void WriteRequiredAttributeString(string name, string value, bool? quoteOverride = null) { - WriteAttributeString(name, value ?? string.Empty); + WriteAttributeString(name, value ?? string.Empty, quoteOverride); } /// /// Write an attribute, if the value is not null or empty /// - public void WriteOptionalAttributeString(string name, string value) + public void WriteOptionalAttributeString(string name, string value, bool? quoteOverride = null) { if (!string.IsNullOrEmpty(value)) - WriteAttributeString(name, value); + WriteAttributeString(name, value, quoteOverride); } /// @@ -386,7 +386,7 @@ namespace SabreTools.IO.Writers /// /// Prepare for the next token to be written /// - private void AutoComplete(Token token) + private void AutoComplete(Token token, bool? quoteOverride = null) { // Handle the error cases if (currentState == State.Closed) @@ -405,7 +405,7 @@ namespace SabreTools.IO.Writers case Token.Standalone: if (currentState == State.Attribute) { - WriteEndAttributeQuote(); + WriteEndAttributeQuote(quoteOverride); WriteEndStartTag(false); } else if (currentState == State.Element) @@ -421,7 +421,7 @@ namespace SabreTools.IO.Writers case Token.EndElement: case Token.LongEndElement: if (currentState == State.Attribute) - WriteEndAttributeQuote(); + WriteEndAttributeQuote(quoteOverride); if (currentState == State.Content) token = Token.LongEndElement; @@ -433,7 +433,7 @@ namespace SabreTools.IO.Writers case Token.StartAttribute: if (currentState == State.Attribute) { - WriteEndAttributeQuote(); + WriteEndAttributeQuote(quoteOverride); sw.Write(' '); } else if (currentState == State.Element) @@ -444,7 +444,7 @@ namespace SabreTools.IO.Writers break; case Token.EndAttribute: - WriteEndAttributeQuote(); + WriteEndAttributeQuote(quoteOverride); break; case Token.Content: @@ -513,9 +513,9 @@ namespace SabreTools.IO.Writers /// /// Internal helper to write the end of an attribute /// - private void WriteEndAttributeQuote() + private void WriteEndAttributeQuote(bool? quoteOverride = null) { - if (Quotes) + if ((quoteOverride == null && Quotes) || (quoteOverride == true)) sw.Write("\""); }