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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -7,7 +7,16 @@ namespace SabreTools.Library.IO
/// </summary> /// </summary>
public static class XmlTextWriterExtensions 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> /// <summary>
/// Force writing separate open and start tags, even for empty elements /// 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="writer">XmlTextWriter to write out with</param>
/// <param name="localName">Name of the element</param> /// <param name="localName">Name of the element</param>
/// <param name="value">Value to write in 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.WriteStartElement(localName);
writer.WriteRaw(value ?? string.Empty); writer.WriteRaw(value ?? string.Empty);