From 3d93f6efed81b33f4dba2f364685058a2741c712 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 16 Dec 2020 11:03:59 -0800 Subject: [PATCH] Make exclusion list population similar to filter --- SabreTools.Filtering/Cleaner.cs | 146 +++++++++++++++++++---------- SabreTools/Features/BaseFeature.cs | 12 +-- 2 files changed, 102 insertions(+), 56 deletions(-) diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index 0d1df113..5e383030 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -125,6 +125,104 @@ namespace SabreTools.Filtering /// private Logger logger = new Logger(); + #endregion + + #region Population + + /// + /// Populate the exclusion objects using a set of field names + /// + /// List of field names + public void PopulateExclusionsFromList(List fields) + { + // Instantiate the lists, if necessary + ExcludeDatHeaderFields ??= new List(); + ExcludeMachineFields ??= new List(); + ExcludeDatItemFields ??= new List(); + + foreach (string field in fields) + { + // If we don't even have a possible field name + if (field == null) + continue; + + // DatHeader fields + DatHeaderField datHeaderField = field.AsDatHeaderField(); + if (datHeaderField != DatHeaderField.NULL) + { + ExcludeDatHeaderFields.Add(datHeaderField); + continue; + } + + // Machine fields + MachineField machineField = field.AsMachineField(); + if (machineField != MachineField.NULL) + { + ExcludeMachineFields.Add(machineField); + continue; + } + + // DatItem fields + DatItemField datItemField = field.AsDatItemField(); + if (datItemField != DatItemField.NULL) + { + ExcludeDatItemFields.Add(datItemField); + continue; + } + + // If we didn't match anything, log an error + logger.Warning($"The value {field} did not match any known field names. Please check the wiki for more details on supported field names."); + } + } + + /// + /// Populate the filters objects using a set of key:value filters + /// + /// List of key:value where ~key/!key is negated + public void PopulateFiltersFromList(List filters) + { + // Instantiate the filters, if necessary + DatHeaderFilter ??= new DatHeaderFilter(); + MachineFilter ??= new MachineFilter(); + DatItemFilter ??= new DatItemFilter(); + + foreach (string filterPair in filters) + { + (string field, string value, bool negate) = ProcessFilterPair(filterPair); + + // If we don't even have a possible filter pair + if (field == null && value == null) + continue; + + // DatHeader fields + DatHeaderField datHeaderField = field.AsDatHeaderField(); + if (datHeaderField != DatHeaderField.NULL) + { + DatHeaderFilter.SetFilter(datHeaderField, value, negate); + continue; + } + + // Machine fields + MachineField machineField = field.AsMachineField(); + if (machineField != MachineField.NULL) + { + MachineFilter.SetFilter(machineField, value, negate); + continue; + } + + // DatItem fields + DatItemField datItemField = field.AsDatItemField(); + if (datItemField != DatItemField.NULL) + { + DatItemFilter.SetFilter(datItemField, value, negate); + continue; + } + + // If we didn't match anything, log an error + logger.Warning($"The value {field} did not match any known field names. Please check the wiki for more details on supported field names."); + } + } + #endregion #region Cleaning @@ -342,54 +440,6 @@ namespace SabreTools.Filtering #region Filtering - /// - /// Populate the filters objects using a set of key:value filters - /// - /// List of key:value where ~key/!key is negated - public void PopulateFromList(List filters) - { - // Instantiate the filters, if necessary - DatHeaderFilter ??= new DatHeaderFilter(); - MachineFilter ??= new MachineFilter(); - DatItemFilter ??= new DatItemFilter(); - - foreach (string filterPair in filters) - { - (string field, string value, bool negate) = ProcessFilterPair(filterPair); - - // If we don't even have a possible filter pair - if (field == null && value == null) - continue; - - // DatHeader fields - DatHeaderField datHeaderField = field.AsDatHeaderField(); - if (datHeaderField != DatHeaderField.NULL) - { - DatHeaderFilter.SetFilter(datHeaderField, value, negate); - continue; - } - - // Machine fields - MachineField machineField = field.AsMachineField(); - if (machineField != MachineField.NULL) - { - MachineFilter.SetFilter(machineField, value, negate); - continue; - } - - // DatItem fields - DatItemField datItemField = field.AsDatItemField(); - if (datItemField != DatItemField.NULL) - { - DatItemFilter.SetFilter(datItemField, value, negate); - continue; - } - - // If we didn't match anything, log an error - logger.Warning($"The value {field} did not match any known field names. Please check the wiki for more details on supported field names."); - } - } - /// /// Split the parts of a filter statement /// diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index 5e0b914e..cd4f87f4 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -2688,17 +2688,13 @@ Some special strings that can be used: Trim = GetBoolean(features, TrimValue), }; - // Add field exclusions - foreach (string fieldName in GetList(features, ExcludeFieldListValue)) - { - cleaner.ExcludeDatHeaderFields.Add(fieldName.AsDatHeaderField()); - cleaner.ExcludeMachineFields.Add(fieldName.AsMachineField()); - cleaner.ExcludeDatItemFields.Add(fieldName.AsDatItemField()); - } + // Populate field exclusions + List exclusionFields = GetList(features, ExcludeFieldListValue); + cleaner.PopulateExclusionsFromList(exclusionFields); // Populate filters List filterPairs = GetList(features, FilterListValue); - cleaner.PopulateFromList(filterPairs); + cleaner.PopulateFiltersFromList(filterPairs); // Include 'of" in game filters cleaner.MachineFilter.IncludeOfInGame = GetBoolean(features, MatchOfTagsValue);