XML-like optional/required for CMP writer

This commit is contained in:
Matt Nadareski
2020-08-24 13:29:27 -07:00
parent df9d908d04
commit 769bc077e7
3 changed files with 67 additions and 59 deletions

View File

@@ -681,91 +681,68 @@ namespace SabreTools.Library.DatFiles
{ {
case ItemType.Archive: case ItemType.Archive:
cmpw.WriteStartElement("archive"); cmpw.WriteStartElement("archive");
cmpw.WriteAttributeString("name", datItem.Name); cmpw.WriteRequiredAttributeString("name", datItem.Name);
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
case ItemType.BiosSet: case ItemType.BiosSet:
var biosSet = datItem as BiosSet; var biosSet = datItem as BiosSet;
cmpw.WriteStartElement("biosset"); cmpw.WriteStartElement("biosset");
cmpw.WriteAttributeString("name", biosSet.Name); cmpw.WriteRequiredAttributeString("name", biosSet.Name);
if (!string.IsNullOrWhiteSpace(biosSet.Description)) cmpw.WriteOptionalAttributeString("description", biosSet.Description);
cmpw.WriteAttributeString("description", biosSet.Description); cmpw.WriteOptionalAttributeString("default", biosSet.Default?.ToString().ToLowerInvariant());
if (biosSet.Default != null)
cmpw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
case ItemType.Disk: case ItemType.Disk:
var disk = datItem as Disk; var disk = datItem as Disk;
cmpw.WriteStartElement("disk"); cmpw.WriteStartElement("disk");
cmpw.WriteAttributeString("name", disk.Name); cmpw.WriteRequiredAttributeString("name", disk.Name);
if (!string.IsNullOrWhiteSpace(disk.MD5)) cmpw.WriteOptionalAttributeString("md5", disk.MD5?.ToLowerInvariant());
cmpw.WriteAttributeString("md5", disk.MD5?.ToLowerInvariant());
#if NET_FRAMEWORK #if NET_FRAMEWORK
if (!string.IsNullOrWhiteSpace(disk.RIPEMD160)) cmpw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160?.ToLowerInvariant());
cmpw.WriteAttributeString("ripemd160", disk.RIPEMD160?.ToLowerInvariant());
#endif #endif
if (!string.IsNullOrWhiteSpace(disk.SHA1)) cmpw.WriteOptionalAttributeString("sha1", disk.SHA1?.ToLowerInvariant());
cmpw.WriteAttributeString("sha1", disk.SHA1?.ToLowerInvariant()); cmpw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(disk.SHA256)) cmpw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant());
cmpw.WriteAttributeString("sha256", disk.SHA256?.ToLowerInvariant()); cmpw.WriteOptionalAttributeString("sha512", disk.SHA512?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(disk.SHA384)) cmpw.WriteOptionalAttributeString("flags", disk.ItemStatus.FromItemStatus(false));
cmpw.WriteAttributeString("sha384", disk.SHA384?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(disk.SHA512))
cmpw.WriteAttributeString("sha512", disk.SHA512?.ToLowerInvariant());
if (disk.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", disk.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
case ItemType.Release: case ItemType.Release:
var release = datItem as Release; var release = datItem as Release;
cmpw.WriteStartElement("release"); cmpw.WriteStartElement("release");
cmpw.WriteAttributeString("name", release.Name); cmpw.WriteRequiredAttributeString("name", release.Name);
if (!string.IsNullOrWhiteSpace(release.Region)) cmpw.WriteOptionalAttributeString("region", release.Region);
cmpw.WriteAttributeString("region", release.Region); cmpw.WriteOptionalAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(release.Language)) cmpw.WriteOptionalAttributeString("date", release.Date);
cmpw.WriteAttributeString("language", release.Language); cmpw.WriteOptionalAttributeString("default", release.Default?.ToString().ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(release.Date))
cmpw.WriteAttributeString("date", release.Date);
if (release.Default != null)
cmpw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
case ItemType.Rom: case ItemType.Rom:
var rom = datItem as Rom; var rom = datItem as Rom;
cmpw.WriteStartElement("rom"); cmpw.WriteStartElement("rom");
cmpw.WriteAttributeString("name", rom.Name); cmpw.WriteRequiredAttributeString("name", rom.Name);
if (rom.Size != -1) if (rom.Size != -1) cmpw.WriteAttributeString("size", rom.Size.ToString());
cmpw.WriteAttributeString("size", rom.Size.ToString()); cmpw.WriteOptionalAttributeString("crc", rom.CRC?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(rom.CRC)) cmpw.WriteOptionalAttributeString("md5", rom.MD5?.ToLowerInvariant());
cmpw.WriteAttributeString("crc", rom.CRC?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(rom.MD5))
cmpw.WriteAttributeString("md5", rom.MD5?.ToLowerInvariant());
#if NET_FRAMEWORK #if NET_FRAMEWORK
if (!string.IsNullOrWhiteSpace(rom.RIPEMD160)) cmpw.WriteOptionalAttributeString("ripemd160", rom.RIPEMD160?.ToLowerInvariant());
cmpw.WriteAttributeString("ripemd160", rom.RIPEMD160?.ToLowerInvariant());
#endif #endif
if (!string.IsNullOrWhiteSpace(rom.SHA1)) cmpw.WriteOptionalAttributeString("sha1", rom.SHA1?.ToLowerInvariant());
cmpw.WriteAttributeString("sha1", rom.SHA1?.ToLowerInvariant()); cmpw.WriteOptionalAttributeString("sha256", rom.SHA256?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(rom.SHA256)) cmpw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant());
cmpw.WriteAttributeString("sha256", rom.SHA256?.ToLowerInvariant()); cmpw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(rom.SHA384)) cmpw.WriteOptionalAttributeString("date", rom.Date);
cmpw.WriteAttributeString("sha384", rom.SHA384?.ToLowerInvariant()); cmpw.WriteOptionalAttributeString("flags", rom.ItemStatus.FromItemStatus(false));
if (!string.IsNullOrWhiteSpace(rom.SHA512))
cmpw.WriteAttributeString("sha512", rom.SHA512?.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(rom.Date))
cmpw.WriteAttributeString("date", rom.Date);
if (rom.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", rom.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
case ItemType.Sample: case ItemType.Sample:
cmpw.WriteStartElement("sample"); cmpw.WriteStartElement("sample");
cmpw.WriteAttributeString("name", datItem.Name); cmpw.WriteRequiredAttributeString("name", datItem.Name);
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
} }

View File

@@ -471,13 +471,10 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom: case ItemType.Rom:
var rom = datItem as Rom; var rom = datItem as Rom;
cmpw.WriteStartElement("file"); cmpw.WriteStartElement("file");
cmpw.WriteAttributeString("name", datItem.Name); cmpw.WriteRequiredAttributeString("name", datItem.Name);
if (rom.Size != -1) if (rom.Size != -1) cmpw.WriteAttributeString("size", rom.Size.ToString());
cmpw.WriteAttributeString("size", rom.Size.ToString()); cmpw.WriteOptionalAttributeString("date", rom.Date);
if (!string.IsNullOrWhiteSpace(rom.Date)) cmpw.WriteOptionalAttributeString("crc", rom.CRC?.ToLowerInvariant());
cmpw.WriteAttributeString("date", rom.Date);
if (!string.IsNullOrWhiteSpace(rom.CRC))
cmpw.WriteAttributeString("crc", rom.CRC?.ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
} }

View File

@@ -176,6 +176,23 @@ namespace SabreTools.Library.IO
WriteEndElement(); WriteEndElement();
} }
/// <summary>
/// Ensure writing writing null values as empty strings
/// </summary>
public void WriteRequiredElementString(string name, string value)
{
WriteElementString(name, value ?? string.Empty);
}
/// <summary>
/// Write an element, if the value is not null or empty
/// </summary>
public void WriteOptionalElementString(string name, string value)
{
if (!string.IsNullOrEmpty(value))
WriteElementString(name, value);
}
/// <summary> /// <summary>
/// Write the start of an attribute node /// Write the start of an attribute node
/// </summary> /// </summary>
@@ -222,6 +239,23 @@ namespace SabreTools.Library.IO
WriteEndAttribute(); WriteEndAttribute();
} }
/// <summary>
/// Ensure writing writing null values as empty strings
/// </summary>
public void WriteRequiredAttributeString(string name, string value)
{
WriteAttributeString(name, value ?? string.Empty);
}
/// <summary>
/// Write an attribute, if the value is not null or empty
/// </summary>
public void WriteOptionalAttributeString(string name, string value)
{
if (!string.IsNullOrEmpty(value))
WriteAttributeString(name, value);
}
/// <summary> /// <summary>
/// Write a standalone attribute /// Write a standalone attribute
/// </summary> /// </summary>