diff --git a/SabreTools.Filter/FilterObject.cs b/SabreTools.Filter/FilterObject.cs
index ca00df0f..57edd7ec 100644
--- a/SabreTools.Filter/FilterObject.cs
+++ b/SabreTools.Filter/FilterObject.cs
@@ -97,18 +97,24 @@ namespace SabreTools.Filter
if (checkValue == null)
return this.Value == null;
+ // If we have both a potentally boolean check and value
+ bool? checkValueBool = ConvertToBoolean(checkValue);
+ bool? matchValueBool = ConvertToBoolean(this.Value);
+ if (checkValueBool != null && matchValueBool != null)
+ return checkValueBool == matchValueBool;
+
// If we have both a potentially numeric check and value
if (NumberHelper.IsNumeric(checkValue) && NumberHelper.IsNumeric(this.Value))
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong == matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble == matchValueDouble;
}
@@ -134,18 +140,24 @@ namespace SabreTools.Filter
if (checkValue == null)
return this.Value == null;
+ // If we have both a potentally boolean check and value
+ bool? checkValueBool = ConvertToBoolean(checkValue);
+ bool? matchValueBool = ConvertToBoolean(this.Value);
+ if (checkValueBool != null && matchValueBool != null)
+ return checkValueBool != matchValueBool;
+
// If we have both a potentially numeric check and value
if (NumberHelper.IsNumeric(checkValue) && NumberHelper.IsNumeric(this.Value))
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong != matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble != matchValueDouble;
}
@@ -176,13 +188,13 @@ namespace SabreTools.Filter
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong > matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble > matchValueDouble;
}
@@ -209,13 +221,13 @@ namespace SabreTools.Filter
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong >= matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble >= matchValueDouble;
}
@@ -242,13 +254,13 @@ namespace SabreTools.Filter
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong < matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble < matchValueDouble;
}
@@ -275,13 +287,13 @@ namespace SabreTools.Filter
{
// Check Int64 values
long? checkValueLong = NumberHelper.ConvertToInt64(checkValue);
- long? matchValueLong = NumberHelper.ConvertToInt64(checkValue);
+ long? matchValueLong = NumberHelper.ConvertToInt64(this.Value);
if (checkValueLong != null && matchValueLong != null)
return checkValueLong <= matchValueLong;
// Check Double values
double? checkValueDouble = NumberHelper.ConvertToDouble(checkValue);
- double? matchValueDouble = NumberHelper.ConvertToDouble(checkValue);
+ double? matchValueDouble = NumberHelper.ConvertToDouble(this.Value);
if (checkValueDouble != null && matchValueDouble != null)
return checkValueDouble <= matchValueDouble;
}
@@ -330,6 +342,25 @@ namespace SabreTools.Filter
return false;
}
+ ///
+ /// Convert a string to a Boolean
+ ///
+ private bool? ConvertToBoolean(string? value)
+ {
+ // If we don't have a valid string, we can't do anything
+ if (string.IsNullOrWhiteSpace(value))
+ return null;
+
+ return value.ToLowerInvariant() switch
+ {
+ "true" => true,
+ "yes" => true,
+ "false" => false,
+ "no" => false,
+ _ => null,
+ };
+ }
+
///
/// Derive an operation from the input string, if possible
///