diff --git a/src/AngleSharp.Diffing/Core/CompareResult.cs b/src/AngleSharp.Diffing/Core/CompareResult.cs
index cd3de65..31f0f27 100644
--- a/src/AngleSharp.Diffing/Core/CompareResult.cs
+++ b/src/AngleSharp.Diffing/Core/CompareResult.cs
@@ -33,7 +33,22 @@ public readonly record struct CompareResult(CompareDecision Decision, IDiff? Dif
public static readonly CompareResult SkipAttributes = new(CompareDecision.SkipAttributes);
///
- /// Use when the comparison should skip any attributes.
+ /// Use when the comparison should skip any attributes but has element differences.
+ ///
+ public static readonly CompareResult DifferentAndSkipAttributes = new(CompareDecision.Different | CompareDecision.SkipAttributes);
+
+ ///
+ /// Use when the comparison should skip any attributes and children but has element differences.
+ ///
+ public static readonly CompareResult DifferentAndSkipChildrenAndSkipAttributes = new(CompareDecision.Different | CompareDecision.SkipChildren | CompareDecision.SkipAttributes);
+
+ ///
+ /// Use when the comparison should skip children but has element differences.
+ ///
+ public static readonly CompareResult DifferentAndSkipChildren = new(CompareDecision.Different | CompareDecision.SkipChildren);
+
+ ///
+ /// Use when the comparison should skip any children and any attributes.
///
public static readonly CompareResult SkipChildrenAndAttributes = new(CompareDecision.SkipChildren | CompareDecision.SkipAttributes);
@@ -50,7 +65,7 @@ public readonly record struct CompareResult(CompareDecision Decision, IDiff? Dif
public static CompareResult FromDiff(IDiff diff) => new(CompareDecision.Different, diff);
///
- /// Checks if a is either a or .
+ /// Checks if a is either a or .
///
- public bool IsSameOrSkip => this == Same || this == Skip;
+ public bool IsSameOrSkip => Decision.HasFlag(CompareDecision.Same) || Decision.HasFlag(CompareDecision.Skip);
}
\ No newline at end of file
diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
index a5cd052..2a31b55 100644
--- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
@@ -22,8 +22,9 @@ public static CompareResult Compare(in Comparison comparison, CompareResult curr
{
CompareDecision.None => CompareResult.SkipAttributes,
CompareDecision.Same => CompareResult.SkipAttributes,
- CompareDecision.Different => CompareResult.SkipAttributes,
+ CompareDecision.Different => CompareResult.DifferentAndSkipAttributes,
CompareDecision.SkipChildren => CompareResult.SkipChildrenAndAttributes,
+ CompareDecision.DifferentAndSkipChildren => CompareResult.DifferentAndSkipChildrenAndSkipAttributes,
_ => currentDecision,
};
}
diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs
index 966fe7b..3a7c588 100644
--- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs
@@ -12,7 +12,7 @@ public static class IgnoreChildrenElementComparer
///
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
{
- if (currentDecision == CompareResult.Skip || currentDecision == CompareResult.SkipChildren || currentDecision == CompareResult.SkipChildrenAndAttributes)
+ if (currentDecision.Decision.HasFlag(CompareDecision.SkipChildren) || currentDecision.Decision.HasFlag(CompareDecision.Skip))
return currentDecision;
if (!ControlHasTruthyIgnoreChildrenAttribute(comparison))
@@ -22,7 +22,8 @@ public static CompareResult Compare(in Comparison comparison, CompareResult curr
{
CompareDecision.None => CompareResult.SkipChildren,
CompareDecision.Same => CompareResult.SkipChildren,
- CompareDecision.Different => CompareResult.SkipChildren,
+ CompareDecision.Different => CompareResult.DifferentAndSkipChildren,
+ CompareDecision.DifferentAndSkipAttributes => CompareResult.DifferentAndSkipChildrenAndSkipAttributes,
CompareDecision.SkipAttributes => CompareResult.SkipChildrenAndAttributes,
_ => currentDecision,
};