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);