private static function HTMLRestrictions::applyOperation in Drupal 10
Applies an operation (difference/intersection/union) with wildcard support.
Parameters
\Drupal\ckeditor5\HTMLRestrictions $a: The first operand.
\Drupal\ckeditor5\HTMLRestrictions $b: The second operand.
string $operation_method_name: The name of the private method on this class to use as the operation.
Return value
\Drupal\ckeditor5\HTMLRestrictions The result of the operation.
File
- core/
modules/ ckeditor5/ src/ HTMLRestrictions.php, line 827
Class
- HTMLRestrictions
- Represents a set of HTML restrictions.
Namespace
Drupal\ckeditor5Code
private static function applyOperation(HTMLRestrictions $a, HTMLRestrictions $b, string $operation_method_name) : HTMLRestrictions {
// 1. Operation applied to wildcard tags that exist in both operands.
// For example: <$text-container id> in both operands.
$a_wildcard = $a
->getWildcardSubset();
$b_wildcard = $b
->getWildcardSubset();
$wildcard_op_result = $a_wildcard
->{$operation_method_name}($b_wildcard);
// Early return if both operands contain only wildcard tags.
if (count($a_wildcard->elements) === count($a->elements) && count($b_wildcard->elements) === count($b->elements)) {
return $wildcard_op_result;
}
// 2. Operation applied with wildcard tags resolved into concrete tags.
// For example: <p class="text-align-center"> in the first operand and
// <$text-container class="text-align-center"> in the second
// operand.
$a_concrete = self::resolveWildcards($a);
$b_concrete = self::resolveWildcards($b);
$concrete_op_result = $a_concrete
->{$operation_method_name}($b_concrete);
// Using the PHP array union operator is safe because the two operation
// result arrays ensure there is no overlap between the array keys.
// @codingStandardsIgnoreStart
assert(Inspector::assertAll(function ($t) {
return self::isWildcardTag($t);
}, array_keys($wildcard_op_result->elements)));
assert(Inspector::assertAll(function ($t) {
return !self::isWildcardTag($t);
}, array_keys($concrete_op_result->elements)));
// @codingStandardsIgnoreEnd
return new self($concrete_op_result->elements + $wildcard_op_result->elements);
}