Add required variants for XML

This commit is contained in:
Matt Nadareski
2020-08-24 00:48:27 -07:00
parent 06829d3d5f
commit ece8e0cae7
7 changed files with 90 additions and 81 deletions

View File

@@ -994,7 +994,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartDocument();
xtw.WriteStartElement("mame");
xtw.WriteAttributeString("build", Header.Name);
xtw.WriteRequiredAttributeString("build", Header.Name);
xtw.WriteOptionalAttributeString("debug", Header.Debug.FromYesNo());
xtw.WriteOptionalAttributeString("mameconfig", Header.MameConfig);
@@ -1024,7 +1024,7 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement("machine");
xtw.WriteAttributeString("name", datItem.Machine.Name);
xtw.WriteRequiredAttributeString("name", datItem.Machine.Name);
xtw.WriteOptionalAttributeString("sourcefile", datItem.Machine.SourceFile);
if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
@@ -1064,8 +1064,8 @@ namespace SabreTools.Library.DatFiles
foreach (ListXmlInfo kvp in datItem.Machine.Infos)
{
xtw.WriteStartElement("info");
xtw.WriteAttributeString("name", kvp.Name);
xtw.WriteAttributeString("value", kvp.Value);
xtw.WriteRequiredAttributeString("name", kvp.Name);
xtw.WriteRequiredAttributeString("value", kvp.Value);
xtw.WriteEndElement();
}
}
@@ -1128,7 +1128,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
xtw.WriteAttributeString("name", biosSet.Name);
xtw.WriteRequiredAttributeString("name", biosSet.Name);
xtw.WriteOptionalAttributeString("description", biosSet.Description);
xtw.WriteOptionalAttributeString("default", biosSet.Default?.ToString().ToLowerInvariant());
xtw.WriteEndElement();
@@ -1137,7 +1137,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Disk:
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
xtw.WriteRequiredAttributeString("name", disk.Name);
xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
@@ -1158,7 +1158,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.Name);
xtw.WriteRequiredAttributeString("name", rom.Name);
if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
@@ -1180,7 +1180,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Sample:
xtw.WriteStartElement("sample");
xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteRequiredAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}

View File

@@ -766,13 +766,13 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("header");
xtw.WriteFullElementString("name", Header.Name);
xtw.WriteFullElementString("description", Header.Description);
xtw.WriteRequiredElementString("name", Header.Name);
xtw.WriteRequiredElementString("description", Header.Description);
xtw.WriteOptionalElementString("rootdir", Header.RootDir);
xtw.WriteOptionalElementString("category", Header.Category);
xtw.WriteFullElementString("version", Header.Version);
xtw.WriteRequiredElementString("version", Header.Version);
xtw.WriteOptionalElementString("date", Header.Date);
xtw.WriteFullElementString("author", Header.Author);
xtw.WriteRequiredElementString("author", Header.Author);
xtw.WriteOptionalElementString("email", Header.Email);
xtw.WriteOptionalElementString("homepage", Header.Homepage);
xtw.WriteOptionalElementString("url", Header.Url);
@@ -912,7 +912,7 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement(_deprecated ? "game" : "machine");
xtw.WriteAttributeString("name", datItem.Machine.Name);
xtw.WriteRequiredAttributeString("name", datItem.Machine.Name);
if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes");
@@ -1040,14 +1040,14 @@ namespace SabreTools.Library.DatFiles
{
case ItemType.Archive:
xtw.WriteStartElement("archive");
xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteRequiredAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
xtw.WriteAttributeString("name", biosSet.Name);
xtw.WriteRequiredAttributeString("name", biosSet.Name);
xtw.WriteOptionalAttributeString("description", biosSet.Description);
xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo());
xtw.WriteEndElement();
@@ -1056,7 +1056,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Disk:
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
xtw.WriteRequiredAttributeString("name", disk.Name);
xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
@@ -1072,7 +1072,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Release:
var release = datItem as Release;
xtw.WriteStartElement("release");
xtw.WriteAttributeString("name", release.Name);
xtw.WriteRequiredAttributeString("name", release.Name);
xtw.WriteOptionalAttributeString("region", release.Region);
xtw.WriteOptionalAttributeString("language", release.Language);
xtw.WriteOptionalAttributeString("date", release.Date);
@@ -1083,7 +1083,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.Name);
xtw.WriteRequiredAttributeString("name", rom.Name);
if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
@@ -1102,7 +1102,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Sample:
xtw.WriteStartElement("sample");
xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteRequiredAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}

View File

@@ -773,11 +773,11 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("noNamespaceSchemaLocation", "xsi", "datas.xsd");
xtw.WriteStartElement("configuration");
xtw.WriteFullElementString("datName", Header.Name);
xtw.WriteRequiredElementString("datName", Header.Name);
xtw.WriteElementString("datVersion", Items.TotalCount.ToString());
xtw.WriteFullElementString("system", Header.System);
xtw.WriteFullElementString("screenshotsWidth", Header.ScreenshotsWidth);
xtw.WriteFullElementString("screenshotsHeight", Header.ScreenshotsHeight);
xtw.WriteRequiredElementString("system", Header.System);
xtw.WriteRequiredElementString("screenshotsWidth", Header.ScreenshotsWidth);
xtw.WriteRequiredElementString("screenshotsHeight", Header.ScreenshotsHeight);
if (Header.Infos != null)
{
@@ -810,14 +810,14 @@ namespace SabreTools.Library.DatFiles
}
xtw.WriteStartElement("newDat");
xtw.WriteFullElementString("datVersionURL", Header.Url);
xtw.WriteRequiredElementString("datVersionURL", Header.Url);
xtw.WriteStartElement("datUrl");
xtw.WriteAttributeString("fileName", $"{Header.FileName}.zip");
xtw.WriteAttributeString("fileName", $"{Header.FileName ?? string.Empty}.zip");
xtw.WriteString(Header.Url);
xtw.WriteEndElement();
xtw.WriteFullElementString("imURL", Header.Url);
xtw.WriteRequiredElementString("imURL", Header.Url);
// End newDat
xtw.WriteEndElement();
@@ -863,7 +863,7 @@ namespace SabreTools.Library.DatFiles
// End search
xtw.WriteEndElement();
xtw.WriteFullElementString("romTitle", Header.RomTitle ?? "%u - %n");
xtw.WriteRequiredElementString("romTitle", Header.RomTitle ?? "%u - %n");
// End configuration
xtw.WriteEndElement();
@@ -903,16 +903,16 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("game");
xtw.WriteElementString("imageNumber", "1");
xtw.WriteElementString("releaseNumber", "1");
xtw.WriteFullElementString("title", datItem.Name);
xtw.WriteRequiredElementString("title", datItem.Name);
xtw.WriteElementString("saveType", "None");
if (datItem.ItemType == ItemType.Rom)
{
var rom = datItem as Rom;
xtw.WriteFullElementString("romSize", rom.Size.ToString());
xtw.WriteRequiredElementString("romSize", rom.Size.ToString());
}
xtw.WriteFullElementString("publisher", datItem.Machine.Publisher);
xtw.WriteRequiredElementString("publisher", datItem.Machine.Publisher);
xtw.WriteElementString("location", "0");
xtw.WriteElementString("sourceRom", "None");
xtw.WriteElementString("language", "0");
@@ -948,21 +948,21 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(rom.CRC))
{
xtw.WriteStartElement("romCRC");
xtw.WriteAttributeString("extension", tempext);
xtw.WriteRequiredAttributeString("extension", tempext);
xtw.WriteString(rom.CRC.ToUpperInvariant());
xtw.WriteEndElement();
}
else if (!string.IsNullOrWhiteSpace(rom.MD5))
{
xtw.WriteStartElement("romMD5");
xtw.WriteAttributeString("extension", tempext);
xtw.WriteRequiredAttributeString("extension", tempext);
xtw.WriteString(rom.MD5.ToUpperInvariant());
xtw.WriteEndElement();
}
else if (!string.IsNullOrWhiteSpace(rom.SHA1))
{
xtw.WriteStartElement("romSHA1");
xtw.WriteAttributeString("extension", tempext);
xtw.WriteRequiredAttributeString("extension", tempext);
xtw.WriteString(rom.SHA1.ToUpperInvariant());
xtw.WriteEndElement();
}
@@ -973,8 +973,8 @@ namespace SabreTools.Library.DatFiles
xtw.WriteElementString("im1CRC", "00000000");
xtw.WriteElementString("im2CRC", "00000000");
xtw.WriteFullElementString("comment", datItem.Machine.Comment);
xtw.WriteFullElementString("duplicateID", datItem.Machine.CloneOf);
xtw.WriteRequiredElementString("comment", datItem.Machine.Comment);
xtw.WriteRequiredElementString("duplicateID", datItem.Machine.CloneOf);
// End game
xtw.WriteEndElement();

View File

@@ -618,7 +618,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteDocType("softwaredb", null, "softwaredb1.dtd", null);
xtw.WriteStartElement("softwaredb");
xtw.WriteAttributeString("timestamp", Header.Date);
xtw.WriteRequiredAttributeString("timestamp", Header.Date);
//TODO: Figure out how to fix the issue with removed formatting after this point
// xtw.WriteComment("Credits");
@@ -660,12 +660,12 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement("software");
xtw.WriteFullElementString("title", datItem.Machine.Name);
xtw.WriteFullElementString("genmsxid", datItem.Machine.GenMSXID);
xtw.WriteFullElementString("system", datItem.Machine.System);
xtw.WriteFullElementString("company", datItem.Machine.Manufacturer);
xtw.WriteFullElementString("year", datItem.Machine.Year);
xtw.WriteFullElementString("country", datItem.Machine.Country);
xtw.WriteRequiredElementString("title", datItem.Machine.Name);
xtw.WriteRequiredElementString("genmsxid", datItem.Machine.GenMSXID);
xtw.WriteRequiredElementString("system", datItem.Machine.System);
xtw.WriteRequiredElementString("company", datItem.Machine.Manufacturer);
xtw.WriteRequiredElementString("year", datItem.Machine.Year);
xtw.WriteRequiredElementString("country", datItem.Machine.Country);
xtw.Flush();
}
@@ -740,7 +740,7 @@ namespace SabreTools.Library.DatFiles
case OpenMSXSubType.Rom:
case OpenMSXSubType.NULL:
xtw.WriteStartElement("rom");
xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteOptionalElementString("start", rom.Offset);
xtw.WriteOptionalElementString("type", rom.OpenMSXType);
xtw.WriteOptionalElementString("remark", rom.Remark);
@@ -749,7 +749,7 @@ namespace SabreTools.Library.DatFiles
case OpenMSXSubType.MegaRom:
xtw.WriteStartElement("megarom");
xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteOptionalElementString("start", rom.Offset);
xtw.WriteOptionalElementString("type", rom.OpenMSXType);
xtw.WriteOptionalElementString("remark", rom.Remark);
@@ -759,7 +759,7 @@ namespace SabreTools.Library.DatFiles
case OpenMSXSubType.SCCPlusCart:
xtw.WriteStartElement("sccpluscart");
xtw.WriteOptionalElementString("boot", rom.Boot);
xtw.WriteFullElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteRequiredElementString("hash", rom.SHA1.ToLowerInvariant());
xtw.WriteOptionalElementString("remark", rom.Remark);
xtw.WriteEndElement();
break;

View File

@@ -663,13 +663,13 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("header");
xtw.WriteFullElementString("name", Header.Name);
xtw.WriteFullElementString("description", Header.Description);
xtw.WriteRequiredElementString("name", Header.Name);
xtw.WriteRequiredElementString("description", Header.Description);
xtw.WriteOptionalElementString("rootdir", Header.RootDir);
xtw.WriteOptionalElementString("category", Header.Category);
xtw.WriteFullElementString("version", Header.Version);
xtw.WriteRequiredElementString("version", Header.Version);
xtw.WriteOptionalElementString("date", Header.Date);
xtw.WriteFullElementString("author", Header.Author);
xtw.WriteRequiredElementString("author", Header.Author);
xtw.WriteOptionalElementString("comment", Header.Comment);
if (!string.IsNullOrWhiteSpace(Header.Type)
|| Header.ForcePacking != PackingFlag.None
@@ -682,7 +682,7 @@ namespace SabreTools.Library.DatFiles
{
xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "type");
xtw.WriteAttributeString("value", Header.Type);
xtw.WriteRequiredAttributeString("value", Header.Type);
xtw.WriteEndElement();
}
@@ -792,8 +792,8 @@ namespace SabreTools.Library.DatFiles
for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++)
{
xtw.WriteStartElement("directory");
xtw.WriteAttributeString("name", newsplit[i]);
xtw.WriteAttributeString("description", newsplit[i]);
xtw.WriteRequiredAttributeString("name", newsplit[i]);
xtw.WriteRequiredAttributeString("description", newsplit[i]);
}
depth = depth - (last == -1 ? 0 : last) + newsplit.Count;
@@ -883,7 +883,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Archive:
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "archive");
xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteRequiredAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
@@ -891,7 +891,7 @@ namespace SabreTools.Library.DatFiles
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "biosset");
xtw.WriteAttributeString("name", biosSet.Name);
xtw.WriteRequiredAttributeString("name", biosSet.Name);
xtw.WriteOptionalAttributeString("description", biosSet.Description);
xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo());
xtw.WriteEndElement();
@@ -901,7 +901,7 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "disk");
xtw.WriteAttributeString("name", disk.Name);
xtw.WriteRequiredAttributeString("name", disk.Name);
xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
@@ -929,7 +929,7 @@ namespace SabreTools.Library.DatFiles
var release = datItem as Release;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "release");
xtw.WriteAttributeString("name", release.Name);
xtw.WriteRequiredAttributeString("name", release.Name);
xtw.WriteOptionalAttributeString("region", release.Region);
xtw.WriteOptionalAttributeString("language", release.Language);
xtw.WriteOptionalAttributeString("date", release.Date);
@@ -941,7 +941,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "rom");
xtw.WriteAttributeString("name", rom.Name);
xtw.WriteRequiredAttributeString("name", rom.Name);
if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
@@ -971,7 +971,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Sample:
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "sample");
xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteRequiredAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}

View File

@@ -734,8 +734,8 @@ namespace SabreTools.Library.DatFiles
xtw.WriteDocType("softwarelist", null, "softwarelist.dtd", null);
xtw.WriteStartElement("softwarelist");
xtw.WriteAttributeString("name", Header.Name);
xtw.WriteAttributeString("description", Header.Description);
xtw.WriteRequiredAttributeString("name", Header.Name);
xtw.WriteRequiredAttributeString("description", Header.Description);
switch (Header.ForcePacking)
{
@@ -802,7 +802,7 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement("software");
xtw.WriteAttributeString("name", datItem.Machine.Name);
xtw.WriteRequiredAttributeString("name", datItem.Machine.Name);
if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
@@ -830,8 +830,8 @@ namespace SabreTools.Library.DatFiles
foreach (ListXmlInfo kvp in datItem.Machine.Infos)
{
xtw.WriteStartElement("info");
xtw.WriteAttributeString("name", kvp.Name);
xtw.WriteAttributeString("value", kvp.Value);
xtw.WriteRequiredAttributeString("name", kvp.Name);
xtw.WriteRequiredAttributeString("value", kvp.Value);
xtw.WriteEndElement();
}
}
@@ -841,8 +841,8 @@ namespace SabreTools.Library.DatFiles
foreach (SoftwareListSharedFeature kvp in datItem.Machine.SharedFeatures)
{
xtw.WriteStartElement("sharedfeat");
xtw.WriteAttributeString("name", kvp.Name);
xtw.WriteAttributeString("value", kvp.Value);
xtw.WriteRequiredAttributeString("name", kvp.Name);
xtw.WriteRequiredAttributeString("value", kvp.Value);
xtw.WriteEndElement();
}
}
@@ -852,16 +852,16 @@ namespace SabreTools.Library.DatFiles
foreach (ListXmlDipSwitch dip in datItem.Machine.DipSwitches)
{
xtw.WriteStartElement("dipswitch");
xtw.WriteAttributeString("name", dip.Name);
xtw.WriteAttributeString("tag", dip.Tag);
xtw.WriteAttributeString("mask", dip.Mask);
xtw.WriteRequiredAttributeString("name", dip.Name);
xtw.WriteRequiredAttributeString("tag", dip.Tag);
xtw.WriteRequiredAttributeString("mask", dip.Mask);
foreach (ListXmlDipValue dipval in dip.Values)
{
xtw.WriteStartElement("dipvalue");
xtw.WriteAttributeString("name", dipval.Name);
xtw.WriteAttributeString("value", dipval.Value);
xtw.WriteAttributeString("default", dipval.Default == true ? "yes" : "no");
xtw.WriteRequiredAttributeString("name", dipval.Name);
xtw.WriteRequiredAttributeString("value", dipval.Value);
xtw.WriteRequiredAttributeString("default", dipval.Default == true ? "yes" : "no");
xtw.WriteEndElement();
}
@@ -924,16 +924,16 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement("part");
xtw.WriteAttributeString("name", datItem.PartName);
xtw.WriteAttributeString("interface", datItem.PartInterface);
xtw.WriteRequiredAttributeString("name", datItem.PartName);
xtw.WriteRequiredAttributeString("interface", datItem.PartInterface);
if (datItem.Features != null && datItem.Features.Count > 0)
{
foreach (SoftwareListFeature kvp in datItem.Features)
{
xtw.WriteStartElement("feature");
xtw.WriteAttributeString("name", kvp.Name);
xtw.WriteAttributeString("value", kvp.Value);
xtw.WriteRequiredAttributeString("name", kvp.Name);
xtw.WriteRequiredAttributeString("value", kvp.Value);
xtw.WriteEndElement();
}
}
@@ -947,11 +947,11 @@ namespace SabreTools.Library.DatFiles
areaName = "cdrom";
xtw.WriteStartElement("diskarea");
xtw.WriteAttributeString("name", areaName);
xtw.WriteRequiredAttributeString("name", areaName);
xtw.WriteOptionalAttributeString("size", disk.AreaSize.ToString());
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
xtw.WriteRequiredAttributeString("name", disk.Name);
xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
@@ -974,13 +974,13 @@ namespace SabreTools.Library.DatFiles
areaName = "rom";
xtw.WriteStartElement("dataarea");
xtw.WriteAttributeString("name", areaName);
xtw.WriteRequiredAttributeString("name", areaName);
xtw.WriteOptionalAttributeString("size", rom.AreaSize.ToString());
xtw.WriteOptionalAttributeString("width", rom.AreaWidth);
xtw.WriteOptionalAttributeString("endianness", rom.AreaEndianness);
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.Name);
xtw.WriteRequiredAttributeString("name", rom.Name);
if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());

View File

@@ -7,7 +7,16 @@ namespace SabreTools.Library.IO
/// </summary>
public static class XmlTextWriterExtensions
{
// TODO: Rename Full to Required, add one for attributes
/// <summary>
/// Write an attribute, forcing empty if null
/// </summary>
/// <param name="writer">XmlTextWriter to write out with</param>
/// <param name="localName">Name of the element</param>
/// <param name="value">Value to write in the element</param>
public static void WriteRequiredAttributeString(this XmlTextWriter writer, string localName, string value)
{
writer.WriteAttributeString(localName, value ?? string.Empty);
}
/// <summary>
/// Force writing separate open and start tags, even for empty elements
@@ -15,7 +24,7 @@ namespace SabreTools.Library.IO
/// <param name="writer">XmlTextWriter to write out with</param>
/// <param name="localName">Name of the element</param>
/// <param name="value">Value to write in the element</param>
public static void WriteFullElementString(this XmlTextWriter writer, string localName, string value)
public static void WriteRequiredElementString(this XmlTextWriter writer, string localName, string value)
{
writer.WriteStartElement(localName);
writer.WriteRaw(value ?? string.Empty);